diff --git a/public/images/aiCompanion/@@2x.png b/public/images/aiCompanion/@@2x.png new file mode 100644 index 0000000..0c36e96 Binary files /dev/null and b/public/images/aiCompanion/@@2x.png differ diff --git a/public/images/aiCompanion/AI伴学标签@2x.png b/public/images/aiCompanion/AI伴学标签@2x.png new file mode 100644 index 0000000..7bfe8eb Binary files /dev/null and b/public/images/aiCompanion/AI伴学标签@2x.png differ diff --git a/public/images/aiCompanion/AI小助手@2x.png b/public/images/aiCompanion/AI小助手@2x.png new file mode 100644 index 0000000..02f9647 Binary files /dev/null and b/public/images/aiCompanion/AI小助手@2x.png differ diff --git a/public/images/aiCompanion/bg.png b/public/images/aiCompanion/bg.png new file mode 100644 index 0000000..0555782 Binary files /dev/null and b/public/images/aiCompanion/bg.png differ diff --git a/public/images/aiCompanion/fold.png b/public/images/aiCompanion/fold.png new file mode 100644 index 0000000..5541c4d Binary files /dev/null and b/public/images/aiCompanion/fold.png differ diff --git a/public/images/aiCompanion/ii.jpg b/public/images/aiCompanion/ii.jpg new file mode 100644 index 0000000..b10d311 Binary files /dev/null and b/public/images/aiCompanion/ii.jpg differ diff --git a/public/images/aiCompanion/lock.png b/public/images/aiCompanion/lock.png new file mode 100644 index 0000000..22ca2f4 Binary files /dev/null and b/public/images/aiCompanion/lock.png differ diff --git a/public/images/aiCompanion/做作业@2x.png b/public/images/aiCompanion/做作业@2x.png new file mode 100644 index 0000000..5a45f7c Binary files /dev/null and b/public/images/aiCompanion/做作业@2x.png differ diff --git a/public/images/aiCompanion/切换@2x.png b/public/images/aiCompanion/切换@2x.png new file mode 100644 index 0000000..adbad1d Binary files /dev/null and b/public/images/aiCompanion/切换@2x.png differ diff --git a/public/images/aiCompanion/删除@2x.png b/public/images/aiCompanion/删除@2x.png new file mode 100644 index 0000000..61d2f62 Binary files /dev/null and b/public/images/aiCompanion/删除@2x.png differ diff --git a/public/images/aiCompanion/升序/降序@2x.png b/public/images/aiCompanion/升序/降序@2x.png new file mode 100644 index 0000000..448e054 Binary files /dev/null and b/public/images/aiCompanion/升序/降序@2x.png differ diff --git a/public/images/aiCompanion/发送@2x.png b/public/images/aiCompanion/发送@2x.png new file mode 100644 index 0000000..3ae8ec0 Binary files /dev/null and b/public/images/aiCompanion/发送@2x.png differ diff --git a/public/images/aiCompanion/图片添加@2x.png b/public/images/aiCompanion/图片添加@2x.png new file mode 100644 index 0000000..5283732 Binary files /dev/null and b/public/images/aiCompanion/图片添加@2x.png differ diff --git a/public/images/aiCompanion/弹幕(开).png b/public/images/aiCompanion/弹幕(开).png new file mode 100644 index 0000000..d28f11a Binary files /dev/null and b/public/images/aiCompanion/弹幕(开).png differ diff --git a/public/images/aiCompanion/智能问答@2x.png b/public/images/aiCompanion/智能问答@2x.png new file mode 100644 index 0000000..3629f25 Binary files /dev/null and b/public/images/aiCompanion/智能问答@2x.png differ diff --git a/public/images/aiCompanion/知识图谱@2x.png b/public/images/aiCompanion/知识图谱@2x.png new file mode 100644 index 0000000..460de6d Binary files /dev/null and b/public/images/aiCompanion/知识图谱@2x.png differ diff --git a/public/images/aiCompanion/笔记-灰@2x.png b/public/images/aiCompanion/笔记-灰@2x.png new file mode 100644 index 0000000..eeeba09 Binary files /dev/null and b/public/images/aiCompanion/笔记-灰@2x.png differ diff --git a/public/images/aiCompanion/笔记-蓝@2x.png b/public/images/aiCompanion/笔记-蓝@2x.png new file mode 100644 index 0000000..221db41 Binary files /dev/null and b/public/images/aiCompanion/笔记-蓝@2x.png differ diff --git a/public/images/aiCompanion/背景色@2x.png b/public/images/aiCompanion/背景色@2x.png new file mode 100644 index 0000000..869c0c3 Binary files /dev/null and b/public/images/aiCompanion/背景色@2x.png differ diff --git a/public/images/aiCompanion/表情@2x.png b/public/images/aiCompanion/表情@2x.png new file mode 100644 index 0000000..1c0652b Binary files /dev/null and b/public/images/aiCompanion/表情@2x.png differ diff --git a/public/images/aiCompanion/记录@2x.png b/public/images/aiCompanion/记录@2x.png new file mode 100644 index 0000000..0e42545 Binary files /dev/null and b/public/images/aiCompanion/记录@2x.png differ diff --git a/public/images/aiCompanion/记笔记@2x.png b/public/images/aiCompanion/记笔记@2x.png new file mode 100644 index 0000000..72b3b26 Binary files /dev/null and b/public/images/aiCompanion/记笔记@2x.png differ diff --git a/public/images/aiCompanion/随便聊聊@2x.png b/public/images/aiCompanion/随便聊聊@2x.png new file mode 100644 index 0000000..d6bf84c Binary files /dev/null and b/public/images/aiCompanion/随便聊聊@2x.png differ diff --git a/public/images/auth/download.png b/public/images/auth/download.png index a057ca2..f0761a0 100644 Binary files a/public/images/auth/download.png and b/public/images/auth/download.png differ diff --git a/public/images/icon/customer.jpg b/public/images/icon/customer.jpg new file mode 100644 index 0000000..eedf4d3 Binary files /dev/null and b/public/images/icon/customer.jpg differ diff --git a/public/images/icon/customer.png b/public/images/icon/customer.png deleted file mode 100644 index c6b4f57..0000000 Binary files a/public/images/icon/customer.png and /dev/null differ diff --git a/public/images/icon/issue.jpg b/public/images/icon/issue.jpg new file mode 100644 index 0000000..a1cd0c7 Binary files /dev/null and b/public/images/icon/issue.jpg differ diff --git a/public/images/icon/issue.png b/public/images/icon/issue.png deleted file mode 100644 index 712cc48..0000000 Binary files a/public/images/icon/issue.png and /dev/null differ diff --git a/public/images/icon/phone.jpg b/public/images/icon/phone.jpg new file mode 100644 index 0000000..1553358 Binary files /dev/null and b/public/images/icon/phone.jpg differ diff --git a/public/images/icon/phone.png b/public/images/icon/phone.png deleted file mode 100644 index b64f7cf..0000000 Binary files a/public/images/icon/phone.png and /dev/null differ diff --git a/public/images/icon/top.jpg b/public/images/icon/top.jpg new file mode 100644 index 0000000..f26fb0f Binary files /dev/null and b/public/images/icon/top.jpg differ diff --git a/public/images/icon/top.png b/public/images/icon/top.png deleted file mode 100644 index 8aa1cb6..0000000 Binary files a/public/images/icon/top.png and /dev/null differ diff --git a/public/images/profile/11.png b/public/images/profile/11.png new file mode 100644 index 0000000..1da888b Binary files /dev/null and b/public/images/profile/11.png differ diff --git a/public/images/profile/22.png b/public/images/profile/22.png new file mode 100644 index 0000000..961da3a Binary files /dev/null and b/public/images/profile/22.png differ diff --git a/public/images/profile/33.png b/public/images/profile/33.png new file mode 100644 index 0000000..c82119c Binary files /dev/null and b/public/images/profile/33.png differ diff --git a/public/images/profile/55.png b/public/images/profile/55.png new file mode 100644 index 0000000..70a74ab Binary files /dev/null and b/public/images/profile/55.png differ diff --git a/public/images/profile/avater.png b/public/images/profile/avater.png new file mode 100644 index 0000000..613a46e Binary files /dev/null and b/public/images/profile/avater.png differ diff --git a/public/images/profile/bookmark-active.png b/public/images/profile/bookmark-active.png new file mode 100644 index 0000000..5a66657 Binary files /dev/null and b/public/images/profile/bookmark-active.png differ diff --git a/public/images/profile/bookmark.png b/public/images/profile/bookmark.png new file mode 100644 index 0000000..f75f9cc Binary files /dev/null and b/public/images/profile/bookmark.png differ diff --git a/public/images/profile/certificate.jpg b/public/images/profile/certificate.jpg new file mode 100644 index 0000000..3850eed Binary files /dev/null and b/public/images/profile/certificate.jpg differ diff --git a/public/images/profile/checklist-active.png b/public/images/profile/checklist-active.png new file mode 100644 index 0000000..e4b706e Binary files /dev/null and b/public/images/profile/checklist-active.png differ diff --git a/public/images/profile/checklist.png b/public/images/profile/checklist.png new file mode 100644 index 0000000..5e89a0d Binary files /dev/null and b/public/images/profile/checklist.png differ diff --git a/public/images/profile/concern-active.png b/public/images/profile/concern-active.png new file mode 100644 index 0000000..3b609e0 Binary files /dev/null and b/public/images/profile/concern-active.png differ diff --git a/public/images/profile/concern.png b/public/images/profile/concern.png new file mode 100644 index 0000000..3f13dcc Binary files /dev/null and b/public/images/profile/concern.png differ diff --git a/public/images/profile/course-active.png b/public/images/profile/course-active.png new file mode 100644 index 0000000..330f1e0 Binary files /dev/null and b/public/images/profile/course-active.png differ diff --git a/public/images/profile/course.png b/public/images/profile/course.png new file mode 100644 index 0000000..0d96a8d Binary files /dev/null and b/public/images/profile/course.png differ diff --git a/public/images/profile/del.png b/public/images/profile/del.png new file mode 100644 index 0000000..7eee424 Binary files /dev/null and b/public/images/profile/del.png differ diff --git a/public/images/profile/download-active.png b/public/images/profile/download-active.png new file mode 100644 index 0000000..8b17f5b Binary files /dev/null and b/public/images/profile/download-active.png differ diff --git a/public/images/profile/download.png b/public/images/profile/download.png new file mode 100644 index 0000000..96810f8 Binary files /dev/null and b/public/images/profile/download.png differ diff --git a/public/images/profile/edit.png b/public/images/profile/edit.png new file mode 100644 index 0000000..9250d53 Binary files /dev/null and b/public/images/profile/edit.png differ diff --git a/public/images/profile/gift-active.png b/public/images/profile/gift-active.png new file mode 100644 index 0000000..32472cd Binary files /dev/null and b/public/images/profile/gift-active.png differ diff --git a/public/images/profile/gift.png b/public/images/profile/gift.png new file mode 100644 index 0000000..3b3704c Binary files /dev/null and b/public/images/profile/gift.png differ diff --git a/public/images/profile/grade-active.png b/public/images/profile/grade-active.png new file mode 100644 index 0000000..0924443 Binary files /dev/null and b/public/images/profile/grade-active.png differ diff --git a/public/images/profile/grade.png b/public/images/profile/grade.png new file mode 100644 index 0000000..5eca4bc Binary files /dev/null and b/public/images/profile/grade.png differ diff --git a/public/images/profile/message-active.png b/public/images/profile/message-active.png new file mode 100644 index 0000000..a6cae95 Binary files /dev/null and b/public/images/profile/message-active.png differ diff --git a/public/images/profile/message.png b/public/images/profile/message.png new file mode 100644 index 0000000..337ff2f Binary files /dev/null and b/public/images/profile/message.png differ diff --git a/public/images/profile/more.png b/public/images/profile/more.png new file mode 100644 index 0000000..7056e1e Binary files /dev/null and b/public/images/profile/more.png differ diff --git a/public/images/profile/pdf.png b/public/images/profile/pdf.png new file mode 100644 index 0000000..460383d Binary files /dev/null and b/public/images/profile/pdf.png differ diff --git a/public/images/profile/ppt.png b/public/images/profile/ppt.png new file mode 100644 index 0000000..5f3f858 Binary files /dev/null and b/public/images/profile/ppt.png differ diff --git a/public/images/profile/profile-active.png b/public/images/profile/profile-active.png new file mode 100644 index 0000000..aa19ce2 Binary files /dev/null and b/public/images/profile/profile-active.png differ diff --git a/public/images/profile/profile.png b/public/images/profile/profile.png new file mode 100644 index 0000000..61f54b0 Binary files /dev/null and b/public/images/profile/profile.png differ diff --git a/public/images/profile/read.png b/public/images/profile/read.png new file mode 100644 index 0000000..70df2fc Binary files /dev/null and b/public/images/profile/read.png differ diff --git a/public/images/profile/reply.png b/public/images/profile/reply.png new file mode 100644 index 0000000..bd1d399 Binary files /dev/null and b/public/images/profile/reply.png differ diff --git a/public/images/profile/report.png b/public/images/profile/report.png new file mode 100644 index 0000000..9fbe049 Binary files /dev/null and b/public/images/profile/report.png differ diff --git a/public/images/profile/root.png b/public/images/profile/root.png new file mode 100644 index 0000000..f4c3bc9 Binary files /dev/null and b/public/images/profile/root.png differ diff --git a/public/images/profile/time.png b/public/images/profile/time.png new file mode 100644 index 0000000..1ff8d47 Binary files /dev/null and b/public/images/profile/time.png differ diff --git a/public/images/profile/word.png b/public/images/profile/word.png new file mode 100644 index 0000000..811ac16 Binary files /dev/null and b/public/images/profile/word.png differ diff --git a/public/images/profile/xls.png b/public/images/profile/xls.png new file mode 100644 index 0000000..818486a Binary files /dev/null and b/public/images/profile/xls.png differ diff --git a/public/images/profile/zip.png b/public/images/profile/zip.png new file mode 100644 index 0000000..c45cf73 Binary files /dev/null and b/public/images/profile/zip.png differ diff --git a/src/App.vue b/src/App.vue index c33db7a..2b44797 100644 --- a/src/App.vue +++ b/src/App.vue @@ -79,7 +79,7 @@ body { /* 响应式容器 */ .container { width: 100%; - max-width: 1420px; + width: 1420px; margin: 0 auto; /* padding: 0 20px; */ } diff --git a/src/assets/img/SketchPng0d792f64b66b07c22a6bda56aea3c84f6ace26175305907b48ab1e663acdf7e7.png b/src/assets/img/SketchPng0d792f64b66b07c22a6bda56aea3c84f6ace26175305907b48ab1e663acdf7e7.png new file mode 100644 index 0000000..9988ea2 Binary files /dev/null and b/src/assets/img/SketchPng0d792f64b66b07c22a6bda56aea3c84f6ace26175305907b48ab1e663acdf7e7.png differ diff --git a/src/assets/img/SketchPng1102ce8815d741e700442ca1eb52b61b4bafa3f38ccc00c3895438c2181b83f3.png b/src/assets/img/SketchPng1102ce8815d741e700442ca1eb52b61b4bafa3f38ccc00c3895438c2181b83f3.png new file mode 100644 index 0000000..932c2fa Binary files /dev/null and b/src/assets/img/SketchPng1102ce8815d741e700442ca1eb52b61b4bafa3f38ccc00c3895438c2181b83f3.png differ diff --git a/src/assets/img/SketchPng19d58c273cc8971578fae5678403de3978ed665e87838431032b84ed6897a007.png b/src/assets/img/SketchPng19d58c273cc8971578fae5678403de3978ed665e87838431032b84ed6897a007.png new file mode 100644 index 0000000..0fcd4da Binary files /dev/null and b/src/assets/img/SketchPng19d58c273cc8971578fae5678403de3978ed665e87838431032b84ed6897a007.png differ diff --git a/src/assets/img/SketchPng1a840a0a6a91d4e9dbd409007c68a12039978f551728d58ec84418c47a3e68e5.png b/src/assets/img/SketchPng1a840a0a6a91d4e9dbd409007c68a12039978f551728d58ec84418c47a3e68e5.png new file mode 100644 index 0000000..a6d511f Binary files /dev/null and b/src/assets/img/SketchPng1a840a0a6a91d4e9dbd409007c68a12039978f551728d58ec84418c47a3e68e5.png differ diff --git a/src/assets/img/SketchPng1b856671c7a495f82c8d2b4239e280881e9f6f49444312bc1d0f2a5b7f9ed9ea.png b/src/assets/img/SketchPng1b856671c7a495f82c8d2b4239e280881e9f6f49444312bc1d0f2a5b7f9ed9ea.png new file mode 100644 index 0000000..9d80dde Binary files /dev/null and b/src/assets/img/SketchPng1b856671c7a495f82c8d2b4239e280881e9f6f49444312bc1d0f2a5b7f9ed9ea.png differ diff --git a/src/assets/img/SketchPng24f5ebea3c697588df5f3399ba241a1fd96e2db18464d679db6b41d50cd23a55.png b/src/assets/img/SketchPng24f5ebea3c697588df5f3399ba241a1fd96e2db18464d679db6b41d50cd23a55.png new file mode 100644 index 0000000..cf45cbf Binary files /dev/null and b/src/assets/img/SketchPng24f5ebea3c697588df5f3399ba241a1fd96e2db18464d679db6b41d50cd23a55.png differ diff --git a/src/assets/img/SketchPng391f27637218dcf71888b20ec75eae7eb34b046e0fcda6da384f8e04aba3b60b.png b/src/assets/img/SketchPng391f27637218dcf71888b20ec75eae7eb34b046e0fcda6da384f8e04aba3b60b.png new file mode 100644 index 0000000..e59226d Binary files /dev/null and b/src/assets/img/SketchPng391f27637218dcf71888b20ec75eae7eb34b046e0fcda6da384f8e04aba3b60b.png differ diff --git a/src/assets/img/SketchPng4fe40e88c2ab6567d4eed827f7d84bf43e4be70ae32e1a6914960d1a0d2fcde5.png b/src/assets/img/SketchPng4fe40e88c2ab6567d4eed827f7d84bf43e4be70ae32e1a6914960d1a0d2fcde5.png new file mode 100644 index 0000000..a942742 Binary files /dev/null and b/src/assets/img/SketchPng4fe40e88c2ab6567d4eed827f7d84bf43e4be70ae32e1a6914960d1a0d2fcde5.png differ diff --git a/src/assets/img/SketchPng56be8e57450cb3a2167e30009f1ebf614e4d992059f2c3f2117b857da9e940f0.png b/src/assets/img/SketchPng56be8e57450cb3a2167e30009f1ebf614e4d992059f2c3f2117b857da9e940f0.png new file mode 100644 index 0000000..47dba97 Binary files /dev/null and b/src/assets/img/SketchPng56be8e57450cb3a2167e30009f1ebf614e4d992059f2c3f2117b857da9e940f0.png differ diff --git a/src/assets/img/SketchPng571fc8e9a2c4708dc80bc6f5f2e197b9bc0519c79f3767a3cc4b2d022637f0d6.png b/src/assets/img/SketchPng571fc8e9a2c4708dc80bc6f5f2e197b9bc0519c79f3767a3cc4b2d022637f0d6.png new file mode 100644 index 0000000..3c0c7cf Binary files /dev/null and b/src/assets/img/SketchPng571fc8e9a2c4708dc80bc6f5f2e197b9bc0519c79f3767a3cc4b2d022637f0d6.png differ diff --git a/src/assets/img/SketchPng572fdf3739f55412f3bba5a4df83b80c9d066d746a842605cc97b6a7651963f1.png b/src/assets/img/SketchPng572fdf3739f55412f3bba5a4df83b80c9d066d746a842605cc97b6a7651963f1.png new file mode 100644 index 0000000..773bff3 Binary files /dev/null and b/src/assets/img/SketchPng572fdf3739f55412f3bba5a4df83b80c9d066d746a842605cc97b6a7651963f1.png differ diff --git a/src/assets/img/SketchPng65a606d2f45d02c88dc492c4f6690cdaf61b1fbd583ea5cd731081dd7b074aa5.png b/src/assets/img/SketchPng65a606d2f45d02c88dc492c4f6690cdaf61b1fbd583ea5cd731081dd7b074aa5.png new file mode 100644 index 0000000..d36d3e9 Binary files /dev/null and b/src/assets/img/SketchPng65a606d2f45d02c88dc492c4f6690cdaf61b1fbd583ea5cd731081dd7b074aa5.png differ diff --git a/src/assets/img/SketchPng6e7499038fe50878492d829d9775b9aa2d5a385bae4c040e1ffdffdfa031d668.png b/src/assets/img/SketchPng6e7499038fe50878492d829d9775b9aa2d5a385bae4c040e1ffdffdfa031d668.png new file mode 100644 index 0000000..11312e4 Binary files /dev/null and b/src/assets/img/SketchPng6e7499038fe50878492d829d9775b9aa2d5a385bae4c040e1ffdffdfa031d668.png differ diff --git a/src/assets/img/SketchPng76309bc69f7a7f45116514af7e4467268ec0a1f0618f38ded979f72c6753a113.png b/src/assets/img/SketchPng76309bc69f7a7f45116514af7e4467268ec0a1f0618f38ded979f72c6753a113.png new file mode 100644 index 0000000..f810622 Binary files /dev/null and b/src/assets/img/SketchPng76309bc69f7a7f45116514af7e4467268ec0a1f0618f38ded979f72c6753a113.png differ diff --git a/src/assets/img/SketchPng789a43510216c4038cfcd813557727376226818d297bcc82a597011f962a55b7.png b/src/assets/img/SketchPng789a43510216c4038cfcd813557727376226818d297bcc82a597011f962a55b7.png new file mode 100644 index 0000000..4a2726e Binary files /dev/null and b/src/assets/img/SketchPng789a43510216c4038cfcd813557727376226818d297bcc82a597011f962a55b7.png differ diff --git a/src/assets/img/SketchPng79da5ab43b0d604a30d984731a3d0d5bb85c9298a3583de8575fa9af1b7fdb14.png b/src/assets/img/SketchPng79da5ab43b0d604a30d984731a3d0d5bb85c9298a3583de8575fa9af1b7fdb14.png new file mode 100644 index 0000000..2ce65af Binary files /dev/null and b/src/assets/img/SketchPng79da5ab43b0d604a30d984731a3d0d5bb85c9298a3583de8575fa9af1b7fdb14.png differ diff --git a/src/assets/img/SketchPng851dec02fbe9b364d344619d83a331bbc223f4ceae8bc6c0c43f43010a0d77b7.png b/src/assets/img/SketchPng851dec02fbe9b364d344619d83a331bbc223f4ceae8bc6c0c43f43010a0d77b7.png new file mode 100644 index 0000000..8c6efe1 Binary files /dev/null and b/src/assets/img/SketchPng851dec02fbe9b364d344619d83a331bbc223f4ceae8bc6c0c43f43010a0d77b7.png differ diff --git a/src/assets/img/SketchPng8db130d709366f96d6a9489ef94bbca1c1cd6793ac9395f5a14d373f71852c6f.png b/src/assets/img/SketchPng8db130d709366f96d6a9489ef94bbca1c1cd6793ac9395f5a14d373f71852c6f.png new file mode 100644 index 0000000..120e12c Binary files /dev/null and b/src/assets/img/SketchPng8db130d709366f96d6a9489ef94bbca1c1cd6793ac9395f5a14d373f71852c6f.png differ diff --git a/src/assets/img/SketchPng916c5656fade9f42bf31d24f6485ab9a74435e195bc567630d7bc81e3cf09840.png b/src/assets/img/SketchPng916c5656fade9f42bf31d24f6485ab9a74435e195bc567630d7bc81e3cf09840.png new file mode 100644 index 0000000..6b36320 Binary files /dev/null and b/src/assets/img/SketchPng916c5656fade9f42bf31d24f6485ab9a74435e195bc567630d7bc81e3cf09840.png differ diff --git a/src/assets/img/SketchPng9c657bfdcc0b0e200e87010da7555355ad7a4043a4357c45f6009a9afb20e90f.png b/src/assets/img/SketchPng9c657bfdcc0b0e200e87010da7555355ad7a4043a4357c45f6009a9afb20e90f.png new file mode 100644 index 0000000..685844e Binary files /dev/null and b/src/assets/img/SketchPng9c657bfdcc0b0e200e87010da7555355ad7a4043a4357c45f6009a9afb20e90f.png differ diff --git a/src/assets/img/SketchPnga2a271e1fd4f68df58a9c29bfc854f269f7a46449157ef1bac4bbdfb386289b3.png b/src/assets/img/SketchPnga2a271e1fd4f68df58a9c29bfc854f269f7a46449157ef1bac4bbdfb386289b3.png new file mode 100644 index 0000000..5c43833 Binary files /dev/null and b/src/assets/img/SketchPnga2a271e1fd4f68df58a9c29bfc854f269f7a46449157ef1bac4bbdfb386289b3.png differ diff --git a/src/assets/img/SketchPnga478f757ab05cf7687d6d04c1abd6687143417948ae255e8a112a8ceafffffad.png b/src/assets/img/SketchPnga478f757ab05cf7687d6d04c1abd6687143417948ae255e8a112a8ceafffffad.png new file mode 100644 index 0000000..cd2fb2e Binary files /dev/null and b/src/assets/img/SketchPnga478f757ab05cf7687d6d04c1abd6687143417948ae255e8a112a8ceafffffad.png differ diff --git a/src/assets/img/SketchPnga5ce5ccd66fc5618957d16149f77552da4f35c87eefbdbab3170a5df72ef1bbc.png b/src/assets/img/SketchPnga5ce5ccd66fc5618957d16149f77552da4f35c87eefbdbab3170a5df72ef1bbc.png new file mode 100644 index 0000000..bf2732c Binary files /dev/null and b/src/assets/img/SketchPnga5ce5ccd66fc5618957d16149f77552da4f35c87eefbdbab3170a5df72ef1bbc.png differ diff --git a/src/assets/img/SketchPnga7f689627f3215b7f8469b492f3fdbd410818487fa324f924e19a89ec44e6875.png b/src/assets/img/SketchPnga7f689627f3215b7f8469b492f3fdbd410818487fa324f924e19a89ec44e6875.png new file mode 100644 index 0000000..d296084 Binary files /dev/null and b/src/assets/img/SketchPnga7f689627f3215b7f8469b492f3fdbd410818487fa324f924e19a89ec44e6875.png differ diff --git a/src/assets/img/SketchPngb8074516f66fdceaa74d53f9fce999f88d97f51bc58f88b8d11124fb0957689d.png b/src/assets/img/SketchPngb8074516f66fdceaa74d53f9fce999f88d97f51bc58f88b8d11124fb0957689d.png new file mode 100644 index 0000000..09c8f42 Binary files /dev/null and b/src/assets/img/SketchPngb8074516f66fdceaa74d53f9fce999f88d97f51bc58f88b8d11124fb0957689d.png differ diff --git a/src/assets/img/SketchPngc62587e39aa1180cde132cca80f0c79f9e16c87b1ad383fbb1c657fc8cc9d70a.png b/src/assets/img/SketchPngc62587e39aa1180cde132cca80f0c79f9e16c87b1ad383fbb1c657fc8cc9d70a.png new file mode 100644 index 0000000..0792a80 Binary files /dev/null and b/src/assets/img/SketchPngc62587e39aa1180cde132cca80f0c79f9e16c87b1ad383fbb1c657fc8cc9d70a.png differ diff --git a/src/assets/img/SketchPngd3b709a79d8ae724adc8bff7962dece1aa9630f0a53e457876789455c45cfd70.png b/src/assets/img/SketchPngd3b709a79d8ae724adc8bff7962dece1aa9630f0a53e457876789455c45cfd70.png new file mode 100644 index 0000000..ec5e569 Binary files /dev/null and b/src/assets/img/SketchPngd3b709a79d8ae724adc8bff7962dece1aa9630f0a53e457876789455c45cfd70.png differ diff --git a/src/assets/img/SketchPngd450c70d8ebdefd1a0d3e687093063ebf7dffba73e995e7073270d294f00a363.png b/src/assets/img/SketchPngd450c70d8ebdefd1a0d3e687093063ebf7dffba73e995e7073270d294f00a363.png new file mode 100644 index 0000000..9e8688c Binary files /dev/null and b/src/assets/img/SketchPngd450c70d8ebdefd1a0d3e687093063ebf7dffba73e995e7073270d294f00a363.png differ diff --git a/src/assets/img/SketchPngd7c9c3c2b84111b0ff428f0eef9c2a99ae6082f040b50445d5748400c5790aa8.png b/src/assets/img/SketchPngd7c9c3c2b84111b0ff428f0eef9c2a99ae6082f040b50445d5748400c5790aa8.png new file mode 100644 index 0000000..b933b19 Binary files /dev/null and b/src/assets/img/SketchPngd7c9c3c2b84111b0ff428f0eef9c2a99ae6082f040b50445d5748400c5790aa8.png differ diff --git a/src/assets/img/SketchPngdc50d163a50a5a37461e082e887a02706cab843b14f2c65008b7a169588cb26e.png b/src/assets/img/SketchPngdc50d163a50a5a37461e082e887a02706cab843b14f2c65008b7a169588cb26e.png new file mode 100644 index 0000000..591af98 Binary files /dev/null and b/src/assets/img/SketchPngdc50d163a50a5a37461e082e887a02706cab843b14f2c65008b7a169588cb26e.png differ diff --git a/src/assets/img/SketchPngf317211537d27a4970d7d242f380a5412bae398ad35d8d2b773f691131e41b3a.png b/src/assets/img/SketchPngf317211537d27a4970d7d242f380a5412bae398ad35d8d2b773f691131e41b3a.png new file mode 100644 index 0000000..f98d416 Binary files /dev/null and b/src/assets/img/SketchPngf317211537d27a4970d7d242f380a5412bae398ad35d8d2b773f691131e41b3a.png differ diff --git a/src/assets/img/eb01161fa49749e0a0ea087fb6f07ac2_mergeImage.png b/src/assets/img/eb01161fa49749e0a0ea087fb6f07ac2_mergeImage.png new file mode 100644 index 0000000..31b40ae Binary files /dev/null and b/src/assets/img/eb01161fa49749e0a0ea087fb6f07ac2_mergeImage.png differ diff --git a/src/assets/img/f09a054de74c4e2eaba4cbeaec1487ad_mergeImage.png b/src/assets/img/f09a054de74c4e2eaba4cbeaec1487ad_mergeImage.png new file mode 100644 index 0000000..d839d2a Binary files /dev/null and b/src/assets/img/f09a054de74c4e2eaba4cbeaec1487ad_mergeImage.png differ diff --git a/src/components/layout/AppHeader.vue b/src/components/layout/AppHeader.vue index 44a9648..80d77fb 100644 --- a/src/components/layout/AppHeader.vue +++ b/src/components/layout/AppHeader.vue @@ -38,6 +38,10 @@ + + @@ -73,7 +77,7 @@ -
+
{{ t('header.learningCenter') }}
@@ -170,6 +174,16 @@ const switchLanguage = (lang: string) => { console.log('语言已切换到:', lang === 'zh' ? '中文' : '英文') } +const handleLearningCenter = () => { + console.log('学习中心被点击了') + try { + router.push('/learning-center') + console.log('路由跳转成功') + } catch (error) { + console.error('路由跳转失败:', error) + } +} + // 用户菜单选项 const userMenuOptions = computed(() => [ { @@ -215,6 +229,9 @@ const handleMenuSelect = (key: string) => { case 'ai': router.push('/ai') break + case 'practice': + router.push('/ai-companion') + break } } @@ -347,7 +364,7 @@ onUnmounted(() => { .nav-menu { display: flex; align-items: center; - gap: 40px; + gap: 30px; flex: 1; margin-right: 40px; } @@ -396,7 +413,10 @@ onUnmounted(() => { background-repeat: no-repeat; background-size: cover; background-position: center; +} +.nav-item:nth-child(8) { + padding: 0; } .nav-item.active .nav-item-ai { @@ -517,7 +537,7 @@ onUnmounted(() => { .header-actions { display: flex; align-items: center; - gap: 20px; + gap: 10px; flex-shrink: 0; } @@ -527,7 +547,7 @@ onUnmounted(() => { gap: 4px; padding: 6px 8px; font-size: 13px; - color: #666; + color: #000; cursor: pointer; border-radius: 4px; transition: all 0.2s; diff --git a/src/router/index.ts b/src/router/index.ts index 04a7d23..429c8e7 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -6,6 +6,7 @@ import Home from '@/views/Home.vue' import Courses from '@/views/Courses.vue' import CourseDetail from '@/views/CourseDetail.vue' import CourseDetailEnrolled from '@/views/CourseDetailEnrolled.vue' +import CourseExchanged from '@/views/CourseExchanged.vue' import CourseStudy from '@/views/CourseStudy.vue' import Learning from '@/views/Learning.vue' import Profile from '@/views/Profile.vue' @@ -25,6 +26,8 @@ import LocalVideoDemo from '@/views/LocalVideoDemo.vue' import SpecialTraining from '@/views/SpecialTraining.vue' import SpecialTrainingDetail from '@/views/SpecialTrainingDetail.vue' import HelpCenter from '@/views/HelpCenter.vue' +import Practice from '@/views/Practice.vue' +import LearningCenter from '@/views/LearningCenter.vue' const routes: RouteRecordRaw[] = [ { @@ -67,6 +70,14 @@ const routes: RouteRecordRaw[] = [ title: '课程详情 - 已报名' } }, + { + path: '/course/:id/exchanged', + name: 'CourseExchanged', + component: CourseExchanged, + meta: { + title: '课程兑换成功' + } + }, { path: '/course/study/:id', name: 'CourseStudy', @@ -94,6 +105,14 @@ const routes: RouteRecordRaw[] = [ requiresAuth: true } }, + { + path: '/learning-center', + name: 'LearningCenter', + component: LearningCenter, + meta: { + title: '学习中心' + } + }, { path: '/learning-paths', @@ -199,6 +218,14 @@ const routes: RouteRecordRaw[] = [ title: 'AI' } }, + { + path: '/ai-companion', + name: 'AICompanion', + component: () => import('@/views/AICompanion.vue'), + meta: { + title: 'AI伴学' + } + }, { path: '/ai-demo', name: 'AIDemo', @@ -223,6 +250,14 @@ const routes: RouteRecordRaw[] = [ title: '本地视频播放演示' } }, + { + path: '/course/:courseId/practice/:sectionId', + name: 'Practice', + component: Practice, + meta: { + title: '练习页面' + } + }, { path: '/:pathMatch(.*)*', name: 'NotFound', diff --git a/src/views/AICompanion.vue b/src/views/AICompanion.vue new file mode 100644 index 0000000..b3a6506 --- /dev/null +++ b/src/views/AICompanion.vue @@ -0,0 +1,3820 @@ + + + + + \ No newline at end of file diff --git a/src/views/CourseDetail.vue b/src/views/CourseDetail.vue index 24be854..3d5a0ee 100644 --- a/src/views/CourseDetail.vue +++ b/src/views/CourseDetail.vue @@ -597,20 +597,20 @@ const groupSectionsByChapter = (sections: CourseSection[]) => { } // 根据章节数据生成分组 -const generateChapterGroups = () => { - // 确保有章节数据 - if (courseSections.value.length === 0) { - console.log('没有章节数据,生成模拟数据') - courseSections.value = generateMockSections() - } +// const generateChapterGroups = () => { +// // 确保有章节数据 +// if (courseSections.value.length === 0) { +// console.log('没有章节数据,生成模拟数据') +// courseSections.value = generateMockSections() +// } - console.log('开始生成章节分组,原始数据:', courseSections.value) - console.log('章节数据数量:', courseSections.value.length) +// console.log('开始生成章节分组,原始数据:', courseSections.value) +// console.log('章节数据数量:', courseSections.value.length) - // 使用统一的分组函数 - groupedSections.value = groupSectionsByChapter(courseSections.value) - console.log('生成的章节分组:', groupedSections.value) -} +// // 使用统一的分组函数 +// groupedSections.value = groupSectionsByChapter(courseSections.value) +// console.log('生成的章节分组:', groupedSections.value) +// } // 获取章节标题(已弃用,使用groupSectionsByChapter替代) // const getChapterTitle = (chapterIndex: number): string => { @@ -813,9 +813,9 @@ const loadMockData = () => { groupedSections.value = groupSectionsByChapter(mockSections) // 计算学习进度 - const completed = mockSections.filter(section => section.completed).length - completedLessons.value = completed - progress.value = Math.round((completed / mockSections.length) * 100) + // const completed = mockSections.filter(section => section.completed).length + // completedLessons.value = completed + // progress.value = Math.round((completed / mockSections.length) * 100) } // 切换章节展开/折叠 @@ -931,8 +931,19 @@ const handleDownload = (section: CourseSection) => { // 处理作业操作 const handleHomework = (section: CourseSection) => { console.log('打开作业:', section) - // 这里可以跳转到作业页面 - alert(`打开作业: ${section.name}`) + + // 跳转到练习页面 + router.push({ + name: 'Practice', + params: { + courseId: courseId.value, + sectionId: section.id + }, + query: { + courseName: course.value?.title || '课程名称', + practiceName: section.name + } + }) } // 处理考试操作 diff --git a/src/views/CourseDetailEnrolled.vue b/src/views/CourseDetailEnrolled.vue index 8997d87..a1b98b4 100644 --- a/src/views/CourseDetailEnrolled.vue +++ b/src/views/CourseDetailEnrolled.vue @@ -922,7 +922,19 @@ const handleDownload = (section: CourseSection) => { // 处理作业 const handleHomework = (section: CourseSection) => { console.log('打开作业:', section.name) - alert(`打开作业:${section.name}`) + + // 跳转到练习页面 + router.push({ + name: 'Practice', + params: { + courseId: courseId.value.toString(), + sectionId: section.id.toString() + }, + query: { + courseName: course.value?.title || '课程名称', + practiceName: section.name + } + }) } // 处理考试 diff --git a/src/views/CourseExchanged.vue b/src/views/CourseExchanged.vue new file mode 100644 index 0000000..67d84ae --- /dev/null +++ b/src/views/CourseExchanged.vue @@ -0,0 +1,5050 @@ + + + + + \ No newline at end of file diff --git a/src/views/Courses.vue b/src/views/Courses.vue index dba942e..4df8f87 100644 --- a/src/views/Courses.vue +++ b/src/views/Courses.vue @@ -314,12 +314,12 @@ const loadCourses = async () => { filteredCourses.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()) break case '最热': - filteredCourses.sort((a, b) => b.studentCount - a.studentCount) + filteredCourses.sort((a, b) => b.studentsCount - a.studentsCount) break case '推荐': default: // 推荐排序可以根据评分和学生数综合排序 - filteredCourses.sort((a, b) => (b.rating * 0.7 + b.studentCount * 0.3) - (a.rating * 0.7 + a.studentCount * 0.3)) + filteredCourses.sort((a, b) => (b.rating * 0.7 + b.studentsCount * 0.3) - (a.rating * 0.7 + a.studentsCount * 0.3)) break } diff --git a/src/views/Exam.vue b/src/views/Exam.vue index 5fe20b5..1621792 100644 --- a/src/views/Exam.vue +++ b/src/views/Exam.vue @@ -77,13 +77,13 @@ 00 : {{ Math.floor((remainingTime % 3600) / 60).toString().padStart(2, '0') - }} + }} 00 : {{ (remainingTime % 60).toString().padStart(2, '0') }} 00
-
+
@@ -297,16 +297,16 @@
-
+

剩余时间

-
+
00 : 00 : 00
-
+
@@ -314,11 +314,13 @@
-
+

答题卡

- {{ String(questions.length).padStart(2, '0') }}/{{ - String(questions.length).padStart(2, '0') }} + + {{ String(questions.length).padStart(2, '0') }} + /{{ String(questions.length).padStart(2, '0') }} +
@@ -328,7 +330,7 @@
+ class="answer-card-number answered" :class="{ 'disabled': examSubmitted }"> {{ String(question.id).padStart(2, '0') }}
@@ -341,7 +343,7 @@
+ class="answer-card-number answered" :class="{ 'disabled': examSubmitted }"> {{ String(question.id).padStart(2, '0') }}
@@ -354,7 +356,7 @@
+ class="answer-card-number answered" :class="{ 'disabled': examSubmitted }"> {{ String(question.id).padStart(2, '0') }}
@@ -367,7 +369,7 @@
+ class="answer-card-number answered" :class="{ 'disabled': examSubmitted }"> {{ String(question.id).padStart(2, '0') }}
@@ -380,7 +382,7 @@
+ class="answer-card-number answered" :class="{ 'disabled': examSubmitted }"> {{ String(question.id).padStart(2, '0') }}
@@ -401,7 +403,7 @@
-
@@ -467,7 +469,7 @@ const correctCount = ref(0) // 初始化答案数组 const initializeAnswers = () => { - selectedAnswers.value = new Array(questions.value.length).fill(-1) + selectedAnswers.value = new Array(questions.value.length).fill(undefined) multipleAnswers.value = Array.from({ length: questions.value.length }, () => []) fillAnswers.value = new Array(questions.value.length).fill('') essayAnswers.value = new Array(questions.value.length).fill('') @@ -863,15 +865,20 @@ const totalScore = computed(() => questions.value.reduce((sum, q) => sum + q.sco // 按题型分组统计 const questionsByType = computed(() => { const groups = { - '单选题': questions.value.filter(q => q.type === '单选题'), - '多选题': questions.value.filter(q => q.type === '多选题'), - '判断题': questions.value.filter(q => q.type === '判断题'), - '填空题': questions.value.filter(q => q.type === '填空题'), - '简答题': questions.value.filter(q => q.type === '简答题') + '单选题': questions.value.filter((q: any) => q.type === '单选题'), + '多选题': questions.value.filter((q: any) => q.type === '多选题'), + '判断题': questions.value.filter((q: any) => q.type === '判断题'), + '填空题': questions.value.filter((q: any) => q.type === '填空题'), + '简答题': questions.value.filter((q: any) => q.type === '简答题') } return groups }) +// 监听简答题答案变化,强制更新答题卡状态 +// const essayAnswersWatcher = computed(() => { +// return essayAnswers.value.map((answer: string) => answer ? answer.trim() : '') +// }) + // 开始考试 @@ -911,9 +918,20 @@ const selectOption = (optionIndex: number) => { currentAnswers.push(optionIndex) } multipleAnswers.value[currentQuestionIndex.value] = [...currentAnswers] + + // 强制更新答题卡状态 + multipleAnswers.value = [...multipleAnswers.value] } else { // 单选题、判断题 - selectedAnswers.value[currentQuestionIndex.value] = optionIndex + // 如果点击的是已选中的选项,则取消选择 + if (selectedAnswers.value[currentQuestionIndex.value] === optionIndex) { + selectedAnswers.value[currentQuestionIndex.value] = -1 + } else { + selectedAnswers.value[currentQuestionIndex.value] = optionIndex + } + + // 强制更新答题卡状态 + selectedAnswers.value = [...selectedAnswers.value] } } @@ -1013,6 +1031,9 @@ const setFillAnswer = (questionIndex: number, blankIndex: number, value: string) fillAnswers.value[questionIndex] = [] } fillAnswers.value[questionIndex][blankIndex] = value + + // 强制更新答题卡状态 + fillAnswers.value = [...fillAnswers.value] } // 简答题字数统计 @@ -1034,7 +1055,7 @@ const getQuestionStatus = (index: number) => { // 已答题目 let isAnswered = false if (question.type === '单选题' || question.type === '判断题') { - isAnswered = selectedAnswers.value[index] !== -1 + isAnswered = selectedAnswers.value[index] !== undefined && selectedAnswers.value[index] !== null } else if (question.type === '多选题') { isAnswered = multipleAnswers.value[index] && multipleAnswers.value[index].length > 0 } else if (question.type === '填空题') { @@ -1154,7 +1175,7 @@ const goBack = () => { // 返回课程列表 const goHome = () => { - router.push('/course') + router.push('/course/1') } // 时间到后前往结果页面 @@ -1447,12 +1468,32 @@ onMounted(() => { .timer-display.disabled { color: #999 !important; - background: #eeeeee !important; + background: #f6f6f6 !important; border-color: #ddd !important; } +.timer-labels.disabled { + color: #999 !important; + background-color: #f6f6f6 !important; +} + +/* 确保父级计时器容器背景保持白色 */ +.exam-timer.disabled { + background: white !important; +} + +/* 计时器分隔符在禁用状态下变灰 */ +.timer-display.disabled .timer-separator { + color: #999 !important; +} + +/* 确保"剩余时间"标题在禁用状态下保持黑色 */ +.exam-timer.disabled h4 { + color: #000 !important; +} + .answer-sheet.disabled { - background: #f5f5f5 !important; + /* background: #f5f5f5 !important; */ border: 1px solid #e0e0e0 !important; } @@ -1464,45 +1505,122 @@ onMounted(() => { color: #999 !important; } +.answer-sheet.disabled .progress-text .progress-current { + color: #000 !important; +} + +.answer-sheet.disabled .progress-text .progress-total { + color: #999 !important; +} + .answer-sheet.disabled .section-header h5 { color: #999 !important; } -.answer-card-number.disabled { - background: #eeeeee !important; +.answer-sheet.disabled .answer-card-number { + background: white !important; color: #999 !important; - border-color: #ddd !important; + border-color: #999 !important; cursor: not-allowed !important; } -.btn-submit-exam.disabled { - background: #cccccc !important; +/* 确保disabled状态覆盖其他状态 */ +.answer-sheet.disabled .answer-card-number.answered { + background: white !important; color: #999 !important; - border-color: #bbb !important; + border-color: #999 !important; +} + +.answer-sheet.disabled .answer-card-number.current { + background: white !important; + color: #999 !important; + border-color: #999 !important; +} + +.answer-sheet.disabled .answer-card-number.marked { + background: white !important; + color: #999 !important; + border-color: #999 !important; +} + +.answer-sheet.disabled .btn-submit-exam { + background-color: #999 !important; + color: #fff !important; cursor: not-allowed !important; } -/* 确保答题状态说明也变灰 */ -.answer-sheet.disabled .answer-legend { +/* 交卷后计时器样式 */ +.answer-sheet.disabled .timer-display { + background-color: #f6f6f6 !important; color: #999 !important; } -.answer-sheet.disabled .legend-item { +.answer-sheet.disabled .timer-labels { + color: #999 !important; + background-color: #f6f6f6 !important; +} + +.answer-sheet.disabled .timer-separator { color: #999 !important; } -.answer-sheet.disabled .legend-text { - color: #999 !important; +.answer-sheet.disabled .exam-timer { + background: white !important; } -.answer-sheet.disabled .legend-icon.unanswered { - background: #eeeeee !important; - border-color: #ddd !important; +.answer-sheet.disabled .exam-timer h4 { + color: #000 !important; } -.answer-sheet.disabled .legend-icon.answered { - background: #eeeeee !important; - border-color: #ddd !important; +/* 交卷后图例样式 */ +.answer-sheet.disabled .legend-color.legend-unanswered { + background: white !important; + border-color: #999 !important; +} + +.answer-sheet.disabled .legend-color.legend-answered { + background: #999 !important; + border-color: #999 !important; + display: block !important; +} + +.answer-sheet.disabled .legend-color.legend-answered::after { + color: white !important; + font-size: 12px !important; + font-weight: bold !important; +} + + +/* 图例颜色块基础样式 */ +.legend-color { + width: 16px; + height: 16px; + border-radius: 2px; + margin-right: 8px; + display: inline-block; + position: relative; +} + +.legend-color.legend-unanswered { + background: white; + border: 2px solid #d9d9d9; +} + +.legend-color.legend-answered { + background: #999; + border: 2px solid #999; +} + +.legend-color.legend-answered::after { + content: '✓'; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: white; + font-size: 12px; + font-weight: bold; + line-height: 1; } /* 答题卡 */ @@ -1539,8 +1657,12 @@ onMounted(() => { font-weight: 500; } -.progress-text span { - color: #999999; +.progress-text .progress-current { + color: #000; +} + +.progress-text .progress-total { + color: #999; } .question-section { @@ -1552,7 +1674,7 @@ onMounted(() => { } .section-header h5 { - font-size: 15px; + font-size: 16px; color: #999; margin: 0; font-weight: 400; @@ -2453,4 +2575,6 @@ onMounted(() => { max-width: 320px; } } + +/* 交卷后提交按钮背景变灰 - 样式已在上面定义 */ diff --git a/src/views/Home.vue b/src/views/Home.vue index 4af5f77..240ca16 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -502,16 +502,16 @@
- 客服 + 客服
- 电话 + 电话
- 问题 + 问题
- 返回顶部 + 返回顶部 返回顶部
diff --git a/src/views/LearningCenter.vue b/src/views/LearningCenter.vue new file mode 100644 index 0000000..3d3248e --- /dev/null +++ b/src/views/LearningCenter.vue @@ -0,0 +1,2406 @@ + + + \ No newline at end of file diff --git a/src/views/Practice.vue b/src/views/Practice.vue new file mode 100644 index 0000000..c4578b0 --- /dev/null +++ b/src/views/Practice.vue @@ -0,0 +1,3176 @@ + + + + + diff --git a/src/views/Profile.vue b/src/views/Profile.vue index 504cd67..839d442 100644 --- a/src/views/Profile.vue +++ b/src/views/Profile.vue @@ -16,73 +16,73 @@
- + 我的课程
- + 我的作业
- + 我的考试
- + 我的练习
- + 我的活动
+ +
+ + 我的关注 +
+
- + 我的消息
- + 我的资料
- + 我的下载
@@ -132,14 +132,12 @@ {{ course.description }}
- + 共{{ course.chapters || 9 }}章{{ course.lessons || 54 }}节 - + {{ course.duration || '12小时43分钟' }} + :src="course.status === 'learning' ? '/images/profile/33.png' : '/images/profile/33.png'" /> 已看{{ course.watchedTime || '10小时20分钟' }}
{{ course.status === 'learning' ? '去学习' : '去复习' }} @@ -189,7 +187,7 @@ @click="handleHomeworkTabChange('pending')">未完成 已完成 - + 草稿箱 @@ -198,11 +196,11 @@
- +
+
+ + 文件名称.PDF + +
+
+ + 文件名称.PDF + +
+
+ +
这里是课程名称!!! 查看详情>
+ +
+ +
+
+ +
+ +
+ +
+
+
+ 教师头像 +
+ {{ draftAssignment.teacherName }} + {{ draftAssignment.assignTime }} +
+
+ + + + {{ draftAssignment.status === '未完成' || draftAssignment.status === '待提交' ? '未完成' : + (draftAssignment.status === '已完成' ? '已完成' : '541人已完成') }} + + +
+ + +
+ {{ draftAssignment.title }} +
+ + {{ draftAssignment.description }} + +
+
+ + +
+
+ +
+
+ +
+
+ + 文件名称.PDF + +
+
+ + 文件名称.PDF + +
+
+ +
这里是课程名称!!! 查看详情>
+ + +
+
+ 上传作业 +
+
+ 重新编辑 +
+
+
+
+ -
+
+
{{ assignment.teacherName }} @@ -271,10 +374,12 @@
- - 12321人已完成 + + {{ assignment.status === '未完成' || assignment.status === '待提交' ? '未完成' : '已完成' }} +
@@ -302,19 +407,12 @@ src="/images/traings/traing1.png" :class="['image_' + (24 + index)]" />
-
-
- - 文件名称.PDF - -
-
- - 文件名称.PDF - -
+
+ + 541人已完成
-
这里是课程名称!!! 查看详情>
+ +
@@ -322,14 +420,18 @@
@@ -558,7 +660,51 @@
{{ activity.status === 'ongoing' ? '进行中' : '已结束' - }} + }} +
+
+
+
+
+ + +
+ +
+ 全部关注 + 最近关注 + 最常访问 +
+ + +
+ + +
+ @@ -581,8 +727,14 @@
- 全部已读 - 按时间 + + 全部已读 + 全部已读 + + + 按时间 + 按时间 +
@@ -600,7 +752,9 @@ +
+
+ 已全部加载,共17个文件 + +
+
+ :class="{ 'subdirectory-grid': isInSubDirectory, 'certificate-grid': activeDownloadTab === 'certificate', 'homework-grid': activeDownloadTab === 'homework' }">
- 文件图标 + 文件图标
{{ file.name }}
@@ -1080,7 +1229,7 @@ const message = useMessage() const userStore = useUserStore() // 定义标签页类型 -type TabType = 'courses' | 'homework' | 'exam' | 'practice' | 'activity' | 'message' | 'materials' | 'download' +type TabType = 'courses' | 'homework' | 'exam' | 'practice' | 'activity' | 'follows' | 'message' | 'materials' | 'download' const activeTab = ref('courses') const activeCourseTab = ref('all') @@ -1097,6 +1246,9 @@ const activePracticeTab = ref('all') // 活动筛选状态 const activeActivityTab = ref('all') +// 关注筛选状态 +const activeFollowsTab = ref('all') + // 消息相关状态 const activeMessageTab = ref('all') const replyingMessageId = ref(null) @@ -1149,7 +1301,16 @@ const downloadFiles = reactive([ { id: 12, name: '文件名称', type: 'folder', category: 'courseware' }, { id: 13, name: '证书文件1', type: 'folder', category: 'certificate' }, { id: 14, name: '证书文件2', type: 'folder', category: 'certificate' }, - { id: 15, name: '资源文件1', type: 'folder', category: 'resources' } + { id: 16, name: '证书文件2', type: 'folder', category: 'certificate' }, + { id: 17, name: '证书文件2', type: 'folder', category: 'certificate' }, + { id: 18, name: '证书文件2', type: 'folder', category: 'certificate' }, + { id: 15, name: '资源文件1', type: 'folder', category: 'resources' }, + { id: 19, name: '作业文件1', type: 'folder', category: 'homework' }, + { id: 20, name: '作业文件2', type: 'folder', category: 'homework' }, + { id: 21, name: '作业文件3', type: 'folder', category: 'homework' }, + { id: 22, name: '作业文件4', type: 'folder', category: 'homework' }, + { id: 23, name: '作业文件5', type: 'folder', category: 'homework' }, + { id: 24, name: '作业文件6', type: 'folder', category: 'homework' } ]) @@ -1297,7 +1458,7 @@ const mockAssignments: Assignment[] = [ teacherName: '李老师', teacherAvatar: '/images/traings/traing1.png', assignTime: '2024-01-20', - status: '已提交', + status: '已完成', title: '现代教育技术应用实践报告', description: '结合本学期所学的现代教育技术知识,选择一个具体的教学场景,设计并实施一个融合信息技术的教学活动,撰写实践报告。', attachments: [ @@ -1768,6 +1929,76 @@ const mockActivities: Activity[] = [ } ] +// 模拟关注数据 +const mockFollows = [ + { + id: 1, + name: '张教授', + role: '教育心理学教授', + description: '专注于教育心理学研究,发表多篇学术论文', + avatar: '/images/profile/avater.png', + type: 'all', + category: 'recent', + visitCount: 15, + isFollowing: true + }, + { + id: 2, + name: '李老师', + role: '数学教师', + description: '拥有10年教学经验,擅长数学教学方法创新', + avatar: '/images/profile/avater.png', + type: 'all', + category: 'recent', + visitCount: 8, + isFollowing: false + }, + { + id: 3, + name: '王同学', + role: '学习伙伴', + description: '北京理工大学计算机学院教授计算机计算机计算', + avatar: '/images/profile/avater.png', + type: 'all', + category: 'frequent', + visitCount: 25, + isFollowing: true + }, + { + id: 4, + name: '刘同学', + role: '学习伙伴', + description: '学习小组组长,组织能力强', + avatar: '/images/profile/avater.png', + type: 'all', + category: 'frequent', + visitCount: 32, + isFollowing: false + }, + { + id: 5, + name: '陈博士', + role: '计算机科学教授', + description: '人工智能与机器学习专家,发表论文50余篇', + avatar: '/images/profile/avater.png', + type: 'all', + category: 'recent', + visitCount: 12, + isFollowing: true + }, + { + id: 6, + name: '赵同学', + role: '学习伙伴', + description: '编程爱好者,经常分享学习心得', + avatar: '/images/profile/avater.png', + type: 'all', + category: 'frequent', + visitCount: 28, + isFollowing: false + } +] + // 模拟消息数据 const mockMessages: Message[] = [ { @@ -1783,9 +2014,9 @@ const mockMessages: Message[] = [ }, { id: 2, - senderName: '建国学习', + senderName: '建国学习@了我:', senderAvatar: '/images/avatars/student1.png', - content: '@了我:没事多看看课程的起源', + content: '没事多看看课程的起源', courseName: '教育心理学的起源', date: '7月20日 12:41', isRead: false, @@ -1992,7 +2223,7 @@ const filteredAssignments = computed(() => { if (activeHomeworkTab.value === 'pending') { return mockAssignments.filter(assignment => assignment.status === '待提交' || assignment.status === '未完成') } else if (activeHomeworkTab.value === 'completed') { - return mockAssignments.filter(assignment => assignment.status === '已完成' || assignment.status === '已提交') + return mockAssignments.filter(assignment => assignment.status === '已完成' || assignment.status === '已完成') } return mockAssignments }) @@ -2029,12 +2260,23 @@ const filteredActivities = computed(() => { return mockActivities }) +// 获取筛选后的关注 +const filteredFollows = computed(() => { + if (activeFollowsTab.value === 'recent') { + return mockFollows.filter(follow => follow.category === 'recent') + } else if (activeFollowsTab.value === 'frequent') { + return mockFollows.filter(follow => follow.category === 'frequent') + } + return mockFollows +}) + // 计算属性用于模板中的条件判断 const isCoursesTab = computed(() => activeTab.value === 'courses') const isHomeworkTab = computed(() => activeTab.value === 'homework') const isExamTab = computed(() => activeTab.value === 'exam') const isPracticeTab = computed(() => activeTab.value === 'practice') const isActivityTab = computed(() => activeTab.value === 'activity') +const isFollowsTab = computed(() => activeTab.value === 'follows') const isMessageTab = computed(() => activeTab.value === 'message') // 处理菜单选择 @@ -2118,6 +2360,11 @@ const handleActivityTabChange = (tab: string) => { activeActivityTab.value = tab } +// 处理关注筛选变化 +const handleFollowsTabChange = (tab: string) => { + activeFollowsTab.value = tab +} + // 获取考试状态文本 const getExamStatusText = (status: string) => { switch (status) { @@ -2173,6 +2420,16 @@ const viewActivityDetail = (id: number) => { message.info(`查看活动详情 ${id}`) } +// 切换关注状态 +const toggleFollow = (id: number) => { + const follow = mockFollows.find(f => f.id === id) + if (follow) { + follow.isFollowing = !follow.isFollowing + const action = follow.isFollowing ? '关注' : '取消关注' + message.info(`已${action}用户 ${follow.name}`) + } +} + // 消息相关方法 const handleMessageTabChange = (tab: string) => { activeMessageTab.value = tab @@ -2250,10 +2507,22 @@ const goBack = () => { currentPath.value = [] } -const getFileIcon = () => { +const getFileIcon = (fileId?: number) => { if (activeDownloadTab.value === 'certificate') { // 证书标签页使用证书图标 - return 'https://lanhu-oss-2537-2.lanhuapp.com/SketchPngdbc5738893837b29e29e56db7f3999ff13a42da7012dadb028f61eb9fe149ca4' + return '/images/profile/certificate.jpg' + } else if (activeDownloadTab.value === 'homework') { + // 作业标签页使用不同的作业相关图标 + const homeworkImages = [ + '/images/profile/word.png', + '/images/profile/pdf.png', + '/images/profile/ppt.png', + '/images/profile/xls.png', + '/images/profile/zip.png', + '/images/profile/word.png' + ] + const index = (fileId || 0) % homeworkImages.length + return homeworkImages[index] } else if (isInSubDirectory.value) { // 子目录使用子目录图标 return 'https://lanhu-oss-2537-2.lanhuapp.com/SketchPngf45333052202c303acc2c06223c26b820d330459ce2d452a21a3132fbbeab442' @@ -2263,9 +2532,9 @@ const getFileIcon = () => { } } -// const createNewFolder = () => { -// message.info('新建文件夹功能开发中...') -// } +const createNewFolder = () => { + message.info('新建文件夹功能开发中...') +} const renameFile = (fileId: number) => { message.info(`重命名文件 ${fileId}`) @@ -2336,6 +2605,7 @@ const getTabTitle = (tab: TabType) => { exam: '我的考试', practice: '我的练习', activity: '我的活动', + follows: '我的关注', message: '我的消息', materials: '我的资料', download: '我的下载' @@ -2358,6 +2628,10 @@ const uploadForm = reactive({ const showDetailView = ref(false) const detailAssignment = ref(null) +// 草稿箱视图状态 +const showDraftBoxView = ref(false) +const draftAssignment = ref(null) + // 考试详情视图状态 const showExamDetail = ref(false) const currentExamId = ref(null) @@ -2398,6 +2672,7 @@ const closeExamDetail = () => { const viewAssignmentDetail = (assignment: Assignment) => { detailAssignment.value = assignment showDetailView.value = true + showDraftBoxView.value = false } // 返回作业列表 @@ -2411,6 +2686,38 @@ const showUploadFromDetail = () => { showUploadModal(detailAssignment.value!) } +// 显示草稿箱 +const showDraftBox = () => { + // 模拟草稿箱数据,实际应该从后端获取 + draftAssignment.value = { + id: 1, + title: '教育心理学课程设计作业', + description: '请根据所学的教育心理学理论,设计一个完整的课程教学方案,包括教学目标、教学内容、教学方法、教学评价等方面。要求理论联系实际,体现现代教育理念。', + teacherName: '张老师', + teacherAvatar: '/images/traings/traing1.png', + assignTime: '2024-01-15', + status: '草稿', + attachments: [ + { icon: '/images/auth/file.png', name: 'file1.pdf' }, + { icon: '/images/auth/file.png', name: 'file2.pdf' } + ], + mainImage: '/images/traings/traing1.png' + } + showDraftBoxView.value = true + showDetailView.value = false +} + +// 返回作业列表(从草稿箱) +const backFromDraftBox = () => { + showDraftBoxView.value = false + draftAssignment.value = null +} + +// 重新编辑草稿 +const reEditDraft = () => { + showUploadModal(draftAssignment.value!) +} + // 显示上传作业弹窗 const showUploadModal = (assignment: Assignment) => { currentAssignment.value = assignment @@ -2583,7 +2890,8 @@ onMounted(() => { .image-text_23, .image-text_24, .image-text_25, -.image-text_26 { +.image-text_26, +.image-text_27 { width: 11vw; /* 进一步缩小菜单项宽度,适应新的导航栏宽度 */ height: auto; @@ -2613,7 +2921,8 @@ onMounted(() => { .image-text_23:hover, .image-text_24:hover, .image-text_25:hover, -.image-text_26:hover { +.image-text_26:hover, +.image-text_27:hover { background: #eff7fc; /* 悬停时背景色 */ } @@ -2626,7 +2935,8 @@ onMounted(() => { .image-text_23.active, .image-text_24.active, .image-text_25.active, -.image-text_26.active { +.image-text_26.active, +.image-text_27.active { background: #eff7fc; /* 激活时背景色 */ } @@ -2639,7 +2949,8 @@ onMounted(() => { .thumbnail_40, .label_7, .image_9, -.thumbnail_41 { +.thumbnail_41, +.thumbnail_42 { width: 1.04vw; /* 20px转换为vw */ height: 1.04vw; @@ -2655,7 +2966,8 @@ onMounted(() => { .text-group_23, .text-group_24, .text-group_25, -.text-group_26 { +.text-group_26, +.text-group_27 { font-size: 16px; /* 20px转换为vw */ color: rgba(102, 102, 102, 1); @@ -2675,6 +2987,7 @@ onMounted(() => { .image-text_23.active .text-group_23, .image-text_24.active .text-group_24, .image-text_25.active .text-group_25, +.image-text_27.active .text-group_27, .image-text_26.active .text-group_26 { color: rgba(2, 134, 206, 1); /* 激活时蓝色 */ @@ -2688,6 +3001,7 @@ onMounted(() => { .image-text_23:hover .text-group_23, .image-text_24:hover .text-group_24, .image-text_25:hover .text-group_25, +.image-text_27:hover .text-group_27, .image-text_26:hover .text-group_26 { color: rgba(2, 134, 206, 1); /* 悬停时蓝色 */ @@ -2712,7 +3026,7 @@ onMounted(() => { height: 2.08vh; /* 40px转换为vh */ align-items: center; - margin: 10px 0 20px 0; + margin: 20px 0 20px 0; /* 32px转换为vh */ gap: 2.81vw; /* 54px转换为vw:54/1920*100 = 2.81vw */ @@ -2724,7 +3038,7 @@ onMounted(() => { .text_15 { font-size: 0.94vw; /* 18px转换为vw */ - color: rgba(102, 102, 102, 1); + color: #000; font-family: 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; cursor: pointer; @@ -2755,7 +3069,7 @@ onMounted(() => { .course-divider { width: 100%; /* 与课程卡片宽度一致 */ - height: 0.05vh; + height: 1.5px; /* 1px转换为vh */ background: #E6E6E6; margin-bottom: 1.67vh; @@ -2926,11 +3240,14 @@ onMounted(() => { } .thumbnail_6, -.thumbnail_7, +.thumbnail_7 { + width: 14px; + height: 14px; +} + .thumbnail_8 { - width: 0.83vw; - /* 16px转换为vw */ - height: 0.83vw; + width: 18px; + height: 18px; } .text_20, @@ -3047,8 +3364,9 @@ onMounted(() => { /* 作业卡片主容器 */ .group_11 { + padding-top: 15px; position: relative; - width: 53.8vw; + width: 100%; /* 1033px转换为vw */ min-height: 25vh; /* 设置最小高度 */ @@ -3072,7 +3390,7 @@ onMounted(() => { /* 头部信息容器 */ .box_5 { - width: 51.46vw; + /* width: 51.46vw; */ /* 988px转换为vw */ height: 2.81vh; /* 54px转换为vh */ @@ -3091,9 +3409,21 @@ onMounted(() => { /* 54px转换为vh */ display: flex; align-items: center; - margin-top: 1.3vh; + margin-top: 3.3vh; /* 25px转换为vh (25/1920*100) */ position: relative; + gap: 8px; +} + +.avatar-line { + position: absolute; + left: -4px; + top: 53%; + transform: translateY(-50%); + width: 57px; + height: 56px; + border-radius: 50%; + border: 2px solid #0288D1; } /* 教师头像 */ @@ -3128,7 +3458,7 @@ onMounted(() => { /* 增加垂直间距 */ margin-left: 0.52vw; /* 10px转换为vw,头像和姓名之间的间距 */ - margin-top: 1.6vh; + margin-top: -2vh; /* 25px转换为vh (25/1920*100) */ } @@ -3159,8 +3489,8 @@ onMounted(() => { height: 1.04vh; /* 20px转换为vh */ overflow-wrap: break-word; - color: rgba(153, 153, 153, 1); - font-size: 0.73vw; + color: #999999; + font-size: 14px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; @@ -3169,6 +3499,7 @@ onMounted(() => { line-height: 1.04vh; /* 20px转换为vh */ margin-top: 1.2vh; + margin-top: 15px; /* 调整时间与姓名的间距 */ } @@ -3195,13 +3526,19 @@ onMounted(() => { align-items: center; } +.text_32 img { + margin-right: 7px; + width: 16px; + height: 16px; +} + /* 作业内容区域 */ .text-group_4 { - width: 48.02vw; + /* width: 48.02vw; */ /* 922px转换为vw */ height: auto; /* 改为自适应高度 */ - margin: 4vh 0 0 3.2vw; + margin: 4vh 1vw 0 5vw; /* 减少顶部margin,让内容更紧凑 */ flex-grow: 1; /* 允许内容区域伸展 */ @@ -3226,6 +3563,8 @@ onMounted(() => { /* 允许文本换行 */ line-height: 1.8vh; /* 增加行高,提高可读性 */ + padding-top: 10px; + padding-bottom: 5px; margin-bottom: 1vh; /* 添加底部间距 */ display: block; @@ -3234,7 +3573,7 @@ onMounted(() => { /* 作业描述容器 */ .description-container { - width: 48.02vw; + /* width: 48.02vw; */ /* 922px转换为vw */ position: relative; } @@ -3298,9 +3637,7 @@ onMounted(() => { } .detail-header { - border-bottom: 1px solid #e9ecef; - padding-bottom: 20px; - margin-bottom: 20px; + /* padding-bottom: 20px; */ } .detail-header h2 { @@ -3350,7 +3687,7 @@ onMounted(() => { } .assignment-status.已完成, -.assignment-status.已提交 { +.assignment-status.已完成 { color: #52c41a; } @@ -3404,11 +3741,11 @@ onMounted(() => { /* 附件区域 */ .box_6 { - width: 48.65vw; + /* width: 48.65vw; */ /* 934px转换为vw */ height: auto; /* 改为自适应高度 */ - margin: 0.94vh 0 0 2vw; + margin: 0.94vh 0 0 5vw; /* 18px 0 0 67px转换 */ position: relative; display: flex; @@ -3467,7 +3804,24 @@ onMounted(() => { gap: 0.7vw; align-items: center; margin-top: 1vh; - margin-left: 2.5vh; + /* margin-left: 2.5vh; */ +} + +.attachment-number-container { + justify-content: left; + gap: 0; + align-items: center; +} + +.attachment-number-icon { + width: 14px; + height: 12px; +} + +.attachment-number-text { + margin-left: 5px; + font-size: 14px; + color: #999; } /* 附件图片样式 - 使用flex布局避免重叠 */ @@ -3488,7 +3842,7 @@ onMounted(() => { .assignment-buttons { display: flex; gap: 1vw; - margin: 2vh 0 2vh 2.95vw; + margin: 2vh 0 2vh 4.95vw; } /* 提交按钮容器 */ @@ -3506,6 +3860,8 @@ onMounted(() => { display: flex; align-items: center; justify-content: center; + background-color: #0288D1; + color: #fff; } /* 上传作业按钮 - 未完成状态 */ @@ -3515,18 +3871,31 @@ onMounted(() => { border: 1px solid #0288D1; } +.anew-button { + width: 102px; + height: 33px; + background-color: #fff; + color: #0288D1 !important; + border: 1px solid #0288D1; + font-size: 14px; +} + /* 查看情况按钮 - 未完成状态 */ .view-button { width: 102px; height: 33px; - background-color: #0288D1 + background-color: white; + border: 1px solid #0288D1; + color: #0288D1; + font-size: 14px; } /* 查看详情按钮 - 已完成状态 */ .details-button { width: 102px; height: 33px; - background-color: #0288D1 + background-color: #0288D1; + color: white !important; } /* 提交按钮文字 */ @@ -3536,21 +3905,19 @@ onMounted(() => { height: 1.04vh; /* 20px转换为vh */ overflow-wrap: break-word; - color: #0288D1; - font-size: 0.73vw; + color: #fff; + font-size: 14px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; text-align: center; white-space: nowrap; line-height: 1.04vh; - /* 20px转换为vh */ margin: 0; - /* 移除边距,让按钮控制位置 */ } .text-view { - color: #fff; + color: #0288D1; } /* 主图样式 */ @@ -3724,8 +4091,8 @@ onMounted(() => { } .files-container { - margin: 15px 0 0 20px; - width: 100%; + margin: 15px 20px 0 83px; + /* width: 100%; */ background-color: #F5F9FC; height: 48px; display: flex; @@ -3751,8 +4118,8 @@ onMounted(() => { .course-name { margin-top: 10px; - margin-left: 20px; - color: #000; + margin-left: 83px; + color: #999999; } .course-name span { @@ -4306,7 +4673,7 @@ onMounted(() => { .detail-header { display: flex; align-items: center; - margin-bottom: 15px; + /* margin-bottom: 15px; */ } /* 面包屑导航样式 */ @@ -5164,7 +5531,7 @@ onMounted(() => { font-size: 14px; color: #666; line-height: 1.5; -border-bottom: 1.5px solid #E6E6E6; + border-bottom: 1.5px solid #E6E6E6; } .practice-footer { @@ -5487,10 +5854,10 @@ border-bottom: 1.5px solid #E6E6E6; display: flex; justify-content: space-between; align-items: center; - margin-bottom: 1.04vh; + margin-bottom: 20px; /* 20px转换为vh */ - padding: 0 1.04vw; - /* 20px转换为vw */ + padding: 10px 0; + border-bottom: 1.5px solid #e6e6e6; } .message-tabs { @@ -5531,15 +5898,19 @@ border-bottom: 1.5px solid #E6E6E6; */ .message-count { + position: absolute; + top: 0; + right: -30%; background: #ff4d4f; color: white; font-size: 0.63vw; /* 12px转换为vw */ - padding: 2px 2px; + width: 12px; + height: 12px; + line-height: 12px; /* 2px 6px转换 */ border-radius: 50%; /* 10px转换为vw */ - min-width: 1.04vw; /* 20px转换为vw */ text-align: center; line-height: 1; @@ -5548,13 +5919,14 @@ border-bottom: 1.5px solid #E6E6E6; .message-actions { display: flex; gap: 1.04vw; + align-items: center; /* 20px转换为vw */ } .action-link { - width: 2.92vw; + /* width: 2.92vw; */ /* 56px转换为vw */ - height: 1.04vh; + /* height: 1.04vh; */ /* 20px转换为vh */ font-family: AppleSystemUIFont, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 0.73vw; @@ -5567,6 +5939,9 @@ border-bottom: 1.5px solid #E6E6E6; text-transform: none; cursor: pointer; text-decoration: none; + display: inline-flex; + align-items: center; + /* 使用flexbox确保垂直居中 */ } .action-link:hover { @@ -5576,6 +5951,21 @@ border-bottom: 1.5px solid #E6E6E6; /* 移除下划线 */ } +/* 操作图标样式 */ +.action-icon { + width: 0.94vw; + /* 18px转换为vw */ + height: 0.94vw; + /* 18px转换为vw */ + margin-right: 0.26vw; + /* 5px转换为vw */ + vertical-align: middle; + display: inline-block; + position: relative; + top: -0.05vw; + /* 微调垂直位置 */ +} + .message-list { display: flex; flex-direction: column; @@ -5587,7 +5977,6 @@ border-bottom: 1.5px solid #E6E6E6; position: relative; background: white; border: 1px solid #D8D8D8; - border-radius: 0.42vw; /* 8px转换为vw */ transition: border-color 0.3s ease; } @@ -5614,7 +6003,7 @@ border-bottom: 1.5px solid #E6E6E6; .message-main { padding: 1.04vh 1.04vw; /* 20px转换 */ - margin-left: 1.04vw; + /* margin-left: 1.04vw; */ /* 为未读标识留出空间 */ } @@ -5627,13 +6016,14 @@ border-bottom: 1.5px solid #E6E6E6; /* 14px转换为vh */ width: 100%; /* 确保占满宽度 */ + position: relative; } /* 消息头像样式 */ .image_22 { - width: 2.19vw; + width: 49px; /* 42px转换为vw */ - height: 2.19vw; + height: 49px; /* 42px转换为vw */ border-radius: 50%; object-fit: cover; @@ -5691,10 +6081,11 @@ border-bottom: 1.5px solid #E6E6E6; /* 课程信息容器 */ .course-info-container { - width: 49.06vw; + width: 100%; /* 942px转换为vw */ - height: 3.22vh; - /* 62px转换为vh,高度加一倍 */ + /* height: 5.21vh; */ + padding: 0.52vh 0.57vw; + /* 100px转换为vh,进一步增加高度 */ background: url('https://lanhu-oss-2537-2.lanhuapp.com/SketchPng9491a7fe5bdac8e8a88de63907163bd6b8a259824f56a3c76784ba6cdc7bc32b') 100% no-repeat; background-size: 100% 100%; margin-top: 0.26vh; @@ -5705,8 +6096,8 @@ border-bottom: 1.5px solid #E6E6E6; /* 垂直居中 */ justify-content: flex-start; /* 水平左对齐 */ - padding-left: 0.57vw; - /* 11px转换为vw */ + padding: 1.04vh 0.57vw; + /* 20px 11px转换为vh/vw,增加上下内边距 */ } .course-label { @@ -5724,13 +6115,15 @@ border-bottom: 1.5px solid #E6E6E6; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; - color: #497087; + /* color: #497087; */ line-height: 1.04vh; /* 20px转换为vh */ } .message-time { - width: 4.69vw; + position: absolute; + right: 0; + top: 0.57vw; /* 90px转换为vw */ height: 1.04vh; /* 20px转换为vh */ @@ -5748,8 +6141,6 @@ border-bottom: 1.5px solid #E6E6E6; align-self: flex-start; margin-top: 0.05vh; /* 1px转换为vh,微调位置 */ - position: relative; - top: 1.56vh; /* 30px转换为vh,让时间下移 */ } @@ -5770,6 +6161,8 @@ border-bottom: 1.5px solid #E6E6E6; .message-action-btn { display: flex; align-items: center; + justify-content: center; + /* 确保内容水平居中 */ gap: 0; /* 移除图标和文字间距,让它们紧贴 */ padding: 0; @@ -5809,20 +6202,37 @@ border-bottom: 1.5px solid #E6E6E6; /* 举报按钮位置 - 在最右边 */ .report-btn { position: absolute; - right: 0; + right: 7px; +} + +/* 消息操作按钮中的图标样式 */ +.message-action-btn .action-icon { + width: 0.73vw; + /* 14px转换为vw */ + height: 0.73vw; + /* 14px转换为vw */ + margin-right: 0.26vw; + /* 5px转换为vw */ + vertical-align: middle; + display: inline-block; + position: relative; + top: -0.03vw; + /* 微调垂直位置 */ } /* 系统消息样式 */ .system-message-item { position: relative; background: white; - border: 1px solid #D8D8D8; + border: 1.5px solid #D8D8D8; border-radius: 0; transition: border-color 0.3s ease; height: auto; - min-height: 6.88vh; + min-height: 90px; /* 132px转换为vh */ margin-bottom: 1.04vh; + display: flex; + align-items: center; /* 20px转换为vh */ } @@ -5831,14 +6241,16 @@ border-bottom: 1.5px solid #E6E6E6; } .system-message-main { - padding: 1.25vh 1.04vw; + padding: 10px 0; /* 24px 20px转换 */ - margin-left: 1.56vw; + margin-left: 15px; /* 30px转换为vw */ + width: 100%; } .system-message-user { display: flex; + justify-content: space-between; align-items: flex-start; gap: 0.73vw; /* 14px转换为vw */ @@ -5850,9 +6262,9 @@ border-bottom: 1.5px solid #E6E6E6; } .system-icon { - width: 2.19vw; + width: 45px; /* 42px转换为vw */ - height: 2.19vw; + height: 45px; /* 42px转换为vw */ background: rgba(3, 136, 209, 1); border-radius: 50%; @@ -5861,14 +6273,8 @@ border-bottom: 1.5px solid #E6E6E6; justify-content: center; flex-shrink: 0; margin-top: 0.1vh; - /* 2px转换为vh,微调位置 */ -} - -.system-icon::before { - content: '🔔'; - color: white; - font-size: 1.04vw; - /* 20px转换为vw */ + background-image: url('/images/profile/root.png'); + background-size: 100% 100%; } .system-info { @@ -5878,11 +6284,11 @@ border-bottom: 1.5px solid #E6E6E6; } .system-title { - font-size: 0.73vw; + font-size: 16px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; - color: rgba(0, 0, 0, 1); + color: #333; line-height: 1.5; /* 使用相对行高,确保文字不错位 */ text-align: left; @@ -5898,16 +6304,16 @@ border-bottom: 1.5px solid #E6E6E6; .system-subtitle-row { display: flex; align-items: center; - justify-content: space-between; + justify-content: flex-start; width: 100%; } .system-subtitle { - font-size: 0.73vw; + font-size: 14px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; - color: rgba(153, 153, 153, 1); + color: #999; line-height: 1.5; /* 使用相对行高,确保文字不错位 */ text-align: left; @@ -5916,8 +6322,7 @@ border-bottom: 1.5px solid #E6E6E6; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - flex: 1; - margin-right: 1.04vw; + /* flex: 1; */ /* 20px转换为vw,与查看详情保持间距 */ } @@ -5943,9 +6348,9 @@ border-bottom: 1.5px solid #E6E6E6; } .system-time { - width: 4.69vw; + width: 90px; /* 90px转换为vw */ - font-size: 0.63vw; + font-size: 12px; /* 12px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: normal; @@ -5987,26 +6392,17 @@ border-bottom: 1.5px solid #E6E6E6; .reply-section { margin-top: 0.73vh; - /* 14px转换为vh */ - padding-top: 0.73vh; - /* 14px转换为vh */ - border-top: 1px solid #f0f0f0; } .reply-input-container { - background: #fafafa; - border-radius: 0.42vw; - /* 8px转换为vw */ - padding: 0.73vh 0.73vw; - /* 14px转换 */ + padding: 0 0 0 3vw; } .reply-textarea { width: 100%; min-height: 3.91vh; /* 75px转换为vh */ - border: 1px solid #d9d9d9; - border-radius: 0.31vw; + border: 1.5px solid #D8D8D8; /* 6px转换为vw */ padding: 0.52vh 0.52vw; /* 10px转换 */ @@ -6015,6 +6411,7 @@ border-bottom: 1.5px solid #E6E6E6; line-height: 1.5; resize: vertical; font-family: inherit; + } .reply-textarea:focus { @@ -6056,9 +6453,13 @@ border-bottom: 1.5px solid #E6E6E6; } .send-btn { - background: #1890ff; + width: 80px; + height: 28px; + background: #0288D1; color: white; border-color: #1890ff; + border-radius: 0; + margin-top: 5px; } .send-btn:hover { @@ -6075,13 +6476,14 @@ border-bottom: 1.5px solid #E6E6E6; } .draftbox img { - width: 14px; - height: 14px; + width: 16px; + height: 16px; margin-right: 8px; } .draftbox span { - font-size: 12px; + font-size: 16px; + color: #000; } .draftbox:hover { @@ -6280,9 +6682,9 @@ border-bottom: 1.5px solid #E6E6E6; } .materials-header { - padding: 1.56vh 2.08vw; + padding-bottom: 1vh; /* 30px 40px转换 */ - border-bottom: 1px solid #f0f0f0; + border-bottom: 1.5px solid #E6E6E6; } .materials-tabs { @@ -6305,27 +6707,25 @@ border-bottom: 1.5px solid #E6E6E6; } .materials-tab-item.active { - color: #1890ff; + color: #0288D1; font-weight: 500; /* 移除蓝色下划线 */ } .materials-tab-item:hover { - color: #1890ff; + color: #0288D1; } /* 基础信息页面样式 */ .basic-info-content { - padding: 1.04vh 1.04vw; + padding: 1.04vh 0; /* 20px转换,减少内边距因为容器已有边距 */ } .basic-info-container { - max-width: 52.08vw; - /* 1000px转换为vw */ - margin: 0 auto; - border: 1px solid #D8D8D8; - border-radius: 0.42vw; + height: 310px; + margin: 10px auto; + border: 1.5px solid #D8D8D8; /* 8px转换为vw */ padding: 2.08vh 2.08vw; /* 40px转换 */ @@ -6333,7 +6733,7 @@ border-bottom: 1.5px solid #E6E6E6; } .basic-info-title { - font-size: 0.94vw; + font-size: 16px; /* 18px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: 500; @@ -6342,7 +6742,7 @@ border-bottom: 1.5px solid #E6E6E6; /* 40px转换为vh */ padding-bottom: 1.04vh; /* 20px转换为vh */ - border-bottom: 1px solid #f0f0f0; + border-bottom: 1.5px solid #E6E6E6; } /* 头像部分样式 */ @@ -6356,15 +6756,22 @@ border-bottom: 1.5px solid #E6E6E6; .avatar-container { position: relative; display: inline-block; + width: 78px !important; + height: 78px !important; + border: 1.5px solid #0292D5; + border-radius: 50%; } .user-avatar-large { - width: 3.54vw !important; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 68px !important; /* 68px转换为vw,覆盖SafeAvatar样式 */ - height: 3.54vw !important; + height: 68px !important; /* 68px转换为vw,覆盖SafeAvatar样式 */ border-radius: 50%; - border: 3px solid #e0e0e0; } .user-avatar-large img { @@ -6375,9 +6782,9 @@ border-bottom: 1.5px solid #E6E6E6; position: absolute; bottom: 0; right: 0; - width: 1.3vw; + width: 25px; /* 25px转换为vw */ - height: 1.3vw; + height: 25px; /* 25px转换为vw */ background: #0288D1; border-radius: 50%; @@ -6394,9 +6801,9 @@ border-bottom: 1.5px solid #E6E6E6; } .avatar-edit-btn .edit-icon { - width: 0.57vw; + width: 11px; /* 11px转换为vw */ - height: 0.57vw; + height: 11px; /* 11px转换为vw */ object-fit: contain; } @@ -6446,15 +6853,13 @@ border-bottom: 1.5px solid #E6E6E6; .form-input, .form-select { - width: 14.38vw; - /* 276px转换为vw */ - height: 4.17vh; + width: 276px; + height: 41px; /* 80px转换为vh,与密码修改页面保持一致 */ padding: 1.04vh 0.73vw; /* 20px 14px转换,增加上下内边距 */ background: #F5F8FB; border: 1px solid #D8D8D8; - border-radius: 0.21vw; /* 4px转换为vw */ font-family: AppleSystemUIFont, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 0.73vw; @@ -6494,33 +6899,31 @@ border-bottom: 1.5px solid #E6E6E6; /* 密码修改页面样式 */ .password-content { - padding: 1.04vh 1.04vw; + margin-top: 15px; /* 20px转换,减少内边距因为容器已有边距 */ } .password-container { - max-width: 52.08vw; /* 1000px转换为vw */ margin: 0 auto; - border: 1px solid #D8D8D8; - border-radius: 0.42vw; + border: 1.5px solid #D8D8D8; /* 8px转换为vw */ - padding: 2.08vh 2.08vw; + padding: 10px 15px; /* 40px转换 */ background: white; } .password-title { - font-size: 0.94vw; + font-size: 16px; /* 18px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: 500; color: #333; - margin-bottom: 2.08vh; + margin-bottom: 10px; /* 40px转换为vh */ - padding-bottom: 1.04vh; + padding-bottom: 10px; /* 20px转换为vh */ - border-bottom: 1px solid #f0f0f0; + border-bottom: 1.5px solid #E6E6E6; } .password-form { @@ -6538,8 +6941,10 @@ border-bottom: 1.5px solid #E6E6E6; } .password-form-label { + margin-top: 15px; + margin-bottom: 5px; font-family: AppleSystemUIFont, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - font-size: 0.73vw; + font-size: 14px; /* 14px转换为vw */ color: #999999; line-height: 1.04vh; @@ -6552,16 +6957,10 @@ border-bottom: 1.5px solid #E6E6E6; } .account-display { - width: 47.92vw; - /* 920px转换为vw,减小宽度避免超出容器 */ - height: 4.17vh; - /* 80px转换为vh,增加高度 */ - padding: 1.04vh 1.56vw; - /* 20px 30px转换,增加内边距,placeholder往右移 */ + width: 100%; + height: 41px; background: #F5F8FB; - border: 1px solid #D8D8D8; - border-radius: 0.21vw; - /* 4px转换为vw */ + border: 1.5px solid #D8D8D8; font-family: AppleSystemUIFont, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 0.73vw; /* 14px转换为vw */ @@ -6576,16 +6975,11 @@ border-bottom: 1.5px solid #E6E6E6; } .password-form-input { - width: 47.92vw; - /* 920px转换为vw,减小宽度避免超出容器 */ - height: 4.17vh; - /* 80px转换为vh,增加高度 */ - padding: 1.04vh 1.56vw; - /* 20px 30px转换,增加内边距,placeholder往右移 */ + width: 100%; + height: 41px; + padding: 10px 15px; background: #F5F8FB; - border: 1px solid #D8D8D8; - border-radius: 0.21vw; - /* 4px转换为vw */ + border: 1.5px solid #D8D8D8; font-family: AppleSystemUIFont, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 0.73vw; /* 14px转换为vw */ @@ -6611,19 +7005,19 @@ border-bottom: 1.5px solid #E6E6E6; .password-form-actions { display: flex; justify-content: flex-start; - margin-top: 2.08vh; + margin-top: 15px; + margin-bottom: 10px; /* 40px转换为vh */ } .password-save-btn { - padding: 0.73vh 2.08vw; - /* 14px 40px转换 */ - background: #1890ff; + width: 100px; + height: 33px; + background: #0288D1; color: white; border: none; - border-radius: 0.21vw; /* 4px转换为vw */ - font-size: 0.73vw; + font-size: 14px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; font-weight: 500; @@ -6657,7 +7051,7 @@ border-bottom: 1.5px solid #E6E6E6; display: flex; justify-content: flex-start; align-items: center; - padding: 1.56vh 2.08vw; + padding-top: 1.56vh; /* 30px 40px转换 */ } @@ -6778,8 +7172,80 @@ border-bottom: 1.5px solid #E6E6E6; /* 左右内边距约25px */ } +/* 作业网格特有样式 - 一行显示6个,参考图片布局 */ +.homework-grid { + grid-template-columns: repeat(6, 1fr) !important; + /* 固定6列 */ + gap: 1vw !important; + /* 减少间距 */ + justify-content: center; + width: 100% !important; + /* 确保占满容器宽度 */ +} + +.homework-grid .file-item { + width: 100% !important; + /* 占满网格单元格宽度 */ + height: auto !important; + /* 高度自适应内容 */ + min-height: 201px !important; + /* 设置最小高度 */ + background: white !important; + /* 白色背景 */ + padding: 1.5vh 1vw !important; + /* 适当的内边距 */ + display: flex !important; + /* 使用flex布局 */ + flex-direction: column !important; + /* 垂直排列 */ + align-items: center !important; + /* 水平居中 */ + justify-content: center !important; + /* 垂直居中 */ + border: 1.5px solid #D8D8D8 !important; + /* 添加边框 */ +} + +.homework-grid .file-item .file-icon { + /* 高度自适应 */ + width: 64px; + height: 64px; + /* 限制最大宽度 */ + margin: 0 auto 1vh auto !important; + /* 居中显示,底部留间距 */ + display: flex !important; + align-items: center !important; + justify-content: center !important; +} + +.homework-grid .file-item .folder-icon { + width: 100% !important; + /* 图片占满图标容器 */ + height: auto !important; + /* 高度自适应保持比例 */ + max-width: 100% !important; + /* 最大宽度不超过容器 */ + min-height: 4vh !important; + /* 设置最小高度 */ + object-fit: contain !important; + /* 保持图片比例,完整显示 */ +} + +.homework-grid .file-item .file-name { + margin-top: 20px !important; + /* 文件名与图片间距 */ + text-align: center !important; + /* 文字居中 */ + padding: 0 0.5vw !important; + /* 左右内边距 */ + font-size: 14px !important; + /* 较小的字体 */ + color: #333 !important; + /* 文字颜色 */ +} + .download-header { - padding: 1.56vh 2.08vw; + padding: 0 0 1vh 0; /* 30px 40px转换 */ border-bottom: 1px solid #f0f0f0; } @@ -6815,10 +7281,13 @@ border-bottom: 1.5px solid #E6E6E6; /* 筛选和操作区域 */ .download-controls { + height: 32px; display: flex; justify-content: space-between; align-items: center; - padding: 1.56vh 2.08vw; + margin-top: 30px; + margin-bottom: 10px; + /* padding: 1.56vh 2.08vw; */ /* 30px 40px转换 */ /* 移除下方边框线条 */ } @@ -6850,7 +7319,7 @@ border-bottom: 1.5px solid #E6E6E6; .filter-select { width: 9.21vw; /* 100px转换为vw */ - height: 3.16vh; + height: 32px; /* 80px转换为vh,增加一倍高度 */ padding: 0.52vh 0.52vw; /* 10px转换,增加内边距 */ @@ -6872,7 +7341,7 @@ border-bottom: 1.5px solid #E6E6E6; .search-input { width: 10.42vw; /* 200px转换为vw */ - height: 3.16vh; + height: 32px; /* 80px转换为vh,增加一倍高度 */ padding: 0.26vh 2.08vw 0.26vh 0.52vw; /* 5px 40px 5px 10px转换,右侧留空给按钮 */ @@ -6888,13 +7357,13 @@ border-bottom: 1.5px solid #E6E6E6; .search-btn { position: absolute; - right: 0.26vw; + right: 20px; /* 5px转换为vw */ top: 50%; transform: translateY(-50%); - width: 1.56vw; + width: 16px; /* 30px转换为vw */ - height: 1.56vh; + height: 16px; /* 30px转换为vh */ border: none; background: none; @@ -6918,12 +7387,12 @@ border-bottom: 1.5px solid #E6E6E6; } .file-count { - width: 5.83vw; + /* width: 5.83vw; */ /* 112px转换为vw */ - height: 0.73vh; + /* height: 0.73vh; */ /* 14px转换为vh */ font-family: AppleSystemUIFont, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - font-size: 0.52vw; + font-size: 10px; /* 10px转换为vw */ color: #999999; line-height: 0.73vh; @@ -6934,14 +7403,14 @@ border-bottom: 1.5px solid #E6E6E6; } .new-folder-btn { - padding: 0.52vh 1.04vw; + width: 109px; + height: 31px; + background: #0288D1; /* 10px 20px转换 */ - background: #1890ff; color: white; border: none; - border-radius: 0.21vw; /* 4px转换为vw */ - font-size: 0.73vw; + font-size: 14px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; cursor: pointer; @@ -6955,9 +7424,9 @@ border-bottom: 1.5px solid #E6E6E6; /* 文件网格样式 */ .files-grid { display: grid; - grid-template-columns: repeat(auto-fit, 8.17vw); + grid-template-columns: repeat(auto-fit, 9.17vw); /* 自适应列数,每列157px */ - gap: 1vw; + gap: 20px; /* 30px转换为vw,增加间距 */ /* padding: 2.08vh 2.08vw 3.13vh 2.08vw; 上40px 左右40px 下60px,确保底部边框可见 */ padding: 20px 0; @@ -6971,7 +7440,8 @@ border-bottom: 1.5px solid #E6E6E6; display: flex; flex-direction: column; align-items: center; - width: 7.5vw; + width: 157px; + height: 201px; /* 157px转换为vw */ min-height: 10.47vh; /* 最小高度201px,允许自适应增长 */ @@ -7004,9 +7474,9 @@ border-bottom: 1.5px solid #E6E6E6; } .file-menu-btn { - width: 1.25vw; - /* 24px转换为vw */ - height: 1.25vh; + margin-top: 10px; + width: 13px; + height: 13px; /* 24px转换为vh */ border: none; background: none; @@ -7053,10 +7523,10 @@ border-bottom: 1.5px solid #E6E6E6; /* 4px转换为vw,减小图标和文字间距 */ padding: 0.52vh 0.73vw; /* 10px 14px转换 */ - font-size: 0.73vw; + font-size: 10px; /* 14px转换为vw */ font-family: Helvetica, 'Microsoft YaHei', Arial, sans-serif; - color: #333; + color: #000; cursor: pointer; transition: all 0.3s ease; white-space: nowrap; @@ -7064,9 +7534,9 @@ border-bottom: 1.5px solid #E6E6E6; } .menu-icon { - width: 1.25vw; + width: 12px; /* 24px转换为vw,增加一倍 */ - height: 1.25vh; + height: 12px; /* 24px转换为vh,增加一倍 */ object-fit: contain; flex-shrink: 0; @@ -7417,4 +7887,197 @@ border-bottom: 1.5px solid #E6E6E6; padding: 2vh 6vw; } } + +/* 包含@的消息高亮样式 */ +.mention-highlight { + color: #E02424 !important; +} + +/* 关注页面样式 */ +.follows-content { + width: 100%; +} + +.follows-list { + margin-top: 20px; + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.56vh 1.04vw; +} + +.follow-item { + display: flex; + flex-direction: row; + align-items: center; + padding: 2.08vh 0; + background: white; + transition: all 0.3s ease; + text-align: left; +} + +.follow-avatar { + margin-right: 1.04vw; + flex-shrink: 0; +} + +.avatar-image { + width: 75px; + height: 75px; + border-radius: 50%; + object-fit: cover; + border: 2px solid #f0f0f0; +} + +.follow-right-content { + flex: 1; + display: flex; + flex-direction: column; + gap: 0.78vh; +} + +.follow-info { + display: flex; + flex-direction: column; + gap: 0.26vh; +} + +.follow-name { + font-size: 14px; + font-weight: 500; + color: #333; + margin-bottom: 0.26vh; +} + +.follow-role { + font-size: 12px; + color: #707070; + margin-bottom: 0.26vh; +} + +.follow-description { + font-size: 0.73vw; + color: #999; + line-height: 1.4; + margin-bottom: 0.26vh; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.follow-visits { + font-size: 0.68vw; + color: #1890ff; + margin-bottom: 0.52vh; +} + +.follow-actions { + display: flex; + justify-content: flex-start; +} + +.follow-btn { + width: 80px; + height: 23px; + border: none; + font-size: 10px; + cursor: pointer; + transition: all 0.3s ease; + white-space: nowrap; + border-radius: 0; +} + +/* 取消关注状态 */ +.follow-btn.not-following { + background: #0288D1; + color: white; +} + +.follow-btn.not-following:hover { + background: #0277BD; +} + +/* 已关注状态 */ +.follow-btn.following { + background: #F5F8FB; + color: #999999; +} + +.follow-btn.following:hover { + background: #E8F4FD; + color: #666666; +} + +/* 响应式设计 */ +@media (max-width: 1200px) { + .follows-list { + grid-template-columns: repeat(2, 1fr); + } + + /* 作业网格响应式 */ + .homework-grid { + grid-template-columns: repeat(4, 1fr) !important; + gap: 1.5vw !important; + } +} + +@media (max-width: 768px) { + .follows-list { + grid-template-columns: 1fr; + padding: 0 3vw; + gap: 3vh 0; + } + + .follow-item { + padding: 4vh 3vw; + border-radius: 1vh; + } + + .avatar-image { + width: 15vw; + height: 15vw; + } + + .follow-name { + font-size: 4vw; + } + + .follow-role { + font-size: 3.5vw; + } + + .follow-description { + font-size: 3vw; + } + + .follow-visits { + font-size: 3vw; + } + + .follow-btn { + padding: 2vh 4vw; + font-size: 3.5vw; + border-radius: 1vh; + } + + /* 作业网格移动端响应式 */ + .homework-grid { + grid-template-columns: repeat(3, 1fr) !important; + gap: 2vw !important; + } + + .homework-grid .file-item { + min-height: 15vh !important; + padding: 2vh 1.5vw !important; + } + + .homework-grid .file-item .file-icon { + max-width: 20vw !important; + } + + .homework-grid .file-item .file-name { + font-size: 3vw !important; + padding: 0 1vw !important; + } +} \ No newline at end of file