
    	ni&&                     ~   d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  ede      Zej<                  d        ZejA                  dddg      d        Z!ejA                  d      e
d               Z"ejA                  d      e
d               Z#ejA                  d      e
d               Z$ejA                  ddg      e
d               Z%ejA                  d      e
d               Z&ejA                  d      e
d               Z'ejA                  d      e
d               Z(ejA                  d       e
d!               Z)ejA                  d"ddg      e
d#               Z*ejA                  d$      e
d%               Z+ejA                  d&      e
d'               Z,y())    )	Blueprintrender_templaterequestjsonifyflashredirecturl_for)
login_userlogin_requiredcurrent_user)db)User)Teacher)Student)Course)Booking)Feedback)Announcementadminc                      t         j                  dk(  ryt        j                  st	        t        d            S t        j                  s t        dd       t	        t        d            S y)uK   
    全局管理员权限检查
    排除登录页，防止被拦截
    admin.admin_loginN!   您没有权限访问此页面。errorz
main.index)r   endpointr   is_authenticatedr   r	   is_adminr        !/var/www/html/app/routes/admin.pyrequire_adminr       s]     .. (( 3455   17;-.. !r   z/adminGETPOST)methodsc                     t         j                  dk(  r^t         j                  j                  d      j	                         } t         j                  j                  d      }t        d       t        d|  d       t        j                  j                  t        j                  | k(  t        j                  | k(  z        j                         }|ry|j                  |      rh|j                  rDt        |       t        d|j                   d       t        d	d
       t!        t#        d            S t        d       t        dd       nt        d       t        dd       t!        t#        d            S t%        d      S )u   管理员登录页面r"   emailpasswordu   🎯 管理员登录尝试:u     邮箱/用户名: ''u   ✅ 管理员 u    登录成功！u   欢迎回来，管理员！successzadmin.dashboardu   ❌ 用户不是管理员r   r   u"   ❌ 用户不存在或密码错误u   用户名或密码错误！r   zadmin/login.html)r   methodformgetstripprintr   queryfilterr%   usernamefirstcheck_passwordr   r
   r   r   r	   r   )r%   r&   users      r   admin_loginr4   %   s.    ~~  )//1<<##J/+,%eWA./ zz  ZZ5 T]]e%;<

%' 	 D''1}}4 t}}o5EFG3Y?(9 :;;1297C67/9 3455-..r   /c                  R   t         j                  j                         t        j                  j                         t        j                  j                         t
        j                  j                         t        j                  j                  d      j                         t        j                  j                  d      j                         t        j                  j                         t        j                  j                  t        j                  j                  t        j                              j                  t        j                  dk(        j!                         xs dd} t        j                  j#                  t        j$                  j'                               j)                  d      j+                         }t        j                  j#                  t        j$                  j'                               j)                  d      j+                         }t-        d	| ||
      S )u   管理员仪表盘pendingstatusFis_verified	completedr   total_userstotal_teacherstotal_studentstotal_coursespending_bookingspending_teachersrecent_feedbackstotal_revenue
   zadmin/dashboard.htmlstatsrecent_bookingsrD   )r   r.   countr   r   r   r   	filter_byr   r   sessionfuncsumtotal_amountr/   r9   scalarorder_by
created_atdesclimitallr   rG   s      r   	dashboardrV   F   sm   
 zz'')!----/!----/++-#MM3393EKKM#MM333FLLN$NN002))"''++g6J6J*KLSSNNk)

&(E mm,,W-?-?-D-D-FGMMbQUUWO~~..x/B/B/G/G/IJPPQSTXXZ1$)8*:< <r   z/usersc                  p   t         j                  j                  ddt              } d}t         j                  j                  d      }t        j
                  }|r|j                  |      }|j                  t        j                  j                               j                  | |d      }t        d	|
      S )u   用户管理page   type   roler]   FrX   per_page	error_outzadmin/users.html)users)r   argsr+   intr   r.   rK   rQ   rR   rS   paginater   )rX   r`   r]   r.   rb   s        r   rb   rb   `   s     <<FAC0DH<<F#DJJET*NN4??//12;;H < E -U;;r   z	/teachersc                     t         j                  j                  ddt              } d}t         j                  j                  d      }t        j
                  j                  t              }|dk(  r#|j                  t        j                  dk(        }n'|dk(  r"|j                  t        j                  dk(        }|j                  t        j                  j                               j                  | |d	      }t        j
                  j                         t        j
                  j                         t        j
                  j                         t         j
                  j                         t"        j
                  j%                  d
      j                         t        j
                  j%                  d      j                         t&        j
                  j                         t(        j*                  j                  t(        j,                  j/                  t"        j0                              j                  t"        j2                  dk(        j5                         xs dd}t7        d||      S )u   老师管理rX   rY   rZ   r\   verifiedr7   FTr_   r8   r:   r<   r   r=   zadmin/teachers.html)teachersrH   )r   rc   r+   rd   r   r.   joinr   r/   r;   rQ   rR   rS   re   rJ   r   r   r   rK   r   r   rL   rM   rN   rO   r9   rP   r   )rX   r`   rg   r.   rh   rH   s         r   rh   rh   s   s    <<FAC0DH||
+HMMt$E9W00E9:	Z	W00D89~~g005578AAH B H zz'')!----/!----/++-#MM3393EKKM#MM333FLLN$NN002))"''++g6J6J*KLSSNNk)

&(E.  r   z /teacher/verify/<int:teacher_id>c                     t         j                  j                  |       }d|_        t        j
                  j                          t        d|j                   dd       t        t        d            S )u   审核通过老师Tu
   已通过 u    的认证申请r(   zadmin.teachers)r   r.   
get_or_404r;   r   rL   commitr   	full_namer   r	   )
teacher_idteachers     r   verify_teacherrp      s\     mm&&z2GGJJ	Jw(())9
:IFG,-..r   z/coursesc                     t         j                  j                  ddt              } d}t        j
                  j                  t        j                  j                               j                  | |d      }t        d|      S )	u   课程管理rX   rY   rZ   r\   Fr_   zadmin/courses.html)courses)r   rc   r+   rd   r   r.   rQ   rR   rS   re   r   )rX   r`   rr   s      r   rr   rr      so     <<FAC0DHll##F$5$5$:$:$<=FFH G G /AAr   z	/bookingsc                  p   t         j                  j                  ddt              } d}t         j                  j                  d      }t        j
                  }|r|j                  |      }|j                  t        j                  j                               j                  | |d      }t        d	|
      S )u   预约管理rX   rY   rZ   r\   r9   r8   Fr_   zadmin/bookings.html)bookings)r   rc   r+   rd   r   r.   rK   rQ   booking_timerS   re   r   )rX   r`   r9   r.   rt   s        r   rt   rt      s     <<FAC0DH\\h'FMMEv.~~g22779:CCH D H 08DDr   z	/feedbackc                     t         j                  j                  ddt              } d}t        j
                  j                  t        j                  j                               j                  | |d      }t        d|      S )	u   反馈管理rX   rY   rZ   r\   Fr_   zadmin/feedback.html)	feedbacks)r   rc   r+   rd   r   r.   rQ   rR   rS   re   r   )rX   r`   rw   s      r   feedbackrx      so     <<FAC0DH''(;(;(@(@(BCLLH M I 0IFFr   z/announcementsc                      t         j                  j                  t         j                  j	                         t         j
                  j	                               j                         } t        d|       S )u   公告管理zadmin/announcements.htmlannouncements)r   r.   rQ   	is_pinnedrS   
publish_atrU   r   rz   s    r   r{   r{      sZ     !&&//##%$$& 
ce 
 5]SSr   z/announcement/createc                     t         j                  dk(  r:t         j                  j                  d      } t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }t	        t         j                  j                  d            }t	        t         j                  j                  d            }t        | |||||      }t        j                  j                  |       t        j                  j                          t        d	d
       t        t        d            S t        d      S )u   创建公告r"   titlecontentr[   target_audienceis_publishedr|   )r   r   announcement_typer   r   r|   u   公告创建成功！r(   zadmin.announcementszadmin/create_announcement.html)r   r)   r*   r+   boolr   r   rL   addrl   r   r   r	   r   )r   r   r   r   r   r|   announcements          r   create_announcementr      s     ~~  ),,""9-#LL,,V4!,,**+<=GLL,,^<=))+67	#/+%
 	

|$


%y1 5677;<<r   z	/databasec                      t        d      S )u   数据库管理zadmin/database.html)r   r   r   r   database_managementr     s     011r   z
/api/statsc                  ~   t         j                  j                         t         j                  j                  d      j                         t         j                  j                  d      j                         t         j                  j	                  t
        j                  j                  t         j                        t
        j                  j                         k(        j                         dt        j                  j                         t        j                  j                  d      j                         t        j                  j                  d      j                         dt
        j                  j                  t
        j                  j                  t        j                              j	                  t        j                  dk(        j                         xs d	t
        j                  j                  t
        j                  j                  t        j                              j	                  t        j                  dk(  t
        j                  j!                  t        j                        t
        j                  j!                  t
        j                  j#                               k(  t
        j                  j%                  t        j                        t
        j                  j%                  t
        j                  j#                               k(        j                         xs d	d
d} t'        |       S )u   统计数据APIstudentr^   ro   )totalstudentsrh   todayr<   r8   r7   )r   r<   r7   r   )r   monthly)rb   rt   revenue)r   r.   rJ   rK   r/   r   rM   daterR   current_dater   rL   rN   rO   r9   rP   monthnowyearr   )rH   s    r   	api_statsr     s    ZZ%%'

,,),<BBD

,,),<BBDZZ&&T__-1E1E1GGeg
 ]]((* 000DJJL}}..i.@FFH
 ZZ%%bggkk'2F2F&GHOO+-fhzz''G4H4H(IJQQ+-g001RWW]]277;;=5QQW//0BGGLL4OO fh	 	
E4 5>r   N)-flaskr   r   r   r   r   r   r	   flask_loginr
   r   r   app.extensionsr   app.models.userr   app.models.teacherr   app.models.studentr   app.models.courser   app.models.bookingr   app.models.feedbackr   app.models.announcementr   __name__admin_bpbefore_requestr    router4   rV   rb   rh   rp   rr   rt   rx   r{   r   r   r   r   r   r   <module>r      s.   Y X X @ @    & & $ & ( 0Wh' 
/ /& 
5&/2/ 3/@ 
<  <0 
<  <" 
0  0p 
2VHE/  F/ 

	B  	B 
E  E" 
	G  	G 
 !T  "T 
&@=  A=8 
2  2
 
  r   