From 3d5d34b660815ae5ce599bd0cfcf42686b9b99a7 Mon Sep 17 00:00:00 2001 From: QDKF Date: Sat, 6 Sep 2025 01:01:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E7=AE=A1=E7=90=86=E5=92=8C=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E7=B3=BB=E7=BB=9F=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E7=AE=A1=E7=90=86=E3=80=81=E8=AF=84=E8=AE=BA?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E3=80=81=E6=B7=BB=E5=8A=A0=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2;=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/teacher/@-ash.png | Bin 0 -> 1193 bytes public/images/teacher/@.png | Bin 0 -> 1301 bytes public/images/teacher/Image-ash.png | Bin 0 -> 906 bytes public/images/teacher/Image.png | Bin 0 -> 858 bytes public/images/teacher/delete2.png | Bin 0 -> 442 bytes public/images/teacher/expression-ash.png | Bin 0 -> 1101 bytes public/images/teacher/expression.png | Bin 0 -> 1172 bytes public/images/teacher/like.png | Bin 0 -> 599 bytes public/images/teacher/reply.png | Bin 0 -> 780 bytes .../teacher/{路径(1).png => 箭头-蓝.png} | Bin src/router/index.ts | 23 + src/views/Resources.vue | 6 +- src/views/UserAgreement.vue | 305 +++++++ src/views/teacher/AdminDashboard.vue | 32 + src/views/teacher/course/AddDiscussion.vue | 406 ++++++++ src/views/teacher/course/CommentView.vue | 863 ++++++++++++++++++ src/views/teacher/course/CourseEditor.vue | 4 +- .../teacher/course/DiscussionManagement.vue | 578 +++++++++++- .../teacher/statistics/tab/BasicData.vue | 152 ++- .../statistics/tab/LearningMonitor.vue | 601 +++++++++++- .../statistics/tab/LearningStatistics.vue | 228 ++--- 21 files changed, 3043 insertions(+), 155 deletions(-) create mode 100644 public/images/teacher/@-ash.png create mode 100644 public/images/teacher/@.png create mode 100644 public/images/teacher/Image-ash.png create mode 100644 public/images/teacher/Image.png create mode 100644 public/images/teacher/delete2.png create mode 100644 public/images/teacher/expression-ash.png create mode 100644 public/images/teacher/expression.png create mode 100644 public/images/teacher/like.png create mode 100644 public/images/teacher/reply.png rename public/images/teacher/{路径(1).png => 箭头-蓝.png} (100%) create mode 100644 src/views/UserAgreement.vue create mode 100644 src/views/teacher/course/AddDiscussion.vue create mode 100644 src/views/teacher/course/CommentView.vue diff --git a/public/images/teacher/@-ash.png b/public/images/teacher/@-ash.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed13142740394e242846e2d185a61292e4e2d43 GIT binary patch literal 1193 zcmV;a1XlZrP)Px#1am@3R0s$N2z&@+hyVZtQ%OWYRA_kx!81 z1eJbF5cx=T0@)|9^F=T}mQN7*1XfN^-bc1rp4)?0+a|XuOrH1Wi=}3Z#W@qO3jip~*_L^2jldW0{}f{eo91vs&!Ut%Whjw;$)^A@#KDx5!c_*ss z&JUs}8oRnANnWCgTI#x&odrQejTe=TBE-y3T{()PDNv0m7d0Xp*TvX#j`ZY?Tc%C; z0L{mcBezbB%)IV4mzS5rdgEJN^y3}Zqz(Br7UYDiy9yCKb9J{JK&R8`xpGkyQ&;vp z?*#ye$ft&U+Bc^n64+vTyN-xn+W%>70_oWqFT1+Bx~m(06B-GsPXuus_W*#1+(I#^ zx2+L}s?LC_3)(yd5gE4O=^7{2BuOd{MKs>u-ybAN@(REQTRjnxGn+*F>xWj>=p!?a zPzj%fVfeg>kk-6h&BLwz*lm+)kpdXvMy$i6D2f39?Ck7xfhyU4E05NkLRprFs3r$z za}b8%A%NFJG*;CqfCCZP3&U_?lk0?t#v(EZ!|-*d)9H0O9mC8Q^;vQgwBoj{&2i3P zQWVADzm5lc?GdV(@(VBcEogoDkR-`p07jNr2H<$LTAjUl^X99sNwwANTez=Iz=4hI zM))oZJiA&wsU=UK66bzh;H%HgKjs3j4!fjyK}0=O4e+IiR8>HP(6aW}JdWcan#srMY zauH}s05H#&7a#;sqyibDEN8y&r(0!u4~#JZJg>*#k=+}f$?AIVX4Cl5;}5v8ArA|R zRLbi;-}lpXGBw6@`OzOXlhb|?P3$g6#njOnNlcWDN-~Bl~7wLvq94zB!*yI`a@h2+L}}$#wBhkrb6cpG}=mF<`q;h z*5Dt1fQnXJq5*4azz7iwCe9nc6dQ}Aikij-q@8ZlclqvpGo21JgqQQ3^PO|gd1v0; z#=!L+t7{gl_#?1l?;&cRB+e5FVvy)XG=741m(FQAk~`I_rf#sqo{4DeRmhPGkn#&i z@hpqWiJOQ%;!nZ@$Q863bWZ-f9yWZDTrf5v*EXg)sdy zh}(z~q6i{y4uo+(^Y%hw0UN%9miQsOd1fACS`4kz%CaAV6i1kNGbHvQY1|3Z_Y^|@ z1E??SPp3`TQ0Zlayd5z8>tQ%v#yeS8iP5pI(R6M)ePkM_UoP<}gZYr69%27FG$+%5`QNmAh+G)STEkrs`4R)H&oNmnHBT!m-b%WeND?n& z+*ru@4w8c}ZDdiU=0YCQRw)BtDMLJ9U@WDU5SNk2;oOrcNsf0Z!<;(|IP$)f)2?k=skxPMr|ZfNgaewrQ0}JW9HdQ1XUSS$OR<4;tp`n4B~{D$tjg zt{X7;nd)=`j`NQin}mB(ydP%Z+Z4~3{A4j5)>DtmZ>Tfkac$t#b*m(`kuIY zN2w`dVxWz4x}Qb!`O)o&o?b+r5%nWB-!=7aQe*1+P)*eh8;OUYuKrZD+dw%(V^8x- zI!McSi*@p9ewh5m#fq&)Psxv*!YHJnc9O2mG-xVMV8+Zfj2<9()a934)J|CT3uyVJ zn6YccvP(E#r}LyZ%!CT!BVe?eR!gRVa_fpmVEVbx&VzK-39jIjwZbue<4Xn*vHw6c z7DLoNM+|bTi`dQF6~t%y8aMs5Fw5P;%V2f`2DF&LgBbQLg~Pu-U^`!Ol<^A?f|r{p zAy;+3Ldp*TQ43G*0+{}_`Wi>}a|HkZ|Nml;Z#n<~00v1!K~w_(;~lJ;bUr*J00000 LNkvXXu0mjfF4JTC literal 0 HcmV?d00001 diff --git a/public/images/teacher/Image-ash.png b/public/images/teacher/Image-ash.png new file mode 100644 index 0000000000000000000000000000000000000000..a6dc13ccc6d8c2733d87399650d3ce362978b11a GIT binary patch literal 906 zcmV;519kj~P)Px#1am@3R0s$N2z&@+hyVZsG)Y83RA_bS41s{_Pvus3=P+AG~QH zu6Z%E?d;k7St%6~QICj1OC1@2!F)cy=ytoAO`zI_lu{ux-`I4%L<7LrgM)(*K+7gj zZ9|^t^+W^!G9vmeB5B=NL==ihC?cU!DvY9NR5w;_Ln0EEABUYzr&~7;04SxdnRyHV z%=`(!sBSD5i-Ogh2Y@JwQU^K!SS|{y#BqEEpa&o`#7`Y5H^WfJa}RYeoP*Zuwdu~Mq-vM;A2v`RTD-%#zj9!Q8NEAv=`nXfJ{FOSP4 zZOuP1R2n%2aJJN(8e`6*C>oZ(X)|*lKw~LMTjPAnElsawGlMcO4XcJIiiY#~`~!f2 z%l@5>(BGz)G3MxR3AS7ix=N{ws`RnNdW485h~v0l3aZSc#+WZBCnq1*sTQ`X^bwKv zO4Gm?bMYLJ{eIusDXmSlJzCw^5z$aYGG;!G+dD0d|JYR}DQfTF-)r zMmBpPz~UW>qG)7{X%Uf?fRYrz;P&?R(JJFPyqwEzJ1>T|9Y(n++r_JtiY4tC3*_O} z!SljR39`oXngAd`!Xk1F01WQ!;wWjY0|xg2fIuSxfJr_ZgAhQF8kjDMBJq7c-Kf$h z&{_xZypX}Y@@_aW_jj#7m&SXqRx9P*L6Dl_uI2lFx=5y4>jv+=J{3q<-s?_e1IT=o7KiU3lmGw#07*qoM6N<$f_s*fs{jB1 literal 0 HcmV?d00001 diff --git a/public/images/teacher/Image.png b/public/images/teacher/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..5283732874dbf09e658ad01d97f8fee3e95b0507 GIT binary patch literal 858 zcmV-g1Eu_lP)r9{+VB zNT{h1=ti>U_0_=Z?}4k|xHzrA6zO2#6p>40E~-)o71hYeEnZwip;JWwLfHkUMWlwg z21%PLYcZq5G);YB+%k%ckaNTR>nlHo%OnF_I6DZ1CK=c6^)}e-|DdH77#>60?KFplJVfh57`4F5Iy9Q{5 zSravy?=5gr0?V7ne}r$) z6g>VPaQj`5bLAL;%^(s9T$8Kue%oD+sU<=zdX+j1i1Y9UdT`}U4i=i%FQ1wFP_c=j z^(@$mcia2X=G#bLlcfZ$FV`Vw<`E!{0tg~1D$r!DBgtVv%m6r!(66UxAIj&dt62CJ zV|+c;HYlQu_B2WM!zg^THHi~k8ruMqX@CO`GBeFja{$fe7qmf=K19?~+Eakoi?A`k z;0wscgh+7$c={S|@17<(y?4ieV2Rp8!z+ zz(90yTnn`>4fd}jsw7FX9suG55L+1>Ml`Yy4J99GCrV?{XUxs>Q-}w#WHoQt$(XGx zAyhalZrxczfF}?+isj+9Grx*A>?W`B8QMuDzJpmqB^*0`CLOgr z=n_#rXlHp&rPx#1am@3R0s$N2z&@+hyVZqWJyFpR7i>Kl`(F@KoCX$j3|&Rj^NyY+yG91xdCZd zRuqm;fH;9kfh^NNZbEKAP7sdZ2GPJwimVYL;Dtn~!c?oj^XKjCO0xt{q-oj+f?y7y z1)$;NHGmgm%*5wsUqTQBF@Wf(H~@qI(&=>C^!X{z^N5H#ml9O9xrp{lE&0Ewsst^lk>Px#1am@3R0s$N2z&@+hyVZs_en%SRA_JbArhYY)*hV0lGoUve6=-?kwB_53xNUi8ADE+Ujme@43JJ z{-^~jP-)r`LYxRh3uyATkrN)dyR(_{mC9)+FzzCS3-p*BHwWxfFjAtrgApFY=w!Z7rtl;0>q2OO7OsagbC zLRT!!Z0h^|?`6nbTwIK;875hled_o7$xEM6i`#Y_CtxWi)>pE?ohcV{Gfwe#tL6^W0&;j~S2W@x+QpQ z3%*MrmQpsg)=lf?JA7ZNzpWCyfHk4O7}I&qd?Cc>_V%`4rl5O@R}oaedc3v};>0Gg zo*hb92IR{u%SLqwDe$U-c7gxxms5$Y65r!dN`V#bi8Pqyse|LRcSWc&9H#|fU@D75 zP$Gl(xJpVXPa=l^0x=N)vvhHTz{3!0be}w*x~?1Vl<5zkl=5(#wnPT@Yy>-YOD(c&Y(Un+bW}-stLJ*=0X$MKb2~Fnq`_6rD=Dqw3Z7Chjx%b?2zVm(WzW46T zM7YDB8xx$Y4WZiDgKGT@{StjHcE!xGCd>_7d~d-@<8cz7L*y<2eu{ig(}(CAVpq%@ zYr<6P=b#=I*Rs_G_fO|gt$hmTe`4bpy-C5Z;oMHN{V@LT+i0%X`{%6&5Q8!6QLi}I zxZG9>RvLpCxbFwRy$xUi9u?r)LnswqLviF3CJLAF!6WnLipzzQRujgs>`|{c#6^;{ zWd(Ir&YvJ)ls*d=J%w_90;R40aoyX55mr6GEWxAP?FopJi^Q^m1A`y4FiM}rqJIL# zM=vtIIa7~%6Vbrg;pht5!**}6(&Em>vA3YBT{nsbLBY`UTs3FK5Rigb$+DdsuaVY7=) z+ngR;ZoMr%25eq!NNNc-jq&(CEWK&Of_Tu9OYPrn&J68#Sh{!)tL&K65^SpK@msty zjYRMPOD^R8wmCg4G-u%OEpO?ObUG8e_7TGfn<;S75k8e`$ffXtT|?b8y%a)0svr=+0Qu zx8vhst1x`>M?b2KW2n^M2#Hn3YU54A2)n%O@N7s0jUedavjU#S>cx8lARg!E?%}a{ zi7&+$m}{#F$Jk7~_i7gkiB`;&9l_wU4A>%Ip9n6XULx3t!@{+z=dIB*6i5 z#mcGHMFQ#-2lVaakHWYEpev|#tN9M6Y5FGQ+>a}E`tFviJd?*s@VgFuV` literal 0 HcmV?d00001 diff --git a/public/images/teacher/like.png b/public/images/teacher/like.png new file mode 100644 index 0000000000000000000000000000000000000000..232ef6a40d362bf9b5ac2b32b5697ac905b6b158 GIT binary patch literal 599 zcmV-d0;v6oP)Px#1am@3R0s$N2z&@+hyVZr0ZBwbR7i=nmcezKKoEw%9dzIpN+1y>o6`*Y(nSUk-U5Kn6L94V3430?YtZ^-5K5fD%Z7 z{M|rt94GC$_kQcWzYj3X>@p-W9(2gO_gi2W5}AD%2*Awtr}z&6rD5E4Z#w4^01+7k z91J?3AO)zZsvH8EyqSr}B7h!xQ>~(8wOXbBd%oRk?ii#fiUsfkD6=g4+?)Fa4B1De zs$Lyb6gt7e%&q}cb=mh()o&v5H~^MLQM7Skcjso7hKVE`0DEAWW!c?;%>S{XC}zMT zP)^Kjb0{n4-2JKj?0}^JW>!iIQPrEOs=m;upswqOkr1477h&8=8yMKm=kuMJ?Vzcq zF%W>z?E#*ZCCCTL)pvdWa}3KG>Tr8 zx2m?+XDjL#0(3qTB61Ph{YyJK*8bnHSA_sDQPn3A0k{>B+m3T8BEQcB0idc+?YV>> ljXQd;aHQ>l?;$n-e*s_D>^_GNf=mDa002ovPDHLkV1g}T2af;% literal 0 HcmV?d00001 diff --git a/public/images/teacher/reply.png b/public/images/teacher/reply.png new file mode 100644 index 0000000000000000000000000000000000000000..0e19319ebe90a4e84556ba4264c54642969679c6 GIT binary patch literal 780 zcmV+n1M~ceP)Px#1am@3R0s$N2z&@+hyVZrwn;=mR7i=vmaTH@Fc5{mdO9|#kVZ~sI`~9B(h~$5g0bG9P zFbo6MTDq>odr#l@c<)Kmlq}1TQj+I6Qc8-V_?GbEvm^E1qqU}O+aE`t=Q&kXeMx+h zP-~6WdSMHhWLbs~A_nE0!x+Ojjtk=Lb{qXZB^-tUrBuvH2oa+`wRjF=3|ecfwE(1P z%G1*mQp(Q>>$;9)Wm*1+=nx+tA1I|5$MGa-BveY#Gz|b%RZ&&duZZUG-t+eM7Mtt& z`8fujz;qnvB7>lF79tJCme=>BxHAUb8~jG!+o7|B;mqdUtb?NH%-HCx5GIXZQgrcUtf=e z;gm115Q@IRIYfYZ#vB^I3g-I^M-f5b0 zDW$|YN7r?%*XxDz;eVJ!{Ndr@$bQNfSkyGnbCR+w0kGB{WqA(FMJ3BJlAhKM8e}5lqcSLB60j5mbwnb|l zqf|=8dnbfoE*8cZoO6rzpU=ZXT0000< KMNUMnLSTYm9cPpP literal 0 HcmV?d00001 diff --git a/public/images/teacher/路径(1).png b/public/images/teacher/箭头-蓝.png similarity index 100% rename from public/images/teacher/路径(1).png rename to public/images/teacher/箭头-蓝.png diff --git a/src/router/index.ts b/src/router/index.ts index 6d2dc9d..ba3ca80 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -53,9 +53,12 @@ import FileViewer from '@/views/teacher/course/FileViewer.vue' import FolderBrowser from '@/views/teacher/course/FolderBrowser.vue' import CertificateManagement from '@/views/teacher/certificate/CertificateManagement.vue' import DiscussionManagement from '@/views/teacher/course/DiscussionManagement.vue' +import CommentView from '@/views/teacher/course/CommentView.vue' +import AddDiscussion from '@/views/teacher/course/AddDiscussion.vue' import StatisticsManagement from '@/views/teacher/statistics/StatisticsManagement.vue' import NotificationManagement from '@/views/teacher/course/NotificationManagement.vue' import GeneralManagement from '@/views/teacher/course/GeneralManagement.vue' +import UserAgreement from '@/views/UserAgreement.vue' // 作业子组件 import HomeworkLibrary from '@/views/teacher/course/HomeworkLibrary.vue' @@ -258,6 +261,18 @@ const routes: RouteRecordRaw[] = [ component: DiscussionManagement, meta: { title: '讨论管理' } }, + { + path: 'discussion/add', + name: 'AddDiscussion', + component: AddDiscussion, + meta: { title: '添加讨论' } + }, + { + path: 'comment/:id', + name: 'CommentView', + component: CommentView, + meta: { title: '评论详情' } + }, { path: 'statistics', name: 'StatisticsManagement', @@ -449,6 +464,14 @@ const routes: RouteRecordRaw[] = [ meta: { title: '帮助中心' } }, + // 用户协议 + { + path: '/agreement', + name: 'UserAgreement', + component: UserAgreement, + meta: { title: '用户协议' } + }, + // 学习中心(积分中心) { path: '/learning-center', diff --git a/src/views/Resources.vue b/src/views/Resources.vue index fff4931..ac2efb4 100644 --- a/src/views/Resources.vue +++ b/src/views/Resources.vue @@ -119,10 +119,7 @@ + + diff --git a/src/views/teacher/AdminDashboard.vue b/src/views/teacher/AdminDashboard.vue index 66626e6..a59db7a 100644 --- a/src/views/teacher/AdminDashboard.vue +++ b/src/views/teacher/AdminDashboard.vue @@ -434,6 +434,22 @@ const breadcrumbPathItems = computed(() => { path: currentPath } ); + } else if (currentPath.includes('discussion/add')) { + // 添加讨论页面:课程管理 > 讨论 > 添加讨论 + breadcrumbs.push( + { + title: '课程管理', + path: '/teacher/course-management' + }, + { + title: '讨论', + path: `/teacher/course-editor/${courseId}/discussion` + }, + { + title: '添加讨论', + path: currentPath + } + ); } else if (currentPath.includes('discussion')) { breadcrumbs.push( { @@ -445,6 +461,22 @@ const breadcrumbPathItems = computed(() => { path: `/teacher/course-editor/${courseId}` } ); + } else if (currentPath.includes('comment/')) { + // 查看评论页面:课程管理 > 讨论 > 查看讨论 + breadcrumbs.push( + { + title: '课程管理', + path: '/teacher/course-management' + }, + { + title: '讨论', + path: `/teacher/course-editor/${courseId}/discussion` + }, + { + title: '查看讨论', + path: currentPath + } + ); } else if (currentPath.includes('statistics')) { breadcrumbs.push( { diff --git a/src/views/teacher/course/AddDiscussion.vue b/src/views/teacher/course/AddDiscussion.vue new file mode 100644 index 0000000..cac3f04 --- /dev/null +++ b/src/views/teacher/course/AddDiscussion.vue @@ -0,0 +1,406 @@ + + + + + diff --git a/src/views/teacher/course/CommentView.vue b/src/views/teacher/course/CommentView.vue new file mode 100644 index 0000000..73532d0 --- /dev/null +++ b/src/views/teacher/course/CommentView.vue @@ -0,0 +1,863 @@ + + + + + \ No newline at end of file diff --git a/src/views/teacher/course/CourseEditor.vue b/src/views/teacher/course/CourseEditor.vue index 4a3176c..c2d8006 100644 --- a/src/views/teacher/course/CourseEditor.vue +++ b/src/views/teacher/course/CourseEditor.vue @@ -151,7 +151,9 @@ const hideSidebar = computed(() => { 'template-import', 'review/', 'certificate/detail/', - 'certificate/add' + 'certificate/add', + 'comment/', // 查看讨论页面 + 'discussion/add' ] // 检查当前路径是否包含需要隐藏侧边栏的路径 diff --git a/src/views/teacher/course/DiscussionManagement.vue b/src/views/teacher/course/DiscussionManagement.vue index 6287afc..b7eb97a 100644 --- a/src/views/teacher/course/DiscussionManagement.vue +++ b/src/views/teacher/course/DiscussionManagement.vue @@ -1,36 +1,586 @@ diff --git a/src/views/teacher/statistics/tab/BasicData.vue b/src/views/teacher/statistics/tab/BasicData.vue index c6bd68c..9eecef1 100644 --- a/src/views/teacher/statistics/tab/BasicData.vue +++ b/src/views/teacher/statistics/tab/BasicData.vue @@ -60,7 +60,8 @@

教学建设

-
+
课件/视频
@@ -71,7 +72,8 @@
-
+
资料/文档
@@ -82,7 +84,8 @@
-
+
题库总数
@@ -93,7 +96,8 @@
-
+
试卷总数
@@ -118,7 +122,7 @@ console.log('BasicData component loaded') /* 顶部统计卡片区域 */ .stats-cards { - margin-bottom: 0; + margin-bottom: 0; } .stats-row { @@ -205,6 +209,8 @@ console.log('BasicData component loaded') overflow: hidden; min-height: 95px; padding: 40px; + max-width: 100%; + box-sizing: border-box; } .construction-card:hover { @@ -227,13 +233,17 @@ console.log('BasicData component loaded') .card-icon img { width: 20px; height: 20px; - filter: brightness(0) invert(1); /* 使图标变为白色 */ + filter: brightness(0) invert(1); + /* 使图标变为白色 */ } .card-content { text-align: left; position: relative; z-index: 2; + flex: 1; + min-width: 0; + overflow: hidden; } .card-number { @@ -242,12 +252,19 @@ console.log('BasicData component loaded') color: #646464; margin-bottom: 10px; line-height: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .card-label { font-size: 14px; color: #646464; line-height: 1.2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; } @@ -270,6 +287,73 @@ console.log('BasicData component loaded') } /* 响应式设计 */ +@media (min-width: 1400px) { + .construction-grid { + max-width: 1420px; + margin: 0 auto; + } + + .construction-card { + padding: 30px; + gap: 30px; + } + + .card-number { + font-size: 20px; + } + + .card-label { + font-size: 13px; + } +} + +@media (max-width: 1200px) { + .construction-card { + padding: 20px; + gap: 16px; + } + + .card-number { + font-size: 18px; + } + + .card-label { + font-size: 12px; + } +} + +@media (max-width: 1000px) { + .construction-grid { + grid-template-columns: repeat(2, 1fr); + gap: 20px; + } + + .construction-card { + padding: 16px; + gap: 12px; + min-height: 80px; + } + + .card-icon { + width: 40px; + height: 40px; + } + + .card-icon img { + width: 18px; + height: 18px; + } + + .card-number { + font-size: 16px; + margin-bottom: 6px; + } + + .card-label { + font-size: 11px; + } +} + @media (max-width: 768px) { .stats-row { flex-wrap: wrap; @@ -284,6 +368,32 @@ console.log('BasicData component loaded') .construction-grid { grid-template-columns: repeat(2, 1fr); max-width: 100%; + gap: 16px; + } + + .construction-card { + padding: 12px; + gap: 10px; + min-height: 70px; + } + + .card-icon { + width: 36px; + height: 36px; + } + + .card-icon img { + width: 16px; + height: 16px; + } + + .card-number { + font-size: 14px; + margin-bottom: 4px; + } + + .card-label { + font-size: 10px; } } @@ -291,5 +401,35 @@ console.log('BasicData component loaded') .stat-card { flex: 1 1 100%; } + + .construction-grid { + grid-template-columns: 1fr; + gap: 12px; + } + + .construction-card { + padding: 10px; + gap: 8px; + min-height: 60px; + } + + .card-icon { + width: 32px; + height: 32px; + } + + .card-icon img { + width: 14px; + height: 14px; + } + + .card-number { + font-size: 12px; + margin-bottom: 3px; + } + + .card-label { + font-size: 9px; + } } diff --git a/src/views/teacher/statistics/tab/LearningMonitor.vue b/src/views/teacher/statistics/tab/LearningMonitor.vue index cd0dfc2..b5b2bc7 100644 --- a/src/views/teacher/statistics/tab/LearningMonitor.vue +++ b/src/views/teacher/statistics/tab/LearningMonitor.vue @@ -1,34 +1,603 @@ \ No newline at end of file + +.option-item { + display: flex; + align-items: flex-start; + gap: 12px; +} + +/* 自定义多选:隐藏原生复选框,使用蓝色圆点 */ +.custom-checkbox { + display: none; +} + +.option-label { + display: flex; + align-items: flex-start; + gap: 12px; + cursor: pointer; +} + +.dot { + width: 12px; + height: 12px; + border-radius: 50%; + border: 2px solid #ccc; + margin-top: 6px; + flex-shrink: 0; + position: relative; +} + +.dot-icon { + position: absolute; + top: 50%; + left: 50%; + width: 5px; + height: 5px; + border-radius: 50%; + background: #ccc; + transform: translate(-50%, -50%); +} + +.dot.active { + border: 2px solid #0288D1; +} + +.dot.active .dot-icon { + background: #0288D1; +} + +.option-text { + font-size: 14px; + color: #333; + line-height: 1.5; +} + +.modal-footer { + display: flex; + justify-content: flex-end; + gap: 12px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .header-section { + flex-direction: column; + align-items: flex-start; + gap: 16px; + } + + .header-right { + width: 100%; + } + + .table-section { + padding: 16px; + } + + .header-right { + flex-wrap: wrap; + gap: 12px; + } + + .tab-item { + padding: 8px 16px; + font-size: 13px; + } + + :deep(.monitor-data-table .n-data-table-td), + :deep(.monitor-data-table .n-data-table-th) { + padding: 8px 4px; + font-size: 12px; + } +} + diff --git a/src/views/teacher/statistics/tab/LearningStatistics.vue b/src/views/teacher/statistics/tab/LearningStatistics.vue index 5f27f29..7888710 100644 --- a/src/views/teacher/statistics/tab/LearningStatistics.vue +++ b/src/views/teacher/statistics/tab/LearningStatistics.vue @@ -29,16 +29,16 @@
章节学习总人次
- 0 - -
+ 0 + +
章节平均学习次数
- 0 - -
+ 0 + +
@@ -66,134 +66,134 @@
- + - -
- -
-

- 考试 - (共5场) -

-
- -
-
-
参与人数
-
- 70 - -
-
-
-
平均成绩
-
- 60 - -
+ +
+ +
+

+ 考试 + (共5场) +

+
+ +
+
+
参与人数
+
+ 70 +
- -
-

成绩占比

-
- +
+
平均成绩
+
+ 60 +
-
- - -
-

- 练习 - (共5场) -

-
- -
-
-
参与人数
-
- 70 - -
-
-
-
平均成绩
-
- 60 - -
-
-
- -
-

成绩占比

-
- -
+ +
+

成绩占比

+
+
- -
- -
-

- 证书 - (共1个) -

-
-
-

证书获取率

-
- + +
+

+ 练习 + (共5场) +

+
+ +
+
+
参与人数
+
+ 70 + +
+
+
+
平均成绩
+
+ 60 +
-
- - -
-

- 讨论 - (共5个) -

-
- -
-
-
讨论话题
-
- 7 - -
-
-
-
回复数量
-
- 60 - -
-
-
- -
-

讨论活跃度

-
- -
+ +
+

成绩占比

+
+
- + + +
+ +
+

+ 证书 + (共1个) +

+
+
+

证书获取率

+
+ +
+
+
+
+ + +
+

+ 讨论 + (共5个) +

+
+ +
+
+
讨论话题
+
+ 7 + +
+
+
+
回复数量
+
+ 60 + +
+
+
+ +
+

讨论活跃度

+
+ +
+
+
+
+
+
+