diff --git a/package-lock.json b/package-lock.json index d657f5f..86346f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "axios": "^1.9.0", + "jszip": "^3.10.1", "process": "^0.11.10", "vue": "^3.5.13", "vue-router": "^4.5.1", @@ -1599,6 +1600,11 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", @@ -2097,6 +2103,16 @@ "node": ">=18.18.0" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", @@ -2193,6 +2209,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", @@ -2241,12 +2262,31 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, "node_modules/kolorist": { "version": "1.8.0", "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", "dev": true }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2381,6 +2421,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "node_modules/parse-ms": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz", @@ -2481,11 +2526,30 @@ "node": ">= 0.6.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", @@ -2543,6 +2607,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", @@ -2552,6 +2621,11 @@ "semver": "bin/semver.js" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2627,6 +2701,14 @@ "node": ">=0.8" } }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/strip-final-newline": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz", @@ -2727,6 +2809,11 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/vite": { "version": "6.3.4", "resolved": "https://registry.npmmirror.com/vite/-/vite-6.3.4.tgz", diff --git a/package.json b/package.json index 853c993..6b50ddd 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "axios": "^1.9.0", + "jszip": "^3.10.1", "process": "^0.11.10", "vue": "^3.5.13", "vue-router": "^4.5.1", diff --git a/src/api/login.js b/src/api/login.js index 2ade08b..046ff8b 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -112,3 +112,20 @@ export const userRegister = async (qq_code, password, token, captcha) => { } }; +/** + * 管理员修改用户权限 + * @param {string} uuid - 用户uuid + * @param {string} privilege - 新权限 + * @returns {Promise} 无返回值,成功即为修改成功 + */ +export const adminChangeUserPrivilege = async (uuid, privilege) => { + try { + await axiosInstance.put('/admin/change_user_privilege', { + uuid, + privilege + }); + } catch (error) { + throw error; + } +} + diff --git a/src/components/backend/CodeGenerator.vue b/src/components/backend/CodeGenerator.vue deleted file mode 100644 index 022c92c..0000000 --- a/src/components/backend/CodeGenerator.vue +++ /dev/null @@ -1,926 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/backend/PlayerForm.vue b/src/components/backend/PlayerForm.vue deleted file mode 100644 index 9b432b9..0000000 --- a/src/components/backend/PlayerForm.vue +++ /dev/null @@ -1,281 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/backend/PlayerList.vue b/src/components/backend/PlayerList.vue deleted file mode 100644 index 1cd6562..0000000 --- a/src/components/backend/PlayerList.vue +++ /dev/null @@ -1,328 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/backend/ServiceHallView.vue b/src/components/backend/ServiceHallView.vue deleted file mode 100644 index d0b6b02..0000000 --- a/src/components/backend/ServiceHallView.vue +++ /dev/null @@ -1,530 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/backend/TournamentForm.vue b/src/components/backend/TournamentForm.vue deleted file mode 100644 index c261760..0000000 --- a/src/components/backend/TournamentForm.vue +++ /dev/null @@ -1,210 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/backend/TournamentList.vue b/src/components/backend/TournamentList.vue deleted file mode 100644 index a541c56..0000000 --- a/src/components/backend/TournamentList.vue +++ /dev/null @@ -1,294 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 83439c8..bb0ba29 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -76,6 +76,21 @@ const routes = [ path: 'editors-maps', name: 'EditorsMaps', component: () => import('@/views/index/EditorsMaps.vue') + }, + { + path:'terrain', + name: 'Terrain', + component: () => import('@/views/index/TerrainList.vue') + }, + { + path: 'PIC2TGA', + name: 'PIC2TGA', + component: () => import('@/views/index/PIC2TGA.vue') + }, + { + path: 'terrainGenerate', + name: 'TerrainGenerate', + component: () => import('@/views/index/TerrainGenerate.vue') } ] }, diff --git a/src/utils/privilege.js b/src/utils/privilege.js new file mode 100644 index 0000000..e48ff4c --- /dev/null +++ b/src/utils/privilege.js @@ -0,0 +1,11 @@ +// 权限辅助函数 +export function hasPrivilege(privilege, required) { + if (!privilege) return false; + // lv-admin 拥有全部权限 + if (privilege.includes('lv-admin')) return true; + const privArr = privilege.split(';'); + if (Array.isArray(required)) { + return required.some(r => privArr.includes(r)); + } + return privArr.includes(required); +} \ No newline at end of file diff --git a/src/views/backend/Dashboard.vue b/src/views/backend/Dashboard.vue index c007836..3463083 100644 --- a/src/views/backend/Dashboard.vue +++ b/src/views/backend/Dashboard.vue @@ -5,21 +5,60 @@ - 后台管理 + 管理后台
-
- -
-
- -
-
- -
-
- -
+
+ + + + + \ No newline at end of file diff --git a/src/views/index/TerrainGenerate.vue b/src/views/index/TerrainGenerate.vue new file mode 100644 index 0000000..b9fcb02 --- /dev/null +++ b/src/views/index/TerrainGenerate.vue @@ -0,0 +1,612 @@ + + + + + \ No newline at end of file diff --git a/src/views/index/TerrainList.vue b/src/views/index/TerrainList.vue new file mode 100644 index 0000000..c01a0b9 --- /dev/null +++ b/src/views/index/TerrainList.vue @@ -0,0 +1,378 @@ + + + + + + \ No newline at end of file