admin config.

This commit is contained in:
2023-04-23 10:24:37 +08:00
parent e25971d8e4
commit 387ef0999b
4 changed files with 216 additions and 131 deletions

266
package-lock.json generated
View File

@@ -11,7 +11,7 @@
"@codemirror/lang-cpp": "^6.0.2",
"@codemirror/lang-python": "^6.1.2",
"@element-plus/icons-vue": "^2.1.0",
"@vueuse/core": "^9.13.0",
"@vueuse/core": "^10.1.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.3.5",
@@ -23,7 +23,7 @@
"naive-ui": "^2.34.3",
"normalize.css": "^8.0.1",
"party-js": "^2.2.0",
"pinia": "^2.0.34",
"pinia": "^2.0.35",
"vue": "^3.2.47",
"vue-chartjs": "^5.2.0",
"vue-codemirror": "^6.1.1",
@@ -31,19 +31,19 @@
},
"devDependencies": {
"@iconify-json/ep": "^1.1.10",
"@types/node": "^18.15.11",
"@types/node": "^18.15.13",
"@vitejs/plugin-legacy": "^4.0.2",
"@vitejs/plugin-vue": "^4.1.0",
"markdown-it-shiki": "^0.8.0",
"markdown-it-shiki": "^0.8.1",
"prettier": "^2.8.7",
"terser": "^5.16.9",
"terser": "^5.17.1",
"typescript": "^5.0.4",
"unplugin-auto-import": "^0.15.2",
"unplugin-auto-import": "^0.15.3",
"unplugin-icons": "^0.16.1",
"unplugin-vue-components": "^0.24.1",
"vite": "^4.2.1",
"vite-plugin-vue-markdown": "^0.22.4",
"vue-tsc": "^1.2.0"
"vite": "^4.3.1",
"vite-plugin-vue-markdown": "^0.22.6",
"vue-tsc": "^1.4.4"
}
},
"node_modules/@ampproject/remapping": {
@@ -2351,9 +2351,9 @@
}
},
"node_modules/@mdit-vue/plugin-component": {
"version": "0.11.2",
"resolved": "https://registry.npmmirror.com/@mdit-vue/plugin-component/-/plugin-component-0.11.2.tgz",
"integrity": "sha512-ucFiEULCkLcCG1Tf1MfG5u5PS4BIXWIeKGHRGsXxz1ix2GbZWKFVgWEdNEckBu8s75Fv1WJLIOiAYZyri2f1nw==",
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/@mdit-vue/plugin-component/-/plugin-component-0.12.0.tgz",
"integrity": "sha512-LrwV3f0Y6H7b7m/w1Y3bkGuR3HOiBK4QiHHW3HuRMza6MZodDQbj8Baik5/V5GiSg1/ltijS1CymVcycd1EfTw==",
"dev": true,
"dependencies": {
"@types/markdown-it": "^12.2.3",
@@ -2361,21 +2361,21 @@
}
},
"node_modules/@mdit-vue/plugin-frontmatter": {
"version": "0.11.1",
"resolved": "https://registry.npmmirror.com/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.11.1.tgz",
"integrity": "sha512-AdZJInjD1pTJXlfhuoBS5ycuIQ3ewBfY0R/XHM3TRDEaDHQJHxouUCpCyijZmpdljTU45lFetIowaKtAi7GBog==",
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.12.0.tgz",
"integrity": "sha512-26Y3JktjGgNoCVH7NLqi5RcdAauAqxepTt2qXueRcRHtGpiRQV2/M1FveIhCOTCtHSuG5bBOHUxGaV6vRK3Vbw==",
"dev": true,
"dependencies": {
"@mdit-vue/types": "0.11.0",
"@mdit-vue/types": "0.12.0",
"@types/markdown-it": "^12.2.3",
"gray-matter": "^4.0.3",
"markdown-it": "^13.0.1"
}
},
"node_modules/@mdit-vue/types": {
"version": "0.11.0",
"resolved": "https://registry.npmmirror.com/@mdit-vue/types/-/types-0.11.0.tgz",
"integrity": "sha512-ygCGP7vFpqS02hpZwEe1uz8cfImWX06+zRs08J+tCZRKb6k+easIaIHFtY9ZSxt7j9L/gAPLDo/5RmOT6z0DPQ==",
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/@mdit-vue/types/-/types-0.12.0.tgz",
"integrity": "sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
@@ -2566,9 +2566,9 @@
"dev": true
},
"node_modules/@types/node": {
"version": "18.15.11",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-18.15.11.tgz",
"integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
"version": "18.15.13",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-18.15.13.tgz",
"integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==",
"dev": true
},
"node_modules/@types/web-bluetooth": {
@@ -2674,69 +2674,75 @@
}
},
"node_modules/@volar/language-core": {
"version": "1.3.0-alpha.0",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.3.0-alpha.0.tgz",
"integrity": "sha512-W3uMzecHPcbwddPu4SJpUcPakRBK/y/BP+U0U6NiPpUX1tONLC4yCawt+QBJqtgJ+sfD6ztf5PyvPL3hQRqfOA==",
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.4.1.tgz",
"integrity": "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==",
"dev": true,
"dependencies": {
"@volar/source-map": "1.3.0-alpha.0"
"@volar/source-map": "1.4.1"
}
},
"node_modules/@volar/source-map": {
"version": "1.3.0-alpha.0",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.3.0-alpha.0.tgz",
"integrity": "sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==",
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.4.1.tgz",
"integrity": "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==",
"dev": true,
"dependencies": {
"muggle-string": "^0.2.2"
}
},
"node_modules/@volar/typescript": {
"version": "1.3.0-alpha.0",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.3.0-alpha.0.tgz",
"integrity": "sha512-5UItyW2cdH2mBLu4RrECRNJRgtvvzKrSCn2y3v/D61QwIDkGx4aeil6x8RFuUL5TFtV6QvVHXnsOHxNgd+sCow==",
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.4.1.tgz",
"integrity": "sha512-phTy6p9yG6bgMIKQWEeDOi/aeT0njZsb1a/G1mrEuDsLmAn24Le4gDwSsGNhea6Uhu+3gdpUZn2PmZXa+WG2iQ==",
"dev": true,
"dependencies": {
"@volar/language-core": "1.3.0-alpha.0"
"@volar/language-core": "1.4.1"
},
"peerDependencies": {
"typescript": "*"
}
},
"node_modules/@volar/vue-language-core": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.2.0.tgz",
"integrity": "sha512-w7yEiaITh2WzKe6u8ZdeLKCUz43wdmY/OqAmsB/PGDvvhTcVhCJ6f0W/RprZL1IhqH8wALoWiwEh/Wer7ZviMQ==",
"version": "1.4.4",
"resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.4.4.tgz",
"integrity": "sha512-c3hL6un+CfoOlusGvpypcodmk9ke/ImrWIUc0GkgI+imoQpUGzgu3tEQWlPs604R7AhxeZwWUi8hQNfax0R/zA==",
"dev": true,
"dependencies": {
"@volar/language-core": "1.3.0-alpha.0",
"@volar/source-map": "1.3.0-alpha.0",
"@vue/compiler-dom": "^3.2.47",
"@vue/compiler-sfc": "^3.2.47",
"@vue/reactivity": "^3.2.47",
"@vue/shared": "^3.2.47",
"minimatch": "^6.1.6",
"@volar/language-core": "1.4.1",
"@volar/source-map": "1.4.1",
"@vue/compiler-dom": "^3.2.0",
"@vue/compiler-sfc": "^3.2.0",
"@vue/reactivity": "^3.2.0",
"@vue/shared": "^3.2.0",
"minimatch": "^9.0.0",
"muggle-string": "^0.2.2",
"vue-template-compiler": "^2.7.14"
}
},
"node_modules/@volar/vue-language-core/node_modules/minimatch": {
"version": "6.2.0",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-6.2.0.tgz",
"integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==",
"version": "9.0.0",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.0.tgz",
"integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/@volar/vue-typescript": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.2.0.tgz",
"integrity": "sha512-zjmRi9y3J1EkG+pfuHp8IbHmibihrKK485cfzsHjiuvJMGrpkWvlO5WVEk8oslMxxeGC5XwBFE9AOlvh378EPA==",
"version": "1.4.4",
"resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.4.4.tgz",
"integrity": "sha512-L61Fk15jlJw3QtIddD4cVE5jei5i6zbLJRiaEMYDDnUKB259/qUrdvnMfnZUFVyDwlevzdstjtaUyreeG/0nPQ==",
"dev": true,
"dependencies": {
"@volar/typescript": "1.3.0-alpha.0",
"@volar/vue-language-core": "1.2.0"
"@volar/typescript": "1.4.1",
"@volar/vue-language-core": "1.4.4"
},
"peerDependencies": {
"typescript": "*"
}
},
"node_modules/@vue/compiler-core": {
@@ -2868,27 +2874,71 @@
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
},
"node_modules/@vueuse/core": {
"version": "9.13.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.0.tgz",
"integrity": "sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
"@vueuse/metadata": "9.13.0",
"@vueuse/shared": "9.13.0",
"vue-demi": "*"
"@vueuse/metadata": "10.1.0",
"@vueuse/shared": "10.1.0",
"vue-demi": ">=0.14.0"
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
"version": "0.14.0",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
"integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@vueuse/metadata": {
"version": "9.13.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.0.tgz",
"integrity": "sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg=="
},
"node_modules/@vueuse/shared": {
"version": "9.13.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.0.tgz",
"integrity": "sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==",
"dependencies": {
"vue-demi": "*"
"vue-demi": ">=0.14.0"
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
"version": "0.14.0",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
"integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@wangeditor/basic-modules": {
@@ -4485,8 +4535,6 @@
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -4525,9 +4573,9 @@
}
},
"node_modules/markdown-it-shiki": {
"version": "0.8.0",
"resolved": "https://registry.npmmirror.com/markdown-it-shiki/-/markdown-it-shiki-0.8.0.tgz",
"integrity": "sha512-RsMhQPFnQlXIlTdu94cYjCKeX3G3JmAijICB1BuoIZn12HEWIGGF970tytOq1404ioM3mXkETjXtBu7D73BzWQ==",
"version": "0.8.1",
"resolved": "https://registry.npmmirror.com/markdown-it-shiki/-/markdown-it-shiki-0.8.1.tgz",
"integrity": "sha512-x3R9nxmOMGai+ZWNL+KpiA6f39xplB7ssyeOrptwlMVPRSMVBnKFi66acIqqbUjK2o8caH48B+sWwL0/8ljAOA==",
"dev": true,
"dependencies": {
"shiki": "^0.14.1",
@@ -4926,9 +4974,9 @@
}
},
"node_modules/pinia": {
"version": "2.0.34",
"resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.34.tgz",
"integrity": "sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==",
"version": "2.0.35",
"resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.35.tgz",
"integrity": "sha512-P1IKKQWhxGXiiZ3atOaNI75bYlFUbRxtJdhPLX059Z7+b9Z04rnTZdSY8Aph1LA+/4QEMAYHsTQ638Wfe+6K5g==",
"dependencies": {
"@vue/devtools-api": "^6.5.0",
"vue-demi": "*"
@@ -5240,8 +5288,6 @@
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -5496,9 +5542,9 @@
}
},
"node_modules/terser": {
"version": "5.16.9",
"resolved": "https://registry.npmmirror.com/terser/-/terser-5.16.9.tgz",
"integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==",
"version": "5.17.1",
"resolved": "https://registry.npmmirror.com/terser/-/terser-5.17.1.tgz",
"integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
@@ -5689,17 +5735,17 @@
}
},
"node_modules/unplugin-auto-import": {
"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==",
"version": "0.15.3",
"resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.15.3.tgz",
"integrity": "sha512-RLT8SqbPn4bT7yBshZId0uPSofKWnwr66RyDaxWaFb/+f7OTDOWAsVNz+hOQLBWSjvbekr2xZY9ccS8TDHJbCQ==",
"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.3",
"unimport": "^3.0.3",
"minimatch": "^9.0.0",
"unimport": "^3.0.6",
"unplugin": "^1.3.1"
},
"engines": {
@@ -5730,10 +5776,22 @@
"node": ">=12"
}
},
"node_modules/unplugin-auto-import/node_modules/minimatch": {
"version": "9.0.0",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.0.tgz",
"integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/unplugin-auto-import/node_modules/unimport": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.0.4.tgz",
"integrity": "sha512-eoof/HLiNJcIkVpnqc7sJbzKSLx39J6xTaP7E4ElgVQKeq2t9fPTkvJKcA55IJTaRPkEkDq8kcc/IZPmrypnFg==",
"version": "3.0.6",
"resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.0.6.tgz",
"integrity": "sha512-GYxGJ1Bri1oqx8VFDjdgooGzeK7jBk3bvhXmamTIpu3nONOcUMGwZbX7X0L5RA7OWMXpR4vzpSQP7pXUzJg1/Q==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^5.0.2",
@@ -5880,15 +5938,14 @@
}
},
"node_modules/vite": {
"version": "4.2.1",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.2.1.tgz",
"integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==",
"version": "4.3.1",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.1.tgz",
"integrity": "sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==",
"dev": true,
"dependencies": {
"esbuild": "^0.17.5",
"postcss": "^8.4.21",
"resolve": "^1.22.1",
"rollup": "^3.18.0"
"rollup": "^3.20.2"
},
"bin": {
"vite": "bin/vite.js"
@@ -5929,15 +5986,15 @@
}
},
"node_modules/vite-plugin-vue-markdown": {
"version": "0.22.4",
"resolved": "https://registry.npmmirror.com/vite-plugin-vue-markdown/-/vite-plugin-vue-markdown-0.22.4.tgz",
"integrity": "sha512-+kDzqGI5Lq0Wa6M4EJtV7cqOIHgGp6g4jcazXljQKLl9Og4fRs6FuGAPa2HiJ44Z9es85LAPiPbTjwrZEGEUKA==",
"version": "0.22.6",
"resolved": "https://registry.npmmirror.com/vite-plugin-vue-markdown/-/vite-plugin-vue-markdown-0.22.6.tgz",
"integrity": "sha512-BB0/yYoRO+4hceFZRgU/iAOpgklFvo/eHLapOkavIoDkP0jeoQubOMTEF8K4FuYRX9jaN5WcP2TrfhUgc7RuUg==",
"dev": true,
"dependencies": {
"@antfu/utils": "^0.7.2",
"@mdit-vue/plugin-component": "^0.11.2",
"@mdit-vue/plugin-frontmatter": "^0.11.1",
"@mdit-vue/types": "^0.11.0",
"@mdit-vue/plugin-component": "^0.12.0",
"@mdit-vue/plugin-frontmatter": "^0.12.0",
"@mdit-vue/types": "^0.12.0",
"@rollup/pluginutils": "^5.0.2",
"@types/markdown-it": "^12.2.3",
"markdown-it": "^13.0.1"
@@ -6049,13 +6106,14 @@
}
},
"node_modules/vue-tsc": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.2.0.tgz",
"integrity": "sha512-rIlzqdrhyPYyLG9zxsVRa+JEseeS9s8F2BbVVVWRRsTZvJO2BbhLEb2HW3MY+DFma0378tnIqs+vfTzbcQtRFw==",
"version": "1.4.4",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.4.4.tgz",
"integrity": "sha512-2XsCjF2mLo6gwOVcOpngwJkP8GzYQjNh20A+Pr2FGdsWzr9jjXJ0k08/DfcslfncsuCrTrnWtb4KEL3gcDtlNA==",
"dev": true,
"dependencies": {
"@volar/vue-language-core": "1.2.0",
"@volar/vue-typescript": "1.2.0"
"@volar/vue-language-core": "1.4.4",
"@volar/vue-typescript": "1.4.4",
"semver": "^7.3.8"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"
@@ -6125,9 +6183,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true,
"optional": true,
"peer": true
"dev": true
},
"node_modules/yocto-queue": {
"version": "0.1.0",

View File

@@ -13,7 +13,7 @@
"@codemirror/lang-cpp": "^6.0.2",
"@codemirror/lang-python": "^6.1.2",
"@element-plus/icons-vue": "^2.1.0",
"@vueuse/core": "^9.13.0",
"@vueuse/core": "^10.1.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.3.5",
@@ -25,7 +25,7 @@
"naive-ui": "^2.34.3",
"normalize.css": "^8.0.1",
"party-js": "^2.2.0",
"pinia": "^2.0.34",
"pinia": "^2.0.35",
"vue": "^3.2.47",
"vue-chartjs": "^5.2.0",
"vue-codemirror": "^6.1.1",
@@ -33,18 +33,18 @@
},
"devDependencies": {
"@iconify-json/ep": "^1.1.10",
"@types/node": "^18.15.11",
"@types/node": "^18.15.13",
"@vitejs/plugin-legacy": "^4.0.2",
"@vitejs/plugin-vue": "^4.1.0",
"markdown-it-shiki": "^0.8.0",
"markdown-it-shiki": "^0.8.1",
"prettier": "^2.8.7",
"terser": "^5.16.9",
"terser": "^5.17.1",
"typescript": "^5.0.4",
"unplugin-auto-import": "^0.15.2",
"unplugin-auto-import": "^0.15.3",
"unplugin-icons": "^0.16.1",
"unplugin-vue-components": "^0.24.1",
"vite": "^4.2.1",
"vite-plugin-vue-markdown": "^0.22.4",
"vue-tsc": "^1.2.0"
"vite": "^4.3.1",
"vite-plugin-vue-markdown": "^0.22.6",
"vue-tsc": "^1.4.4"
}
}

View File

@@ -11,9 +11,14 @@ import {
import { Server } from "~/utils/types"
import { parseTime } from "~/utils/functions"
interface Testcase {
id: string
create_time: string
}
const message = useMessage()
const columns: DataTableColumn<any>[] = [
const testcaseColumns: DataTableColumn<Testcase>[] = [
{ title: "上次修改时间", key: "create_time" },
{ title: "ID", key: "id" },
{
@@ -68,7 +73,7 @@ const serverColumns: DataTableColumn<Server>[] = [
render: (row) => row.memory_usage + "%",
width: 80,
},
{ title: "IP", key: "ip", width: 100 },
{ title: "IP", key: "ip", width: 140 },
{ title: "判题机版本", key: "judger_version" },
{ title: "服务器 URL", key: "service_url" },
{
@@ -85,9 +90,12 @@ const serverColumns: DataTableColumn<Server>[] = [
},
]
const testcases = ref([])
const testcases = ref<Testcase[]>([])
const token = ref("")
const servers = ref<Server[]>([])
const abnormalServers = computed(() =>
servers.value.filter((item) => item.status === "abnormal")
)
const websiteConfig = reactive({
website_base_url: "https://oj.hyyz.izhai.net",
@@ -134,6 +142,14 @@ async function delJudgeServer(hostname: string) {
message.success("删除成功")
}
async function deleteAbnormalServers() {
const dels = abnormalServers.value.map((item) =>
deleteJudgeServer(item.hostname)
)
await Promise.all(dels)
message.success("删除成功")
}
onMounted(() => {
getWebsiteConfig()
getTestcases()
@@ -178,8 +194,21 @@ onMounted(() => {
</n-space>
</n-space>
</n-card>
<n-card class="box" title="判题服务器">
<div class="serverToken">
<n-card class="box">
<template #header>
<n-space align="center">
判题服务器
<n-button
v-if="abnormalServers.length"
size="small"
type="warning"
@click="deleteAbnormalServers"
>
删除无效服务器
</n-button>
</n-space>
</template>
<div class="box">
接口凭证 <n-tag size="small">{{ token }}</n-tag>
</div>
<n-data-table
@@ -190,16 +219,11 @@ onMounted(() => {
:data="servers"
/>
</n-card>
<n-card class="box">
<n-card class="box" v-if="testcases.length">
<template #header>
<n-space align="center">
无效的测试用例
<n-button
v-if="testcases.length"
size="small"
type="primary"
@click="() => deleteTestcase()"
>
<n-button size="small" type="warning" @click="() => deleteTestcase()">
全部删除
</n-button>
</n-space>
@@ -208,7 +232,7 @@ onMounted(() => {
striped
size="small"
class="table"
:columns="columns"
:columns="testcaseColumns"
:data="testcases"
/>
</n-card>
@@ -226,8 +250,4 @@ onMounted(() => {
.table {
width: 40%;
}
.serverToken {
margin-bottom: 16px;
}
</style>

View File

@@ -21,7 +21,9 @@ declare global {
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
const createPinia: typeof import('pinia')['createPinia']
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
const customRef: typeof import('vue')['customRef']
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
@@ -113,11 +115,14 @@ declare global {
const unrefElement: typeof import('@vueuse/core')['unrefElement']
const until: typeof import('@vueuse/core')['until']
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
const useAnimate: typeof import('@vueuse/core')['useAnimate']
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
@@ -208,6 +213,8 @@ declare global {
const useOnline: typeof import('@vueuse/core')['useOnline']
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
const useParallax: typeof import('@vueuse/core')['useParallax']
const useParentElement: typeof import('@vueuse/core')['useParentElement']
const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
const usePermission: typeof import('@vueuse/core')['usePermission']
const usePointer: typeof import('@vueuse/core')['usePointer']
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
@@ -275,8 +282,10 @@ declare global {
const watchArray: typeof import('@vueuse/core')['watchArray']
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
const watchDeep: typeof import('@vueuse/core')['watchDeep']
const watchEffect: typeof import('vue')['watchEffect']
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
const watchOnce: typeof import('@vueuse/core')['watchOnce']
const watchPausable: typeof import('@vueuse/core')['watchPausable']
const watchPostEffect: typeof import('vue')['watchPostEffect']