From 70a4b67b586f77acd57142de3734a66ea6e260af Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 30 Mar 2023 23:18:31 +0800 Subject: [PATCH] add contest problems. --- package-lock.json | 314 ++++++++++----------- package.json | 16 +- src/admin/api.ts | 24 +- src/admin/contest/components/Actions.vue | 8 +- src/admin/problem/components/Actions.vue | 11 +- src/admin/problem/components/AddButton.vue | 44 +++ src/admin/problem/components/Modal.vue | 90 ++++++ src/admin/problem/list.vue | 42 ++- src/components.d.ts | 3 +- src/oj/submission/list.vue | 2 +- 10 files changed, 378 insertions(+), 176 deletions(-) create mode 100644 src/admin/problem/components/AddButton.vue create mode 100644 src/admin/problem/components/Modal.vue diff --git a/package-lock.json b/package-lock.json index 1c6df74..4086e79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@wangeditor/editor-for-vue": "^5.1.12", "axios": "1.3.4", "chart.js": "^4.2.1", - "copy-text-to-clipboard": "^3.0.1", + "copy-text-to-clipboard": "^3.1.0", "date-fns": "^2.29.3", "highlight.js": "^11.7.0", "naive-ui": "^2.34.3", @@ -28,16 +28,16 @@ }, "devDependencies": { "@iconify-json/ep": "^1.1.10", - "@types/node": "^18.14.6", - "@vitejs/plugin-vue": "^4.0.0", + "@types/node": "^18.15.11", + "@vitejs/plugin-vue": "^4.1.0", "markdown-it-shiki": "^0.8.0", "monaco-editor": "^0.36.1", - "prettier": "^2.8.4", - "typescript": "^4.9.5", - "unplugin-auto-import": "^0.15.1", - "unplugin-icons": "^0.15.3", + "prettier": "^2.8.7", + "typescript": "^5.0.2", + "unplugin-auto-import": "^0.15.2", + "unplugin-icons": "^0.16.1", "unplugin-vue-components": "^0.24.1", - "vite": "^4.1.4", + "vite": "^4.2.1", "vite-plugin-vue-markdown": "^0.22.4", "vue-tsc": "^1.2.0" } @@ -507,9 +507,9 @@ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.14.tgz", + "integrity": "sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==", "cpu": [ "arm" ], @@ -523,9 +523,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.14.tgz", + "integrity": "sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==", "cpu": [ "arm64" ], @@ -539,9 +539,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.14.tgz", + "integrity": "sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==", "cpu": [ "x64" ], @@ -555,9 +555,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.14.tgz", + "integrity": "sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==", "cpu": [ "arm64" ], @@ -571,9 +571,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.14.tgz", + "integrity": "sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==", "cpu": [ "x64" ], @@ -587,9 +587,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.14.tgz", + "integrity": "sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==", "cpu": [ "arm64" ], @@ -603,9 +603,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.14.tgz", + "integrity": "sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==", "cpu": [ "x64" ], @@ -619,9 +619,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.14.tgz", + "integrity": "sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==", "cpu": [ "arm" ], @@ -635,9 +635,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.14.tgz", + "integrity": "sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==", "cpu": [ "arm64" ], @@ -651,9 +651,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.14.tgz", + "integrity": "sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==", "cpu": [ "ia32" ], @@ -667,9 +667,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.14.tgz", + "integrity": "sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==", "cpu": [ "loong64" ], @@ -683,9 +683,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.14.tgz", + "integrity": "sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==", "cpu": [ "mips64el" ], @@ -699,9 +699,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.14.tgz", + "integrity": "sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==", "cpu": [ "ppc64" ], @@ -715,9 +715,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.14.tgz", + "integrity": "sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==", "cpu": [ "riscv64" ], @@ -731,9 +731,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.14.tgz", + "integrity": "sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==", "cpu": [ "s390x" ], @@ -747,9 +747,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.14.tgz", + "integrity": "sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==", "cpu": [ "x64" ], @@ -763,9 +763,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.14.tgz", + "integrity": "sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==", "cpu": [ "x64" ], @@ -779,9 +779,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.14.tgz", + "integrity": "sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==", "cpu": [ "x64" ], @@ -795,9 +795,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.14.tgz", + "integrity": "sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==", "cpu": [ "x64" ], @@ -811,9 +811,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.14.tgz", + "integrity": "sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==", "cpu": [ "arm64" ], @@ -827,9 +827,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.14.tgz", + "integrity": "sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==", "cpu": [ "ia32" ], @@ -843,9 +843,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz", + "integrity": "sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==", "cpu": [ "x64" ], @@ -874,9 +874,9 @@ "dev": true }, "node_modules/@iconify/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-4rnzpZ2AWztPKDyWtw+DwJ9uko24it6YS+cnVpZveOrvLErwg22eXcGnIfuMFyECvsfbFhMqZW5YYWHe3CyEEg==", + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-2.1.5.tgz", + "integrity": "sha512-6MvDI+I6QMvXn5rK9KQGdpEE4mmLTcuQdLZEiX5N+uZB+vc4Yw9K1OtnOgkl8mp4d9X0UrILREyZgF1NUwUt+Q==", "dev": true, "dependencies": { "@antfu/install-pkg": "^0.1.1", @@ -1179,9 +1179,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.14.6", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.14.6.tgz", - "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", + "version": "18.15.11", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", "dev": true }, "node_modules/@types/web-bluetooth": { @@ -1240,9 +1240,9 @@ } }, "node_modules/@vitejs/plugin-vue": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", - "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz", + "integrity": "sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==", "dev": true, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1964,9 +1964,9 @@ "peer": true }, "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", + "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", "engines": { "node": ">=12" } @@ -2210,9 +2210,9 @@ } }, "node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.14", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.14.tgz", + "integrity": "sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==", "dev": true, "hasInstallScript": true, "bin": { @@ -2222,28 +2222,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.14", + "@esbuild/android-arm64": "0.17.14", + "@esbuild/android-x64": "0.17.14", + "@esbuild/darwin-arm64": "0.17.14", + "@esbuild/darwin-x64": "0.17.14", + "@esbuild/freebsd-arm64": "0.17.14", + "@esbuild/freebsd-x64": "0.17.14", + "@esbuild/linux-arm": "0.17.14", + "@esbuild/linux-arm64": "0.17.14", + "@esbuild/linux-ia32": "0.17.14", + "@esbuild/linux-loong64": "0.17.14", + "@esbuild/linux-mips64el": "0.17.14", + "@esbuild/linux-ppc64": "0.17.14", + "@esbuild/linux-riscv64": "0.17.14", + "@esbuild/linux-s390x": "0.17.14", + "@esbuild/linux-x64": "0.17.14", + "@esbuild/netbsd-x64": "0.17.14", + "@esbuild/openbsd-x64": "0.17.14", + "@esbuild/sunos-x64": "0.17.14", + "@esbuild/win32-arm64": "0.17.14", + "@esbuild/win32-ia32": "0.17.14", + "@esbuild/win32-x64": "0.17.14" } }, "node_modules/escalade": { @@ -3177,9 +3177,9 @@ } }, "node_modules/minimatch": { - "version": "7.4.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-7.4.2.tgz", - "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==", + "version": "7.4.3", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -3243,15 +3243,15 @@ } }, "node_modules/mlly": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.1.1.tgz", - "integrity": "sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw==", + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.2.0.tgz", + "integrity": "sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==", "dev": true, "dependencies": { "acorn": "^8.8.2", "pathe": "^1.1.0", - "pkg-types": "^1.0.1", - "ufo": "^1.1.0" + "pkg-types": "^1.0.2", + "ufo": "^1.1.1" } }, "node_modules/monaco-editor": { @@ -3568,9 +3568,9 @@ "integrity": "sha512-KyoXVDU5OqTpG9LXlB3+y639JAGzl8JSBXLn1J9HTSB3gbKcuInga7bZnXLlxmK94ntTs1EFeZp0lrja2AuBYQ==" }, "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "version": "2.8.7", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -3686,9 +3686,9 @@ } }, "node_modules/rollup": { - "version": "3.14.0", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.14.0.tgz", - "integrity": "sha512-o23sdgCLcLSe3zIplT9nQ1+r97okuaiR+vmAPZPTDYB7/f3tgWIYNyiQveMsZwshBT0is4eGax/HH83Q7CG+/Q==", + "version": "3.20.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.20.2.tgz", + "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -4051,16 +4051,16 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/uc.micro": { @@ -4070,9 +4070,9 @@ "dev": true }, "node_modules/ufo": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.1.0.tgz", - "integrity": "sha512-LQc2s/ZDMaCN3QLpa+uzHUOQ7SdV0qgv3VBXOolQGXTaaZpIur6PwUclF5nN2hNkiTRcUugXd1zFOW3FLJ135Q==", + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.1.1.tgz", + "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", "dev": true }, "node_modules/unctx": { @@ -4122,9 +4122,9 @@ } }, "node_modules/unplugin": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.1.0.tgz", - "integrity": "sha512-I8obQ8Rs/hnkxokRV6g8JKOQFgYNnTd9DL58vcSt5IJ9AkK8wbrtsnzD5hi4BJlvcY536JzfEXj9L6h7j559/A==", + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.3.1.tgz", + "integrity": "sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==", "dev": true, "dependencies": { "acorn": "^8.8.2", @@ -4134,18 +4134,18 @@ } }, "node_modules/unplugin-auto-import": { - "version": "0.15.1", - "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.15.1.tgz", - "integrity": "sha512-xLS+BfVNy00Y3IkqBmEd0IThvjx8kSGIgSuf/1kETttiENK8sHrDA+poKkQxRCPTKYH4yWM6txGQANPTzwpUWQ==", + "version": "0.15.2", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.15.2.tgz", + "integrity": "sha512-Wivfu+xccgvEZG8QtZcIvt6napfX9wyOFqM//7FHOtev8+k+dp3ykiqsEl6TODgHmqTTBeQX4Ah1JvRgUNjlkg==", "dev": true, "dependencies": { "@antfu/utils": "^0.7.2", "@rollup/pluginutils": "^5.0.2", "local-pkg": "^0.4.3", "magic-string": "^0.30.0", - "minimatch": "^7.4.2", - "unimport": "^3.0.2", - "unplugin": "^1.1.0" + "minimatch": "^7.4.3", + "unimport": "^3.0.3", + "unplugin": "^1.3.1" }, "engines": { "node": ">=14" @@ -4176,9 +4176,9 @@ } }, "node_modules/unplugin-auto-import/node_modules/unimport": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.0.2.tgz", - "integrity": "sha512-OQ0hShpcerS1PSsISsyn/NV2dGe5xfdUn4p5nwOodq0iqq5xxYQrTidHqlFGjxIliPDtDJp80OeySzyPTjYHmA==", + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.0.4.tgz", + "integrity": "sha512-eoof/HLiNJcIkVpnqc7sJbzKSLx39J6xTaP7E4ElgVQKeq2t9fPTkvJKcA55IJTaRPkEkDq8kcc/IZPmrypnFg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.2", @@ -4186,30 +4186,30 @@ "fast-glob": "^3.2.12", "local-pkg": "^0.4.3", "magic-string": "^0.30.0", - "mlly": "^1.1.1", + "mlly": "^1.2.0", "pathe": "^1.1.0", "pkg-types": "^1.0.2", "scule": "^1.0.0", "strip-literal": "^1.0.1", - "unplugin": "^1.1.0" + "unplugin": "^1.3.1" } }, "node_modules/unplugin-icons": { - "version": "0.15.3", - "resolved": "https://registry.npmmirror.com/unplugin-icons/-/unplugin-icons-0.15.3.tgz", - "integrity": "sha512-YWgJqv5AahrokeOnta8uX/m1damZA6Rf6zPClgHg2Fa/45iyOe3Lj+Wn/Ba+CSsq9yBffn17YfKfJNyWCNZPvw==", + "version": "0.16.1", + "resolved": "https://registry.npmmirror.com/unplugin-icons/-/unplugin-icons-0.16.1.tgz", + "integrity": "sha512-qTunFUkpAyDnwzwV7YV1ZgCWRYfLuURcCurhhXOWMy2ipY88qx1pADvral2hJu4Xymh0X0t3Zcll3BIru2AVLQ==", "dev": true, "dependencies": { "@antfu/install-pkg": "^0.1.1", "@antfu/utils": "^0.7.2", - "@iconify/utils": "^2.1.2", + "@iconify/utils": "^2.1.5", "debug": "^4.3.4", "kolorist": "^1.7.0", "local-pkg": "^0.4.3", - "unplugin": "^1.0.1" + "unplugin": "^1.3.1" }, "peerDependencies": { - "@svgr/core": ">=5.5.0", + "@svgr/core": ">=7.0.0", "@vue/compiler-sfc": "^3.0.2 || ^2.7.0", "vue-template-compiler": "^2.6.12", "vue-template-es2015-compiler": "^1.9.0" @@ -4327,15 +4327,15 @@ } }, "node_modules/vite": { - "version": "4.1.4", - "resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", "dev": true, "dependencies": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" }, "bin": { "vite": "bin/vite.js" diff --git a/package.json b/package.json index 4dbf3e4..7fa083c 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@wangeditor/editor-for-vue": "^5.1.12", "axios": "1.3.4", "chart.js": "^4.2.1", - "copy-text-to-clipboard": "^3.0.1", + "copy-text-to-clipboard": "^3.1.0", "date-fns": "^2.29.3", "highlight.js": "^11.7.0", "naive-ui": "^2.34.3", @@ -30,16 +30,16 @@ }, "devDependencies": { "@iconify-json/ep": "^1.1.10", - "@types/node": "^18.14.6", - "@vitejs/plugin-vue": "^4.0.0", + "@types/node": "^18.15.11", + "@vitejs/plugin-vue": "^4.1.0", "markdown-it-shiki": "^0.8.0", "monaco-editor": "^0.36.1", - "prettier": "^2.8.4", - "typescript": "^4.9.5", - "unplugin-auto-import": "^0.15.1", - "unplugin-icons": "^0.15.3", + "prettier": "^2.8.7", + "typescript": "^5.0.2", + "unplugin-auto-import": "^0.15.2", + "unplugin-icons": "^0.16.1", "unplugin-vue-components": "^0.24.1", - "vite": "^4.1.4", + "vite": "^4.2.1", "vite-plugin-vue-markdown": "^0.22.4", "vue-tsc": "^1.2.0" } diff --git a/src/admin/api.ts b/src/admin/api.ts index 96e759a..b2ba496 100644 --- a/src/admin/api.ts +++ b/src/admin/api.ts @@ -16,11 +16,19 @@ export async function getProblemList( offset = 0, limit = 10, keyword: string, - contestID?: string + contestID?: string, + ruleType?: "ACM" | "OI" ) { const endpoint = !!contestID ? "admin/contest/problem" : "admin/problem" const res = await http.get(endpoint, { - params: { paging: true, offset, limit, keyword, contest_id: contestID }, + params: { + paging: true, + offset, + limit, + keyword, + contest_id: contestID, + rule_type: ruleType, + }, }) return { results: res.data.results.map((result: AdminProblem) => ({ @@ -129,3 +137,15 @@ export function getContest(id: string) { params: { id }, }) } + +export function addProblemForContest( + contestID: string, + problemID: number, + displayID: string +) { + return http.post("admin/contest/add_problem_from_public", { + contest_id: contestID, + problem_id: problemID, + display_id: displayID, + }) +} diff --git a/src/admin/contest/components/Actions.vue b/src/admin/contest/components/Actions.vue index 5a6508d..ec969b9 100644 --- a/src/admin/contest/components/Actions.vue +++ b/src/admin/contest/components/Actions.vue @@ -23,12 +23,12 @@ function goEditProblems() { diff --git a/src/admin/problem/components/Actions.vue b/src/admin/problem/components/Actions.vue index 62baa4c..5122d8c 100644 --- a/src/admin/problem/components/Actions.vue +++ b/src/admin/problem/components/Actions.vue @@ -41,7 +41,16 @@ function goEdit() { } function goCheck() { - const data = router.resolve("/problem/" + props.problemDisplayID) + let data = router.resolve("/problem/" + props.problemDisplayID) + if (route.name === "admin contest problem list") { + data = router.resolve({ + name: "contest problem", + params: { + contestID: route.params.contestID, + problemID: props.problemDisplayID, + }, + }) + } window.open(data.href, "_blank") } diff --git a/src/admin/problem/components/AddButton.vue b/src/admin/problem/components/AddButton.vue new file mode 100644 index 0000000..680af91 --- /dev/null +++ b/src/admin/problem/components/AddButton.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/admin/problem/components/Modal.vue b/src/admin/problem/components/Modal.vue new file mode 100644 index 0000000..0c6e6fb --- /dev/null +++ b/src/admin/problem/components/Modal.vue @@ -0,0 +1,90 @@ + + + diff --git a/src/admin/problem/list.vue b/src/admin/problem/list.vue index fe5007f..5b299b3 100644 --- a/src/admin/problem/list.vue +++ b/src/admin/problem/list.vue @@ -5,12 +5,29 @@ import { DataTableColumn, NSwitch } from "naive-ui" import { AdminProblemFiltered } from "~/utils/types" import { parseTime } from "~/utils/functions" import Actions from "./components/Actions.vue" +import Modal from "./components/Modal.vue" interface Props { contestID?: string } const props = defineProps() +const route = useRoute() +const router = useRouter() + +const title = computed( + () => + ({ + "admin problem list": "题目列表", + "admin contest problem list": "比赛题目列表", + }[route.name]) +) +const isContestProblemList = computed( + () => route.name === "admin contest problem list" +) + +const [show, toggleShow] = useToggle() +const { count, inc } = useCounter(0) const total = ref(0) const problems = ref([]) const query = reactive({ @@ -78,14 +95,34 @@ async function toggleVisible(problemID: number) { }) } +function createContestProblem() { + router.push({ + name: "admin contest problem create", + params: { contestID: props.contestID }, + }) +} + +async function selectProblems() { + toggleShow(true) + inc() +} + onMounted(listProblems) watch(query, listProblems, { deep: true })