switch screen size.

This commit is contained in:
2023-10-11 16:02:31 +08:00
parent 3ac19cdb4b
commit 9cf73331ea
7 changed files with 181 additions and 121 deletions

219
package-lock.json generated
View File

@@ -11,39 +11,39 @@
"@codemirror/lang-cpp": "^6.0.2",
"@codemirror/lang-python": "^6.1.3",
"@element-plus/icons-vue": "^2.1.0",
"@vueuse/core": "^10.4.1",
"@vueuse/core": "^10.5.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.5.0",
"axios": "1.5.1",
"chart.js": "^4.4.0",
"codemirror": "^6.0.1",
"copy-text-to-clipboard": "^3.2.0",
"date-fns": "^2.30.0",
"highlight.js": "^11.8.0",
"naive-ui": "^2.34.4",
"highlight.js": "^11.9.0",
"naive-ui": "^2.35.0",
"normalize.css": "^8.0.1",
"party-js": "^2.2.0",
"pinia": "^2.1.6",
"vue": "^3.3.4",
"vue-chartjs": "^5.2.0",
"vue-codemirror": "^6.1.1",
"vue-router": "^4.2.4"
"vue-router": "^4.2.5"
},
"devDependencies": {
"@iconify-json/ep": "^1.1.12",
"@types/node": "^20.5.9",
"@types/node": "^20.8.4",
"@vitejs/plugin-legacy": "^4.1.1",
"@vitejs/plugin-vue": "^4.3.4",
"@vitejs/plugin-vue": "^4.4.0",
"markdown-it-shiki": "^0.9.0",
"prettier": "^3.0.3",
"terser": "^5.19.3",
"terser": "^5.21.0",
"typescript": "^5.2.2",
"unplugin-auto-import": "^0.16.6",
"unplugin-icons": "^0.17.0",
"unplugin-vue-components": "^0.25.2",
"unplugin-vue-markdown": "^0.24.3",
"vite": "^4.4.9",
"vue-tsc": "^1.8.8"
"vite": "^4.4.11",
"vue-tsc": "^1.8.18"
}
},
"node_modules/@ampproject/remapping": {
@@ -2592,9 +2592,9 @@
"integrity": "sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q=="
},
"node_modules/@types/katex": {
"version": "0.14.0",
"resolved": "https://registry.npmmirror.com/@types/katex/-/katex-0.14.0.tgz",
"integrity": "sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA=="
"version": "0.16.3",
"resolved": "https://registry.npmmirror.com/@types/katex/-/katex-0.16.3.tgz",
"integrity": "sha512-CeVMX9EhVUW8MWnei05eIRks4D5Wscw/W9Byz1s3PA+yJvcdvq9SaDjiUKvRvEgjpdTyJMjQA43ae4KTwsvOPg=="
},
"node_modules/@types/linkify-it": {
"version": "3.0.2",
@@ -2603,14 +2603,14 @@
"dev": true
},
"node_modules/@types/lodash": {
"version": "4.14.191",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.191.tgz",
"integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ=="
"version": "4.14.199",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.199.tgz",
"integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg=="
},
"node_modules/@types/lodash-es": {
"version": "4.17.6",
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz",
"integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
"version": "4.17.9",
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.9.tgz",
"integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==",
"dependencies": {
"@types/lodash": "*"
}
@@ -2632,15 +2632,18 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.5.9",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.5.9.tgz",
"integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==",
"dev": true
"version": "20.8.4",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.8.4.tgz",
"integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==",
"dev": true,
"dependencies": {
"undici-types": "~5.25.1"
}
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.17",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz",
"integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA=="
"version": "0.0.18",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz",
"integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw=="
},
"node_modules/@uppy/companion-client": {
"version": "2.2.2",
@@ -2733,9 +2736,9 @@
}
},
"node_modules/@vitejs/plugin-vue": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz",
"integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==",
"version": "4.4.0",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz",
"integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==",
"dev": true,
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -2746,30 +2749,30 @@
}
},
"node_modules/@volar/language-core": {
"version": "1.10.1",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.10.1.tgz",
"integrity": "sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==",
"version": "1.10.3",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.10.3.tgz",
"integrity": "sha512-7Qgwu9bWUHN+cLrOkCbIVBkL+RVPREhvY07wY89dGxi4mY9mQCsUVRRp64F61lX7Nc27meMnvy0sWlzY0x6oQQ==",
"dev": true,
"dependencies": {
"@volar/source-map": "1.10.1"
"@volar/source-map": "1.10.3"
}
},
"node_modules/@volar/source-map": {
"version": "1.10.1",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.10.1.tgz",
"integrity": "sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==",
"version": "1.10.3",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.10.3.tgz",
"integrity": "sha512-QE9nwK3xsdBQGongHnC9SCR0itx7xUKQFsUDn5HbZY3pHpyXxdY1hSBG0eh9mE+aTKoM4KlqMvrb+19Tv9vS1Q==",
"dev": true,
"dependencies": {
"muggle-string": "^0.3.1"
}
},
"node_modules/@volar/typescript": {
"version": "1.10.1",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.10.1.tgz",
"integrity": "sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==",
"version": "1.10.3",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.10.3.tgz",
"integrity": "sha512-n0ar6xGYpRoSvgGMetm/JXP0QAXx+NOUvxCaWCfCjiFivQRSLJeydYDijhoGBUl5KSKosqq9In5L3e/m2TqTcQ==",
"dev": true,
"dependencies": {
"@volar/language-core": "1.10.1"
"@volar/language-core": "1.10.3"
}
},
"node_modules/@vue/compiler-core": {
@@ -2835,17 +2838,17 @@
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
},
"node_modules/@vue/language-core": {
"version": "1.8.8",
"resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.8.tgz",
"integrity": "sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==",
"version": "1.8.18",
"resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.18.tgz",
"integrity": "sha512-byTi+mwSL7XnVRtfWE3MJy3HQryoVSQ3lymauXviegn3G1wwwlSOUljzQe3w5PyesOnBEIxYoavfKzMJnExrBA==",
"dev": true,
"dependencies": {
"@volar/language-core": "~1.10.0",
"@volar/source-map": "~1.10.0",
"@volar/language-core": "~1.10.3",
"@volar/source-map": "~1.10.3",
"@vue/compiler-dom": "^3.3.0",
"@vue/reactivity": "^3.3.0",
"@vue/shared": "^3.3.0",
"minimatch": "^9.0.0",
"minimatch": "^9.0.3",
"muggle-string": "^0.3.1",
"vue-template-compiler": "^2.7.14"
},
@@ -2931,24 +2934,24 @@
"integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
},
"node_modules/@vue/typescript": {
"version": "1.8.8",
"resolved": "https://registry.npmmirror.com/@vue/typescript/-/typescript-1.8.8.tgz",
"integrity": "sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==",
"version": "1.8.18",
"resolved": "https://registry.npmmirror.com/@vue/typescript/-/typescript-1.8.18.tgz",
"integrity": "sha512-3M+lu+DUwJW0fNwd/rLE0FenmELxcC6zxgm/YZ25jSTi+uNGj9L5XvXvf20guC69gQvZ+cg49tTxbepfFVuNNQ==",
"dev": true,
"dependencies": {
"@volar/typescript": "~1.10.0",
"@vue/language-core": "1.8.8"
"@volar/typescript": "~1.10.3",
"@vue/language-core": "1.8.18"
}
},
"node_modules/@vueuse/core": {
"version": "10.4.1",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.4.1.tgz",
"integrity": "sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==",
"version": "10.5.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.5.0.tgz",
"integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==",
"dependencies": {
"@types/web-bluetooth": "^0.0.17",
"@vueuse/metadata": "10.4.1",
"@vueuse/shared": "10.4.1",
"vue-demi": ">=0.14.5"
"@types/web-bluetooth": "^0.0.18",
"@vueuse/metadata": "10.5.0",
"@vueuse/shared": "10.5.0",
"vue-demi": ">=0.14.6"
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
@@ -2974,16 +2977,16 @@
}
},
"node_modules/@vueuse/metadata": {
"version": "10.4.1",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.4.1.tgz",
"integrity": "sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg=="
"version": "10.5.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.5.0.tgz",
"integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw=="
},
"node_modules/@vueuse/shared": {
"version": "10.4.1",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.4.1.tgz",
"integrity": "sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==",
"version": "10.5.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.5.0.tgz",
"integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==",
"dependencies": {
"vue-demi": ">=0.14.5"
"vue-demi": ">=0.14.6"
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
@@ -3235,9 +3238,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.0.tgz",
"integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
"version": "1.5.1",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.1.tgz",
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -3609,9 +3612,9 @@
}
},
"node_modules/date-fns-tz": {
"version": "1.3.8",
"resolved": "https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-1.3.8.tgz",
"integrity": "sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==",
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-2.0.0.tgz",
"integrity": "sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ==",
"peerDependencies": {
"date-fns": ">=2.0.0"
}
@@ -4210,9 +4213,9 @@
}
},
"node_modules/highlight.js": {
"version": "11.8.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.8.0.tgz",
"integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==",
"version": "11.9.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz",
"integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
"engines": {
"node": ">=12.0.0"
}
@@ -4845,21 +4848,21 @@
"dev": true
},
"node_modules/naive-ui": {
"version": "2.34.4",
"resolved": "https://registry.npmmirror.com/naive-ui/-/naive-ui-2.34.4.tgz",
"integrity": "sha512-aPG8PDfhSzIzn/jSC9y3Jb3Pe2wHJ7F0cFV1EWlbImSrZECeUmoc+fIcOSWbizoztkKfaUAeKwYdMl09MKkj1g==",
"version": "2.35.0",
"resolved": "https://registry.npmmirror.com/naive-ui/-/naive-ui-2.35.0.tgz",
"integrity": "sha512-PdnLpOip1LQaKs5+rXLZoPDPQkTq26TnHWeABvUA2eOQjtHxE4+TQvj0Jq/W8clM2On/7jptoGmenLt48G3Bhg==",
"dependencies": {
"@css-render/plugin-bem": "^0.15.10",
"@css-render/vue3-ssr": "^0.15.10",
"@types/katex": "^0.14.0",
"@types/lodash": "^4.14.181",
"@types/lodash-es": "^4.17.6",
"async-validator": "^4.0.7",
"css-render": "^0.15.10",
"date-fns": "^2.28.0",
"date-fns-tz": "^1.3.3",
"@css-render/plugin-bem": "^0.15.12",
"@css-render/vue3-ssr": "^0.15.12",
"@types/katex": "^0.16.2",
"@types/lodash": "^4.14.198",
"@types/lodash-es": "^4.17.9",
"async-validator": "^4.2.5",
"css-render": "^0.15.12",
"date-fns": "^2.30.0",
"date-fns-tz": "^2.0.0",
"evtd": "^0.2.4",
"highlight.js": "^11.5.0",
"highlight.js": "^11.8.0",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"seemly": "^0.3.6",
@@ -5376,9 +5379,9 @@
"integrity": "sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw=="
},
"node_modules/semver": {
"version": "7.3.8",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"version": "7.5.4",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -5629,9 +5632,9 @@
}
},
"node_modules/terser": {
"version": "5.19.3",
"resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.3.tgz",
"integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==",
"version": "5.21.0",
"resolved": "https://registry.npmmirror.com/terser/-/terser-5.21.0.tgz",
"integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -5748,6 +5751,12 @@
"@types/estree": "^1.0.0"
}
},
"node_modules/undici-types": {
"version": "5.25.3",
"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.25.3.tgz",
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
"dev": true
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@@ -6048,9 +6057,9 @@
}
},
"node_modules/vite": {
"version": "4.4.9",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz",
"integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
"version": "4.4.11",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.11.tgz",
"integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==",
"dev": true,
"dependencies": {
"esbuild": "^0.18.10",
@@ -6159,9 +6168,9 @@
}
},
"node_modules/vue-router": {
"version": "4.2.4",
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.4.tgz",
"integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
"version": "4.2.5",
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz",
"integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
"dependencies": {
"@vue/devtools-api": "^6.5.0"
},
@@ -6180,14 +6189,14 @@
}
},
"node_modules/vue-tsc": {
"version": "1.8.8",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.8.tgz",
"integrity": "sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==",
"version": "1.8.18",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.18.tgz",
"integrity": "sha512-AwQxBB9SZX308TLL1932P1JByuMsXC2jLfRBGt8SBdm1e3cXkDlFaXUAqibfKnoQ1ZC2zO2NSbeBNdSjOcdvJw==",
"dev": true,
"dependencies": {
"@vue/language-core": "1.8.8",
"@vue/typescript": "1.8.8",
"semver": "^7.3.8"
"@vue/language-core": "1.8.18",
"@vue/typescript": "1.8.18",
"semver": "^7.5.4"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"

View File

@@ -13,38 +13,38 @@
"@codemirror/lang-cpp": "^6.0.2",
"@codemirror/lang-python": "^6.1.3",
"@element-plus/icons-vue": "^2.1.0",
"@vueuse/core": "^10.4.1",
"@vueuse/core": "^10.5.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.5.0",
"axios": "1.5.1",
"chart.js": "^4.4.0",
"codemirror": "^6.0.1",
"copy-text-to-clipboard": "^3.2.0",
"date-fns": "^2.30.0",
"highlight.js": "^11.8.0",
"naive-ui": "^2.34.4",
"highlight.js": "^11.9.0",
"naive-ui": "^2.35.0",
"normalize.css": "^8.0.1",
"party-js": "^2.2.0",
"pinia": "^2.1.6",
"vue": "^3.3.4",
"vue-chartjs": "^5.2.0",
"vue-codemirror": "^6.1.1",
"vue-router": "^4.2.4"
"vue-router": "^4.2.5"
},
"devDependencies": {
"@iconify-json/ep": "^1.1.12",
"@types/node": "^20.5.9",
"@types/node": "^20.8.4",
"@vitejs/plugin-legacy": "^4.1.1",
"@vitejs/plugin-vue": "^4.3.4",
"@vitejs/plugin-vue": "^4.4.0",
"markdown-it-shiki": "^0.9.0",
"prettier": "^3.0.3",
"terser": "^5.19.3",
"terser": "^5.21.0",
"typescript": "^5.2.2",
"unplugin-auto-import": "^0.16.6",
"unplugin-icons": "^0.17.0",
"unplugin-vue-components": "^0.25.2",
"vite": "^4.4.9",
"vite": "^4.4.11",
"unplugin-vue-markdown": "^0.24.3",
"vue-tsc": "^1.8.8"
"vue-tsc": "^1.8.18"
}
}

View File

@@ -41,6 +41,7 @@ declare global {
const h: typeof import('vue')['h']
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
const inject: typeof import('vue')['inject']
const injectLocal: typeof import('@vueuse/core')['injectLocal']
const isDefined: typeof import('@vueuse/core')['isDefined']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
@@ -75,6 +76,7 @@ declare global {
const onUpdated: typeof import('vue')['onUpdated']
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
const provide: typeof import('vue')['provide']
const provideLocal: typeof import('@vueuse/core')['provideLocal']
const reactify: typeof import('@vueuse/core')['reactify']
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
const reactive: typeof import('vue')['reactive']

View File

@@ -1,17 +1,19 @@
<script setup lang="ts">
import { getProblem } from "oj/api"
import { isDesktop } from "~/shared/composables/breakpoints"
import { screenMode } from "~/shared/composables/switchScreen"
import { problem } from "../composables/problem"
import { ScreenMode } from "utils/constants"
const Editor = defineAsyncComponent(() => import("./components/Editor.vue"))
const ProblemContent = defineAsyncComponent(
() => import("./components/ProblemContent.vue")
() => import("./components/ProblemContent.vue"),
)
const ProblemInfo = defineAsyncComponent(
() => import("./components/ProblemInfo.vue")
() => import("./components/ProblemInfo.vue"),
)
const ProblemSubmission = defineAsyncComponent(
() => import("./components/ProblemSubmission.vue")
() => import("./components/ProblemSubmission.vue"),
)
interface Props {
@@ -44,8 +46,17 @@ onBeforeUnmount(() => {
</script>
<template>
<n-grid v-if="problem" x-gap="16" :cols="2">
<n-gi :span="isDesktop ? 1 : 2">
<n-grid
v-if="problem"
x-gap="16"
:cols="screenMode === ScreenMode.both ? 2 : 1"
>
<n-gi
:span="isDesktop ? 1 : 2"
v-show="
screenMode === ScreenMode.both || screenMode === ScreenMode.problem
"
>
<n-scrollbar v-if="isDesktop" style="max-height: calc(100vh - 92px)">
<n-tabs default-value="content" type="segment">
<n-tab-pane name="content" tab="题目描述">
@@ -74,7 +85,10 @@ onBeforeUnmount(() => {
</n-tab-pane>
</n-tabs>
</n-gi>
<n-gi v-if="isDesktop">
<n-gi
v-if="isDesktop"
v-show="screenMode === ScreenMode.both || screenMode === ScreenMode.code"
>
<Editor />
</n-gi>
</n-grid>

View File

@@ -6,6 +6,7 @@ import { isDark, toggleDark } from "~/shared/composables/dark"
import { toggleLogin, toggleSignup } from "~/shared/composables/modal"
import { RouterLink } from "vue-router"
import { isDesktop, isMobile } from "~/shared/composables/breakpoints"
import { screenSwitchLabel, switchScreenMode } from "~/shared/composables/switchScreen"
import { code } from "~/shared/composables/learn"
import { useLearnStore } from "~/learn/store"
@@ -95,6 +96,8 @@ function run() {
function goHome() {
router.push("/")
}
function switchScreen() {}
</script>
<template>
@@ -131,6 +134,15 @@ function goHome() {
<n-dropdown v-if="isMobile" :options="menus" trigger="click">
<n-button>菜单</n-button>
</n-dropdown>
<n-button
v-if="
isDesktop &&
(route.name === 'problem' || route.name === 'contest problem')
"
@click="switchScreenMode"
>
{{ screenSwitchLabel }}
</n-button>
<div v-if="userStore.isFinished">
<n-dropdown
v-if="userStore.isAuthed"

View File

@@ -0,0 +1,17 @@
import { ScreenMode } from "~/utils/constants"
export const screenMode = ref(ScreenMode.both)
export const screenSwitchLabel = computed(() => {
if (screenMode.value === ScreenMode.both) return "题目 | 代码"
else if (screenMode.value === ScreenMode.problem) return "仅题目"
return "仅代码"
})
export function switchScreenMode() {
if (screenMode.value === ScreenMode.both) {
screenMode.value = ScreenMode.problem
return
}
screenMode.value += 1
}

View File

@@ -267,3 +267,9 @@ export const CODE_TEMPLATES = {
JavaScript: blankTemplate,
Golang: blankTemplate,
}
export enum ScreenMode {
problem,
code,
both,
}