添加 rating

This commit is contained in:
2025-03-19 09:15:20 +08:00
parent 16fb09021d
commit 9eb18fedd4
8 changed files with 112 additions and 109 deletions

162
package-lock.json generated
View File

@@ -12,8 +12,8 @@
"@codemirror/lang-html": "^6.4.9", "@codemirror/lang-html": "^6.4.9",
"@codemirror/lang-javascript": "^6.2.3", "@codemirror/lang-javascript": "^6.2.3",
"@fsegurai/codemirror-theme-github-light": "^6.1.2", "@fsegurai/codemirror-theme-github-light": "^6.1.2",
"@vueuse/core": "^12.8.2", "@vueuse/core": "^13.0.0",
"axios": "^1.8.1", "axios": "^1.8.3",
"codemirror": "^6.0.1", "codemirror": "^6.0.1",
"copy-text-to-clipboard": "^3.2.0", "copy-text-to-clipboard": "^3.2.0",
"github-markdown-css": "^5.8.1", "github-markdown-css": "^5.8.1",
@@ -29,8 +29,8 @@
}, },
"devDependencies": { "devDependencies": {
"@iconify/vue": "^4.3.0", "@iconify/vue": "^4.3.0",
"@rsbuild/core": "^1.2.14", "@rsbuild/core": "^1.2.19",
"@rsbuild/plugin-vue": "^1.0.6", "@rsbuild/plugin-vue": "^1.0.7",
"@vue/tsconfig": "^0.7.0", "@vue/tsconfig": "^0.7.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"typescript": "^5.8.2", "typescript": "^5.8.2",
@@ -450,16 +450,16 @@
} }
}, },
"node_modules/@rsbuild/core": { "node_modules/@rsbuild/core": {
"version": "1.2.14", "version": "1.2.19",
"resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.2.14.tgz", "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.2.19.tgz",
"integrity": "sha512-G8AqvCHBhs8Yt7pOQuS5YYjdYozp436ohaLr1iAMB/Jw01VNFh4u1tpShudRnw3NPmHhJ82wBaEu1zNaJ0VsKg==", "integrity": "sha512-k76is4HygmbYYMLG2V1d1yQeurHHC+ZEtGs/nwE11y6HmwSndoFhmjOeQbQ2Ul0b2B8HErksqSMtlCxd37YPPQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@rspack/core": "1.2.5", "@rspack/core": "1.2.8",
"@rspack/lite-tapable": "~1.0.1", "@rspack/lite-tapable": "~1.0.1",
"@swc/helpers": "^0.5.15", "@swc/helpers": "^0.5.15",
"core-js": "~3.40.0", "core-js": "~3.41.0",
"jiti": "^2.4.2" "jiti": "^2.4.2"
}, },
"bin": { "bin": {
@@ -470,9 +470,9 @@
} }
}, },
"node_modules/@rsbuild/plugin-vue": { "node_modules/@rsbuild/plugin-vue": {
"version": "1.0.6", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/@rsbuild/plugin-vue/-/plugin-vue-1.0.6.tgz", "resolved": "https://registry.npmjs.org/@rsbuild/plugin-vue/-/plugin-vue-1.0.7.tgz",
"integrity": "sha512-02lfIR66q7dDacqzc3cnsOsZKbAEy8Lp89aLaCGjvR+eO5WT86h4pjUGdaKFLCSNr4gFcw8yn7eNels2uAPD7A==", "integrity": "sha512-VIXFIU2gcpRjDxZNR9QUZjFqWu3oPZ5a5AUe8cyv2moJBQzRPJ18VtPnIIcdlQB36Q8lm2Do0SSVqkXAuui65g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -484,27 +484,27 @@
} }
}, },
"node_modules/@rspack/binding": { "node_modules/@rspack/binding": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.2.8.tgz",
"integrity": "sha512-q9vQmGDFZyFVMULwOFL7488WNSgn4ue94R/njDLMMIPF4K0oEJP2QT02elfG4KVGv2CbP63D7vEFN4ZNreo/Rw==", "integrity": "sha512-T3FMB3N9P1AbSAryfkSRJkPtmeSYs/Gj9zUZoPz1ckPEIcWZmpUOQbJylldjbw5waxtCL1haHNbi0pcSvxiaJw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"optionalDependencies": { "optionalDependencies": {
"@rspack/binding-darwin-arm64": "1.2.5", "@rspack/binding-darwin-arm64": "1.2.8",
"@rspack/binding-darwin-x64": "1.2.5", "@rspack/binding-darwin-x64": "1.2.8",
"@rspack/binding-linux-arm64-gnu": "1.2.5", "@rspack/binding-linux-arm64-gnu": "1.2.8",
"@rspack/binding-linux-arm64-musl": "1.2.5", "@rspack/binding-linux-arm64-musl": "1.2.8",
"@rspack/binding-linux-x64-gnu": "1.2.5", "@rspack/binding-linux-x64-gnu": "1.2.8",
"@rspack/binding-linux-x64-musl": "1.2.5", "@rspack/binding-linux-x64-musl": "1.2.8",
"@rspack/binding-win32-arm64-msvc": "1.2.5", "@rspack/binding-win32-arm64-msvc": "1.2.8",
"@rspack/binding-win32-ia32-msvc": "1.2.5", "@rspack/binding-win32-ia32-msvc": "1.2.8",
"@rspack/binding-win32-x64-msvc": "1.2.5" "@rspack/binding-win32-x64-msvc": "1.2.8"
} }
}, },
"node_modules/@rspack/binding-darwin-arm64": { "node_modules/@rspack/binding-darwin-arm64": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.2.8.tgz",
"integrity": "sha512-ou0NXMLp6RxY9Bx8P9lA8ArVjz/WAI/gSu5kKrdKKtMs6WKutl4vvP9A4HHZnISd9Tn00dlvDwNeNSUR7fjoDQ==", "integrity": "sha512-bDlrlroY3iMlzna/3i1gD6eRmhJW2zRyC3Ov6aR1micshVQ9RteigYZWkjZuQfyC5Z8dCcLUQJVojz+pqp0JXg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -516,9 +516,9 @@
] ]
}, },
"node_modules/@rspack/binding-darwin-x64": { "node_modules/@rspack/binding-darwin-x64": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.2.8.tgz",
"integrity": "sha512-RdvH9YongQlDE9+T2Xh5D2+dyiLHx2Gz38Af1uObyBRNWjF1qbuR51hOas0f2NFUdyA03j1+HWZCbE7yZrmI3w==", "integrity": "sha512-0/qOVbMuzZ+WbtDa4TbH46R4vph/W6MHcXbrXDO+vpdTMFDVJ64DnZXT7aqvGcY+7vTCIGm0GT+6ooR4KaIX8A==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -530,9 +530,9 @@
] ]
}, },
"node_modules/@rspack/binding-linux-arm64-gnu": { "node_modules/@rspack/binding-linux-arm64-gnu": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.8.tgz",
"integrity": "sha512-jznk/CI/wN93fr8I1j3la/CAiGf8aG7ZHIpRBtT4CkNze0c5BcF3AaJVSBHVNQqgSv0qddxMt3SADpzV8rWZ6g==", "integrity": "sha512-En/SMl45s19iUVb1/ZDFQvFDxIjnlfk7yqV3drMWWAL5HSgksNejaTIFTO52aoohIBbmwuk5wSGcbU0G0IFiPg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -544,9 +544,9 @@
] ]
}, },
"node_modules/@rspack/binding-linux-arm64-musl": { "node_modules/@rspack/binding-linux-arm64-musl": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.8.tgz",
"integrity": "sha512-oYzcaJ0xjb1fWbbtPmjjPXeehExEgwJ8fEGYQ5TikB+p9oCLkAghnNjsz9evUhgjByxi+NTZ1YmUNwxRuQDY1Q==", "integrity": "sha512-N1oZsXfJ9VLLcK7p1PS65cxLYQCZ7iqHW2OP6Ew2+hlz/d1hzngxgzrtZMCXFOHXDvTzVu5ff6jGS2v7+zv2tA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -558,9 +558,9 @@
] ]
}, },
"node_modules/@rspack/binding-linux-x64-gnu": { "node_modules/@rspack/binding-linux-x64-gnu": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.8.tgz",
"integrity": "sha512-dzEKs8oi86Vi+TFRCPpgmfF5ANL0VmlZN45e1An7HipeI2C5B1xrz/H8V43vPy8XEvQuMmkXO6Sp82A0zlHvIA==", "integrity": "sha512-BdPaepoLKuaVwip4QK/nGqNi1xpbCWSxiycPbKRrGqKgt/QGihxxFgiqr4EpWQVIJNIMy4nCsg4arO0+H1KWGQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -572,9 +572,9 @@
] ]
}, },
"node_modules/@rspack/binding-linux-x64-musl": { "node_modules/@rspack/binding-linux-x64-musl": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.8.tgz",
"integrity": "sha512-4ENeVPVSD97rRRGr6kJSm4sIPf1tKJ8vlr9hJi4sSvF7eMLWipSwIVmqRXJ2riVMRjYD2einmJ9KzI8rqQ2OwA==", "integrity": "sha512-GFv0Bod268OcXIcjeLoPlK0oz8rClEIxIRFkz+ejhbvfCwRJ+Fd+EKaaKQTBfZQujPqc0h2GctIF25nN5pFTmA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -586,9 +586,9 @@
] ]
}, },
"node_modules/@rspack/binding-win32-arm64-msvc": { "node_modules/@rspack/binding-win32-arm64-msvc": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.8.tgz",
"integrity": "sha512-WUoJvX/z43MWeW1JKAQIxdvqH02oLzbaGMCzIikvniZnakQovYLPH6tCYh7qD3p7uQsm+IafFddhFxTtogC3pg==", "integrity": "sha512-aEU+uJdbvJJGrzzAsjbjrPeNbG/bcG8JoXK2kSsUB+/sWHTIkHX0AQ3oX3aV/lcLKgZWrUxLAfLoCXEnIHMEyQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -600,9 +600,9 @@
] ]
}, },
"node_modules/@rspack/binding-win32-ia32-msvc": { "node_modules/@rspack/binding-win32-ia32-msvc": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.2.8.tgz",
"integrity": "sha512-YzPvmt/gpiacE6aAacz4dxgEbNWwoKYPaT4WYy/oITobnAui++iCFXC4IICSmlpoA1y7O8K3Qb9jbaB/lLhbwA==", "integrity": "sha512-GHYzNOSoiLyG9elLTmMqADJMQzjll+co4irp5AgZ+KHG9EVq0qEHxDqDIJxZnUA15U8JDvCgo6YAo3T0BFEL0Q==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -614,9 +614,9 @@
] ]
}, },
"node_modules/@rspack/binding-win32-x64-msvc": { "node_modules/@rspack/binding-win32-x64-msvc": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.8.tgz",
"integrity": "sha512-QDDshfteMZiglllm7WUh/ITemFNuexwn1Yul7cHBFGQu6HqtqKNAR0kGR8J3e15MPMlinSaygVpfRE4A0KPmjQ==", "integrity": "sha512-EigKLhKLH1kfv1e/ZgXuSKlIjkbyneJtiLbNDz7EeEVFGV1XMM6bsCea1sb2WOxsPYiOX4Q5JmR1j1KGrZS/LA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -628,16 +628,16 @@
] ]
}, },
"node_modules/@rspack/core": { "node_modules/@rspack/core": {
"version": "1.2.5", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.2.5.tgz", "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.2.8.tgz",
"integrity": "sha512-x/riOl05gOVGgGQFimBqS5i8XbUpBxPIKUC+tDX4hmNNkzxRaGpspZfNtcL+1HBMyYuoM6fOWGyCp2R290Uy6g==", "integrity": "sha512-ppj3uQQtkhgrYDLrUqb33YbpNEZCpAudpfVuOHGsvUrAnu1PijbfJJymoA5ZvUhM+HNMvPI5D1ie97TXyb0UVg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@module-federation/runtime-tools": "0.8.4", "@module-federation/runtime-tools": "0.8.4",
"@rspack/binding": "1.2.5", "@rspack/binding": "1.2.8",
"@rspack/lite-tapable": "1.0.1", "@rspack/lite-tapable": "1.0.1",
"caniuse-lite": "^1.0.30001616" "caniuse-lite": "^1.0.30001702"
}, },
"engines": { "engines": {
"node": ">=16.0.0" "node": ">=16.0.0"
@@ -874,39 +874,41 @@
} }
}, },
"node_modules/@vueuse/core": { "node_modules/@vueuse/core": {
"version": "12.8.2", "version": "13.0.0",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz",
"integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/web-bluetooth": "^0.0.21", "@types/web-bluetooth": "^0.0.21",
"@vueuse/metadata": "12.8.2", "@vueuse/metadata": "13.0.0",
"@vueuse/shared": "12.8.2", "@vueuse/shared": "13.0.0"
"vue": "^3.5.13"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"vue": "^3.5.0"
} }
}, },
"node_modules/@vueuse/metadata": { "node_modules/@vueuse/metadata": {
"version": "12.8.2", "version": "13.0.0",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz",
"integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
} }
}, },
"node_modules/@vueuse/shared": { "node_modules/@vueuse/shared": {
"version": "12.8.2", "version": "13.0.0",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz",
"integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==",
"license": "MIT", "license": "MIT",
"dependencies": {
"vue": "^3.5.13"
},
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"vue": "^3.5.0"
} }
}, },
"node_modules/@webassemblyjs/ast": { "node_modules/@webassemblyjs/ast": {
@@ -1210,9 +1212,9 @@
} }
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
"integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.6", "follow-redirects": "^1.15.6",
@@ -1300,9 +1302,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001700", "version": "1.0.30001706",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
"integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -1446,9 +1448,9 @@
} }
}, },
"node_modules/core-js": { "node_modules/core-js": {
"version": "3.40.0", "version": "3.41.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz",
"integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",

View File

@@ -13,8 +13,8 @@
"@codemirror/lang-html": "^6.4.9", "@codemirror/lang-html": "^6.4.9",
"@codemirror/lang-javascript": "^6.2.3", "@codemirror/lang-javascript": "^6.2.3",
"@fsegurai/codemirror-theme-github-light": "^6.1.2", "@fsegurai/codemirror-theme-github-light": "^6.1.2",
"@vueuse/core": "^12.8.2", "@vueuse/core": "^13.0.0",
"axios": "^1.8.1", "axios": "^1.8.3",
"codemirror": "^6.0.1", "codemirror": "^6.0.1",
"copy-text-to-clipboard": "^3.2.0", "copy-text-to-clipboard": "^3.2.0",
"github-markdown-css": "^5.8.1", "github-markdown-css": "^5.8.1",
@@ -30,8 +30,8 @@
}, },
"devDependencies": { "devDependencies": {
"@iconify/vue": "^4.3.0", "@iconify/vue": "^4.3.0",
"@rsbuild/core": "^1.2.14", "@rsbuild/core": "^1.2.19",
"@rsbuild/plugin-vue": "^1.0.6", "@rsbuild/plugin-vue": "^1.0.7",
"@vue/tsconfig": "^0.7.0", "@vue/tsconfig": "^0.7.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"typescript": "^5.8.2", "typescript": "^5.8.2",

View File

@@ -133,6 +133,7 @@ export const Submission = {
}, },
async updateScore(id: string, score: number) { async updateScore(id: string, score: number) {
await http.put(`/submission/${id}/score`, { score }) const res = await http.put(`/submission/${id}/score`, { score })
return res.data
}, },
} }

View File

@@ -7,27 +7,20 @@
<n-flex> <n-flex>
<n-button quaternary @click="download" :disabled="!showDL">下载</n-button> <n-button quaternary @click="download" :disabled="!showDL">下载</n-button>
<n-button quaternary @click="open">展示</n-button> <n-button quaternary @click="open">展示</n-button>
<template v-if="!!submission.id"> <n-flex v-if="!!submission.id">
<n-button quaternary @click="emits('showCode')">查看代码</n-button> <n-button quaternary @click="emits('showCode')">查看代码</n-button>
<n-popover v-if="!submission.score && (roleAdmin || roleSuper)"> <n-popover v-if="submission.my_score === 0">
<template #trigger> <template #trigger>
<n-button secondary type="primary">手动打分</n-button> <n-button secondary type="primary">手动打分</n-button>
</template> </template>
<n-rate :size="30" @update:value="updateScore" /> <n-rate :size="30" @update:value="updateScore" />
</n-popover> </n-popover>
<n-button <!-- <n-button secondary type="info">智能打分</n-button> -->
v-if="!submission.score && (roleAdmin || roleSuper)" </n-flex>
secondary
type="info"
>
智能打分
</n-button>
</template>
</n-flex> </n-flex>
</n-flex> </n-flex>
<iframe class="iframe" ref="iframe"></iframe> <iframe class="iframe" ref="iframe"></iframe>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { watchDebounced } from "@vueuse/core" import { watchDebounced } from "@vueuse/core"
import { computed, onMounted, useTemplateRef } from "vue" import { computed, onMounted, useTemplateRef } from "vue"
@@ -35,7 +28,6 @@ import { Icon } from "@iconify/vue"
import { Submission } from "../api" import { Submission } from "../api"
import { submission } from "../store/submission" import { submission } from "../store/submission"
import { useMessage } from "naive-ui" import { useMessage } from "naive-ui"
import { roleAdmin, roleSuper } from "../store/user"
interface Props { interface Props {
html: string html: string
@@ -100,9 +92,9 @@ function open() {
async function updateScore(score: number) { async function updateScore(score: number) {
try { try {
await Submission.updateScore(submission.value.id, score) const res = await Submission.updateScore(submission.value.id, score)
message.success("评分成功") message.success(res.message)
submission.value.score = score submission.value.my_score = score
emits("afterScore") emits("afterScore")
} catch (err: any) { } catch (err: any) {
message.error(err.response.data.detail) message.error(err.response.data.detail)

View File

@@ -40,7 +40,7 @@ import { taskId } from "../store/task"
const displays = ref<number[]>([]) const displays = ref<number[]>([])
const content = useStorage(STORAGE_KEY.CONTENT, "") const content = useStorage(STORAGE_KEY.CONTENT, "")
const $content = useTemplateRef("$content") const $content = useTemplateRef<any>("$content")
defineEmits(["hide"]) defineEmits(["hide"])

View File

@@ -25,7 +25,7 @@
:css="css" :css="css"
:js="js" :js="js"
@after-score="afterScore" @after-score="afterScore"
@show-code="toggleShowCode" @show-code="codeModal = true"
/> />
</n-gi> </n-gi>
</n-grid> </n-grid>
@@ -91,7 +91,15 @@ const columns: DataTableColumn<SubmissionOut>[] = [
render: (submission) => h(TaskTitle, { submission }), render: (submission) => h(TaskTitle, { submission }),
}, },
{ {
title: "分", title: "我打的分",
key: "my_score",
render: (row) => {
if (row.my_score > 0) return row.my_score
else return "-"
},
},
{
title: "平均得分",
key: "score", key: "score",
render: (row) => { render: (row) => {
if (row.score > 0) return row.score if (row.score > 0) return row.score
@@ -120,14 +128,10 @@ async function getSubmissionByID(id: string) {
submission.value = await Submission.get(id) submission.value = await Submission.get(id)
} }
function toggleShowCode() {
codeModal.value = true
}
function afterScore() { function afterScore() {
data.value = data.value.map((d) => { data.value = data.value.map((d) => {
if (d.id === submission.value.id) { if (d.id === submission.value.id) {
d.score = submission.value.score d.my_score = submission.value.my_score
} }
return d return d
}) })
@@ -143,6 +147,7 @@ onUnmounted(() => {
task_title: "", task_title: "",
task_type: "tutorial", task_type: "tutorial",
score: 0, score: 0,
my_score: 0,
html: "", html: "",
css: "", css: "",
js: "", js: "",

View File

@@ -7,7 +7,8 @@ export const submission = ref<SubmissionAll>({
username: "", username: "",
task_title: "", task_title: "",
task_type: "tutorial", task_type: "tutorial",
score: 0, score: 0.0,
my_score: 0,
html: "", html: "",
css: "", css: "",
js: "", js: "",

View File

@@ -44,6 +44,7 @@ export interface SubmissionOut {
task_type: string task_type: string
task_title: string task_title: string
score: number score: number
my_score: number
created: Date created: Date
modified: Date modified: Date
} }
@@ -55,6 +56,7 @@ export interface SubmissionAll {
task_type: string task_type: string
task_title: string task_title: string
score: number score: number
my_score: number
html: "" html: ""
css: "" css: ""
js: "" js: ""