From 340bfc7e42a3c1e5ec6de10776d7fe2eb047cc87 Mon Sep 17 00:00:00 2001 From: yujialong <479214531@qq.com> Date: Fri, 17 Nov 2023 17:44:08 +0800 Subject: [PATCH] fix --- package-lock.json | 349 ++++++++++++++++++++-- package.json | 1 + src/layouts/home/index.vue | 447 +++++++++++++++------------- src/pages/ass/list/index.vue | 2 +- src/pages/match/details/index.vue | 124 +++++--- src/pages/match/list/index.vue | 113 ++++--- src/pages/station/preview/index.vue | 2 +- src/setting.js | 4 +- 8 files changed, 718 insertions(+), 324 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0bbe53..c682b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2140,6 +2140,14 @@ "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "dev": true }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2162,6 +2170,82 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, + "ali-oss": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/ali-oss/-/ali-oss-6.18.1.tgz", + "integrity": "sha512-VsptD0jX3JNc3AjiLs5a9oTP0ArfT9IYhBuY6G/SpuY6LMuiwfqywrAosY65BlHKODAdYy8VWL6kmt0mO7BUGA==", + "requires": { + "address": "^1.2.2", + "agentkeepalive": "^3.4.1", + "bowser": "^1.6.0", + "copy-to": "^2.0.1", + "dateformat": "^2.0.0", + "debug": "^4.3.4", + "destroy": "^1.0.4", + "end-or-error": "^1.0.1", + "get-ready": "^1.0.0", + "humanize-ms": "^1.2.0", + "is-type-of": "^1.4.0", + "js-base64": "^2.5.2", + "jstoxml": "^2.0.0", + "merge-descriptors": "^1.0.1", + "mime": "^2.4.5", + "platform": "^1.3.1", + "pump": "^3.0.0", + "sdk-base": "^2.0.1", + "stream-http": "2.8.2", + "stream-wormhole": "^1.0.4", + "urllib": "2.41.0", + "utility": "^1.18.0", + "xml2js": "^0.6.2" + }, + "dependencies": { + "address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "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" + } + }, + "stream-http": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -2227,8 +2311,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "anymatch": { "version": "3.1.2", @@ -2886,6 +2969,11 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3087,8 +3175,7 @@ "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "bytes": { "version": "3.1.2", @@ -4001,8 +4088,7 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { "version": "1.8.0", @@ -4044,6 +4130,11 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" + }, "copy-webpack-plugin": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", @@ -4804,6 +4895,21 @@ "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", "dev": true }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -4947,6 +5053,14 @@ } } }, + "default-user-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", + "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", + "requires": { + "os-name": "~1.0.3" + } + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -5107,8 +5221,7 @@ "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-file": { "version": "1.0.0", @@ -5140,6 +5253,11 @@ } } }, + "digest-header": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-1.1.0.tgz", + "integrity": "sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==" + }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", @@ -5386,8 +5504,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { "version": "2.7.4", @@ -5481,6 +5598,11 @@ "once": "~1.3.0" } }, + "end-or-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/end-or-error/-/end-or-error-1.0.1.tgz", + "integrity": "sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ==" + }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -5620,8 +5742,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", @@ -6283,6 +6404,16 @@ "mime-types": "^2.1.12" } }, + "formstream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.3.1.tgz", + "integrity": "sha512-FkW++ub+VbE5dpwukJVDizNWhSgp8FhmhI65pF7BZSVStBqe6Wgxe2Z9/Vhsn7l7nXCPwP+G1cyYlX8VwWOf0g==", + "requires": { + "destroy": "^1.0.4", + "mime": "^2.5.2", + "pause-stream": "~0.0.11" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6470,6 +6601,11 @@ "has-symbols": "^1.0.1" } }, + "get-ready": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-ready/-/get-ready-1.0.0.tgz", + "integrity": "sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw==" + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -7713,11 +7849,18 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -7913,8 +8056,7 @@ "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-regex": { "version": "2.1.0", @@ -8015,6 +8157,11 @@ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, + "is-class-hotfix": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz", + "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==" + }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -8263,6 +8410,16 @@ "has-symbols": "^1.0.2" } }, + "is-type-of": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-type-of/-/is-type-of-1.4.0.tgz", + "integrity": "sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ==", + "requires": { + "core-util-is": "^1.0.2", + "is-class-hotfix": "~0.0.6", + "isstream": "~0.1.2" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -8472,6 +8629,11 @@ "verror": "1.10.0" } }, + "jstoxml": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-2.2.9.tgz", + "integrity": "sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw==" + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -9034,8 +9196,7 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-source-map": { "version": "1.1.0", @@ -9113,8 +9274,7 @@ "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, "mime-db": { "version": "1.52.0", @@ -9315,7 +9475,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "requires": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -9325,8 +9484,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" } } }, @@ -9955,6 +10113,15 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, + "os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", + "requires": { + "osx-release": "^1.0.0", + "win-release": "^1.0.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", @@ -9969,6 +10136,14 @@ "os-tmpdir": "^1.0.0" } }, + "osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", + "requires": { + "minimist": "^1.1.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -10227,6 +10402,14 @@ } } }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "requires": { + "through": "~2.3" + } + }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -10385,6 +10568,11 @@ } } }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + }, "plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", @@ -11699,7 +11887,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11709,7 +11896,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" }, @@ -11718,7 +11904,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -12497,8 +12682,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "schema-utils": { "version": "3.1.1", @@ -12529,6 +12713,14 @@ } } }, + "sdk-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sdk-base/-/sdk-base-2.0.1.tgz", + "integrity": "sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q==", + "requires": { + "get-ready": "~1.0.0" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -13222,8 +13414,7 @@ "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "stdout-stream": { "version": "1.4.1", @@ -13396,6 +13587,11 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "stream-wormhole": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz", + "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==" + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -13774,7 +13970,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "requires": { "any-promise": "^1.0.0" } @@ -13783,7 +13978,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" } @@ -13884,8 +14078,7 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, "to-fast-properties": { "version": "2.0.0", @@ -14081,6 +14274,24 @@ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, + "unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "requires": { + "extend-shallow": "^2.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -14291,6 +14502,37 @@ "requires-port": "^1.0.0" } }, + "urllib": { + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.41.0.tgz", + "integrity": "sha512-pNXdxEv52L67jahLT+/7QE+Fup1y2Gc6EdmrAhQ6OpQIC2rl14oWwv9hvk1GXOZqEnJNwRXHABuwgPOs1CtL7g==", + "requires": { + "any-promise": "^1.3.0", + "content-type": "^1.0.2", + "debug": "^2.6.9", + "default-user-agent": "^1.0.0", + "digest-header": "^1.0.0", + "ee-first": "~1.1.1", + "formstream": "^1.1.0", + "humanize-ms": "^1.2.0", + "iconv-lite": "^0.4.15", + "ip": "^1.1.5", + "pump": "^3.0.0", + "qs": "^6.4.0", + "statuses": "^1.3.1", + "utility": "^1.16.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -14341,6 +14583,18 @@ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", "dev": true }, + "utility": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/utility/-/utility-1.18.0.tgz", + "integrity": "sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==", + "requires": { + "copy-to": "^2.0.1", + "escape-html": "^1.0.3", + "mkdirp": "^0.5.1", + "mz": "^2.7.0", + "unescape": "^1.0.1" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -15294,6 +15548,21 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==", + "requires": { + "semver": "^5.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -15390,6 +15659,20 @@ "async-limiter": "~1.0.0" } }, + "xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xss": { "version": "1.0.14", "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", diff --git a/package.json b/package.json index 748f928..8163e32 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "vue-cli-service build" }, "dependencies": { + "ali-oss": "^6.18.1", "axios": "^0.26.1", "babel-polyfill": "^6.26.0", "core-js": "^2.6.10", diff --git a/src/layouts/home/index.vue b/src/layouts/home/index.vue index 2f5003b..2c88771 100644 --- a/src/layouts/home/index.vue +++ b/src/layouts/home/index.vue @@ -1,41 +1,60 @@ <template> - <div class="main"> - <v-head></v-head> - <div class="layout"> - <div class="content"> - <transition name="move" mode="out-in"> - <router-view class="view"></router-view> - </transition> - <el-backtop target=".content"></el-backtop> - <v-footer ref="footer"></v-footer> - </div> - <div class="log-mask" v-if="logVisible"></div> - <div class="log-dia" v-if="logVisible"> - <img class="bg1" src="@/assets/img/log-bg.png" alt=""> - <img class="bg2" src="@/assets/img/log-bg1.png" alt=""> - <p class="log-title">更新日志</p> - <div class="log-wrap"> - <div class="logs"> - <div class="item" v-for="(item, i) in list" :key="i" v-show="!i || (i && logAll)"> - <h6>{{ item.versionName }}</h6> - <img v-if="item.coverUrl" :src="item.coverUrl" alt="" class="cover"> - <ul class="detail"> - <li v-for="(item, i) in item.logContents" :key="i"> - <p class="name"><img :src="require('@/assets/img/' + funcList.find(e => e.id === item.type).icon + '.png')" alt=""> {{ funcList.find(e => e.id === item.type).name }}</p> - <div class="val"> - <p v-for="(item, i) in item.content" :key="i">{{ i + 1 }}、{{ item }}</p> - </div> - </li> - </ul> + <div class="main"> + <v-head></v-head> + <div class="layout"> + <div class="content"> + <transition name="move" + mode="out-in"> + <router-view class="view"></router-view> + </transition> + <el-backtop target=".content"></el-backtop> + <v-footer ref="footer"></v-footer> + </div> + <div class="log-mask" + v-if="logVisible"></div> + <div class="log-dia" + v-if="logVisible"> + <img class="bg1" + src="@/assets/img/log-bg.png" + alt=""> + <img class="bg2" + src="@/assets/img/log-bg1.png" + alt=""> + <p class="log-title">更新日志</p> + <div class="log-wrap"> + <div class="logs"> + <div class="item" + v-for="(item, i) in list" + :key="i" + v-show="!i || (i && logAll)"> + <h6>{{ item.versionName }}</h6> + <img v-if="item.coverUrl" + :src="item.coverUrl" + alt="" + class="cover"> + <ul class="detail"> + <li v-for="(item, i) in item.logContents" + :key="i"> + <p class="name"><img :src="require('@/assets/img/' + funcList.find(e => e.id === item.type).icon + '.png')" + alt=""> {{ funcList.find(e => e.id === item.type).name }}</p> + <div class="val"> + <p v-for="(item, i) in item.content" + :key="i">{{ i + 1 }}、{{ item }}</p> </div> - </div> - <div class="more-wrap"> - <el-button class="know" type="primary" size="small" @click="closeLog">知道了</el-button> - </div> - </div> + </li> + </ul> </div> + </div> + <div class="more-wrap"> + <el-button class="know" + type="primary" + size="small" + @click="closeLog">知道了</el-button> + </div> </div> + </div> </div> + </div> </template> <script> @@ -46,211 +65,211 @@ import vHead from "../header"; import vFooter from "../footer"; export default { - data() { - return { - logVisible: false, - list: [], - logAll: false, - funcList: [ - { - id: 0, - name: '新功能', - icon: 'func' - }, - { - id: 1, - name: '修复', - icon: 'bug' - }, - { - id: 2, - name: '优化', - icon: 'optimize' - } - ] - }; + data () { + return { + logVisible: false, + list: [], + logAll: false, + funcList: [ + { + id: 0, + name: '新功能', + icon: 'func' + }, + { + id: 1, + name: '修复', + icon: 'bug' + }, + { + id: 2, + name: '优化', + icon: 'optimize' + } + ] + }; + }, + components: { + vHead, + vFooter + }, + computed: { + ...mapState("user", [ + 'logView' + ]), + ...mapState("match", [ + 'noticed' + ]) + }, + mounted () { + this.autoLogout() + this.noticed || this.getMatchStatus() // 0才要调用 + this.logView || this.getLogStatus() // logView为false才需要查询接口 + }, + methods: { + ...mapMutations("user", [ + 'SET_LOG' + ]), + ...mapMutations("match", [ + 'SET_NOTICE' + ]), + ...mapActions("user", [ + "logout" + ]), + // 提示赛事状态(登录后调用一次) + getMatchStatus () { + util.local.get(Setting.tokenKey) && this.$post(this.api.promptRemoval).then(({ prompt }) => { + this.SET_NOTICE() + prompt && util.errorMsg(prompt) + }).catch(res => { }) }, - components: { - vHead, - vFooter + // 获取日志列表 + getLog () { + this.$get(`${this.api.platformLogList}?platformId=${Setting.platformId}&port=1&versionName=`).then(({ logList }) => { + logList.map((e, i) => { + e.logContents.map(n => { + n.content = n.content.split('\n') + }) + }) + this.list = logList + }).catch(res => { }) }, - computed: { - ...mapState("user", [ - 'logView' - ]), - ...mapState("match", [ - 'noticed' - ]) + // 获取日志状态 + getLogStatus () { + util.local.get(Setting.tokenKey) && this.$get(this.api.logNotification, { + platformId: Setting.platformId + }).then(({ notification }) => { + if (notification) { + this.logVisible = true // 返回true,则显示日志弹框 + this.getLog() + } else { + this.SET_LOG() // 把查看日志状态设置为true + } + }).catch(res => { }) }, - mounted() { - this.autoLogout() - this.noticed || this.getMatchStatus() // 0才要调用 - this.logView || this.getLogStatus() // logView为false才需要查询接口 + // 关闭日志弹框 + closeLog () { + this.logVisible = false + this.SET_LOG() // 把查看日志状态设置为true }, - methods: { - ...mapMutations("user", [ - 'SET_LOG' - ]), - ...mapMutations("match", [ - 'SET_NOTICE' - ]), - ...mapActions("user", [ - "logout" - ]), - // 提示赛事状态(登录后调用一次) - getMatchStatus() { - util.local.get(Setting.tokenKey) && this.$post(this.api.promptRemoval).then(({ prompt }) => { - this.SET_NOTICE() - prompt && util.errorMsg(prompt) - }).catch(res => {}) - }, - // 获取日志列表 - getLog() { - this.$get(`${this.api.platformLogList}?platformId=${Setting.platformId}&port=1&versionName=`).then(({ logList }) => { - logList.map((e, i) => { - e.logContents.map(n => { - n.content = n.content.split('\n') - }) - }) - this.list = logList - }).catch(res => {}) - }, - // 获取日志状态 - getLogStatus() { - util.local.get(Setting.tokenKey) && this.$get(this.api.logNotification, { - platformId: Setting.platformId - }).then(({ notification }) => { - if (notification) { - this.logVisible = true // 返回true,则显示日志弹框 - this.getLog() - } else { - this.SET_LOG() // 把查看日志状态设置为true - } - }).catch(res => {}) - }, - // 关闭日志弹框 - closeLog() { - this.logVisible = false - this.SET_LOG() // 把查看日志状态设置为true - }, - // 长时间未操作,自动退出登录 - autoLogout() { - let lastTime = new Date().getTime(); - document.onmousedown = () => { - lastTime = new Date().getTime(); - }; + // 长时间未操作,自动退出登录 + autoLogout () { + let lastTime = new Date().getTime(); + document.onmousedown = () => { + lastTime = new Date().getTime(); + }; - setInterval(() => { - if (util.local.get(Setting.tokenKey) && (new Date().getTime() - lastTime) > Setting.autoLogoutTime) { - util.errorMsg("用户登录过期,请重新登录"); - setTimeout(this.logout, 1500); - } - }, 1000); + setInterval(() => { + if (util.local.get(Setting.tokenKey) && (new Date().getTime() - lastTime) > Setting.autoLogoutTime) { + util.errorMsg("由于您已经有一个小时没有操作,系统自动登出,请重新登录。页面刷新到登录页。"); + setTimeout(this.logout, 1500); } + }, 1000); } + } }; </script> <style lang="scss" scoped> -.main{ +.main { min-height: calc(100% - 64px); - .layout{ + .layout { padding-top: 64px; } - .index{ + .index { padding: 0; } } .log-mask { - position: fixed; - top: 0; - left: 0; - bottom: 0; - right: 0; - background-color: rgba(0, 0, 0, .4); + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + background-color: rgba(0, 0, 0, 0.4); } /deep/.log-dia { - z-index: 11; - position: absolute; - top: 250px; - left: 50%; - width: 550px; - transform: translateX(-50%); - background-color: #fff; - border-radius: 6px; - .bg1 { - width: 100%; - height: 140px; - } - .bg2 { + z-index: 11; position: absolute; - top: -130px; - left: 48px; - max-width: 100%; - height: 250px; - } - .log-title { - position: absolute; - top: 65px; - left: 0; - width: 100%; - text-align: center; - font-size: 22px; - color: #fff; - font-weight: 600; - } - .log-wrap { - padding-bottom: 30px; - } - .logs { - max-height: 250px; - padding: 0 100px; - margin: 30px 0; - overflow: auto; - } - h6 { - margin-bottom: 15px; - font-size: 16px; - color: #333; - line-height: 1; - } - .more-wrap { - padding: 0 60px; - font-size: 14px; - color: #333; - text-align: center; - } - .know { - margin-top: 15px; - } - .cover { - max-width: 250px; - max-height: 160px; - margin: 10px 0 20px; - } - .detail { - li { - margin-bottom: 20px; + top: 250px; + left: 50%; + width: 550px; + transform: translateX(-50%); + background-color: #fff; + border-radius: 6px; + .bg1 { + width: 100%; + height: 140px; + } + .bg2 { + position: absolute; + top: -130px; + left: 48px; + max-width: 100%; + height: 250px; + } + .log-title { + position: absolute; + top: 65px; + left: 0; + width: 100%; + text-align: center; + font-size: 22px; + color: #fff; + font-weight: 600; + } + .log-wrap { + padding-bottom: 30px; } - .name { - display: flex; - align-items: center; - margin-bottom: 5px; + .logs { + max-height: 250px; + padding: 0 100px; + margin: 30px 0; + overflow: auto; + } + h6 { + margin-bottom: 15px; + font-size: 16px; + color: #333; + line-height: 1; + } + .more-wrap { + padding: 0 60px; font-size: 14px; - img { - width: 20px; - margin-right: 8px; - } + color: #333; + text-align: center; + } + .know { + margin-top: 15px; } - .val { - font-size: 15px; - line-height: 1.8; - white-space: pre-wrap; - p { - position: relative; - font-size: 13px; - color: #727272; + .cover { + max-width: 250px; + max-height: 160px; + margin: 10px 0 20px; + } + .detail { + li { + margin-bottom: 20px; + } + .name { + display: flex; + align-items: center; + margin-bottom: 5px; + font-size: 14px; + img { + width: 20px; + margin-right: 8px; + } + } + .val { + font-size: 15px; + line-height: 1.8; + white-space: pre-wrap; + p { + position: relative; + font-size: 13px; + color: #727272; + } } } - } } </style> \ No newline at end of file diff --git a/src/pages/ass/list/index.vue b/src/pages/ass/list/index.vue index 1474c77..440988c 100644 --- a/src/pages/ass/list/index.vue +++ b/src/pages/ass/list/index.vue @@ -498,7 +498,7 @@ export default { util.cookies.set("token", token) util.cookies.set("assessmentId", this.assessmentId) util.cookies.set("classId", classId) - util.cookies.set("className", classItem ? encodeURI(classItem.className) : '') + util.cookies.set("className", classItem ? encodeURIComponent(classItem.className) : '') util.cookies.set("projectId", this.projectId) util.cookies.set("courseId", this.cid) util.cookies.set("curriculumName", escape(row.sysName)); diff --git a/src/pages/match/details/index.vue b/src/pages/match/details/index.vue index 38d37dd..2f95792 100644 --- a/src/pages/match/details/index.vue +++ b/src/pages/match/details/index.vue @@ -620,23 +620,32 @@ <el-dialog title="阶段赛名称" :visible.sync="stageVisible" :close-on-click-modal="false" - width="600px"> + width="600px" + @close="stageClose"> <template v-if="curStage && curStage.competitionStageContentSetting"> - <el-button v-if="curStage.competitionStageContentSetting.systemLink" - type="text" - style="font-size: 13px" - @click="toOffline">进入{{ curStage.stageName }}</el-button> - <div v-if="curStage.competitionStageContentSetting.fileUrl" - class="flex a-center m-b-10"> - <p class="m-r-10" - style="font-size: 13px">文件下载:{{ curStage.competitionStageContentSetting.fileName }}</p> - <el-button type="text" + <div> + <span class="fs-14">进入比赛:</span> + <el-button v-if="curStage.competitionStageContentSetting.systemLink" + type="danger" style="font-size: 13px" - @click="download({fileName: curStage.competitionStageContentSetting.fileName, filePath: curStage.competitionStageContentSetting.fileUrl})">点击下载</el-button> + @click="toOffline">进入{{ curStage.stageName }}</el-button> + </div> + <div v-if="curStage.competitionStageContentSetting.fileUrl" + class="flex m-b-20 fs-14"> + <span style="padding-top: 7px">文件下载:</span> + <div> + <div v-for="(file, i) in curStage.competitionStageContentSetting.fileList" + :key="i"> + <span style="margin-right: 10px;color: #606266;">{{ file.name }}</span> + <el-button type="text" + style="font-size: 14px" + @click="download({fileName: file.name, filePath: file.url})">点击下载</el-button> + </div> + </div> </div> <div class="flex m-b-20"> - <span style="font-size: 12px">文件上传:</span> + <span class="fs-14">文件上传:</span> <el-upload :before-upload="beforeUpload" :on-remove="handleRemove" :on-error="uploadError" @@ -646,26 +655,28 @@ :on-exceed="handleExceed" :action="api.fileUploadNakadai" :headers="headers" + :file-list="fileList" name="file"> <el-button size="small" - type="primary">上传试卷</el-button> + type="primary">上传文件</el-button> <div slot="tip" class="el-upload__tip"> + + <el-progress v-if="showProgress" + :stroke-width="3" + :percentage="progressPercent"></el-progress> <p>请上传大小1G以内的文件,支持常见文件格式。</p> <p>只允许上传一个文件,如有多个文件则需打包再上传。</p> </div> </el-upload> </div> - <div>说明:{{ curStage.competitionStageContentSetting.stageExplain }}</div> + <div class="fs-14">说明:{{ curStage.competitionStageContentSetting.stageExplain }}</div> </template> <span slot="footer" class="dialog-footer"> <el-button size="small" - type="primary" - @click="stageSubmit">提交</el-button> - <el-button size="small" - @click="stageVisible = false">取消</el-button> + @click="stageVisible = false">关闭</el-button> </span> </el-dialog> </div> @@ -677,6 +688,7 @@ import breadcrumb from '@/components/breadcrumb' import util from '@/libs/util' import Setting from "@/setting" import Const from '@/const/match' +import axios from 'axios' export default { name: 'matchdetail', data () { @@ -791,7 +803,11 @@ export default { submiting: false, stageVisible: false, - filesResult: {} + filesResult: {}, + fileList: [], + curFileId: '', + showProgress: false, + progressPercent: 0, }; }, computed: { @@ -1419,6 +1435,7 @@ export default { const oversize = file.size / 1024 / 1024 < 1000 if (!oversize) util.warningMsg('请上传小于1GB的附件!') if (oversize) { + this.showProgress = true return true } else { return false @@ -1437,31 +1454,40 @@ export default { handleExceed (files, fileList) { util.warningMsg(`当前限制选择 1 个文件,如需更换,请删除上一个文件再重新选择!`); }, - handleRemove (file, fileList) { }, - uploadSuccess (res) { - this.filesResult = res.filesResult + // 删除文件表里的文件 + handleRemove () { + this.curFileId && this.$post(this.api.cCompetitionStageFileDel, [this.curFileId]).then(res => { + this.curFileId = '' + }).catch(res => { }) }, - // 提交阶段内容 - stageSubmit () { - if (this.submiting) return false - this.submiting = true + uploadSuccess (res) { + const result = res.filesResult // 有上传记录,则删除上次的文件 - this.curStage.competitionStageFile && this.$post(this.api.cCompetitionStageFileDel, [this.curStage.competitionStageFile.id]).then(res => { }).catch(res => { }) + this.handleRemove() this.$post(this.api.cCompetitionStageFileSave, { competitionId: this.id, - fileFormat: this.filesResult.fileType, - fileName: this.filesResult.originalFileName, - filePath: this.filesResult.fileUrl, - fileSize: this.filesResult.fileSize, - ossFileName: this.filesResult.ossFileName, + fileFormat: result.fileType, + fileName: result.originalFileName, + filePath: result.fileUrl, + fileSize: result.fileSize, + ossFileName: result.ossFileName, stageId: this.curStage.stageId, teamId: this.form.competitionRegistration.teamId }).then(res => { - util.successMsg('提交成功!') - this.stageVisible = false - this.submiting = false + this.curFileId = res.message + util.successMsg(`上传成功!`); }).catch(res => { }) }, + // 提交阶段内容 + stageSubmit () { + if (this.submiting) return false + this.submiting = true + }, + // 阶段弹框关闭回调 + stageClose () { + this.fileList = [] + this.getData() + }, // 选择要进入的阶段 chooseStage (e) { @@ -1498,7 +1524,28 @@ export default { window.open(this.curStage.competitionStageContentSetting.systemLink) } else { // 显示上传文件弹框 this.stageVisible = true - console.log("🚀 ~ file: index.vue:1499 ~ signup ~ this.curStage:", this.curStage) + + // 文件路径名称处理 + if (this.curStage.competitionStageContentSetting && this.curStage.competitionStageContentSetting.fileUrl) { + const urls = this.curStage.competitionStageContentSetting.fileUrl.split('|') + const names = this.curStage.competitionStageContentSetting.fileName.split('|') + this.curStage.competitionStageContentSetting.fileList = [] + urls.map((n, i) => { + this.curStage.competitionStageContentSetting.fileList.push({ + name: names[i], + url: n + }) + }) + } + + const file = this.curStage.competitionStageFile + if (file) { + this.curFileId = file.id + this.fileList = [{ + name: file.fileName, + url: file.filePath, + }] + } } } else { // 参加过比赛不让参加 @@ -1568,7 +1615,7 @@ export default { util.cookies.set('projectId', form.projectId) util.cookies.set('token', token) util.cookies.set('courseId', form.cid) - util.cookies.set('curriculumName', escape(form.systemName)) + util.cookies.set('curriculumName', encodeURIComponent(form.systemName)) util.cookies.set('systemId', form.systemId) util.cookies.set('isSubmit', '', -1) util.cookies.set('competitionId', this.form.id) @@ -1989,4 +2036,7 @@ export default { align-items: center; } } +/deep/.el-upload__tip { + color: #727272; +} </style> \ No newline at end of file diff --git a/src/pages/match/list/index.vue b/src/pages/match/list/index.vue index 81cfcd9..caff19c 100644 --- a/src/pages/match/list/index.vue +++ b/src/pages/match/list/index.vue @@ -267,23 +267,32 @@ <el-dialog title="阶段赛名称" :visible.sync="stageVisible" :close-on-click-modal="false" - width="600px"> + width="600px" + @close="stageClose"> <template v-if="curStageItem && curStageItem.competitionStageContentSetting"> - <el-button v-if="curStageItem.competitionStageContentSetting.systemLink" - type="text" - style="font-size: 13px" - @click="toOffline">进入{{ curStageItem.stageName }}</el-button> - <div v-if="curStageItem.competitionStageContentSetting.fileUrl" - class="flex a-center m-b-10"> - <p class="m-r-10" - style="font-size: 13px">文件下载:{{ curStageItem.competitionStageContentSetting.fileName }}</p> - <el-button type="text" + <div> + <span class="fs-14">进入比赛:</span> + <el-button v-if="curStageItem.competitionStageContentSetting.systemLink" + type="danger" style="font-size: 13px" - @click="download({fileName: curStageItem.competitionStageContentSetting.fileName, filePath: curStageItem.competitionStageContentSetting.fileUrl})">点击下载</el-button> + @click="toOffline">进入{{ curStageItem.stageName }}</el-button> + </div> + <div v-if="curStageItem.competitionStageContentSetting.fileUrl" + class="flex m-b-20 fs-14"> + <span style="padding-top: 7px">文件下载:</span> + <div> + <div v-for="file in curStageItem.competitionStageContentSetting.fileList" + :key="file"> + <span style="margin-right: 10px;color: #606266;">{{ file.name }}</span> + <el-button type="text" + style="font-size: 14px" + @click="download({fileName: file.name, filePath: file.url})">点击下载</el-button> + </div> + </div> </div> <div class="flex m-b-20"> - <span style="font-size: 12px">文件上传:</span> + <span class="fs-14">文件上传:</span> <el-upload :before-upload="beforeUpload" :on-remove="handleRemove" :on-error="uploadError" @@ -293,9 +302,10 @@ :on-exceed="handleExceed" :action="api.fileUploadNakadai" :headers="headers" + :file-list="fileList" name="file"> <el-button size="small" - type="primary">上传试卷</el-button> + type="primary">上传文件</el-button> <div slot="tip" class="el-upload__tip"> <p>请上传大小1G以内的文件,支持常见文件格式。</p> @@ -304,15 +314,12 @@ </el-upload> </div> - <div>说明:{{ curStageItem.competitionStageContentSetting.stageExplain }}</div> + <div class="fs-14">说明:{{ curStageItem.competitionStageContentSetting.stageExplain }}</div> </template> <span slot="footer" class="dialog-footer"> <el-button size="small" - type="primary" - @click="stageSubmit">提交</el-button> - <el-button size="small" - @click="stageVisible = false">取消</el-button> + @click="stageVisible = false">关闭</el-button> </span> </el-dialog> </div> @@ -444,7 +451,9 @@ export default { stageVisible: false, filesResult: {}, - curStageItem: {} + curStageItem: {}, + fileList: [], + curFileId: '' }; }, computed: { @@ -767,31 +776,39 @@ export default { handleExceed (files, fileList) { util.warningMsg(`当前限制选择 1 个文件,如需更换,请删除上一个文件再重新选择!`); }, - handleRemove (file, fileList) { }, - uploadSuccess (res) { - this.filesResult = res.filesResult + // 删除文件表里的文件 + handleRemove () { + this.curFileId && this.$post(this.api.cCompetitionStageFileDel, [this.curFileId]).then(res => { + this.curFileId = '' + }).catch(res => { }) }, - // 提交阶段内容 - stageSubmit () { - if (this.submiting) return false - this.submiting = true + uploadSuccess (res) { + const result = res.filesResult // 有上传记录,则删除上次的文件 - this.curStageItem.competitionStageFile && this.$post(this.api.cCompetitionStageFileDel, [this.curStageItem.competitionStageFile.id]).then(res => { }).catch(res => { }) + this.handleRemove() this.$post(this.api.cCompetitionStageFileSave, { competitionId: this.curItem.id, - fileFormat: this.filesResult.fileType, - fileName: this.filesResult.originalFileName, - filePath: this.filesResult.fileUrl, - fileSize: this.filesResult.fileSize, - ossFileName: this.filesResult.ossFileName, + fileFormat: result.fileType, + fileName: result.originalFileName, + filePath: result.fileUrl, + fileSize: result.fileSize, + ossFileName: result.ossFileName, stageId: this.curStageItem.stageId, teamId: this.curItem.teamId }).then(res => { util.successMsg('提交成功!') - this.stageVisible = false - this.submiting = false }).catch(res => { }) }, + // 提交阶段内容 + stageSubmit () { + if (this.submiting) return false + this.submiting = true + }, + // 阶段弹框关闭回调 + stageClose () { + this.fileList = [] + this.getData() + }, // 下载附件 download (item) { util.downloadFile(item.fileName, item.filePath) @@ -839,7 +856,28 @@ export default { } else { // 显示上传文件弹框 this.curStageItem = item.curStage this.stageVisible = true - console.log("🚀 ~ file: index.vue:830 ~ signup ~ this.curItem:", this.curItem.curStage.competitionStageContentSetting.systemLink) + + // 文件路径名称处理 + if (item.curStage.competitionStageContentSetting && item.curStage.competitionStageContentSetting.fileUrl) { + const urls = item.curStage.competitionStageContentSetting.fileUrl.split('|') + const names = item.curStage.competitionStageContentSetting.fileName.split('|') + item.curStage.competitionStageContentSetting.fileList = [] + urls.map((n, i) => { + item.curStage.competitionStageContentSetting.fileList.push({ + name: names[i], + url: n + }) + }) + } + + const file = item.curStage.competitionStageFile + if (file) { + this.curFileId = file.id + this.fileList = [{ + name: file.fileName, + url: file.filePath, + }] + } } } else { // 参加过比赛不让参加 @@ -913,7 +951,7 @@ export default { util.cookies.set('projectId', form.projectId) util.cookies.set('token', token) util.cookies.set('courseId', form.cid) - util.cookies.set('curriculumName', escape(form.systemName)) + util.cookies.set('curriculumName', encodeURIComponent(form.systemName)) util.cookies.set('systemId', form.systemId) util.cookies.set('competitionId', this.curItem.id) util.cookies.set('stageId', form.stageId) @@ -1241,4 +1279,7 @@ export default { align-items: center; } } +/deep/.el-upload__tip { + color: #727272; +} </style> \ No newline at end of file diff --git a/src/pages/station/preview/index.vue b/src/pages/station/preview/index.vue index 1653d14..9035570 100644 --- a/src/pages/station/preview/index.vue +++ b/src/pages/station/preview/index.vue @@ -941,7 +941,7 @@ export default { projectId ? util.cookies.set('projectId', projectId) : util.cookies.set('projectId', '', -1) util.cookies.set('token', token) util.cookies.set('courseId', this.courseId) - util.cookies.set('curriculumName', escape(this.curriculumName)) + util.cookies.set('curriculumName', encodeURIComponent(this.curriculumName)) util.cookies.set('systemId', id) util.cookies.set('mallId', this.mallId) util.cookies.set('isSubmit', '', -1) diff --git a/src/setting.js b/src/setting.js index d94aeec..48748ca 100644 --- a/src/setting.js +++ b/src/setting.js @@ -32,7 +32,7 @@ if (isPro) { uploadURL = `http://121.37.12.51/` host = "http://121.37.12.51/"; // 测试服 // host = 'https://www.occupationlab.com/' // 正式服 - host = "http://192.168.31.217:9000/"; // 榕 + // host = "http://192.168.31.217:9000/"; // 榕 // host = "http://192.168.31.51:9000/"; // 赓 } else if (isSq) { zcPath = `10.20.100.204:8883` @@ -51,7 +51,7 @@ const Setting = { uploadURL, // 阿里云oss域名 systemPath, // 子系统地址前缀 sandPath, - autoLogoutTime: 3600000000, // 长时间未操作,自动退出登录时间 + autoLogoutTime: 1000 * 60 * 60, // 长时间未操作,自动退出登录时间 modalDuration: 3, // 接口请求返回错误时,弹窗的持续时间,单位:秒 errorModalType: "Message", // 接口请求返回错误时,弹窗的类型,可选值为 Message 或 Notice cookiesExpires: 1, // Cookies 默认保存时间,单位:天