diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..b00d842
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,23 @@
+import js from '@eslint/js'
+import pluginVue from 'eslint-plugin-vue'
+
+export default [
+ js.configs.recommended,
+ ...pluginVue.configs['flat/recommended'],
+ {
+ languageOptions: {
+ ecmaVersion: 2022,
+ sourceType: 'module',
+ globals: {
+ console: 'readonly',
+ window: 'readonly',
+ document: 'readonly'
+ }
+ },
+ rules: {
+ 'no-console': 'warn',
+ 'no-unused-vars': 'warn',
+ 'vue/multi-word-component-names': 'off'
+ }
+ }
+]
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 524ca6e..b136efa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,11 @@
"vite": "^7.1.5",
"vue": "^3.5.21",
"vue-router": "^4.5.1"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.35.0",
+ "eslint": "^9.35.0",
+ "eslint-plugin-vue": "^10.4.0"
}
},
"node_modules/@babel/helper-string-parser": {
@@ -499,6 +504,147 @@
"node": ">=18"
}
},
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
+ "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz",
+ "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz",
+ "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.35.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz",
+ "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz",
+ "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.15.2",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/@floating-ui/core": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
@@ -524,6 +670,58 @@
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
"license": "MIT"
},
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
+ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
@@ -826,6 +1024,13 @@
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"license": "MIT"
},
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/lodash": {
"version": "4.17.20",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz",
@@ -1005,12 +1210,182 @@
"url": "https://github.com/sponsors/antfu"
}
},
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
"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/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -1023,6 +1398,31 @@
"integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
"license": "MIT"
},
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/echarts": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz",
@@ -1118,12 +1518,229 @@
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
"license": "MIT"
},
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.35.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz",
+ "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.0",
+ "@eslint/config-helpers": "^0.3.1",
+ "@eslint/core": "^0.15.2",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.35.0",
+ "@eslint/plugin-kit": "^0.3.5",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-vue": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.4.0.tgz",
+ "integrity": "sha512-K6tP0dW8FJVZLQxa2S7LcE1lLw3X8VvB3t887Q6CLrFVxHYBXGANbXvwNzYIu6Ughx1bSJ5BDT0YB3ybPT39lw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.1.1",
+ "postcss-selector-parser": "^6.0.15",
+ "semver": "^7.6.3",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^7.0.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "vue-eslint-parser": "^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/parser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT"
},
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
@@ -1141,6 +1758,57 @@
}
}
},
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -1155,6 +1823,183 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -1178,6 +2023,13 @@
"lodash-es": "*"
}
},
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/magic-string": {
"version": "0.30.19",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
@@ -1193,6 +2045,26 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
"license": "MIT"
},
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
@@ -1211,12 +2083,115 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
"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/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -1285,6 +2260,50 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/rollup": {
"version": "4.50.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz",
@@ -1325,6 +2344,42 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -1334,6 +2389,32 @@
"node": ">=0.10.0"
}
},
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -1356,6 +2437,36 @@
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
},
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/vite": {
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz",
@@ -1477,6 +2588,31 @@
}
}
},
+ "node_modules/vue-eslint-parser": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz",
+ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "debug": "^4.4.0",
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.6.0",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
"node_modules/vue-router": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz",
@@ -1492,6 +2628,55 @@
"vue": "^3.2.0"
}
},
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz",
diff --git a/package.json b/package.json
index b39b1f1..26c478c 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,8 @@
"scripts": {
"dev": "vite",
"build": "vite build",
- "preview": "vite preview"
+ "preview": "vite preview",
+ "lint": "eslint src --ext .vue,.js,.ts"
},
"keywords": [],
"author": "",
@@ -21,5 +22,10 @@
"vite": "^7.1.5",
"vue": "^3.5.21",
"vue-router": "^4.5.1"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.35.0",
+ "eslint": "^9.35.0",
+ "eslint-plugin-vue": "^10.4.0"
}
}
diff --git a/src/App.vue b/src/App.vue
index 4bca64f..3ef7785 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,10 +1,31 @@
-
+
+
+
@@ -27,4 +48,18 @@ body {
#app {
min-height: 100vh;
}
+
+.app-container {
+ min-height: 100vh;
+}
+
+.layout-fullscreen,
+.layout-enterprise {
+ height: 100vh;
+ overflow: hidden;
+}
+
+.layout-default {
+ min-height: 100vh;
+}
\ No newline at end of file
diff --git a/src/assets/styles/variables.css b/src/assets/styles/variables.css
index 4a32f57..7bc7dd5 100644
--- a/src/assets/styles/variables.css
+++ b/src/assets/styles/variables.css
@@ -83,6 +83,9 @@
--sidebar-width: 280px;
--container-max-width: 1200px;
+ /* 应用级背景 */
+ --bg-app: var(--bg-secondary);
+
/* 渐变色 */
--gradient-primary: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
--gradient-brand: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
diff --git a/src/components/AbilityRadarChart.vue b/src/components/AbilityRadarChart.vue
index 0056047..836370d 100644
--- a/src/components/AbilityRadarChart.vue
+++ b/src/components/AbilityRadarChart.vue
@@ -6,7 +6,7 @@
学生能力雷达图
- 综合评分: {{ averageScore }}
+ 综合评分: {{ averageScore }}分
班级排名: {{ rankInfo }}
@@ -15,7 +15,7 @@
{{ dimension }}
- {{ scores[index] }}
+ {{ scores[index] }}分
@@ -25,6 +25,8 @@
import { ref, onMounted, watch, nextTick } from 'vue'
import * as echarts from 'echarts'
import { TrendCharts } from '@element-plus/icons-vue'
+import { useRoute } from 'vue-router'
+import { mockPortraitData } from '@/utils/mockData'
export default {
name: 'AbilityRadarChart',
@@ -32,22 +34,32 @@ export default {
TrendCharts
},
props: {
- studentData: {
- type: Object,
- required: true
- },
dimensions: {
type: Array,
- default: () => ['理论基础', '实践能力', '创新思维', '团队协作', '沟通表达', '问题解决']
+ default: () => ['数据采集', '数据清洗', '工具实操', '等级判定', '沟通合作', '资源整合']
}
},
setup(props) {
+ const route = useRoute()
const chartContainer = ref(null)
let chartInstance = null
- const scores = ref(props.studentData?.scores || [0, 0, 0, 0, 0, 0])
- const averageScore = ref(props.studentData?.average || 0)
- const rankInfo = ref(`${props.studentData?.rank || 0}/${props.studentData?.totalStudents || 0}`)
+ // 直接从路由获取学生ID并读取数据
+ const studentId = ref(parseInt(route.params.studentId))
+ const studentData = ref(null)
+ const scores = ref([0, 0, 0, 0, 0, 0])
+ const averageScore = ref(0)
+ const rankInfo = ref('0/0')
+
+ // 直接从mockData读取数据
+ const loadStudentData = () => {
+ if (studentId.value && mockPortraitData.abilityRadar.students[studentId.value]) {
+ studentData.value = mockPortraitData.abilityRadar.students[studentId.value]
+ scores.value = studentData.value.scores || [0, 0, 0, 0, 0, 0]
+ averageScore.value = studentData.value.average || 0
+ rankInfo.value = `${studentData.value.rank || 0}/${studentData.value.totalStudents || 0}`
+ }
+ }
// 配置常量
const CHART_CONFIG = {
@@ -70,6 +82,7 @@ export default {
const getColor = (index) => colors[index % colors.length]
+
const initChart = () => {
if (!chartContainer.value) return
@@ -80,7 +93,7 @@ export default {
tooltip: {
trigger: 'item',
formatter: function(params) {
- return `${params.name}
得分: ${params.value}`
+ return `${params.name}
得分: ${params.value}分`
},
backgroundColor: getCSSVariable('--bg-primary'),
borderColor: getCSSVariable('--border'),
@@ -149,7 +162,7 @@ export default {
data: [
{
value: scores.value,
- name: props.studentData?.name || '学生'
+ name: studentData.value?.name || '学生'
}
]
}
@@ -165,31 +178,36 @@ export default {
}
}
+ const updateChart = () => {
+ if (chartInstance && studentData.value) {
+ chartInstance.setOption({
+ series: [{
+ data: [{
+ value: scores.value,
+ name: studentData.value.name || '学生'
+ }]
+ }]
+ })
+ }
+ }
+
onMounted(() => {
nextTick(() => {
+ loadStudentData()
initChart()
+ updateChart()
window.addEventListener('resize', resizeChart)
})
})
- watch(() => props.studentData, (newData) => {
- if (newData) {
- scores.value = newData.scores || [0, 0, 0, 0, 0, 0]
- averageScore.value = newData.average || 0
- rankInfo.value = `${newData.rank || 0}/${newData.totalStudents || 0}`
-
- if (chartInstance) {
- chartInstance.setOption({
- series: [{
- data: [{
- value: scores.value,
- name: newData.name || '学生'
- }]
- }]
- })
- }
+ // 监听路由变化
+ watch(() => route.params.studentId, (newId) => {
+ if (newId) {
+ studentId.value = parseInt(newId)
+ loadStudentData()
+ updateChart()
}
- }, { deep: true })
+ })
return {
chartContainer,
diff --git a/src/router/index.js b/src/router/index.js
index c704521..5dd5cfe 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -13,6 +13,12 @@ const routes = [
component: () => import('@/views/BigScreenPortrait.vue'),
meta: { layout: 'fullscreen' }
},
+ {
+ path: '/enterprise-mentor',
+ name: 'EnterpriseMentor',
+ component: () => import('@/views/EnterpriseMentor.vue'),
+ meta: { layout: 'enterprise' }
+ },
{
path: '/home',
name: 'Home',
diff --git a/src/utils/mockData.js b/src/utils/mockData.js
index 3fcfc0f..6601428 100644
--- a/src/utils/mockData.js
+++ b/src/utils/mockData.js
@@ -1,41 +1,63 @@
// Mock用户数据
export const mockUsers = [
- { username: 'student1', password: '123456', role: 'student', name: '张志明', avatar: '/avatar/student1.jpg' },
+ { username: 'student1', password: '123456', role: 'student', name: '陈俐璇', avatar: '/avatar/student1.jpg' },
{ username: 'teacher1', password: '123456', role: 'teacher', name: '刘澜涛', avatar: '/avatar/teacher1.jpg' },
{ username: 'company1', password: '123456', role: 'company', name: '华为技术有限公司', avatar: '/avatar/company1.jpg' },
{ username: 'expert1', password: '123456', role: 'expert', name: '王专家', avatar: '/avatar/expert1.jpg' },
- { username: 'student2', password: '123456', role: 'student', name: '李梦瑶', avatar: '/avatar/student2.jpg' },
- { username: 'student3', password: '123456', role: 'student', name: '王浩然', avatar: '/avatar/student3.jpg' }
+ { username: 'student2', password: '123456', role: 'student', name: '褚宪航', avatar: '/avatar/student2.jpg' },
+ { username: 'student3', password: '123456', role: 'student', name: '邓嘉仪', avatar: '/avatar/student3.jpg' }
]
// Mock项目选择数据
export const mockOptions = {
- semesters: ['2023-2024-1', '2023-2024-2', '2024-2025-1'],
- grades: ['2021级', '2022级', '2023级', '2024级'],
- classes: ['计科1班', '计科2班', '软工1班', '软工2班', '数媒1班', '人工智能1班'],
- projects: [
- '华为云计算实训项目',
- '腾讯前端开发实习',
- '阿里巴巴数据分析项目',
- '百度AI算法实践',
- '字节跳动移动开发实训',
- '美团后端服务开发',
- '滴滴出行数据挖掘项目'
- ]
+ semesters: ['2021-2022-1'],
+ grades: ['2019级'],
+ classes: ['投资学'],
+ projects: ['智能投顾实践项目']
}
// Mock扩展学生数据
export const mockStudents = [
- { id: 1, name: '张志明', studentId: '202101001', grade: '2021级', class: '计科1班', phone: '13812345678', email: 'zhangzm@example.com' },
- { id: 2, name: '李梦瑶', studentId: '202101002', grade: '2021级', class: '计科1班', phone: '13912345678', email: 'limy@example.com' },
- { id: 3, name: '王浩然', studentId: '202101003', grade: '2021级', class: '计科1班', phone: '13712345678', email: 'wanghr@example.com' },
- { id: 4, name: '赵雨桐', studentId: '202101004', grade: '2021级', class: '计科1班', phone: '13612345678', email: 'zhaoyt@example.com' },
- { id: 5, name: '陈思远', studentId: '202101005', grade: '2021级', class: '计科1班', phone: '13512345678', email: 'chensy@example.com' },
- { id: 6, name: '刘佳怡', studentId: '202102001', grade: '2021级', class: '计科2班', phone: '13412345678', email: 'liujy@example.com' },
- { id: 7, name: '杨宇轩', studentId: '202102002', grade: '2021级', class: '计科2班', phone: '13312345678', email: 'yangyx@example.com' },
- { id: 8, name: '周晓彤', studentId: '202201001', grade: '2022级', class: '软工1班', phone: '13212345678', email: 'zhouxt@example.com' },
- { id: 9, name: '马俊杰', studentId: '202201002', grade: '2022级', class: '软工1班', phone: '13112345678', email: 'majj@example.com' },
- { id: 10, name: '林诗雨', studentId: '202202001', grade: '2022级', class: '软工2班', phone: '13012345678', email: 'linsy@example.com' }
+ { id: 1, name: '陈俐璇', studentId: '190505120101', grade: '2019级', class: '投资学', phone: '13812345678', email: 'chenlx@example.com' },
+ { id: 2, name: '褚宪航', studentId: '190505120102', grade: '2019级', class: '投资学', phone: '13912345678', email: 'chuxh@example.com' },
+ { id: 3, name: '邓嘉仪', studentId: '190505120103', grade: '2019级', class: '投资学', phone: '13712345678', email: 'dengjy@example.com' },
+ { id: 4, name: '韩振宇', studentId: '190505120104', grade: '2019级', class: '投资学', phone: '13612345678', email: 'hanzy@example.com' },
+ { id: 5, name: '何千禧', studentId: '190505120105', grade: '2019级', class: '投资学', phone: '13512345678', email: 'heqx@example.com' },
+ { id: 6, name: '贾丹丹', studentId: '190505120106', grade: '2019级', class: '投资学', phone: '13412345678', email: 'jiadd@example.com' },
+ { id: 7, name: '金光日', studentId: '190505120107', grade: '2019级', class: '投资学', phone: '13312345678', email: 'jingr@example.com' },
+ { id: 8, name: '李慧欣', studentId: '190505120108', grade: '2019级', class: '投资学', phone: '13212345678', email: 'lihx@example.com' },
+ { id: 9, name: '李琪', studentId: '190505120109', grade: '2019级', class: '投资学', phone: '13112345678', email: 'liqi@example.com' },
+ { id: 10, name: '李双双', studentId: '190505120110', grade: '2019级', class: '投资学', phone: '13012345678', email: 'liss@example.com' },
+ { id: 11, name: '李硕', studentId: '190505120111', grade: '2019级', class: '投资学', phone: '13912345679', email: 'lishuo@example.com' },
+ { id: 12, name: '李芸灿', studentId: '190505120112', grade: '2019级', class: '投资学', phone: '13812345679', email: 'liyc@example.com' },
+ { id: 13, name: '刘菲', studentId: '190505120113', grade: '2019级', class: '投资学', phone: '13712345679', email: 'liufei@example.com' },
+ { id: 14, name: '刘俊祺', studentId: '190505120114', grade: '2019级', class: '投资学', phone: '13612345679', email: 'liujq@example.com' },
+ { id: 15, name: '刘正涛', studentId: '190505120115', grade: '2019级', class: '投资学', phone: '13512345679', email: 'liuzt@example.com' },
+ { id: 16, name: '毛玮婷', studentId: '190505120116', grade: '2019级', class: '投资学', phone: '13412345679', email: 'maowt@example.com' },
+ { id: 17, name: '司慧峰', studentId: '190505120117', grade: '2019级', class: '投资学', phone: '13312345679', email: 'sihf@example.com' },
+ { id: 18, name: '孙明悦', studentId: '190505120118', grade: '2019级', class: '投资学', phone: '13212345679', email: 'sunmy@example.com' },
+ { id: 19, name: '王浩程', studentId: '190505120119', grade: '2019级', class: '投资学', phone: '13112345679', email: 'wanghc@example.com' },
+ { id: 20, name: '王清泉', studentId: '190505120120', grade: '2019级', class: '投资学', phone: '13012345679', email: 'wangqq@example.com' },
+ { id: 21, name: '王庆嘉', studentId: '190505120121', grade: '2019级', class: '投资学', phone: '13912345680', email: 'wangqj@example.com' },
+ { id: 22, name: '王杨', studentId: '190505120122', grade: '2019级', class: '投资学', phone: '13812345680', email: 'wangyang@example.com' },
+ { id: 23, name: '王月明', studentId: '190505120123', grade: '2019级', class: '投资学', phone: '13712345680', email: 'wangym@example.com' },
+ { id: 24, name: '魏冰冰', studentId: '190505120124', grade: '2019级', class: '投资学', phone: '13612345680', email: 'weibb@example.com' },
+ { id: 25, name: '肖璟', studentId: '190505120125', grade: '2019级', class: '投资学', phone: '13512345680', email: 'xiaojing@example.com' },
+ { id: 26, name: '谢知谕', studentId: '190505120126', grade: '2019级', class: '投资学', phone: '13412345680', email: 'xiezh@example.com' },
+ { id: 27, name: '薛欣然', studentId: '190505120127', grade: '2019级', class: '投资学', phone: '13312345680', email: 'xuexr@example.com' },
+ { id: 28, name: '尤晨羲', studentId: '190505120128', grade: '2019级', class: '投资学', phone: '13212345680', email: 'youcx@example.com' },
+ { id: 29, name: '于维娇', studentId: '190505120129', grade: '2019级', class: '投资学', phone: '13112345680', email: 'yuwj@example.com' },
+ { id: 30, name: '翟欣婷', studentId: '190505120130', grade: '2019级', class: '投资学', phone: '13012345680', email: 'zhaixt@example.com' },
+ { id: 31, name: '张朝阳', studentId: '190505120131', grade: '2019级', class: '投资学', phone: '13912345681', email: 'zhangcy@example.com' },
+ { id: 32, name: '张富长', studentId: '190505120132', grade: '2019级', class: '投资学', phone: '13812345681', email: 'zhangfc@example.com' },
+ { id: 33, name: '张龙薇', studentId: '190505120133', grade: '2019级', class: '投资学', phone: '13712345681', email: 'zhanglw@example.com' },
+ { id: 34, name: '张仁健', studentId: '190505120134', grade: '2019级', class: '投资学', phone: '13612345681', email: 'zhangrj@example.com' },
+ { id: 35, name: '张笑', studentId: '190505120135', grade: '2019级', class: '投资学', phone: '13512345681', email: 'zhangxiao@example.com' },
+ { id: 36, name: '赵月泰', studentId: '190505120136', grade: '2019级', class: '投资学', phone: '13412345681', email: 'zhaoyt@example.com' },
+ { id: 37, name: '郑婕', studentId: '190505120137', grade: '2019级', class: '投资学', phone: '13312345681', email: 'zhengjie@example.com' },
+ { id: 38, name: '周昱宁', studentId: '190505120138', grade: '2019级', class: '投资学', phone: '13212345681', email: 'zhouyn@example.com' },
+ { id: 39, name: '周思莹', studentId: '190505120139', grade: '2019级', class: '投资学', phone: '13112345681', email: 'zhousy@example.com' },
+ { id: 40, name: '朱紫', studentId: '190505120140', grade: '2019级', class: '投资学', phone: '13012345681', email: 'zhuzi@example.com' }
]
// Mock评价数据存储
@@ -49,8 +71,8 @@ export const mockEvaluationData = {
problemSolving: 4.0,
overall: 'good',
suggestions: '学生表现良好,专业技能扎实,建议加强项目实战经验。',
- evaluatedAt: '2024-12-10T10:30:00Z',
- evaluatorName: '华为技术有限公司'
+ evaluatedAt: '2022-01-10T10:30:00Z',
+ evaluatorName: '中信证券'
},
2: {
attitude: 4.8,
@@ -58,9 +80,9 @@ export const mockEvaluationData = {
communication: 4.6,
problemSolving: 4.7,
overall: 'excellent',
- suggestions: '优秀学生,具备很强的学习能力和解决问题的能力。',
- evaluatedAt: '2024-12-09T14:20:00Z',
- evaluatorName: '华为技术有限公司'
+ suggestions: '优秀学生,具备很强的投资分析和学习能力。',
+ evaluatedAt: '2022-01-09T14:20:00Z',
+ evaluatorName: '华泰证券'
},
3: {
attitude: 4.2,
@@ -68,9 +90,9 @@ export const mockEvaluationData = {
communication: 4.1,
problemSolving: 4.3,
overall: 'good',
- suggestions: '技术基础扎实,沟通能力需要提升,整体表现良好。',
- evaluatedAt: '2024-12-08T16:45:00Z',
- evaluatorName: '腾讯科技有限公司'
+ suggestions: '投资理论基础扎实,沟通能力需要提升,整体表现良好。',
+ evaluatedAt: '2022-01-08T16:45:00Z',
+ evaluatorName: '招商证券'
},
4: {
attitude: 3.8,
@@ -78,9 +100,9 @@ export const mockEvaluationData = {
communication: 4.0,
problemSolving: 3.7,
overall: 'average',
- suggestions: '基础能力尚可,需要加强专业技能训练和问题解决能力。',
- evaluatedAt: '2024-12-07T09:30:00Z',
- evaluatorName: '阿里巴巴集团'
+ suggestions: '基础能力尚可,需要加强投资实践技能训练。',
+ evaluatedAt: '2022-01-07T09:30:00Z',
+ evaluatorName: '国泰君安'
},
5: {
attitude: 4.6,
@@ -88,9 +110,9 @@ export const mockEvaluationData = {
communication: 4.5,
problemSolving: 4.9,
overall: 'excellent',
- suggestions: '表现突出,技术能力强,具有很好的发展潜力。',
- evaluatedAt: '2024-12-06T14:15:00Z',
- evaluatorName: '百度科技'
+ suggestions: '表现突出,投资分析能力强,具有很好的发展潜力。',
+ evaluatedAt: '2022-01-06T14:15:00Z',
+ evaluatorName: '海通证券'
},
6: {
attitude: 4.0,
@@ -98,9 +120,9 @@ export const mockEvaluationData = {
communication: 3.9,
problemSolving: 4.2,
overall: 'good',
- suggestions: '工作认真负责,技术能力稳定,建议多参与复杂项目。',
- evaluatedAt: '2024-12-05T11:20:00Z',
- evaluatorName: '字节跳动'
+ suggestions: '工作认真负责,投资能力稳定,建议多参与复杂项目。',
+ evaluatedAt: '2022-01-05T11:20:00Z',
+ evaluatorName: '广发证券'
},
7: {
attitude: 4.3,
@@ -108,9 +130,9 @@ export const mockEvaluationData = {
communication: 4.4,
problemSolving: 4.1,
overall: 'good',
- suggestions: '沟通能力优秀,技术水平良好,团队合作意识强。',
- evaluatedAt: '2024-12-04T15:30:00Z',
- evaluatorName: '美团科技'
+ suggestions: '沟通能力优秀,投资水平良好,团队合作意识强。',
+ evaluatedAt: '2022-01-04T15:30:00Z',
+ evaluatorName: '兴业证券'
}
},
@@ -123,7 +145,7 @@ export const mockEvaluationData = {
attitude: 4.5,
courseGrade: 88.5,
comments: '该学生理论基础扎实,实践能力良好,建议在创新思维方面多下功夫。',
- evaluatedAt: '2024-12-08T16:45:00Z',
+ evaluatedAt: '2022-01-15T16:45:00Z',
evaluatorName: '刘澜涛'
},
2: {
@@ -132,8 +154,8 @@ export const mockEvaluationData = {
innovation: 4.5,
attitude: 4.8,
courseGrade: 94.5,
- comments: '优秀学生,各方面表现突出,理论与实践结合能力强,创新意识优秀。',
- evaluatedAt: '2024-12-09T10:30:00Z',
+ comments: '优秀学生,各方面表现突出,理论与实践结合能力强,投资创新意识优秀。',
+ evaluatedAt: '2022-01-16T10:30:00Z',
evaluatorName: '刘澜涛'
},
3: {
@@ -142,8 +164,8 @@ export const mockEvaluationData = {
innovation: 4.2,
attitude: 4.7,
courseGrade: 92.0,
- comments: '表现优异,理论与实践结合能力强,具有良好的创新潜质。',
- evaluatedAt: '2024-12-07T11:15:00Z',
+ comments: '表现优异,投资理论与实践结合能力强,具有良好的创新潜质。',
+ evaluatedAt: '2022-01-14T11:15:00Z',
evaluatorName: '刘澜涛'
},
4: {
@@ -152,8 +174,8 @@ export const mockEvaluationData = {
innovation: 3.5,
attitude: 4.0,
courseGrade: 82.0,
- comments: '基础扎实,但实践和创新能力有待提升,学习态度认真。',
- evaluatedAt: '2024-12-06T14:20:00Z',
+ comments: '基础扎实,但投资实践和创新能力有待提升,学习态度认真。',
+ evaluatedAt: '2022-01-13T14:20:00Z',
evaluatorName: '王老师'
},
5: {
@@ -162,8 +184,8 @@ export const mockEvaluationData = {
innovation: 4.7,
attitude: 4.9,
courseGrade: 96.0,
- comments: '表现卓越,理论功底深厚,实践能力强,创新思维活跃,学习态度积极。',
- evaluatedAt: '2024-12-05T09:45:00Z',
+ comments: '表现卓越,投资理论功底深厚,实践能力强,创新思维活跃。',
+ evaluatedAt: '2022-01-12T09:45:00Z',
evaluatorName: '张老师'
},
6: {
@@ -172,8 +194,8 @@ export const mockEvaluationData = {
innovation: 3.9,
attitude: 4.3,
courseGrade: 86.5,
- comments: '学习认真,基础知识掌握良好,实践能力不错,需加强创新思维培养。',
- evaluatedAt: '2024-12-04T13:15:00Z',
+ comments: '学习认真,投资基础知识掌握良好,需加强创新思维培养。',
+ evaluatedAt: '2022-01-11T13:15:00Z',
evaluatorName: '赵老师'
},
7: {
@@ -182,8 +204,8 @@ export const mockEvaluationData = {
innovation: 4.0,
attitude: 4.4,
courseGrade: 87.0,
- comments: '表现均衡,各项能力发展较为稳定,学习态度良好。',
- evaluatedAt: '2024-12-03T16:30:00Z',
+ comments: '表现均衡,各项投资能力发展较为稳定,学习态度良好。',
+ evaluatedAt: '2022-01-10T16:30:00Z',
evaluatorName: '陈老师'
},
8: {
@@ -192,8 +214,8 @@ export const mockEvaluationData = {
innovation: 3.4,
attitude: 3.9,
courseGrade: 79.5,
- comments: '基础有待加强,需要更多的练习和指导,学习态度较好。',
- evaluatedAt: '2024-12-02T11:45:00Z',
+ comments: '投资基础有待加强,需要更多的练习和指导,学习态度较好。',
+ evaluatedAt: '2022-01-09T11:45:00Z',
evaluatorName: '刘老师'
}
},
@@ -205,9 +227,9 @@ export const mockEvaluationData = {
technicalDepth: 3.9,
applicationAbility: 4.2,
potential: 4.3,
- professionalAdvice: '技术基础较好,行业认知需要提升,建议多关注前沿技术发展。',
+ professionalAdvice: '投资基础较好,行业认知需要提升,建议多关注金融前沿发展。',
recommendation: 'recommend',
- evaluatedAt: '2024-12-08T10:15:00Z',
+ evaluatedAt: '2022-01-18T10:15:00Z',
evaluatorName: '张专家'
},
2: {
@@ -215,9 +237,9 @@ export const mockEvaluationData = {
technicalDepth: 4.0,
applicationAbility: 4.3,
potential: 4.5,
- professionalAdvice: '从行业发展角度看,该学生具备较强的技术基础和学习能力,建议重点关注新兴技术的学习。',
+ professionalAdvice: '从投资行业发展角度看,该学生具备较强的理论基础和学习能力。',
recommendation: 'recommend',
- evaluatedAt: '2024-12-06T09:30:00Z',
+ evaluatedAt: '2022-01-17T09:30:00Z',
evaluatorName: '王专家'
},
3: {
@@ -225,9 +247,19 @@ export const mockEvaluationData = {
technicalDepth: 4.2,
applicationAbility: 4.1,
potential: 4.6,
- professionalAdvice: '行业理解深入,技术应用能力强,具有很好的职业发展前景。',
+ professionalAdvice: '投资行业理解深入,实践应用能力强,具有很好的职业发展前景。',
recommendation: 'strongly_recommend',
- evaluatedAt: '2024-12-05T14:45:00Z',
+ evaluatedAt: '2022-01-16T14:45:00Z',
+ evaluatorName: '李专家'
+ },
+ 4: {
+ industryKnowledge: 3.6,
+ technicalDepth: 3.7,
+ applicationAbility: 3.8,
+ potential: 3.9,
+ professionalAdvice: '基础能力一般,需要加强投资行业知识学习和实践能力提升。',
+ recommendation: 'conditional_recommend',
+ evaluatedAt: '2022-01-15T09:30:00Z',
evaluatorName: '李专家'
},
5: {
@@ -235,9 +267,9 @@ export const mockEvaluationData = {
technicalDepth: 4.7,
applicationAbility: 4.9,
potential: 4.9,
- professionalAdvice: '优秀的技术人才,行业洞察深刻,应用能力出色,强烈推荐重点培养。',
+ professionalAdvice: '优秀的投资人才,行业洞察深刻,应用能力出色,强烈推荐重点培养。',
recommendation: 'strongly_recommend',
- evaluatedAt: '2024-12-04T11:20:00Z',
+ evaluatedAt: '2022-01-14T11:20:00Z',
evaluatorName: '赵专家'
},
6: {
@@ -245,9 +277,9 @@ export const mockEvaluationData = {
technicalDepth: 3.9,
applicationAbility: 4.0,
potential: 4.1,
- professionalAdvice: '基础扎实,需要加强对行业发展趋势的理解和把握。',
+ professionalAdvice: '基础扎实,需要加强对投资行业发展趋势的理解和把握。',
recommendation: 'recommend',
- evaluatedAt: '2024-12-03T16:30:00Z',
+ evaluatedAt: '2022-01-13T16:30:00Z',
evaluatorName: '陈专家'
},
7: {
@@ -255,10 +287,20 @@ export const mockEvaluationData = {
technicalDepth: 3.8,
applicationAbility: 4.2,
potential: 4.0,
- professionalAdvice: '应用能力较强,技术深度需要进一步加强,发展潜力良好。',
+ professionalAdvice: '投资应用能力较强,理论深度需要进一步加强,发展潜力良好。',
recommendation: 'recommend',
- evaluatedAt: '2024-12-02T13:15:00Z',
+ evaluatedAt: '2022-01-12T13:15:00Z',
evaluatorName: '吴专家'
+ },
+ 8: {
+ industryKnowledge: 3.4,
+ technicalDepth: 3.5,
+ applicationAbility: 3.6,
+ potential: 3.7,
+ professionalAdvice: '投资基础知识掌握尚可,但在行业认知和理论深度方面需要加强学习。',
+ recommendation: 'conditional_recommend',
+ evaluatedAt: '2022-01-11T14:30:00Z',
+ evaluatorName: '周专家'
}
},
@@ -266,25 +308,91 @@ export const mockEvaluationData = {
submissions: {
1: {
submitted: true,
- projectName: '在线学习管理系统',
- projectDescription: '基于Vue.js和Spring Boot开发的在线学习管理系统,支持课程管理、作业提交、成绩查询等功能。',
- techStack: ['Vue.js', 'Spring Boot', 'MySQL', 'Redis'],
- contributions: '负责前端页面开发、用户权限管理模块以及部分后端API开发。完成了用户登录、课程列表、作业管理等核心功能。',
- challenges: '在开发过程中遇到了跨域问题和数据库性能优化问题,通过配置CORS和添加数据库索引得到解决。',
- learnings: '通过本次项目,深入学习了前后端分离开发模式,掌握了Vue组件化开发和Spring Boot微服务架构,提升了团队协作能力。',
+ projectName: '智能投顾实践项目',
+ projectDescription: '基于机器学习和大数据分析的智能投资顾问系统开发,实现投资组合优化、风险评估和智能推荐功能。',
+ techStack: ['Python', 'TensorFlow', 'Vue.js', 'MySQL', 'Redis'],
+ contributions: '负责投资策略算法设计与实现,完成了风险评估模型、投资组合优化算法和用户画像分析等核心功能。',
+ challenges: '在开发过程中遇到了金融数据处理和实时计算性能问题,通过优化算法和引入缓存机制得到解决。',
+ learnings: '通过本次项目,深入学习了量化投资理论,掌握了机器学习在金融领域的应用,提升了金融科技开发能力。',
selfRating: { completion: 4.2, quality: 4.0, innovation: 3.8 },
- submittedAt: '2024-12-05T18:20:00Z'
+ submittedAt: '2022-01-20T18:20:00Z'
},
2: {
submitted: true,
- projectName: '智能推荐算法研究',
- projectDescription: '基于机器学习的电商推荐算法研究与实现,采用协同过滤和内容推荐相结合的混合推荐方式。',
+ projectName: '智能投顾实践项目',
+ projectDescription: '基于机器学习和大数据分析的智能投资顾问系统开发,专注于个性化投资建议和风险控制功能。',
techStack: ['Python', 'TensorFlow', 'Pandas', 'Scikit-learn'],
- contributions: '负责推荐算法的设计与实现,包括数据预处理、特征工程、模型训练和效果评估。',
- challenges: '数据稀疏性和冷启动问题是主要挑战,通过引入物品特征和用户画像得到缓解。',
- learnings: '深入理解了推荐系统的原理和应用,掌握了机器学习在实际业务中的应用方法。',
+ contributions: '负责用户风险偏好模型的设计与实现,包括数据预处理、特征工程、模型训练和效果评估。',
+ challenges: '金融数据的复杂性和市场波动性是主要挑战,通过引入多因子模型和动态调整机制得到缓解。',
+ learnings: '深入理解了量化投资的原理和应用,掌握了机器学习在金融科技领域的实际应用方法。',
selfRating: { completion: 4.5, quality: 4.3, innovation: 4.6 },
- submittedAt: '2024-12-04T16:15:00Z'
+ submittedAt: '2022-01-19T16:15:00Z'
+ },
+ 3: {
+ submitted: true,
+ projectName: '智能投顾实践项目',
+ projectDescription: '基于移动端的智能投资顾问应用开发,实现了用户投资偏好分析、智能推荐和投资组合管理等核心功能。',
+ techStack: ['React Native', 'Redux', 'Chart.js', 'Expo'],
+ contributions: '负责移动端界面设计与开发,实现了投资数据可视化和用户交互功能。',
+ challenges: '金融数据实时更新和移动端性能优化是主要挑战,通过数据缓存和懒加载解决。',
+ learnings: '掌握了金融APP开发技术栈,提升了金融科技移动端开发能力。',
+ selfRating: { completion: 4.1, quality: 4.0, innovation: 3.9 },
+ submittedAt: '2022-01-18T14:30:00Z'
+ },
+ 4: {
+ submitted: false,
+ projectName: '',
+ projectDescription: '',
+ techStack: [],
+ contributions: '',
+ challenges: '',
+ learnings: '',
+ selfRating: { completion: 0, quality: 0, innovation: 0 },
+ submittedAt: null
+ },
+ 5: {
+ submitted: true,
+ projectName: '智能投顾实践项目',
+ projectDescription: '基于区块链技术的去中心化智能投顾平台开发,实现了智能合约投资和数字资产管理功能。',
+ techStack: ['Solidity', 'Web3.js', 'Python', 'MetaMask'],
+ contributions: '负责区块链投资合约设计与开发,完成了自动化投资、收益分配、风险控制等核心功能。',
+ challenges: 'Gas费用优化和投资策略安全性是主要挑战,通过算法优化和多重签名解决。',
+ learnings: '深入了解了区块链在金融领域的应用,掌握了去中心化金融(DeFi)开发技能。',
+ selfRating: { completion: 4.3, quality: 4.5, innovation: 4.7 },
+ submittedAt: '2022-01-17T10:45:00Z'
+ },
+ 6: {
+ submitted: true,
+ projectName: '智能投顾实践项目',
+ projectDescription: '基于大数据的智能投顾分析平台,实现了金融数据清洗、量化分析和投资策略可视化功能。',
+ techStack: ['Apache Spark', 'Python', 'HDFS', 'Kafka'],
+ contributions: '负责金融数据处理管道设计,实现了实时市场数据处理和投资策略回测分析。',
+ challenges: '金融数据量大和实时性要求高是主要挑战,通过分布式计算和流式处理优化解决。',
+ learnings: '掌握了金融大数据处理技术,提升了量化投资分析能力。',
+ selfRating: { completion: 4.0, quality: 4.2, innovation: 4.1 },
+ submittedAt: '2022-01-16T16:20:00Z'
+ },
+ 7: {
+ submitted: true,
+ projectName: '智能投顾实践项目',
+ projectDescription: '基于深度学习的智能投顾系统,支持市场情绪分析、价格预测和智能决策功能。',
+ techStack: ['PyTorch', 'TensorFlow', 'Flask', 'Docker'],
+ contributions: '负责AI模型训练和投资策略API开发,实现了高精度的市场预测功能。',
+ challenges: '模型预测精度和实时性的平衡是主要挑战,通过模型优化和云端部署解决。',
+ learnings: '深入学习了AI在金融领域的应用,掌握了智能投顾系统开发流程。',
+ selfRating: { completion: 4.4, quality: 4.3, innovation: 4.5 },
+ submittedAt: '2022-01-15T12:15:00Z'
+ },
+ 8: {
+ submitted: false,
+ projectName: '',
+ projectDescription: '',
+ techStack: [],
+ contributions: '',
+ challenges: '',
+ learnings: '',
+ selfRating: { completion: 0, quality: 0, innovation: 0 },
+ submittedAt: null
}
}
}
@@ -293,52 +401,348 @@ export const mockEvaluationData = {
export const mockPortraitData = {
// 6维度能力雷达图数据
abilityRadar: {
- dimensions: ['理论基础', '实践能力', '创新思维', '团队协作', '沟通表达', '问题解决'],
+ dimensions: ['数据采集', '数据清洗', '工具实操', '等级判定', '沟通合作', '资源整合'],
students: {
- 1: { // 张志明
- name: '张志明',
- studentId: '202101001',
+ 1: { // 陈俐璇
+ name: '陈俐璇',
+ studentId: '190505120101',
scores: [85, 92, 78, 88, 82, 90], // 对应6个维度的得分
average: 85.8,
rank: 2, // 班级排名
- totalStudents: 30
+ totalStudents: 40
},
- 2: { // 李梦瑶
- name: '李梦瑶',
- studentId: '202101002',
+ 2: { // 褚宪航
+ name: '褚宪航',
+ studentId: '190505120102',
scores: [90, 85, 95, 82, 88, 85],
average: 87.5,
rank: 1,
- totalStudents: 30
+ totalStudents: 40
},
- 3: { // 王浩然
- name: '王浩然',
- studentId: '202101003',
+ 3: { // 邓嘉仪
+ name: '邓嘉仪',
+ studentId: '190505120103',
scores: [82, 88, 80, 90, 85, 87],
average: 85.3,
rank: 3,
- totalStudents: 30
+ totalStudents: 40
+ },
+ 4: { // 韩振宇
+ name: '韩振宇',
+ studentId: '190505120104',
+ scores: [78, 82, 85, 80, 88, 83],
+ average: 82.7,
+ rank: 8,
+ totalStudents: 40
+ },
+ 5: { // 何千禧
+ name: '何千禧',
+ studentId: '190505120105',
+ scores: [88, 90, 82, 85, 92, 89],
+ average: 87.7,
+ rank: 1,
+ totalStudents: 40
+ },
+ 6: { // 贾丹丹
+ name: '贾丹丹',
+ studentId: '190505120106',
+ scores: [80, 84, 78, 82, 86, 85],
+ average: 82.5,
+ rank: 9,
+ totalStudents: 40
+ },
+ 7: { // 金光日
+ name: '金光日',
+ studentId: '190505120107',
+ scores: [85, 87, 83, 88, 84, 86],
+ average: 85.5,
+ rank: 4,
+ totalStudents: 40
+ },
+ 8: { // 李慧欣
+ name: '李慧欣',
+ studentId: '190505120108',
+ scores: [83, 85, 81, 86, 87, 84],
+ average: 84.3,
+ rank: 6,
+ totalStudents: 40
+ },
+ 9: { // 李琪
+ name: '李琪',
+ studentId: '190505120109',
+ scores: [79, 83, 77, 81, 85, 82],
+ average: 81.2,
+ rank: 12,
+ totalStudents: 40
+ },
+ 10: { // 李双双
+ name: '李双双',
+ studentId: '190505120110',
+ scores: [84, 86, 82, 85, 89, 87],
+ average: 85.5,
+ rank: 5,
+ totalStudents: 40
+ },
+ 11: { // 李硕
+ name: '李硕',
+ studentId: '190505120111',
+ scores: [81, 84, 79, 83, 86, 85],
+ average: 83.0,
+ rank: 10,
+ totalStudents: 40
+ },
+ 12: { // 李芸灿
+ name: '李芸灿',
+ studentId: '190505120112',
+ scores: [86, 88, 84, 87, 90, 89],
+ average: 87.3,
+ rank: 2,
+ totalStudents: 40
+ },
+ 13: { // 刘菲
+ name: '刘菲',
+ studentId: '190505120113',
+ scores: [77, 80, 75, 78, 82, 81],
+ average: 78.8,
+ rank: 18,
+ totalStudents: 40
+ },
+ 14: { // 刘俊祺
+ name: '刘俊祺',
+ studentId: '190505120114',
+ scores: [82, 85, 80, 84, 87, 86],
+ average: 84.0,
+ rank: 7,
+ totalStudents: 40
+ },
+ 15: { // 刘正涛
+ name: '刘正涛',
+ studentId: '190505120115',
+ scores: [80, 83, 78, 82, 85, 84],
+ average: 82.0,
+ rank: 11,
+ totalStudents: 40
+ },
+ 16: { // 毛玮婷
+ name: '毛玮婷',
+ studentId: '190505120116',
+ scores: [78, 81, 76, 80, 83, 82],
+ average: 80.0,
+ rank: 15,
+ totalStudents: 40
+ },
+ 17: { // 司慧峰
+ name: '司慧峰',
+ studentId: '190505120117',
+ scores: [83, 86, 81, 85, 88, 87],
+ average: 85.0,
+ rank: 4,
+ totalStudents: 40
+ },
+ 18: { // 孙明悦
+ name: '孙明悦',
+ studentId: '190505120118',
+ scores: [76, 79, 74, 77, 81, 80],
+ average: 77.8,
+ rank: 20,
+ totalStudents: 40
+ },
+ 19: { // 王浩程
+ name: '王浩程',
+ studentId: '190505120119',
+ scores: [79, 82, 77, 81, 84, 83],
+ average: 81.0,
+ rank: 13,
+ totalStudents: 40
+ },
+ 20: { // 王清泉
+ name: '王清泉',
+ studentId: '190505120120',
+ scores: [81, 84, 79, 83, 86, 85],
+ average: 83.0,
+ rank: 9,
+ totalStudents: 40
+ },
+ 21: { // 王庆嘉
+ name: '王庆嘉',
+ studentId: '190505120121',
+ scores: [78, 81, 76, 80, 83, 82],
+ average: 80.0,
+ rank: 16,
+ totalStudents: 40
+ },
+ 22: { // 王杨
+ name: '王杨',
+ studentId: '190505120122',
+ scores: [77, 80, 75, 78, 82, 81],
+ average: 78.8,
+ rank: 19,
+ totalStudents: 40
+ },
+ 23: { // 王月明
+ name: '王月明',
+ studentId: '190505120123',
+ scores: [80, 83, 78, 82, 85, 84],
+ average: 82.0,
+ rank: 14,
+ totalStudents: 40
+ },
+ 24: { // 魏冰冰
+ name: '魏冰冰',
+ studentId: '190505120124',
+ scores: [75, 78, 73, 76, 80, 79],
+ average: 76.8,
+ rank: 22,
+ totalStudents: 40
+ },
+ 25: { // 肖璟
+ name: '肖璟',
+ studentId: '190505120125',
+ scores: [76, 79, 74, 77, 81, 80],
+ average: 77.8,
+ rank: 21,
+ totalStudents: 40
+ },
+ 26: { // 谢知谕
+ name: '谢知谕',
+ studentId: '190505120126',
+ scores: [79, 82, 77, 81, 84, 83],
+ average: 81.0,
+ rank: 17,
+ totalStudents: 40
+ },
+ 27: { // 薛欣然
+ name: '薛欣然',
+ studentId: '190505120127',
+ scores: [74, 77, 72, 75, 79, 78],
+ average: 75.8,
+ rank: 25,
+ totalStudents: 40
+ },
+ 28: { // 尤晨羲
+ name: '尤晨羲',
+ studentId: '190505120128',
+ scores: [73, 76, 71, 74, 78, 77],
+ average: 74.8,
+ rank: 28,
+ totalStudents: 40
+ },
+ 29: { // 于维娇
+ name: '于维娇',
+ studentId: '190505120129',
+ scores: [75, 78, 73, 76, 80, 79],
+ average: 76.8,
+ rank: 24,
+ totalStudents: 40
+ },
+ 30: { // 翟欣婷
+ name: '翟欣婷',
+ studentId: '190505120130',
+ scores: [76, 79, 74, 77, 81, 80],
+ average: 77.8,
+ rank: 23,
+ totalStudents: 40
+ },
+ 31: { // 张朝阳
+ name: '张朝阳',
+ studentId: '190505120131',
+ scores: [72, 75, 70, 73, 77, 76],
+ average: 73.8,
+ rank: 30,
+ totalStudents: 40
+ },
+ 32: { // 张富长
+ name: '张富长',
+ studentId: '190505120132',
+ scores: [74, 77, 72, 75, 79, 78],
+ average: 75.8,
+ rank: 26,
+ totalStudents: 40
+ },
+ 33: { // 张龙薇
+ name: '张龙薇',
+ studentId: '190505120133',
+ scores: [73, 76, 71, 74, 78, 77],
+ average: 74.8,
+ rank: 29,
+ totalStudents: 40
+ },
+ 34: { // 张仁健
+ name: '张仁健',
+ studentId: '190505120134',
+ scores: [71, 74, 69, 72, 76, 75],
+ average: 72.8,
+ rank: 32,
+ totalStudents: 40
+ },
+ 35: { // 张笑
+ name: '张笑',
+ studentId: '190505120135',
+ scores: [70, 73, 68, 71, 75, 74],
+ average: 71.8,
+ rank: 35,
+ totalStudents: 40
+ },
+ 36: { // 赵月泰
+ name: '赵月泰',
+ studentId: '190505120136',
+ scores: [72, 75, 70, 73, 77, 76],
+ average: 73.8,
+ rank: 31,
+ totalStudents: 40
+ },
+ 37: { // 郑婕
+ name: '郑婕',
+ studentId: '190505120137',
+ scores: [69, 72, 67, 70, 74, 73],
+ average: 70.8,
+ rank: 37,
+ totalStudents: 40
+ },
+ 38: { // 周昱宁
+ name: '周昱宁',
+ studentId: '190505120138',
+ scores: [71, 74, 69, 72, 76, 75],
+ average: 72.8,
+ rank: 33,
+ totalStudents: 40
+ },
+ 39: { // 周思莹
+ name: '周思莹',
+ studentId: '190505120139',
+ scores: [70, 73, 68, 71, 75, 74],
+ average: 71.8,
+ rank: 36,
+ totalStudents: 40
+ },
+ 40: { // 朱紫
+ name: '朱紫',
+ studentId: '190505120140',
+ scores: [68, 71, 66, 69, 73, 72],
+ average: 69.8,
+ rank: 40,
+ totalStudents: 40
}
}
},
// 成绩分布柱状图数据
gradeDistribution: {
- 1: { // 张志明
- subjects: ['数据结构', '算法设计', '软件工程', '数据库', '网络编程', '前端开发'],
+ 1: {
+ subjects: ['投资学原理', '证券投资分析', '金融数据分析', '投资组合管理', '量化投资', '金融科技'],
scores: [88, 92, 85, 90, 87, 94],
grades: ['B+', 'A-', 'B+', 'A-', 'B+', 'A'],
- credits: [4, 3, 3, 4, 3, 3], // 学分
- semester: '2024-1',
+ credits: [4, 3, 3, 4, 3, 3],
+ semester: '2021-2022-1',
gpa: 3.72,
- classAverage: [82, 85, 80, 84, 83, 88] // 班级平均分
+ classAverage: [82, 85, 80, 84, 83, 88]
},
- 2: { // 李梦瑶
- subjects: ['数据结构', '算法设计', '软件工程', '数据库', '网络编程', '前端开发'],
+ 2: {
+ subjects: ['投资学原理', '证券投资分析', '金融数据分析', '投资组合管理', '量化投资', '金融科技'],
scores: [95, 88, 92, 87, 90, 89],
grades: ['A', 'B+', 'A-', 'B+', 'A-', 'B+'],
credits: [4, 3, 3, 4, 3, 3],
- semester: '2024-1',
+ semester: '2021-2022-1',
gpa: 3.78,
classAverage: [82, 85, 80, 84, 83, 88]
}
@@ -346,77 +750,154 @@ export const mockPortraitData = {
// 成长轨迹数据
growthTrack: {
- 1: { // 张志明
- timeline: ['2024-01', '2024-02', '2024-03', '2024-04', '2024-05', '2024-06'],
- overallScores: [75, 78, 82, 85, 87, 88], // 综合能力得分变化
+ 1: {
+ timeline: ['2021-09', '2021-10', '2021-11', '2021-12', '2022-01', '2022-02'],
+ overallScores: [75, 78, 82, 85, 87, 88],
skillProgress: {
'理论基础': [70, 75, 78, 82, 84, 85],
'实践能力': [80, 85, 88, 90, 91, 92],
'创新思维': [65, 68, 72, 75, 77, 78]
},
milestones: [
- { date: '2024-02', event: '完成数据结构课程设计', score: 88 },
- { date: '2024-04', event: '参与企业实训项目', score: 92 },
- { date: '2024-06', event: '获得校级编程竞赛三等奖', score: 85 }
+ { date: '2021-10', event: '完成投资学原理课程设计', score: 88 },
+ { date: '2021-12', event: '参与智能投顾实践项目', score: 92 },
+ { date: '2022-01', event: '获得校级投资分析竞赛三等奖', score: 85 }
]
}
},
// 综合评价报告
comprehensiveReport: {
- 1: { // 张志明
+ 1: {
strengths: [
- '实践动手能力强,项目开发经验丰富',
+ '投资理论基础扎实,金融数据分析能力强',
'学习态度认真,能够主动思考问题',
'团队协作意识好,沟通能力较强'
],
weaknesses: [
- '理论基础需要进一步加强',
+ '量化投资实践经验需要积累',
'创新思维有待提升',
- '算法设计能力需要更多练习'
+ '风险识别能力需要更多练习'
],
suggestions: [
- '建议加强数据结构和算法的理论学习',
- '多参与创新性项目,培养创新思维',
- '定期参加技术分享,提升表达能力'
+ '建议加强量化投资模型的实践学习',
+ '多参与金融创新项目,培养创新思维',
+ '定期参加投资论坛,提升专业表达能力'
],
teacherComments: [
{
teacher: '刘澜涛',
- course: '软件工程',
- comment: '张志明同学在项目开发中表现突出,具备良好的工程思维和团队协作能力。',
- date: '2024-06-15'
+ course: '投资学原理',
+ comment: '陈俐璇同学在投资理论学习中表现突出,具备良好的分析思维和实践应用能力。',
+ date: '2022-01-15'
},
{
teacher: '王老师',
- course: '数据库原理',
- comment: '理论掌握扎实,实践能力强,建议在查询优化方面继续深入学习。',
- date: '2024-05-20'
+ course: '证券投资分析',
+ comment: '理论掌握扎实,实践能力强,建议在量化分析方面继续深入学习。',
+ date: '2021-12-20'
}
],
industryFeedback: {
- company: '华为技术有限公司',
- mentor: '张工程师',
- feedback: '实习期间工作认真负责,学习能力强,具备良好的技术素养和职业素养。',
- skills: ['Vue.js开发', '后端API设计', '数据库设计'],
+ company: '中信证券',
+ mentor: '李经理',
+ feedback: '实习期间工作认真负责,学习能力强,具备良好的金融素养和专业技能。',
+ skills: ['投资分析', '量化建模', '风险评估'],
rating: 4.5,
- date: '2024-06-30'
+ date: '2022-02-28'
}
}
}
}
+// 报告监测数据
+export const mockReportData = {
+ // 发展趋势数据
+ developmentTrends: {
+ 1: {
+ monthlyScores: [
+ { month: '2021-09', overall: 75, company: 72, teacher: 78, expert: 76, peer: 74 },
+ { month: '2021-10', overall: 78, company: 76, teacher: 80, expert: 78, peer: 78 },
+ { month: '2021-11', overall: 82, company: 80, teacher: 84, expert: 82, peer: 82 },
+ { month: '2021-12', overall: 85, company: 83, teacher: 87, expert: 85, peer: 85 },
+ { month: '2022-01', overall: 87, company: 85, teacher: 89, expert: 87, peer: 87 },
+ { month: '2022-02', overall: 88, company: 86, teacher: 90, expert: 88, peer: 88 }
+ ]
+ },
+ 2: {
+ monthlyScores: [
+ { month: '2021-09', overall: 82, company: 80, teacher: 84, expert: 82, peer: 82 },
+ { month: '2021-10', overall: 85, company: 83, teacher: 87, expert: 85, peer: 85 },
+ { month: '2021-11', overall: 88, company: 86, teacher: 90, expert: 88, peer: 88 },
+ { month: '2021-12', overall: 90, company: 88, teacher: 92, expert: 90, peer: 90 },
+ { month: '2022-01', overall: 92, company: 90, teacher: 94, expert: 92, peer: 92 },
+ { month: '2022-02', overall: 93, company: 91, teacher: 95, expert: 93, peer: 93 }
+ ]
+ },
+ 3: {
+ monthlyScores: [
+ { month: '2021-09', overall: 78, company: 76, teacher: 80, expert: 78, peer: 78 },
+ { month: '2021-10', overall: 80, company: 78, teacher: 82, expert: 80, peer: 80 },
+ { month: '2021-11', overall: 83, company: 81, teacher: 85, expert: 83, peer: 83 },
+ { month: '2021-12', overall: 85, company: 83, teacher: 87, expert: 85, peer: 85 },
+ { month: '2022-01', overall: 87, company: 85, teacher: 89, expert: 87, peer: 87 },
+ { month: '2022-02', overall: 89, company: 87, teacher: 91, expert: 89, peer: 89 }
+ ]
+ }
+ },
+
+ // 里程碑数据
+ milestones: {
+ 1: [
+ { date: '2021-10', event: '完成投资学原理课程设计', score: 88 },
+ { date: '2021-12', event: '参与智能投顾实践项目', score: 92 },
+ { date: '2022-01', event: '获得校级投资分析竞赛三等奖', score: 85 }
+ ],
+ 2: [
+ { date: '2021-10', event: '获得量化投资项目一等奖', score: 95 },
+ { date: '2021-11', event: '发表学术论文', score: 90 },
+ { date: '2022-01', event: '实习表现优异', score: 93 }
+ ],
+ 3: [
+ { date: '2021-11', event: '完成证券分析课程项目', score: 89 },
+ { date: '2021-12', event: '参与金融科技竞赛', score: 87 },
+ { date: '2022-02', event: '获得实习推荐信', score: 88 }
+ ]
+ },
+
+ // 发展建议数据
+ developmentSuggestions: {
+ 1: {
+ strengths: [
+ '投资理论基础扎实,金融数据分析能力强',
+ '学习态度认真,能够主动思考问题',
+ '团队协作意识好,沟通能力较强'
+ ],
+ weaknesses: [
+ '量化投资实践经验需要积累',
+ '创新思维有待提升',
+ '风险识别能力需要更多练习'
+ ],
+ suggestions: [
+ '建议加强量化投资模型的实践学习',
+ '多参与金融创新项目,培养创新思维',
+ '定期参加投资论坛,提升专业表达能力'
+ ]
+ }
+ }
+}
+
// 大屏专用数据
export const bigScreenData = {
// 成绩分布数据
gradeDistribution: [
- { grade: '优秀(90-100)', count: 23, color: '#10b981' },
- { grade: '良好(80-89)', count: 45, color: '#3b82f6' },
- { grade: '中等(70-79)', count: 62, color: '#f59e0b' },
- { grade: '及格(60-69)', count: 21, color: '#ef4444' },
- { grade: '不及格(0-59)', count: 5, color: '#6b7280' }
+ { grade: '优秀(90-100)', count: 8, color: '#10b981' },
+ { grade: '良好(80-89)', count: 15, color: '#3b82f6' },
+ { grade: '中等(70-79)', count: 12, color: '#f59e0b' },
+ { grade: '及格(60-69)', count: 4, color: '#ef4444' },
+ { grade: '不及格(0-59)', count: 1, color: '#6b7280' }
],
-
+
// 能力矩阵数据(三角形雷达图)
abilityMatrix: {
dimensions: ['量化分析', '风险管理', '创新应用'],
@@ -426,20 +907,20 @@ export const bigScreenData = {
{ name: 'C', values: [82, 85, 88], color: '#10b981' }
]
},
-
+
// 实习统计数据
practiceStats: [
{ label: '实习课程数', value: 24, icon: 'Reading', trend: '+5%' },
{ label: '专业数', value: 8, icon: 'OfficeBuilding', trend: '+2' },
- { label: '实习人数', value: 156, icon: 'User', trend: '+12%' },
+ { label: '实习人数', value: 40, icon: 'User', trend: '+12%' },
{ label: '辅导老师数', value: 32, icon: 'UserFilled', trend: '+8%' },
{ label: '实习企业数', value: 18, icon: 'School', trend: '+3' }
],
-
+
// 实时数据更新
realTimeData: {
- studentCount: 156,
- evaluationCount: 1247,
+ studentCount: 40,
+ evaluationCount: 320,
completionRate: 87.5,
averageScore: 82.3
}
@@ -469,273 +950,16 @@ export const generateChartData = () => {
// Mock统计数据生成器
export const generateStatsData = () => {
return {
- todayEvaluations: Math.floor(Math.random() * 20) + 15,
- completedTasks: Math.floor(Math.random() * 50) + 120,
- pendingTasks: Math.floor(Math.random() * 15) + 8,
+ todayEvaluations: Math.floor(Math.random() * 8) + 5,
+ completedTasks: Math.floor(Math.random() * 20) + 30,
+ pendingTasks: Math.floor(Math.random() * 8) + 3,
completionRate: Math.floor(Math.random() * 20) + 75, // 75-95%
- totalStudents: 156,
- evaluatedStudents: Math.floor(Math.random() * 30) + 120,
+ totalStudents: 40,
+ evaluatedStudents: Math.floor(Math.random() * 10) + 30,
averageScore: (Math.random() * 10 + 80).toFixed(1) // 80-90分
}
}
-// Mock项目详细信息
-export const mockProjectDetails = {
- 'huawei-cloud': {
- id: 'huawei-cloud',
- name: '华为云计算实训项目',
- company: '华为技术有限公司',
- duration: '3个月',
- description: '基于华为云平台的企业级应用开发实训,涵盖云服务架构设计、微服务开发、容器化部署等核心技术。',
- requirements: [
- '掌握云计算基础概念和核心技术',
- '熟悉华为云平台各项服务',
- '具备微服务架构设计能力',
- '掌握Docker容器化技术',
- '具备团队协作和项目管理能力'
- ],
- skills: ['华为云服务', 'Spring Cloud', 'Docker', 'Kubernetes', 'Redis', 'MySQL'],
- participants: 25,
- startDate: '2024-09-15',
- endDate: '2024-12-15',
- status: 'completed'
- },
- 'tencent-frontend': {
- id: 'tencent-frontend',
- name: '腾讯前端开发实习',
- company: '腾讯科技有限公司',
- duration: '4个月',
- description: '腾讯前端团队实习项目,专注于大型Web应用开发、性能优化和用户体验提升。',
- requirements: [
- '熟练掌握Vue.js/React框架',
- '具备响应式设计能力',
- '了解前端工程化工具',
- '掌握前端性能优化技巧',
- '具备良好的代码规范意识'
- ],
- skills: ['Vue.js', 'React', 'TypeScript', 'Webpack', 'Sass', 'Element UI'],
- participants: 18,
- startDate: '2024-08-01',
- endDate: '2024-12-01',
- status: 'completed'
- }
-}
-
-// 报告专用Mock数据
-export const mockReportData = {
- // 发展趋势数据
- developmentTrends: {
- 1: { // 张志明的发展趋势
- monthlyScores: [
- { month: '2024-09', overall: 78.5, company: 80, teacher: 77, expert: 75, peer: 82 },
- { month: '2024-10', overall: 81.2, company: 83, teacher: 79, expert: 78, peer: 85 },
- { month: '2024-11', overall: 83.8, company: 85, teacher: 82, expert: 81, peer: 87 },
- { month: '2024-12', overall: 86.5, company: 88, teacher: 85, expert: 84, peer: 89 }
- ],
- abilityGrowth: [
- { ability: '技术能力', current: 85, previous: 78, growth: 7 },
- { ability: '沟通协调', current: 78, previous: 75, growth: 3 },
- { ability: '团队协作', current: 82, previous: 80, growth: 2 },
- { ability: '问题解决', current: 73, previous: 68, growth: 5 },
- { ability: '学习能力', current: 88, previous: 82, growth: 6 },
- { ability: '创新思维', current: 75, previous: 70, growth: 5 }
- ],
- rankingHistory: [
- { month: '2024-09', rank: 8, totalStudents: 30 },
- { month: '2024-10', rank: 6, totalStudents: 30 },
- { month: '2024-11', rank: 4, totalStudents: 30 },
- { month: '2024-12', rank: 2, totalStudents: 30 }
- ]
- },
- 2: { // 李梦瑶的发展趋势
- monthlyScores: [
- { month: '2024-09', overall: 82.3, company: 84, teacher: 81, expert: 79, peer: 85 },
- { month: '2024-10', overall: 84.1, company: 86, teacher: 83, expert: 82, peer: 86 },
- { month: '2024-11', overall: 85.9, company: 87, teacher: 85, expert: 84, peer: 87 },
- { month: '2024-12', overall: 87.2, company: 89, teacher: 86, expert: 85, peer: 88 }
- ],
- abilityGrowth: [
- { ability: '技术能力', current: 88, previous: 84, growth: 4 },
- { ability: '沟通协调', current: 80, previous: 78, growth: 2 },
- { ability: '团队协作', current: 85, previous: 82, growth: 3 },
- { ability: '问题解决', current: 76, previous: 72, growth: 4 },
- { ability: '学习能力', current: 90, previous: 85, growth: 5 },
- { ability: '创新思维', current: 78, previous: 74, growth: 4 }
- ],
- rankingHistory: [
- { month: '2024-09', rank: 5, totalStudents: 30 },
- { month: '2024-10', rank: 4, totalStudents: 30 },
- { month: '2024-11', rank: 3, totalStudents: 30 },
- { month: '2024-12', rank: 1, totalStudents: 30 }
- ]
- }
- },
-
- // 里程碑事件数据
- milestones: {
- 1: [ // 张志明的里程碑
- {
- date: '2024-12-15',
- title: '期末项目优秀',
- description: '在企业合作项目中表现突出,获得优秀评价',
- type: 'achievement',
- score: '92.5',
- category: '学术成就'
- },
- {
- date: '2024-11-20',
- title: '技能提升显著',
- description: '编程能力和团队协作能力都有明显提升',
- type: 'improvement',
- category: '能力发展'
- },
- {
- date: '2024-10-10',
- title: '完成核心项目',
- description: '成功完成华为云计算实训项目核心模块开发',
- type: 'project',
- score: '88.0',
- category: '项目完成'
- },
- {
- date: '2024-09-25',
- title: '获得实习奖励',
- description: '在企业实习期间表现优异,获得实习优秀奖',
- type: 'award',
- category: '荣誉奖励'
- }
- ],
- 2: [ // 李梦瑶的里程碑
- {
- date: '2024-12-18',
- title: '技术创新突破',
- description: '在推荐算法项目中提出创新解决方案,效果显著',
- type: 'achievement',
- score: '94.0',
- category: '技术创新'
- },
- {
- date: '2024-11-15',
- title: '团队领导力',
- description: '担任项目组长,带领团队完成复杂技术攻关',
- type: 'improvement',
- category: '领导能力'
- },
- {
- date: '2024-10-05',
- title: '算法竞赛获奖',
- description: '参加校级算法竞赛获得二等奖',
- type: 'award',
- category: '竞赛获奖'
- }
- ]
- },
-
- // 详细分析数据
- detailedAnalysis: {
- 1: { // 张志明的详细分析
- overallSummary: {
- totalScore: 86.5,
- ranking: 2,
- percentile: 93,
- improvement: '+8.0分',
- trend: 'upward'
- },
- dimensionAnalysis: {
- strengths: [
- {
- name: '学习能力',
- score: 88,
- description: '学习新知识和技能的能力突出,能够快速适应新的工作环境和要求',
- evidence: ['主动学习新技术框架', '快速掌握项目需求', '积极参与技术分享']
- },
- {
- name: '技术能力',
- score: 85,
- description: '编程技能扎实,具备良好的技术基础和实践能力',
- evidence: ['代码质量高', '技术方案合理', '问题解决能力强']
- }
- ],
- improvements: [
- {
- name: '问题解决',
- score: 73,
- description: '面对复杂问题时的分析和解决能力有待提升',
- suggestions: ['加强逻辑思维训练', '多参与复杂项目挑战', '学习系统化问题分析方法']
- },
- {
- name: '创新思维',
- score: 75,
- description: '创新意识和创造性思维需要进一步培养',
- suggestions: ['多接触跨领域知识', '参与创新项目和竞赛', '培养批判性思维能力']
- }
- ]
- },
- roleEvaluations: {
- enterprise: {
- score: 88,
- feedback: '实习期间表现优异,技术能力强,工作态度认真,具备良好的职业素养',
- evaluator: '华为技术有限公司 - 张工程师',
- strengths: ['技术实现能力', '学习适应能力', '工作责任心'],
- improvements: ['项目管理经验', '跨部门沟通']
- },
- teacher: {
- score: 85,
- feedback: '理论基础扎实,实践能力强,课堂表现积极,作业质量高',
- evaluator: '刘澜涛 - 软件工程',
- strengths: ['理论掌握', '实践应用', '学习态度'],
- improvements: ['研究深度', '创新思维']
- },
- expert: {
- score: 84,
- feedback: '专业知识掌握良好,具备一定的行业认知,发展潜力较大',
- evaluator: '王专家 - 行业协会',
- strengths: ['专业素养', '发展潜力'],
- improvements: ['行业洞察', '前沿技术']
- },
- peer: {
- score: 89,
- feedback: '团队合作能力强,乐于助人,沟通协调能力好',
- evaluator: '同班同学',
- strengths: ['团队精神', '沟通能力', '协作意识'],
- improvements: ['领导能力', '组织协调']
- }
- }
- }
- },
-
- // 发展建议数据
- developmentSuggestions: {
- 1: { // 张志明的发展建议
- shortTerm: [ // 1-3个月
- '加强编程实践,每周完成2-3个小项目练习',
- '参与至少1次技术分享或团队汇报',
- '学习一门新的编程语言或技术框架',
- '提升代码质量,学习代码规范和最佳实践'
- ],
- mediumTerm: [ // 3-6个月
- '参与中大型项目开发,承担核心模块责任',
- '建立个人技术博客,分享学习心得',
- '获得相关技术认证或证书',
- '培养跨领域知识,了解产品和业务逻辑'
- ],
- longTerm: [ // 6个月以上
- '成为技术团队的核心成员或小组长',
- '具备独立设计和架构系统的能力',
- '发展个人技术影响力,成为某领域专家',
- '培养创新创业思维,探索技术商业化应用'
- ],
- careerPath: {
- current: '初级开发工程师',
- nextSteps: [
- { role: '中级开发工程师', timeline: '6-12个月', requirements: ['技术深度', '项目经验'] },
- { role: '高级开发工程师', timeline: '2-3年', requirements: ['技术广度', '架构能力'] },
- { role: '技术专家/技术经理', timeline: '3-5年', requirements: ['技术领导力', '团队管理'] }
- ]
- }
- }
- }
-}
// 获取评价状态的辅助函数
export const getEvaluationStatus = (studentId, role) => {
diff --git a/src/views/BigScreenPortrait.vue b/src/views/BigScreenPortrait.vue
index ef52f6d..15aaf99 100644
--- a/src/views/BigScreenPortrait.vue
+++ b/src/views/BigScreenPortrait.vue
@@ -76,14 +76,62 @@
-
-
-
-
@@ -334,64 +382,17 @@
-
-
-
-
-
-
-
-
-
-
-
- 音频
- 语音识别
-
-
-
-
-
-
-
-
- 文本
- NLP分析
-
-
-
-
-
-
@@ -258,7 +288,8 @@ import {
ArrowRight,
Search,
Bell,
- Upload
+ Upload,
+ FolderAdd
} from '@element-plus/icons-vue'
export default {
@@ -272,7 +303,8 @@ export default {
ArrowRight,
Search,
Bell,
- Upload
+ Upload,
+ FolderAdd
},
setup() {
const router = useRouter()
@@ -646,8 +678,9 @@ export default {
.modules-grid {
display: flex;
- gap: var(--spacing-lg);
- flex-wrap: wrap;
+ gap: var(--spacing-sm);
+ flex-wrap: nowrap;
+ overflow-x: auto;
}
.module-card {
diff --git a/src/views/EnterpriseMentor.vue b/src/views/EnterpriseMentor.vue
new file mode 100644
index 0000000..035cc46
--- /dev/null
+++ b/src/views/EnterpriseMentor.vue
@@ -0,0 +1,1149 @@
+
+
+
+
+
+
+
+
+
+
+
+ 首页
+ /
+ 工作台
+
+
下午好,张志明 👋
+
+
+
+
+
+
+
+
+
+
+
18
+
本月指导学生
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
3
+
待评价学生
+
+ 实习报告 2
+ 项目作品 1
+
+
+
+
+
+
+
4.8
+
平均评分
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
学生评价
+
+ 为企业实习学生提供专业技能、工作态度、团队协作等多维度评价,结合实际项目表现给出客观评分。
+
+
+
+ 3
+ 待评价
+
+
+ 15
+ 已完成
+
+
+ 95%
+ 完成率
+
+
+
+
+
+
+
+
+
+
+
指导记录
+
+ 记录学生在企业实习期间的指导过程,包括技能培训、项目参与、问题解决等详细指导轨迹。
+
+
+ 技能指导
+ 项目跟踪
+ 成长记录
+
+
+
+
+
+
+
+
+
+
评价报告
+
+ 生成学生在企业实习期间的综合评价报告,包含专业能力、工作表现、发展建议等企业视角的评估。
+
+
+
🏢 企业评价
+
📊 能力分析
+
💡 发展建议
+
+
+
+
+
+
+
+
+
+
学生作品
+
+ 查看学生提交的实习作品、项目成果、学习报告等材料,进行专业评估和指导建议。
+
+
+ 项目作品
+ 实习报告
+ 技能展示
+
+
+
+
+
+
+
+
+
+
资料上传
+
+ 资料上传系统,支持影像、音频、文字等资料的上传。
+
+
+ 影像资料
+ 音频文件
+ 文字文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/Evaluate.vue b/src/views/Evaluate.vue
index 181affb..3589b36 100644
--- a/src/views/Evaluate.vue
+++ b/src/views/Evaluate.vue
@@ -421,12 +421,12 @@ export default {
// 查看学生画像
const viewPortrait = (student) => {
- router.push(`/portrait?studentId=${student.id}`)
+ router.push(`/home/portrait?studentId=${student.id}`)
}
// 查看评价报告
const viewReport = (student) => {
- router.push(`/report/${student.id}`)
+ router.push(`/home/report/${student.id}`)
}
// 查看成果材料
@@ -446,7 +446,7 @@ export default {
// 批量查看画像
const viewAllPortraits = () => {
- router.push('/portrait')
+ router.push('/home/portrait')
}
// 导出数据
diff --git a/src/views/Portrait.vue b/src/views/Portrait.vue
index 837ecda..d4d6070 100644
--- a/src/views/Portrait.vue
+++ b/src/views/Portrait.vue
@@ -68,8 +68,8 @@
-
{{ currentPortraitData?.average || 0 }}
-
综合得分
+
{{ currentPortraitData?.average ? currentPortraitData.average + '分' : '暂无' }}
+
综合得分(百分制)
{{ currentPortraitData?.rank || 0 }}/{{ currentPortraitData?.totalStudents || 0 }}
@@ -267,7 +267,9 @@ export default {
const currentPortraitData = computed(() => {
if (!selectedStudentId.value) return null
- return mockPortraitData.abilityRadar.students[selectedStudentId.value]
+ const data = mockPortraitData.abilityRadar.students[selectedStudentId.value]
+ console.log('currentPortraitData computed:', selectedStudentId.value, data)
+ return data
})
const currentGradeData = computed(() => {
diff --git a/src/views/Report.vue b/src/views/Report.vue
index 4d815b2..e04ca2f 100644
--- a/src/views/Report.vue
+++ b/src/views/Report.vue
@@ -31,16 +31,6 @@
•
年级:{{ currentStudent.grade }}
-
@@ -65,25 +55,25 @@
-
{{ overallScore }}
-
综合得分
+
{{ overallScore === '暂无评分' ? '暂无评分' : overallScore + '分' }}
+
综合得分(百分制)
企业评价
- {{ scores.company }}
+ {{ scores.company === '暂无' ? '暂无' : scores.company + '分' }}
教师评价
- {{ scores.teacher }}
+ {{ scores.teacher === '暂无' ? '暂无' : scores.teacher + '分' }}
专家评价
- {{ scores.expert }}
+ {{ scores.expert === '暂无' ? '暂无' : scores.expert + '分' }}
学生互评
- {{ scores.peer }}
+ {{ scores.peer === '暂无' ? '暂无' : scores.peer + '分' }}
@@ -99,7 +89,7 @@
-
{{ evaluationStats.avgScore }}
+
{{ evaluationStats.avgScore === '暂无评分' ? '暂无' : evaluationStats.avgScore + '分' }}
平均分
@@ -215,7 +205,7 @@ export default {
if (companyData && companyData.attitude && companyData.skills && companyData.communication && companyData.problemSolving) {
const companyAvg = (companyData.attitude + companyData.skills + companyData.communication + companyData.problemSolving) / 4
if (!isNaN(companyAvg) && companyAvg > 0) {
- result.company = companyAvg.toFixed(1)
+ result.company = (companyAvg * 20).toFixed(0) // 转换为百分制
}
}
@@ -224,7 +214,7 @@ export default {
if (teacherData && teacherData.theory && teacherData.practice && teacherData.innovation && teacherData.attitude) {
const teacherAvg = (teacherData.theory + teacherData.practice + teacherData.innovation + teacherData.attitude) / 4
if (!isNaN(teacherAvg) && teacherAvg > 0) {
- result.teacher = teacherAvg.toFixed(1)
+ result.teacher = (teacherAvg * 20).toFixed(0) // 转换为百分制
}
}
@@ -233,7 +223,7 @@ export default {
if (expertData && expertData.industryKnowledge && expertData.technicalDepth && expertData.applicationAbility) {
const expertAvg = (expertData.industryKnowledge + expertData.technicalDepth + expertData.applicationAbility) / 3
if (!isNaN(expertAvg) && expertAvg > 0) {
- result.expert = expertAvg.toFixed(1)
+ result.expert = (expertAvg * 20).toFixed(0) // 转换为百分制
}
}
@@ -242,7 +232,7 @@ export default {
1: 4.2, 2: 4.6, 3: 4.1, 4: 3.8, 5: 4.8,
6: 4.0, 7: 4.3, 8: 3.7, 9: 4.4, 10: 4.1
}
- result.peer = peerScores[studentId.value] ? peerScores[studentId.value].toFixed(1) : '暂无'
+ result.peer = peerScores[studentId.value] ? (peerScores[studentId.value] * 20).toFixed(0) : '暂无' // 转换为百分制
return result
})
@@ -252,7 +242,7 @@ export default {
let totalScore = 0
let totalWeight = 0
- // 只计算有评分的项目
+ // 只计算有评分的项目(百分制评分)
if (s.company !== '暂无') {
totalScore += parseFloat(s.company) * SCORE_WEIGHTS.company
totalWeight += SCORE_WEIGHTS.company
@@ -272,9 +262,9 @@ export default {
if (totalWeight === 0) return '暂无评分'
- // 按实际权重比例重新计算
+ // 按实际权重比例重新计算(百分制)
const weighted = totalScore / totalWeight
- return weighted.toFixed(1)
+ return weighted.toFixed(0)
})
const currentAbilityData = computed(() => {
@@ -438,18 +428,6 @@ export default {
color: var(--border);
}
-.student-contact {
- display: flex;
- gap: var(--spacing-lg);
-}
-
-.contact-item {
- display: flex;
- align-items: center;
- gap: var(--spacing-xs);
- color: var(--text-muted);
- font-size: var(--font-size-sm);
-}
.report-status {
text-align: right;
diff --git a/src/views/ReportAnalysis.vue b/src/views/ReportAnalysis.vue
index 0c053a1..dd01148 100644
--- a/src/views/ReportAnalysis.vue
+++ b/src/views/ReportAnalysis.vue
@@ -23,11 +23,11 @@
@@ -41,7 +41,7 @@
{{ ability.name }}
- {{ ability.score }}
+ {{ ability.score }}分
@@ -58,12 +58,12 @@
- {{ ability.score }}/100
+ {{ ability.score }}分/100分
@@ -128,7 +128,7 @@
{{ strength.name }}
{{ strength.description }}
- {{ strength.score }}
+ {{ strength.score }}分
@@ -153,7 +153,7 @@
{{ weakness.name }}
{{ weakness.description }}
- {{ weakness.score }}
+ {{ weakness.score }}分
@@ -232,69 +232,69 @@ export default {
const abilityDimensions = ref([
{
- name: '技术能力',
+ name: '数据采集',
score: 85,
color: ABILITY_COLORS[0],
- description: '编程技能、工具使用、技术理解等方面表现优秀,具备扎实的专业基础。',
+ description: '在数据获取、收集和整理方面表现优秀,具备扎实的数据处理基础。',
suggestions: [
- '深入学习前沿技术框架',
- '参与开源项目贡献代码',
- '加强算法和数据结构学习'
+ '学习更多数据源接入方法',
+ '提升数据采集效率和质量',
+ '掌握自动化数据采集工具'
]
},
{
- name: '沟通协调',
+ name: '数据清洗',
score: 78,
color: ABILITY_COLORS[1],
- description: '能够清晰表达想法,与团队成员保持良好沟通,具备一定的协调能力。',
+ description: '能够有效处理数据质量问题,进行数据清理和标准化处理。',
suggestions: [
- '多参与团队讨论和技术分享',
- '练习公开演讲和汇报技巧',
- '学习跨部门沟通方法'
+ '学习更多数据清洗技巧',
+ '掌握异常值检测和处理方法',
+ '提升数据质量评估能力'
]
},
{
- name: '团队协作',
+ name: '工具实操',
score: 82,
color: ABILITY_COLORS[2],
- description: '团队合作意识强,能够有效配合完成项目任务,具备良好的集体荣誉感。',
+ description: '在各种分析工具和软件的实际操作中表现良好,具备较强的动手能力。',
suggestions: [
- '主动承担团队责任',
- '学习项目管理方法',
- '培养领导力和影响力'
+ '学习更多专业分析工具',
+ '提升工具使用的精度和效率',
+ '掌握高级功能和技巧'
]
},
{
- name: '问题解决',
+ name: '等级判定',
score: 73,
color: ABILITY_COLORS[3],
- description: '面对问题时能够积极思考解决方案,具备一定的分析和判断能力。',
+ description: '在评估和判断不同等级和标准方面具备一定的分析和判断能力。',
suggestions: [
- '加强逻辑思维训练',
- '多参与复杂项目挑战',
- '学习系统化问题分析方法'
+ '加强评估标准的学习和理解',
+ '多参与实际评估项目',
+ '提升客观公正的判断能力'
]
},
{
- name: '学习能力',
+ name: '沟通合作',
score: 88,
color: ABILITY_COLORS[4],
- description: '学习新知识和技能的能力突出,能够快速适应新的工作环境和要求。',
+ description: '在团队沟通协作和合作方面表现突出,能够有效促进团队协作。',
suggestions: [
- '建立系统的知识管理体系',
- '培养深度学习习惯',
- '加强实践与理论结合'
+ '继续发挥沟通合作优势',
+ '学习高效沟通技巧',
+ '培养跨部门协作能力'
]
},
{
- name: '创新思维',
+ name: '资源整合',
score: 75,
color: ABILITY_COLORS[5],
- description: '具备一定的创新意识和思维能力,能够提出新的想法和解决方案。',
+ description: '在资源配置和整合方面具备一定能力,能够有效利用各种资源。',
suggestions: [
- '多接触跨领域知识',
- '参与创新项目和竞赛',
- '培养批判性思维能力'
+ '学习更多资源管理方法',
+ '提升资源优化配置能力',
+ '培养统筹规划思维'
]
}
])
diff --git a/src/views/ReportCenter.vue b/src/views/ReportCenter.vue
index 6b8a45b..002058d 100644
--- a/src/views/ReportCenter.vue
+++ b/src/views/ReportCenter.vue
@@ -222,7 +222,7 @@ export default {
if (companyData && companyData.attitude && companyData.skills && companyData.communication && companyData.problemSolving) {
const companyAvg = (companyData.attitude + companyData.skills + companyData.communication + companyData.problemSolving) / 4
if (!isNaN(companyAvg) && companyAvg > 0) {
- totalScore += companyAvg
+ totalScore += companyAvg * 20 // 转换为百分制
count++
}
}
@@ -231,7 +231,7 @@ export default {
if (teacherData && teacherData.theory && teacherData.practice && teacherData.innovation && teacherData.attitude) {
const teacherAvg = (teacherData.theory + teacherData.practice + teacherData.innovation + teacherData.attitude) / 4
if (!isNaN(teacherAvg) && teacherAvg > 0) {
- totalScore += teacherAvg
+ totalScore += teacherAvg * 20 // 转换为百分制
count++
}
}
@@ -240,7 +240,7 @@ export default {
if (expertData && expertData.industryKnowledge && expertData.technicalDepth && expertData.applicationAbility) {
const expertAvg = (expertData.industryKnowledge + expertData.technicalDepth + expertData.applicationAbility) / 3
if (!isNaN(expertAvg) && expertAvg > 0) {
- totalScore += expertAvg
+ totalScore += expertAvg * 20 // 转换为百分制
count++
}
}
@@ -250,7 +250,7 @@ export default {
return '暂无评分'
}
- const average = (totalScore / count).toFixed(1)
+ const average = (totalScore / count).toFixed(0)
return `${average}分`
}
@@ -259,7 +259,7 @@ export default {
const score = getOverallScore(studentId)
if (score === '暂无评分') return 0
const numericScore = parseFloat(score)
- return (numericScore / 5) * 100
+ return numericScore // 现在已经是百分制,不需要转换
}
// 获取评分颜色
@@ -267,9 +267,9 @@ export default {
const score = getOverallScore(studentId)
if (score === '暂无评分') return getCSSVariable('--status-default')
const numericScore = parseFloat(score)
- if (numericScore >= 4.5) return getCSSVariable('--status-excellent')
- if (numericScore >= 4.0) return getCSSVariable('--status-good')
- if (numericScore >= 3.5) return getCSSVariable('--status-fair')
+ if (numericScore >= 90) return getCSSVariable('--status-excellent')
+ if (numericScore >= 80) return getCSSVariable('--status-good')
+ if (numericScore >= 70) return getCSSVariable('--status-fair')
return getCSSVariable('--status-poor')
}
diff --git a/src/views/ReportMonitor.vue b/src/views/ReportMonitor.vue
index 2f8cf7f..49c5945 100644
--- a/src/views/ReportMonitor.vue
+++ b/src/views/ReportMonitor.vue
@@ -46,7 +46,7 @@