remove useAxios.

This commit is contained in:
2023-01-23 21:35:10 +08:00
parent 8e05cb601d
commit b060262f70
18 changed files with 459 additions and 194 deletions

418
package-lock.json generated
View File

@@ -10,9 +10,8 @@
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@monaco-editor/loader": "^1.3.2",
"@vueuse/core": "^9.11.0",
"@vueuse/integrations": "^9.11.0",
"axios": "1.2.2",
"@vueuse/core": "^9.11.1",
"axios": "1.2.3",
"copy-text-to-clipboard": "^3.0.1",
"date-fns": "^2.29.3",
"highlight.js": "^11.7.0",
@@ -26,7 +25,7 @@
"@iconify-json/ep": "^1.1.8",
"@types/node": "^18.11.18",
"@vitejs/plugin-vue": "^4.0.0",
"markdown-it-highlightjs": "^4.0.1",
"markdown-it-shiki": "^0.7.2",
"monaco-editor": "^0.34.1",
"prettier": "^2.8.3",
"typescript": "^4.9.4",
@@ -560,6 +559,23 @@
"node": ">= 8"
}
},
"node_modules/@pkgr/utils": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/@pkgr/utils/-/utils-2.3.1.tgz",
"integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.3",
"is-glob": "^4.0.3",
"open": "^8.4.0",
"picocolors": "^1.0.0",
"tiny-glob": "^0.2.9",
"tslib": "^2.4.0"
},
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
}
},
"node_modules/@rollup/pluginutils": {
"version": "5.0.2",
"resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
@@ -835,13 +851,13 @@
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
"node_modules/@vueuse/core": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.11.0.tgz",
"integrity": "sha512-7yZJ8LNOssA8ZmeSjd4F+wbFBA4csiP4TiaXgruqg1H4PAtzSkv93PPwFLvQkSnfo3Bar+e+6QoRvWjhz7l2Xg==",
"version": "9.11.1",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.11.1.tgz",
"integrity": "sha512-E/cizD1w9ILkq4axYjZrXLkKaBfzloaby2n3NMjUfd6yI/jkfTVgc6iwy/Cw2e++Ld4LphGbO+3MhzizvwUslQ==",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
"@vueuse/metadata": "9.11.0",
"@vueuse/shared": "9.11.0",
"@vueuse/metadata": "9.11.1",
"@vueuse/shared": "9.11.1",
"vue-demi": "*"
}
},
@@ -867,95 +883,15 @@
}
}
},
"node_modules/@vueuse/integrations": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-9.11.0.tgz",
"integrity": "sha512-t6ox9R1sDOBzHWaycv5bti4t8o0oFyAQx98zDjCxtcrwkyib0ZKtyf/dIHGFS9kHk4ycOT3nwS47A/jXOGfxaQ==",
"dependencies": {
"@vueuse/core": "9.11.0",
"@vueuse/shared": "9.11.0",
"vue-demi": "*"
},
"peerDependencies": {
"async-validator": "*",
"axios": "*",
"change-case": "*",
"drauu": "*",
"focus-trap": "*",
"fuse.js": "*",
"idb-keyval": "*",
"jwt-decode": "*",
"nprogress": "*",
"qrcode": "*",
"universal-cookie": "*"
},
"peerDependenciesMeta": {
"async-validator": {
"optional": true
},
"axios": {
"optional": true
},
"change-case": {
"optional": true
},
"drauu": {
"optional": true
},
"focus-trap": {
"optional": true
},
"fuse.js": {
"optional": true
},
"idb-keyval": {
"optional": true
},
"jwt-decode": {
"optional": true
},
"nprogress": {
"optional": true
},
"qrcode": {
"optional": true
},
"universal-cookie": {
"optional": true
}
}
},
"node_modules/@vueuse/integrations/node_modules/vue-demi": {
"version": "0.13.11",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
"integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
"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.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.11.0.tgz",
"integrity": "sha512-HhtG2SWkcfZBLbamHdvLn7jKOCFpw/ifXjVTd5ilFkj98WVUk/3UTQ03wF1XIkuhSO4+b45hD2lfG9/GdKCF7w=="
"version": "9.11.1",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.11.1.tgz",
"integrity": "sha512-ABjkrG+VXggNhjfGyw5e/sekxTZfXTwjrYXkkWQmQ7Biyv+Gq9UD6IDNfeGvQZEINI0Qzw6nfuO2UFCd3hlrxQ=="
},
"node_modules/@vueuse/shared": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.11.0.tgz",
"integrity": "sha512-8lO7wD5abYxupKy2KynH1pSgP715ky6iCrWYb8aX2AuAVi9uHXj7qE1dw6BnmArSaLHci4x9iuzWPCpAzUkC/A==",
"version": "9.11.1",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.11.1.tgz",
"integrity": "sha512-UTZYGAjT96hWn4buf4wstZbeheBVNcKPQuej6qpoSkjF1atdaeCD6kqm9uGL2waHfisSgH9mq0qCRiBOk5C/2w==",
"dependencies": {
"vue-demi": "*"
}
@@ -1027,9 +963,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.2.tgz",
"integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==",
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz",
"integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -1179,6 +1115,15 @@
}
}
},
"node_modules/define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -1414,6 +1359,18 @@
"node": ">= 6"
}
},
"node_modules/globalyzer": {
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/globalyzer/-/globalyzer-0.1.0.tgz",
"integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
"dev": true
},
"node_modules/globrex": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/globrex/-/globrex-0.1.2.tgz",
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
"dev": true
},
"node_modules/gray-matter": {
"version": "4.0.3",
"resolved": "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz",
@@ -1488,6 +1445,18 @@
"has": "^1.0.3"
}
},
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
"bin": {
"is-docker": "cli.js"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -1536,6 +1505,18 @@
"node": ">=8"
}
},
"node_modules/is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
"dependencies": {
"is-docker": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
@@ -1644,13 +1625,14 @@
"markdown-it": "bin/markdown-it.js"
}
},
"node_modules/markdown-it-highlightjs": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/markdown-it-highlightjs/-/markdown-it-highlightjs-4.0.1.tgz",
"integrity": "sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==",
"node_modules/markdown-it-shiki": {
"version": "0.7.2",
"resolved": "https://registry.npmmirror.com/markdown-it-shiki/-/markdown-it-shiki-0.7.2.tgz",
"integrity": "sha512-CJucoEMqDg3RJ4R+Oep20Rfsa1MYUebEDxppYyXy4wLmHDktqDd5+7qt51xMnyJkwtIJfmEETjsU7GqBXi5z0g==",
"dev": true,
"dependencies": {
"highlight.js": "^11.5.1"
"shiki": "^0.11.1",
"synckit": "^0.8.4"
}
},
"node_modules/markdown-it/node_modules/argparse": {
@@ -1834,6 +1816,20 @@
"node": ">=6"
}
},
"node_modules/open": {
"version": "8.4.0",
"resolved": "https://registry.npmmirror.com/open/-/open-8.4.0.tgz",
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
"dev": true,
"dependencies": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
@@ -2104,6 +2100,17 @@
"node": ">=8"
}
},
"node_modules/shiki": {
"version": "0.11.1",
"resolved": "https://registry.npmmirror.com/shiki/-/shiki-0.11.1.tgz",
"integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==",
"dev": true,
"dependencies": {
"jsonc-parser": "^3.0.0",
"vscode-oniguruma": "^1.6.1",
"vscode-textmate": "^6.0.0"
}
},
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -2179,6 +2186,29 @@
"node": ">= 0.4"
}
},
"node_modules/synckit": {
"version": "0.8.4",
"resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.8.4.tgz",
"integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==",
"dev": true,
"dependencies": {
"@pkgr/utils": "^2.3.1",
"tslib": "^2.4.0"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
}
},
"node_modules/tiny-glob": {
"version": "0.2.9",
"resolved": "https://registry.npmmirror.com/tiny-glob/-/tiny-glob-0.2.9.tgz",
"integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
"dev": true,
"dependencies": {
"globalyzer": "0.1.0",
"globrex": "^0.1.2"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -2196,6 +2226,12 @@
"resolved": "https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz",
"integrity": "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg=="
},
"node_modules/tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
"node_modules/typescript": {
"version": "4.9.4",
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.4.tgz",
@@ -2431,6 +2467,18 @@
"vue": "^3.0.0"
}
},
"node_modules/vscode-oniguruma": {
"version": "1.7.0",
"resolved": "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
"integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
"dev": true
},
"node_modules/vscode-textmate": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz",
"integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==",
"dev": true
},
"node_modules/vue": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz",
@@ -2838,6 +2886,20 @@
"fastq": "^1.6.0"
}
},
"@pkgr/utils": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/@pkgr/utils/-/utils-2.3.1.tgz",
"integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.3",
"is-glob": "^4.0.3",
"open": "^8.4.0",
"picocolors": "^1.0.0",
"tiny-glob": "^0.2.9",
"tslib": "^2.4.0"
}
},
"@rollup/pluginutils": {
"version": "5.0.2",
"resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
@@ -3099,31 +3161,13 @@
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
"@vueuse/core": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.11.0.tgz",
"integrity": "sha512-7yZJ8LNOssA8ZmeSjd4F+wbFBA4csiP4TiaXgruqg1H4PAtzSkv93PPwFLvQkSnfo3Bar+e+6QoRvWjhz7l2Xg==",
"version": "9.11.1",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.11.1.tgz",
"integrity": "sha512-E/cizD1w9ILkq4axYjZrXLkKaBfzloaby2n3NMjUfd6yI/jkfTVgc6iwy/Cw2e++Ld4LphGbO+3MhzizvwUslQ==",
"requires": {
"@types/web-bluetooth": "^0.0.16",
"@vueuse/metadata": "9.11.0",
"@vueuse/shared": "9.11.0",
"vue-demi": "*"
},
"dependencies": {
"vue-demi": {
"version": "0.13.11",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
"integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
"requires": {}
}
}
},
"@vueuse/integrations": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-9.11.0.tgz",
"integrity": "sha512-t6ox9R1sDOBzHWaycv5bti4t8o0oFyAQx98zDjCxtcrwkyib0ZKtyf/dIHGFS9kHk4ycOT3nwS47A/jXOGfxaQ==",
"requires": {
"@vueuse/core": "9.11.0",
"@vueuse/shared": "9.11.0",
"@vueuse/metadata": "9.11.1",
"@vueuse/shared": "9.11.1",
"vue-demi": "*"
},
"dependencies": {
@@ -3136,14 +3180,14 @@
}
},
"@vueuse/metadata": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.11.0.tgz",
"integrity": "sha512-HhtG2SWkcfZBLbamHdvLn7jKOCFpw/ifXjVTd5ilFkj98WVUk/3UTQ03wF1XIkuhSO4+b45hD2lfG9/GdKCF7w=="
"version": "9.11.1",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.11.1.tgz",
"integrity": "sha512-ABjkrG+VXggNhjfGyw5e/sekxTZfXTwjrYXkkWQmQ7Biyv+Gq9UD6IDNfeGvQZEINI0Qzw6nfuO2UFCd3hlrxQ=="
},
"@vueuse/shared": {
"version": "9.11.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.11.0.tgz",
"integrity": "sha512-8lO7wD5abYxupKy2KynH1pSgP715ky6iCrWYb8aX2AuAVi9uHXj7qE1dw6BnmArSaLHci4x9iuzWPCpAzUkC/A==",
"version": "9.11.1",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.11.1.tgz",
"integrity": "sha512-UTZYGAjT96hWn4buf4wstZbeheBVNcKPQuej6qpoSkjF1atdaeCD6kqm9uGL2waHfisSgH9mq0qCRiBOk5C/2w==",
"requires": {
"vue-demi": "*"
},
@@ -3192,9 +3236,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.2.tgz",
"integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==",
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz",
"integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -3311,6 +3355,12 @@
"ms": "2.1.2"
}
},
"define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -3484,6 +3534,18 @@
"is-glob": "^4.0.1"
}
},
"globalyzer": {
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/globalyzer/-/globalyzer-0.1.0.tgz",
"integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
"dev": true
},
"globrex": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/globrex/-/globrex-0.1.2.tgz",
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
"dev": true
},
"gray-matter": {
"version": "4.0.3",
"resolved": "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz",
@@ -3540,6 +3602,12 @@
"has": "^1.0.3"
}
},
"is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -3573,6 +3641,15 @@
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true
},
"is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
"requires": {
"is-docker": "^2.0.0"
}
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
@@ -3671,13 +3748,14 @@
}
}
},
"markdown-it-highlightjs": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/markdown-it-highlightjs/-/markdown-it-highlightjs-4.0.1.tgz",
"integrity": "sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==",
"markdown-it-shiki": {
"version": "0.7.2",
"resolved": "https://registry.npmmirror.com/markdown-it-shiki/-/markdown-it-shiki-0.7.2.tgz",
"integrity": "sha512-CJucoEMqDg3RJ4R+Oep20Rfsa1MYUebEDxppYyXy4wLmHDktqDd5+7qt51xMnyJkwtIJfmEETjsU7GqBXi5z0g==",
"dev": true,
"requires": {
"highlight.js": "^11.5.1"
"shiki": "^0.11.1",
"synckit": "^0.8.4"
}
},
"mdurl": {
@@ -3819,6 +3897,17 @@
"mimic-fn": "^2.1.0"
}
},
"open": {
"version": "8.4.0",
"resolved": "https://registry.npmmirror.com/open/-/open-8.4.0.tgz",
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
"dev": true,
"requires": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
}
},
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
@@ -4012,6 +4101,17 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"shiki": {
"version": "0.11.1",
"resolved": "https://registry.npmmirror.com/shiki/-/shiki-0.11.1.tgz",
"integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==",
"dev": true,
"requires": {
"jsonc-parser": "^3.0.0",
"vscode-oniguruma": "^1.6.1",
"vscode-textmate": "^6.0.0"
}
},
"signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -4071,6 +4171,26 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"synckit": {
"version": "0.8.4",
"resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.8.4.tgz",
"integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==",
"dev": true,
"requires": {
"@pkgr/utils": "^2.3.1",
"tslib": "^2.4.0"
}
},
"tiny-glob": {
"version": "0.2.9",
"resolved": "https://registry.npmmirror.com/tiny-glob/-/tiny-glob-0.2.9.tgz",
"integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
"dev": true,
"requires": {
"globalyzer": "0.1.0",
"globrex": "^0.1.2"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4085,6 +4205,12 @@
"resolved": "https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz",
"integrity": "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg=="
},
"tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
"typescript": {
"version": "4.9.4",
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.4.tgz",
@@ -4225,6 +4351,18 @@
"evtd": "^0.2.2"
}
},
"vscode-oniguruma": {
"version": "1.7.0",
"resolved": "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
"integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
"dev": true
},
"vscode-textmate": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz",
"integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==",
"dev": true
},
"vue": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz",

View File

@@ -12,9 +12,8 @@
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@monaco-editor/loader": "^1.3.2",
"@vueuse/core": "^9.11.0",
"@vueuse/integrations": "^9.11.0",
"axios": "1.2.2",
"@vueuse/core": "^9.11.1",
"axios": "1.2.3",
"copy-text-to-clipboard": "^3.0.1",
"date-fns": "^2.29.3",
"highlight.js": "^11.7.0",
@@ -28,7 +27,7 @@
"@iconify-json/ep": "^1.1.8",
"@types/node": "^18.11.18",
"@vitejs/plugin-vue": "^4.0.0",
"markdown-it-highlightjs": "^4.0.1",
"markdown-it-shiki": "^0.7.2",
"monaco-editor": "^0.34.1",
"prettier": "^2.8.3",
"typescript": "^4.9.4",

View File

@@ -29,4 +29,39 @@ function change(value: string) {
</n-grid>
</template>
<style scoped></style>
<style>
.__layout-dark .shiki-light {
display: none;
}
.__layout .shiki-dark {
display: none;
}
.shiki .highlighted {
background: #7f7f7f20;
display: block;
margin: 0 -1rem;
padding: 0 1rem;
}
.markdown-body code[v-pre] {
font-size: 20px;
font-family: "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono",
"Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace;
display: flex;
flex-direction: column;
counter-reset: step;
counter-increment: step 0;
}
.markdown-body code[v-pre] .line:not(:last-child)::before {
content: counter(step);
counter-increment: step;
width: 1rem;
margin-right: 1.5rem;
display: inline-block;
text-align: right;
color: rgba(115, 138, 148, 0.4);
}
</style>

View File

@@ -1 +1,15 @@
# 11
## 1
哈哈
```c {3-4}
#include<stdio.h>
int main() {
return 0;
}
```
123

View File

@@ -19,7 +19,6 @@ router.beforeEach((to, from, next) => {
if (to.matched.some((record) => record.meta.requiresAuth)) {
if (!storage.get(STORAGE_KEY.AUTHED)) {
toggleLogin(true)
next("/")
} else {
next()
}

View File

@@ -1,4 +1,3 @@
import { useAxios } from "@vueuse/integrations/useAxios"
import http from "utils/http"
import { getACRate } from "utils/functions"
import { DIFFICULTY } from "utils/constants"
@@ -53,7 +52,7 @@ export async function getProblemList(
}
export function getProblemTagList() {
return useAxios<{ id: number; name: string }[]>("problem/tags", http)
return http.get("problem/tags")
}
export function getRandomProblemID() {
@@ -61,7 +60,7 @@ export function getRandomProblemID() {
}
export function getProblem(id: string) {
return useAxios<Problem>("problem", { params: { problem_id: id } }, http)
return http.get("problem", { params: { problem_id: id } })
}
export function getSubmission(id: string) {
@@ -71,12 +70,7 @@ export function getSubmission(id: string) {
}
export function submissionExists(problemID: number) {
return useAxios(
"submission_exists",
{ params: { problem_id: problemID } },
http,
{ immediate: false }
)
return http.get("submission_exists", { params: { problem_id: problemID } })
}
export function submitCode(data: SubmitCodePayload) {
@@ -107,3 +101,7 @@ export function getContestList(query: {
}) {
return http.get("contests", { params: query })
}
export function getContest(id: string) {
return http.get("contest", { params: { id } })
}

View File

@@ -1,5 +1,7 @@
<script setup lang="ts"></script>
<script setup lang="ts">
const route = useRoute()
</script>
<template>contest detail</template>
<template></template>
<style scoped></style>

View File

@@ -126,9 +126,9 @@ function rowProps(row: Contest) {
v-model:value="query.status"
/>
</n-form-item>
<n-form-item>
<n-form-item label="搜索比赛标题">
<n-input
placeholder="关键字"
placeholder="输入后回车"
v-model:value="query.keyword"
@change="search"
/>

View File

@@ -23,10 +23,14 @@ const route = useRoute()
const contestID = <string>route.params.contestID
const theme = useThemeVars()
const style = computed(() => "color: " + theme.value.primaryColor)
const { data: hasSolved, execute } = submissionExists(props.problem.id)
if (contestID) {
execute()
}
const solved = ref(false)
onMounted(() => {
if (contestID) {
checkSubmisson()
}
})
const samples = ref<Sample[]>(
props.problem.samples.map((sample, index) => ({
...sample,
@@ -45,6 +49,12 @@ const disabled = computed(
code.value === SOURCES[code.language]
)
)
async function checkSubmisson() {
const res = await submissionExists(props.problem.id)
solved.value = res.data
}
async function test(sample: Sample, index: number) {
samples.value = samples.value.map((sample) => {
if (sample.id === index) {
@@ -87,7 +97,7 @@ const type = (status: ProblemStatus) =>
<template>
<n-alert
v-if="problem.my_status === 0 || (contestID && hasSolved)"
v-if="problem.my_status === 0 || (contestID && solved)"
type="success"
title="🎉 本 题 已 经 被 你 解 决 啦"
/>

View File

@@ -1,6 +1,7 @@
<script setup lang="ts">
import { getProblem } from "oj/api"
import { isDesktop, isMobile } from "~/shared/composables/breakpoints"
import { Problem } from "utils/types"
const Editor = defineAsyncComponent(() => import("./components/Editor.vue"))
const Panel = defineAsyncComponent(() => import("./components/Panel.vue"))
@@ -19,13 +20,18 @@ interface Props {
const props = withDefaults(defineProps<Props>(), {
contestID: "",
})
const problem = ref<Problem>()
const { data: problem, isFinished } = getProblem(props.problemID)
async function init() {
const res = await getProblem(props.problemID)
problem.value = res.data
}
onMounted(init)
provide("problem", readonly(problem))
</script>
<template>
<n-grid v-if="isFinished && problem" x-gap="16" :cols="2">
<n-grid v-if="problem" x-gap="16" :cols="2">
<n-gi :span="isDesktop ? 1 : 2">
<n-tabs default-value="content">
<n-tab-pane name="content" tab="题目描述">

View File

@@ -39,12 +39,11 @@ const theme = useThemeVars()
const userStore = useUserStore()
const problems = ref<ProblemFiltered[]>([])
const total = ref(0)
const { data } = getProblemTagList()
const tags = ref<{ id: number; name: string }[]>([])
const tagOptions = computed(() => [
{ label: "全部", value: "" },
...(data.value?.map((t) => ({ label: t.name, value: t.name })) || []),
...(tags.value?.map((t) => ({ label: t.name, value: t.name })) || []),
])
const query = reactive<Query>({
@@ -73,6 +72,11 @@ async function listProblems() {
problems.value = res.results
}
async function listTags() {
const res = await getProblemTagList()
tags.value = res.data
}
function routerPush() {
router.push({
path: route.path,
@@ -115,13 +119,16 @@ watch(
// TODO: 这里会在登录时候执行两次有BUG
watch(() => userStore.isFinished && userStore.isAuthed, listProblems)
onMounted(listProblems)
onMounted(() => {
listProblems()
listTags()
})
const columns: DataTableColumn<ProblemFiltered>[] = [
{
title: "状态",
key: "status",
width: 80,
width: 60,
render: (row) => {
if (row.status === "passed") {
return h(NIcon, { color: theme.value.successColor }, () => h(Select))

View File

@@ -22,14 +22,14 @@ const columns: DataTableColumn<Rank>[] = [
{
title: "排名",
key: "index",
minWidth: 60,
width: 100,
render: (_, index) =>
h("span", {}, index + (query.page - 1) * query.limit + 1),
},
{
title: "用户",
key: "username",
minWidth: 100,
width: 200,
render: (row) =>
h(
NButton,
@@ -38,12 +38,12 @@ const columns: DataTableColumn<Rank>[] = [
),
},
{ title: "骚话", key: "mood", minWidth: 200 },
{ title: "已解决", key: "accepted_number", minWidth: 80 },
{ title: "提交数", key: "submission_number", minWidth: 80 },
{ title: "已解决", key: "accepted_number", width: 100 },
{ title: "提交数", key: "submission_number", width: 100 },
{
title: "正确率",
key: "rate",
minWidth: 80,
width: 100,
render: (row) => getACRate(row.accepted_number, row.submission_number),
},
]

View File

@@ -18,6 +18,7 @@ export const routes = [
path: "submission/:submissionID",
component: () => import("oj/submission/detail.vue"),
props: true,
meta: { requiresAuth: true },
},
{
path: "contest",

View File

@@ -6,6 +6,8 @@ import type { FormRules } from "naive-ui"
const userStore = useUserStore()
const loginRef = ref()
const [isLoading] = useToggle()
const error = ref()
const form = reactive({
username: "",
password: "",
@@ -17,13 +19,21 @@ const rules: FormRules = {
{ min: 6, max: 20, message: "长度在6到20位之间", trigger: "input" },
],
}
const { isLoading, error, execute } = login(form)
const msg = computed(() => error.value && "用户名或密码不正确")
async function submit() {
loginRef.value?.validate(async (errors: FormRules | undefined) => {
if (!errors) {
await execute()
try {
error.value = null
isLoading.value = true
await login(form)
} catch (err) {
error.value = err
} finally {
isLoading.value = false
}
if (!error.value) {
toggleLogin(false)
userStore.getMyProfile()

View File

@@ -1,18 +1,13 @@
import { useAxios } from "@vueuse/integrations/useAxios"
import http from "utils/http"
export function login(data: { username: string; password: string }) {
return useAxios("login", { method: "post", data }, http, {
immediate: false,
})
return http.post("login", data)
}
export function logout() {
return http.get("logout")
}
export function getUserInfo(username: string) {
return useAxios("profile", { params: { username } }, http, {
immediate: false,
})
export function getProfile(username: string = "") {
return http.get("profile", { params: { username } })
}

View File

@@ -1,9 +1,10 @@
import { PROBLEM_PERMISSION, STORAGE_KEY, USER_TYPE } from "utils/constants"
import storage from "utils/storage"
import { getUserInfo } from "../api"
import { getProfile } from "../api"
export const useUserStore = defineStore("user", () => {
const { data: profile, isFinished, execute } = getUserInfo("")
const profile = ref()
const [isFinished] = useToggle(false)
const user = computed(() => profile?.value?.user ?? {})
const isAuthed = computed(() => !!user.value.email)
const isAdminRole = computed(
@@ -19,7 +20,10 @@ export const useUserStore = defineStore("user", () => {
)
async function getMyProfile() {
await execute()
isFinished.value = false
const res = await getProfile()
profile.value = res.data
isFinished.value = true
storage.set(STORAGE_KEY.AUTHED, !!user.value.email)
}

View File

@@ -1,3 +1,49 @@
export interface Profile {
id: number
user: User
real_name: string
acm_problems_status: {
problems: {
[key: string]: {
_id: string
status: number
}
}
}
oi_problems_status: {
problems: {
[key: string]: {
_id: string
score: number
status: number
}
}
}
avatar: string
blog: null
mood: string
github: string
school: string
major: string
language: string
accepted_number: number
total_score: number
submission_number: number
}
export interface User {
id: number
username: string
email: string
admin_type: string
problem_permission: string
create_time: Date
last_login: Date
two_factor_auth: boolean
open_api: boolean
is_disabled: boolean
}
export type LANGUAGE =
| "C"
| "C++"

View File

@@ -7,8 +7,7 @@ import { NaiveUiResolver } from "unplugin-vue-components/resolvers"
import IconsResolver from "unplugin-icons/resolver"
import Icons from "unplugin-icons/vite"
import Markdown from "vite-plugin-vue-markdown"
import Highlight from "markdown-it-highlightjs"
import c from "highlight.js/lib/languages/c"
import Shiki from "markdown-it-shiki"
const url = "https://ojtest.hyyz.izhai.net"
const proxyConfig = {
@@ -56,9 +55,11 @@ export default defineConfig({
Icons({ autoInstall: true }),
Markdown({
markdownItSetup(md) {
md.use(Highlight, {
register: {
c,
md.use(Shiki, {
highlightLines: true,
theme: {
dark: "vitesse-dark",
light: "vitesse-light",
},
})
},