264 Commits

Author SHA1 Message Date
alvis
fd2ac75c44 v3.3.0 2021-03-16 12:25:19 +08:00
alvis
839af4f589 http -> https 2021-03-09 12:45:36 +08:00
alvis
9ee89c5287 组件升级 2021-03-08 13:10:16 +08:00
alvis
aac89f3df7 修复选项清空bug 2021-02-23 08:51:04 +08:00
alvis
cb9c5ffcc5 优化 2021-02-07 12:09:37 +08:00
alvis
1dee271b14 优化 2021-02-05 10:00:33 +08:00
alvis
be2b51ad1e bug fix 2021-02-04 10:22:14 +08:00
alvis
5f31d444d4 成绩管理 2021-02-03 09:29:20 +08:00
alvis
626ba788c7 成绩管理 2021-02-01 12:11:37 +08:00
alvis
e8159a17e1 主题切换 2021-02-01 09:58:14 +08:00
alvis
f2d0192277 bug fix 2021-01-28 10:22:59 +08:00
alvis
e97a614832 bug fix 2021-01-27 09:15:37 +08:00
alvis
3be08dfa92 bug fix 2021-01-26 09:14:15 +08:00
alvis
7fc051fdb0 bug fix 2021-01-25 09:52:09 +08:00
mindskip
81adf94725 v3.2.0 2021-01-22 10:36:32 +08:00
mindskip
24d82e4772 v3.1.0 2021-01-22 10:34:11 +08:00
alvis
64a49ad0ee Merge pull request #50 from mindskip/alvis
移除lombok
2021-01-22 09:37:39 +08:00
alvis
4ee3c69a4a 移除lombok 2021-01-22 09:35:34 +08:00
alvis
af0c1b82b1 Merge pull request #49 from mindskip/alvis
优化
2021-01-21 09:33:17 +08:00
alvis
6fbf2cc6c0 优化 2021-01-21 09:31:34 +08:00
alvis
861d5d849b Merge pull request #48 from mindskip/alvis
优化
2021-01-20 08:57:17 +08:00
alvis
b650bae481 优化 2021-01-20 08:56:22 +08:00
alvis
ca12f4a83e Merge pull request #47 from mindskip/alvis
bug fix
2021-01-19 09:35:21 +08:00
alvis
b8bfbbe71d bug fix 2021-01-19 09:34:05 +08:00
alvis
33372e5c1e Merge pull request #46 from mindskip/alvis
优化
2021-01-18 10:07:22 +08:00
alvis
03192bf0fd 优化 2021-01-18 10:06:15 +08:00
思维跳跃科技
193ccc9712 Merge pull request #45 from mindskip/mindskip
文档更新
2021-01-15 12:59:44 +08:00
mindskip
85860fb80a update 2021-01-15 12:58:15 +08:00
mindskip
1c2ee04d8c Merge branch 'master' of github.com:mindskip/xzs-mysql 2021-01-15 11:47:24 +08:00
思维跳跃科技
7c4ee0a1e8 !51 sync
Merge pull request !51 from 思维跳跃科技/other
2021-01-15 11:43:50 +08:00
思维跳跃科技
13f2f54e2a sync 2021-01-15 11:43:37 +08:00
mindskip
ba63ef6d15 sync 2021-01-15 11:39:44 +08:00
alvis
79fe372f80 !49 优化
Merge pull request !49 from alvis/alvis
2021-01-15 09:18:54 +08:00
alvis
5e0b942d3f Merge pull request #44 from mindskip/alvis
优化
2021-01-15 09:17:44 +08:00
alvis
80cba65fc3 优化 2021-01-15 09:16:14 +08:00
alvis
fc066ade71 优化 2021-01-15 09:16:12 +08:00
alvis
c29e36ca1f 优化 2021-01-15 09:13:40 +08:00
alvis
71359d813c 优化 2021-01-15 09:13:33 +08:00
alvis
4153660620 Merge pull request #43 from mindskip/alvis
bug fix
2021-01-14 08:55:15 +08:00
alvis
e484e2142a !48 bug fix
Merge pull request !48 from alvis/alvis
2021-01-14 08:53:20 +08:00
alvis
3b38399d32 bug fix 2021-01-14 08:43:41 +08:00
alvis
10b01a2e23 bug fix 2021-01-14 08:43:28 +08:00
czm
01eafa8efc admin update 2021-01-13 20:51:59 +08:00
czm
eddbccaf23 admin update 2021-01-13 11:38:14 +08:00
alvis
4290a53654 Merge pull request #42 from mindskip/alvis
优化
2021-01-13 09:17:20 +08:00
alvis
eb00e2b31e !47 优化
Merge pull request !47 from alvis/alvis
2021-01-13 09:17:12 +08:00
alvis
4830dad754 优化 2021-01-13 09:16:31 +08:00
alvis
ecbe67e666 优化 2021-01-13 09:16:29 +08:00
czm
4916845156 vue admin update 2021-01-12 11:11:16 +08:00
思维跳跃科技
826351981c Merge pull request #41 from mindskip/mindskip
文档更新
2021-01-12 09:27:35 +08:00
思维跳跃科技
e2382b3cec !46 文档更新
Merge pull request !46 from 思维跳跃科技/mindskip
2021-01-12 09:27:04 +08:00
mindskip
8b608641b0 更新 2021-01-12 09:25:11 +08:00
mindskip
fa1810ebd7 更新 2021-01-12 09:25:05 +08:00
alvis
9d46e6eb2b Merge pull request #40 from mindskip/alvis
优化
2021-01-11 09:19:31 +08:00
alvis
761eb1853f !45 优化
Merge pull request !45 from alvis/alvis
2021-01-11 09:19:12 +08:00
alvis
61adcc0b32 优化 2021-01-11 09:18:12 +08:00
alvis
cf0b0dc077 优化 2021-01-11 09:18:05 +08:00
jimmy
d856c7c821 Merge branch 'master' of https://gitee.com/buddytu/xzs-mysql 2021-01-10 18:02:11 +08:00
jimmy
85b275c143 Update error msg :by jimmy 2021-01-10 18:01:54 +08:00
czm
a0eec79b25 vue admin update 2021-01-10 17:35:11 +08:00
jimmy
0d038bd0fe Add en-locale :by jimmy 2021-01-10 17:10:51 +08:00
jimmy
7010aa5658 Update wording :by jimmy 2021-01-09 23:22:46 +08:00
思维跳跃科技
4b9ea7a1de Merge pull request #39 from mindskip/mindskip
Mindskip
2021-01-08 08:25:21 +08:00
思维跳跃科技
568367d2e7 !44 QQ交流群七:873533715
Merge pull request !44 from 思维跳跃科技/mindskip
2021-01-08 08:25:05 +08:00
mindskip
34f7f2bd62 QQ交流群七:873533715 2021-01-08 08:23:48 +08:00
mindskip
9e337a6692 QQ交流群七:873533715 2021-01-08 08:23:45 +08:00
alvis
2170658930 Merge pull request #38 from mindskip/alvis
优化
2021-01-08 08:22:07 +08:00
alvis
da2451257f !43 优化
Merge pull request !43 from alvis/alvis
2021-01-08 08:21:46 +08:00
alvis
7ca9c45855 优化 2021-01-08 08:21:14 +08:00
alvis
a1cac655ce 优化 2021-01-08 08:20:22 +08:00
alvis
e4af04df97 Merge pull request #37 from mindskip/alvis
优化
2021-01-07 11:04:39 +08:00
alvis
7ff9a9fe50 !42 优化
Merge pull request !42 from alvis/alvis
2021-01-07 11:04:28 +08:00
alvis
01f9ff0f80 优化 2021-01-07 11:03:11 +08:00
alvis
576c47a90d 优化 2021-01-07 11:02:55 +08:00
czm
a5ba2d2ad9 vue admin update 2021-01-06 23:00:13 +08:00
KukuKeng
bb2f60d22b update static file 2021-01-06 22:48:35 +08:00
KukuKeng
7e62b47795 update the static file 2021-01-06 22:29:10 +08:00
jimmy
9821987e2d Merge branch 'master' of https://gitee.com/buddytu/xzs-mysql 2021-01-06 22:24:06 +08:00
jimmy
c6f6ed0cd6 Translate into English :by jimmy 2021-01-06 22:23:32 +08:00
czm
6252f2154c Merge remote-tracking branch 'origin/master' 2021-01-06 22:06:14 +08:00
czm
487e184a9c question random update 2021-01-06 22:05:51 +08:00
KukuKeng
636963cfd1 update the static file 2021-01-06 21:58:54 +08:00
alvis
ea53348511 Merge pull request #36 from mindskip/alvis
优化
2021-01-06 10:40:08 +08:00
alvis
3399a4ff11 !41 优化
Merge pull request !41 from alvis/alvis
2021-01-06 10:39:47 +08:00
alvis
9241c4cae5 优化 2021-01-06 10:39:13 +08:00
alvis
4de5327e87 优化 2021-01-06 10:39:11 +08:00
czm
1a3ecaf9e0 question random update 2021-01-06 00:39:18 +08:00
alvis
9dd5329ef0 Merge pull request #35 from mindskip/alvis
优化
2021-01-05 10:21:42 +08:00
alvis
e3b5a4463f !40 优化
Merge pull request !40 from alvis/alvis
2021-01-05 10:21:35 +08:00
alvis
75ffa05d65 优化 2021-01-05 10:20:25 +08:00
alvis
47488d6bf5 优化 2021-01-05 10:20:19 +08:00
alvis
44ac257c3b Merge pull request #34 from mindskip/alvis
移除lombok
2021-01-04 15:50:15 +08:00
alvis
2543014ae2 !39 移除lombok
Merge pull request !39 from alvis/alvis
2021-01-04 15:49:25 +08:00
alvis
cd8f97aab3 移除lombok 2021-01-04 15:47:33 +08:00
alvis
ac7702ad20 移除lombok 2021-01-04 15:47:08 +08:00
KukuKeng
a5a6b40b5e update student static 2020-12-31 13:14:18 +08:00
alvis
24e59e302a Merge pull request #33 from mindskip/alvis
bug fix
2020-12-31 09:54:16 +08:00
alvis
1220f02793 !38 bug fix
Merge pull request !38 from alvis/alvis
2020-12-31 09:53:15 +08:00
alvis
d635029b00 bug fix 2020-12-31 09:52:35 +08:00
alvis
a4633b809c bug fix 2020-12-31 09:52:23 +08:00
KukuKeng
f9f2d5b956 update student static 2020-12-30 22:34:46 +08:00
KukuKeng
0195b0259c update student static 2020-12-30 18:04:59 +08:00
wushaofeng
09bd9583c2 Finish all-By Ternece 2020-12-30 17:35:13 +08:00
wushaofeng
7f96ccca8b Merge remote-tracking branch 'origin/master' 2020-12-30 17:18:16 +08:00
wushaofeng
cf41c0e75f 完成筛选页面--By Ternece 2020-12-30 17:17:52 +08:00
czm
4200a7c5de admin page update 2020-12-30 17:09:04 +08:00
czm
307523b3be Merge remote-tracking branch 'origin/master' 2020-12-30 16:49:52 +08:00
czm
e3fd87ce21 admin page update 2020-12-30 16:49:37 +08:00
wushaofeng
6ab33b7c64 Merge remote-tracking branch 'origin/master' 2020-12-30 16:39:53 +08:00
wushaofeng
25371bad43 完成试卷生成的方法 final--By Ternece 2020-12-30 16:39:28 +08:00
czm
8be8ca7cb4 admin page and log update 2020-12-30 15:06:48 +08:00
czm
20f6db1dc6 Merge remote-tracking branch 'origin/master' 2020-12-30 14:42:34 +08:00
czm
fa0eb26d9a admin page and log update 2020-12-30 14:41:49 +08:00
alvis
299cdd1770 Merge pull request #32 from mindskip/alvis
bug fix
2020-12-30 09:46:50 +08:00
alvis
9326ca716b !37 bug fix
Merge pull request !37 from alvis/alvis
2020-12-30 09:45:53 +08:00
alvis
6d2ab99fa3 Merge branch 'alvis' of github.com:mindskip/xzs-mysql into alvis 2020-12-30 09:44:06 +08:00
alvis
898159ab3a Merge branch 'alvis' of gitee.com:mindskip/xzs-mysql into alvis 2020-12-30 09:43:24 +08:00
alvis
2ecbee9561 bug fix 2020-12-30 09:41:59 +08:00
alvis
8ad34b997e bug fix 2020-12-30 09:41:50 +08:00
思维跳跃科技
004a3f5668 !36 sync
Merge pull request !36 from 思维跳跃科技/master
2020-12-29 19:04:58 +08:00
思维跳跃科技
095ba9f694 !35 sync
Merge pull request !35 from 思维跳跃科技/master
2020-12-29 19:04:36 +08:00
思维跳跃科技
8f227774ea Merge pull request #31 from mindskip/master
sync
2020-12-29 19:03:05 +08:00
思维跳跃科技
b9efae5595 Merge pull request #30 from mindskip/master
update
2020-12-29 19:00:29 +08:00
mindskip
951f44a105 Merge branch 'master' of github.com:mindskip/xzs-mysql
# Conflicts:
#	README.md
2020-12-29 18:58:06 +08:00
思维跳跃科技
ce22c048de !34 文档更新
Merge pull request !34 from 思维跳跃科技/skill
2020-12-29 18:51:11 +08:00
mindskip
4b87315419 revert 2020-12-29 18:47:33 +08:00
思维跳跃科技
f78f7bf5f4 !33 分支同步
Merge pull request !33 from 思维跳跃科技/master
2020-12-29 18:41:50 +08:00
wushaofeng
21ee444e3f 完成试卷生成的方法 test3--By Ternece 2020-12-29 17:34:50 +08:00
wushaofeng
57c275e242 完成试卷生成的方法 test2--By Ternece 2020-12-29 17:17:23 +08:00
wushaofeng
e4b01330ae 完成试卷生成的方法--By Ternece 2020-12-29 16:42:57 +08:00
mindskip
65d0169aa7 revert 2020-12-29 16:16:39 +08:00
mindskip
60882a1d47 skill 2020-12-29 16:09:36 +08:00
czm
78435af514 admin question and static update 2020-12-29 14:27:24 +08:00
czm
9b30d479fd admin and student static update 2020-12-29 11:36:06 +08:00
czm
5b1e48e301 admin update 2020-12-29 10:05:18 +08:00
czm
27fe05a636 Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 18:01:07 +08:00
jimmy
689da6d2ac Change industry api: by jimmy 2020-12-28 15:37:05 +08:00
czm
d3e39b3d6c Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 15:12:36 +08:00
jimmy
8d5c1a616f Update url :by jimmy 2020-12-28 15:11:57 +08:00
czm
6b4fc9ed42 Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 15:09:22 +08:00
jimmy
1f03b484d1 Update api url: by jimmy 2020-12-28 15:05:04 +08:00
czm
5b54371cfc Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 14:36:08 +08:00
joycewsx
aae5223ad2 add industry page 2020-12-28 10:49:34 +08:00
思维跳跃科技
233061fae4 Merge pull request #29 from mindskip/mindskip
文档更新
2020-12-28 09:42:23 +08:00
思维跳跃科技
121b0b4dac !30 文档更新
Merge pull request !30 from 思维跳跃科技/mindskip
2020-12-28 09:42:11 +08:00
mindskip
aad4a4ac13 文档更新 2020-12-28 09:40:29 +08:00
mindskip
fc3fc344a4 文档更新 2020-12-28 09:40:21 +08:00
思维跳跃科技
5195975a37 Merge pull request #28 from mindskip/mindskip
文档更新
2020-12-26 14:10:25 +08:00
思维跳跃科技
87824ad22f !29 文档更新
Merge pull request !29 from 思维跳跃科技/mindskip
2020-12-26 14:08:04 +08:00
mindskip
250974ca58 文档更新 2020-12-26 14:05:51 +08:00
mindskip
6b22ad9eee 文档更新 2020-12-26 14:05:45 +08:00
mindskip
a4977f80b3 文档更新 2020-12-26 13:59:51 +08:00
mindskip
868ec844d1 文档更新 2020-12-26 13:59:42 +08:00
Kevin Cui
cc72c55751 Merge remote-tracking branch 'origin/master' 2020-12-25 14:46:53 +08:00
Kevin Cui
f0c861c796 拆表及行业,技能添加 by kevin.cui 2020-12-25 14:46:28 +08:00
buddytu
0108fdb36b !2 change file
Merge pull request !2 from JoyceWei/feature/tek-system-ui
2020-12-25 14:37:15 +08:00
joycewsx
d9c8047cf8 change file 2020-12-25 14:34:47 +08:00
buddytu
7e7f313aed !1 change wording
Merge pull request !1 from JoyceWei/feature/tek-system-ui
2020-12-25 14:11:29 +08:00
Joyce-wei
4ead559ae2 edit wording & change copyright 2020-12-25 13:50:56 +08:00
alvis
97fec2b58b Merge pull request #27 from mindskip/alvis
bug fix
2020-12-25 09:31:29 +08:00
alvis
da10e9d1a8 !28 bug fix
Merge pull request !28 from alvis/alvis
2020-12-25 09:30:49 +08:00
alvis
6577201387 bug fix 2020-12-25 09:29:38 +08:00
alvis
4f4ee30cff bug fix 2020-12-25 09:29:31 +08:00
Kevin Cui
513bf28f67 拆表及行业,技能添加 by kevin.cui 2020-12-24 17:09:38 +08:00
Kevin Cui
a28e6dcd25 拆表及行业,技能添加 by kevin.cui 2020-12-24 17:06:42 +08:00
buddytu
fc58997116 upload sql file 2020-12-23 17:42:49 +08:00
思维跳跃科技
eb470320fa Merge pull request #26 from mindskip/mindskip
文档更新
2020-12-23 09:24:09 +08:00
思维跳跃科技
4b4350b1b9 !27 文档更新
Merge pull request !27 from 思维跳跃科技/mindskip
2020-12-23 09:23:33 +08:00
mindskip
2cfa14bc51 文档更新 2020-12-23 09:20:25 +08:00
mindskip
4f4cb35490 文档更新 2020-12-23 09:20:07 +08:00
思维跳跃科技
6db2b55225 Merge pull request #25 from mindskip/mindskip
文档更新
2020-12-22 10:13:03 +08:00
思维跳跃科技
c0e918ab0e !26 文档更新
Merge pull request !26 from 思维跳跃科技/mindskip
2020-12-22 10:12:06 +08:00
mindskip
e9903beecc 文档更新 2020-12-22 10:10:38 +08:00
mindskip
52c1832f99 文档更新 2020-12-22 10:10:30 +08:00
思维跳跃科技
f8723cc8ff Merge pull request #24 from mindskip/mindskip
文档更新
2020-12-21 11:54:34 +08:00
思维跳跃科技
6cdf1403e8 !25 文档更新
Merge pull request !25 from 思维跳跃科技/mindskip
2020-12-21 11:53:09 +08:00
mindskip
2a6c057ec1 文档更新 2020-12-21 11:52:18 +08:00
mindskip
335ab745ca 文档更新 2020-12-21 11:47:06 +08:00
思维跳跃科技
cebd237b98 Merge pull request #23 from mindskip/mindskip
文档更新
2020-12-21 11:43:24 +08:00
思维跳跃科技
dcbdfdbbce !24 文档更新
Merge pull request !24 from 思维跳跃科技/mindskip
2020-12-21 11:41:52 +08:00
mindskip
714e59b605 文档更新 2020-12-21 11:32:13 +08:00
mindskip
d096dc656f 文档更新 2020-12-21 11:31:39 +08:00
alvis
1a17d36cce Merge pull request #22 from mindskip/alvis
bug fix
2020-12-21 09:53:24 +08:00
alvis
c739f2fbed !23 bug fix
Merge pull request !23 from alvis/alvis
2020-12-21 09:51:50 +08:00
alvis
9bb4a3dae7 bug fix 2020-12-21 09:49:33 +08:00
alvis
96dac789eb bug fix 2020-12-21 09:49:23 +08:00
alvis
6a0c620f6e Merge pull request #21 from mindskip/alvis
v3.1.0
2020-12-18 09:51:00 +08:00
alvis
947c15f404 !22 v3.1.0
Merge pull request !22 from alvis/alvis
2020-12-18 09:50:49 +08:00
alvis
071919defd v3.1.0 2020-12-18 09:49:32 +08:00
alvis
cd575ebc3f v3.1.0 2020-12-18 09:48:37 +08:00
思维跳跃科技
beafc51393 Merge pull request #20 from mindskip/mindskip
文档更新
2020-12-17 13:34:57 +08:00
思维跳跃科技
6da3ef4c5b !21 文档更新
Merge pull request !21 from 思维跳跃科技/mindskip
2020-12-17 13:34:29 +08:00
mindskip
95f40b903f 文档更新 2020-12-17 13:33:28 +08:00
mindskip
3e706b361a 文档更新 2020-12-17 13:33:20 +08:00
思维跳跃科技
c8c47607f4 Merge pull request #19 from mindskip/mindskip
教程修订
2020-12-16 10:10:46 +08:00
思维跳跃科技
cbe91187e6 !20 教程修订
Merge pull request !20 from 思维跳跃科技/mindskip
2020-12-16 10:10:09 +08:00
mindskip
8e79a71b1f 教程修订 2020-12-16 10:08:50 +08:00
mindskip
75eea70d6f 教程修订 2020-12-16 10:08:33 +08:00
alvis
9cb23a94a7 Merge pull request #18 from mindskip/alvis
bug fix
2020-12-15 09:23:42 +08:00
alvis
ed8ada2ecc !19 bug fix
Merge pull request !19 from alvis/alvis
2020-12-15 09:21:59 +08:00
alvis
6794b1135c bug fix 2020-12-15 09:21:29 +08:00
alvis
05922d6484 bug fix 2020-12-15 09:21:14 +08:00
alvis
09f6a81797 !18 bug修复
Merge pull request !18 from alvis/alvis
2020-12-14 09:14:50 +08:00
alvis
30cf0c06fc Merge pull request #17 from mindskip/alvis
bug fix
2020-12-14 09:14:42 +08:00
alvis
c68fc57e55 bug fix 2020-12-14 09:13:38 +08:00
alvis
b6bcff27c0 bug fix 2020-12-14 09:13:18 +08:00
alvis
01d27afdde Merge pull request #16 from mindskip/alvis
bug修复
2020-12-11 11:03:48 +08:00
alvis
072a27c5b3 !17 bug修复
Merge pull request !17 from alvis/alvis
2020-12-11 11:03:25 +08:00
alvis
c885a0e60b bug修复 2020-12-11 11:02:27 +08:00
alvis
a29aaed59c bug修复 2020-12-11 11:02:10 +08:00
alvis
dd9590ea84 Merge pull request #15 from mindskip/alvis
日期bug修复
2020-12-10 10:15:23 +08:00
alvis
efccda92ea !16 日期bug修复
Merge pull request !16 from alvis/alvis
2020-12-10 10:14:56 +08:00
alvis
3d25cba611 日期bug修复 2020-12-10 10:13:42 +08:00
alvis
ffd4f03f04 日期bug修复 2020-12-10 10:13:12 +08:00
alvis
b27f525152 !15 修复日期选择bug
Merge pull request !15 from alvis/alvis
2020-12-09 10:04:34 +08:00
alvis
d8c583b5a6 Merge pull request #14 from mindskip/alvis
修复日期选择bug
2020-12-09 10:04:30 +08:00
alvis
895f6c81c8 修复日期选择bug 2020-12-09 10:03:09 +08:00
alvis
4661a5aa5c 修复日期选择bug 2020-12-09 10:02:43 +08:00
alvis
53512232be Merge pull request #13 from mindskip/alvis
bug修复
2020-12-08 09:43:26 +08:00
alvis
04a5cba4f1 !14 bug修复
Merge pull request !14 from alvis/alvis
2020-12-08 09:40:36 +08:00
alvis
16f476e84f bug修复 2020-12-08 09:39:44 +08:00
alvis
7de7784428 bug修复 2020-12-08 09:38:23 +08:00
思维跳跃科技
05fb737bf4 Merge pull request #12 from mindskip/mindskip
教程更新
2020-12-04 10:02:26 +08:00
思维跳跃科技
d812d2a928 !13 教程更新
Merge pull request !13 from 思维跳跃科技/mindskip
2020-12-04 10:01:34 +08:00
mindskip
edeeeb06c1 教程更新 2020-12-04 10:00:16 +08:00
mindskip
89e408ce90 教程更新 2020-12-04 10:00:11 +08:00
思维跳跃科技
1d9d9d057d Merge pull request #11 from mindskip/mindskip
文档更新
2020-12-04 09:37:37 +08:00
思维跳跃科技
489faeda9a !12 教程更新
Merge pull request !12 from 思维跳跃科技/mindskip
2020-12-04 09:36:24 +08:00
mindskip
039a824302 文档更新 2020-12-03 10:30:33 +08:00
mindskip
fed4d3aa84 文档更新 2020-12-03 10:30:09 +08:00
思维跳跃科技
c1a915d8c5 Merge pull request #10 from mindskip/mindskip
教程更新
2020-12-03 10:26:35 +08:00
思维跳跃科技
475c822992 Merge pull request #9 from mindskip/alvis
bug修复
2020-12-03 10:26:25 +08:00
思维跳跃科技
4d1d45f85f !11 教程更新
Merge pull request !11 from 思维跳跃科技/mindskip
2020-12-03 10:24:59 +08:00
思维跳跃科技
129b5bea16 !10 bug修复
Merge pull request !10 from alvis/alvis
2020-12-03 10:24:53 +08:00
mindskip
9f32af9dfe 教程更新 2020-12-03 10:22:17 +08:00
mindskip
799f12bbf1 教程更新 2020-12-03 10:21:04 +08:00
alvis
b587430e3b bug修复 2020-12-03 10:09:24 +08:00
alvis
e81dc80a57 bug修复 2020-12-03 10:09:01 +08:00
alvis
945af9de76 Merge pull request #8 from mindskip/alvis
bug修复
2020-12-02 09:54:31 +08:00
alvis
c15c981254 !9 bug修复
Merge pull request !9 from alvis/alvis
2020-12-02 09:54:12 +08:00
alvis
879f0ab05e bug修复 2020-12-02 09:53:23 +08:00
alvis
ec2b7d1a0a bug修复 2020-12-02 09:53:01 +08:00
alvis
40ecab5a08 Merge pull request #7 from mindskip/alvis
主题切换
2020-12-01 09:17:59 +08:00
alvis
5f726d9dc6 !8 主题切换
Merge pull request !8 from alvis/alvis
2020-12-01 09:17:54 +08:00
alvis
945fe04b15 主题切换 2020-12-01 09:16:55 +08:00
alvis
db79588ca5 主题切换 2020-12-01 09:16:27 +08:00
alvis
c181e74ae5 !7 bug修复 缓存优化
Merge pull request !7 from alvis/alvis
2020-11-30 09:01:05 +08:00
alvis
50a41fb154 Merge pull request #6 from mindskip/alvis
bug修复、缓存优化
2020-11-30 08:58:59 +08:00
alvis
30a85560ab bug修复、缓存优化 2020-11-30 08:58:46 +08:00
alvis
18b5b2ccf7 bug修复、缓存优化 2020-11-30 08:58:07 +08:00
alvis
5b79ff5cd3 Merge pull request #5 from mindskip/alvis
bug修复
2020-11-27 10:56:05 +08:00
alvis
e714443e8d !6 bug修复
Merge pull request !6 from alvis/alvis
2020-11-27 10:55:38 +08:00
alvis
0cb5f1c107 bug修复 2020-11-27 10:54:51 +08:00
alvis
36e885ffde bug修复 2020-11-27 10:54:13 +08:00
mindskip
e9ceca7f2d Merge branch 'master' of gitee.com:mindskip/xzs-mysql 2020-11-26 11:59:32 +08:00
mindskip
6fb0f49cb0 update README.md 2020-11-26 11:58:20 +08:00
alvis
96dd9d77f9 Merge pull request #4 from mindskip/alvis
bug fix
2020-11-26 10:00:39 +08:00
alvis
ddf41b5307 !5 bug fix
Merge pull request !5 from alvis/alvis
2020-11-26 09:50:52 +08:00
alvis
9fb56f7b08 bug fix 2020-11-26 09:49:24 +08:00
alvis
6cc0613668 bug fix 2020-11-26 09:48:39 +08:00
alvis
dd1a47344a !3 组件升级 bug修复
Merge pull request !3 from alvis/alvis
2020-11-25 11:27:56 +08:00
alvis
2a6b3bd909 组件升级:
+ @vue/cli-service@4.5.9
+ @vue/cli-plugin-router@4.5.9
+ @vue/cli-plugin-eslint@4.5.9
+ @vue/cli-plugin-babel@4.5.9
+ @vue/cli-plugin-vuex@4.5.9

bug 修复:
重置
2020-11-25 11:23:30 +08:00
思维跳跃科技
25bf2959f0 !2 bug修复
Merge pull request !2 from alvis/alvis
2020-11-24 10:58:25 +08:00
alvis
f1dc6e77af bug修复 2020-11-24 10:52:18 +08:00
217 changed files with 5471 additions and 2318 deletions

View File

@@ -1,4 +1,23 @@
# 学之思在线考试系统
<p></p>
<p></p>
<p align="center">
<a href="https://www.mindskip.net" target="_blank">
<img src="doc/image/logo/1.png" height="80"/>
<a/>
</p>
<div align="center">
[![Gitee star](https://gitee.com/mindskip/xzs-mysql/badge/star.svg?theme=gitee)](https://gitee.com/mindskip/xzs-mysql)
[![Gitee fork](https://gitee.com/mindskip/xzs-mysql/badge/fork.svg?theme=gitee)](https://gitee.com/mindskip/xzs-mysql)
[![Github stars](https://img.shields.io/github/stars/mindskip/xzs-mysql?logo=github)](https://github.com/mindskip/xzs-mysql)
[![Github forks](https://img.shields.io/github/forks/mindskip/xzs-mysql?logo=github)](https://github.com/mindskip/xzs-mysql)
[![Github license](https://img.shields.io/badge/license-AGPL-yellow)](https://gitee.com/mindskip/xzs-mysql/blob/master/LICENSE)
</div>
# 学之思在线考试系统 - Mysql版
## 项目介绍
@@ -12,11 +31,11 @@
### 演示地址
* 官网:[http://www.mindskip.net](http://www.mindskip.net)
* 学之思考试系统:[http://www.mindskip.net/xzs.html](http://www.mindskip.net/xzs.html)
* 思多多智能考试平台:[http://www.mindskip.net/sdd.html](http://www.mindskip.net/sdd.html)
* 维多多培训考试系统:[http://www.mindskip.net/wdd.html](http://www.mindskip.net/wdd.html)
* 学多多考试系统:[http://www.mindskip.net/xdd.html](http://www.mindskip.net/xdd.html)
* 官网:[https://www.mindskip.net](https://www.mindskip.net)
* 学之思考试系统:[https://www.mindskip.net/xzs.html](https://www.mindskip.net/xzs.html)
* 思多多智能考试平台:[https://www.mindskip.net/sdd.html](https://www.mindskip.net/sdd.html)
* 维多多培训考试系统:[https://www.mindskip.net/wdd.html](https://www.mindskip.net/wdd.html)
* 学多多考试系统:[https://www.mindskip.net/xdd.html](https://www.mindskip.net/xdd.html)
### 学之思仓库版本地址
@@ -27,13 +46,13 @@
### 学之思交流群(加群获取数据库脚本)
* 交流六群:`593529956`
* QQ交流群七`873533715`
* QQ`2693073475`
* 微信:`alvis-u`
### 开发部署教程
* [http://mindskip.gitee.io/uexam/](http://mindskip.gitee.io/uexam/)
* [https://mindskip.gitee.io/xzs-mysql](https://mindskip.gitee.io/xzs-mysql)
### 学生系统功能
@@ -50,7 +69,7 @@
* 登录: 账号为: admin/123456
* 主页: 包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计
* 用户管理: 对不同角色 学生、教师、管理员 的增删改查管理功能
* 用户管理: 对不同角色 学生、管理员 的增删改查管理功能
* 卷题管理:
1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷
2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。
@@ -63,13 +82,9 @@
* 用户登录登出功能,登录会自动绑定微信账号,登出会解绑
* 首页包含任务中心、固定试卷、时段试卷和web端保持一致
* 试卷模块固定试卷和时段试卷的分页查询,下拉加载更多上拉刷新当前数据
* 记录模块考试结果的分页,包含了试卷基本信息
* 我的模块包含个人资料的修改个人动态消息中心模块
### 软件架构图
![](doc/image/frame/2.png)
* 试卷模块固定试卷和时段试卷的分页查询,下拉加载更多上拉刷新当前数据
* 记录模块考试结果的分页,包含了试卷基本信息
* 我的模块包含个人资料的修改个人动态消息中心模块
### 系统展示

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

BIN
doc/frame/架构图.vsdx Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

BIN
doc/image/logo/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -10,14 +10,10 @@
禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负
## 学之思仓库版本地址
gitee - postgresql [https://gitee.com/mindskip/uexam](https://gitee.com/mindskip/uexam)
## 学之思仓库地址
gitee - mysql [https://gitee.com/mindskip/xzs-mysql](https://gitee.com/mindskip/xzs-mysql)
github - postgresql [https://github.com/mindskip/xzs](https://github.com/mindskip/xzs)
github - mysql [https://github.com/mindskip/xzs-mysql](https://github.com/mindskip/xzs-mysql)
## 运行环境
@@ -27,7 +23,7 @@ github - mysql [https://github.com/mindskip/xzs-mysql](https://github.com/min
| 操作系统 | Windows / Linux |
| Jdk | 8 |
| Redis | 6.0 |
| PostgreSql / Mysql | 12.0 / 8.0 |
| Mysql | 8.0 |
## 技术栈列表
@@ -36,32 +32,36 @@ github - mysql [https://github.com/mindskip/xzs-mysql](https://github.com/min
* spring-boot 2.1.6.RELEASE
* spring-boot-security 用户登录验证
* undertow web容器
* postgresql/mysql 优秀的开源数据库
* mysql 最流行的开源数据库
* redis 缓存,提升系统性能
* mybatis 数据库中间件
* hikari 速度最快的数据库连接池
* 七牛云存储 目前10G内免费
* 七牛云存储 分布式文件存储中心
### 前台系统
* Vue.js 采用新版使用了vue-cli3搭建的系统,减少大量配置文件
* element-ui 最流行的vue组件,采用的最新版
* vue-element-admin 优化和扩展版本
* vue 采用新版使用了vue-cli4搭建的系统,减少大量配置文件
* element-ui 最流行的vue UI框架
* vue-element-admin 深度定制版
* echarts 图表统计
* ueditor 优化
* ueditor 深度定制
### 微信小程序
* iView 主题样式
## 架构图
![架构图](https://gitee.com/mindskip/xzs-mysql/raw/master/doc/image/frame/1.png)
## 项目开发
### 开发说明
* redis 安装
* 进群获取到数据库脚本创建表初始化数据数据库名称为xzs
* 代码分为 mysql / postgresql 2个版本,配合应的数据库使用
* 安装mysql / postgresql ,数据库二选一即可 导入sql脚本。mysql导入xzs-mysql.sql脚本。postgresql导入xzx-postgresql.sql脚本
* 代码分为 mysql版本配合应的数据库使用
* 安装mysql 导入xzs-mysql.sql脚本。
* 学生端默认账号student / 123456
* 管理端默认账号admin / 123456
@@ -69,9 +69,10 @@ github - mysql [https://github.com/mindskip/xzs-mysql](https://github.com/min
* /uexam/source/xzs为后台代码建议使用IntelliJ IDEA打开
* 打开application-dev.yml文件中配置好postgesql/mysql、redis的服务地址
* 去七牛云官网申请好云存储账号修改application.yml中的qn相关的配置
* 启动后台程序,默认端口为8000。
* 学生系统地址:<http://localhost:8000/student>
* 管理端地址:<http://localhost:8000/admin>
* 学生系统地址:<http://ip:8000/student>
* 管理端地址:<http://ip:8000/admin>
### 前端开发
@@ -121,7 +122,7 @@ npm run build
* 执行下列命令,运行程序
```java
nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.0.7.jar > start1.log 2>&1 &
nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.1.0.jar > start1.log 2>&1 &
```
### 前后端分离部署
@@ -142,7 +143,7 @@ server {
index index.html;
}
location /api/ {
proxy_pass https://localhost:8000;
proxy_pass http://localhost:8000;
}
}
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

BIN
docs/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学之思开发部署教程</title>
@@ -8,20 +9,23 @@
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css">
<link rel="stylesheet" href="xzs.css">
<link rel="shortcut icon" href="favicon.ico">
<link rel="shortcut icon" href="favicon.png">
</head>
<body style="min-width: 1024px;">
<nav class="head">
<div class="head-logo">
<img src="http://www.mindskip.net/images/icon/logo-white.png"/>
<a href="https://www.mindskip.net" target="_blank">
<img src="logo.png" />
</a>
</div>
<div class="head-link">
<a href="https:www.mindskip.net" target="_blank">官网</a>
<a href="https:www.mindskip.net/sdd.html" target="_blank">思多多</a>
<a href="https:www.mindskip.net/wdd.html" target="_blank">维多多</a>
<a href="https:www.mindskip.net/xdd.html" target="_blank">学多多</a>
<a href="https:www.mindskip.net/xzs.html" target="_blank">学之思</a>
<a href="https:www.mindskip.net/buy.html" target="_blank">商业购买</a>
<a href="https://www.mindskip.net/" target="_blank">官网</a>
<a href="https://www.mindskip.net/sdd.html" target="_blank">思多多</a>
<a href="https://www.mindskip.net/wdd.html" target="_blank">维多多</a>
<a href="https://www.mindskip.net/xdd.html" target="_blank">学多多</a>
<a href="https://www.mindskip.net/xzs.html" target="_blank">学之思</a>
<a href="https://www.mindskip.net/buy.html" target="_blank">商业购买</a>
</div>
</nav>
<div id="app"></div>
@@ -33,4 +37,5 @@
</script>
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
</body>
</html>

BIN
docs/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -7,31 +7,33 @@ table td {
}
.head {
position: fixed !important;
display: flex;
flex-direction: row;
justify-content: space-between;
width: calc(100% - 300px);
width: 100%;
margin: 0px !important;
line-height: 58px;
padding: 10px 20px;
background-color: #f8f8f8;
flex-wrap: wrap;
}
.head-logo{
.head-logo {
height: 58px;
width: 182px;
line-height: 78px;
}
.head-link{
flex: 1;
width: 100%;
.head-link {
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
}
.head-link a{
.head-link a {
margin-left: 25px;
}
.content{
.content {
padding-top: 80px !important;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "xzs-admin",
"version": "3.0.8",
"version": "3.3.0",
"author": "武汉思维跳跃科技有限公司",
"description": "学之思管理系统",
"license": "AGPL-3.0",
@@ -16,22 +16,22 @@
},
"dependencies": {
"axios": "^0.19.0",
"core-js": "^3.7.0",
"element-ui": "^2.14.1",
"core-js": "^3.9.0",
"element-ui": "^2.15.0",
"js-cookie": "2.2.0",
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"vue": "^2.6.10",
"vue-count-to": "^1.0.13",
"vue-router": "^3.4.9",
"vuex": "^3.5.1"
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.9",
"@vue/cli-plugin-eslint": "^4.5.9",
"@vue/cli-plugin-router": "^4.5.9",
"@vue/cli-plugin-vuex": "^4.5.9",
"@vue/cli-service": "^4.5.9",
"@vue/cli-plugin-babel": "^4.5.11",
"@vue/cli-plugin-eslint": "^4.5.11",
"@vue/cli-plugin-router": "^4.5.11",
"@vue/cli-plugin-vuex": "^4.5.11",
"@vue/cli-service": "^4.5.11",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.1.0",
"eslint": "^5.16.0",

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
import { post } from '@/utils/request'
export default {
page: query => post('/api/admin/examPaperAnswer/page', query)
}

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569065326528" class="icon" viewBox="0 0 1152 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3178" xmlns:xlink="http://www.w3.org/1999/xlink" width="225" height="200"><defs><style type="text/css"></style></defs><path d="M1023.584 0 128.416 0C57.472 0 0 57.504 0 128.416L0 767.584C0 838.496 57.472 896 128.416 896L192 896 192 985.856C192 1007.904 210.08 1024 230.112 1024 235.552 1024 241.12 1022.816 246.528 1020.256L480.544 908.48C497.76 900.256 516.608 896 535.68 896L1023.584 896C1094.496 896 1152 838.496 1152 767.584L1152 128.416C1152 57.504 1094.496 0 1023.584 0ZM319.9936 352C319.9936 334.32689 334.221792 320 352.021504 320L799.965696 320C817.654208 320 831.9936 334.203674 831.9936 352 831.9936 369.67311 817.765408 384 799.965696 384L352.021504 384C334.332992 384 319.9936 369.796326 319.9936 352ZM319.9936 544C319.9936 526.32689 334.221792 512 352.021504 512L799.965696 512C817.654208 512 831.9936 526.203674 831.9936 544 831.9936 561.67311 817.765408 576 799.965696 576L352.021504 576C334.332992 576 319.9936 561.796326 319.9936 544Z" p-id="3179"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -9,7 +9,7 @@
</div>
<app-main />
<div class="foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
<back-to-top :visibility-height="100" :back-position="0" transition-name="fade" ref="backTop"/>
</div>

View File

@@ -187,6 +187,24 @@ const constantRoutes = [
}
]
},
{
path: '/answer',
component: Layout,
name: 'AnswerPage',
meta: {
title: '成绩管理',
icon: 'answer'
},
alwaysShow: true,
children: [
{
path: 'list',
component: () => import('@/views/answer/list'),
name: 'AnswerPageList',
meta: { title: '答卷列表', noCache: true }
}
]
},
{
path: '/message',
component: Layout,

View File

@@ -0,0 +1,83 @@
<template>
<div class="app-container">
<el-form :model="queryParam" ref="queryForm" :inline="true">
<el-form-item label="学科:" >
<el-select v-model="queryParam.subjectId" clearable>
<el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
<el-table-column prop="id" label="Id" width="100" />
<el-table-column prop="paperName" label="试卷名称"/>
<el-table-column prop="userName" label="用户名称"/>
<el-table-column label="得分" width="100px" >
<template slot-scope="{row}">
{{row.userScore}} / {{row.paperScore}}
</template>
</el-table-column>
<el-table-column label="题目对错" width="80px" >
<template slot-scope="{row}">
{{row.questionCorrect}} / {{row.questionCount}}
</template>
</el-table-column>
<el-table-column prop="doTime" label="耗时" width="100px"/>
<el-table-column prop="createTime" label="提交时间" width="160px"/>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
@pagination="search"/>
</div>
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import Pagination from '@/components/Pagination'
import examPaperAnswerApi from '@/api/examPaperAnwser'
export default {
components: { Pagination },
data () {
return {
queryParam: {
subjectId: null,
pageIndex: 1,
pageSize: 10
},
listLoading: false,
tableData: [],
total: 0
}
},
created () {
this.initSubject()
this.search()
},
methods: {
search () {
this.listLoading = true
examPaperAnswerApi.page(this.queryParam).then(data => {
const re = data.response
this.tableData = re.list
this.total = re.total
this.queryParam.pageIndex = re.pageNum
this.listLoading = false
})
},
submitForm () {
this.queryParam.pageIndex = 1
this.search()
},
...mapActions('exam', { initSubject: 'initSubject' })
},
computed: {
...mapGetters('enumItem', ['enumFormat']),
...mapGetters('exam', ['subjectEnumFormat']),
...mapState('exam', { subjects: state => state.subjects })
}
}
</script>

View File

@@ -65,7 +65,15 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
name: '',
level: 1,
levelName: ''
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@@ -238,7 +238,19 @@ export default {
return this.subjectEnumFormat(cellValue)
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
level: null,
subjectId: null,
paperType: 1,
limitDateTime: [],
name: '',
suggestTime: null,
titleItems: []
}
this.form.id = lastId
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@@ -208,7 +208,22 @@ export default {
this.questionShow.question = this.form
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 4,
gradeLevel: null,
subjectId: null,
title: '',
items: [
],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@@ -195,7 +195,27 @@ export default {
this.questionShow.question = this.form
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 2,
gradeLevel: null,
subjectId: null,
title: '',
items: [
{ id: null, prefix: 'A', content: '' },
{ id: null, prefix: 'B', content: '' },
{ id: null, prefix: 'C', content: '' },
{ id: null, prefix: 'D', content: '' }
],
analyze: '',
correct: '',
correctArray: [],
score: '',
difficult: 0
}
this.form.id = lastId
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@@ -161,7 +161,21 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 5,
gradeLevel: null,
subjectId: null,
title: '',
items: [],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
levelChange () {
this.form.subjectId = null

View File

@@ -157,8 +157,13 @@ export default {
},
questionItemAdd () {
let items = this.form.items
let newLastPrefix
if (items.length > 0) {
let last = items[items.length - 1]
let newLastPrefix = String.fromCharCode(last.prefix.charCodeAt() + 1)
newLastPrefix = String.fromCharCode(last.prefix.charCodeAt() + 1)
} else {
newLastPrefix = 'A'
}
items.push({ id: null, prefix: newLastPrefix, content: '' })
},
submitForm () {
@@ -185,7 +190,26 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 1,
gradeLevel: null,
subjectId: null,
title: '',
items: [
{ prefix: 'A', content: '' },
{ prefix: 'B', content: '' },
{ prefix: 'C', content: '' },
{ prefix: 'D', content: '' }
],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
levelChange () {
this.form.subjectId = null

View File

@@ -172,7 +172,24 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 3,
gradeLevel: null,
subjectId: null,
title: '',
items: [
{ id: null, prefix: 'A', content: '是' },
{ id: null, prefix: 'B', content: '否' }
],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
levelChange () {
this.form.subjectId = null

View File

@@ -52,7 +52,7 @@
</el-form>
<div class="account-foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</div>
</template>

View File

@@ -89,9 +89,14 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.options = []
this.form.receiveUserIds = []
this.form = {
title: '',
content: '',
receiveUserIds: []
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
}

View File

@@ -175,6 +175,7 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
@@ -182,6 +183,7 @@ export default {
title: '',
paperItems: []
}
this.form.id = lastId
},
subjectFormatter (row, column, cellValue, index) {
return this.subjectEnumFormat(cellValue)

View File

@@ -20,7 +20,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期"/>
<el-date-picker v-model="form.birthDay" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"/>
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
@@ -104,6 +104,7 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
@@ -117,6 +118,7 @@ export default {
birthDay: null,
phone: null
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@@ -20,7 +20,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期" />
<el-date-picker v-model="form.birthDay" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" />
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
@@ -113,6 +113,7 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
@@ -127,6 +128,7 @@ export default {
phone: null,
userLevel: null
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@@ -1,134 +0,0 @@
<template>
<div class="app-container">
<el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
<el-form-item label="用户名:" prop="userName" required>
<el-input v-model="form.userName"></el-input>
</el-form-item>
<el-form-item label="密码:" required>
<el-input v-model="form.password"></el-input>
</el-form-item>
<el-form-item label="真实姓名:" prop="realName" required>
<el-input v-model="form.realName"></el-input>
</el-form-item>
<el-form-item label="年龄:">
<el-input v-model="form.age"></el-input>
</el-form-item>
<el-form-item label="性别:">
<el-select v-model="form.sex" placeholder="性别" clearable>
<el-option v-for="item in sexEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期" />
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
</el-form-item>
<el-form-item label="状态:" required>
<el-select v-model="form.status" placeholder="状态">
<el-option v-for="item in statusEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import userApi from '@/api/user'
export default {
data () {
return {
form: {
id: null,
userName: '',
password: '',
realName: '',
role: 2,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null
},
formLoading: false,
rules: {
userName: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
realName: [
{ required: true, message: '请输入真实姓名', trigger: 'blur' }
]
}
}
},
created () {
let id = this.$route.query.id
let _this = this
if (id && parseInt(id) !== 0) {
_this.formLoading = true
userApi.selectUser(id).then(re => {
_this.form = re.response
_this.formLoading = false
})
}
},
methods: {
submitForm () {
let _this = this
this.$refs.form.validate((valid) => {
if (valid) {
this.formLoading = true
userApi.createUser(this.form).then(data => {
if (data.code === 1) {
_this.$message.success(data.message)
_this.delCurrentView(_this).then(() => {
_this.$router.push('/user/teacher/list')
})
} else {
_this.$message.error(data.message)
_this.formLoading = false
}
}).catch(e => {
_this.formLoading = false
})
} else {
return false
}
})
},
resetForm () {
this.$refs['form'].resetFields()
this.form = {
id: null,
userName: '',
password: '',
realName: '',
role: 2,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null
}
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},
computed: {
...mapGetters('enumItem', [
'enumFormat'
]),
...mapState('enumItem', {
sexEnum: state => state.user.sexEnum,
roleEnum: state => state.user.roleEnum,
statusEnum: state => state.user.statusEnum
})
}
}
</script>

View File

@@ -1,131 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParam" ref="queryForm" :inline="true">
<el-form-item label="用户名:">
<el-input v-model="queryParam.userName"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">查询</el-button>
<router-link :to="{path:'/user/teacher/edit'}" class="link-left">
<el-button type="primary">添加</el-button>
</router-link>
</el-form-item>
</el-form>
<el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
<el-table-column prop="id" label="Id" />
<el-table-column prop="userName" label="用户名"/>
<el-table-column prop="realName" label="真实姓名" />
<el-table-column prop="sex" label="性别" width="60px;" :formatter="sexFormatter"/>
<el-table-column prop="phone" label="手机号"/>
<el-table-column prop="createTime" label="创建时间" width="160px"/>
<el-table-column label="状态" prop="status" width="70px">
<template slot-scope="{row}">
<el-tag :type="statusTagFormatter(row.status)">
{{ statusFormatter(row.status) }}
</el-tag>
</template>
</el-table-column>
<el-table-column width="220px" label="操作" align="center">
<template slot-scope="{row}">
<el-button size="mini" @click="changeStatus(row)" class="link-left">
{{ statusBtnFormatter(row.status) }}
</el-button>
<router-link :to="{path:'/user/teacher/edit', query:{id:row.id}}" class="link-left">
<el-button size="mini" >编辑</el-button>
</router-link>
<el-button size="mini" type="danger" @click="deleteUser(row)" class="link-left">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
@pagination="search"/>
</div>
</template>
<script>
import { mapGetters, mapState } from 'vuex'
import Pagination from '@/components/Pagination'
import userApi from '@/api/user'
export default {
components: { Pagination },
data () {
return {
queryParam: {
userName: '',
role: 2,
pageIndex: 1,
pageSize: 10
},
listLoading: true,
tableData: [],
total: 0
}
},
created () {
this.search()
},
methods: {
search () {
this.listLoading = true
userApi.getUserPageList(this.queryParam).then(data => {
const re = data.response
this.tableData = re.list
this.total = re.total
this.queryParam.pageIndex = re.pageNum
this.listLoading = false
})
},
changeStatus (row) {
let _this = this
userApi.changeStatus(row.id).then(re => {
if (re.code === 1) {
row.status = re.response
_this.$message.success(re.message)
} else {
_this.$message.error(re.message)
}
})
},
deleteUser (row) {
let _this = this
userApi.deleteUser(row.id).then(re => {
if (re.code === 1) {
_this.search()
_this.$message.success(re.message)
} else {
_this.$message.error(re.message)
}
})
},
submitForm () {
this.queryParam.pageIndex = 1
this.search()
},
sexFormatter (row, column, cellValue, index) {
return this.enumFormat(this.sexEnum, cellValue)
},
statusFormatter (status) {
return this.enumFormat(this.statusEnum, status)
},
statusTagFormatter (status) {
return this.enumFormat(this.statusTag, status)
},
statusBtnFormatter (status) {
return this.enumFormat(this.statusBtn, status)
}
},
computed: {
...mapGetters('enumItem', [
'enumFormat'
]),
...mapState('enumItem', {
sexEnum: state => state.user.sexEnum,
statusEnum: state => state.user.statusEnum,
statusTag: state => state.user.statusTag,
statusBtn: state => state.user.statusBtn
})
}
}
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "xzs-student",
"version": "3.0.8",
"version": "3.3.0",
"author": "武汉思维跳跃科技有限公司",
"description": "学之思考试系统",
"license": "AGPL-3.0",
@@ -16,21 +16,21 @@
},
"dependencies": {
"axios": "^0.19.0",
"core-js": "^3.7.0",
"element-ui": "^2.14.1",
"core-js": "^3.8.3",
"element-ui": "^2.15.0",
"js-cookie": "2.2.0",
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"vue": "^2.6.10",
"vue-router": "^3.4.9",
"vuex": "^3.5.1"
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.9",
"@vue/cli-plugin-eslint": "^4.5.9",
"@vue/cli-plugin-router": "^4.5.9",
"@vue/cli-plugin-vuex": "^4.5.9",
"@vue/cli-service": "^4.5.9",
"@vue/cli-plugin-babel": "^4.5.11",
"@vue/cli-plugin-eslint": "^4.5.11",
"@vue/cli-plugin-router": "^4.5.11",
"@vue/cli-plugin-vuex": "^4.5.11",
"@vue/cli-service": "^4.5.11",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.3",
"eslint": "^5.16.0",

View File

@@ -35,10 +35,10 @@
<div class="container">
<div class="footer-main">
<h4>产品介绍</h4>
<a href="http://www.mindskip.net/sdd.html" target="_blank" class="footer-main-link">思多多智能考试平台</a>
<a href="http://www.mindskip.net/wdd.html" target="_blank" class="footer-main-link">维多多培训考试系统</a>
<a href="http://www.mindskip.net/xdd.html" target="_blank" class="footer-main-link">学多多考试系统</a>
<a href="http://www.mindskip.net/xzs.html" target="_blank" class="footer-main-link">学之思考试系统</a>
<a href="https://www.mindskip.net/sdd.html" target="_blank" class="footer-main-link">思多多智能考试平台</a>
<a href="https://www.mindskip.net/wdd.html" target="_blank" class="footer-main-link">维多多培训考试系统</a>
<a href="https://www.mindskip.net/xdd.html" target="_blank" class="footer-main-link">学多多考试系统</a>
<a href="https://www.mindskip.net/xzs.html" target="_blank" class="footer-main-link">学之思考试系统</a>
</div>
<div class="footer-main">
<h4>学多多小程序</h4>
@@ -66,7 +66,7 @@
</div>
</el-footer>
<div class="foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</el-container>
</template>

View File

@@ -89,7 +89,7 @@ html {
.footer-main {
display: inline-block;
vertical-align: top;
margin-right: 110px;
margin-right: 70px;
.footer-main-link {
display: block;

View File

@@ -31,7 +31,7 @@
</div>
</div>
<div class="account-foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</div>
</template>

View File

@@ -37,7 +37,7 @@
</div>
</div>
<div class="account-foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</div>
</template>

View File

@@ -51,7 +51,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期"/>
<el-date-picker v-model="form.birthDay" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"/>
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>

View File

@@ -5,7 +5,7 @@
<groupId>com.mindskip</groupId>
<artifactId>xzs</artifactId>
<version>3.0.8</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<name>xzs</name>
@@ -118,13 +118,6 @@
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>

View File

@@ -1,15 +1,29 @@
package com.mindskip.xzs.base;
import lombok.Data;
/**
* @author 武汉思维跳跃科技有限公司
*/
@Data
public class BasePage {
private Integer pageIndex;
private Integer pageSize;
public Integer getPageIndex() {
return pageIndex;
}
public void setPageIndex(Integer pageIndex) {
this.pageIndex = pageIndex;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}

View File

@@ -1,9 +1,25 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
@Data
public class PasswordKeyConfig {
private String publicKey;
private String privateKey;
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public String getPrivateKey() {
return privateKey;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
}

View File

@@ -1,14 +1,46 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
import java.time.Duration;
import java.util.List;
@Data
public class QnConfig {
private String url;
private String bucket;
private String accessKey;
private String secretKey;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
}

View File

@@ -1,6 +1,5 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
@@ -10,10 +9,43 @@ import java.util.List;
* @author 武汉思维跳跃科技有限公司
*/
@ConfigurationProperties(prefix = "system")
@Data
public class SystemConfig {
private PasswordKeyConfig pwdKey;
private List<String> securityIgnoreUrls;
private WxConfig wx;
private QnConfig qn;
public PasswordKeyConfig getPwdKey() {
return pwdKey;
}
public void setPwdKey(PasswordKeyConfig pwdKey) {
this.pwdKey = pwdKey;
}
public List<String> getSecurityIgnoreUrls() {
return securityIgnoreUrls;
}
public void setSecurityIgnoreUrls(List<String> securityIgnoreUrls) {
this.securityIgnoreUrls = securityIgnoreUrls;
}
public WxConfig getWx() {
return wx;
}
public void setWx(WxConfig wx) {
this.wx = wx;
}
public QnConfig getQn() {
return qn;
}
public void setQn(QnConfig qn) {
this.qn = qn;
}
}

View File

@@ -1,14 +1,47 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
import java.time.Duration;
import java.util.List;
@Data
public class WxConfig {
private String appid;
private String secret;
private Duration tokenToLive;
private List<String> securityIgnoreUrls;
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public Duration getTokenToLive() {
return tokenToLive;
}
public void setTokenToLive(Duration tokenToLive) {
this.tokenToLive = tokenToLive;
}
public List<String> getSecurityIgnoreUrls() {
return securityIgnoreUrls;
}
public void setSecurityIgnoreUrls(List<String> securityIgnoreUrls) {
this.securityIgnoreUrls = securityIgnoreUrls;
}
}

View File

@@ -2,7 +2,7 @@ package com.mindskip.xzs.configuration.spring.mvc;
import com.mindskip.xzs.configuration.property.SystemConfig;
import com.mindskip.xzs.configuration.spring.wx.TokenHandlerInterceptor;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@@ -14,12 +14,17 @@ import java.util.List;
*/
@Configuration
@AllArgsConstructor
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
private final TokenHandlerInterceptor tokenHandlerInterceptor;
private final SystemConfig systemConfig;
@Autowired
public WebMvcConfiguration(TokenHandlerInterceptor tokenHandlerInterceptor, SystemConfig systemConfig) {
this.tokenHandlerInterceptor = tokenHandlerInterceptor;
this.systemConfig = systemConfig;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "/student/index.html");

View File

@@ -1,14 +1,37 @@
package com.mindskip.xzs.configuration.spring.security;
import lombok.Data;
/**
* @author 武汉思维跳跃科技有限公司
*/
@Data
public class AuthenticationBean {
private String userName;
private String password;
private boolean remember;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isRemember() {
return remember;
}
public void setRemember(boolean remember) {
this.remember = remember;
}
}

View File

@@ -4,7 +4,7 @@ import com.mindskip.xzs.base.SystemCode;
import com.mindskip.xzs.domain.UserEventLog;
import com.mindskip.xzs.event.UserEvent;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.User;
@@ -23,12 +23,17 @@ import java.util.Date;
* @author 武汉思维跳跃科技有限公司
*/
@Component
@AllArgsConstructor
public class RestAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
private final ApplicationEventPublisher eventPublisher;
private final UserService userService;
@Autowired
public RestAuthenticationSuccessHandler(ApplicationEventPublisher eventPublisher, UserService userService) {
this.eventPublisher = eventPublisher;
this.userService = userService;
}
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
User springUser = (User) authentication.getPrincipal();

View File

@@ -5,7 +5,7 @@ import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.domain.UserEventLog;
import com.mindskip.xzs.event.UserEvent;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
@@ -21,12 +21,17 @@ import java.util.Date;
* @author 武汉思维跳跃科技有限公司
*/
@Component
@AllArgsConstructor
public class RestLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
private final ApplicationEventPublisher eventPublisher;
private final UserService userService;
@Autowired
public RestLogoutSuccessHandler(ApplicationEventPublisher eventPublisher, UserService userService) {
this.eventPublisher = eventPublisher;
this.userService = userService;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
org.springframework.security.core.userdetails.User springUser = (org.springframework.security.core.userdetails.User) authentication.getPrincipal();

View File

@@ -3,7 +3,7 @@ package com.mindskip.xzs.configuration.spring.security;
import com.mindskip.xzs.configuration.property.CookieConfig;
import com.mindskip.xzs.configuration.property.SystemConfig;
import com.mindskip.xzs.domain.enums.RoleEnum;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -27,7 +27,6 @@ import java.util.List;
public class SecurityConfigurer {
@Configuration
@AllArgsConstructor
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
private final SystemConfig systemConfig;
@@ -39,6 +38,18 @@ public class SecurityConfigurer {
private final RestLogoutSuccessHandler restLogoutSuccessHandler;
private final RestAccessDeniedHandler restAccessDeniedHandler;
@Autowired
public FormLoginWebSecurityConfigurerAdapter(SystemConfig systemConfig, LoginAuthenticationEntryPoint restAuthenticationEntryPoint, RestAuthenticationProvider restAuthenticationProvider, RestDetailsServiceImpl formDetailsService, RestAuthenticationSuccessHandler restAuthenticationSuccessHandler, RestAuthenticationFailureHandler restAuthenticationFailureHandler, RestLogoutSuccessHandler restLogoutSuccessHandler, RestAccessDeniedHandler restAccessDeniedHandler) {
this.systemConfig = systemConfig;
this.restAuthenticationEntryPoint = restAuthenticationEntryPoint;
this.restAuthenticationProvider = restAuthenticationProvider;
this.formDetailsService = formDetailsService;
this.restAuthenticationSuccessHandler = restAuthenticationSuccessHandler;
this.restAuthenticationFailureHandler = restAuthenticationFailureHandler;
this.restLogoutSuccessHandler = restLogoutSuccessHandler;
this.restAccessDeniedHandler = restAccessDeniedHandler;
}
/**
* @param http http
* @throws Exception exception

View File

@@ -2,18 +2,22 @@ package com.mindskip.xzs.context;
import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
@Component
@AllArgsConstructor
public class WebContext {
private static final String USER_ATTRIBUTES = "USER_ATTRIBUTES";
private final UserService userService;
@Autowired
public WebContext(UserService userService) {
this.userService = userService;
}
public void setCurrentUser(User user) {
RequestContextHolder.currentRequestAttributes().setAttribute(USER_ATTRIBUTES, user, RequestAttributes.SCOPE_REQUEST);

View File

@@ -5,8 +5,7 @@ import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.viewmodel.admin.dashboard.IndexVM;
import com.mindskip.xzs.service.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@@ -15,16 +14,23 @@ import java.util.List;
@RestController("AdminDashboardController")
@RequestMapping(value = "/api/admin/dashboard")
@AllArgsConstructor
public class DashboardController extends BaseApiController {
private final ExamPaperService examPaperService;
private final QuestionService questionService;
private final ExamPaperAnswerService examPaperAnswerService;
private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
private final UserEventLogService userEventLogService;
@Autowired
public DashboardController(ExamPaperService examPaperService, QuestionService questionService, ExamPaperAnswerService examPaperAnswerService, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, UserEventLogService userEventLogService) {
this.examPaperService = examPaperService;
this.questionService = questionService;
this.examPaperAnswerService = examPaperAnswerService;
this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
this.userEventLogService = userEventLogService;
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public RestResponse<IndexVM> Index() {
IndexVM vm = new IndexVM();

View File

@@ -10,7 +10,7 @@ import com.mindskip.xzs.viewmodel.admin.education.SubjectEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.education.SubjectResponseVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -18,11 +18,15 @@ import java.util.List;
@RestController("AdminEducationController")
@RequestMapping(value = "/api/admin/education")
@AllArgsConstructor
public class EducationController extends BaseApiController {
private final SubjectService subjectService;
@Autowired
public EducationController(SubjectService subjectService) {
this.subjectService = subjectService;
}
@RequestMapping(value = "/subject/list", method = RequestMethod.POST)
public RestResponse<List<Subject>> list() {
List<Subject> subjects = subjectService.allSubject();

View File

@@ -0,0 +1,54 @@
package com.mindskip.xzs.controller.admin;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.ExamPaperAnswer;
import com.mindskip.xzs.domain.Subject;
import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController("AdminExamPaperAnswerController")
@RequestMapping(value = "/api/admin/examPaperAnswer")
public class ExamPaperAnswerController extends BaseApiController {
private final ExamPaperAnswerService examPaperAnswerService;
private final SubjectService subjectService;
private final UserService userService;
@Autowired
public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, SubjectService subjectService, UserService userService) {
this.examPaperAnswerService = examPaperAnswerService;
this.subjectService = subjectService;
this.userService = userService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageJudgeList(@RequestBody ExamPaperAnswerPageRequestVM model) {
PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.adminPage(model);
PageInfo<ExamPaperAnswerPageResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> {
ExamPaperAnswerPageResponseVM vm = modelMapper.map(e, ExamPaperAnswerPageResponseVM.class);
Subject subject = subjectService.selectById(vm.getSubjectId());
vm.setDoTime(ExamUtil.secondToVM(e.getDoTime()));
vm.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
vm.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
vm.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
vm.setSubjectName(subject.getName());
vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
User user = userService.selectById(e.getCreateUser());
vm.setUserName(user.getUserName());
return vm;
});
return RestResponse.ok(page);
}
}

View File

@@ -10,18 +10,22 @@ import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.exam.ExamResponseVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController("AdminExamPaperController")
@RequestMapping(value = "/api/admin/exam/paper")
@AllArgsConstructor
public class ExamPaperController extends BaseApiController {
private final ExamPaperService examPaperService;
@Autowired
public ExamPaperController(ExamPaperService examPaperService) {
this.examPaperService = examPaperService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamResponseVM>> pageList(@RequestBody ExamPaperPageRequestVM model) {
PageInfo<ExamPaper> pageInfo = examPaperService.page(model);

View File

@@ -14,7 +14,7 @@ import com.mindskip.xzs.viewmodel.admin.message.MessagePageRequestVM;
import com.mindskip.xzs.viewmodel.admin.message.MessageResponseVM;
import com.mindskip.xzs.viewmodel.admin.message.MessageSendVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -27,12 +27,17 @@ import java.util.stream.Collectors;
@RestController("AdminMessageController")
@RequestMapping(value = "/api/admin/message")
@AllArgsConstructor
public class MessageController extends BaseApiController {
private final MessageService messageService;
private final UserService userService;
@Autowired
public MessageController(MessageService messageService, UserService userService) {
this.messageService = messageService;
this.userService = userService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<MessageResponseVM>> pageList(@RequestBody MessagePageRequestVM model) {
PageInfo<Message> pageInfo = messageService.page(model);

View File

@@ -14,21 +14,25 @@ import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.question.QuestionPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.question.QuestionResponseVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.utility.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController("AdminQuestionController")
@RequestMapping(value = "/api/admin/question")
@AllArgsConstructor
public class QuestionController extends BaseApiController {
private final QuestionService questionService;
private final TextContentService textContentService;
@Autowired
public QuestionController(QuestionService questionService, TextContentService textContentService) {
this.questionService = questionService;
this.textContentService = textContentService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<QuestionResponseVM>> pageList(@RequestBody QuestionPageRequestVM model) {
PageInfo<Question> pageInfo = questionService.page(model);

View File

@@ -11,18 +11,22 @@ import com.mindskip.xzs.viewmodel.admin.task.TaskPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.task.TaskPageResponseVM;
import com.mindskip.xzs.viewmodel.admin.task.TaskRequestVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController("AdminTaskController")
@RequestMapping(value = "/api/admin/task")
@AllArgsConstructor
public class TaskController extends BaseApiController {
private final TaskExamService taskExamService;
@Autowired
public TaskController(TaskExamService taskExamService) {
this.taskExamService = taskExamService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<TaskPageResponseVM>> pageList(@RequestBody TaskPageRequestVM model) {
PageInfo<TaskExam> pageInfo = taskExamService.page(model);

View File

@@ -8,10 +8,9 @@ import com.mindskip.xzs.service.FileUpload;
import com.mindskip.xzs.service.UserService;
import com.mindskip.xzs.viewmodel.admin.file.UeditorConfigVM;
import com.mindskip.xzs.viewmodel.admin.file.UploadResultVM;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -23,8 +22,6 @@ import java.io.InputStream;
import java.util.Arrays;
@Slf4j
@AllArgsConstructor
@RequestMapping("/api/admin/upload")
@RestController("AdminUploadController")
public class UploadController extends BaseApiController {
@@ -36,6 +33,13 @@ public class UploadController extends BaseApiController {
private static final String IMAGE_UPLOAD_FILE = "upFile";
private final UserService userService;
@Autowired
public UploadController(FileUpload fileUpload, SystemConfig systemConfig, UserService userService) {
this.fileUpload = fileUpload;
this.systemConfig = systemConfig;
this.userService = userService;
}
@ResponseBody
@RequestMapping("/configAndUpload")
public Object upload(HttpServletRequest request, HttpServletResponse response) {

View File

@@ -13,10 +13,9 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.viewmodel.admin.user.*;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.admin.user.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -30,13 +29,19 @@ import java.util.UUID;
*/
@RestController("AdminUserController")
@RequestMapping(value = "/api/admin/user")
@AllArgsConstructor
public class UserController extends BaseApiController {
private final UserService userService;
private final UserEventLogService userEventLogService;
private final AuthenticationService authenticationService;
@Autowired
public UserController(UserService userService, UserEventLogService userEventLogService, AuthenticationService authenticationService) {
this.userService = userService;
this.userEventLogService = userEventLogService;
this.authenticationService = authenticationService;
}
@RequestMapping(value = "/page/list", method = RequestMethod.POST)
public RestResponse<PageInfo<UserResponseVM>> pageList(@RequestBody UserPageRequestVM model) {

View File

@@ -13,9 +13,7 @@ import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.JsonUtil;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@@ -27,7 +25,6 @@ import java.util.stream.Collectors;
@RestController("StudentDashboardController")
@RequestMapping(value = "/api/student/dashboard")
@AllArgsConstructor
public class DashboardController extends BaseApiController {
private final UserService userService;
@@ -37,6 +34,16 @@ public class DashboardController extends BaseApiController {
private final TaskExamCustomerAnswerService taskExamCustomerAnswerService;
private final TextContentService textContentService;
@Autowired
public DashboardController(UserService userService, ExamPaperService examPaperService, QuestionService questionService, TaskExamService taskExamService, TaskExamCustomerAnswerService taskExamCustomerAnswerService, TextContentService textContentService) {
this.userService = userService;
this.examPaperService = examPaperService;
this.questionService = questionService;
this.taskExamService = taskExamService;
this.taskExamCustomerAnswerService = taskExamCustomerAnswerService;
this.textContentService = textContentService;
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public RestResponse<IndexVM> index() {
IndexVM indexVM = new IndexVM();

View File

@@ -8,7 +8,7 @@ import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.SubjectService;
import com.mindskip.xzs.viewmodel.student.education.SubjectEditRequestVM;
import com.mindskip.xzs.viewmodel.student.education.SubjectVM;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -16,11 +16,15 @@ import java.util.stream.Collectors;
@RestController("StudentEducationController")
@RequestMapping(value = "/api/student/education")
@AllArgsConstructor
public class EducationController extends BaseApiController {
private final SubjectService subjectService;
@Autowired
public EducationController(SubjectService subjectService) {
this.subjectService = subjectService;
}
@RequestMapping(value = "/subject/list", method = RequestMethod.POST)
public RestResponse<List<SubjectVM>> list() {
User user = getCurrentUser();

View File

@@ -18,8 +18,7 @@ import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
@@ -28,7 +27,6 @@ import java.util.Date;
@RestController("StudentExamPaperAnswerController")
@RequestMapping(value = "/api/student/exampaper/answer")
@AllArgsConstructor
public class ExamPaperAnswerController extends BaseApiController {
private final ExamPaperAnswerService examPaperAnswerService;
@@ -36,6 +34,14 @@ public class ExamPaperAnswerController extends BaseApiController {
private final SubjectService subjectService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, ExamPaperService examPaperService, SubjectService subjectService, ApplicationEventPublisher eventPublisher) {
this.examPaperAnswerService = examPaperAnswerService;
this.examPaperService = examPaperService;
this.subjectService = subjectService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageList(@RequestBody @Valid ExamPaperAnswerPageVM model) {

View File

@@ -11,7 +11,7 @@ import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
@@ -19,13 +19,19 @@ import javax.validation.Valid;
@RestController("StudentExamPaperController")
@RequestMapping(value = "/api/student/exam/paper")
@AllArgsConstructor
public class ExamPaperController extends BaseApiController {
private final ExamPaperService examPaperService;
private final ExamPaperAnswerService examPaperAnswerService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public ExamPaperController(ExamPaperService examPaperService, ExamPaperAnswerService examPaperAnswerService, ApplicationEventPublisher eventPublisher) {
this.examPaperService = examPaperService;
this.examPaperAnswerService = examPaperAnswerService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
public RestResponse<ExamPaperEditRequestVM> select(@PathVariable Integer id) {

View File

@@ -20,12 +20,11 @@ import com.mindskip.xzs.viewmodel.student.question.answer.QuestionAnswerVM;
import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM;
import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController("StudentQuestionAnswerController")
@RequestMapping(value = "/api/student/question/answer")
@AllArgsConstructor
public class QuestionAnswerController extends BaseApiController {
private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
@@ -33,6 +32,14 @@ public class QuestionAnswerController extends BaseApiController {
private final TextContentService textContentService;
private final SubjectService subjectService;
@Autowired
public QuestionAnswerController(ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, QuestionService questionService, TextContentService textContentService, SubjectService subjectService) {
this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
this.questionService = questionService;
this.textContentService = textContentService;
this.subjectService = subjectService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<QuestionPageStudentResponseVM>> pageList(@RequestBody QuestionPageStudentRequestVM model) {
model.setCreateUser(getCurrentUser().getId());

View File

@@ -2,15 +2,17 @@ package com.mindskip.xzs.controller.student;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.service.QuestionService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController("StudentQuestionController")
@RequestMapping(value = "/api/student/question")
@AllArgsConstructor
public class QuestionController extends BaseApiController {
private final QuestionService questionService;
@Autowired
public QuestionController(QuestionService questionService) {
this.questionService = questionService;
}
}

View File

@@ -5,8 +5,7 @@ import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.service.FileUpload;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@@ -18,8 +17,6 @@ import java.io.IOException;
import java.io.InputStream;
@Slf4j
@AllArgsConstructor
@RequestMapping("/api/student/upload")
@RestController("StudentUploadController")
public class UploadController extends BaseApiController {
@@ -27,6 +24,12 @@ public class UploadController extends BaseApiController {
private final FileUpload fileUpload;
private final UserService userService;
@Autowired
public UploadController(FileUpload fileUpload, UserService userService) {
this.fileUpload = fileUpload;
this.userService = userService;
}
@RequestMapping("/image")
@ResponseBody

View File

@@ -17,9 +17,8 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.student.user.*;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.student.user.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
@@ -35,7 +34,6 @@ import java.util.stream.Collectors;
*/
@RestController("StudentUserController")
@RequestMapping(value = "/api/student/user")
@AllArgsConstructor
public class UserController extends BaseApiController {
private final UserService userService;
@@ -44,6 +42,15 @@ public class UserController extends BaseApiController {
private final AuthenticationService authenticationService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public UserController(UserService userService, UserEventLogService userEventLogService, MessageService messageService, AuthenticationService authenticationService, ApplicationEventPublisher eventPublisher) {
this.userService = userService;
this.userEventLogService = userEventLogService;
this.messageService = messageService;
this.authenticationService = authenticationService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/current", method = RequestMethod.POST)
public RestResponse<UserResponseVM> current() {
User user = getCurrentUser();

View File

@@ -11,7 +11,7 @@ import com.mindskip.xzs.service.UserTokenService;
import com.mindskip.xzs.utility.WxUtil;
import com.mindskip.xzs.viewmodel.wx.student.user.BindInfo;
import com.mindskip.xzs.domain.User;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -21,7 +21,6 @@ import javax.validation.constraints.NotBlank;
@Controller("WXStudentAuthController")
@RequestMapping(value = "/api/wx/student/auth")
@AllArgsConstructor
@ResponseBody
public class AuthController extends BaseWXApiController {
@@ -30,6 +29,14 @@ public class AuthController extends BaseWXApiController {
private final UserService userService;
private final UserTokenService userTokenService;
@Autowired
public AuthController(SystemConfig systemConfig, AuthenticationService authenticationService, UserService userService, UserTokenService userTokenService) {
this.systemConfig = systemConfig;
this.authenticationService = authenticationService;
this.userService = userService;
this.userTokenService = userTokenService;
}
@RequestMapping(value = "/bind", method = RequestMethod.POST)
public RestResponse bind(@Valid BindInfo model) {
User user = userService.getUserByUserName(model.getUserName());

View File

@@ -16,8 +16,7 @@ import com.mindskip.xzs.service.TextContentService;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.JsonUtil;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -31,7 +30,6 @@ import java.util.stream.Collectors;
@Controller("WXStudentDashboardController")
@RequestMapping(value = "/api/wx/student/dashboard")
@AllArgsConstructor
@ResponseBody
public class DashboardController extends BaseWXApiController {
@@ -40,6 +38,14 @@ public class DashboardController extends BaseWXApiController {
private final TaskExamService taskExamService;
private final TaskExamCustomerAnswerService taskExamCustomerAnswerService;
@Autowired
public DashboardController(ExamPaperService examPaperService, TextContentService textContentService, TaskExamService taskExamService, TaskExamCustomerAnswerService taskExamCustomerAnswerService) {
this.examPaperService = examPaperService;
this.textContentService = textContentService;
this.taskExamService = taskExamService;
this.taskExamCustomerAnswerService = taskExamCustomerAnswerService;
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public RestResponse<IndexVM> index() {
IndexVM indexVM = new IndexVM();

View File

@@ -13,15 +13,13 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.student.exam.*;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.*;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperReadVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitItemVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -34,7 +32,6 @@ import java.util.stream.Collectors;
@Controller("WXStudentExamPaperAnswerController")
@RequestMapping(value = "/api/wx/student/exampaper/answer")
@AllArgsConstructor
@ResponseBody
public class ExamPaperAnswerController extends BaseWXApiController {
@@ -43,6 +40,14 @@ public class ExamPaperAnswerController extends BaseWXApiController {
private final ApplicationEventPublisher eventPublisher;
private final ExamPaperService examPaperService;
@Autowired
public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, SubjectService subjectService, ApplicationEventPublisher eventPublisher, ExamPaperService examPaperService) {
this.examPaperAnswerService = examPaperAnswerService;
this.subjectService = subjectService;
this.eventPublisher = eventPublisher;
this.examPaperService = examPaperService;
}
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageList(@Valid ExamPaperAnswerPageVM model) {
model.setCreateUser(getCurrentUser().getId());

View File

@@ -12,7 +12,7 @@ import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -21,13 +21,18 @@ import javax.validation.Valid;
@Controller("WXStudentExamController")
@RequestMapping(value = "/api/wx/student/exampaper")
@AllArgsConstructor
@ResponseBody
public class ExamPaperController extends BaseWXApiController {
private final ExamPaperService examPaperService;
private final SubjectService subjectService;
@Autowired
public ExamPaperController(ExamPaperService examPaperService, SubjectService subjectService) {
this.examPaperService = examPaperService;
this.subjectService = subjectService;
}
@RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
public RestResponse<ExamPaperEditRequestVM> select(@PathVariable Integer id) {

View File

@@ -17,9 +17,8 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.student.user.*;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.student.user.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -36,7 +35,6 @@ import java.util.stream.Collectors;
*/
@Controller("WXStudentUserController")
@RequestMapping(value = "/api/wx/student/user")
@AllArgsConstructor
@ResponseBody
public class UserController extends BaseWXApiController {
@@ -46,6 +44,15 @@ public class UserController extends BaseWXApiController {
private final AuthenticationService authenticationService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public UserController(UserService userService, UserEventLogService userEventLogService, MessageService messageService, AuthenticationService authenticationService, ApplicationEventPublisher eventPublisher) {
this.userService = userService;
this.userEventLogService = userEventLogService;
this.messageService = messageService;
this.authenticationService = authenticationService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/current", method = RequestMethod.POST)
public RestResponse<UserResponseVM> current() {
User user = getCurrentUser();

View File

@@ -1,12 +1,34 @@
package com.mindskip.xzs.domain;
import lombok.Data;
import java.util.List;
@Data
public class ExamPaperAnswerInfo {
public ExamPaper examPaper;
public ExamPaperAnswer examPaperAnswer;
public List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers;
public ExamPaper getExamPaper() {
return examPaper;
}
public void setExamPaper(ExamPaper examPaper) {
this.examPaper = examPaper;
}
public ExamPaperAnswer getExamPaperAnswer() {
return examPaperAnswer;
}
public void setExamPaperAnswer(ExamPaperAnswer examPaperAnswer) {
this.examPaperAnswer = examPaperAnswer;
}
public List<ExamPaperQuestionCustomerAnswer> getExamPaperQuestionCustomerAnswers() {
return examPaperQuestionCustomerAnswers;
}
public void setExamPaperQuestionCustomerAnswers(List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers) {
this.examPaperQuestionCustomerAnswers = examPaperQuestionCustomerAnswers;
}
}

View File

@@ -7,7 +7,6 @@ import java.util.Map;
public enum RoleEnum {
STUDENT(1, "STUDENT"),
TEACHER(2, "TEACHER"),
ADMIN(3, "ADMIN");
int code;

View File

@@ -1,9 +1,22 @@
package com.mindskip.xzs.domain.exam;
import lombok.Data;
@Data
public class ExamPaperQuestionItemObject {
private Integer id;
private Integer itemOrder;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getItemOrder() {
return itemOrder;
}
public void setItemOrder(Integer itemOrder) {
this.itemOrder = itemOrder;
}
}

View File

@@ -1,13 +1,27 @@
package com.mindskip.xzs.domain.exam;
import lombok.Data;
import java.util.List;
@Data
public class ExamPaperTitleItemObject {
private String name;
private List<ExamPaperQuestionItemObject> questionItems;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<ExamPaperQuestionItemObject> getQuestionItems() {
return questionItems;
}
public void setQuestionItems(List<ExamPaperQuestionItemObject> questionItems) {
this.questionItems = questionItems;
}
}

View File

@@ -1,10 +1,32 @@
package com.mindskip.xzs.domain.other;
import lombok.Data;
@Data
public class ExamPaperAnswerUpdate {
private Integer id;
private Integer customerScore;
private Boolean doRight;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getCustomerScore() {
return customerScore;
}
public void setCustomerScore(Integer customerScore) {
this.customerScore = customerScore;
}
public Boolean getDoRight() {
return doRight;
}
public void setDoRight(Boolean doRight) {
this.doRight = doRight;
}
}

View File

@@ -1,11 +1,24 @@
package com.mindskip.xzs.domain.other;
import lombok.Data;
@Data
public class KeyValue {
private String name;
private Integer value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}

View File

@@ -1,8 +1,6 @@
package com.mindskip.xzs.domain.question;
import lombok.Data;
@Data
public class QuestionItemObject {
private String prefix;
@@ -10,4 +8,28 @@ public class QuestionItemObject {
private String content;
private Integer score;
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
}

View File

@@ -1,11 +1,9 @@
package com.mindskip.xzs.domain.question;
import lombok.Data;
import java.util.List;
@Data
public class QuestionObject {
private String titleContent;
@@ -15,4 +13,36 @@ public class QuestionObject {
private List<QuestionItemObject> questionItemObjects;
private String correct;
public String getTitleContent() {
return titleContent;
}
public void setTitleContent(String titleContent) {
this.titleContent = titleContent;
}
public String getAnalyze() {
return analyze;
}
public void setAnalyze(String analyze) {
this.analyze = analyze;
}
public List<QuestionItemObject> getQuestionItemObjects() {
return questionItemObjects;
}
public void setQuestionItemObjects(List<QuestionItemObject> questionItemObjects) {
this.questionItemObjects = questionItemObjects;
}
public String getCorrect() {
return correct;
}
public void setCorrect(String correct) {
this.correct = correct;
}
}

View File

@@ -1,8 +1,6 @@
package com.mindskip.xzs.domain.task;
import lombok.Data;
@Data
public class TaskItemAnswerObject {
private Integer examPaperId;
private Integer examPaperAnswerId;
@@ -17,4 +15,28 @@ public class TaskItemAnswerObject {
this.examPaperAnswerId = examPaperAnswerId;
this.status = status;
}
public Integer getExamPaperId() {
return examPaperId;
}
public void setExamPaperId(Integer examPaperId) {
this.examPaperId = examPaperId;
}
public Integer getExamPaperAnswerId() {
return examPaperAnswerId;
}
public void setExamPaperAnswerId(Integer examPaperAnswerId) {
this.examPaperAnswerId = examPaperAnswerId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}

View File

@@ -1,10 +1,32 @@
package com.mindskip.xzs.domain.task;
import lombok.Data;
@Data
public class TaskItemObject {
private Integer examPaperId;
private String examPaperName;
private Integer itemOrder;
public Integer getExamPaperId() {
return examPaperId;
}
public void setExamPaperId(Integer examPaperId) {
this.examPaperId = examPaperId;
}
public String getExamPaperName() {
return examPaperName;
}
public void setExamPaperName(String examPaperName) {
this.examPaperName = examPaperName;
}
public Integer getItemOrder() {
return itemOrder;
}
public void setItemOrder(Integer itemOrder) {
this.itemOrder = itemOrder;
}
}

View File

@@ -1,6 +1,5 @@
package com.mindskip.xzs.listener;
import com.mindskip.xzs.domain.*;
import com.mindskip.xzs.domain.*;
import com.mindskip.xzs.domain.enums.ExamPaperTypeEnum;
import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
@@ -9,7 +8,7 @@ import com.mindskip.xzs.service.ExamPaperAnswerService;
import com.mindskip.xzs.service.ExamPaperQuestionCustomerAnswerService;
import com.mindskip.xzs.service.TaskExamCustomerAnswerService;
import com.mindskip.xzs.service.TextContentService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -22,15 +21,21 @@ import java.util.List;
* @author 武汉思维跳跃科技有限公司
*/
@Component
@AllArgsConstructor
public class CalculateExamPaperAnswerListener implements ApplicationListener<CalculateExamPaperAnswerCompleteEvent> {
private final ExamPaperAnswerService examPaperAnswerService;
private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
private final TextContentService textContentService;
private final TaskExamCustomerAnswerService examCustomerAnswerService;
@Autowired
public CalculateExamPaperAnswerListener(ExamPaperAnswerService examPaperAnswerService, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, TextContentService textContentService, TaskExamCustomerAnswerService examCustomerAnswerService) {
this.examPaperAnswerService = examPaperAnswerService;
this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
this.textContentService = textContentService;
this.examCustomerAnswerService = examCustomerAnswerService;
}
@Override
@Transactional
public void onApplicationEvent(CalculateExamPaperAnswerCompleteEvent calculateExamPaperAnswerCompleteEvent) {

View File

@@ -2,15 +2,19 @@ package com.mindskip.xzs.listener;
import com.mindskip.xzs.event.UserEvent;
import com.mindskip.xzs.service.UserEventLogService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
@AllArgsConstructor
public class UserLogListener implements ApplicationListener<UserEvent> {
private UserEventLogService userEventLogService;
private final UserEventLogService userEventLogService;
@Autowired
public UserLogListener(UserEventLogService userEventLogService) {
this.userEventLogService = userEventLogService;
}
@Override
public void onApplicationEvent(UserEvent userEvent) {

View File

@@ -31,4 +31,5 @@ public interface ExamPaperAnswerMapper extends BaseMapper<ExamPaperAnswer> {
ExamPaperAnswer getByPidUid(@Param("pid") Integer paperId, @Param("uid") Integer uid);
List<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM);
}

View File

@@ -48,4 +48,6 @@ public interface ExamPaperAnswerService extends BaseService<ExamPaperAnswer> {
Integer selectAllCount();
List<Integer> selectMothCount();
PageInfo<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM);
}

View File

@@ -5,21 +5,25 @@ import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.AuthenticationService;
import com.mindskip.xzs.service.UserService;
import com.mindskip.xzs.utility.RsaUtil;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author 武汉思维跳跃科技有限公司
*/
@Service
@AllArgsConstructor
public class AuthenticationServiceImpl implements AuthenticationService {
private final UserService userService;
private final SystemConfig systemConfig;
@Autowired
public AuthenticationServiceImpl(UserService userService, SystemConfig systemConfig) {
this.userService = userService;
this.systemConfig = systemConfig;
}
/**
* @param username username

View File

@@ -2,12 +2,14 @@ package com.mindskip.xzs.service.impl;
import com.mindskip.xzs.repository.BaseMapper;
import com.mindskip.xzs.service.BaseService;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public abstract class BaseServiceImpl<T> implements BaseService<T> {
BaseMapper<T> baseMapper;
private final BaseMapper<T> baseMapper;
public BaseServiceImpl(BaseMapper<T> baseMapper) {
this.baseMapper = baseMapper;
}
@Override
public int deleteById(Integer id) {

View File

@@ -268,4 +268,11 @@ public class ExamPaperAnswerServiceImpl extends BaseServiceImpl<ExamPaperAnswer>
}
return examPaperAnswer;
}
@Override
public PageInfo<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM) {
return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
examPaperAnswerMapper.adminPage(requestVM));
}
}

View File

@@ -11,19 +11,24 @@ import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import lombok.AllArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
@Service
@AllArgsConstructor
public class FileUploadImpl implements FileUpload {
private final Logger logger = LoggerFactory.getLogger(FileUpload.class);
private final SystemConfig systemConfig;
@Autowired
public FileUploadImpl(SystemConfig systemConfig) {
this.systemConfig = systemConfig;
}
@Override
public String uploadFile(InputStream inputStream, long size, String extName) {
QnConfig qnConfig = systemConfig.getQn();

View File

@@ -9,7 +9,7 @@ import com.mindskip.xzs.viewmodel.admin.message.MessagePageRequestVM;
import com.mindskip.xzs.viewmodel.student.user.MessageRequestVM;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -17,12 +17,17 @@ import java.util.Date;
import java.util.List;
@Service
@AllArgsConstructor
public class MessageServiceImpl implements MessageService {
private final MessageMapper messageMapper;
private final MessageUserMapper messageUserMapper;
@Autowired
public MessageServiceImpl(MessageMapper messageMapper, MessageUserMapper messageUserMapper) {
this.messageMapper = messageMapper;
this.messageUserMapper = messageUserMapper;
}
@Override
public List<Message> selectMessageByIds(List<Integer> ids) {
return messageMapper.selectByIds(ids);

View File

@@ -16,7 +16,7 @@ import java.util.List;
@Service
public class SubjectServiceImpl extends BaseServiceImpl<Subject> implements SubjectService {
private final static String CACHE_NAME = "Subject";
private final static String CACHE_NAME = "xzs:subject";
private final SubjectMapper subjectMapper;
@Autowired

View File

@@ -17,7 +17,7 @@ import java.util.stream.Collectors;
@Service
public class TextContentServiceImpl extends BaseServiceImpl<TextContent> implements TextContentService {
private final static String CACHE_NAME = "TextContent";
private final static String CACHE_NAME = "xzs:textcontent";
private final TextContentMapper textContentMapper;
@Autowired

View File

@@ -26,7 +26,7 @@ import java.util.Map;
@Service
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
private final static String CACHE_NAME = "User";
private final static String CACHE_NAME = "xzs:user";
private final UserMapper userMapper;
private final ApplicationEventPublisher eventPublisher;

View File

@@ -20,7 +20,7 @@ import java.util.UUID;
@Service
public class UserTokenServiceImpl extends BaseServiceImpl<UserToken> implements UserTokenService {
private final static String CACHE_NAME = "Token";
private final static String CACHE_NAME = "xzs:token";
private final UserTokenMapper userTokenMapper;
private final UserService userService;
private final SystemConfig systemConfig;

View File

@@ -1,12 +1,30 @@
package com.mindskip.xzs.utility;
import lombok.Data;
import java.io.Serializable;
@Data
public class WxResponse implements Serializable {
private static final long serialVersionUID = -8496869159673561976L;
private String session_key;
private String openid;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getSession_key() {
return session_key;
}
public void setSession_key(String session_key) {
this.session_key = session_key;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
}

View File

@@ -1,16 +1,21 @@
package com.mindskip.xzs.viewmodel;
import com.mindskip.xzs.utility.ModelMapperSingle;
import lombok.Data;
import org.modelmapper.ModelMapper;
/**
* @author 武汉思维跳跃科技有限公司
*/
@Data
public class BaseVM {
protected static ModelMapper modelMapper = ModelMapperSingle.Instance();
public static ModelMapper getModelMapper() {
return modelMapper;
}
public static void setModelMapper(ModelMapper modelMapper) {
BaseVM.modelMapper = modelMapper;
}
}

Some files were not shown because too many files have changed in this diff Show More