11<template >
22 <div class =" h-full px-2 md:px-4 admin-container" >
33 <div class =" card h-full flex flex-col" >
4- <Tabs value="0" class="flex-1">
4+ <Tabs value="0" class="flex-1" @ update : value = " handleTabChange " >
55 <TabList >
66 <Tab value="0">課程管理</Tab >
77 <Tab value="1">使用者管理</Tab >
@@ -382,6 +382,7 @@ import {
382382 updateUser ,
383383 deleteUser ,
384384} from ' ../api'
385+ import { trackEvent , EVENTS } from ' ../utils/analytics'
385386
386387const confirm = useConfirm ()
387388const toast = useToast ()
@@ -436,6 +437,7 @@ const umamiLoading = ref(false)
436437
437438const openUmamiInNewTab = () => {
438439 if (umamiShareUrl .value ) {
440+ trackEvent (EVENTS .OPEN_ANALYTICS_NEW_TAB )
439441 window .open (umamiShareUrl .value , ' _blank' )
440442 }
441443}
@@ -570,6 +572,7 @@ const openCreateDialog = () => {
570572 courseFormErrors .value = {}
571573 editingCourse .value = null
572574 showCourseDialog .value = true
575+ trackEvent (EVENTS .CREATE_COURSE , { action: ' open-dialog' })
573576}
574577
575578const openEditDialog = (course ) => {
@@ -580,6 +583,7 @@ const openEditDialog = (course) => {
580583 courseFormErrors .value = {}
581584 editingCourse .value = course
582585 showCourseDialog .value = true
586+ trackEvent (EVENTS .UPDATE_COURSE , { action: ' open-dialog' , courseName: course .name })
583587}
584588
585589const closeCourseDialog = () => {
@@ -614,6 +618,11 @@ const saveCourse = async () => {
614618 try {
615619 if (editingCourse .value ) {
616620 await updateCourse (editingCourse .value .id , courseForm .value )
621+ trackEvent (EVENTS .UPDATE_COURSE , {
622+ action: ' submit' ,
623+ courseName: courseForm .value .name ,
624+ category: courseForm .value .category ,
625+ })
617626 toast .add ({
618627 severity: ' success' ,
619628 summary: ' 成功' ,
@@ -622,6 +631,11 @@ const saveCourse = async () => {
622631 })
623632 } else {
624633 await createCourse (courseForm .value )
634+ trackEvent (EVENTS .CREATE_COURSE , {
635+ action: ' submit' ,
636+ courseName: courseForm .value .name ,
637+ category: courseForm .value .category ,
638+ })
625639 toast .add ({
626640 severity: ' success' ,
627641 summary: ' 成功' ,
@@ -660,6 +674,10 @@ const confirmDeleteCourse = (course) => {
660674const deleteCourseAction = async (course ) => {
661675 try {
662676 await deleteCourse (course .id )
677+ trackEvent (EVENTS .DELETE_COURSE , {
678+ courseName: course .name ,
679+ category: course .category ,
680+ })
663681 toast .add ({
664682 severity: ' success' ,
665683 summary: ' 成功' ,
@@ -688,6 +706,7 @@ const openCreateUserDialog = () => {
688706 userFormErrors .value = {}
689707 editingUser .value = null
690708 showUserDialog .value = true
709+ trackEvent (EVENTS .CREATE_USER , { action: ' open-dialog' })
691710}
692711
693712const openEditUserDialog = (user ) => {
@@ -700,6 +719,7 @@ const openEditUserDialog = (user) => {
700719 userFormErrors .value = {}
701720 editingUser .value = user
702721 showUserDialog .value = true
722+ trackEvent (EVENTS .UPDATE_USER , { action: ' open-dialog' , userName: user .name })
703723}
704724
705725const closeUserDialog = () => {
@@ -750,6 +770,11 @@ const saveUser = async () => {
750770 updateData .password = userForm .value .password
751771 }
752772 await updateUser (editingUser .value .id , updateData)
773+ trackEvent (EVENTS .UPDATE_USER , {
774+ action: ' submit' ,
775+ userName: userForm .value .name ,
776+ isAdmin: userForm .value .is_admin ,
777+ })
753778 toast .add ({
754779 severity: ' success' ,
755780 summary: ' 成功' ,
@@ -758,6 +783,11 @@ const saveUser = async () => {
758783 })
759784 } else {
760785 await createUser (userForm .value )
786+ trackEvent (EVENTS .CREATE_USER , {
787+ action: ' submit' ,
788+ userName: userForm .value .name ,
789+ isAdmin: userForm .value .is_admin ,
790+ })
761791 toast .add ({
762792 severity: ' success' ,
763793 summary: ' 成功' ,
@@ -796,6 +826,10 @@ const confirmDeleteUser = (user) => {
796826const deleteUserAction = async (user ) => {
797827 try {
798828 await deleteUser (user .id )
829+ trackEvent (EVENTS .DELETE_USER , {
830+ userName: user .name ,
831+ isAdmin: user .is_admin ,
832+ })
799833 toast .add ({
800834 severity: ' success' ,
801835 summary: ' 成功' ,
@@ -848,6 +882,22 @@ const formatDateTime = (dateString) => {
848882 }
849883}
850884
885+ const handleTabChange = (value ) => {
886+ const tabNames = {
887+ 0 : ' courses' ,
888+ 1 : ' users' ,
889+ 2 : ' analytics' ,
890+ }
891+
892+ trackEvent (EVENTS .SWITCH_TAB , {
893+ tab: tabNames[value] || value,
894+ })
895+
896+ if (value === ' 2' ) {
897+ trackEvent (EVENTS .VIEW_ANALYTICS )
898+ }
899+ }
900+
851901onMounted (() => {
852902 loadCourses ()
853903 loadUsers ()
0 commit comments