
    Sh"                     ~   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/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_bookingsrB   )r   r.   countr   r   r   r   	filter_byr   r   sessionfuncsumtotal_amountr/   r9   scalarorder_by
created_atdesclimitallr   rE   s      r   	dashboardrT   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rV   per_page	error_outzadmin/users.html)users)r   argsr+   intr   r.   rI   rO   rP   rQ   paginater   )rV   r^   r[   r.   r`   s        r   r`   r`   `   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        d
|      S )u   老师管理rV   rW   rX   rZ   verifiedr7   FTr]   zadmin/teachers.html)teachers)r   ra   r+   rb   r   r.   joinr   r/   r:   rO   rP   rQ   rc   r   )rV   r^   re   r.   rf   s        r   rf   rf   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 08DDr   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   rJ   commitr   	full_namer   r	   )
teacher_idteachers     r   verify_teacherrn      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   课程管理rV   rW   rX   rZ   Fr]   zadmin/courses.html)courses)r   ra   r+   rb   r   r.   rO   rP   rQ   rc   r   )rV   r^   rp   s      r   rp   rp      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   预约管理rV   rW   rX   rZ   r9   r8   Fr]   zadmin/bookings.html)bookings)r   ra   r+   rb   r   r.   rI   rO   booking_timerQ   rc   r   )rV   r^   r9   r.   rr   s        r   rr   rr      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   反馈管理rV   rW   rX   rZ   Fr]   zadmin/feedback.html)	feedbacks)r   ra   r+   rb   r   r.   rO   rP   rQ   rc   r   )rV   r^   ru   s      r   feedbackrv      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.   rO   	is_pinnedrQ   
publish_atrS   r   rx   s    r   ry   ry      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contentrY   target_audienceis_publishedrz   )r}   r~   announcement_typer   r   rz   u   公告创建成功！r(   zadmin.announcementszadmin/create_announcement.html)r   r)   r*   r+   boolr   r   rJ   addrj   r   r   r	   r   )r}   r~   r   r   r   rz   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\   rm   )totalstudentsrf   todayr;   r8   r7   )r   r;   r7   r   )r   monthly)r`   rr   revenue)r   r.   rH   rI   r/   r   rK   daterP   current_dater   rJ   rL   rM   r9   rN   monthnowyearr   )rF   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   
extensionsr   models.userr   models.teacherr   models.studentr   models.courser   models.bookingr   models.feedbackr   models.announcementr   __name__admin_bpbefore_requestr    router4   rT   r`   rf   rn   rp   rr   rv   ry   r   r   r   r   r   r   <module>r      s/   Y X X @ @   " "   " $ ,Wh' 
/ /& 
5&/2/ 3/@ 
<  <0 
<  <" 
E  E& 
2VHE/  F/ 

	B  	B 
E  E" 
	G  	G 
 !T  "T 
&@=  A=8 
2  2
 
  r   