Compare commits

...

392 Commits

Author SHA1 Message Date
joshen
5dc2f6f79e Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-17 16:45:45 +08:00
joshen
e108b56a63 Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-16 23:27:07 +08:00
joshen
6cff9711f9 Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-16 23:04:41 +08:00
joshen
02564b3798 Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-16 20:11:46 +08:00
joshen
5e23586451 Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-16 17:39:02 +08:00
joshen
cc77356bf0 Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-14 16:15:23 +08:00
joshen
b1704c8c5f Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515
# Conflicts:
#	src/components/UserCenter/menu.vue
2025-02-13 18:14:26 +08:00
joshen
346f3dab1d Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515 2025-02-13 17:57:49 +08:00
zhangsir
debb88f952 Merge branch 'zcwy_1127_teacher' into dev0515 2025-01-15 11:08:55 +08:00
zhangsir
f3936d5110 授课记录调整 2025-01-15 11:07:24 +08:00
joshen
914450750e Merge remote-tracking branch '121/dev0515' into dev0515 2024-12-24 16:27:14 +08:00
joshen
2fe10d88f2 Merge branch 'zcwy_0822_case' into dev0515
# Conflicts:
#	src/views/hotforum/Index.vue
2024-12-24 16:26:49 +08:00
zhangsir
c5f6f5c83e 替换图片 2024-12-24 16:22:37 +08:00
zhangsir
5be181df8c 回退授课记录页面 2024-12-12 16:45:08 +08:00
zhangsir
189e157c3d Merge branch 'zcwy_0822_case' into dev0515 2024-12-10 19:54:20 +08:00
zhangsir
45027ca77e 2024 2024-12-10 19:53:38 +08:00
zhangsir
fe78855497 Merge branch 'zcwy_1127_teacher' into dev0515 2024-12-10 14:34:48 +08:00
zhangsir
acbacac737 讲师管理授课记录讲师端 2024-12-10 14:32:51 +08:00
zhangsir
bbb2f3c1a3 Merge branch 'pingcode-1104' into dev0515 2024-12-04 16:48:58 +08:00
zhangsir
7375f9df04 上传视频修改逻辑 2024-12-04 16:47:57 +08:00
zhangsir
a303a5199c Merge branch 'zcwy_1127_teacher' into dev0515 2024-12-02 17:44:31 +08:00
zhangsir
1ad2c80c9b 添加教师修改接口 2024-12-02 17:43:50 +08:00
zhangsir
1a03c84db0 Merge branch 'zcwy_1127_teacher' into dev0515 2024-11-27 18:12:36 +08:00
zhangsir
21afc82036 添加教师修改接口 2024-11-27 18:11:49 +08:00
zhangsir
4cf28b4e91 Merge branch 'zcwy_0822_case' into dev0515 2024-11-14 17:36:07 +08:00
zhangsir
89ff9c5da7 Merge branch 'pingcode-1104' into dev0515 2024-11-11 09:39:06 +08:00
zhangsir
efb70690c3 视频选择回显修改 2024-11-11 09:38:25 +08:00
zhangsir
c17e55bcac Merge branch 'pingcode-1104' into dev0515 2024-11-10 19:51:02 +08:00
zhangsir
f32d6992fa 视频选择回显修改 2024-11-10 19:50:23 +08:00
zhangsir
9839daa3b5 Merge branch 'pingcode-1104' into dev0515 2024-11-10 19:23:44 +08:00
zhangsir
c84c338442 视频选择修改 2024-11-10 19:22:50 +08:00
zhangsir
c25c50838f Merge branch 'pingcode-1104' into dev0515 2024-11-10 17:26:37 +08:00
zhangsir
ff7dd81608 视频选择修改 2024-11-10 17:25:48 +08:00
zhangsir
1600029a6f Merge branch 'pingcode-1104' into dev0515 2024-11-08 19:36:10 +08:00
zhangsir
ea2740542e 视频拖动修改 2024-11-08 19:35:32 +08:00
zhangsir
5593381330 Merge branch 'pingcode-1104' into dev0515 2024-11-08 19:13:53 +08:00
zhangsir
7ccb624724 视频选择修改 2024-11-08 19:13:15 +08:00
zhangsir
9e8941de2d Merge branch 'pingcode-1104' into dev0515 2024-11-08 13:40:08 +08:00
zhangsir
638d6c5677 视频长传修改逻辑 2024-11-08 13:39:10 +08:00
zhangsir
1d9b01c78e 解决合并代码导致的报错 2024-11-04 17:51:57 +08:00
zhangsir
a9ec47a39a 解决合并代码导致的报错 2024-11-04 16:35:34 +08:00
zhangsir
c64969e9b7 Merge branch 'pingcode-1104' into dev0515
# Conflicts:
#	src/components/PortalHeader.vue
#	src/components/VideoPlayer/progress-bar.vue
#	src/views/study/coursenew.vue
2024-11-04 16:29:52 +08:00
zhangsir
642907b386 Merge branch 'zcwy_0822_case' into dev0515
# Conflicts:
#	src/views/lecturer/TwoCoaching.vue
2024-11-04 15:30:12 +08:00
zhangsir
ecfc6fcae7 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-11-01 14:28:48 +08:00
zhangsir
de88a75aaa 视频取消token参数,改为sign增加工号 2024-11-01 14:27:50 +08:00
zhangsir
a8fe656436 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-11-01 11:14:37 +08:00
zhangsir
b6bc60d8b9 视频增加token参数不加密 2024-11-01 11:13:53 +08:00
zhangsir
263bd22e5e Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-31 19:05:22 +08:00
zhangsir
22668d756f 视频增加token参数 2024-10-31 19:04:20 +08:00
zhangsir
cd19cd5f66 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-30 17:48:13 +08:00
zhangsir
041643a135 都改 2024-10-30 17:47:33 +08:00
zhangsir
885c7f9242 再改 2024-10-30 17:39:47 +08:00
zhangsir
6fd33ddd88 再改 2024-10-30 17:38:36 +08:00
zhangsir
f688f5086f Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-30 17:27:04 +08:00
zhangsir
3d4d3f4d25 改回去 2024-10-30 17:26:22 +08:00
zhangsir
cb954b8bce Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-30 15:20:43 +08:00
zhangsir
b386681aab userNo修改参数 2024-10-30 15:20:01 +08:00
zhangsir
eaf16801df Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-29 16:12:34 +08:00
zhangsir
4649580e6a 文字最大50 2024-10-29 16:11:59 +08:00
zhangsir
8872a41f31 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-29 15:58:41 +08:00
zhangsir
9eaf352cc3 最大999 2024-10-29 15:57:54 +08:00
zhangsir
14e05af3e5 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-29 14:55:01 +08:00
zhangsir
fd73a396d5 转换输入框 2024-10-29 14:54:20 +08:00
zhangsir
9e9141b424 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-28 19:03:22 +08:00
zhangsir
ab39bb3cf5 加载中 2024-10-28 19:02:42 +08:00
zhangsir
4cd553af41 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-28 17:35:14 +08:00
zhangsir
6ab1d86c53 加载中 2024-10-28 17:34:29 +08:00
zhangsir
a9d76bc959 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-28 16:52:31 +08:00
zhangsir
5ef39ae9dc 加载中 2024-10-28 16:51:45 +08:00
zhangsir
7679f78ef5 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-25 17:29:03 +08:00
zhangsir
45fb650b1b 上传视频的超时提示 2024-10-25 17:28:18 +08:00
zhangsir
bd2c58e03d Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-22 16:56:23 +08:00
zhangsir
3aa2229dbd 上传视频的提示 2024-10-22 16:55:29 +08:00
zhangsir
345a68111d Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-17 09:15:10 +08:00
zhangsir
8f014f65ab Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-10-16 16:50:32 +08:00
zhangsir
da4a563d03 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-10-16 16:49:59 +08:00
nisen
b9a24bcf29 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-10-09 11:23:28 +08:00
nisen
c326322469 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-10-09 11:11:46 +08:00
nisen
24d45506ce Merge branch 'zcwy_0723_hotforum' into dev0515 2024-10-09 10:52:25 +08:00
nisen
ffcc049215 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-10-09 09:18:14 +08:00
nisen
f1341430ad Merge branch 'zcwy_0723_hotforum' into dev0515
# Conflicts:
#	src/components/Course/exam.vue
2024-10-08 15:57:49 +08:00
nisen
4738642579 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-09-27 15:40:24 +08:00
nisen
f999c89102 尸体模板修改 2024-09-27 15:33:07 +08:00
nisen
6967ef24ed Merge remote-tracking branch '121/dev0515' into dev0515 2024-09-27 14:38:39 +08:00
nisen
f2ffeae2ae 尸体模板修改 2024-09-27 14:35:37 +08:00
zhangsir
2d74778f33 Merge branch 'zcwy_0726_download' into dev0515 2024-09-24 14:40:08 +08:00
zhangsir
9c2d95fa2b Merge branch 'zcwy_0716_learning' into dev0515 2024-09-19 16:56:09 +08:00
zhangsir
fa044187bc 个人中心临时修改,后期优化 2024-09-19 16:55:26 +08:00
zhangsir
007bd1a98f Merge branch 'zcwy_0822_case' into dev0515 2024-09-18 17:07:29 +08:00
zhangsir
23c6809590 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-09-18 10:27:17 +08:00
zhangsir
5b4319c6a7 Merge branch 'zcwy_0806_paihangb' into dev0515 2024-09-18 10:04:53 +08:00
zhangsir
3e41c309ad Merge branch 'zcwy_0822_case' into dev0515 2024-09-14 09:20:27 +08:00
zhangsir
7a8124f1e1 Merge branch 'zcwy_0822_case' into dev0515 2024-09-13 09:22:25 +08:00
zhangsir
a8c9577be9 Merge branch 'zcwy_0822_case' into dev0515 2024-09-12 20:13:16 +08:00
zhangsir
4a5637382f Merge branch 'zcwy_0822_case' into dev0515 2024-09-12 14:57:46 +08:00
nisen
b98eda5f4b Merge remote-tracking branch 'yx/zcwy_0822_case' into dev0515 2024-09-12 14:06:16 +08:00
nisen
9d144ddae0 Merge branch 'zcwy_0822_case' into dev0515 2024-09-11 20:48:59 +08:00
nisen
ccc83ffd7d Merge branch 'zcwy_0716_learning' into dev0515 2024-09-11 20:21:25 +08:00
zhangsir
5119aadf66 防止404报错,临时注释 2024-09-11 20:19:08 +08:00
nisen
bcd5c4a89a Merge branch 'zcwy_0822_case' into dev0515 2024-09-11 20:05:15 +08:00
nisen
60eec2469d Merge branch 'zcwy_0822_case' into dev0515 2024-09-11 17:54:56 +08:00
nisen
85eb9a3072 Merge branch 'zcwy_0822_case' into dev0515 2024-09-11 16:08:43 +08:00
nisen
c53650685d Merge branch 'zcwy_0822_case' into dev0515 2024-09-10 16:08:29 +08:00
nisen
6c5e303ecb Merge branch 'zcwy_0822_case' into dev0515 2024-09-10 11:13:27 +08:00
nisen
6a5395810d Merge branch 'zcwy_0806_paihangb' into dev0515 2024-08-20 15:04:53 +08:00
nisen
bbfe50a640 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-08-12 10:02:58 +08:00
nisen
0ccd4e98ba Merge branch 'zcwy_0723_hotforum' into dev0515 2024-08-09 16:55:41 +08:00
nisen
faf6f6f5ab Merge branch 'zcwy_0723_hotforum' into dev0515 2024-08-09 16:39:13 +08:00
nisen
d906f4a21a Merge branch 'zcwy_0806_paihangb' into dev0515 2024-08-07 15:20:25 +08:00
nisen
631a09e01b Merge branch 'zcwy_0726_download' into dev0515 2024-08-06 17:11:35 +08:00
nisen
bd68695e4c Merge branch 'zcwy_0806_paihangb' into dev0515
# Conflicts:
#	src/views/user/ranking.vue
2024-08-06 17:06:27 +08:00
nisen
18a2d240ed Merge branch 'zcwy_0723_hotforum' into dev0515
# Conflicts:
#	src/components/Course/homework.vue
2024-08-06 15:58:29 +08:00
nisen
4203656c40 Merge branch 'zcwy_0726_download' into dev0515 2024-08-06 09:15:00 +08:00
nisen
82526c62a4 Merge branch 'zcwy_0726_download' into dev0515 2024-08-06 09:01:08 +08:00
nisen
480132fd22 Merge branch 'zcwy_0726_download' into dev0515 2024-08-05 15:18:36 +08:00
nisen
130d02886f Merge branch 'zcwy_0726_download' into dev0515 2024-08-05 15:05:27 +08:00
nisen
b641611c89 Merge branch 'zcwy_0726_download' into dev0515 2024-08-02 17:56:21 +08:00
nisen
1f89f9f5e8 Merge branch 'zcwy_0726_download' into dev0515 2024-08-02 11:39:31 +08:00
nisen
26a0dd4915 Merge branch 'zcwy_0726_download' into dev0515 2024-08-01 08:59:01 +08:00
nisen
f3da5f7faf Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 19:25:53 +08:00
nisen
6d41015537 Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 19:16:07 +08:00
nisen
41847cd6c3 Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 19:10:01 +08:00
nisen
e09d0e9971 Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 19:04:17 +08:00
nisen
7728fce064 Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 18:06:25 +08:00
nisen
30d2efee10 Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 17:39:51 +08:00
nisen
1cf5d2422b Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 17:20:14 +08:00
nisen
35100706d8 Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 14:43:20 +08:00
nisen
b0e5b16b8a Merge branch 'zcwy_0726_download' into dev0515 2024-07-31 14:33:49 +08:00
nisen
ae78edcc5d Merge branch 'zcwy_0726_download' into dev0515 2024-07-30 16:18:32 +08:00
nisen
5bcf83ed3f Merge branch 'zcwy_0726_download' into dev0515 2024-07-30 16:05:31 +08:00
nisen
d9e3377ce0 Merge branch 'zcwy_0726_download' into dev0515 2024-07-30 15:39:07 +08:00
nisen
aba11444a5 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-30 14:49:01 +08:00
nisen
7d94994f9e Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-30 14:22:19 +08:00
nisen
9d773496c4 Merge branch 'zcwy_0726_download' into dev0515 2024-07-29 15:55:44 +08:00
nisen
35be655238 Merge branch 'zcwy_0726_download' into dev0515 2024-07-29 14:10:59 +08:00
nisen
c4759f264e Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-29 14:10:49 +08:00
nisen
3f63d71ba6 Merge branch 'zcwy_0726_download' into dev0515 2024-07-29 09:44:09 +08:00
nisen
b142d473f9 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-26 18:32:57 +08:00
nisen
dce5bbdf7a Merge branch 'zcwy_0726_download' into dev0515 2024-07-26 16:30:24 +08:00
nisen
9c2853fd11 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-26 14:29:25 +08:00
nisen
5151bf6ad7 Merge remote-tracking branch 'yx/zcwy_0726_download' into dev0515 2024-07-26 14:19:02 +08:00
nisen
2acbd5609f Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-26 14:17:50 +08:00
nisen
2cbbe25b90 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-24 14:24:12 +08:00
nisen
f57601a55d Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-24 10:34:00 +08:00
nisen
3649729c06 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-23 16:16:27 +08:00
nisen
11e1becce9 Merge branch 'zcwy_0723_hotforum' into dev0515 2024-07-23 15:37:58 +08:00
nisen
e8982733fd Merge branch 'zcwy_0716_line' into dev0515 2024-07-23 08:47:58 +08:00
nisen
137b4d47b4 Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 18:39:32 +08:00
zhangsir
59571d216e 修改其他问题 2024-07-17 18:38:20 +08:00
nisen
eb020d336b Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 15:01:39 +08:00
zhangsir
f6244aa462 修改其他问题 2024-07-17 14:58:30 +08:00
nisen
28328e7aa7 Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 13:56:52 +08:00
zhangsir
f854a9c5e9 排查问题4 2024-07-17 13:55:52 +08:00
nisen
2b93db925d Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 11:50:36 +08:00
zhangsir
cb708079ba 排查问题3 2024-07-17 11:49:09 +08:00
nisen
791b40667a Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 11:33:24 +08:00
zhangsir
8a933a6330 排查问题2 2024-07-17 11:32:12 +08:00
nisen
a77996ad35 Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 10:39:02 +08:00
zhangsir
18adb406a2 排查问题1 2024-07-17 10:37:26 +08:00
nisen
ea3502e480 Merge branch 'zcwy_0716_learning' into dev0515 2024-07-17 09:58:05 +08:00
zhangsir
b40dd4fb96 排查问题 2024-07-17 09:48:42 +08:00
lu
d9b10f8176 Merge branch 'zcwy_0716_line' into dev0515 2024-07-17 09:13:09 +08:00
lu
6af37ca54c Merge branch 'zcwy_0716_learning' into dev0515 2024-07-16 17:53:24 +08:00
zhangsir
e82b7eb3cf 细节 2024-07-15 19:58:00 +08:00
zhangsir
61ca8cf49c Merge branch 'zcwy-master' into dev0515 2024-07-12 15:57:48 +08:00
zhangsir
c054026259 修改接口 2024-07-12 15:57:05 +08:00
zhangsir
247ddc6120 Merge branch 'zcwy-master' into dev0515 2024-07-12 14:34:42 +08:00
zhangsir
482cd48571 修改接口 2024-07-12 14:34:03 +08:00
zhangsir
300072e778 Merge branch 'dev-0711' into dev0515
# Conflicts:
#	src/components/PortalHeader.vue
2024-07-12 08:53:50 +08:00
zhangsir
ac6640c865 Merge branch 'zcwy-master' into dev0515 2024-07-11 19:09:45 +08:00
zhangsir
2dc9bcdbd3 修改 2024-07-11 19:09:02 +08:00
zhangsir
8037dcc97c Merge branch 'zcwy-master' into dev0515 2024-07-11 15:02:05 +08:00
zhangsir
3e57c4bedb 展示方式 2024-07-11 15:01:38 +08:00
zhangsir
235f0bccad Merge branch 'zcwy-master' into dev0515 2024-07-11 13:50:03 +08:00
zhangsir
d9bc4603af 没参数修改调用接口 2024-07-11 13:49:34 +08:00
zhangsir
44b8e14706 Merge branch 'boe_0705_master' into dev0515 2024-07-11 13:19:28 +08:00
zhangsir
d5f343a4be Merge branch 'zcwy-master' into dev0515 2024-07-11 10:59:37 +08:00
zhangsir
158c836cd1 细节 2024-07-11 10:59:07 +08:00
zhangsir
ff605dceed Merge branch 'zcwy-master' into dev0515 2024-07-10 19:29:20 +08:00
zhangsir
972f2cb097 小细节 2024-07-10 19:28:48 +08:00
zhangsir
7d15e7ae21 Merge branch 'boe_0705_master' into dev0515 2024-07-10 18:46:02 +08:00
zhangsir
eb9d68ccd4 Merge branch 'zcwy-master' into dev0515 2024-07-10 16:47:56 +08:00
zhangsir
c98e079684 修改文字 2024-07-10 16:47:29 +08:00
zhangsir
94dc71b911 Merge branch 'zcwy-master' into dev0515 2024-07-10 10:02:57 +08:00
zhangsir
a07f38d33c 修改专业力必修显示问题 2024-07-10 10:02:31 +08:00
zhangsir
cab9c0db2e Merge branch 'boe_0705_master' into dev0515 2024-07-09 17:00:22 +08:00
zhangsir
81642ce1ce Merge branch 'zcwy-master' into dev0515 2024-07-08 19:00:38 +08:00
zhangsir
21cf02d873 修改任务、飞机定位 2024-07-08 19:00:13 +08:00
zhangsir
8f427ab177 Merge branch 'zcwy-master' into dev0515 2024-07-08 10:43:12 +08:00
zhangsir
275e59987f 已读调接口 2024-07-08 10:42:32 +08:00
zhangsir
3ba92a3e02 Merge branch 'zcwy-master' into dev0515
# Conflicts:
#	src/views/study/coursenew.vue
2024-07-08 09:56:44 +08:00
zhangsir
cb43195803 未读数量 2024-07-08 09:54:14 +08:00
zhangsir
ddbb6c7a2e Merge branch 'boe_0705_master' into zcwy-master
# Conflicts:
#	src/assets/images/ban.png
#	src/views/study/coursenew.vue
2024-07-05 17:31:29 +08:00
zhangsir
e520fb10d4 Merge branch 'zcwy-master' into dev0515 2024-07-05 14:56:39 +08:00
zhangsir
0e18d143d9 Merge branch 'dev0124' into zcwy-master 2024-07-05 14:56:02 +08:00
zhangsir
a3e17cd87e Merge branch 'zcwy-master' into dev0515 2024-07-05 14:54:01 +08:00
zhangsir
99ea8d35c9 细节 2024-07-05 14:53:23 +08:00
zhangsir
df2e485d31 Merge branch 'boe_0701_icon' into dev0515 2024-07-05 13:16:51 +08:00
zhangsir
c67fcaf48c bug 2024-07-05 13:16:19 +08:00
zhangsir
cab919ba8c Merge branch 'boe_0701_icon' into dev0515 2024-07-05 10:38:09 +08:00
zhangsir
bbb8f44983 bug 2024-07-05 10:37:40 +08:00
zhangsir
57d08b8ced Merge branch 'boe_0704_line' into dev0515 2024-07-04 16:42:56 +08:00
zhangsir
ec3abb9901 只列表添加 2024-07-04 16:42:20 +08:00
zhangsir
88ae166e13 Merge branch 'boe_0704_line' into dev0515 2024-07-04 16:25:18 +08:00
zhangsir
b0c5fcbf8c 在线增加参数 2024-07-04 16:24:42 +08:00
zhangsir
7f1ea1fe89 Merge branch 'boe_0704_line' into dev0515 2024-07-04 11:26:05 +08:00
zhangsir
694c9c5be7 提交增加受众 2024-07-04 11:25:33 +08:00
zhangsir
eeceb3c66e Merge branch 'boe_0701_icon' into dev0515 2024-07-04 11:01:50 +08:00
zhangsir
af05be5f81 一层状态 2024-07-04 11:01:15 +08:00
zhangsir
af6926a74d Merge branch 'boe_0704_line' into dev0515 2024-07-04 09:55:56 +08:00
zhangsir
0b7918331d 受众 2024-07-04 09:55:25 +08:00
zhangsir
9dfdfd7403 Merge branch 'dev0124' into dev0515 2024-07-03 18:19:49 +08:00
zhangsir
dfda1936c7 细节 2024-07-03 18:19:22 +08:00
zhangsir
193e07cfef Merge branch 'boe_0701_icon' into dev0515 2024-07-03 16:14:05 +08:00
zhangsir
2ec5ae3ee0 音频 2024-07-03 16:09:43 +08:00
zhangsir
8d65d8cabb Merge branch 'boe_0701_icon' into dev0515 2024-07-03 15:53:57 +08:00
zhangsir
4478cec6f7 作业 2024-07-03 15:53:30 +08:00
zhangsir
895d89dc7a Merge branch 'boe_0701_icon' into dev0515 2024-07-03 15:46:13 +08:00
zhangsir
6ec5e4ce45 视频 2024-07-03 15:45:47 +08:00
zhangsir
c46a331c3c Merge branch 'boe_0701_icon' into dev0515 2024-07-03 15:34:08 +08:00
zhangsir
5146e41954 进度 2024-07-03 15:33:35 +08:00
zhangsir
a33bc9885e Merge branch 'boe_0701_icon' into dev0515
# Conflicts:
#	src/views/study/coursenew.vue
2024-07-03 11:40:10 +08:00
zhangsir
3e8ec03c0e 除视频音频考试三秒 2024-07-03 11:37:47 +08:00
zhangsir
b71727263a Merge branch 'boe_0701_icon' into dev0515 2024-07-03 09:45:29 +08:00
zhangsir
e016e1aacc 三秒 2024-07-03 09:44:55 +08:00
zhangsir
cc1970f79f Merge branch 'boe_0701_icon' into dev0515
# Conflicts:
#	src/assets/images/ban.png
#	src/views/study/coursenew.vue
2024-07-01 17:47:16 +08:00
zhangsir
4e1f2e4e1d 修改图标 2024-07-01 17:44:54 +08:00
zhangsir
b120e0f53b 路径图调整 2024-07-01 16:43:27 +08:00
zhangsir
beda4f9c01 Merge branch 'zcwy-master' into dev0515 2024-07-01 16:19:54 +08:00
zhangsir
a143a8ecaa 路径图调整 2024-07-01 16:19:29 +08:00
zhangsir
5f48163f66 Merge branch 'zcwy-master' into dev0515 2024-07-01 15:46:46 +08:00
zhangsir
458e20e4c2 细节 2024-07-01 15:46:01 +08:00
zhangsir
3d20096824 Merge branch 'zcwy-master' into dev0515 2024-06-28 16:48:55 +08:00
zhangsir
8883cce52f 合并 2024-06-28 16:48:27 +08:00
zhangsir
2aa861c2a1 左侧菜单 2024-06-28 14:17:48 +08:00
zhangsir
bc408c039e Merge branch 'dev0124' into zcwy-master
# Conflicts:
#	src/components/UserCenter/menu.vue
#	src/router/index.js
2024-06-28 13:33:25 +08:00
zhangsir
4269bff0b5 左侧菜单 2024-06-28 13:30:08 +08:00
zhangsir
d80405b8fa Merge branch 'dev0124' into dev0515 2024-06-27 20:36:19 +08:00
zhangsir
c0575661c0 xijie 2024-06-27 20:35:52 +08:00
zhangsir
2030879c1f 左侧菜单 2024-06-27 19:02:42 +08:00
zhangsir
a6c6b7160c Merge branch 'dev0124' into dev0515 2024-06-27 14:02:25 +08:00
zhangsir
233f21e310 细节 2024-06-27 14:02:00 +08:00
zhangsir
7183ce608e Merge branch 'dev0124' into dev0515 2024-06-27 11:10:09 +08:00
zhangsir
ef0bcbf542 细节 2024-06-27 11:09:37 +08:00
zhangsir
503d9f88ad Merge branch 'dev0124' into dev0515 2024-06-26 11:18:24 +08:00
zhangsir
3d018a4221 合并 2024-06-26 11:17:57 +08:00
zhangsir
819bdca807 Merge branch 'dev0124' into dev0515 2024-06-26 09:05:37 +08:00
zhangsir
8db79d599b 考试 2024-06-26 09:05:10 +08:00
zhangsir
07a18ed994 Merge branch 'dev0124' into dev0515 2024-06-25 23:03:49 +08:00
zhangsir
4d96ad1b22 路径 2024-06-25 23:03:22 +08:00
zhangsir
f6047280fd Merge branch 'zcwy-master' into dev0515 2024-06-25 20:13:16 +08:00
zhangsir
bee4253448 考试 2024-06-25 20:12:51 +08:00
zhangsir
99cd7cea6b 跳转 2024-06-25 20:09:29 +08:00
zhangsir
2836e01179 Merge branch 'dev0124' into dev0515 2024-06-25 13:53:39 +08:00
zhangsir
6ebafa6ed7 考试细节 2024-06-25 13:53:14 +08:00
zhangsir
4f26bddc3a Merge branch 'dev0124' into dev0515 2024-06-24 20:53:44 +08:00
zhangsir
9c198f52a3 全岗位 2024-06-24 20:53:11 +08:00
zhangsir
48f74fe6b4 Merge branch 'dev0124' into dev0515 2024-06-24 14:18:28 +08:00
zhangsir
94de112f49 全岗位 2024-06-24 14:17:59 +08:00
zhangsir
6800e7ff05 Merge branch 'dev0124' into dev0515 2024-06-24 11:37:38 +08:00
zhangsir
2f9c3827ee 修改考试样式 2024-06-24 11:36:58 +08:00
zhangsir
7f66f7d6c0 Merge branch 'dev0124' into dev0515 2024-06-22 17:22:54 +08:00
zhangsir
245ce904ac 细节 2024-06-22 17:22:25 +08:00
zhangsir
ac9c8cedc4 Merge branch 'pingcode-20240615' into dev0515 2024-06-21 17:05:48 +08:00
joshen
18111ea4a7 新建课程列表隐藏没有权限的操作按钮 2024-06-21 17:04:23 +08:00
zhangsir
be81ab9e0b Merge branch 'pingcode-20240615' into dev0515 2024-06-21 16:39:55 +08:00
joshen
17b88f5ec7 课程在线课选择权限数据修改 2024-06-21 16:36:36 +08:00
zhangsir
3a3628a5ce Merge branch 'dev0124' into dev0515 2024-06-21 14:59:30 +08:00
zhangsir
7a413ff1c7 路径图定位完善 2024-06-21 14:59:03 +08:00
zhangsir
9e785bba5f Merge branch 'dev0124' into dev0515 2024-06-21 13:36:02 +08:00
zhangsir
cd9bf1261a 路径图细节除定位完善 2024-06-21 13:35:21 +08:00
zhangsir
c47036ffdf Merge branch 'dev0124' into dev0515 2024-06-20 17:12:29 +08:00
zhangsir
95ba2f107b 路径图显示 2024-06-20 17:11:58 +08:00
zhangsir
b168ef2ab6 Merge branch 'zcwy-master' into dev0515 2024-06-20 14:09:34 +08:00
zhangsir
0a6548ba57 审核回退 2024-06-20 14:09:09 +08:00
zhangsir
932e4bb000 Merge branch 'zcwy-master' into dev0515 2024-06-20 12:28:39 +08:00
zhangsir
eee49b3742 审核 2024-06-20 12:02:23 +08:00
zhangsir
ef6602b06d Merge branch 'dev0124' into dev0515 2024-06-20 11:46:38 +08:00
zhangsir
f133294879 细节 2024-06-20 11:46:04 +08:00
zhangsir
a9d63ab8a9 Merge branch 'dev0124' into dev0515 2024-06-19 19:55:20 +08:00
zhangsir
94595f256d 细节 2024-06-19 19:54:52 +08:00
zhangsir
416cc7a8ea Merge branch 'zcwy-master' into pingcode-20240615
# Conflicts:
#	src/views/study/coursenew.vue
2024-06-19 18:42:20 +08:00
zhangsir
fcc452240b Merge branch 'pingcode-20240615' into dev0515 2024-06-19 17:46:09 +08:00
joshen
15f11ae4c9 视频禁用拖动修改 2024-06-19 17:44:44 +08:00
zhangsir
9efcb4660b Merge branch 'zcwy-master' into dev0515 2024-06-19 16:29:43 +08:00
zhangsir
17528eb465 考试状态 2024-06-19 16:28:59 +08:00
zhangsir
b486332cfb Merge branch 'zcwy-master' into dev0515 2024-06-18 15:29:29 +08:00
zhangsir
10f955a58f 修改图片 2024-06-18 15:29:04 +08:00
zhangsir
80700d4b75 Merge branch 'pingcode-20240615' into dev0515
# Conflicts:
#	src/views/study/coursenew.vue
2024-06-18 14:36:13 +08:00
joshen
5e3b122984 学员端视频播放器逻辑调整 2024-06-18 14:22:11 +08:00
zhangsir
b0b1f474a8 Merge branch 'dev0124' into dev0515 2024-06-18 11:35:26 +08:00
zhangsir
b691688775 取消错误提示 2024-06-18 11:34:53 +08:00
zhangsir
565a217d91 Merge branch 'dev0124' into dev0515 2024-06-17 09:47:51 +08:00
zhangsir
d8a69328f1 弹窗修改 2024-06-17 09:47:16 +08:00
zhangsir
c47493ac37 Merge branch 'zcwy-master' into dev0515 2024-06-17 08:54:57 +08:00
zhangsir
10e82a1608 修改显示方式 2024-06-17 08:54:33 +08:00
zhangsir
bfd77d8d91 Merge branch 'zcwy-master' into dev0515 2024-06-14 16:19:56 +08:00
zhangsir
a535b6ee85 课程优化 2024-06-14 16:19:28 +08:00
zhangsir
97bc357ec9 Merge branch 'zcwy-master' into dev0515 2024-06-13 17:31:23 +08:00
zhangsir
3264dcaa43 差只展示一个 2024-06-13 17:30:57 +08:00
zhangsir
ab34d540fc Merge branch 'zcwy-master' into dev0515 2024-06-12 18:12:00 +08:00
zhangsir
c37442103a 在线课程修改 2024-06-12 18:11:37 +08:00
zhangsir
37600adfa4 Merge branch 'dev0124' into dev0515
# Conflicts:
#	src/router/index.js
2024-06-11 17:33:27 +08:00
zhangsir
549b74d47d 设置空状态 2024-06-11 17:31:35 +08:00
zhangsir
0afaea52ba 成长路径 2024-06-11 17:24:41 +08:00
zhangsir
dd52845b19 修改路径 2024-06-04 11:58:44 +08:00
zhangsir
176e9c91e0 Merge branch 'zcwy-master' into dev0515 2024-06-04 09:26:41 +08:00
zhangsir
418da40cf0 Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-06-03 21:04:00 +08:00
zhangsir
8400b47e98 Merge branch 'zcwy-master' into dev0515 2024-06-03 21:03:35 +08:00
zhangsir
2e49d868f9 Merge branch 'zcwy0417-out' into dev0515 2024-05-31 17:36:26 +08:00
zhangsir
42fae2af8e Merge branch 'zcwy0417-out' into dev0515 2024-05-31 17:21:44 +08:00
zhangsir
a41b05527d Merge branch 'zcwy0417-out' into dev0515 2024-05-31 17:05:19 +08:00
zhangsir
e80df14870 Merge branch 'zcwy0417-out' into dev0515 2024-05-31 16:57:12 +08:00
zhangsir
8b8ef17185 Merge branch 'zcwy0417-out' into dev0515 2024-05-31 16:07:43 +08:00
zhangsir
df4317303a Merge branch 'zcwy0417-out' into dev0515 2024-05-31 14:40:00 +08:00
zhangsir
285b811b5e Merge branch 'zcwy0417-out' into dev0515 2024-05-30 16:19:48 +08:00
zhangsir
4b821c77b3 Merge branch 'zcwy0417-out' into dev0515 2024-05-30 16:02:28 +08:00
zhangsir
2f2901d811 Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-30 15:54:01 +08:00
zhangsir
e8d62a2c0a Merge branch 'zcwy0417-out' into dev0515 2024-05-30 15:53:38 +08:00
zhangsir
aa2ba0d107 Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-30 15:10:40 +08:00
zhangsir
23402ecf51 Merge branch 'zcwy-master' into dev0515 2024-05-30 15:08:57 +08:00
zhangsir
d9cf5e458d Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-30 09:07:05 +08:00
zhangsir
1d01a74559 Merge branch 'zcwy0417-out' into dev0515 2024-05-30 09:06:45 +08:00
zhangsir
0a663bdcae 测试 2024-05-28 18:32:20 +08:00
zhangsir
36e58b4928 测试 2024-05-28 18:27:44 +08:00
zhangsir
4f6d5374fa 测试 2024-05-28 18:19:09 +08:00
zhangsir
a98a63c014 测试 2024-05-28 18:07:06 +08:00
zhangsir
7df4643c60 Merge branch 'zcwy-master' into dev0515 2024-05-28 17:45:33 +08:00
zhangsir
afc7786f8f Merge branch 'zcwy-master' into dev0515 2024-05-28 15:02:15 +08:00
zhangsir
7d9dc84d19 Merge branch 'zcwy-master' into dev0515 2024-05-28 14:10:30 +08:00
zhangsir
db234d1afb Merge branch 'zcwy-master' into dev0515 2024-05-28 13:50:06 +08:00
zhangsir
7c125eba84 Merge branch 'zcwy-master' into dev0515 2024-05-28 11:38:14 +08:00
zhangsir
554f914f46 Merge branch 'zcwy-master' into dev0515 2024-05-28 11:34:06 +08:00
zhangsir
54045559fc Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-27 20:30:07 +08:00
zhangsir
9122ae203b Merge branch 'zcwy-master' into dev0515 2024-05-27 20:29:46 +08:00
zhangsir
0a1105d497 Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-27 17:44:59 +08:00
zhangsir
b6bb4c4752 Merge branch 'zcwy0417-out' into dev0515 2024-05-27 17:44:33 +08:00
zhangsir
ffd01d6d2f Merge branch 'zcwy-master' into dev0515 2024-05-27 17:15:51 +08:00
zhangsir
fec81d2357 Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-27 17:12:36 +08:00
zhangsir
89e1bf8328 Merge branch 'zcwy-master' into dev0515 2024-05-27 17:12:10 +08:00
zhangsir
110c53ace2 Merge branch 'zcwy0417-out' into dev0515 2024-05-24 16:37:45 +08:00
zhangsir
d46a06ad67 Merge branch 'zcwy0417-out' into dev0515 2024-05-23 16:03:53 +08:00
zhangsir
ad81d4460a Merge branch 'zcwy0417-out' into dev0515 2024-05-23 14:56:21 +08:00
zhangsir
21bfad07c1 Merge branch 'zcwy0417-out' into dev0515 2024-05-23 09:54:14 +08:00
zhangsir
86c5b3e279 Merge branch 'zcwy0417-out' into dev0515 2024-05-23 09:37:36 +08:00
zhangsir
65501c9d9f Merge branch 'zcwy0417-out' into dev0515 2024-05-22 19:01:51 +08:00
zhangsir
bf7ac82f3b Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-22 17:14:52 +08:00
zhangsir
10dae8d0c9 Merge branch 'zcwy0417-out' into dev0515 2024-05-22 17:14:31 +08:00
zhangsir
474595d228 Merge branch 'zcwy-master' into dev0515 2024-05-22 14:59:45 +08:00
zhangsir
7a3b970dc4 Merge branch 'zcwy0417-out' into dev0515 2024-05-22 12:26:17 +08:00
zhangsir
fc7d154f98 Merge branch 'zcwy0417-out' into dev0515 2024-05-20 08:40:57 +08:00
zhangsir
ff2e408e92 Merge remote-tracking branch 'boe/dev0515' into dev0515 2024-05-17 16:12:07 +08:00
zhangsir
834ac71565 Merge branch 'zcwy0417-out' into dev0515 2024-05-17 16:11:46 +08:00
joshen
6aba380f00 Merge branch 'zcwy-master' into 'dev0515'
Zcwy master

See merge request !107
2024-05-17 10:52:15 +08:00
zhangsir
f8a897aed1 Merge branch 'zcwy0417-out' into dev0515 2024-05-17 09:50:05 +08:00
zhangsir
c346a67428 Merge branch 'zcwy0417-out' into dev0515 2024-05-17 09:03:07 +08:00
zhangsir
9d0b526784 Merge branch 'zcwy0417-out' into dev0515 2024-05-16 22:42:13 +08:00
zhangsir
4a424458bb Merge branch 'zcwy0417-out' into dev0515 2024-05-16 12:26:39 +08:00
zhangsir
e2245c2806 Merge branch 'zcwy0417-out' into dev0515 2024-05-16 11:59:08 +08:00
zhangsir
47329c1ec1 Merge branch 'zcwy0417-out' into dev0515 2024-05-16 11:22:14 +08:00
zhangsir
3494329988 Merge branch 'zcwy0417-out' into dev0515 2024-05-15 22:36:37 +08:00
zhangsir
dc118c19ee 路径静态修改 2024-05-11 10:39:36 +08:00
zhangsir
3f2db4136c 路径图整体修改 2024-05-10 18:22:06 +08:00
NiSen
e82ea0709d 还原 2024-01-29 11:03:45 +08:00
NiSen
fd704f91d2 滚动图 2024-01-29 11:03:30 +08:00
NiSen
1eb82c3871 小手 2024-01-26 13:57:22 +08:00
NiSen
9d57cab7d3 u选小课堂跳转 2024-01-26 13:56:00 +08:00
NiSen
83257c5fba 信息概览 2024-01-25 16:32:38 +08:00
NiSen
8167d9f430 表格 2024-01-25 16:24:26 +08:00
NiSen
e08ec8484f title 2024-01-25 15:58:50 +08:00
NiSen
29d5ae0100 上次提交是iconTitle也会移入弹框 2024-01-25 15:57:22 +08:00
NiSen
128f21e454 移入 2024-01-25 15:39:31 +08:00
NiSen
a74a3dc225 点击显示弹窗 2024-01-25 15:32:03 +08:00
NiSen
2c29bb5b03 路径图坐标 2024-01-25 14:25:28 +08:00
NiSen
9da8b65739 图标 2024-01-25 13:58:43 +08:00
NiSen
aec5834061 信息概览 2024-01-25 13:20:07 +08:00
NiSen
8619646405 1 2024-01-25 13:08:25 +08:00
NiSen
e1eef650ee 1 2024-01-25 12:45:52 +08:00
NiSen
52412849fe 合并单元格 2024-01-25 12:45:32 +08:00
NiSen
cf4a114eb6 align="center" 2024-01-25 12:18:32 +08:00
NiSen
dd96b610bd 全岗位路径 2024-01-25 12:14:01 +08:00
NiSen
c7ce891634 颜色 2024-01-25 10:35:47 +08:00
NiSen
b2177abe20 颜色调整 2024-01-25 10:35:07 +08:00
NiSen
660d834c30 1 2024-01-25 10:03:08 +08:00
NiSen
ebdd865e71 1 2024-01-25 09:49:12 +08:00
NiSen
302c3fac3b 2 2024-01-25 09:41:03 +08:00
NiSen
d8e8efdba3 修改位置 2024-01-24 17:49:54 +08:00
NiSen
2b617297f9 growth页面 2024-01-24 17:45:53 +08:00
NiSen
d06e4b40dd 样式 2024-01-24 15:32:17 +08:00
NiSen
9b7b073011 样式 2024-01-24 15:23:05 +08:00
NiSen
e6581ffbbe 成长路径图 2024-01-24 11:43:52 +08:00
NiSen
fcfc575a4c 成长路径图的页面 2024-01-24 10:59:02 +08:00
48 changed files with 3943 additions and 651 deletions

View File

@@ -1,5 +1,6 @@
/**我的授课记录*/
import ajax from '@/api/boe/boeApiAjax.js'
import ajax2 from '@/api/unionAjax.js'
import axios from 'axios'
import { getToken } from '@/utils/token'
const baseURL = process.env.VUE_APP_BOE_BASE_API;
@@ -60,12 +61,15 @@ const exportStudentOfTearcher = function(userId) {
const courseRecordList = function(data) {
return ajax.postJson('/b1/system/teacher/teacher-course-list',data);
}
const getListByToken = function(data) {
return ajax2.get('/manageApi',`/admin/teacherRecord/getListByToken?courseName=${data.courseName}&pageNo=${data.page}&pageSize=${data.pageSize}`);
}
export default {
courseRecordExport,
courseRecordList,
getListByToken,
exportStudentOfCourse,
exportStudentOfTearcher

11
src/api/growth/index.js Normal file
View File

@@ -0,0 +1,11 @@
import ajax from "@/api/ajax"
//获取详情
export const getList = (params) => ajax.get('/manageApi',`/stu/grow/getStuLearnInfo?userId=${params}`);
//获取路径图详情
export const taskList = (params) => ajax.get('/manageApi',`/stu/grow/taskList?growId=${params}`);
//全岗位路径
export const getFullJobPath = (params) => ajax.get('/manageApi',`/stu/grow/getFullJobPath`);
//外部考试
export const queryExternalExam = (params) => ajax.get('/manageApi',`/external/exam/queryExternalExam?externalId=${params.externalId}&type=14`);
//外部考试点击调用
export const submitExternalExam = (params) => ajax.postJson('/manageApi',`/stu/externalExam/submitExternalExam`,params);

View File

@@ -20,7 +20,25 @@ const getTaskNum = function(){
const userTaskList = function(data){
return ajax.postJson(baseURL,'/todoTask/queryTodoTaskDetail',data);
}
//已读
const userRead = function(data){
return ajax.postJson(baseURL,'/todoTask/read',data);
}
//查询未读数量
const queryTaskCounts = function(obj){
return ajax.postJson(baseURL,'/todoTask/queryTaskCounts',obj);
}
//领导力必修
const leadership = function(data){
return ajax.postJson(baseURL,'/todoTask/leadership',data);
}
//定制化学习 1.学习项目 2.学习路径
const customized = function(data){
return ajax.postJson(baseURL,'/todoTask/customized',data);
}
const compulsoryList = function(data){
return ajax.postJson(baseURL,'/todoTask/compulsoryList',data);
}
/**删除学习,取消报名*/
const userDeleteStudy = function(data){
return ajax.postJson(baseURL,'/stu/project/stuCancelEnrollment',data);
@@ -37,6 +55,11 @@ const userRsSginupCourse = function(data){
export default {
getTaskNum,
userTaskList,
leadership,
customized,
compulsoryList,
userDeleteStudy,
userRsSginupCourse
userRsSginupCourse,
queryTaskCounts,
userRead
}

View File

@@ -3,6 +3,7 @@
* 下载课件,一期是直接在新的窗口打开文件的地址就可以了。不采用流的方式下载
*/
import ajax from '@/utils/xajax.js'
import ajax2 from '@/utils/xajax2.js'
/**
* 分页查询,课件的管理列表
@@ -49,6 +50,9 @@ const findList = function(data) {
const saveUpload = function(data) {
return ajax.post('/xboe/m/course/file/upload/save', data);
}
const saveUpload2 = function(data) {
return ajax2.post('/xboe/m/course/file/upload/save', data);
}
/**
* 批量更新,上传时,一个一个上传,下面的列表的保存,使用此方法
@@ -85,6 +89,7 @@ const detail = function(id) {
export default {
pageList,
saveUpload,
saveUpload2,
batchUpdate,
detail,
delFile

View File

@@ -1,5 +1,5 @@
import ajax from '@/utils/xajax.js'
import ajax2 from '../unionAjax.js';
/**
* 按名称查询
@@ -9,7 +9,9 @@ const findByName = function(name) {
return ajax.get('/xboe/teacher/name?name=' + name);
}
const findByNameNew = function(name) {
return ajax2.get('/manageApi/admin/teacher/selectTeacher?name=' + name);
}
const updateTeacher=function(data){
return ajax.postJson('/xboe/teacher/update-teacher',data);
}
@@ -217,7 +219,7 @@ export default {
update,
del,
detail,
findByName,
findByNameNew,
updateSysId,
has,
start,

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

View File

@@ -13,7 +13,7 @@
</el-input>
<div class="choice-box" v-if="teacherDownList.length>0">
<ul>
<li v-for="te in teacherDownList" :key="te.key" @click="changeTeachers(te)">{{te.teacherName + te.teacherCode}}</li>
<li v-for="te in teacherDownList" :key="te.key" @click="changeTeachers(te)">{{te.teacherName + '(' + te.teacherCode + ')'}}</li>
</ul>
</div>
<!-- <el-select
@@ -88,15 +88,15 @@
if (this.teacherValues !== '') {
this.loading = true;
try {
const { result, message, status } = await apiTeacher.findByName(this.teacherValues);
const { data, message, code } = await apiTeacher.findByNameNew(this.teacherValues);
this.loading = false;
if (status === 200) {
if (code === 200) {
let list = [];
result.forEach(item => {
data.forEach(item => {
list.push({
teacherId: item.id,
teacherName: item.name,
teacherCode: item.code
teacherCode: item.mobile
});
});
this.teacherDownList = list;

View File

@@ -25,7 +25,7 @@
<el-table-column label="创建时间" prop="sysCreateTime" width="100"></el-table-column>
<el-table-column label="选择" width="70" align="center">
<template slot-scope="scope">
<el-button size="mini" @click="chooseCourseFile(scope.row)" type="primary">选择</el-button>
<el-button size="mini" @click="chooseCourseFile(scope.row,false)" type="primary">选择</el-button>
</template>
</el-table-column>
</el-table>
@@ -43,23 +43,34 @@
</div>
</el-tab-pane>
<el-tab-pane :label="'上传新'+curComType.name">
<div v-if="!courseFile.id">
<div v-if="!courseFile.id||resType==10||resType==20">
<div v-if="resType>20" style="padding-bottom: 10px;">
<span style="font-weight: 700;">内容时长</span>
<span>
<el-input-number v-model="duration" size="mini" :min="1" :max="100"></el-input-number>
</span>
</div>
<el-upload class="upload-demo" :headers="headers" :data="data" drag :action="uploadFileUrl" :on-success="handleUploadSuccess" :before-upload="handleBeforeUpload">
<el-upload class="upload-demo" :limit="1" :on-exceed="handleExceed" :on-remove="handleDelete" :headers="headers" :data="data" drag :action="uploadFileUrl" :on-success="handleUploadSuccess" :before-upload="handleBeforeUpload">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">文件大小限制{{curComType.maxSizeName}},支持的文件类型{{curComType.fileTypes.join(',')}}</div>
</el-upload>
<div v-if="courseFile.id&&resType==10||resType==20" class="video_audio_info">
<div class="info_item">
<div class="item_text">名称</div>
<el-input v-model="courseFile.fileName" size="mini" style="width:300px;" placeholder="请输入名称"></el-input>
</div>
<div class="info_item">
<div class="item_text">时长</div>
<el-input-number style="width:260px;" v-model="courseFile.duration" :precision="0" size="mini" :min="1" :max="999999999" placeholder="请输入时长" controls-position="right"></el-input-number>
<div style="margin-left: 10px;">分钟</div>
</div>
<div class="btn"><el-button @click="chooseCourseFile(courseFile,true)" type="primary" size="mini">确定</el-button></div>
</div>
</div>
<div v-else style="text-align: center;">
<div style="padding: 20px;">{{courseFile.fileName}} <span style="color: green;">上传成功</span></div>
<div><el-button @click="chooseCourseFile(courseFile)" type="primary" size="mini">确定</el-button></div>
<div><el-button @click="chooseCourseFile(courseFile,true)" type="primary" size="mini">确定</el-button></div>
</div>
</el-tab-pane>
</el-tabs>
@@ -90,6 +101,7 @@
},
data(){
return {
courseWare: {},
uploadFileUrl: process.env.VUE_APP_BASE_API + "/xboe/sys/xuploader/file/upload", // 上传的图片服务器地址
data:{
dir:'course'
@@ -118,6 +130,7 @@
},
mounted() {
this.courseFile={};
this.courseWare = {};
let $this=this;
this.comTypes.some(ct=>{
if(ct.resType==$this.resType){
@@ -139,6 +152,9 @@
}
},
methods:{
handleExceed(){
this.$message({message:`只允许一次性上传一个`,type:'error',offset:100})
},
handleBeforeUpload(file) {
if(file.name.lastIndexOf(".") ==-1) {
this.$message({message:`文件格式不正确!`,type:'error',offset:100})
@@ -172,21 +188,28 @@
},
// 上传成功回调
handleUploadSuccess(res, file) {
//console.log(res);
// console.log(res,file,'xixixixiix');
if(res.status == 200) {
//上传到课件库
//console.log(res.result);
let courseWare={
this.courseWare={
fileName:res.result.displayName,
fileType:res.result.fileType,
filePath:res.result.filePath,
resType:this.resType,
orgId:this.orgId,
orgName:this.orgName,
duration:this.duration,
duration:res.result.duration||this.duration,
remark:'课程中直接上传'
}
apiCourseFile.saveUpload(courseWare).then(rs=>{
this.$message({message:"上传成功",type:'success',offset:100});
this.courseFile = {
id: res.result.filePath,
fileName:res.result.displayName.replace(/\.[^/.]+$/, ""),
duration:res.result.duration,
}
return
apiCourseFile.saveUpload(this.courseWare).then(rs=>{
if(rs.status==200){
this.courseFile=rs.result;
this.$message({message:"上传成功",type:'success',offset:100});
@@ -205,7 +228,8 @@
},
// 删除文件
handleDelete(index) {
this.fileList.splice(index, 1);
this.courseFile = {};
// this.fileList.splice(index, 1);
//注意删除处理
//this.$emit("remove", '');
},
@@ -248,7 +272,33 @@
})
},
chooseCourseFile(ccfile){
chooseCourseFile(ccfile,isUpload){
if(isUpload){
if(this.resType == 10||this.resType == 20){
if(!this.courseFile.fileName){
this.$message({message:`${this.resType == 10?'视频':'音频'}名称不能为空`,type:'error',offset:100});
return
}
if(!this.courseFile.duration){
this.$message({message:"时长不能为空",type:'error',offset:100});
return
}
this.courseWare.fileName = this.courseFile.fileName + '.' + this.courseWare.fileType
this.courseWare.duration = this.courseFile.duration
}
apiCourseFile.saveUpload(this.courseWare).then(rs=>{
if(rs.status==200){
this.courseFile=rs.result;
this.$message({message:"保存成功",type:'success',offset:100});
this.$emit('choose', this.courseFile);
}else{
this.$message.error(rs.message);
}
}).catch(err=>{
this.$message.error(err.message);
})
return
}
this.$emit('choose', ccfile);
}
}
@@ -256,4 +306,24 @@
</script>
<style>
.video_audio_info{
margin-top: 10px;
.info_item{
width: 360px;
margin-top: 10px;
display: flex;
align-items: center;
.el-input-number .el-input__inner{
text-align: left;
}
.item_text{
margin-right: 10px;
}
}
.btn{
margin-top: 10px;
width: 360px;
text-align: center;
}
}
</style>

View File

@@ -1328,6 +1328,7 @@ export default {
pass = false;
}
} else if(this.curContent.contentType == 10 || this.curContent.contentType == 20) {// 视频
courseware.curriculumData.duration = Number((courseware.curriculumData.duration*60).toFixed(0));
if(this.curContent.content !== JSON.stringify(courseware.curriculumData)) {
pass = false;
}

View File

@@ -571,7 +571,7 @@ export default {
randomMode:this.info.randomMode,
score:testScore,
paperJson:JSON.stringify(this.paper),//原来是对象,这里要也要对象
startTime:formatDate(this.startTime),//此时间需要格式化,格式化时间可以放在util中
//startTime:formatDate(this.startTime),//此时间需要格式化,格式化时间可以放在util中
//endTime:formatDate(now),
}
//计划考试的时长

View File

@@ -12,6 +12,7 @@
:show-file-list="showList"
:data="data"
:headers="headers"
:on-remove="handleRemove"
class="upload-file-uploader"
ref="upload"
>
@@ -142,6 +143,9 @@ export default {
},
},
methods: {
handleRemove(file, fileList){
this.$emit('isTrue',false)
},
// 上传前校检格式和大小
handleBeforeUpload(file) {
if(this.beforeMsg){
@@ -195,6 +199,7 @@ export default {
// 上传失败
handleUploadError(err) {
this.isLoading = false;
this.$emit('isTrue',false)
this.$message({message:"上传失败, 请重试",type:'error',offset:100});
},
// 上传成功回调
@@ -217,7 +222,8 @@ export default {
if(delIdx>-1){
fileList.splice(delIdx,1);
}
this.$emit("success", res);
this.$emit('isTrue',true)
this.$emit('isFalse',true)
} else {
this.isLoading = false;
if(this.limit == 1){
@@ -225,8 +231,7 @@ export default {
}
this.$message({message:"上传失败",type:'error',offset:100});
}
// this.$emit("success", res);
this.$emit("success", res);
},
// 删除文件
handleDelete(index) {

View File

@@ -51,7 +51,8 @@
<el-dropdown placement="bottom" @command="handleContributor">
<span class="el-dropdown-link" style="font-size:16px;cursor: pointer;" :style="{color:textColor}">贡献者大会</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="one">2023</el-dropdown-item>
<el-dropdown-item command="three">2024</el-dropdown-item>
<el-dropdown-item command="one" divided>2023</el-dropdown-item>
<el-dropdown-item command="two" divided>2022</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
@@ -148,6 +149,9 @@ import yearMedal from '@/components/Popup/China2023.vue';
import apiBoeCourse from '@/api/boe/course.js';
import {userAvatarText} from "@/utils/tools.js";
import apiCase from "@/api/modules/cases.js";
import apiManage from '@/api/manage/manage.js'
import {getList} from '@/api/growth'
import apiCourseStudy from '@/api/modules/courseStudy.js';
export default {
props: {
current: {
@@ -209,11 +213,9 @@ export default {
this.sex = this.userInfo.sex;
this.$store.dispatch('refrashMsg');
this.loadBoeData();
// console.log('this.userInfo::',this.userInfo)
//this.loadPopupConfig();
},
methods: {
setCurIdentity(iden){
this.$store.dispatch('SetCurIdentity',iden);
},
@@ -246,6 +248,7 @@ export default {
let obj = {
one: urlPre + "/web/contributornew/index",
two: urlPre + "/web/contributor/index",
three: urlPre + "/web/contributor_2024/index"
};
window.open(obj[val]);
},

View File

@@ -331,9 +331,18 @@ export default {
// 定时更新进度条
if (this.isPlaying && !this.isMousedownProgress) {
this.currentProgress =
this.videoDom.currentTime / this.videoDom.duration;
this.currentProgress = this.videoDom.currentTime / this.videoDom.duration;
}
// 视频播放时本地记录视频实时播放时长,视频设置了禁止拖动时执行
if(!this.isDrag){
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
if(arr[this.blobId] < this.currentProgress || !arr[this.blobId]){
arr[this.blobId] = parseFloat(this.currentProgress.toFixed(8))
if(arr[this.blobId]) localStorage.setItem('videoProgressData',JSON.stringify(arr))
}
}
// 定时更新进度的文字显示
this.updateProgressText();
// 音量提示面板的定时隐藏
@@ -366,7 +375,7 @@ export default {
// 根据视频的readyState判断下一帧是否已加载并控制loading的显示
this.isShowLoading = this.videoDom.readyState < 3;
//if()
//console.log(this.videoDom.readyState,'this.videoDom.readyState');
// console.log(this.videoDom.readyState,'视频播放');
}, 1000);
// 视频dom监听器用于控制鼠标的显示
this.videoDom.addEventListener("mousemove", () => {
@@ -459,6 +468,22 @@ export default {
*/
forwardCurrentTime() {
let newCurrentTime = this.videoDom.currentTime + this.timeFastBack;
// 禁止拖拽视频前进时,未观看视频不让前进播放
if(!this.isDrag){
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
console.log('arr[this.blobId]::22',arr[this.blobId],this.currentProgress)
if(arr[this.blobId] < this.currentProgress || !arr[this.blobId]){
arr[this.blobId] = parseFloat(this.currentProgress.toFixed(8))
if(arr[this.blobId]) localStorage.setItem('videoProgressData',JSON.stringify(arr))
}
if(time && arr[this.blobId]* this.videoDom.duration < this.newCurrentTime){
return
}
}
this.videoDom.currentTime = newCurrentTime;
this.barrageTimelineStart = newCurrentTime;
this.updateProgressBySetTime(newCurrentTime);
@@ -479,11 +504,15 @@ export default {
/* 点击进度条更新视频播放进度
*/
updateProgressByClickBar(value) {
let duration = this.videoDom.duration;
this.currentProgress = value;
let new_current_time = Math.round(value * duration);
this.barrageTimelineStart = new_current_time;
this.videoDom.currentTime = new_current_time;
if(this.videoDom){
let duration = this.videoDom.duration;
this.currentProgress = value;
let new_current_time = Math.round(value * duration);
this.barrageTimelineStart = new_current_time;
this.videoDom.currentTime = new_current_time;
console.log('value 222::',value,duration,new_current_time)
}
},
/* 通过新的播放时间更新视频播放进度
*/
@@ -584,6 +613,10 @@ export default {
},
//开始播放
startPlay:function(newTime){
// console.log('开始播放::',newTime)
// window.playVideoInterTime = setInterval(()=>{
// console.log('视频播放:',newTime)
// },2000)
if(newTime){
this.videoDom.currentTime = newTime;
this.barrageTimelineStart = newTime;
@@ -593,8 +626,10 @@ export default {
this.videoDom.play();
},
onAudioTimeUpdate() {
const currentTime = this.$refs.video.currentTime;
this.$emit('onTimeUpdate', currentTime);
if(this.$refs.video){
const currentTime = this.$refs.video.currentTime;
this.$emit('onTimeUpdate', currentTime);
}
},
},
watch: {
@@ -606,7 +641,6 @@ export default {
// 进度条到终点时修改播放状态
this.isShowPlayer = false
this.$emit('onPlayerPlaying', this.videoDom.currentTime,this.videoDom.duration)
this.$emit('progress',this.currentProgress)
if (this.currentProgress === 1) {
this.isPlaying = false;
this.$emit('onPlayerEnded', {})
@@ -622,7 +656,6 @@ export default {
src: function () {
// 当视频地址变更时,重载视频
this.videoDom.load();
this.isPlaying = false
},
},
};

View File

@@ -60,12 +60,10 @@ export default {
window.addEventListener("mousemove", (e) => {
if (this.is_mousedown_progress) {
this.move(e);
e.preventDefault();
}
});
window.addEventListener("mouseup", (e) => {
this.up(e);
e.preventDefault();
});
},
beforeDestroy() {
@@ -73,7 +71,7 @@ export default {
},
methods: {
down(e) {
// if(this.isDrag) {
this.$emit("getMouseDownStatus", true);
this.is_mousedown_progress = true;
// 获取完整进度条的clientXdom左上角
@@ -82,28 +80,20 @@ export default {
this.current_width_px = e.clientX - init_clientX;
// 设置当前的播放进度(同时作用于当前进度条的样式)
let current = (e.clientX - init_clientX) / this.dom_full.clientWidth;
if(current>1) current = 1;
if(current<0) current = 0;
var time = localStorage.getItem('videoProgressData');
var arr = time&&JSON.parse(time) || {}
//console.log('down arr:',this.isDrag,this.blobId,arr,arr[this.blobId],current)
// 禁止拖动
if(!this.isDrag && time && arr[this.blobId] < current) return;
this.$emit("updateProgress", current);
// }
},
move(e) {
if (this.is_mousedown_progress) {
let init_clientX = this.dom_full.getBoundingClientRect().left;
this.current_width_px = e.clientX - init_clientX;
let current = (e.clientX - init_clientX) / this.dom_full.clientWidth;
if(current>1) current = 1;
if(current<0) current = 0;
var time = localStorage.getItem('videoProgressData');
var arr = time&&JSON.parse(time) || {}
//console.log('move arr:',this.isDrag,this.blobId,arr,arr[this.blobId],current)
// 禁止拖动
if(!this.isDrag && time && arr[this.blobId] < current) return;
this.$emit("updateProgress", current);
@@ -113,18 +103,15 @@ export default {
if (this.is_mousedown_progress) {
// 标记鼠标不处于按下的状态了
this.is_mousedown_progress = false;
this.$emit("getMouseDownStatus", false);
// 松开鼠标后即调整进度条后此时的进度0-1
let current = this.current_width_px / this.dom_full.clientWidth;
if(current>1) current = 1;
if(current<0) current = 0;
var time = localStorage.getItem('videoProgressData');
var arr = time&&JSON.parse(time) || {}
//console.log('up arr:',this.isDrag,this.blobId,arr,arr[this.blobId],current)
this.$emit("getMouseDownStatus", false);
// 禁止拖动
if(!this.isDrag && time && arr[this.blobId] < current) return;
this.$emit("updateProgress", current);
}
},
},
@@ -176,4 +163,4 @@ export default {
.progress-bar:hover .progress-current::after {
opacity: 1;
}
</style>
</style>

View File

@@ -80,6 +80,7 @@ export const pages=[
{title:'正在学习',path:'courses',component:'study/Courses',hidden:false},
{title:'历史记录',path:'history',component:'study/FinishCourses',hidden:false},
{title:'学习路径图',path:'path',component:'study/StudyPath',hidden:false},
{title:'成长路径',path:'growth',component:'study/Growth',hidden:false},
{title:'学习项目',path:'project',component:'study/StudyProject',hidden:false}
]},
{title:'我的必修',path:'/growth',hidden:false,children:[

View File

@@ -47,70 +47,91 @@ export const constantRoutes = [{
// name: 'gratefulIndex',
// meta: { title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: false },
// },
{
path: '/grateful',
component: Grateful,
redirect: '/grateful/index',
children: [
{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/grateful/GratefulHomePage'], resolve),
name: 'GratefulHomePage',
meta: {title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: true, hidden: false}
},
{
path: 'teacherEmpowerment',
hidden: true,
component: (resolve) => require(['@/views/grateful/TeacherEmpowerment'], resolve),
name: 'TeacherEmpowerment',
meta: {title: '教师赋能', icon: 'dashboard', noCache: true, affix: true, hidden: true}
},
{
path: 'toolDown',
hidden: true,
component: (resolve) => require(['@/views/grateful/ToolDown'], resolve),
name: 'ToolDown',
meta: {title: '工具下载', icon: 'dashboard', noCache: true, affix: true, hidden: true}
},
{
path: 'gratefulNotice',
hidden: true,
component: (resolve) => require(['@/views/grateful/GratefulNotice'], resolve),
name: 'GratefulNotice',
meta: {title: '通知列表', icon: 'dashboard', noCache: true, affix: true, hidden: true}
},
{
path: 'noticeDetail',
hidden: true,
component: (resolve) => require(['@/views/grateful/NoticeDetail'], resolve),
name: 'NoticeDetail',
meta: {title: '通知详情', icon: 'dashboard', noCache: true, affix: true, hidden: true}
},
{
path: 'teacherOpinion',
hidden: true,
component: (resolve) => require(['@/views/grateful/TeacherOpinion'], resolve),
name: 'TeacherOpinion',
meta: {title: '师资大全', icon: 'dashboard', noCache: true, affix: true, hidden: true}
},
]
},
{
path: '/forward',
hidden: true,
component: (resolve) => require(['@/views/Forward'], resolve),
name: 'forward',
meta: {title: '详细信息', icon: 'dashboard', noCache: true, affix: false},
},
{
path: '/course',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Index'], resolve),
name: 'course',
meta: {title: '课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false},
},
{
{
path: '/grateful',
component: Grateful,
redirect: '/grateful/index',
children: [
{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/grateful/GratefulHomePage'], resolve),
name: 'GratefulHomePage',
meta: { title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: true, hidden:false }
},
{
path: 'teacherEmpowerment',
hidden: true,
component: (resolve) => require(['@/views/grateful/TeacherEmpowerment'], resolve),
name: 'TeacherEmpowerment',
meta: { title: '教师赋能', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'toolDown',
hidden: true,
component: (resolve) => require(['@/views/grateful/ToolDown'], resolve),
name: 'ToolDown',
meta: { title: '工具下载', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'gratefulNotice',
hidden: true,
component: (resolve) => require(['@/views/grateful/GratefulNotice'], resolve),
name: 'GratefulNotice',
meta: { title: '通知列表', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'noticeDetail',
hidden: true,
component: (resolve) => require(['@/views/grateful/NoticeDetail'], resolve),
name: 'NoticeDetail',
meta: { title: '通知详情', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'teacherOpinion',
hidden: true,
component: (resolve) => require(['@/views/grateful/TeacherOpinion'], resolve),
name: 'TeacherOpinion',
meta: { title: '师资大全', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
]
},
{
path: '/forward',
hidden: true,
component: (resolve) => require(['@/views/Forward'], resolve),
name: 'forward',
meta: { title: '详细信息', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/course',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Index'], resolve),
name: 'course',
meta: { title: '课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
},
// {
// path: '/growth',
// hidden: true,
// component: (resolve) => require(['@/views/study/Growth'], resolve),
// name: 'growth',
// meta: { title: '成长路径', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
// },
{
path: '/growthpath',
hidden: true,
component: (resolve) => require(['@/views/study/GrowthPath'], resolve),
name: 'growthpath',
meta: { title: '成长路径图', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/ExamScore',
hidden: true,
component: (resolve) => require(['@/views/study/ExamScore'], resolve),
name: 'ExamScore',
meta: { title: '成长路径图', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/courseRecommended',
hidden: true,
component: (resolve) => require(['@/views/portal/course/CourseRecommended'], resolve),

233
src/utils/xajax2.js Normal file
View File

@@ -0,0 +1,233 @@
import axios from 'axios'
import qs from 'qs'
import { Notification, MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/token'
import errorCode from '@/utils/errorCode'
/**
*request请求 axios.request(config)
*requestJson请求 axios.request(config)
*get请求 axios.get(url[, config])
*post请求 axios.post(url[, data[, config]])
*postJson请求 axios.post(url[, data[, config]])
*put请求 axios.put(url[, data[, config]])
*putJson请求 axios.put(url[, data[, config]])
*patch请求 axios.patch(url[, data[, config]])
*patchJson请求 axios.patch(url[, data[, config]])
*delete请求 axios.delete(url[, config])
*/
//const ReLoginUrl="/login";
const ReLoginUrl=process.env.VUE_APP_LOGIN_URL;
const TokenName='XBOE-Access-Token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
const jsonRequest=axios.create({
headers:{'Content-Type':'application/json;charset=utf-8'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
//超时
timeout: 60000,
});
//发送json对象的拦截器
jsonRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
})
// 响应拦截器
jsonRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code == 6001){ //针对于老系统的处理
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code === 402){
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
//return res.data;
}else if(code===302){
location.href = ReLoginUrl;
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
//return Promise.reject(new Error(res.data.message))
return res.data;
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
//location.href = this.webBaseUrl + ReLoginUrl;
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//用于普通的发送请求
const formRequest=axios.create({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code == 6001){ //针对于老系统的处理,因为老系统是字符串,所以这里不使用三等于号
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code === 402){
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else if(code===302){
location.href = ReLoginUrl;
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
//return Promise.reject(new Error(res.data.message))
return res.data;//返回给用户做业务处理
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "接口超时,请检查是否上传成功";
//location.href = this.webBaseUrl + ReLoginUrl;
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//request请求
const request=function(cfg){
if(cfg.data){
cfg.data=qs.stringify(cfg.data);
}
};
//requestJson请求
const requestJson=jsonRequest.request;
//get请求
const get=formRequest.request;
//post请求
const post=function(url,data,config){
if(data){
data=qs.stringify(data);
}
return formRequest.post(url,data,config);
}
//post请求
const postForm=function(url,data,config){
return formRequest.post(url,data,config);
}
//postJson请求
const postJson=jsonRequest.post;
//put请求
const put=function(url,data,config){
if(data){
data=qs.stringify(data);
}
return formRequest.put(url,data,config);
}
//putJson请求
const putJson=jsonRequest.put;
//patch请求
const patch=function(url,data,config){
if(data){
data=qs.stringify(data);
}
return formRequest.patch(url,data,config);
}
//patchJson请求
const patchJson=jsonRequest.patch;
//delete请求
const del=formRequest.delete;
export default {
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del,
postForm
}

View File

@@ -89,7 +89,7 @@
<p class="personal-info">
{{ cutOrgNamePath(userInfo.departFullName) }}
</p>
<a href="uc/study/task">
<span @click="goStudy">
<div class="personal-box" style="margin-bottom: 10px">
<span>学习任务</span>
<span v-if="studyTaskCount == 0" style="display: flex">
@@ -106,7 +106,7 @@
</span>
<!-- <img class="personal-box-img" :src="`${webBaseUrl}/images/homeWu/agency.png`" alt="" srcset=""> -->
</div>
</a>
</span>
<div class="last-study-info">
<div
class="one-line-ellipsis"
@@ -1078,6 +1078,10 @@ export default {
},
data() {
return {
fistTotals: 0,
pathTotals: 0,
growTotal: 0,
courseNums: 0,
Positive:[],
showUClass: false,
showLoginMedal: false, //是否显示登录勋章
@@ -1176,7 +1180,7 @@ export default {
this.getLevel();
this.getQaAnswers();
this.getLastStudy();
this.setNumData()
//检查兴趣爱好是否已填报,
//先检查本地session和 local 15天, 这两个值是在组件中设置的
let sessionHobby = sessionStorage.getItem(
@@ -1229,6 +1233,32 @@ export default {
},
},
methods: {
setNumData(){
this.fistTotals = sessionStorage.getItem('fistTotals')
this.pathTotals = sessionStorage.getItem('pathTotals')
this.growTotal = sessionStorage.getItem('growTotal')
this.courseNums = sessionStorage.getItem('courseNums')
},
goStudy(){
const nums = this.fistTotals + this.pathTotals + this.growTotal;
if(nums == 0 && this.courseNums>0){
window.location.href = `${this.webBaseUrl}/uc/study/courses`;
}else{
if(this.nums == 0){
window.location.href = `${this.webBaseUrl}/uc/study/task?type=9`;
return
}
if(this.fistTotals != 0){
window.location.href = `${this.webBaseUrl}/uc/study/task?type=1`;
}else if (this.growTotal != 0){
window.location.href = `${this.webBaseUrl}/uc/study/growth`;
}else if (this.pathTotals != 0){
window.location.href = `${this.webBaseUrl}/uc/study/task?type=2`;
}else{
window.location.href = `${this.webBaseUrl}/uc/study/task?type=9`;
}
}
},
getPositive() {
// 这个是案例的好评
// apiCase.queryComments(10).then(res => {

View File

@@ -149,7 +149,7 @@
<el-checkbox v-model="deviceMobile" @change="isVisible(1)" label="移动端可见" border></el-checkbox>
<el-checkbox v-model="devicePc" @change="isVisible(2)" label="pc端可见" border></el-checkbox>
</div>
<file-upload scorm="zip" dir="files" :beforeMsg="needOrg" :showList="true" :value="imageShowUrl" :limit="5" @success="handleUploadSuccess" @remove="handleRemoveSuccess"></file-upload>
<file-upload scorm="zip" dir="files" @isFalse="isFalseChange" @isTrue="isTrueChange" :beforeMsg="needOrg" :showList="true" :value="imageShowUrl" :limit="5" @success="handleUploadSuccess" @remove="handleRemoveSuccess"></file-upload>
</div>
</div>
@@ -159,7 +159,7 @@
<el-table-column prop="fileName" label="文件名称"></el-table-column>
<el-table-column prop="name" label="课件名称">
<template slot-scope="scope">
<el-input type="text" v-model="scope.row.name"></el-input>
<el-input type="text" maxlength="50" v-model="scope.row.name"></el-input>
</template>
</el-table-column>
<el-table-column prop="resType" label="类型" width="80">
@@ -169,7 +169,8 @@
</el-table-column>
<el-table-column prop="duration" label="时长(分)" width="100">
<template slot-scope="scope">
<el-input type="number" size="small" v-model="scope.row.minute"></el-input>
<!-- <el-input type="number" :stpe="1" min="0" size="small" step-strictly v-model="scope.row.minute"></el-input> -->
<el-input-number style="width: 78px;" :max="999" controls-position="right" size="small" :min="0" v-model="scope.row.minute" :step="1" step-strictly></el-input-number>
</template>
</el-table-column>
<el-table-column label="可见性" width="100">
@@ -194,7 +195,7 @@
<span slot="footer">
<!-- <el-button type="infor" @click="isVisible(1)">移动端可见</el-button>
<el-button type="infor" @click="isVisible(2)">pc端可见</el-button> -->
<el-button type="primary" @click="saveUpload()">保存</el-button>
<el-button type="primary" @click="saveUpload()" :loading="isTrue">保存</el-button>
</span>
</el-dialog>
<el-dialog v-if="coursewareShow" title="预览课件" :close-on-click-modal="false" width="800px" :visible.sync="coursewareShow" custom-class="g-dialog">
@@ -246,7 +247,7 @@
<el-form-item label="课件类型">{{ getType(form.resType) }}</el-form-item>
<el-form-item label="时长(分)">
<!-- <el-input v-model="form.duration"></el-input> -->
<el-input type="number" placeholder="请输入数字" :maxlength="32" show-word-limit v-model="form.minute"></el-input>
<el-input-number :precision="0" style="width:100%;text-align:left;" :min="1" placeholder="请输入数字" :max="99999999" show-word-limit controls-position="right" v-model="form.minute"></el-input-number>
<!-- <el-input-number max="" v-model="form.duration" controls-position="right"></el-input-number> -->
</el-form-item>
<el-form-item label="可见性">
@@ -280,6 +281,8 @@ export default {
},
data() {
return {
isTrue: false,
isFalse: false,
resOwnerListMap: [],
//fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
fileBaseUrl:this.$xpage.constants.fileBaseUrl, //获成动态获取的处理
@@ -392,6 +395,12 @@ export default {
this.search();
},
methods: {
isTrueChange(val){
this.isTrue = val
},
isFalseChange(val){
this.isFalse = val
},
beforeCheck(){
if(!this.upload.orgId ||!this.upload.orgName){
return false;
@@ -484,7 +493,11 @@ export default {
this.form.device = 2;
}
//时长,秒与分钟的转化
//if(this.form.)
if(!this.form.minute){
return this.$message.error('请输入时长');
}else{
this.form.duration = Number(this.form.minute) * 60;
}
try {
const { status,message} = await coueseFile.batchUpdate([this.form]);
if (status === 200) {
@@ -555,7 +568,7 @@ export default {
// remark: 备注说明,可以为空,不填
};
//try {
coueseFile.saveUpload(data).then(res=>{
coueseFile.saveUpload2(data).then(res=>{
if(res.status==200){
//console.log('上传文件成功:'+rs.result.displayName);
res.result.device1 = true;
@@ -564,12 +577,18 @@ export default {
if(res.result.duration){
res.result.minute=Math.round(res.result.duration/60); //四舍五入
}
if(res.result.duration==0){
this.$message.error('上传的视频时长不能为0请手动编辑时长');
}
this.fileList.push(res.result);
this.isTrue = false;
}else{
this.$message.error(res.message);
this.isFalse = false
}
}).catch (error=>{
console.log(error,'error')
this.isFalse = false
//this.$message.error(error);
});
// const { result, status } = coueseFile.saveUpload(data);
@@ -598,16 +617,26 @@ export default {
},
handleCloseCheck(done){
//console.log('关闭的处理aaaaa');
if(this.isTrue&&this.isFalse){
this.$message.error('文件正在上传中,请耐心等待');
return false;
}
if(this.fileList.length>0){
this.$message.error('有待保存的上传文件,请执行保存操作');
return false;
}else{
this.isTrue = false
this.isFalse = false
return done(true);
}
},
// 文件上传保存
saveUpload() {
if(this.fileList.length<=0){
this.$message.error('请上传文件');
return;
}
if(!this.upload.orgName){
this.$message.success('请选择资源归属');
return;
@@ -628,6 +657,20 @@ export default {
item.duration = item.minute ? parseFloat(item.minute) * 60 : 1800;
});
this.loading = true;
const messageD = this.fileList.some(item =>{
if(item.name == ''){
this.$message.error('课件名称不能为空');
return true;
}else if(!item.minute||item.minute == undefined){
this.$message.error('时长不能为空并且不能为0');
return true;
}else{
return false
}
})
if(messageD){
return
}
coueseFile.batchUpdate(this.fileList).then(rs => {
if (rs.status === 200) {
this.$message.success('保存成功');
@@ -793,6 +836,17 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .el-input-number.is-controls-right .el-input__inner{
padding-right: 20px;
padding-left: 8px;
text-align: left;
}
::v-deep .el-input-number__decrease{
width: 16px;
}
::v-deep .el-input-number__increase{
width: 16px;
}
.butpost{
position: absolute;
right: 1%;

View File

@@ -1,206 +1,228 @@
<template>
<div style="padding: 12px 32px 10px 12px;">
<div style="display: flex;justify-content: flex-start;">
<div style="padding: 12px 32px 10px 12px;">
<div style="display: flex;justify-content: flex-start;">
<div><el-input v-model="keyword" placeholder="输入课程名称搜索" clearable></el-input></div>
<div style="padding-left: 10px;"><el-button @click="recordList()" type="primary" icon="el-icon-search">搜索</el-button></div>
<div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" @click="keyword = ''" type="primary" >重置</el-button></div>
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div>
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportStudentOfTearcher()" icon="el-icon-search" size="small" round>导出学员信息</el-button></div>
</div>
<div class="Export">
<!-- <div style="padding-left: 10px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div> -->
<!-- <div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" size="small" round>导出学员信息</el-button></div> -->
</div>
<div style="margin-top:20px;">
<el-table :data="pageData" border stripe>
<el-table-column
label="课程时间"
prop="courseTime"
width="200px">
</el-table-column>
<el-table-column
label="课程名称"
prop="courseName"
width="200px">
</el-table-column>
<el-table-column
label="开课场地"
prop="address"
width="240px">
</el-table-column>
<el-table-column
label="所属课程"
prop="parentCourse"
width="120px">
</el-table-column>
<el-table-column
label="所属项目"
prop="parentProject"
></el-table-column>
<el-table-column
label="所属路径"
prop="parentRoute"
width="200px"
></el-table-column>
<el-table-column
label="学习总人数"
prop="studentNumber"
width="100px"
></el-table-column>
<el-table-column
label="时长(分钟)"
width="100px"
prop="period"
></el-table-column>
<el-table-column
label="评分"
width="100px"
prop="score"
></el-table-column>
<el-table-column
label="操作"
align="center"
width="150px"
prop="cz"
fixed="right"
>
<template v-slot="scope">
<el-button type="text" @click="exportStudentOfCourse(scope.row.courseId)" size="small">导出学员信息</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div><el-input v-model="keyword" placeholder="输入课程名称搜索" clearable></el-input></div>
<div style="padding-left: 10px;"><el-button @click="recordList(1)" type="primary" icon="el-icon-search">搜索</el-button></div>
<div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" @click="keyword = ''" type="primary" >重置</el-button></div>
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div>
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportStudentOfTearcher()" icon="el-icon-search" size="small" round>导出学员信息</el-button></div>
</div>
<div class="Export">
<!-- <div style="padding-left: 10px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div> -->
<!-- <div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" size="small" round>导出学员信息</el-button></div> -->
</div>
<div style="margin-top:20px;">
<el-table :data="pageData" border stripe>
<el-table-column
label="课程编号"
prop="index"
width="100px">
<template v-slot="scope">
<span>{{scope.$index+1}}</span>
</template>
</el-table-column>
<el-table-column
label="课程名称"
prop="courseName"
width="200px">
</el-table-column>
<el-table-column
label="课程日期"
prop="teachingDate"
width="200px">
</el-table-column>
<el-table-column
label="内容分类"
prop="courseTypeName"
width="200px">
</el-table-column>
<el-table-column label="课程类型" prop="type" width="120px">
<template v-slot="scope">
<span>{{
{
"0": "在线课",
"1": "面授课",
"2": "课程开发",
"3": "作业员入模培训",
"4": "其他",
}[scope.row.type+'']
}}</span>
</template>
</el-table-column>
<el-table-column
label="学习总人数"
prop="studys"
width="120px"
></el-table-column>
<el-table-column
label="授课时长(分钟)"
prop="teaching"
width="120px"
></el-table-column>
<el-table-column
label="评分"
prop="score"
width="100px"
></el-table-column>
<el-table-column label="开课状态" width="100px" prop="courseStatus">
<template v-slot="scope">
<span>{{
{
"0": "未开课",
"1": "已开课",
}[scope.row.courseStatus+'']
}}</span>
</template>
</el-table-column>
<el-table-column
label="备注"
width="200px"
prop="remark"
></el-table-column>
<el-table-column
label="操作"
align="center"
width="150px"
prop="cz"
fixed="right"
>
<template v-slot="scope">
<el-button type="text" @click="exportStudentOfCourse(scope.row.courseId)" size="small">导出学员信息</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div style="text-align: center; margin-top:57px">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageInfo.page"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageInfo.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageInfo.total"
></el-pagination>
</div>
<div style="text-align: center; margin-top:57px">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageInfo.page"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageInfo.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageInfo.total"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import apiCourse from '../../api/boe/courseRecord.js';
import { mapGetters } from 'vuex';
export default {
data(){
return {
pageData:[],
keyword:'',
pageInfo:{},
}
},
data(){
return {
pageData:[],
keyword:'',
pageInfo:{},
}
},
mounted() {
this.recordList(1);
mounted() {
this.recordList(1);
},
computed: {
...mapGetters(['userInfo'])
},
},
computed: {
...mapGetters(['userInfo'])
},
methods: {
methods: {
// 导出所有记录
exportFile(){
let req = {
userId: this.userInfo.sysId
// userId:"70F80F4E-34BA-10AB-894A-8FA812B19637"
}
apiCourse.courseRecordExport(req).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出所有记录
exportFile(){
let req = {
userId: this.userInfo.sysId
// userId:"70F80F4E-34BA-10AB-894A-8FA812B19637"
}
apiCourse.courseRecordExport(req).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出课程下的学员信息
exportStudentOfCourse(courseId){
let userId = this.userInfo.sysId;
apiCourse.exportStudentOfCourse(userId,courseId).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出课程下的学员信息
exportStudentOfCourse(courseId){
let userId = this.userInfo.sysId;
apiCourse.exportStudentOfCourse(userId,courseId).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出教师下的所有授课记录下的学员信息
exportStudentOfTearcher(){
let userId = this.userInfo.sysId;
// let userId = '5D36C207-64F4-C512-312D-C9598257695C';
apiCourse.exportStudentOfTearcher(userId).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出教师下的所有授课记录下的学员信息
exportStudentOfTearcher(){
let userId = this.userInfo.sysId;
// let userId = '5D36C207-64F4-C512-312D-C9598257695C';
apiCourse.exportStudentOfTearcher(userId).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
recordList(pageIndex){
let req = {
//     userId:"6B049FAF-C314-7CCF-0D28-0D23F4C42531",
userId: this.userInfo.sysId,
keyword:this.keyword,
    page:pageIndex,
    pageSize:10
}
apiCourse.courseRecordList(req).then(res=>{
if(res.status == 200) {
this.pageData = res.result.list;
this.pageInfo = res.result.pageInfo;
} else {
this.$message({
type: 'error',
message: res.message
});
}
})
},
recordList(pageIndex){
let req = {
//     userId:"6B049FAF-C314-7CCF-0D28-0D23F4C42531",
userId: this.userInfo.sysId,
courseName:this.keyword,
page:pageIndex,
pageSize:this.pageInfo.pageSize||10
}
apiCourse.getListByToken(req).then(res=>{
if(res.code == 200) {
this.pageData = res.data.records;
this.pageInfo.total = Number(res.data.total);
} else {
this.$message({
type: 'error',
message: res.message
});
}
})
},
// 每页显示的条数事件
handleSizeChange(val){
this.pageInfo.pageSize = val;
this.recordList(1);
},
// 显示制定页的数据
handleCurrentChange(val){
this.pageInfo.pageIndex = val;
this.recordList(this.pageInfo.pageIndex);
},
// 每页显示的条数事件
handleSizeChange(val){
this.pageInfo.pageSize = val;
this.recordList(1);
},
// 显示制定页的数据
handleCurrentChange(val){
this.pageInfo.pageIndex = val;
this.recordList(this.pageInfo.pageIndex);
},
},
},
}
</script>
<style lang="scss" scoped>
.Export{
display: flex;
padding-top: 10px;
display: flex;
padding-top: 10px;
}
</style>

View File

@@ -73,10 +73,11 @@
<!-- // 成绩控制需要结束状态 -->
<el-button type="text" v-if="scope.row.published" @click="viewResults(scope.row)">成绩</el-button>
<el-button type="text" v-if="scope.row.published" @click="pushResults(scope.row)">推送</el-button>
<el-button type="text" v-if="scope.row.refType == 14" @click="deleteData(scope.row)">删除</el-button>
<el-button type="text" v-if="scope.row.published&&scope.row.refType !== 14" @click="pushResults(scope.row)">推送</el-button>
<!-- <el-button type="text" v-if="scope.row.published" @click="creatQrCode(scope.row)">二维码</el-button> -->
<el-button type="text" v-if="scope.row.published" @click="releaseData(scope.row,false)">取消发布</el-button>
<el-dropdown type="text" style="margin-left:10px">
<el-button type="text" v-if="scope.row.published&&scope.row.refType !== 14" @click="releaseData(scope.row,false)">取消发布</el-button>
<el-dropdown v-if="scope.row.refType !== 14" type="text" style="margin-left:10px">
<el-button type="text" > 更多 <i class="el-icon-arrow-down el-icon--right"></i> </el-button>
<el-dropdown-menu slot="dropdown">
<!-- <el-dropdown-item command="a">查看</el-dropdown-item> -->
@@ -499,7 +500,7 @@
</el-table-column>
<el-table-column label="状态">
<template slot-scope="scope">
{{ scope.row.status == 9 ? '已完成' : '未开始' }}
{{ scope.row.status == 9 ? '已完成' : scope.row.status == 1?'进行中':'未开始' }}
</template>
</el-table-column>
<el-table-column label="完成时间" prop="lastTime">
@@ -1077,6 +1078,10 @@ export default {
})
},
deleteData(row) {
if(row.refType == 14 && row.refStatus == 1){
this.$message.error('该考试已被专业力必修引用,不能删除!')
return
}
this.$confirm('此操作将永久删除该考试, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',

View File

@@ -11,7 +11,7 @@
<ul>
<li>考试时长: {{ testPaper.testDuration }}分钟</li>
<li>及格线: {{ testPaper.passLine }}</li>
<li v-if="testPaper.entranceTime">开始时间:{{ testPaper.entranceTime }}</li>
<li v-if="testPaper.entranceTime">开始时间: {{ testPaper.entranceTime }}</li>
<li v-if="testPaper.times">尝试次数: {{ testPaper.times }}</li>
<li v-if="testPaper.deadlineTime">结束时间: {{ testPaper.deadlineTime }}</li>
</ul>
@@ -43,7 +43,7 @@
</div>
<el-table :data="tableData" style="width: 100%" v-if="loading == 2">
<el-table-column prop="startTime" label="完成时间" width="180"></el-table-column>
<el-table-column prop="endTime" label="完成时间" width="200"></el-table-column>
<el-table-column prop="score" align="center" label="成绩">
<template slot-scope="scope">
<span>{{toScoreTow(scope.row.score)}}</span>
@@ -500,6 +500,7 @@ export default {
// $this.saveUserTest();
// },10000);
}
this.saveUserTest()
}else{
this.startButton = false;
this.$message.error('加载试卷内容失败:'+rs.message);

View File

@@ -54,7 +54,7 @@
</template>
<script>
import top from '../../layout/components/TopNav/Index.vue'
import top from '@/components/PortalHeader.vue'
import UcHeader from '@/components/HomePage/homePage.vue'
import MedalImg from '@/components/Portal/medalImg.vue';
import apiStat from '@/api/phase2/stat.js';

View File

@@ -22,7 +22,7 @@
{img:'01',url:'1265897142383042560'},
{img:'02',url:'1265697724606210048'},
{img:'003',url:'1280185851054231552'},
{img:'4',url:''},
{img:'04',url:''},
],
}
},
@@ -97,7 +97,7 @@
padding: 28px;
padding-top: 62px;
margin-bottom: 59px;
.img {
width: 100%; // 图片宽度占满item宽度
height: auto; // 自动调整高度
@@ -132,7 +132,7 @@
padding: 14px;
padding-top: 26px;
margin-bottom: 30px;
.img {
width: 100%; // 图片宽度占满item宽度
height: auto; // 自动调整高度
@@ -176,4 +176,4 @@
}
}
}
</style>
</style>

View File

@@ -1,135 +1,140 @@
<template>
<div>
<div style="display: flex;justify-content:space-between; padding: 12px 32px 10px 18px;">
<div style="display: flex;justify-content: flex-start;">
<span class="title-myqalist">我报名的</span>
<div style="margin-left:5px">
<el-select v-model="courseType" class="uc-select" clearable placeholder="类型">
<el-option label="全部类型" value=""></el-option>
<!-- <el-option label="微课" :value="10"></el-option> -->
<el-option label="录播课" :value="20"></el-option>
<!-- <el-option label="在线课" value="online-course"></el-option> -->
<!-- <el-option label="面授课" value="face-course"></el-option>
<el-option label="学习项目" value="project"></el-option> -->
<el-option label="线下课" :value="30"></el-option>
<el-option label="学习项目" :value="40"></el-option>
</el-select>
</div>
<el-select style="margin-left:12px" class="uc-select" v-model="status" clearable placeholder="学习进度">
<el-option label="所有进度" value="0"></el-option>
<el-option label="未开始" :value="1"></el-option>
<el-option label="进行中" :value="2"></el-option>
<el-option label="已完成" :value="9"></el-option>
<!-- <el-option label="已停用" :value="3"></el-option> -->
</el-select>
<div style="padding-left: 12px;"><el-input class="uc-input" v-model="params.courseName" clearable placeholder="搜索名称"></el-input></div>
<div style="padding-left: 12px;"><el-button type="primary" class="search-btn" icon="el-icon-search" @click="findStudys(true)">搜索</el-button></div>
<div style="padding-left: 12px"><el-button type="primary" class="search-btn" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
</div>
<div style="margin-top: 50px;" v-if="page.count==0">
<el-empty description="您当前暂无学习数据~"></el-empty>
</div>
<div class="uc-list" v-loading="loading">
<div class="uc-course" v-for="(item,idx) in couresList" :key="idx">
<div class="uc-course-img" style="width: 260px;height:144px" @click="jumpRouter(item)">
<course-image :course="item"></course-image>
<div class="uc-type">
<span v-if="item.courseType==10">录播</span>
<span v-if="item.courseType==20">录播</span>
<span v-if="item.courseType==30">线下课</span>
<span v-if="item.courseType==40">学习项目</span>
</div>
</div>
<div class="uc-course-info" @click="jumpRouter(item)">
<div class="uc-course-name" style="cursor: pointer;">
<div style="flex:1;">
<a v-html="$keywordActiveShow(item.courseName,params.courseName)" class="uc-title two-line-ellipsis"></a>
</div>
</div>
<div style="padding-top:6px" class="uc-course-text"><i class="el-icon-time" style="margin-right:4px"></i>报名时间{{ formatsec(Number(item.startTime) * 1000 )}}</div>
<div v-if="item.courseType==30">
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-location-outline" style="margin-right:4px"></i>面授地点{{ item.courseAddress }}</div>
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-timer" style="margin-right:4px"></i>上课时间{{ formatsec(Number(item.attendCourseTime) * 1000 ) }}</div>
</div>
<div v-else style="width: 80%;margin-top: 20px;display: flex;">
<div style="color: #333333;font-size: 14px;"><i class="el-icon-s-operation" style="margin-right:4px"></i>当前进度</div>
<div style="width:170px;padding-top: 5px;">
<el-progress :percentage="item.progress" color="#FFA050"></el-progress>
<div v-else>
<div style="display: flex;justify-content:space-between; padding: 12px 32px 10px 18px;">
<div style="display: flex;justify-content: flex-start;">
<span class="title-myqalist">我报名的</span>
<div style="margin-left:5px">
<el-select v-model="courseType" class="uc-select" clearable placeholder="类型">
<el-option label="全部类型" value=""></el-option>
<!-- <el-option label="微课" :value="10"></el-option> -->
<el-option label="录播课" :value="20"></el-option>
<!-- <el-option label="在线课" value="online-course"></el-option> -->
<!-- <el-option label="面授课" value="face-course"></el-option>
<el-option label="学习项目" value="project"></el-option> -->
<el-option label="线下课" :value="30"></el-option>
<el-option label="学习项目" :value="40"></el-option>
</el-select>
</div>
<el-select style="margin-left:12px" class="uc-select" v-model="status" clearable placeholder="学习进度">
<el-option label="所有进度" value="0"></el-option>
<el-option label="未开始" :value="1"></el-option>
<el-option label="进行中" :value="2"></el-option>
<el-option label="已完成" :value="9"></el-option>
<!-- <el-option label="已停用" :value="3"></el-option> -->
</el-select>
<div style="padding-left: 12px;"><el-input class="uc-input" v-model="params.courseName" clearable placeholder="搜索名称"></el-input></div>
<div style="padding-left: 12px;"><el-button type="primary" class="search-btn" icon="el-icon-search" @click="findStudys(true)">搜索</el-button></div>
<div style="padding-left: 12px"><el-button type="primary" class="search-btn" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
</div>
</div>
<div class="uc-course-btns">
<!-- <div style="text-align: right;">
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
<el-dropdown trigger="click" style="display: none;">
<span class="el-dropdown-link">
<svg-icon style="margin-right: 0;font-size:26px;" icon-class="spot"></svg-icon>
</span>
<el-dropdown-menu slot="dropdown" class="dropdown-box">
<el-dropdown-item command="a">
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
<div class="uc-list" v-loading="loading">
<div class="uc-course" v-for="(item,idx) in couresList" :key="idx">
<div class="uc-course-img" style="width: 260px;height:144px" @click="jumpRouter(item)">
<course-image :course="item"></course-image>
<div class="uc-type">
<span v-if="item.courseType==10">录播</span>
<span v-if="item.courseType==20">录播</span>
<span v-if="item.courseType==30">线下课</span>
<span v-if="item.courseType==40">学习项目</span>
</div>
</div>
<div class="uc-course-info" @click="jumpRouter(item)">
<div class="uc-course-name" style="cursor: pointer;">
<div style="flex:1;">
<a v-html="$keywordActiveShow(item.courseName,params.courseName)" class="uc-title two-line-ellipsis"></a>
</div>
</div>
<div style="padding-top:6px" class="uc-course-text"><i class="el-icon-time" style="margin-right:4px"></i>报名时间{{ formatsec(Number(item.startTime) * 1000 )}}</div>
<div v-if="item.courseType==30">
<div v-if="item.applyStatus==10"><!--报名待审核展示为等待审核-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">等待审核</el-button></div>
<!-- <div><el-button style="margin-top:30px;text-align: right;" type="text" size="small">取消报名</el-button></div> -->
</div>
<div v-if="item.applyStatus==20"><!--报名取消-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">已取消</el-button></div>
<div><el-button @click.stop="reSignupCourse(item)" style="margin-top:30px;text-align: right;" type="text" size="small">重新报名</el-button></div>
</div>
<div v-if="item.applyStatus==30"><!--报名审核通过展示为报名成功-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名成功</el-button></div>
</div>
<div v-if="item.applyStatus==40"><!--审核拒绝展示为报名失败-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名失败</el-button></div>
<div style="margin-top:30px;text-align: right;">
<el-button @click.stop="reSignupCourse(item)" type="text" size="small">重新报名</el-button>
<el-button @click.stop="delItem(item,idx)" type="text" size="small">删除</el-button>
</div>
</div>
<div v-if="item.applyStatus==50"><!--报名已删除展示为报名已删除-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名已删除</el-button></div>
<div><el-button @click.stop="delItem(item,idx)" style="margin-top:30px;text-align: right;" type="text" size="small">删除</el-button></div>
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-location-outline" style="margin-right:4px"></i>面授地点{{ item.courseAddress }}</div>
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-timer" style="margin-right:4px"></i>上课时间{{ formatsec(Number(item.attendCourseTime) * 1000 ) }}</div>
</div>
<div v-else style="width: 80%;margin-top: 20px;display: flex;">
<div style="color: #333333;font-size: 14px;"><i class="el-icon-s-operation" style="margin-right:4px"></i>当前进度</div>
<div style="width:170px;padding-top: 5px;">
<el-progress :percentage="item.progress" color="#FFA050"></el-progress>
</div>
</div>
<div v-else >
<span @click.stop="jumpRouter(item)">
<!-- <el-button style="margin-top:30px" v-if="item.progress==0" type="primary" size="small">开始学习</el-button> -->
<el-button style="margin-top:30px" v-if="item.progress<100" type="primary" size="small">继续学习</el-button>
<el-button style="margin-top:30px" v-if="item.progress==100" type="primary" size="small">回顾</el-button>
</span>
</div>
</div>
</div>
<div v-if="couresList.length > 0 " style="text-align: center;margin-top:57px;">
<el-pagination background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page.pageIndex"
:page-sizes="[10, 20, 30, 40]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.count">
</el-pagination>
</div>
<div class="list-wu">
<div v-if="loading"> <span>加载中...</span> </div>
<div v-else class="home-no-list">
<div v-if="page.count==0 && !loading">
<div v-if="isSearch">
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">未找到您要搜索的内容</p>
</div>
<div class="uc-course-btns">
<!-- <div style="text-align: right;">
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
<el-dropdown trigger="click" style="display: none;">
<span class="el-dropdown-link">
<svg-icon style="margin-right: 0;font-size:26px;" icon-class="spot"></svg-icon>
</span>
<el-dropdown-menu slot="dropdown" class="dropdown-box">
<el-dropdown-item command="a">
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
<div v-if="item.courseType==30">
<div v-if="item.applyStatus==10"><!--报名待审核展示为等待审核-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">等待审核</el-button></div>
<!-- <div><el-button style="margin-top:30px;text-align: right;" type="text" size="small">取消报名</el-button></div> -->
</div>
<div v-else >
<img class="img" style="width:360px;height:226px" :src="`${webBaseUrl}/images/homeWu/no-madel.png`" alt="" srcset="">
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">您还没有报名课程哦</p>
<div v-if="item.applyStatus==20"><!--报名取消-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">已取消</el-button></div>
<div><el-button @click.stop="reSignupCourse(item)" style="margin-top:30px;text-align: right;" type="text" size="small">重新报名</el-button></div>
</div>
<div v-if="item.applyStatus==30"><!--报名审核通过展示为报名成功-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名成功</el-button></div>
</div>
<div v-if="item.applyStatus==40"><!--审核拒绝展示为报名失败-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名失败</el-button></div>
<div style="margin-top:30px;text-align: right;">
<el-button @click.stop="reSignupCourse(item)" type="text" size="small">重新报名</el-button>
<el-button @click.stop="delItem(item,idx)" type="text" size="small">删除</el-button>
</div>
</div>
<div v-if="item.applyStatus==50"><!--报名已删除展示为报名已删除-->
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名已删除</el-button></div>
<div><el-button @click.stop="delItem(item,idx)" style="margin-top:30px;text-align: right;" type="text" size="small">删除</el-button></div>
</div>
</div>
<div v-else >
<span @click.stop="jumpRouter(item)">
<!-- <el-button style="margin-top:30px" v-if="item.progress==0" type="primary" size="small">开始学习</el-button> -->
<el-button style="margin-top:30px" v-if="item.progress<100" type="primary" size="small">继续学习</el-button>
<el-button style="margin-top:30px" v-if="item.progress==100" type="primary" size="small">回顾</el-button>
</span>
</div>
</div>
</div>
</div>
<div v-if="couresList.length > 0 " style="text-align: center;margin-top:57px;">
<el-pagination background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page.pageIndex"
:page-sizes="[10, 20, 30, 40]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.count">
</el-pagination>
</div>
<div class="list-wu">
<div v-if="loading"> <span>加载中...</span> </div>
<div v-else class="home-no-list">
<div v-if="page.count==0 && !loading">
<div v-if="isSearch">
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">未找到您要搜索的内容</p>
</div>
<div v-else >
<img class="img" style="width:360px;height:226px" :src="`${webBaseUrl}/images/homeWu/no-madel.png`" alt="" srcset="">
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">您还没有报名课程哦</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View File

@@ -0,0 +1,567 @@
<template>
<div>
<div style="background-color: #0078fc;">
<portalHeader textColor="#fff" class="qa-nav" @emitInput="emitInput" @showClass="showClass"></portalHeader>
</div>
<div style=" background: #0078fc;height: 150px;width: 100%;position: absolute;top: 0;z-index:-9999;"></div>
<div class="moreactive" style="padding: 30px">
<!-- 面包屑导航 -->
<div class="crumb">
<div>学习任务</div>
<div style="margin-left: 6px; margin-right: 6px">/</div>
<div>外部考试</div>
<div style="margin-left: 6px; margin-right: 6px">/</div>
<div style="font-weight: 700; font-size: 16px">考试详情</div>
<div class="return">
<div style="background: #fff;display: flex;color:#0073FB;align-items: center;justify-content: center;border-radius: 6px;width: 92px;height: 32px;" @click="returnclick">
<!-- <div style="color:#0073FB;display: flex;align-items: center;"> -->
<img class="img2" style="margin-right:11px;cursor: pointer;" src="../../assets/images/growth/return.png" />
<span>返回</span>
<!-- </div> -->
</div>
</div>
</div>
<!-- 面包屑导航 -->
<!-- 详细信息 -->
<div class="detailinfo">
<div class="detail">
<div class="detailT">
<div class="left">
<div class="debateTitle" style="color:rgba(51, 51, 51, 1);font-size:20px;margin-top:46px;">考试{{ this.$route.query.pName }}</div>
<div class="title">
<img
style="width: 20px; height: 20px"
src="../../assets/images/growth/yuan.png"
/>
<div class="text">数据来源</div>
<div class="box"></div>
</div>
<div class="all" style="font-size:14px;color:rgba(51, 51, 48, 1);">
{{ datainfo.source ? datainfo.source : "-" }}
</div>
</div>
</div>
<div class="detailT" style="margin-top:20px;height:671px;">
<div class="left">
<div class="title">
<img
style="width: 20px; height: 20px"
src="../../assets/images/growth/yuan.png"
/>
<div class="text">考试说明</div>
<div class="box"></div>
</div>
<!-- <div style="display: flex; align-items: center"></div> -->
<div class="all" style="font-size:14px;color:rgba(51, 51, 48, 1);">
<div>
{{ datainfo.examinationExplain ? datainfo.examinationExplain : "暂无考试说明" }}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 详细信息 -->
</div>
</div>
</template>
<script>
import portalHeader from '@/components/PortalHeader.vue';
import {queryExternalExam,submitExternalExam} from '@/api/growth/index'
export default {
name: "ExamScore",
components: { portalHeader },
data() {
return {
hasPrev: false,
hasNext: false,
exname: "",
datainfo: {},
};
},
mounted() {
queryExternalExam({
externalId: this.$route.query.courseId
}).then(res=>{
console.log(res,'res')
this.datainfo = res.data
})
},
methods: {
returnclick () {
this.$router.back();
},
emitInput(val) {
this.queryKeyWord = val;
this.isSeach = true;
this.search();
},
showClass(flag) {
if (flag) {
this.showUClass = flag;
}
},
},
}
</script>
<style scoped lang="scss">
.clearfix:before,
.clearfix:after {
content: "";
display: table;
clear: both;
}
.moreactive {
.crumb {
color: #fff;
display: flex;
font-size: 14px;
line-height: 24px;
position: relative;
}
.return{
position: absolute;
right: 1%;
.text{
text-align: center;
display: flex;
flex-direction: row;
align-items: center;
}
}
.preNext {
position: absolute;
right: 0px;
.content {
font-size: 14px;
color: #fff;
width: 43px;
height: 14px;
display: inline-block;
position: relative;
top: -6px;
cursor: pointer;
}
.btn {
width: 23px;
height: 23px;
border-radius: 50%;
border: 0;
cursor: pointer;
}
}
.debateTitle {
margin-top: 15px;
font-size: 20px;
line-height: 24px;
height: 24px;
font-weight: 600;
color: #fff;
margin-left: -10px;
}
.detailinfo {
width: 100%;
margin-top: 20px;
display: flex;
.detail {
flex: 1;
// margin-right: 20px;
.detailT {
min-height: 95px;
background: #ffffff;
border-radius: 8px;
color: rgba(51, 51, 51, 1);
display: flex;
padding-bottom: 20px;
.left {
margin-left: 48px;
flex: 1;
}
.right {
width: 417px;
margin-right: 48px;
.righttitle {
display: flex;
padding-top: 39px;
position: relative;
.text {
margin-left: 8px;
font-size: 16px;
color: rgba(51, 51, 51, 1);
font-weight: 800;
}
.box {
width: 75px;
height: 10px;
background-color: rgba(36, 120, 255, 0.15);
position: absolute;
left: 23px;
top: 53px;
}
}
.timebox {
width: 417px;
height: 149px;
background: linear-gradient(90deg, #b6c6e1 0%, #89aed6 100%);
border-radius: 4px;
margin-top: 42px;
}
.innertime {
margin-top: 17px;
margin-left: 55px;
font-size: 14px;
font-weight: 500;
color: #ffffff;
line-height: 24px;
}
.endtime {
margin-left: 10px;
margin-top: 16px;
width: 397px;
height: 81px;
background: #f2f5f7;
border-radius: 0px 8px 0px 8px;
.endtimetext {
margin-top: 25px;
margin-left: 46px;
.te {
font-size: 28px;
font-weight: 800;
color: #4a9cf8;
line-height: 24px;
}
}
}
.explain {
margin-top: 30px;
width: 416px;
padding-bottom: 50px;
background: #f2f5f7;
border-radius: 8px;
}
.explaincontent {
width: 368px;
font-size: 16px;
font-weight: 500;
color: #333330;
line-height: 24px;
margin-left: 24px;
margin-top: 47px;
}
}
.title {
display: flex;
align-items: center;
padding-top: 39px;
position: relative;
}
.title .text {
margin-left: 8px;
font-size: 16px;
color: rgba(51, 51, 51, 1);
font-weight: 800;
}
.title .box {
width: 75px;
height: 10px;
background-color: rgba(36, 120, 255, 0.15);
position: absolute;
left: 23px;
top: 53px;
}
.all {
display: flex;
justify-content: space-between;
// width: 1280px;
margin-right: 48px;
margin-top: 43px;
.allbox1 {
margin-right: 22px;
background: linear-gradient(
0deg,
rgba(160, 193, 230, 0) 0%,
rgba(161, 195, 231, 0.2) 100%
);
}
.allbox2 {
margin-right: 22px;
background: linear-gradient(
0deg,
rgba(177, 219, 229, 0) 0%,
rgba(172, 216, 227, 0.2) 100%
);
}
.allbox3 {
background: linear-gradient(
0deg,
rgba(195, 209, 234, 0) 0%,
rgba(191, 206, 231, 0.2) 100%
);
}
.item {
// width: 410px;
width: calc(100% - 44px);
height: 149px;
text-align: center;
border-radius: 4px;
.item1 {
color: #089dff;
font-size: 24px;
font-weight: bold;
margin-top: 36px;
}
.item2 {
color: #333330;
font-size: 14px;
margin-top: 29px;
}
}
}
.join {
// width: 1280px;
margin-right: 48px;
// min-height: 408px;
// background: #f5f6f7;
// border-radius: 8px;
margin-top: 32px;
margin-left: 21px;
flex: 1;
.stem {
display: flex;
font-size: 16px;
font-weight: 500;
color: #333330;
line-height: 38px;
}
.options {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.radio {
margin-top: 14px;
margin-left: -16px;
position: relative;
}
.radio label {
line-height: 20px;
position: relative;
display: flex;
align-items: center;
font-weight: normal;
.opt-text {
font-size: 14px;
font-weight: bold;
color: #333330;
line-height: 18px;
margin-left: 10px;
}
}
.radio .option {
width: 19px;
height: 18px;
// position: absolute;
// top: 1px;
// // top: 32px;
// left: 0px;
background-size: cover;
// background: url(../../assets/image/noselect.png) no-repeat;
background-size: cover;
}
.radio input[type="radio"] {
display: inline-block;
margin-right: -3px;
opacity: 0;
}
.radio input[type="radio"]:checked + div {
// background: url(../../assets/image/select.png) no-repeat;
background-size: cover;
}
.imgcontent {
display: flex;
.imgone {
width: 140px;
height: 140px;
border-radius: 8px;
// background-image: url(../../assets/image/px.png);
background-size: 100% 100%;
background-position: center;
}
}
.ontitle {
margin-top: 27px;
font-size: 14px;
color: #333330;
}
}
}
.detailB {
min-height: 363px;
background: #ffffff;
border-radius: 8px;
margin-top: 20px;
.el-tabs__item {
height: 69px;
padding: 25px 7px 0px 52px;
font-size: 14px;
font-weight: 500;
}
.el-tabs__nav-wrap::after {
background-color: rgba(56, 125, 247, 0.2);
}
.enclosure {
height: 89px;
margin-left: 51px;
margin-right: 40px;
// border-bottom: 1px solid rgba(56, 125, 247, 0.2);
display: flex;
justify-content: space-between;
align-items: center;
.enclosureL {
display: flex;
align-items: center;
font-size: 14px;
font-weight: 400;
color: #677d86;
line-height: 24px;
}
.download {
display: flex;
align-items: center;
font-size: 16px;
font-weight: 400;
color: #2478ff;
line-height: 24px;
cursor: pointer;
}
}
.work {
margin-left: 51px;
margin-right: 40px;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 37px;
}
.work .question {
font-size: 14px;
font-weight: 500;
color: #333330;
line-height: 18px;
}
.work .active {
width: 82px;
height: 28px;
background: linear-gradient(90deg, #a5d4e0 0%, #b4dce6 100%);
border-radius: 4px;
font-size: 14px;
font-weight: 500;
color: #ffffff;
line-height: 24px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
margin-right: 11px;
}
.work .unactive {
width: 80px;
height: 26px;
border: 1px solid #a5d4e0;
border-radius: 4px;
font-size: 14px;
font-weight: 500;
color: #a5d4e0;
line-height: 24px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 11px;
cursor: pointer;
}
.work .btncolor {
background: linear-gradient(90deg, #84aad2 0%, #a4c5e9 100%);
}
.work .bordercolor {
border: 1px solid #85aad2;
}
.work .fontcolor {
color: rgba(133, 170, 210, 1);
}
.work .submit {
width: 126px;
height: 46px;
background: #2478ff;
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
border-radius: 4px;
font-size: 16px;
font-weight: 800;
color: #ffffff;
line-height: 24px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
}
}
}
}
</style>

653
src/views/study/Growth.vue Normal file
View File

@@ -0,0 +1,653 @@
<template>
<div>
<div v-if="Object.keys(detailData).length" class="growth">
<div class="growth_heads">
<div class="growth_left">
<div class="left_text">我的专业力必修</div>
<el-popover
placement="right"
width="437"
trigger="hover"
:visible-arrow="false"
v-model="explainBody"
popper-class="growth_explain"
>
<div slot="reference" class="growth_i">
<div class="growth_mark">?</div>
</div>
<div class="growth_explain1">
<div class="growth_explain_text">
<div class="text">根据您的归属组织您所在岗位职级已为您自动匹配{{detailData.growName || ''}}抓紧时间学习吧</div>
<div class="explain_close" @click="explainBody = false"></div>
</div>
</div>
</el-popover>
</div>
<div class="growth_right">
<div class="right_text">什么是专业力必修</div>
<div class="growth_img" @click="checkedTrue">
<img class="img" src="../../assets/images/growth/mark.png" alt="">
</div>
</div>
</div>
<div class="growth_body">
<div class="body_head">
<div class="head_left">{{detailData.growName || ''}}</div>
<div class="head_right">
<div class="head_right_one">{{detailData.organizationName || ''}}</div>
<div class="head_right_two">
<span class="head_right_sta">学习状态:</span>
<span class="head_right_status" :style="{color: ['#FF8336','#31AF0D','#409EFF '][detailData.studyStatus]}"> {{detailData.studyStatus==0?'未开始':detailData.studyStatus==1?'已完成':'进行中'}}</span>
</div>
</div>
</div>
<!-- <el-popover
placement="bottom-end"
width="300"
trigger="click"
:visible-arrow="false"
v-model="downBody"
offset="0"
popper-class="growth_body_down"
>
<div slot="reference" class="growth_body_shared">
<img class="shared_img" src="../../assets/images/growth/growthRight.png" alt="">
<span class="shared_text">共享文档</span>
</div>
<div class="growth_body_down">
<div class="down_head">
<span class="down_head_text">共享文档</span>
<div class="down_close" @click="downBody = false">
<img class="down_close_img" src="../../assets/images/growth/close.png" alt="">
</div>
</div>
<div class="down_over">
<div class="down_body" v-for="itme in 10">
<div class="down_body_left">
<img class="left_img" src="../../assets/images/growth/ppt.png" alt="">
<span title="人工智能启蒙讲解讲义.pptx" class="left_text">人工智能启蒙讲解讲义.pptx</span>
</div>
<div class="down_btn">
<span class="down_btn_text">下载</span>
</div>
</div>
</div>
</div>
</el-popover> -->
<div v-if="detailData.remark" class="body_explain">
<div class="body_explain_icon">
<img class="body_explain_img" src="../../assets/images/growth/growthLeft.png" alt="">
<div class="body_explain_text">说明</div>
</div>
<div class="body_explain_item">
<div class="body_explain_text">
{{detailData.remark || ''}}
</div>
</div>
</div>
<div class="body_schedule" v-if="detailData.taskNum > 0">
<div class="body_schedule_icon">
<img class="body_schedule_img" src="../../assets/images/growth/growthTime.png" alt="">
<div class="body_schedule_text">学习进度</div>
</div>
<div class="body_schedule_item">
<div class="body_schedule_one">
<div class="body_schedule_left">
<div style="margin-bottom: 9px;">总任务</div>
<div>当前任务</div>
</div>
<div class="body_schedule_right">
<div style="margin-bottom: 9px;">{{detailData.taskNum}}</div>
<div :title="detailData.currentTaskName">{{detailData.currentTaskName.length>30?detailData.currentTaskName.slice(0,30)+'...':detailData.currentTaskName}}</div>
</div>
</div>
<div class="body_schedule_two">
<div class="body_schedule_pro">
<div class="pro_text">总进度</div>
<div style="display: flex;align-items: center;">
<el-progress style="width: 213px;" :show-text="false" :stroke-width="10" :percentage="Number(((detailData.overallCompletionRate || 0)*100).toFixed(2))"></el-progress>
<div class="text">{{ Number(((detailData.overallCompletionRate || 0)*100).toFixed(2)) || 0 }}%</div>
</div>
</div>
<div class="body_schedule_btn" @click="startLearn">
<span class="body_schedule_text">{{detailData.overallCompletionRate==0?'开始学习':detailData.overallCompletionRate==1?'回顾':'继续学习'}}</span>
</div>
</div>
</div>
</div>
<div v-else>
<el-empty :image-size="200"></el-empty>
</div>
</div>
<div>
<el-dialog
title="专业力必修说明"
:visible.sync="centerDialogVisible"
width="476px"
style="margin-top: 30vh;"
center>
<div class="dialog_body">
<div class="dialog_body_text">
本功能针对学员所在组织岗位职级自动匹配专业力必修任务完成专业力必修任务方可晋升
</div>
<div @click="centerDialogVisible = false" class="dialog_body_btn">
<span>我已阅读</span>
</div>
<div class="dialog_body_foot">
<el-checkbox v-model="checked">下次进入不再弹窗</el-checkbox>
</div>
</div>
</el-dialog>
</div>
</div>
<el-empty v-else :image-size="200"></el-empty>
</div>
</template>
<script>
import {getList} from '@/api/growth'
import {mapGetters} from 'vuex'
export default {
name: 'Growth',
data() {
return {
downBody: false,
explainBody: false,
centerDialogVisible: false,
checked: false,
detailData: {},
}
},
mounted() {
getList(this.userInfo.aid).then(res=>{
if(res.code == 200 ){
this.detailData = res.data
}
if(res.code == 4){
// this.$message({
// type: 'error',
// message: res.msg
// })
}
})
if(localStorage.getItem("checkedGrowth") != null){
this.centerDialogVisible = localStorage.getItem("checkedGrowth") === "true"
}else{
this.centerDialogVisible = true
}
},
watch:{
checked(){
this.checkedVisible()
}
},
methods: {
startLearn(){
this.$router.push({
path: '/growthpath',
query: {growId:this.detailData.growId,name: this.detailData.growName,isTrue: true,status:this.detailData.overallCompletionRate}
})
},
checkedTrue(){
this.centerDialogVisible = true
this.checked = localStorage.getItem("checkedGrowth") === "false"
},
checkedVisible(){
// this.centerDialogVisible = false
localStorage.setItem("checkedGrowth",!this.checked)
},
},
computed: {
...mapGetters(['userInfo'])
},
};
</script>
<style scoped lang="scss">
::v-deep .el-dialog__header{
height: 68px;
background: linear-gradient( 180deg, #E1DAFF 0%, #FFFFFF 100%);
padding-top: 23px;
margin-bottom: 36px;
}
::v-deep .el-dialog__body{
padding: 0;
}
.growth_body_down{
background-image: url(../../assets/images/growth/fileBack.png);
background-repeat: no-repeat;
background-size:100%;
width: 487px;
max-height: 452px;
position: absolute;
right: -120px;
top: -22px;
padding-right: 32px;
.down_head{
margin-top: 57px;
margin-bottom: 34px;
text-align: center;
position: relative;
.down_head_text{
width: 96px;
height: 28px;
font-weight: 600;
font-size: 24px;
color: #387DF7;
line-height: 28px;
text-align: left;
}
.down_close{
position: absolute;
cursor: pointer;
right: 37px;
top: -18px;
.down_close_img{
width: 26px;
height: 26px;
}
}
}
.down_over{
padding: 0px 40px 0px 63px;
overflow-y: auto;
max-height: 309px;
.down_body{
display: flex;
justify-content: space-between;
margin-bottom: 22px;
.down_body_left{
display: flex;
.left_img{
width: 20px;
height: 20px;
}
.left_text{
display: inline-block;
overflow: hidden;
text-align: left;
white-space: nowrap;
text-overflow: ellipsis;
margin-left: 18px;
width: 210px;
height: 20px;
font-weight: 500;
font-size: 14px;
color: #677D86;
line-height: 20px;
}
}
.down_btn{
cursor: pointer;
width: 70px;
height: 28px;
line-height: 28px;
border-radius: 4px;
border: 1px solid #387DF7;
text-align: center;
.down_btn_text{
width: 28px;
height: 20px;
font-weight: 400;
font-size: 14px;
color: #387DF7;
line-height: 20px;
}
}
}
}
}
.growth_explain{
top: 347xp !important;
.growth_explain1{
display: flex;
justify-content: center;
align-items: center;
width: 487px;
height: 170px;
margin: -37px;
background: url("../../assets/images/growth/explain.png") no-repeat;
background-size: 100%;
.growth_explain_text{
width: 376px;
height: 56px;
font-weight: 400;
font-size: 14px;
color: #333333;
line-height: 28px;
text-align: left;
position: relative;
.text{
display: -webkit-box;
word-wrap: break-word;
word-break:break-all;
overflow: hidden;
text-overflow:ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp:2;
}
.explain_close{
cursor: pointer;
background-image: url(../../assets/images/growth/close.png);
z-index: 99999;
width: 26px;
height: 26px;
position: absolute;
right: -21px;
top: -26px;
}
}
}
}
.growth{
.dialog_body{
height: 238px;
margin-bottom: 32px;
.dialog_body_text{
width: 372px;
height: 52px;
font-weight: 400;
font-size: 14px;
color: #333333;
line-height: 26px;
text-align: left;
margin: 0 auto;
margin-bottom: 56px;
}
.dialog_body_btn{
cursor: pointer;
width: 152px;
margin: 0 auto;
margin-bottom: 31px;
height: 40px;
background: #387DF7;
box-shadow: 1px 2px 8px 1px rgba(56,125,247,0.38);
border-radius: 4px;
text-align: center;
line-height: 40px;
color: #ffffff;
font-size: 14px;
}
.dialog_body_foot{
margin: 0 0 40px 61px;
}
}
.growth_heads{
display: flex;
justify-content: space-between;
margin: 10px 43px 29px 40px;
position: relative;
.growth_left{
display: flex;
justify-content: center;
line-height: 40px;
.left_text{
// width: 108px;
height: 25px;
font-weight: 600;
font-size: 14px;
color: #333333;
text-align: left;
}
.growth_i{
cursor: pointer;
width: 16px;
height: 16px;
margin-left: 6px;
border: 1px solid #999999;
border-radius: 100%;
margin-top: 13px;
.growth_mark{
color: #999999;
line-height: 15px;
margin-left: 4px;
}
}
}
.growth_right{
width: 158px;
height: 32px;
line-height: 32px;
background: #387DF7;
box-shadow: 1px 2 12px 1px rgba(56,125,247,0.34);
border-radius: 16px;
display: flex;
justify-content: center;
.right_text{
// width: 112px;
height: 22px;
font-weight: 400;
font-size: 13px;
color: #FFFFFF;
text-align: left;
}
.growth_img{
cursor: pointer;
width: 16px;
height: 16px;
margin-left: 10px;
.img{
width: 100%;
vertical-align: middle;
}
}
}
}
.growth_body{
// max-width: 1340px;
height: 574px;
background: #FFFFFF;
border-radius: 10px;
border: 1px solid #E4EDFE;
margin: 0 41px 0px 38px;
position: relative;
.growth_body_shared{
cursor: pointer;
position: absolute;
right: 46px;
top: 107px;
.shared_img{
width: 21px;
height: 18px;
}
.shared_text{
width: 64px;
height: 22px;
font-weight: 600;
font-size: 16px;
color: #409EFF;
line-height: 22px;
text-align: left;
margin-left: 9px;
}
}
.body_head{
// max-width: 1066px;
height: 70px;
background: linear-gradient( 180deg, #DEEBFF 0%, #FFFFFF 100%);
border-radius: 10px 10px 0px 0px;
border: 1px solid #E4EDFE;
display: flex;
justify-content: space-between;
margin-bottom: 23px;
.head_left{
// width: 272px;
// height: 28px;
font-weight: 600;
font-size: 16px;
color: #387DF7;
// line-height: 28px;
text-align: left;
margin: 23px 0 0 26px;
}
.head_right{
// width: 326px;
height: 22px;
font-weight: 400;
font-size: 13px;
color: #666660;
line-height: 22px;
margin: 25px 36px 0 0;
display: flex;
justify-content: space-between;
line-height: 22px;
.head_right_one{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.head_right_two{
margin-left: 14px;
.head_right_sta{
}
.head_right_status{
color: #409EFF;
}
}
}
}
.body_explain{
margin-bottom: 20px;
.body_explain_icon{
display: flex;
margin-left: 28px;
margin-bottom: 20px;
.body_explain_img{
width: 16px;
height: 16px;
margin-top: 4px;
}
.body_explain_text{
width: 32px;
height: 22px;
font-weight: 600;
font-size: 13px;
color: #333333;
line-height: 22px;
text-align: left;
margin-left: 8px;
}
}
.body_explain_item{
margin-left: 28px;
margin-right: 36px;
// max-width: 1003px;
max-height: 80px;
background: #F5F6F7;
border-radius: 8px;
padding: 18px 20px 18px 13px;
.body_explain_text{
// max-width: 970px;
max-height: 45px;
font-weight: 400;
font-size: 11px;
color: #333333;
line-height: 22px;
display: -webkit-box;
word-wrap: break-word;
word-break:break-all;
overflow: hidden;
text-overflow:ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp:2;
}
}
}
.body_schedule{
.body_schedule_icon{
display: flex;
margin-bottom: 27px;
.body_schedule_img{
width: 16px;
height: 16px;
margin-left: 28px;
margin-top: 3px;
}
.body_schedule_text{
width: 64px;
height: 22px;
font-weight: 600;
font-size: 13px;
color: #333333;
line-height: 22px;
text-align: left;
margin-left: 8px;
}
}
.body_schedule_item{
margin-left: 58px;
.body_schedule_one{
display: flex;
margin-bottom: 41px;
.body_schedule_left{
min-width: 52px;
font-weight: 500;
font-size: 13px;
color: #3B3C4A;
line-height: 18px;
text-align: left;
}
.body_schedule_right{
margin-left: 13px;
min-width: 65px;
font-weight: 500;
font-size: 13px;
color: #2E72F2;
line-height: 18px;
text-align: left;
}
}
.body_schedule_two{
display: flex;
.body_schedule_pro{
width: 250px;
height: 30px;
.pro_text{
width: 42px;
height: 18px;
font-weight: 400;
font-size: 11px;
color: #666660;
line-height: 18px;
text-align: left;
margin-bottom: 2px;
}
.text{
font-weight: 400;
font-size: 10px;
color: #333333;
margin-left: 15px;
line-height: 14px;
}
}
.body_schedule_btn{
width: 112px;
cursor: pointer;
height: 32px;
margin-left: 35px;
margin-top: 6px;
background: #409EFF;
box-shadow: 1px 2 12px 1px rgba(56,125,247,0.34);
border-radius: 3px;
text-align: center;
line-height: 30px;
.body_schedule_text{
width: 52px;
height: 18px;
font-weight: 400;
font-size: 13px;
color: #FFFFFF;
line-height: 18px;
text-align: left;
}
}
}
}
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,80 +1,89 @@
<template>
<div>
<!-- <div style="display:flex; padding-left:20px; width:100%">
<div style="width:100px">完成情况</div>
<div class="progress"><div class="msg">课程完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.course" status="warning" class="progressItem"> </el-progress> </div>
<div class="progress" ><div class="msg">项目完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.project" status="success" class="progressItem"> </el-progress> </div>
<div class="progress"><div class="msg">路径图完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.router" class="progressItem"> </el-progress> </div>
</div> -->
<div style="display: flex; justify-content: space-between; padding: 12px 32px 10px 22px;">
<div style="display: flex; justify-content: flex-start">
<div>
<el-select class="search-input" v-model="status" clearable placeholder="学习进度">
<el-option label="全部" value=""></el-option>
<el-option label="未开始" value="0"></el-option>
<el-option label="进行中" value="1"></el-option>
<el-option label="已完成" value="2"></el-option>
</el-select>
</div>
<div style="padding-left: 10px"><el-input v-model="params.cmtask_name" clearable placeholder="搜索名称"></el-input></div>
<div class="button-class" style="padding-left: 10px"><el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button></div>
<div class="button-class" style="padding-left: 10px"><el-button type="primary" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
</div>
<div style="margin-top: 50px;" v-if="isType == 9||couresList.length == 0">
<el-empty description="您当前暂无学习数据~"></el-empty>
</div>
<!--课程列表内容-->
<div class="uc-list" v-if="couresList.length > 0">
<div class="uc-course" v-for="(item, idx) in couresList" @click="jumpRouter(item)" :key="idx">
<div class="uc-course-img">
<img :src="item.cmtask_imgurl" />
<span class="spanname" v-if="item.cmtask_type==1">学习路径图</span>
<span class="spanname" v-if="item.cmtask_type==2">学习项目</span>
<!-- 类型3不显示20230307 东吴说已确认的修改 -->
<!-- <span class="spanname" v-if="item.cmtask_type==3">老系统必修任务</span> -->
</div>
<div class="uc-course-info">
<!-- 任务名称 -->
<div class="uc-course-name one-line-ellipsis" style="cursor: pointer">
<span v-if="item.type==10" class="uc-course-type2">录播</span>
<span v-if="item.type==20" class="uc-course-type2">录播</span>
<!-- <a href="/course/detail?id=" target="_blank"> {{item.name}}</a> -->
<span v-html="item.cmtask_name"></span>
<div v-else>
<!-- <div style="display:flex; padding-left:20px; width:100%">
<div style="width:100px">完成情况</div>
<div class="progress"><div class="msg">课程完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.course" status="warning" class="progressItem"> </el-progress> </div>
<div class="progress" ><div class="msg">项目完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.project" status="success" class="progressItem"> </el-progress> </div>
<div class="progress"><div class="msg">路径图完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.router" class="progressItem"> </el-progress> </div>
</div> -->
<!-- <div v-if="isType == 2" class="title">
<div class="item" style="margin-right: 19px;" :class="typeClass == 1?'item1':'item'" @click="learnType(1)">学习项目</div>
<div class="item" :class="typeClass == 2?'item1':'item'" @click="learnType(2)">学习路径</div>
</div> -->
<div style="display: flex; justify-content: space-between; padding: 12px 32px 10px 22px;">
<div style="display: flex; justify-content: flex-start">
<div>
<el-select class="search-input" v-model="status" clearable placeholder="学习进度">
<el-option label="全部" value=""></el-option>
<el-option label="未开始" value="0"></el-option>
<el-option label="进行中" value="1"></el-option>
<el-option label="已完成" value="2"></el-option>
</el-select>
</div>
<!-- <div class="uc-course-source" @click="jumpRouter(item)">来源{{ item.cmtask_name }}</div> -->
<div style="padding-top: 18px; " class="uc-course-text">学习进度
<span v-if="item.cmtask_user_status==0">未开始</span>
<span v-if="item.cmtask_user_status==1">进行中</span>
<span v-if="item.cmtask_user_status==2">已完成</span>
</div>
<!-- <div class="uc-course-time">推送时间{{ formatsec(Number(item.updated_at) * 1000 )}}</div> -->
<div class="uc-course-time">推送时间{{ item.created_at}}</div>
</div>
<div class="uc-course-btns">
<el-button @click="jumpRouter(item)" type="primary" size="small">开始学习</el-button>
<div style="padding-left: 10px"><el-input v-model="params.cmtask_name" clearable placeholder="搜索名称"></el-input></div>
<div class="button-class" style="padding-left: 10px"><el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button></div>
<div class="button-class" style="padding-left: 10px"><el-button type="primary" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
</div>
</div>
<div style="height:150px; text-align: center; margin-top:57px;" >
<el-pagination background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:current-page="page"
:page-size="size"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
<!--课程列表内容-->
<div class="uc-list" v-if="couresList.length > 0">
<div class="uc-course" v-for="(item, idx) in couresList" @click="jumpRouter(item)" :key="idx">
<div class="uc-course-img">
<img :src="item.cmtask_imgurl" />
<span class="spanname" v-if="item.cmtask_type==1">学习路径图</span>
<span class="spanname" v-if="item.cmtask_type==2">学习项目</span>
<!-- 类型3不显示20230307 东吴说已确认的修改 -->
<!-- <span class="spanname" v-if="item.cmtask_type==3">老系统必修任务</span> -->
</div>
<div class="uc-course-info">
<!-- 任务名称 -->
<div class="uc-course-name one-line-ellipsis" style="cursor: pointer">
<span v-if="item.type==10" class="uc-course-type2">录播</span>
<span v-if="item.type==20" class="uc-course-type2">录播</span>
<!-- <a href="/course/detail?id=" target="_blank"> {{item.name}}</a> -->
<span v-html="item.cmtask_name"></span>
</div>
<!-- <div class="uc-course-source" @click="jumpRouter(item)">来源{{ item.cmtask_name }}</div> -->
<div style="padding-top: 18px; " class="uc-course-text">学习进度
<span v-if="item.cmtask_user_status==0">未开始</span>
<span v-if="item.cmtask_user_status==1">进行中</span>
<span v-if="item.cmtask_user_status==2">已完成</span>
</div>
<!-- <div class="uc-course-time">推送时间{{ formatsec(Number(item.updated_at) * 1000 )}}</div> -->
<div class="uc-course-time">推送时间{{ item.created_at}}</div>
</div>
<div class="uc-course-btns">
<el-button @click="jumpRouter(item)" type="primary" size="small">开始学习</el-button>
</div>
</div>
<div style="height:150px; text-align: center; margin-top:57px;" >
<el-pagination background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:current-page="page"
:page-size="size"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</div>
<!-- </div> -->
<div v-else class="zan-wu">
<div v-if="loading">
<span v-if="couresList.length==0">正在加载数据...</span>
<span v-else>查询中...</span>
</div>
<div v-else>
<span v-if="couresList.length==0">没有查询到相关内容</span>
</div>
</div>
</div>
<!-- </div> -->
<div v-else class="zan-wu">
<div v-if="loading">
<span v-if="couresList.length==0">正在加载数据...</span>
<span v-else>查询中...</span>
</div>
<div v-else>
<span v-if="couresList.length==0">没有查询到相关内容</span>
</div>
</div>
</div>
</template>
@@ -107,19 +116,48 @@ export default {
keyword:'',
formatsec,
couresList:[],
total: 0
total: 0,
isType: null,
typeClass: true,
};
},
watch:{
'$route': {
handler(to, from) {
console.log('type变化了', to.query.type);
this.isType = to.query.type;
this.totalNums = sessionStorage.getItem('totalNums')
if(this.totalNums == 0){
this.isType = 9
}
if(this.isType != 9){
this.loadBoeData();
}
},
immediate: true
}
},
mounted() {
this.loadBoeData();
this.getPossData()
this.totalNums = sessionStorage.getItem('totalNums')
},
methods: {
learnType(item){
this.typeClass = item
this.reset()
},
jumpRouter(item) {
//location.href=`${this.webBaseUrl}/course/boeframe?id=${item.cmtask_id}`;
//let urlPre=window.location.protocol+'//'+window.location.host;
let studentPath=process.env.VUE_APP_STUDENT_PATH;
// type: 0 新任管理者1 学习项目 2 学习路径图 3 成长路径
let type = {1:'2',2:'1',3:'0'}[item.cmtask_type]
if(this.$route.query.type==1 || !this.$route.query.type){
type = '0'
}
// apiManage.userRead({type,id:item.cmtask_id})
if(item.cmtask_type==1){ //学习路径图
let params=encodeURIComponent('routerId='+item.cmtask_id);
//this.$router.push('/forward?to='+studentPath+'/pathdetails&params='+params);
@@ -130,6 +168,9 @@ export default {
}else if(item.cmtask_type==3){
let pushUrl=`/course/boeframe?id=${item.cmtask_id}&type=3`;
this.$router.push(pushUrl);
}else if(item.cmtask_type==4){
let params=encodeURIComponent('projectId='+item.cmtask_id);
this.$router.push('/forward?to='+studentPath+'/projectdetails&params='+params);
}
},
getPossData(){
@@ -157,17 +198,56 @@ export default {
cmtask_name:this.params.cmtask_name,
}
this.loading=true;
apiManage.userTaskList(params).then(res=>{
if(this.isType == 1){
//领导力必修
apiManage.leadership(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
})
}else if (this.isType == 2){
//定制化学习
apiManage.compulsoryList(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
this.loading=false;
})
}else{
apiManage.leadership(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
})
// apiManage.userTaskList(params).then(res=>{
// if(res.code==200){
// this.total =parseInt(res.data.total);
// this.couresList = res.data.records;
// }else{
// this.$message.error('查询数据失败:'+res.msg);
// }
// this.loading=false;
// }).catch(()=>{
// this.loading=false;
// })
}
},
search(){
this.page=1;
@@ -196,6 +276,31 @@ export default {
</script>
<style scoped lang="scss">
.title{
display: flex;
margin-left: 22px;
margin-bottom: 6px;
.item{
width: 100px;
height: 46px;
line-height: 46px;
text-align: center;
font-size: 18px;
color: #666666;
}
.item1{
// border-bottom: #409EFF 4px solid;
position: relative;
&::before {
content: "";
position: absolute;
bottom: 0;
left: 10px;
width: 80px;
border-bottom: 4px solid #409EFF;
}
}
}
.progress{
width:calc((100% - 100px) / 3);
display: flex;

View File

@@ -401,6 +401,7 @@
studyId: '', //当前学习的id
initContentId: '', //初始化当前学习的内容节
blobUrl: '', //播放的文件地址新添加采用blob方式
blobId: '', //播放的文件地址对应的contents ID
contentData: {
studyItemId: '',
status: 1
@@ -454,6 +455,7 @@
cumulativeDuration:0, //非音频累计时长
maxDuration:0, //非音频最大时长
defaultMaxTime:1800, //非音频默认最大时间
videoIndex: 0 // 当前视频index
}
},
mounted() {
@@ -501,7 +503,7 @@
}
treeList.push(treeNode);
});
// console.log(treeList,'treeList')
console.log(treeList,'treeList')
return treeList;
}
},
@@ -641,19 +643,18 @@
createPlayUrl(fid, u) {
let nowDate = new Date();
let ctime = parseInt(nowDate.getTime() / 1000);
let beforeUrl = parseInt(nowDate.getTime() / 1000) + '/' + fid;
const userNo = this.userInfo.userNo
let beforeUrl = parseInt(nowDate.getTime() / 1000) + '/' + fid + '/' + userNo;
//console.log(beforeUrl,'beforeUrl');
let urlSign = encodeURIComponent(encrypt(beforeUrl));
//console.log(urlSign,'urlSign');
// console.log(urlSign,'urlSign');
cookies.set('PLAYSIGN_TIME', ctime); //写客户端的cookie保存
//以下判断是为了区分本地环境和服务器环境
if (process.env.NODE_ENV == 'development') {
this.blobUrl = process.env.VUE_APP_FILE_BASE_URL + u;
} else {
this.blobUrl = process.env.VUE_APP_BASE_API + '/xboe/m/course/cware/resource?sign=' + urlSign;
this.blobUrl = process.env.VUE_APP_BASE_API + '/xboe/m/course/cware/resource?sign=' + urlSign ;
}
// console.log('this.contentData.id:',this.contentData.id)
this.blobId = this.contentData.id
//console.log(this.blobUrl,'this.blobUrl');
},
widthOpen(url) {
@@ -690,6 +691,8 @@
//let url=process.env.VUE_APP_BASE_API+'/xboe/m/course/file/show?cf='+this.curriculumData.url;
//let url=this.fileBaseUrl+this.curriculumData.url;
this.createPlayUrl(r.contentRefId, this.curriculumData.url);
this.blobId = r.id
} else if (r.contentType == 40) {
// if (r.content != '' && r.content.indexOf('.pdf') == -1) {
apiCourseFile.detail(r.contentRefId).then(cfrs => {
@@ -755,7 +758,7 @@
if (this.contentData.status < 2) {
// this.contentData.status = 2; //进行中
if(r.contentType != 61&&r.contentType != 20 && r.contentType != 10){
setTimeout(() => {
setTimeout(() => {
this.isContentTypeTwo = r.contentType
$this.isShowTime()
}, 2000);
@@ -816,28 +819,6 @@
$this.controlHeight=h-95;
//console.log(h,$this.controlHeight,'$this.controlHeight');
})
//console.log('this.contentData11:',this.contentData,this.curriculumData)
// 视频设置禁用处理逻辑,如果用户已全部观看完该视频则设置为能全部拖动的逻辑把isDrag设置为true即可,同时删除本地存储的数据
if(this.contentData.progressVideo ===1){
var obj = JSON.parse(this.contentData.content)
obj.isDrag = true
this.contentData.content = JSON.stringify(obj)
this.curriculumData.isDrag = true
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
//alert(con.progressVideo+'--'+con.id + '--'+JSON.stringify(arr))
delete arr[this.contentData.id];
localStorage.setItem('videoProgressData',JSON.stringify(arr))
}
if(this.contentData.progressVideo>0 && this.contentData.progressVideo !==1){
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
arr[this.contentData.id] = this.contentData.progressVideo
localStorage.setItem('videoProgressData',JSON.stringify(arr))
}
},
isShowTime(){
if(this.isContentTypeTwo != this.contentData.contentType){
@@ -850,6 +831,19 @@
if(!this.isCrowd){
return
}
// 视频设置禁用处理逻辑,如果用户已全部观看完该视频则设置为能全部拖动的逻辑把isDrag设置为true即可,同时删除本地存储的数据
if(r.progressVideo ===1){
var obj = JSON.parse(r.content)
obj.isDrag = true
r.content = JSON.stringify(obj)
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
delete arr[r.id];
localStorage.setItem('videoProgressData',JSON.stringify(arr))
}
if (i != undefined && i!=-1 && index != undefined && r.status < 9) {
if (this.courseInfo.orderStudy) {
//判断上个是否学完
@@ -894,6 +888,9 @@
}
}
this.changePlayRes(r,item);
console.log('r, i, index,item::',r, i, index,item)
this.videoIndex = i
this.blobId = r.id
},
loadScorePraiseAndTrample() {
//加载是否请过分
@@ -957,9 +954,9 @@
this.interactRuning = true;
let teacherId='';
if(this.teachers.length>0){
teacherId=this.teachers[0].teacherId;
teacherId=this.teachers[0].teacherId;
}else{
teacherId=this.courseInfo.sysCreateAid
teacherId=this.courseInfo.sysCreateAid
}
let postData = {
objType: 1,
@@ -1178,16 +1175,39 @@
} else {
var markDiv = div.querySelector("#" + divId);
if (markDiv) {
div.removeChild(markDiv);
div.removeChild(markDiv);
}
}
},
// 视频播放结束时执行调用 studyVideoTime
EndedstudyVideoTime(){
let postData = {
itemId: this.contentData.studyItemId,
videoTime: this.contentData.lastStudyTime
}
console.log('this.curriculumData 111::',this.curriculumData,this.contentData.id)
if(!this.curriculumData.isDrag && this.contentData.progressVideo !=1){
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
if(arr[this.blobId]) {
postData.progressVideo = arr[this.blobId]
postData.contentId = this.contentList[this.videoIndex].id
postData.courseId = this.contentList[this.videoIndex].courseId
}
}
apiStudy.studyVideoTime(postData).then(rs => {
if (rs.status != 200) {
console.log('记录播放时间错误');
}
});
},
onPlayerPause() {
//console.log("暂停");
this.stopStudyTime();
},
onPlayerEnded() {
this.playerBoxShow = true;
this.EndedstudyVideoTime()
this.stopStudyTime();
if(this.contentData.status < 9) {
this.finishStudyItem();
@@ -1225,26 +1245,24 @@
if (intTime > 10 && intTime != this.contentData.lastStudyTime && saveTime == 0 && this.contentData
.studyItemId != '') {
this.contentData.lastStudyTime = intTime;
let postData = {
itemId: this.contentData.studyItemId,
videoTime: intTime
};
//console.log('this.courseInfo:',this.contentData)
if(!this.curriculumData.isDrag && this.contentData.progressVideo !=1){
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) {
postData.progressVideo = arr[this.blobId]
postData.contentId = this.contentData.id
postData.courseId = this.contentData.courseId
}
}
//console.log('记录播放时间')
apiStudy.studyVideoTime(postData).then(rs => {
if (rs.status != 200) {
console.log('记录播放时间错误');
}
});
this.EndedstudyVideoTime()
// let postData = {
// itemId: this.contentData.studyItemId,
// videoTime: intTime
// };
// var time = localStorage.getItem('videoProgressData')
// var arr = time&&JSON.parse(time) || {}
// if(arr[this.blobId] && !this.isDrag) {
// postData.progressVideo = arr[this.blobId]
// postData.contentId = this.contentList[this.videoIndex].id
// postData.courseId = this.contentList[this.videoIndex].courseId
// }
// //console.log('记录播放时间')
// apiStudy.studyVideoTime(postData).then(rs => {
// if (rs.status != 200) {
// console.log('记录播放时间错误');
// }
// });
}
}
},
@@ -1277,26 +1295,24 @@
if (intTime > 10 && intTime != this.contentData.lastStudyTime && saveTime == 0 && this.contentData
.studyItemId) {
this.contentData.lastStudyTime = intTime;
let postData = {
itemId: this.contentData.studyItemId,
videoTime: intTime
};
//console.log('this.courseInfo:',this.contentData)
if(!this.curriculumData.isDrag && this.contentData.progressVideo !=1){
var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {}
if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) {
postData.progressVideo = arr[this.blobId]
postData.contentId = this.contentData.id
postData.courseId = this.contentData.courseId
}
}
//console.log('记录播放时间')
apiStudy.studyVideoTime(postData).then(rs => {
if (rs.status != 200) {
console.log('记录播放时间错误');
}
});
this.EndedstudyVideoTime()
// let postData = {
// itemId: this.contentData.studyItemId,
// videoTime: intTime
// };
// var time = localStorage.getItem('videoProgressData')
// var arr = time&&JSON.parse(time) || {}
// if(arr[this.blobId] && !this.isDrag) {
// postData.progressVideo = arr[this.blobId]
// postData.contentId = this.contentList[this.videoIndex].id
// postData.courseId = this.contentList[this.videoIndex].courseId
// }
// //console.log('记录播放时间')
// apiStudy.studyVideoTime(postData).then(rs => {
// if (rs.status != 200) {
// console.log('记录播放时间错误');
// }
// });
}
},
audioPlay() {
@@ -1454,7 +1470,6 @@
}
});
});
if (this.courseInfo.type == 10) {
///console.log(this.contentList[0],'ccccc11111')
this.showRes(this.contentList[0]);
@@ -1467,7 +1482,9 @@
} else {
//console.log(this.contentList[0],'ccccc3333')
this.showRes(this.contentList[playIndex]);
//this.videoIndex = playIndex
}
this.videoIndex = playIndex
}
},
saveScormStudy() {
@@ -1546,7 +1563,7 @@
}
}
},
progress(val) {
progress(val) {
const progressValue = parseFloat(val) * 100;
this.sendEventProgress = Number(progressValue.toFixed(2));
},

View File

@@ -62,32 +62,32 @@
<div class="tab-bm">{{cutOrgNamePath(ran.authorInfo.orgInfo)}}</div>
</div>
</div>
<div class="jy tab-jy">
<div v-if="experience.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.total}}</div>
<div v-if="experience.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.months}}</div>
<div v-if="experience.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.years}}</div>
<div v-if="experience.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.weeks}}</div>
</div>
</div>
</div>
</div>
<div class="jy tab-jy">
<div v-if="experience.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.total}}</div>
<div v-if="experience.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.months}}</div>
<div v-if="experience.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.years}}</div>
<div v-if="experience.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.weeks}}</div>
</div>
</div>
</div>
<!-- v-if="experience.data.rankingNo>5" -->
<div style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
<div class="omit">
<div>.</div> <div>.</div> <div>.</div>
</div>
</div>
<div v-if="experience.data.rankingNo>5" style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
<div v-if="experience.data.rankingNo>5" class="omit">
<div>.</div> <div>.</div> <div>.</div>
</div>
</div>
<div v-if="experience.data.rankingNo>5" class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{experience.data.rankingNo}}</div>
<div class="tab-name" v-if="userInfo.aid">
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
<div>
<span style="color: #0059FF;">{{userInfo.name}}</span>
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
</div>
</div>
<!-- v-if="experience.data.rankingNo>5" -->
<div class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{experience.data.rankingNo}}</div>
<div class="tab-name" v-if="userInfo.aid">
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
<div>
<span style="color: #0059FF;">{{userInfo.name}}</span>
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
</div>
</div>
<div class="jy tab-jy">
<div v-if="experience.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{experience.data.total}}</div>
@@ -163,30 +163,30 @@
</div>
</div>
<div v-if="learningDuration.data.rankingNo>5" style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
<div v-if="learningDuration.data.rankingNo>5" class="omit">
<div>.</div> <div>.</div> <div>.</div>
</div>
</div>
<div style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
<div class="omit">
<div>.</div> <div>.</div> <div>.</div>
</div>
</div>
<div v-if="learningDuration.data.rankingNo>5" class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDuration.data.rankingNo}}</div>
<div class="tab-name" v-if="userInfo.aid">
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
<div>
<span style="color: #0059FF;">{{userInfo.name}}</span>
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
</div>
<div class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDuration.data.rankingNo}}</div>
<div class="tab-name" v-if="userInfo.aid">
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
<div>
<span style="color: #0059FF;">{{userInfo.name}}</span>
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
</div>
</div>
<div class="jy tab-jy">
<div v-if="learningDuration.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.total)}}</div>
<div v-if="learningDuration.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.months)}}</div>
<div v-if="learningDuration.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.years)}}</div>
<div v-if="learningDuration.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.weeks)}}</div>
</div>
</div>
</div>
<div class="jy tab-jy">
<div v-if="learningDuration.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.total)}}</div>
<div v-if="learningDuration.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.months)}}</div>
<div v-if="learningDuration.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.years)}}</div>
<div v-if="learningDuration.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.weeks)}}</div>
</div>
</div>
</div>
</div>
<div class="page-ranking-col Duration">
@@ -253,22 +253,22 @@
</div>
</div>
<div v-if="learningDays.data.rankingNo>5" style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
<div v-if="learningDays.data.rankingNo>5" class="omit">
<div>.</div> <div>.</div> <div>.</div>
</div>
</div>
<div style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
<div class="omit">
<div>.</div> <div>.</div> <div>.</div>
</div>
</div>
<div v-if="learningDays.data.rankingNo>5" class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDays.data.rankingNo}}</div>
<div class="tab-name" v-if="userInfo.aid">
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
<div>
<span style="color: #0059FF;">{{userInfo.name}}</span>
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
</div>
</div>
<div class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDays.data.rankingNo}}</div>
<div class="tab-name" v-if="userInfo.aid">
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
<div>
<span style="color: #0059FF;">{{userInfo.name}}</span>
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
</div>
</div>
<div class="jy tab-jy">
<div v-if="learningDays.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{learningDays.data.total}}</div>