Browse Source

菜单建设/部门管理

ren
renguanyu111 4 years ago
parent
commit
7d0b7bb03b
  1. 6
      server/log/server_info.log
  2. 2
      web/.env.development
  3. 14
      web/babel.config.js
  4. 28
      web/index.html
  5. 250
      web/package-lock.json
  6. 3
      web/package.json
  7. 5
      web/src/main.js
  8. 356
      web/src/view/educate/examManage/examManage.vue
  9. 2
      web/src/view/educate/topic/topic.vue
  10. 542
      web/src/view/group/department/index.vue
  11. 17
      web/src/view/group/index.vue
  12. 0
      web/src/view/group/post/index.vue
  13. 2
      web/vite.config.js
  14. 5
      web/vue.config.js
  15. 55
      web/yarn.lock

6
server/log/server_info.log

@ -24,3 +24,9 @@
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 08:00:11.510 info l:/任官钰/代码/gin-vue-admin-master/gin-vue-admin-master/server/initialize/router.go:36 register swagger handler
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 08:00:11.510 info l:/任官钰/代码/gin-vue-admin-master/gin-vue-admin-master/server/initialize/router.go:79 router register success
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 08:00:11.516 info l:/任官钰/代码/gin-vue-admin-master/gin-vue-admin-master/server/core/server.go:37 server run success on {"address": ":8888"}
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 09:24:45.871 info L:/任官钰/GitHub/SourceCode/gin-vue-admin/server/initialize/gorm.go:62 register table success
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 09:24:45.898 info L:/任官钰/GitHub/SourceCode/gin-vue-admin/server/initialize/router.go:31 use middleware logger
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 09:24:45.898 info L:/任官钰/GitHub/SourceCode/gin-vue-admin/server/initialize/router.go:34 use middleware cors
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 09:24:45.899 info L:/任官钰/GitHub/SourceCode/gin-vue-admin/server/initialize/router.go:36 register swagger handler
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 09:24:45.907 info L:/任官钰/GitHub/SourceCode/gin-vue-admin/server/initialize/router.go:79 router register success
[github.com/flipped-aurora/gin-vue-admin/server]2021/11/01 - 09:24:45.909 info L:/任官钰/GitHub/SourceCode/gin-vue-admin/server/core/server.go:37 server run success on {"address": ":8888"}

2
web/.env.development

@ -3,4 +3,4 @@ ENV = 'development'
VITE_CLI_PORT = 8080
VITE_SERVER_PORT = 8888
VITE_BASE_API = /api
VITE_BASE_PATH = http://127.0.0.1
VITE_BASE_PATH = http://gin.admin.net

14
web/babel.config.js

@ -1,7 +1,19 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
'@vue/cli-plugin-babel/preset',
"@vue/app",{
polyfills:[
"es6.promise",
"es6.symbol",
"es6.array.iterator",
"es6.object.assign"
],
useBuiltIns:"entry"
}
],
'plugins': [
]

28
web/index.html

@ -7,9 +7,37 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="favicon.ico">
<title></title>
<script type="text/javascript">
(function(window) {
var theUA = window.navigator.userAgent.toLowerCase();
if ((theUA.match(/msie\s\d+/) && theUA.match(/msie\s\d+/)[0]) || (theUA.match(/trident\s?\/\d+/) && theUA.match(/trident\s?\/\d+/)[0])) {
//var ieVersion = theUA.match(/msie\/\s\d+/)[0].match(/\d+/)[0] || theUA.match(/trident\s?\/\d+/)[0];
var ieVersion =theUA.match(/trident\s?\/\d+/)[0];
var isshow = ieVersion.match(/\d/)[0];
if (isshow < 11) {
var str = "你的浏览器版本太低,请升级浏览器 :(";
var str2 = "推荐使用:<a href='https://cdn.tongbuxing.net/1MHyJx/SetupChrome.exe' target='_blank' style='color:blue;'>谷歌浏览器</a>,"
+ "<a href='https://down.360safe.com/cse/360cse_13.0.2256.0.exe' target='_blank' style='color:blue;'>360极速版</a>,"
+ "其他双核极速模式";
document.writeln("<pre style='text-align:center;color:#fff;background-color:#0cc; height:100%;border:0;position:fixed;top:0;left:0;width:100%;z-index:1234'>" +
"<h2 style='padding-top:200px;margin:0'><strong>" + str + "<br/></strong></h2><h2>" +
str2 + "</h2><h2 style='margin:0'><strong>如果你的使用的是双核浏览器,请切换到极速模式访问<br/></strong></h2></pre>");
document.execCommand("Stop");
};
}
})(window);
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="./src/main.js"></script>
</body>
</html>

250
web/package-lock.json

@ -8,6 +8,7 @@
"name": "gin-vue-admin",
"version": "2.3.5",
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@element-plus/icons": "0.0.11",
"axios": "^0.19.2",
"core-js": "^3.6.5",
@ -39,7 +40,9 @@
"@vue/compiler-sfc": "^3.1.5",
"babel-eslint": "^10.1.0",
"babel-plugin-import": "^1.13.3",
"babel-polyfill": "^6.26.0",
"dotenv": "^10.0.0",
"es6-promise": "^4.2.8",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^7.0.0",
"sass": "^1.26.5",
@ -1486,6 +1489,23 @@
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/polyfill": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
"integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
"deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.",
"dependencies": {
"core-js": "^2.6.5",
"regenerator-runtime": "^0.13.4"
}
},
"node_modules/@babel/polyfill/node_modules/core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
"hasInstallScript": true
},
"node_modules/@babel/preset-env": {
"version": "7.15.0",
"resolved": "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.15.0.tgz?cache=0&sync_timestamp=1628117565189&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.15.0.tgz",
@ -3132,7 +3152,7 @@
"version": "3.1.2",
"resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz",
"integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
"dev": true,
"devOptional": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -3320,7 +3340,7 @@
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
"integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
"dev": true
"devOptional": true
},
"node_modules/async-limiter": {
"version": "1.0.1",
@ -3518,6 +3538,55 @@
"@babel/core": "^7.0.0-0"
}
},
"node_modules/babel-polyfill": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
"integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"dev": true,
"dependencies": {
"babel-runtime": "^6.26.0",
"core-js": "^2.5.0",
"regenerator-runtime": "^0.10.5"
}
},
"node_modules/babel-polyfill/node_modules/core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
"dev": true,
"hasInstallScript": true
},
"node_modules/babel-polyfill/node_modules/regenerator-runtime": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
"dev": true
},
"node_modules/babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"dependencies": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"node_modules/babel-runtime/node_modules/core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
"dev": true,
"hasInstallScript": true
},
"node_modules/babel-runtime/node_modules/regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
@ -3647,7 +3716,7 @@
"version": "2.2.0",
"resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz",
"integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
"dev": true,
"devOptional": true,
"engines": {
"node": ">=8"
}
@ -3656,7 +3725,6 @@
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
"integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
"dev": true,
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
@ -4155,7 +4223,7 @@
"version": "3.5.2",
"resolved": "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz",
"integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
"dev": true,
"devOptional": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@ -4176,7 +4244,7 @@
"version": "3.0.2",
"resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
"integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
"dev": true,
"devOptional": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@ -4188,7 +4256,7 @@
"version": "7.0.1",
"resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
"integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
"dev": true,
"devOptional": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@ -4200,7 +4268,7 @@
"version": "7.0.0",
"resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
"integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
"dev": true,
"devOptional": true,
"engines": {
"node": ">=0.12.0"
}
@ -4209,7 +4277,7 @@
"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,
"devOptional": true,
"dependencies": {
"is-number": "^7.0.0"
},
@ -6215,6 +6283,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
"dev": true
},
"node_modules/esbuild": {
"version": "0.12.25",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz",
@ -7000,7 +7074,6 @@
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
"integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
"dev": true,
"optional": true
},
"node_modules/filesize": {
@ -7376,7 +7449,7 @@
"version": "5.1.2",
"resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760200164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
"integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
"dev": true,
"devOptional": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@ -8476,7 +8549,7 @@
"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,
"devOptional": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@ -8646,7 +8719,7 @@
"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,
"devOptional": true,
"engines": {
"node": ">=0.10.0"
}
@ -8664,7 +8737,7 @@
"version": "4.0.1",
"resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
"integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
"dev": true,
"devOptional": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@ -9711,7 +9784,6 @@
"version": "2.15.0",
"resolved": "https://registry.nlark.com/nan/download/nan-2.15.0.tgz",
"integrity": "sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4=",
"dev": true,
"optional": true
},
"node_modules/nanoid": {
@ -9870,7 +9942,7 @@
"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,
"devOptional": true,
"engines": {
"node": ">=0.10.0"
}
@ -10437,7 +10509,7 @@
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
"dev": true
"devOptional": true
},
"node_modules/path-exists": {
"version": "4.0.0",
@ -10542,7 +10614,7 @@
"version": "2.3.0",
"resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz",
"integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
"dev": true,
"devOptional": true,
"engines": {
"node": ">=8.6"
},
@ -11710,7 +11782,7 @@
"version": "3.6.0",
"resolved": "https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz",
"integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
"dev": true,
"devOptional": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@ -11739,8 +11811,7 @@
"node_modules/regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
"integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=",
"dev": true
"integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I="
},
"node_modules/regenerator-transform": {
"version": "0.14.5",
@ -11843,7 +11914,7 @@
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
"devOptional": true
},
"node_modules/renderkid": {
"version": "2.0.7",
@ -13967,7 +14038,7 @@
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1604770074023&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz",
"integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
"dev": true,
"devOptional": true,
"engines": {
"node": ">=4",
"yarn": "*"
@ -14507,7 +14578,6 @@
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989085906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz",
"integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
"dev": true,
"optional": true,
"dependencies": {
"chokidar": "^2.1.8"
@ -14517,7 +14587,6 @@
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz",
"integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
"dev": true,
"optional": true,
"dependencies": {
"micromatch": "^3.1.4",
@ -14528,7 +14597,6 @@
"version": "2.1.1",
"resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"optional": true,
"dependencies": {
"remove-trailing-separator": "^1.0.1"
@ -14541,7 +14609,6 @@
"version": "1.13.1",
"resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz",
"integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
"dev": true,
"optional": true,
"engines": {
"node": ">=0.10.0"
@ -14552,7 +14619,6 @@
"resolved": "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz",
"integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
"deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.",
"dev": true,
"optional": true,
"dependencies": {
"anymatch": "^2.0.0",
@ -14576,7 +14642,6 @@
"resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1612536546156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz",
"integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
"deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@ -14594,7 +14659,6 @@
"version": "3.1.0",
"resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1626760200164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"optional": true,
"dependencies": {
"is-glob": "^3.1.0",
@ -14605,7 +14669,6 @@
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"optional": true,
"dependencies": {
"is-extglob": "^2.1.0"
@ -14618,7 +14681,6 @@
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"optional": true,
"dependencies": {
"binary-extensions": "^1.0.0"
@ -14631,7 +14693,6 @@
"version": "2.2.1",
"resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz",
"integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
"dev": true,
"optional": true,
"dependencies": {
"graceful-fs": "^4.1.11",
@ -16544,6 +16605,22 @@
"@babel/helper-plugin-utils": "^7.14.5"
}
},
"@babel/polyfill": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
"integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
"requires": {
"core-js": "^2.6.5",
"regenerator-runtime": "^0.13.4"
},
"dependencies": {
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
}
}
},
"@babel/preset-env": {
"version": "7.15.0",
"resolved": "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.15.0.tgz?cache=0&sync_timestamp=1628117565189&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.15.0.tgz",
@ -17915,7 +17992,7 @@
"version": "3.1.2",
"resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz",
"integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
"dev": true,
"devOptional": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -18063,7 +18140,7 @@
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
"integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
"dev": true
"devOptional": true
},
"async-limiter": {
"version": "1.0.1",
@ -18220,6 +18297,55 @@
"@babel/helper-define-polyfill-provider": "^0.2.2"
}
},
"babel-polyfill": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
"integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0",
"core-js": "^2.5.0",
"regenerator-runtime": "^0.10.5"
},
"dependencies": {
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"dev": true
},
"regenerator-runtime": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
"dev": true
}
}
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
},
"dependencies": {
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"dev": true
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
}
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
@ -18316,13 +18442,12 @@
"version": "2.2.0",
"resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz",
"integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
"dev": true
"devOptional": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
"integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
"dev": true,
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
@ -18750,7 +18875,7 @@
"version": "3.5.2",
"resolved": "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz",
"integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
"dev": true,
"devOptional": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@ -18766,7 +18891,7 @@
"version": "3.0.2",
"resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
"integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
"dev": true,
"devOptional": true,
"requires": {
"fill-range": "^7.0.1"
}
@ -18775,7 +18900,7 @@
"version": "7.0.1",
"resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
"integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
"dev": true,
"devOptional": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@ -18784,13 +18909,13 @@
"version": "7.0.0",
"resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
"integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
"dev": true
"devOptional": true
},
"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,
"devOptional": true,
"requires": {
"is-number": "^7.0.0"
}
@ -20409,6 +20534,12 @@
"is-symbol": "^1.0.2"
}
},
"es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
"dev": true
},
"esbuild": {
"version": "0.12.25",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz",
@ -21029,7 +21160,6 @@
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
"integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
"dev": true,
"optional": true
},
"filesize": {
@ -21321,7 +21451,7 @@
"version": "5.1.2",
"resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760200164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
"integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
"dev": true,
"devOptional": true,
"requires": {
"is-glob": "^4.0.1"
}
@ -22162,7 +22292,7 @@
"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,
"devOptional": true,
"requires": {
"binary-extensions": "^2.0.0"
}
@ -22282,7 +22412,7 @@
"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
"devOptional": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
@ -22294,7 +22424,7 @@
"version": "4.0.1",
"resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
"integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
"dev": true,
"devOptional": true,
"requires": {
"is-extglob": "^2.1.1"
}
@ -23137,7 +23267,6 @@
"version": "2.15.0",
"resolved": "https://registry.nlark.com/nan/download/nan-2.15.0.tgz",
"integrity": "sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4=",
"dev": true,
"optional": true
},
"nanoid": {
@ -23279,7 +23408,7 @@
"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
"devOptional": true
},
"normalize-range": {
"version": "0.1.2",
@ -23734,7 +23863,7 @@
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
"dev": true
"devOptional": true
},
"path-exists": {
"version": "4.0.0",
@ -23810,7 +23939,7 @@
"version": "2.3.0",
"resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz",
"integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
"dev": true
"devOptional": true
},
"pify": {
"version": "4.0.1",
@ -24791,7 +24920,7 @@
"version": "3.6.0",
"resolved": "https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz",
"integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
"dev": true,
"devOptional": true,
"requires": {
"picomatch": "^2.2.1"
}
@ -24814,8 +24943,7 @@
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
"integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=",
"dev": true
"integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I="
},
"regenerator-transform": {
"version": "0.14.5",
@ -24896,7 +25024,7 @@
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
"devOptional": true
},
"renderkid": {
"version": "2.0.7",
@ -26608,7 +26736,7 @@
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1604770074023&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz",
"integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
"dev": true
"devOptional": true
},
"upper-case": {
"version": "1.1.3",
@ -27030,7 +27158,6 @@
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989085906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz",
"integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
"dev": true,
"optional": true,
"requires": {
"chokidar": "^2.1.8"
@ -27040,7 +27167,6 @@
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz",
"integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
"dev": true,
"optional": true,
"requires": {
"micromatch": "^3.1.4",
@ -27051,7 +27177,6 @@
"version": "2.1.1",
"resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"optional": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
@ -27063,14 +27188,12 @@
"version": "1.13.1",
"resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz",
"integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
"dev": true,
"optional": true
},
"chokidar": {
"version": "2.1.8",
"resolved": "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz",
"integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
"dev": true,
"optional": true,
"requires": {
"anymatch": "^2.0.0",
@ -27091,7 +27214,6 @@
"version": "1.2.13",
"resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1612536546156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz",
"integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
@ -27102,7 +27224,6 @@
"version": "3.1.0",
"resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1626760200164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"optional": true,
"requires": {
"is-glob": "^3.1.0",
@ -27113,7 +27234,6 @@
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"optional": true,
"requires": {
"is-extglob": "^2.1.0"
@ -27125,7 +27245,6 @@
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"optional": true,
"requires": {
"binary-extensions": "^1.0.0"
@ -27135,7 +27254,6 @@
"version": "2.2.1",
"resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz",
"integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.11",

3
web/package.json

@ -8,6 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@element-plus/icons": "0.0.11",
"axios": "^0.19.2",
"core-js": "^3.6.5",
@ -39,7 +40,9 @@
"@vue/compiler-sfc": "^3.1.5",
"babel-eslint": "^10.1.0",
"babel-plugin-import": "^1.13.3",
"babel-polyfill": "^6.26.0",
"dotenv": "^10.0.0",
"es6-promise": "^4.2.8",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^7.0.0",
"sass": "^1.26.5",

5
web/src/main.js

@ -1,4 +1,7 @@
import 'babel-polyfill'
import promise from 'es6-promise'
import { createApp } from 'vue'
import 'element-plus/dist/index.css'
import './style/element_visiable.scss'
import ElementPlus from 'element-plus'
@ -14,6 +17,8 @@ import '@/permission'
import { store } from '@/store/index'
import App from './App.vue'
promise.polyfill()
const app = createApp(App)
app.config.productionTip = false
app.use(run)

356
web/src/view/educate/examManage/examManage.vue

@ -1,16 +1,366 @@
<template>
<!-- 考试管理页面 -->
<div>
<div>考试管理</div>
<div class="gva-search-box">
<el-form ref="searchForm" :inline="true" :model="searchInfo">
<el-form-item label="工段">
<el-select v-model="searchInfo.workSection" clearable placeholder="请选择">
<el-option value="1">a工段</el-option>
<el-option value="2">b工段</el-option>
</el-select>
</el-form-item>
<el-form-item label="职务">
<el-select v-model="searchInfo.method" clearable placeholder="职务">
<el-option value="1">a职务</el-option>
<el-option value="2">b职务</el-option>
</el-select>
</el-form-item>
<el-form-item label="题目">
<el-input v-model="searchInfo.path" placeholder="请输入题目" />
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="gva-table-box">
<div class="gva-btn-list">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="openDialog('addApi')">新增</el-button>
<el-button size="mini" type="primary" icon="el-icon-upload" @click="openDialog('addApi')">导入题库数据</el-button>
<el-popover v-model:visible="deleteVisible" placement="top" width="160">
<p>确定要删除吗</p>
<div style="text-align: right; margin-top: 8px;">
<el-button size="mini" type="text" @click="deleteVisible = false">取消</el-button>
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
</div>
<template #reference>
<el-button icon="el-icon-delete" size="mini" :disabled="!apis.length" style="margin-left: 10px;">删除</el-button>
</template>
</el-popover>
</div>
<el-table :data="tableData" @sort-change="sortChange" @selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="55"
/>
<el-table-column align="left" label="考试名称" prop="ID"/>
<el-table-column align="left" label="归属" prop="path"/>
<el-table-column align="left" label="考试范围" prop="apiGroup"/>
<el-table-column align="left" label="考试时长" prop="description"/>
<el-table-column align="left" label="考题总数" prop="method">
<template #default="scope">
<div>
{{ scope.row.method }} / {{ methodFiletr(scope.row.method) }}
</div>
</template>
</el-table-column>
<el-table-column align="left" label="开始时间" prop="method"/>
<el-table-column align="left" label="结束时间" prop="method"/>
<el-table-column align="left" label="发起人" prop="method"/>
<el-table-column align="left" label="创建时间" prop="method"/>
<el-table-column align="left" label="状态" prop="method"/>
<el-table-column align="left" label="考试人数" prop="method"/>
<el-table-column align="left" fixed="right" label="操作" width="200">
<template #default="scope">
<el-button type="danger" @click="editApi(scope.row)">结束考试</el-button>
<!-- <el-button
icon="el-icon-edit"
size="small"
type="text"
@click="editApi(scope.row)"
>编辑</el-button>
<el-button
icon="el-icon-delete"
size="small"
type="text"
@click="deleteApi(scope.row)"
>删除</el-button> -->
</template>
</el-table-column>
</el-table>
<div class="gva-pagination">
<el-pagination
:current-page="page"
:page-size="pageSize"
:page-sizes="[10, 30, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
/>
</div>
</div>
<el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="dialogTitle">
<warning-bar title="新增API,需要在角色管理内篇日志权限才可使用" />
<el-form ref="apiForm" :model="form" :rules="rules" label-width="80px">
<el-form-item label="路径" prop="path">
<el-input v-model="form.path" autocomplete="off" />
</el-form-item>
<el-form-item label="请求" prop="method">
<el-select v-model="form.method" placeholder="请选择" style="width:100%">
<el-option
v-for="item in methodOptions"
:key="item.value"
:label="`${item.label}(${item.value})`"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="api分组" prop="apiGroup">
<el-input v-model="form.apiGroup" autocomplete="off" />
</el-form-item>
<el-form-item label="api简介" prop="description">
<el-input v-model="form.description" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button size="small" @click="closeDialog"> </el-button>
<el-button size="small" type="primary" @click="enterDialog"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
// mixins getTableData this.searchInfo
import {
getApiById,
getApiList,
createApi,
updateApi,
deleteApi,
deleteApisByIds
} from '@/api/api'
import infoList from '@/mixins/infoList'
import { toSQLLine } from '@/utils/stringFun'
import warningBar from '@/components/warningBar/warningBar.vue'
const methodOptions = [
{
value: 'POST',
label: '创建',
type: 'success'
},
{
value: 'GET',
label: '查看',
type: ''
},
{
value: 'PUT',
label: '更新',
type: 'warning'
},
{
value: 'DELETE',
label: '删除',
type: 'danger'
}
]
export default {
name: 'Api',
components: {
warningBar
},
mixins: [infoList],
data() {
return {
deleteVisible: false,
listApi: getApiList,
dialogFormVisible: false,
dialogTitle: '新增Api',
apis: [],
form: {
path: '',
apiGroup: '',
method: '',
description: ''
},
methodOptions: methodOptions,
type: '',
rules: {
path: [{ required: true, message: '请输入api路径', trigger: 'blur' }],
apiGroup: [
{ required: true, message: '请输入组名称', trigger: 'blur' }
],
method: [
{ required: true, message: '请选择请求方式', trigger: 'blur' }
],
description: [
{ required: true, message: '请输入api介绍', trigger: 'blur' }
]
}
}
},
created() {
this.getTableData()
},
methods: {
methodFiletr(value) {
const target = methodOptions.filter(item => item.value === value)[0]
return target && `${target.label}`
},
tagTypeFiletr(value) {
const target = methodOptions.filter(item => item.value === value)[0]
return target && `${target.type}`
},
// api
handleSelectionChange(val) {
this.apis = val
},
async onDelete() {
const ids = this.apis.forEach(item => item.ID)
const res = await deleteApisByIds({ ids })
if (res.code === 0) {
this.$message({
type: 'success',
message: res.msg
})
if (this.tableData.length === ids.length && this.page > 1) {
this.page--
}
this.deleteVisible = false
this.getTableData()
}
},
//
sortChange({ prop, order }) {
if (prop) {
this.searchInfo.orderKey = toSQLLine(prop)
this.searchInfo.desc = order === 'descending'
}
this.getTableData()
},
onReset() {
this.searchInfo = {}
},
//
onSubmit() {
this.page = 1
this.pageSize = 10
this.getTableData()
},
initForm() {
this.$refs.apiForm.resetFields()
this.form = {
path: '',
apiGroup: '',
method: '',
description: ''
}
},
closeDialog() {
this.initForm()
this.dialogFormVisible = false
},
openDialog(type) {
switch (type) {
case 'addApi':
this.dialogTitle = '新增Api'
break
case 'edit':
this.dialogTitle = '编辑Api'
break
default:
break
}
this.type = type
this.dialogFormVisible = true
},
async editApi(row) {
const res = await getApiById({ id: row.ID })
this.form = res.data.api
this.openDialog('edit')
},
async deleteApi(row) {
this.$confirm('此操作将永久删除所有角色下该api, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async() => {
const res = await deleteApi(row)
if (res.code === 0) {
this.$message({
type: 'success',
message: '删除成功!'
})
if (this.tableData.length === 1 && this.page > 1) {
this.page--
}
this.getTableData()
}
})
},
async enterDialog() {
this.$refs.apiForm.validate(async valid => {
if (valid) {
switch (this.type) {
case 'addApi':
{
const res = await createApi(this.form)
if (res.code === 0) {
this.$message({
type: 'success',
message: '添加成功',
showClose: true
})
}
this.getTableData()
this.closeDialog()
}
break
case 'edit':
{
const res = await updateApi(this.form)
if (res.code === 0) {
this.$message({
type: 'success',
message: '编辑成功',
showClose: true
})
}
this.getTableData()
this.closeDialog()
}
break
default:
// eslint-disable-next-line no-lone-blocks
{
this.$message({
type: 'error',
message: '未知操作',
showClose: true
})
}
break
}
}
})
}
}
}
</script>
<style lang="scss" scoped>
<style scoped lang="scss">
.button-box {
padding: 10px 20px;
.el-button {
float: right;
}
}
.warning {
color: #dc143c;
}
</style>

2
web/src/view/educate/topic/topic.vue

@ -9,7 +9,7 @@
<el-option value="2">b工段</el-option>
</el-select>
</el-form-item>
<el-form-item label="工段">
<el-form-item label="职务">
<el-select v-model="searchInfo.method" clearable placeholder="职务">
<el-option value="1">a职务</el-option>
<el-option value="2">b职务</el-option>

542
web/src/view/group/department/index.vue

@ -0,0 +1,542 @@
<template>
<div>
<!-- <div class="gva-search-box">
<el-form ref="searchForm" :inline="true" :model="searchInfo">
<el-form-item label="路径">
<el-input v-model="searchInfo.path" placeholder="路径" />
</el-form-item>
<el-form-item label="描述">
<el-input v-model="searchInfo.description" placeholder="描述" />
</el-form-item>
<el-form-item label="API组">
<el-input v-model="searchInfo.apiGroup" placeholder="api组" />
</el-form-item>
<el-form-item label="请求">
<el-select v-model="searchInfo.method" clearable placeholder="请选择">
<el-option
v-for="item in methodOptions"
:key="item.value"
:label="`${item.label}(${item.value})`"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button>
</el-form-item>
</el-form>
</div> -->
<div class="gva-table-box">
<div class="gva-btn-list">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="openDialog('addApi')">新增</el-button>
<!-- <el-popover v-model:visible="deleteVisible" placement="top" width="160">
<p>确定要删除吗</p>
<div style="text-align: right; margin-top: 8px;">
<el-button size="mini" type="text" @click="deleteVisible = false">取消</el-button>
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
</div>
<template #reference>
<el-button icon="el-icon-delete" size="mini" :disabled="!apis.length" style="margin-left: 10px;">删除</el-button>
</template>
</el-popover> -->
</div>
<el-table
:data="tableData"
accordion
style="width: 100%;margin-bottom: 20px;"
row-key="id"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="name" label="部门名称"></el-table-column>
<el-table-column prop="sort" label="排序" width="180"></el-table-column>
<el-table-column prop="address" label="状态">
<template #default="scope">
<el-tag v-show="scope.row.address==true">正常</el-tag>
<el-tag type="danger" v-show="scope.row.address==false">停用</el-tag>
</template>
</el-table-column>
<el-table-column prop="wxId" label="企业微信ID"></el-table-column>
<el-table-column prop="attributes" label="属性">
<template #default="scope">
<el-tag v-show="scope.row.attributes==1">私有</el-tag>
<el-tag v-show="scope.row.attributes==2">共享</el-tag>
</template>
</el-table-column>
<el-table-column prop="date" label="创建时间"></el-table-column>
<el-table-column align="left" fixed="right" label="操作" width="200">
<template #default="scope">
<el-button
icon="el-icon-edit"
size="small"
type="text"
@click="editApi(scope.row)"
>编辑</el-button>
<el-button
icon="el-icon-delete"
size="small"
type="text"
@click="deleteApi(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- <div class="gva-pagination">
<el-pagination
:current-page="page"
:page-size="pageSize"
:page-sizes="[10, 30, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
/>
</div> -->
</div>
<el-dialog width="20%" v-model="dialogFormVisible" :before-close="closeDialog" :title="dialogTitle">
<el-form ref="apiForm" :model="form" :rules="rules" label-width="100px">
<el-form-item label="上级部门" prop="path">
<el-cascader :options="tableData" :props="{ checkStrictly: true }" clearable></el-cascader>
</el-form-item>
<el-form-item label="部门名称" prop="path">
<el-input style="width: 217px!important" v-model="form.name"/>
</el-form-item>
<el-form-item label="排序" prop="method">
<el-input style="width: 217px!important" v-model="form.sort"/>
</el-form-item>
<el-form-item label="企业微信ID" prop="method">
<el-input style="width: 217px!important" v-model="form.wxId"/>
</el-form-item>
<el-form-item label="属性" prop="method">
<el-radio v-model="radio" label="1">私有</el-radio>
<el-radio v-model="radio" label="2">共享</el-radio>
</el-form-item>
<el-form-item label="状态" prop="apiGroup">
<el-radio v-model="radio" label="1">正常</el-radio>
<el-radio v-model="radio" label="2">停用</el-radio>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button size="small" @click="closeDialog"> </el-button>
<el-button size="small" type="primary" @click="enterDialog"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
// mixins getTableData this.searchInfo
import {
getApiById,
getApiList,
createApi,
updateApi,
deleteApi,
deleteApisByIds
} from '@/api/api'
import infoList from '@/mixins/infoList'
import { toSQLLine } from '@/utils/stringFun'
import warningBar from '@/components/warningBar/warningBar.vue'
const methodOptions = [
{
value: 'POST',
label: '创建',
type: 'success'
},
{
value: 'GET',
label: '查看',
type: ''
},
{
value: 'PUT',
label: '更新',
type: 'warning'
},
{
value: 'DELETE',
label: '删除',
type: 'danger'
}
]
export default {
name: 'Api',
components: {
warningBar
},
mixins: [infoList],
data() {
return {
radio: '1',
tableData: [{
id: 1,
date: '2016-05-02',
name: '荣信集团',
address: true,
wxId:"ceshi",
attributes:1,
sort: 1,
children: [{
id: 90,
date: '2016-05-01',
name: '测试',
address: false,
sort: 90,
}]
}, {
id: 2,
date: '2016-05-02',
name: '恒信生物',
address: true,
sort: 2,
}, {
id: 3,
date: '2016-05-02',
name: '恒信高科',
address: true,
sort: 3,
children: [{
id: 31,
date: '2016-05-01',
name: '甲醇分厂',
address: true,
sort: 31,
children: [{
id: 50,
date: '2016-05-01',
name: '中控室',
address: false,
sort: 50,
}]
}, {
id: 32,
date: '2016-05-01',
name: '化产分厂',
address: true,
sort: 32,
},{
id: 33,
date: '2016-05-01',
name: '动力分厂',
address: true,
sort: 33,
},{
id: 34,
date: '2016-05-01',
name: '机焦车间',
address: true,
sort: 34,
},{
id: 35,
date: '2016-05-01',
name: '质检计量中心',
address: true,
sort: 35,
},{
id: 36,
date: '2016-05-01',
name: '安环部',
address: true,
sort: 36,
},{
id: 37,
date: '2016-05-01',
name: '备煤车间',
address: true,
sort: 37,
},{
id: 38,
date: '2016-05-01',
name: '保卫部',
address: true,
sort: 38,
},{
id: 39,
date: '2016-05-01',
name: '企管部',
address: true,
sort: 39,
},{
id: 40,
date: '2016-05-01',
name: '高管',
address: true,
sort: 40,
},{
id: 41,
date: '2016-05-01',
name: '综合办',
address: true,
sort: 41,
},{
id: 42,
date: '2016-05-01',
name: '人力资源部',
address: true,
sort: 42,
},{
id: 43,
date: '2016-05-01',
name: '财务部',
address: true,
sort: 43,
}
]
}, {
id: 4,
date: '2016-05-03',
name: '恒信置业',
address: true,
sort: 4,
}, {
id: 5,
date: '2016-05-03',
name: '恒信新材料',
address: true,
sort: 5,
}, {
id: 6,
date: '2016-05-03',
name: '集团高管',
address: true,
sort: 6,
}, {
id: 7,
date: '2016-05-03',
name: '集团办公室',
address: true,
sort: 7,
}, {
id: 8,
date: '2016-05-03',
name: '集团财务部',
address: true,
sort: 8,
}, {
id: 9,
date: '2016-05-03',
name: '集团营销部',
address: true,
sort: 9,
}, {
id: 10,
date: '2016-05-03',
name: '恒信荟荃',
address: true,
sort: 10,
}, {
id: 11,
date: '2016-05-03',
name: '酒店管理',
address: true,
sort: 11,
}
],
deleteVisible: false,
// listApi: getApiList,
dialogFormVisible: false,
dialogTitle: '新增Api',
apis: [],
form: {
path: '',
apiGroup: '',
method: '',
description: ''
},
methodOptions: methodOptions,
type: '',
rules: {
path: [{ required: true, message: '请输入api路径', trigger: 'blur' }],
apiGroup: [
{ required: true, message: '请输入组名称', trigger: 'blur' }
],
method: [
{ required: true, message: '请选择请求方式', trigger: 'blur' }
],
description: [
{ required: true, message: '请输入api介绍', trigger: 'blur' }
]
}
}
},
created() {
this.getTableData()
},
methods: {
// input
handleChange(){
},
methodFiletr(value) {
const target = methodOptions.filter(item => item.value === value)[0]
return target && `${target.label}`
},
tagTypeFiletr(value) {
const target = methodOptions.filter(item => item.value === value)[0]
return target && `${target.type}`
},
// api
handleSelectionChange(val) {
this.apis = val
},
async onDelete() {
const ids = this.apis.forEach(item => item.ID)
const res = await deleteApisByIds({ ids })
if (res.code === 0) {
this.$message({
type: 'success',
message: res.msg
})
if (this.tableData.length === ids.length && this.page > 1) {
this.page--
}
this.deleteVisible = false
this.getTableData()
}
},
//
sortChange({ prop, order }) {
if (prop) {
this.searchInfo.orderKey = toSQLLine(prop)
this.searchInfo.desc = order === 'descending'
}
this.getTableData()
},
onReset() {
this.searchInfo = {}
},
//
onSubmit() {
this.page = 1
this.pageSize = 10
this.getTableData()
},
initForm() {
this.$refs.apiForm.resetFields()
this.form = {
path: '',
apiGroup: '',
method: '',
description: ''
}
},
closeDialog() {
this.initForm()
this.dialogFormVisible = false
},
openDialog(type) {
switch (type) {
case 'addApi':
this.dialogTitle = '新增部门'
break
case 'edit':
this.dialogTitle = '编辑'
break
default:
break
}
this.type = type
this.dialogFormVisible = true
},
async editApi(row) {
console.log(row)
const res = await getApiById({ id: row.id })
this.form = res.data.api
this.openDialog('edit')
},
async deleteApi(row) {
this.$confirm('此操作将永久删除所有角色下该api, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async() => {
const res = await deleteApi(row)
if (res.code === 0) {
this.$message({
type: 'success',
message: '删除成功!'
})
if (this.tableData.length === 1 && this.page > 1) {
this.page--
}
this.getTableData()
}
})
},
async enterDialog() {
this.$refs.apiForm.validate(async valid => {
if (valid) {
switch (this.type) {
case 'addApi':
{
const res = await createApi(this.form)
if (res.code === 0) {
this.$message({
type: 'success',
message: '添加成功',
showClose: true
})
}
this.getTableData()
this.closeDialog()
}
break
case 'edit':
{
const res = await updateApi(this.form)
if (res.code === 0) {
this.$message({
type: 'success',
message: '编辑成功',
showClose: true
})
}
this.getTableData()
this.closeDialog()
}
break
default:
// eslint-disable-next-line no-lone-blocks
{
this.$message({
type: 'error',
message: '未知操作',
showClose: true
})
}
break
}
}
})
}
}
}
</script>
<style scoped lang="scss">
.el-input-number__decrease{
top:0!important
}
.el-input__inner{
width: 217px!important
}
.button-box {
padding: 10px 20px;
.el-button {
float: right;
}
}
.warning {
color: #dc143c;
}
</style>

17
web/src/view/group/index.vue

@ -0,0 +1,17 @@
<template>
<div>
<router-view v-slot="{ Component }">
<transition mode="out-in" name="el-fade-in-linear">
<keep-alive :include="$store.getters['router/keepAliveRouters']">
<component :is="Component" />
</keep-alive>
</transition>
</router-view>
</div>
</template>
<script>
export default {
name: 'group'
}
</script>

0
web/src/view/group/post/index.vue

2
web/vite.config.js

@ -6,6 +6,7 @@ import * as dotenv from 'dotenv';
import * as fs from 'fs';
import vuePlugin from '@vitejs/plugin-vue';
// @see https://cn.vitejs.dev/config/
export default ({
command,
mode
@ -56,6 +57,7 @@ export default ({
}
},
},
build: {
target: 'es2015',
minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser

5
web/vue.config.js

@ -0,0 +1,5 @@
module.exports = {
configureWebpack:config => {
config.entry.app = ["@babel/polyfill","./src/main.js"]
}
}

55
web/yarn.lock

@ -781,6 +781,14 @@
"@babel/helper-create-regexp-features-plugin" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/polyfill@^7.12.1":
"integrity" "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g=="
"resolved" "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz"
"version" "7.12.1"
dependencies:
"core-js" "^2.6.5"
"regenerator-runtime" "^0.13.4"
"@babel/preset-env@^7.11.0":
"integrity" "sha1-4hZb8WWUycBeUlF6GUv2GH1v5GQ="
"resolved" "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.15.0.tgz?cache=0&sync_timestamp=1628117565189&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.15.0.tgz"
@ -2075,6 +2083,23 @@
dependencies:
"@babel/helper-define-polyfill-provider" "^0.2.2"
"babel-polyfill@^6.26.0":
"integrity" "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM="
"resolved" "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz"
"version" "6.26.0"
dependencies:
"babel-runtime" "^6.26.0"
"core-js" "^2.5.0"
"regenerator-runtime" "^0.10.5"
"babel-runtime@^6.26.0":
"integrity" "sha1-llxwWGaOgrVde/4E/yM3vItWR/4="
"resolved" "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz"
"version" "6.26.0"
dependencies:
"core-js" "^2.4.0"
"regenerator-runtime" "^0.11.0"
"balanced-match@^1.0.0":
"integrity" "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4="
"resolved" "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz"
@ -2920,6 +2945,21 @@
"browserslist" "^4.16.8"
"semver" "7.0.0"
"core-js@^2.4.0":
"integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
"resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz"
"version" "2.6.12"
"core-js@^2.5.0":
"integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
"resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz"
"version" "2.6.12"
"core-js@^2.6.5":
"integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
"resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz"
"version" "2.6.12"
"core-js@^3.16.0", "core-js@^3.6.5":
"integrity" "sha1-Hy1DxRqe0BTMbINECvFGl65LdfI="
"resolved" "https://registry.nlark.com/core-js/download/core-js-3.16.3.tgz"
@ -3690,6 +3730,11 @@
"is-date-object" "^1.0.1"
"is-symbol" "^1.0.2"
"es6-promise@^4.2.8":
"integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
"resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz"
"version" "4.2.8"
"esbuild@^0.12.17":
"integrity" "sha512-woie0PosbRSoN8gQytrdCzUbS2ByKgO8nD1xCZkEup3D9q92miCze4PqEI9TZDYAuwn6CruEnQpJxgTRWdooAg=="
"resolved" "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz"
@ -7265,6 +7310,16 @@
"resolved" "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.2.tgz?cache=0&sync_timestamp=1604218717329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.2.tgz"
"version" "1.4.2"
"regenerator-runtime@^0.10.5":
"integrity" "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
"resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz"
"version" "0.10.5"
"regenerator-runtime@^0.11.0":
"integrity" "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
"resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"
"version" "0.11.1"
"regenerator-runtime@^0.13.4", "regenerator-runtime@^0.13.9":
"integrity" "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I="
"resolved" "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz"

Loading…
Cancel
Save