mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-03 14:10:57 +08:00
Dashboard
This commit is contained in:
830
admin/package-lock.json
generated
830
admin/package-lock.json
generated
@@ -1,818 +1,8 @@
|
||||
{
|
||||
"name": "admin",
|
||||
"version": "0.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"axios": "^0.21.1",
|
||||
"element-plus": "^1.0.2-beta.40",
|
||||
"vue": "^3.0.5",
|
||||
"vue-router": "^4.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^1.2.1",
|
||||
"@vue/compiler-sfc": "^3.0.5",
|
||||
"sass": "^1.32.11",
|
||||
"vite": "^2.1.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.12.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz?cache=0&sync_timestamp=1608076995361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.12.11.tgz",
|
||||
"integrity": "sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0="
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.13.16",
|
||||
"resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.13.16.tgz?cache=0&sync_timestamp=1618917780280&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.13.16.tgz",
|
||||
"integrity": "sha1-DxgXmwRI5pObHz9cTDVaOpvN/Tc=",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.13.17",
|
||||
"resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.13.17.tgz",
|
||||
"integrity": "sha1-SAEKEVyfunWItEN91oyUaQErOLQ=",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.12.11",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@popperjs/core": {
|
||||
"version": "2.9.2",
|
||||
"resolved": "https://registry.npm.taobao.org/@popperjs/core/download/@popperjs/core-2.9.2.tgz?cache=0&sync_timestamp=1617290098226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.9.2.tgz",
|
||||
"integrity": "sha1-rep7aVPLs0ZRdmsFSEaOdDxqI1M="
|
||||
},
|
||||
"node_modules/@types/lodash": {
|
||||
"version": "4.14.168",
|
||||
"resolved": "https://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.168.tgz?cache=0&sync_timestamp=1613379158193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.168.tgz",
|
||||
"integrity": "sha1-/iRjLnm3rePxMoka//hsql5c4Ag="
|
||||
},
|
||||
"node_modules/@vitejs/plugin-vue": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npm.taobao.org/@vitejs/plugin-vue/download/@vitejs/plugin-vue-1.2.1.tgz?cache=0&sync_timestamp=1617152725801&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vitejs%2Fplugin-vue%2Fdownload%2F%40vitejs%2Fplugin-vue-1.2.1.tgz",
|
||||
"integrity": "sha1-beSUNvw0b4KaVmdgZkKOPwEVIqw=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-core": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/compiler-core/download/@vue/compiler-core-3.0.11.tgz?cache=0&sync_timestamp=1617321553533&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcompiler-core%2Fdownload%2F%40vue%2Fcompiler-core-3.0.11.tgz",
|
||||
"integrity": "sha1-XvV55G17M2uHNSKHWNHCxQWq5po=",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.12.0",
|
||||
"@babel/types": "^7.12.0",
|
||||
"@vue/shared": "3.0.11",
|
||||
"estree-walker": "^2.0.1",
|
||||
"source-map": "^0.6.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-dom": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/compiler-dom/download/@vue/compiler-dom-3.0.11.tgz",
|
||||
"integrity": "sha1-sV/ByQk3H9ZxdGAgulW12rSnMO4=",
|
||||
"dependencies": {
|
||||
"@vue/compiler-core": "3.0.11",
|
||||
"@vue/shared": "3.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-sfc": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/compiler-sfc/download/@vue/compiler-sfc-3.0.11.tgz",
|
||||
"integrity": "sha1-zYyiFUuIlntSH1rTsQ9fi2tmVnk=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.13.9",
|
||||
"@babel/types": "^7.13.0",
|
||||
"@vue/compiler-core": "3.0.11",
|
||||
"@vue/compiler-dom": "3.0.11",
|
||||
"@vue/compiler-ssr": "3.0.11",
|
||||
"@vue/shared": "3.0.11",
|
||||
"consolidate": "^0.16.0",
|
||||
"estree-walker": "^2.0.1",
|
||||
"hash-sum": "^2.0.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
"magic-string": "^0.25.7",
|
||||
"merge-source-map": "^1.1.0",
|
||||
"postcss": "^8.1.10",
|
||||
"postcss-modules": "^4.0.0",
|
||||
"postcss-selector-parser": "^6.0.4",
|
||||
"source-map": "^0.6.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-ssr": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/compiler-ssr/download/@vue/compiler-ssr-3.0.11.tgz?cache=0&sync_timestamp=1617321554271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcompiler-ssr%2Fdownload%2F%40vue%2Fcompiler-ssr-3.0.11.tgz",
|
||||
"integrity": "sha1-rFoF/RJXQS+mYHnII9ggO2qImhM=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.0.11",
|
||||
"@vue/shared": "3.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/reactivity": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/reactivity/download/@vue/reactivity-3.0.11.tgz?cache=0&sync_timestamp=1617321554569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Freactivity%2Fdownload%2F%40vue%2Freactivity-3.0.11.tgz",
|
||||
"integrity": "sha1-B7WINJ/QViaxfzUAy+99S9tNvQs=",
|
||||
"dependencies": {
|
||||
"@vue/shared": "3.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/runtime-core": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/runtime-core/download/@vue/runtime-core-3.0.11.tgz?cache=0&sync_timestamp=1617321945301&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fruntime-core%2Fdownload%2F%40vue%2Fruntime-core-3.0.11.tgz",
|
||||
"integrity": "sha1-xS38as8yFUk2I1UsHCkZCAxWLkQ=",
|
||||
"dependencies": {
|
||||
"@vue/reactivity": "3.0.11",
|
||||
"@vue/shared": "3.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/runtime-dom": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/runtime-dom/download/@vue/runtime-dom-3.0.11.tgz?cache=0&sync_timestamp=1617321945517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fruntime-dom%2Fdownload%2F%40vue%2Fruntime-dom-3.0.11.tgz",
|
||||
"integrity": "sha1-elUt8hkHlCch/raWHEGOIippkzc=",
|
||||
"dependencies": {
|
||||
"@vue/runtime-core": "3.0.11",
|
||||
"@vue/shared": "3.0.11",
|
||||
"csstype": "^2.6.8"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/shared": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.11.tgz?cache=0&sync_timestamp=1617321555263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fshared%2Fdownload%2F%40vue%2Fshared-3.0.11.tgz",
|
||||
"integrity": "sha1-INIt0Np9NYuyHBf5vehigVJkLHc="
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz",
|
||||
"integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/async-validator": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.5.1.tgz?cache=0&sync_timestamp=1605749896979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.1.tgz",
|
||||
"integrity": "sha1-zWK5aIskZfSEIOJ620d2CrG1VZ8="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "0.21.1",
|
||||
"resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz",
|
||||
"integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/big.js": {
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
|
||||
"integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/binary-extensions": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299308660&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz",
|
||||
"integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/bluebird": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1589682744631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz",
|
||||
"integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
|
||||
"integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fill-range": "^7.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719430924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz",
|
||||
"integrity": "sha1-7pznu+vSt59J8wR5nVRo4x4U5oo=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.1",
|
||||
"braces": "~3.0.2",
|
||||
"glob-parent": "~5.1.0",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/colorette": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259623635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz",
|
||||
"integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/consolidate": {
|
||||
"version": "0.16.0",
|
||||
"resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.16.0.tgz?cache=0&sync_timestamp=1599596863404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.16.0.tgz",
|
||||
"integrity": "sha1-oRhkdokw8vGUMWYKZZBmaPX73BY=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"bluebird": "^3.7.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cssesc": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
|
||||
"integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"cssesc": "bin/cssesc"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "2.6.17",
|
||||
"resolved": "https://registry.nlark.com/csstype/download/csstype-2.6.17.tgz?cache=0&sync_timestamp=1618818466657&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-2.6.17.tgz",
|
||||
"integrity": "sha1-TPMOuH4dGgBdi2UQ+VKSQT9qHA4="
|
||||
},
|
||||
"node_modules/dayjs": {
|
||||
"version": "1.10.4",
|
||||
"resolved": "https://registry.npm.taobao.org/dayjs/download/dayjs-1.10.4.tgz?cache=0&sync_timestamp=1611310021152&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdayjs%2Fdownload%2Fdayjs-1.10.4.tgz",
|
||||
"integrity": "sha1-jlRKm4aD9heD9XCYCoqA6vVKseI="
|
||||
},
|
||||
"node_modules/element-plus": {
|
||||
"version": "1.0.2-beta.40",
|
||||
"resolved": "https://registry.npm.taobao.org/element-plus/download/element-plus-1.0.2-beta.40.tgz",
|
||||
"integrity": "sha1-MPybFhSWrlh/q4YjXIC3KOpD2Qk=",
|
||||
"dependencies": {
|
||||
"@popperjs/core": "^2.4.4",
|
||||
"@types/lodash": "^4.14.161",
|
||||
"async-validator": "^3.4.0",
|
||||
"dayjs": "1.x",
|
||||
"lodash": "^4.17.20",
|
||||
"mitt": "^2.1.0",
|
||||
"normalize-wheel": "^1.0.1",
|
||||
"resize-observer-polyfill": "^1.5.1"
|
||||
}
|
||||
},
|
||||
"node_modules/emojis-list": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
|
||||
"integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.9.7",
|
||||
"resolved": "https://registry.npm.taobao.org/esbuild/download/esbuild-0.9.7.tgz",
|
||||
"integrity": "sha1-6g1jnL5LiOwl++1Nb/AMjXiO9ws=",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
}
|
||||
},
|
||||
"node_modules/estree-walker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/estree-walker/download/estree-walker-2.0.2.tgz?cache=0&sync_timestamp=1611956983677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festree-walker%2Fdownload%2Festree-walker-2.0.2.tgz",
|
||||
"integrity": "sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw="
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.13.3",
|
||||
"resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.3.tgz",
|
||||
"integrity": "sha1-5VmK1QF0wbxOhyMB6CrCzZf5Amc=",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz",
|
||||
"integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
|
||||
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/generic-names": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/generic-names/download/generic-names-2.0.1.tgz?cache=0&sync_timestamp=1603542269880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgeneric-names%2Fdownload%2Fgeneric-names-2.0.1.tgz",
|
||||
"integrity": "sha1-+KN46tLMqno08DF7BVVIMq5BuHI=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"loader-utils": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1615065997979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
|
||||
"integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/has": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
|
||||
"integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/hash-sum": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz",
|
||||
"integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/icss-replace-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz",
|
||||
"integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/icss-utils": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-5.1.0.tgz?cache=0&sync_timestamp=1605801291394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-5.1.0.tgz",
|
||||
"integrity": "sha1-xr5oWKvQE9do6YNmrkfiXViHsa4=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
|
||||
"integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"binary-extensions": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-core-module": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411622542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz",
|
||||
"integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"has": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/is-extglob": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
|
||||
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-glob": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
|
||||
"integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-extglob": "^2.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
|
||||
"integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/json5": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
|
||||
"integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"minimist": "^1.2.0"
|
||||
},
|
||||
"bin": {
|
||||
"json5": "lib/cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/loader-utils": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
|
||||
"integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835838133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz",
|
||||
"integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw="
|
||||
},
|
||||
"node_modules/lodash.camelcase": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz",
|
||||
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz",
|
||||
"integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.25.7",
|
||||
"resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz",
|
||||
"integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"sourcemap-codec": "^1.4.4"
|
||||
}
|
||||
},
|
||||
"node_modules/merge-source-map": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz",
|
||||
"integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"source-map": "^0.6.1"
|
||||
}
|
||||
},
|
||||
"node_modules/minimist": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1589682820731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz",
|
||||
"integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mitt": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/mitt/download/mitt-2.1.0.tgz?cache=0&sync_timestamp=1594823636076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmitt%2Fdownload%2Fmitt-2.1.0.tgz",
|
||||
"integrity": "sha1-90BXfCMXbGIFsSGylzUU6t4bIjA="
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.1.22",
|
||||
"resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.22.tgz",
|
||||
"integrity": "sha1-s1+Pt9FRmQqK69WqUBXAPPcm+EQ=",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
|
||||
"integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/normalize-wheel": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
|
||||
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
|
||||
},
|
||||
"node_modules/path-parse": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
|
||||
"integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.3.tgz",
|
||||
"integrity": "sha1-RlVH81nMwgbTxI5Goby4m/fuYZ0=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.2.10",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss/download/postcss-8.2.10.tgz?cache=0&sync_timestamp=1618159223724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-8.2.10.tgz",
|
||||
"integrity": "sha1-ynoEKqiv9JSzNND/Pp53B59vcCs=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"colorette": "^1.2.2",
|
||||
"nanoid": "^3.1.22",
|
||||
"source-map": "^0.6.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-modules": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss-modules/download/postcss-modules-4.0.0.tgz",
|
||||
"integrity": "sha1-K8fydquI8/Gw+t9svXdy1DtfO5s=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"generic-names": "^2.0.1",
|
||||
"icss-replace-symbols": "^1.1.0",
|
||||
"lodash.camelcase": "^4.3.0",
|
||||
"postcss-modules-extract-imports": "^3.0.0",
|
||||
"postcss-modules-local-by-default": "^4.0.0",
|
||||
"postcss-modules-scope": "^3.0.0",
|
||||
"postcss-modules-values": "^4.0.0",
|
||||
"string-hash": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-modules-extract-imports": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz?cache=0&sync_timestamp=1602588245463&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-3.0.0.tgz",
|
||||
"integrity": "sha1-zaHwR8CugMl9vijD52pDuIAldB0=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-modules-local-by-default": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz?cache=0&sync_timestamp=1602587568476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-4.0.0.tgz",
|
||||
"integrity": "sha1-67tU+uFZjuz99pGgKz/zs5ClpRw=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"icss-utils": "^5.0.0",
|
||||
"postcss-selector-parser": "^6.0.2",
|
||||
"postcss-value-parser": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-modules-scope": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz?cache=0&sync_timestamp=1602593260387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-3.0.0.tgz",
|
||||
"integrity": "sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"postcss-selector-parser": "^6.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-modules-values": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz?cache=0&sync_timestamp=1602586230505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-4.0.0.tgz",
|
||||
"integrity": "sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"icss-utils": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-selector-parser": {
|
||||
"version": "6.0.5",
|
||||
"resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.5.tgz",
|
||||
"integrity": "sha1-BC104Tfbg+bylHEglstBP1qmEsQ=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cssesc": "^3.0.0",
|
||||
"util-deprecate": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-value-parser": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
|
||||
"integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz?cache=0&sync_timestamp=1615717369278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.5.0.tgz",
|
||||
"integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"picomatch": "^2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/resize-observer-polyfill": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
|
||||
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
|
||||
},
|
||||
"node_modules/resolve": {
|
||||
"version": "1.20.0",
|
||||
"resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613054822645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz",
|
||||
"integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-core-module": "^2.2.0",
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "2.45.2",
|
||||
"resolved": "https://registry.npm.taobao.org/rollup/download/rollup-2.45.2.tgz?cache=0&sync_timestamp=1618288771153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-2.45.2.tgz",
|
||||
"integrity": "sha1-j7hZF8nzVgVyDpIyjzzL+6b3i0g=",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"rollup": "dist/bin/rollup"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.32.11",
|
||||
"resolved": "https://registry.nlark.com/sass/download/sass-1.32.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsass%2Fdownload%2Fsass-1.32.11.tgz",
|
||||
"integrity": "sha1-sjaz6lXHZgLC7yvQRF8NtYG6ohg=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"sass": "sass.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1589682764497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sourcemap-codec": {
|
||||
"version": "1.4.8",
|
||||
"resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
|
||||
"integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/string-hash": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npm.taobao.org/string-hash/download/string-hash-1.1.3.tgz",
|
||||
"integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/to-fast-properties": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-number": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.nlark.com/vite/download/vite-2.2.1.tgz",
|
||||
"integrity": "sha1-kMSB9pNx8yhn2GpqYjuwZLh2rT0=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.9.3",
|
||||
"postcss": "^8.2.1",
|
||||
"resolve": "^1.19.0",
|
||||
"rollup": "^2.38.5"
|
||||
},
|
||||
"bin": {
|
||||
"vite": "bin/vite.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/vue": {
|
||||
"version": "3.0.11",
|
||||
"resolved": "https://registry.npm.taobao.org/vue/download/vue-3.0.11.tgz",
|
||||
"integrity": "sha1-yC+VlMv03MhpJB1MjdPgjZqPS18=",
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.0.11",
|
||||
"@vue/runtime-dom": "3.0.11",
|
||||
"@vue/shared": "3.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-router": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.nlark.com/vue-router/download/vue-router-4.0.6.tgz",
|
||||
"integrity": "sha1-kXUNtQfSZkLyJbDsYGRWjl/kSNY="
|
||||
},
|
||||
"node_modules/yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz",
|
||||
"integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=",
|
||||
"dev": true
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.12.11",
|
||||
@@ -839,9 +29,9 @@
|
||||
"integrity": "sha1-rep7aVPLs0ZRdmsFSEaOdDxqI1M="
|
||||
},
|
||||
"@types/lodash": {
|
||||
"version": "4.14.168",
|
||||
"resolved": "https://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.168.tgz?cache=0&sync_timestamp=1613379158193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.168.tgz",
|
||||
"integrity": "sha1-/iRjLnm3rePxMoka//hsql5c4Ag="
|
||||
"version": "4.14.169",
|
||||
"resolved": "https://registry.nlark.com/@types/lodash/download/@types/lodash-4.14.169.tgz",
|
||||
"integrity": "sha1-g8IXaI8HpNnvjyij69HTGPb/TLs="
|
||||
},
|
||||
"@vitejs/plugin-vue": {
|
||||
"version": "1.2.1",
|
||||
@@ -947,9 +137,9 @@
|
||||
}
|
||||
},
|
||||
"async-validator": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.5.1.tgz?cache=0&sync_timestamp=1605749896979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.1.tgz",
|
||||
"integrity": "sha1-zWK5aIskZfSEIOJ620d2CrG1VZ8="
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.nlark.com/async-validator/download/async-validator-3.5.2.tgz",
|
||||
"integrity": "sha1-aOhmqWgk6LJpT/eoMcGiXETV5QA="
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.21.1",
|
||||
@@ -1034,9 +224,9 @@
|
||||
"integrity": "sha1-jlRKm4aD9heD9XCYCoqA6vVKseI="
|
||||
},
|
||||
"element-plus": {
|
||||
"version": "1.0.2-beta.40",
|
||||
"resolved": "https://registry.npm.taobao.org/element-plus/download/element-plus-1.0.2-beta.40.tgz",
|
||||
"integrity": "sha1-MPybFhSWrlh/q4YjXIC3KOpD2Qk=",
|
||||
"version": "1.0.2-beta.44",
|
||||
"resolved": "https://registry.nlark.com/element-plus/download/element-plus-1.0.2-beta.44.tgz",
|
||||
"integrity": "sha1-ev8SLmGBCIIjAnrbZaSoMh4e9Ok=",
|
||||
"requires": {
|
||||
"@popperjs/core": "^2.4.4",
|
||||
"@types/lodash": "^4.14.161",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.21.1",
|
||||
"element-plus": "^1.0.2-beta.40",
|
||||
"element-plus": "^1.0.2-beta.44",
|
||||
"vue": "^3.0.5",
|
||||
"vue-router": "^4.0.6"
|
||||
},
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
<el-container class="content">
|
||||
<Header :router-name="state.routerName"/>
|
||||
<div class="main">
|
||||
<router-view />
|
||||
<router-view @update-version="updateVersion" />
|
||||
</div>
|
||||
<Footer />
|
||||
<Footer :version="state.version"/>
|
||||
</el-container>
|
||||
</el-container>
|
||||
<el-container v-else class="container">
|
||||
@@ -80,7 +80,8 @@ export default {
|
||||
count: {
|
||||
number: 1
|
||||
},
|
||||
routerName: router.name
|
||||
routerName: router.name,
|
||||
version: '',
|
||||
})
|
||||
onMounted(() => {
|
||||
|
||||
@@ -106,8 +107,13 @@ export default {
|
||||
state.currentPath = to.path
|
||||
document.title = pathMap[to.name]
|
||||
})
|
||||
const updateVersion = (val) => {
|
||||
// console.log('updateVersion', val)
|
||||
state.version = val.nexus_version.value
|
||||
}
|
||||
return {
|
||||
state
|
||||
state,
|
||||
updateVersion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,18 @@
|
||||
<template>
|
||||
<div class="footer">
|
||||
<div class="left">Powered by <a target="_blank" href="https://nexusphp.org/">NexusPHP</a></div>
|
||||
<div class="right">
|
||||
Version: 1.6.0-beta6
|
||||
<div class="right" v-if="version">
|
||||
Version: {{version}}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'Footer'
|
||||
name: 'Footer',
|
||||
props: {
|
||||
version: String
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
13
admin/src/utils/api.js
vendored
13
admin/src/utils/api.js
vendored
@@ -90,6 +90,19 @@ const api = {
|
||||
listSetting: (params) => {
|
||||
return axios.get('settings', {params});
|
||||
},
|
||||
listStatData: () => {
|
||||
return axios.get('dashboard/stat-data')
|
||||
},
|
||||
listLatestUser: () => {
|
||||
return axios.get('dashboard/latest-user')
|
||||
},
|
||||
listLatestTorrent: () => {
|
||||
return axios.get('dashboard/latest-torrent')
|
||||
},
|
||||
listSystemInfo: () => {
|
||||
return axios.get('dashboard/system-info')
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default api
|
||||
|
||||
@@ -1,3 +1,141 @@
|
||||
<template>
|
||||
<div>Dashboard</div>
|
||||
<el-row>
|
||||
<el-col :span="12" class="stat-box">
|
||||
<el-card>
|
||||
<template #header>{{latestUser.data.page_title}}</template>
|
||||
<el-table
|
||||
:data="latestUser.data.data"
|
||||
v-loading="latestUser.loading"
|
||||
>
|
||||
<el-table-column
|
||||
prop="username"
|
||||
label="Username"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
prop="email"
|
||||
label="Email"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="Status"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
prop="added"
|
||||
label="Added"
|
||||
></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12" class="stat-box">
|
||||
<el-card>
|
||||
<template #header>{{latestTorrent.data.page_title}}</template>
|
||||
<el-table
|
||||
:data="latestTorrent.data.data"
|
||||
v-loading="latestTorrent.loading"
|
||||
>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="Name"
|
||||
width="250"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
prop="user.username"
|
||||
label="User"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
prop="size_human"
|
||||
label="Size"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
prop="added"
|
||||
label="Added"
|
||||
></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div v-loading="statData.loading">
|
||||
<el-row class="row">
|
||||
<el-col :span="12" class="stat-box">
|
||||
<el-descriptions :title="statData.user.text" :column="2" border>
|
||||
<el-descriptions-item :label="item.text" v-for="item in statData.user.data">{{item.value}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="12" class="stat-box">
|
||||
<el-descriptions :title="statData.user_class.text" :column="2" border>
|
||||
<el-descriptions-item :label="item.class_text" v-for="item in statData.user_class.data">{{item.counts}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="row">
|
||||
<el-col :span="12" class="stat-box">
|
||||
<el-descriptions :title="statData.torrent.text" :column="2" border>
|
||||
<el-descriptions-item :label="item.text" v-for="item in statData.torrent.data">{{item.value}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="12" class="stat-box">
|
||||
<el-descriptions :title="statData.system_info.text" :column="2" border>
|
||||
<el-descriptions-item :label="item.text" v-for="item in statData.system_info.data">{{item.value}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { onMounted, reactive, ref, toRefs } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { useRouter } from 'vue-router'
|
||||
import api from '../../utils/api'
|
||||
|
||||
export default {
|
||||
name: "Dashboard",
|
||||
emits: ['updateVersion'],
|
||||
setup(props, context) {
|
||||
const router = useRouter()
|
||||
const state = reactive({
|
||||
statData: {
|
||||
loading: true,
|
||||
user: {},
|
||||
torrent: {},
|
||||
user_class: {},
|
||||
system_info: {}
|
||||
},
|
||||
latestUser: {
|
||||
loading: true,
|
||||
data: []
|
||||
},
|
||||
latestTorrent: {
|
||||
loading: true,
|
||||
data: []
|
||||
}
|
||||
})
|
||||
onMounted(() => {
|
||||
api.listStatData().then(res => {
|
||||
state.statData = res.data
|
||||
state.statData.loading = false
|
||||
context.emit('updateVersion', res.data.system_info.data)
|
||||
})
|
||||
api.listLatestUser().then(res => {
|
||||
state.latestUser.data = res.data
|
||||
state.latestUser.loading = false
|
||||
})
|
||||
api.listLatestTorrent().then(res => {
|
||||
state.latestTorrent.data = res.data
|
||||
state.latestTorrent.loading = false
|
||||
})
|
||||
})
|
||||
|
||||
return {
|
||||
...toRefs(state)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.stat-box {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -61,10 +61,8 @@ class Test extends Command
|
||||
// $r = $disk->put('/', base_path('composer.json'));
|
||||
// $r = DB::table('users')->where('id', 1)->update(['modcomment' => DB::raw("concat_ws(',', 'ddddd', modcomment)")]);
|
||||
|
||||
$yesterday = Carbon::parse('2021-05-16 13:30');
|
||||
$now = Carbon::parse(0);
|
||||
// $r = $yesterday->diffInSeconds($now);
|
||||
dd($now);
|
||||
$r = exec('uptime');
|
||||
dd($r);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
50
app/Http/Controllers/DashboardController.php
Normal file
50
app/Http/Controllers/DashboardController.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Resources\TorrentResource;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Repositories\DashboardRepository;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
private $repository;
|
||||
|
||||
public function __construct(DashboardRepository $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function systemInfo()
|
||||
{
|
||||
$result = $this->repository->getSystemInfo();
|
||||
return $this->success($result);
|
||||
}
|
||||
|
||||
public function statData()
|
||||
{
|
||||
$result = $this->repository->getStatData();
|
||||
return $this->success($result);
|
||||
}
|
||||
|
||||
public function latestUser()
|
||||
{
|
||||
$result = $this->repository->latestUser();
|
||||
$resource = UserResource::collection($result);
|
||||
$resource->additional([
|
||||
'page_title' => nexus_trans('dashboard.latest_user.page_title'),
|
||||
]);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
public function latestTorrent()
|
||||
{
|
||||
$result = $this->repository->latestTorrent();
|
||||
$resource = TorrentResource::collection($result);
|
||||
$resource->additional([
|
||||
'page_title' => nexus_trans('dashboard.latest_torrent.page_title'),
|
||||
]);
|
||||
return $this->success($resource);
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,4 @@ class ToolController extends Controller
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function systemInfo()
|
||||
{
|
||||
$result = $this->repository->getSystemInfo();
|
||||
return $this->success($result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ class User extends Authenticatable
|
||||
if (substr($value, 0, 4) == 'http') {
|
||||
return $value;
|
||||
} else {
|
||||
do_log("用户头像: $value 不是 http 地址");
|
||||
do_log("user: {$this->id} avatar: $value is not valid url.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
284
app/Repositories/DashboardRepository.php
Normal file
284
app/Repositories/DashboardRepository.php
Normal file
@@ -0,0 +1,284 @@
|
||||
<?php
|
||||
|
||||
namespace App\Repositories;
|
||||
|
||||
use App\Models\Peer;
|
||||
use App\Models\Torrent;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DashboardRepository extends BaseRepository
|
||||
{
|
||||
public function getSystemInfo(): array
|
||||
{
|
||||
$result = [];
|
||||
$name = 'nexus_version';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => VERSION_NUMBER,
|
||||
];
|
||||
$name = 'nexus_release_date';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => RELEASE_DATE,
|
||||
];
|
||||
$name = 'laravel_version';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => \Illuminate\Foundation\Application::VERSION,
|
||||
];
|
||||
$name = 'php_version';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => PHP_VERSION,
|
||||
];
|
||||
$name = 'mysql_version';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => DB::select(DB::raw('select version() as info'))[0]->info,
|
||||
];
|
||||
// $name = 'os';
|
||||
// $result[$name] = [
|
||||
// 'name' => $name,
|
||||
// 'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
// 'value' => PHP_OS,
|
||||
// ];
|
||||
$name = 'server_software';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => $_SERVER['SERVER_SOFTWARE'],
|
||||
];
|
||||
$name = 'load_average';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||
'value' => exec('uptime'),
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getStatData()
|
||||
{
|
||||
return [
|
||||
'user_class' => [
|
||||
'text' => nexus_trans('dashboard.user_class.page_title'),
|
||||
'data' => $this->statUserClass()
|
||||
],
|
||||
'user' => [
|
||||
'text' => nexus_trans('dashboard.user.page_title'),
|
||||
'data' => $this->statUsers()
|
||||
],
|
||||
'torrent' => [
|
||||
'text' => nexus_trans('dashboard.torrent.page_title'),
|
||||
'data' => $this->statTorrents()
|
||||
],
|
||||
'system_info' => [
|
||||
'text' => nexus_trans('dashboard.system_info.page_title'),
|
||||
'data' => $this->getSystemInfo()
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function statUserClass()
|
||||
{
|
||||
$userClasses = User::query()
|
||||
->groupBy('class')
|
||||
->selectRaw('class, count(*) as counts')
|
||||
->get()
|
||||
->pluck('counts', 'class');
|
||||
$result = [];
|
||||
foreach (User::$classes as $class => $value) {
|
||||
if ($class >= User::CLASS_VIP) {
|
||||
break;
|
||||
}
|
||||
$result[$class] = [
|
||||
'class' => $class,
|
||||
'class_text' => $value['text'],
|
||||
'counts' => $userClasses->has($class) ? $userClasses->get($class) : 0,
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function statUsers()
|
||||
{
|
||||
$result = [];
|
||||
$now = Carbon::now();
|
||||
|
||||
$name = 'total';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->count(),
|
||||
];
|
||||
$name = 'unconfirmed';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('status', User::STATUS_PENDING)->count(),
|
||||
];
|
||||
$name = 'visit_last_one_day';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('last_access', '>', $now->subDays(1))->count(),
|
||||
];
|
||||
$name = 'visit_last_one_week';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('last_access', '>', $now->subDays(7))->count(),
|
||||
];
|
||||
$name = 'visit_last_30_days';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('last_access', '>', $now->subDays(30))->count(),
|
||||
];
|
||||
$name = 'vip';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('class', User::CLASS_VIP)->count(),
|
||||
];
|
||||
$name = 'donated';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('donor', 'yes')->count(),
|
||||
];
|
||||
$name = 'warned';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('warned', 'yes')->count(),
|
||||
];
|
||||
$name = 'disabled';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => User::query()->where('enabled', 'no')->count(),
|
||||
];
|
||||
|
||||
$statGender = User::query()->groupBy('gender')->selectRaw('gender, count(*) as counts')->get()->pluck('counts','gender');
|
||||
foreach ($statGender as $gender => $value) {
|
||||
$name = "gender_$gender";
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.user.$name"),
|
||||
'value' => $statGender->has($gender) ? $statGender->get($gender) : 0,
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function statTorrents()
|
||||
{
|
||||
$now = now();
|
||||
$name = 'total';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => Torrent::query()->count(),
|
||||
];
|
||||
$name = 'deaded';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => Torrent::query()->where('visible', '=', Torrent::VISIBLE_NO)->count(),
|
||||
];
|
||||
|
||||
$seeders = Peer::query()->where('seeder', 'yes')->count();
|
||||
$name = 'seeders';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => $seeders,
|
||||
];
|
||||
|
||||
$leechers = Peer::query()->where('seeder', 'no')->count();
|
||||
$name = 'leechers';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => $leechers,
|
||||
];
|
||||
$name = 'seeders_leechers';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => $seeders + $leechers,
|
||||
];
|
||||
$name = 'seeders_leechers_ratio';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => $leechers == 0 ? 0 : number_format(($seeders / $leechers) * 100, 2),
|
||||
];
|
||||
$name = 'active_web_users';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => User::query()->where('last_access', '>', $now->subSeconds(900))->count(),
|
||||
];
|
||||
$name = 'active_tracker_users';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => Peer::query()->selectRaw('count(distinct(userid)) as counts')->first()->counts,
|
||||
];
|
||||
|
||||
$name = 'total_torrent_size';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => mksize(Torrent::query()->sum('size')),
|
||||
];
|
||||
|
||||
$total_uploaded_byte = User::query()->sum('uploaded');
|
||||
$total_downloaded_byte = User::query()->sum('downloaded');
|
||||
$total_byte = $total_uploaded_byte + $total_downloaded_byte;
|
||||
|
||||
$name = 'total_uploaded';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => mksize($total_uploaded_byte),
|
||||
];
|
||||
$name = 'total_downloaded';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => mksize($total_downloaded_byte),
|
||||
];
|
||||
$name = 'total_uploaded_downloaded';
|
||||
$result[$name] = [
|
||||
'name' => $name,
|
||||
'text' => nexus_trans("dashboard.torrent.$name"),
|
||||
'value' => mksize($total_byte),
|
||||
];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function latestUser()
|
||||
{
|
||||
return User::query()->orderBy('id', 'desc')->limit(10)->select(User::$commonFields)->get();
|
||||
}
|
||||
|
||||
public function latestTorrent()
|
||||
{
|
||||
return Torrent::query()->with(['user'])->orderBy('id', 'desc')->limit(10)->get();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -7,20 +7,6 @@ use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class ToolRepository extends BaseRepository
|
||||
{
|
||||
public function getSystemInfo(): array
|
||||
{
|
||||
$systemInfo = [
|
||||
'nexus_version' => VERSION_NUMBER,
|
||||
'nexus_release_date' => RELEASE_DATE,
|
||||
'laravel_version' => \Illuminate\Foundation\Application::VERSION,
|
||||
'php_version' => PHP_VERSION,
|
||||
'mysql_version' => DB::select(DB::raw('select version() as info'))[0]->info,
|
||||
'os' => PHP_OS,
|
||||
'server_software' => $_SERVER['SERVER_SOFTWARE'],
|
||||
];
|
||||
|
||||
return $systemInfo;
|
||||
}
|
||||
|
||||
public function backupWeb(): array
|
||||
{
|
||||
|
||||
55
resources/lang/en/dashboard.php
Normal file
55
resources/lang/en/dashboard.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'user' => [
|
||||
'page_title' => 'User statistics',
|
||||
'total' => 'Total',
|
||||
'unconfirmed' => 'Unconfirmed',
|
||||
'visit_last_one_day' => 'PV of last 1 day',
|
||||
'visit_last_one_week' => 'PV of last 7 days',
|
||||
'visit_last_30_days' => 'PV of last 30 days',
|
||||
'vip' => 'Vip',
|
||||
'donated' => 'Donated',
|
||||
'warned' => 'Warned',
|
||||
'disabled' => 'Disabled',
|
||||
'gender_male' => 'Male',
|
||||
'gender_female' => 'Female',
|
||||
'gender_N/A' => 'Gender unknown',
|
||||
],
|
||||
'torrent' => [
|
||||
'page_title' => 'Torrent statistics',
|
||||
'total' => 'Total',
|
||||
'deaded' => 'Deaded',
|
||||
'seeders' => 'Seeders',
|
||||
'leechers' => 'Leechers',
|
||||
'seeders_leechers' => 'Peers',
|
||||
'seeders_leechers_ratio' => 'Seeders / Leechers',
|
||||
'active_web_users' => 'Active web users',
|
||||
'active_tracker_users' => 'Active Tracker users',
|
||||
'total_torrent_size' => 'Torrent total size',
|
||||
'total_uploaded' => 'Uploaded size',
|
||||
'total_downloaded' => 'Downloaded size',
|
||||
'total_uploaded_downloaded' => 'Uploaded + downloaded size',
|
||||
],
|
||||
'user_class' => [
|
||||
'page_title' => 'User class',
|
||||
],
|
||||
'system_info' => [
|
||||
'page_title' => 'System info',
|
||||
'nexus_version' => 'NexusPHP version',
|
||||
'nexus_release_date' => 'NexusPHP release date',
|
||||
'laravel_version' => 'Laravel version',
|
||||
'php_version' => 'PHP version',
|
||||
'mysql_version' => 'Mysqsl version',
|
||||
'os' => 'OS',
|
||||
'server_software' => 'Web software',
|
||||
'load_average' => 'Server load average',
|
||||
],
|
||||
'latest_user' => [
|
||||
'page_title' => 'User latest',
|
||||
],
|
||||
'latest_torrent' => [
|
||||
'page_title' => 'Torrent latest',
|
||||
]
|
||||
|
||||
];
|
||||
55
resources/lang/zh_CN/dashboard.php
Normal file
55
resources/lang/zh_CN/dashboard.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'user' => [
|
||||
'page_title' => '用户统计',
|
||||
'total' => '总数',
|
||||
'unconfirmed' => '未确认',
|
||||
'visit_last_one_day' => '最近 1 天访问',
|
||||
'visit_last_one_week' => '最近 1 周访问',
|
||||
'visit_last_30_days' => '最近 30 天访问',
|
||||
'vip' => 'Vip',
|
||||
'donated' => '捐赠',
|
||||
'warned' => '警告',
|
||||
'disabled' => '禁用',
|
||||
'gender_male' => '男生',
|
||||
'gender_female' => '女生',
|
||||
'gender_N/A' => '性别未知',
|
||||
],
|
||||
'torrent' => [
|
||||
'page_title' => '种子统计',
|
||||
'total' => '总数',
|
||||
'deaded' => '死种',
|
||||
'seeders' => '做种数',
|
||||
'leechers' => '下载数',
|
||||
'seeders_leechers' => '同伴',
|
||||
'seeders_leechers_ratio' => '做种数 / 下载数比例',
|
||||
'active_web_users' => '当前访问用户数',
|
||||
'active_tracker_users' => '当前 Tracker 用户数',
|
||||
'total_torrent_size' => '种子总大小',
|
||||
'total_uploaded' => '总上传量',
|
||||
'total_downloaded' => '总下载量',
|
||||
'total_uploaded_downloaded' => '总数据量',
|
||||
],
|
||||
'user_class' => [
|
||||
'page_title' => '用户等级分布',
|
||||
],
|
||||
'system_info' => [
|
||||
'page_title' => '系统信息',
|
||||
'nexus_version' => 'NexusPHP 版本',
|
||||
'nexus_release_date' => 'NexusPHP 发布日期',
|
||||
'laravel_version' => 'Laravel 版本',
|
||||
'php_version' => 'PHP 版本',
|
||||
'mysql_version' => 'Mysqsl 版本',
|
||||
'os' => '操作系统',
|
||||
'server_software' => 'Web 软件',
|
||||
'load_average' => '服务器平均负载',
|
||||
],
|
||||
'latest_user' => [
|
||||
'page_title' => '最新用户',
|
||||
],
|
||||
'latest_torrent' => [
|
||||
'page_title' => '最新种子',
|
||||
]
|
||||
|
||||
];
|
||||
55
resources/lang/zh_TW/dashboard.php
Normal file
55
resources/lang/zh_TW/dashboard.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'user' => [
|
||||
'page_title' => '用戶統計',
|
||||
'total' => '總數',
|
||||
'unconfirmed' => '未確認',
|
||||
'visit_last_one_day' => '最近 1 天訪問',
|
||||
'visit_last_one_week' => '最近 1 周訪問',
|
||||
'visit_last_30_days' => '最近 30 天訪問',
|
||||
'vip' => 'Vip',
|
||||
'donated' => '捐贈',
|
||||
'warned' => '警告',
|
||||
'disabled' => '禁用',
|
||||
'gender_male' => '男生',
|
||||
'gender_female' => '女生',
|
||||
'gender_N/A' => '性別未知',
|
||||
],
|
||||
'torrent' => [
|
||||
'page_title' => '種子統計',
|
||||
'total' => '總數',
|
||||
'deaded' => '死種',
|
||||
'seeders' => '做種數',
|
||||
'leechers' => '下載數',
|
||||
'seeders_leechers' => '同伴',
|
||||
'seeders_leechers_ratio' => '做種數 / 下載數比例',
|
||||
'active_web_users' => '當前訪問用戶數',
|
||||
'active_tracker_users' => '當前 Tracker 用戶數',
|
||||
'total_torrent_size' => '種子總大小',
|
||||
'total_uploaded' => '總上傳量',
|
||||
'total_downloaded' => '總下載量',
|
||||
'total_uploaded_downloaded' => '總數據量',
|
||||
],
|
||||
'user_class' => [
|
||||
'page_title' => '用戶等級分布',
|
||||
],
|
||||
'system_info' => [
|
||||
'page_title' => '系統信息',
|
||||
'nexus_version' => 'NexusPHP 版本',
|
||||
'nexus_release_date' => 'NexusPHP 發布日期',
|
||||
'laravel_version' => 'Laravel 版本',
|
||||
'php_version' => 'PHP 版本',
|
||||
'mysql_version' => 'Mysqsl 版本',
|
||||
'os' => '操作系統',
|
||||
'server_software' => 'Web 軟件',
|
||||
'load_average' => '服務器平均負載',
|
||||
],
|
||||
'latest_user' => [
|
||||
'page_title' => '最新用戶',
|
||||
],
|
||||
'latest_torrent' => [
|
||||
'page_title' => '最新種子',
|
||||
]
|
||||
|
||||
];
|
||||
@@ -50,7 +50,10 @@ Route::group(['middleware' => ['auth:sanctum', 'permission', 'locale']], functio
|
||||
|
||||
Route::resource('exam-users', \App\Http\Controllers\ExamUserController::class);
|
||||
|
||||
Route::get('system-info', [\App\Http\Controllers\ToolController::class, 'systemInfo']);
|
||||
Route::get('dashboard/system-info', [\App\Http\Controllers\DashboardController::class, 'systemInfo']);
|
||||
Route::get('dashboard/stat-data', [\App\Http\Controllers\DashboardController::class, 'statData']);
|
||||
Route::get('dashboard/latest-user', [\App\Http\Controllers\DashboardController::class, 'latestUser']);
|
||||
Route::get('dashboard/latest-torrent', [\App\Http\Controllers\DashboardController::class, 'latestTorrent']);
|
||||
|
||||
Route::resource('settings', \App\Http\Controllers\SettingController::class);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user