表C是下月空白模板,由教师填写次月消课情况。剩余课时已自动带入。
学员列表
异动学员
续费记录
设置
教师数
0
学员总数
0
续费记录数
0
function initSampleData() { const d = getData(); d.teacherOrder = ["t1","t2"]; d.teachers = {"t1":{"id":"t1","name":"杨育权"},"t2":{"id":"t2","name":"彭程"}}; d.students = {}; d.students["s1"] = {id:"s1",name:"陈启航",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s2"] = {id:"s2",name:"娄文溪",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s3"] = {id:"s3",name:"张雯雅",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s4"] = {id:"s4",name:"孟祥宇",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s5"] = {id:"s5",name:"王有智",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s6"] = {id:"s6",name:"崔明轩",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s7"] = {id:"s7",name:"田佳骐",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s8"] = {id:"s8",name:"李卓阳",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s9"] = {id:"s9",name:"张博尊",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s10"] = {id:"s10",name:"陈沐莛",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s11"] = {id:"s11",name:"董逸钒",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s12"] = {id:"s12",name:"王禹皓",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s13"] = {id:"s13",name:"郝钰凡",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s14"] = {id:"s14",name:"辛家睿",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s15"] = {id:"s15",name:"刘奕泽",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s16"] = {id:"s16",name:"王翊丞",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s17"] = {id:"s17",name:"杨思羽",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s18"] = {id:"s18",name:"李佳航",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s19"] = {id:"s19",name:"常珺杰",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s20"] = {id:"s20",name:"张芮堃",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s21"] = {id:"s21",name:"崔皓然",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s22"] = {id:"s22",name:"赵誉涵",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s23"] = {id:"s23",name:"洪浚硕",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s24"] = {id:"s24",name:"李知轩",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s25"] = {id:"s25",name:"朱圣杰",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s26"] = {id:"s26",name:"韩沐宸",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s27"] = {id:"s27",name:"李崇巍",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s28"] = {id:"s28",name:"李芊露",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s29"] = {id:"s29",name:"田梓航",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s30"] = {id:"s30",name:"刘昊霖",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s31"] = {id:"s31",name:"林谦语",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s32"] = {id:"s32",name:"张书瑜",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s33"] = {id:"s33",name:"杨思琪",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s34"] = {id:"s34",name:"赵楚元",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s35"] = {id:"s35",name:"张金硕",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s36"] = {id:"s36",name:"赵梓茞",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s37"] = {id:"s37",name:"周远宸",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s38"] = {id:"s38",name:"王胥霖",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s39"] = {id:"s39",name:"刘冰",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s40"] = {id:"s40",name:"王禹博",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s41"] = {id:"s41",name:"陈相廷",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s42"] = {id:"s42",name:"周皓一",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s43"] = {id:"s43",name:"张允初",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s44"] = {id:"s44",name:"王泽凯",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s45"] = {id:"s45",name:"李梓菁",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s46"] = {id:"s46",name:"戚子衿",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s47"] = {id:"s47",name:"朱子轩",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s48"] = {id:"s48",name:"樊一杨",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s49"] = {id:"s49",name:"李佑琪",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s50"] = {id:"s50",name:"常羽晟",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s51"] = {id:"s51",name:"赵奕铭",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s52"] = {id:"s52",name:"解棋朝",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s53"] = {id:"s53",name:"解棋智",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s54"] = {id:"s54",name:"孙绍源",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s55"] = {id:"s55",name:"冯宇安",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s56"] = {id:"s56",name:"刘铭灿",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s57"] = {id:"s57",name:"金柏妍",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s58"] = {id:"s58",name:"陈烁坤",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s59"] = {id:"s59",name:"张袁浩智",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s60"] = {id:"s60",name:"张敬祺",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s61"] = {id:"s61",name:"刘泰然",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s62"] = {id:"s62",name:"倪昕彤",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s63"] = {id:"s63",name:"高茁然",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s64"] = {id:"s64",name:"于思宇",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s65"] = {id:"s65",name:"唱皓博",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s66"] = {id:"s66",name:"戴一诺",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s67"] = {id:"s67",name:"高梓腾",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s68"] = {id:"s68",name:"孟祥轩",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s69"] = {id:"s69",name:"孙荣灿",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s70"] = {id:"s70",name:"刘佳航",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s71"] = {id:"s71",name:"杜恩泽",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s72"] = {id:"s72",name:"马朝轩",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s73"] = {id:"s73",name:"高靖东",teacherId:"t1",xiuxue:false,tuifei:false,startDate:""}; d.students["s74"] = {id:"s74",name:"冯熙桐",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s75"] = {id:"s75",name:"陈沐菡",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s76"] = {id:"s76",name:"田一博",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s77"] = {id:"s77",name:"马朝辕",teacherId:"t2",xiuxue:true,tuifei:false,startDate:""}; d.students["s78"] = {id:"s78",name:"刘玥岑",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s79"] = {id:"s79",name:"黄一诺",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s80"] = {id:"s80",name:"蔺高辛",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s81"] = {id:"s81",name:"刘若曦",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s82"] = {id:"s82",name:"冯炳霖",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s83"] = {id:"s83",name:"刘皓轩",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s84"] = {id:"s84",name:"候奕辰",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s85"] = {id:"s85",name:"杨子熙",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s86"] = {id:"s86",name:"刘雨轩",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s87"] = {id:"s87",name:"刘天一",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s88"] = {id:"s88",name:"吴燕欣",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s89"] = {id:"s89",name:"田羽娴",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s90"] = {id:"s90",name:"隋吉楷",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s91"] = {id:"s91",name:"康芷侨",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s92"] = {id:"s92",name:"蔡思莹",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s93"] = {id:"s93",name:"张熠雯",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.students["s94"] = {id:"s94",name:"十六",teacherId:"t2",xiuxue:false,tuifei:false,startDate:""}; d.renewals = {}; d.renewals["r1"] = {id:"r1",studentId:"s1",date:"2026-3",purchased:48,gifted:4,amount:5980.0,unitPrice:124.583333333333,type:"2026.3.28续费"}; d.renewals["r2"] = {id:"r2",studentId:"s2",date:"2026-3",purchased:48,gifted:4,amount:5980.0,unitPrice:124.583333333333,type:"2025.9.30续费"}; d.renewals["r3"] = {id:"r3",studentId:"s3",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.2.27续费"}; d.renewals["r4"] = {id:"r4",studentId:"s4",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.6.13续费"}; d.renewals["r5"] = {id:"r5",studentId:"s5",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.9.25续费"}; d.renewals["r6"] = {id:"r6",studentId:"s6",date:"2026-3",purchased:48,gifted:3,amount:4899.0,unitPrice:102.0625,type:"2023.8.26续费"}; d.renewals["r7"] = {id:"r7",studentId:"s7",date:"2026-3",purchased:48,gifted:0,amount:4800.0,unitPrice:100.0,type:"2024.9.8 续费"}; d.renewals["r8"] = {id:"r8",studentId:"s8",date:"2026-3",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2025.3.28续费"}; d.renewals["r9"] = {id:"r9",studentId:"s9",date:"2026-3",purchased:50,gifted:5,amount:5000.0,unitPrice:100.0,type:"2025.3.1续费"}; d.renewals["r10"] = {id:"r10",studentId:"s10",date:"2026-3",purchased:48,gifted:4,amount:5519.0,unitPrice:114.979166666667,type:"2025.3.28续费"}; d.renewals["r11"] = {id:"r11",studentId:"s11",date:"2026-3",purchased:28,gifted:1,amount:5376.0,unitPrice:112.0,type:"2025.9.27续费"}; d.renewals["r12"] = {id:"r12",studentId:"s12",date:"2026-3",purchased:48,gifted:4,amount:5568.0,unitPrice:116.0,type:"2025.2.27续费"}; d.renewals["r13"] = {id:"r13",studentId:"s13",date:"2026-3",purchased:48,gifted:2,amount:5568.0,unitPrice:116.0,type:"2024.11.2续费"}; d.renewals["r14"] = {id:"r14",studentId:"s14",date:"2026-3",purchased:48,gifted:4,amount:5380.0,unitPrice:112.083333333333,type:"2025.9.18续费"}; d.renewals["r15"] = {id:"r15",studentId:"s15",date:"2026-3",purchased:48,gifted:4,amount:5236.0,unitPrice:109.083333333333,type:"2026.3.19续费"}; d.renewals["r16"] = {id:"r16",studentId:"s16",date:"2026-3",purchased:48,gifted:4,amount:5871.0,unitPrice:122.3125,type:"2025.3.2续费"}; d.renewals["r17"] = {id:"r17",studentId:"s17",date:"2026-3",purchased:48,gifted:3,amount:4800.0,unitPrice:100.0,type:"2023.8.26续费"}; d.renewals["r18"] = {id:"r18",studentId:"s18",date:"2026-3",purchased:48,gifted:4,amount:5376.0,unitPrice:112.0,type:"2025.3.28续费"}; d.renewals["r19"] = {id:"r19",studentId:"s19",date:"2026-3",purchased:48,gifted:4,amount:5077.0,unitPrice:105.770833333333,type:"2025.9.23续费"}; d.renewals["r20"] = {id:"r20",studentId:"s20",date:"2026-3",purchased:24,gifted:1,amount:2940.0,unitPrice:122.5,type:"2026.1.29 续费"}; d.renewals["r21"] = {id:"r21",studentId:"s21",date:"2026-3",purchased:48,gifted:4,amount:6165.0,unitPrice:128.4375,type:"2025.9.30续费"}; d.renewals["r22"] = {id:"r22",studentId:"s22",date:"2026-3",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2026.3.29续费"}; d.renewals["r23"] = {id:"r23",studentId:"s23",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.1.5 续费"}; d.renewals["r24"] = {id:"r24",studentId:"s24",date:"2026-3",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2025.9.2续费"}; d.renewals["r25"] = {id:"r25",studentId:"s25",date:"2026-3",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2024.8.25"}; d.renewals["r26"] = {id:"r26",studentId:"s26",date:"2026-3",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.9.30续费"}; d.renewals["r27"] = {id:"r27",studentId:"s27",date:"2026-3",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.11.12 续费"}; d.renewals["r28"] = {id:"r28",studentId:"s28",date:"2026-3",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.11.12 续费"}; d.renewals["r29"] = {id:"r29",studentId:"s29",date:"2026-3",purchased:48,gifted:4,amount:5200.0,unitPrice:108.333333333333,type:"2025.9.29续费"}; d.renewals["r30"] = {id:"r30",studentId:"s30",date:"2026-3",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2023.8.31续费"}; d.renewals["r31"] = {id:"r31",studentId:"s31",date:"2026-3",purchased:48,gifted:3,amount:5780.0,unitPrice:120.416666666667,type:"2023.8.20续费"}; d.renewals["r32"] = {id:"r32",studentId:"s32",date:"2026-3",purchased:24,gifted:1,amount:2998.0,unitPrice:124.916666666667,type:"2025.9.28续费"}; d.renewals["r33"] = {id:"r33",studentId:"s33",date:"2026-3",purchased:48,gifted:4,amount:5880.0,unitPrice:122.5,type:"2024.11.29 续费"}; d.renewals["r34"] = {id:"r34",studentId:"s34",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.3.16续费"}; d.renewals["r35"] = {id:"r35",studentId:"s35",date:"2026-3",purchased:48,gifted:4,amount:5871.0,unitPrice:122.3125,type:"2026.3.26续费"}; d.renewals["r36"] = {id:"r36",studentId:"s36",date:"2026-3",purchased:48,gifted:4,amount:5871.0,unitPrice:122.3125,type:"2026.3.27续费"}; d.renewals["r37"] = {id:"r37",studentId:"s37",date:"2026-3",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.3.26续费"}; d.renewals["r38"] = {id:"r38",studentId:"s38",date:"2026-3",purchased:50,gifted:2,amount:10000.0,unitPrice:200.0,type:"2025.10.1续费"}; d.renewals["r39"] = {id:"r39",studentId:"s39",date:"2026-3",purchased:10,gifted:0,amount:1500.0,unitPrice:150.0,type:"2024.10.30 报名"}; d.renewals["r40"] = {id:"r40",studentId:"s40",date:"2026-3",purchased:24,gifted:1,amount:3090.0,unitPrice:128.75,type:"2025.10.1续费"}; d.renewals["r41"] = {id:"r41",studentId:"s41",date:"2026-3",purchased:48,gifted:0,amount:4800.0,unitPrice:100.0,type:"2025.7.19续费"}; d.renewals["r42"] = {id:"r42",studentId:"s42",date:"2026-3",purchased:25,gifted:0,amount:5000.0,unitPrice:200.0,type:"2025.11.10 新生"}; d.renewals["r43"] = {id:"r43",studentId:"s43",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2026.2.3 新生"}; d.renewals["r44"] = {id:"r44",studentId:"s44",date:"2026-3",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2026.3.1 新生"}; d.renewals["r45"] = {id:"r45",studentId:"s45",date:"2026-3",purchased:10,gifted:0,amount:880.0,unitPrice:88.0,type:"2026.1.27 新生"}; d.renewals["r46"] = {id:"r46",studentId:"s46",date:"2026-3",purchased:48,gifted:2,amount:6165.0,unitPrice:128.4375,type:"2024.8.11续费"}; d.renewals["r47"] = {id:"r47",studentId:"s47",date:"2026-3",purchased:24,gifted:1,amount:3035.0,unitPrice:126.458333333333,type:"2025.9.19续费"}; d.renewals["r48"] = {id:"r48",studentId:"s48",date:"2026-3",purchased:48,gifted:2,amount:5980.0,unitPrice:124.583333333333,type:"2025.7.9 续费"}; d.renewals["r49"] = {id:"r49",studentId:"s49",date:"2026-3",purchased:48,gifted:5,amount:6180.0,unitPrice:128.75,type:"2025.3.18续费"}; d.renewals["r50"] = {id:"r50",studentId:"s50",date:"2026-3",purchased:48,gifted:4,amount:5668.0,unitPrice:118.083333333333,type:"2025.3.18续费"}; d.renewals["r51"] = {id:"r51",studentId:"s51",date:"2026-3",purchased:48,gifted:2,amount:5000.0,unitPrice:104.166666666667,type:"2025.10.18续费"}; d.renewals["r52"] = {id:"r52",studentId:"s52",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.9.23续费"}; d.renewals["r53"] = {id:"r53",studentId:"s53",date:"2026-3",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.9.23续费"}; d.renewals["r54"] = {id:"r54",studentId:"s54",date:"2026-3",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2024.9.7 续费"}; d.renewals["r55"] = {id:"r55",studentId:"s55",date:"2026-3",purchased:48,gifted:4,amount:5996.0,unitPrice:124.916666666667,type:"2025.3.7续费"}; d.renewals["r56"] = {id:"r56",studentId:"s56",date:"2026-3",purchased:48,gifted:2,amount:6180.0,unitPrice:128.75,type:"2024.9.6 续费"}; d.renewals["r57"] = {id:"r57",studentId:"s57",date:"2026-3",purchased:36,gifted:4,amount:4820.0,unitPrice:133.888888888889,type:"2025.4.2新生"}; d.renewals["r58"] = {id:"r58",studentId:"s58",date:"2026-3",purchased:50,gifted:0,amount:5000.0,unitPrice:100.0,type:"2025.8.25续费"}; d.renewals["r59"] = {id:"r59",studentId:"s59",date:"2026-3",purchased:48,gifted:2,amount:5200.0,unitPrice:108.333333333333,type:"2025.8.19续费"}; d.renewals["r60"] = {id:"r60",studentId:"s60",date:"2026-3",purchased:48,gifted:4,amount:5696.0,unitPrice:118.666666666667,type:"2025.9.5续费"}; d.renewals["r61"] = {id:"r61",studentId:"s61",date:"2026-3",purchased:48,gifted:0,amount:6180.0,unitPrice:128.75,type:"2024.6.8 续费"}; d.renewals["r62"] = {id:"r62",studentId:"s62",date:"2026-3",purchased:24,gifted:1,amount:2988.0,unitPrice:124.5,type:"2025.3.28续费"}; d.renewals["r63"] = {id:"r63",studentId:"s64",date:"2026-3",purchased:48,gifted:2,amount:6000.0,unitPrice:125.0,type:"2024.3.15 续费"}; d.renewals["r64"] = {id:"r64",studentId:"s65",date:"2026-3",purchased:24,gifted:1,amount:2400.0,unitPrice:100.0,type:"2025.3.15续费"}; d.renewals["r65"] = {id:"r65",studentId:"s74",date:"2026-3",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2024.3.23续费"}; d.renewals["r66"] = {id:"r66",studentId:"s75",date:"2026-3",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2025.9.13 续费"}; d.renewals["r67"] = {id:"r67",studentId:"s76",date:"2026-3",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2025.9.13 续费"}; d.renewals["r68"] = {id:"r68",studentId:"s77",date:"2026-3",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2025.3.30 续费"}; d.renewals["r69"] = {id:"r69",studentId:"s78",date:"2026-3",purchased:24,gifted:2,amount:2540.0,unitPrice:105.833333333333,type:"2025.4.3 续费"}; d.renewals["r70"] = {id:"r70",studentId:"s79",date:"2026-3",purchased:12,gifted:0,amount:1320.0,unitPrice:110.0,type:"2026.3.8 续费"}; d.renewals["r71"] = {id:"r71",studentId:"s80",date:"2026-3",purchased:20,gifted:0,amount:1800.0,unitPrice:90.0,type:"2025.11.4 续费"}; d.renewals["r72"] = {id:"r72",studentId:"s81",date:"2026-3",purchased:48,gifted:0,amount:4000.0,unitPrice:83.3333333333333,type:"2025.3.30 报名"}; d.renewals["r73"] = {id:"r73",studentId:"s82",date:"2026-3",purchased:48,gifted:4,amount:2880.0,unitPrice:60.0,type:"2025.11.23 续费"}; d.renewals["r74"] = {id:"r74",studentId:"s83",date:"2026-3",purchased:48,gifted:6,amount:4980.0,unitPrice:103.75,type:"2025.9.20 报名"}; d.renewals["r75"] = {id:"r75",studentId:"s42",date:"2026-3",purchased:20,gifted:0,amount:3000.0,unitPrice:150.0,type:"2025.12.3 报名"}; d.renewals["r76"] = {id:"r76",studentId:"s84",date:"2026-3",purchased:48,gifted:6,amount:4980.0,unitPrice:103.75,type:"2025.11.29 报名"}; d.renewals["r77"] = {id:"r77",studentId:"s85",date:"2026-3",purchased:24,gifted:0,amount:2400.0,unitPrice:100.0,type:"2026.1. 29 报名"}; d.renewals["r78"] = {id:"r78",studentId:"s86",date:"2026-3",purchased:17,gifted:0,amount:1700.0,unitPrice:100.0,type:"2026.3.23 报名"}; d.renewals["r79"] = {id:"r79",studentId:"s87",date:"2026-3",purchased:10,gifted:0,amount:1200.0,unitPrice:120.0,type:"2026.3.27 报名"}; d.renewals["r80"] = {id:"r80",studentId:"s88",date:"2026-3",purchased:10,gifted:0,amount:880.0,unitPrice:88.0,type:"2025.12.10 报名"}; d.renewals["r81"] = {id:"r81",studentId:"s1",date:"2026-4",purchased:48,gifted:4,amount:5980.0,unitPrice:124.58,type:"2026.3.28续费"}; d.renewals["r82"] = {id:"r82",studentId:"s2",date:"2026-4",purchased:48,gifted:4,amount:5980.0,unitPrice:124.583333333333,type:"2025.9.30续费"}; d.renewals["r83"] = {id:"r83",studentId:"s3",date:"2026-4",purchased:24,gifted:1,amount:3090.0,unitPrice:128.75,type:"2026.4.12 续费"}; d.renewals["r84"] = {id:"r84",studentId:"s4",date:"2026-4",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.6.13续费"}; d.renewals["r85"] = {id:"r85",studentId:"s5",date:"2026-4",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.9.25续费"}; d.renewals["r86"] = {id:"r86",studentId:"s6",date:"2026-4",purchased:48,gifted:3,amount:4899.0,unitPrice:102.0625,type:"2023.8.26续费"}; d.renewals["r87"] = {id:"r87",studentId:"s7",date:"2026-4",purchased:48,gifted:0,amount:4800.0,unitPrice:100.0,type:"2024.9.8 续费"}; d.renewals["r88"] = {id:"r88",studentId:"s8",date:"2026-4",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2025.3.28续费"}; d.renewals["r89"] = {id:"r89",studentId:"s9",date:"2026-4",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2026.4.16 续费"}; d.renewals["r90"] = {id:"r90",studentId:"s10",date:"2026-4",purchased:48,gifted:4,amount:5519.0,unitPrice:114.979166666667,type:"2026.4.2续费"}; d.renewals["r91"] = {id:"r91",studentId:"s11",date:"2026-4",purchased:28,gifted:1,amount:5376.0,unitPrice:112.0,type:"2025.9.27续费"}; d.renewals["r92"] = {id:"r92",studentId:"s12",date:"2026-4",purchased:48,gifted:4,amount:5568.0,unitPrice:116.0,type:"2025.2.27续费"}; d.renewals["r93"] = {id:"r93",studentId:"s13",date:"2026-4",purchased:48,gifted:2,amount:5568.0,unitPrice:116.0,type:"2024.11.2续费"}; d.renewals["r94"] = {id:"r94",studentId:"s14",date:"2026-4",purchased:48,gifted:4,amount:5380.0,unitPrice:112.083333333333,type:"2025.9.18续费"}; d.renewals["r95"] = {id:"r95",studentId:"s15",date:"2026-4",purchased:48,gifted:4,amount:5236.0,unitPrice:109.08,type:"2026.3.19续费"}; d.renewals["r96"] = {id:"r96",studentId:"s16",date:"2026-4",purchased:48,gifted:4,amount:5871.0,unitPrice:122.3125,type:"2025.3.2续费"}; d.renewals["r97"] = {id:"r97",studentId:"s17",date:"2026-4",purchased:48,gifted:3,amount:4800.0,unitPrice:100.0,type:"2023.8.26续费"}; d.renewals["r98"] = {id:"r98",studentId:"s18",date:"2026-4",purchased:48,gifted:4,amount:5376.0,unitPrice:112.0,type:"2025.3.28续费"}; d.renewals["r99"] = {id:"r99",studentId:"s19",date:"2026-4",purchased:48,gifted:4,amount:5077.0,unitPrice:105.770833333333,type:"2025.9.23续费"}; d.renewals["r100"] = {id:"r100",studentId:"s20",date:"2026-4",purchased:24,gifted:1,amount:2940.0,unitPrice:122.5,type:"2026.1.29 续费"}; d.renewals["r101"] = {id:"r101",studentId:"s21",date:"2026-4",purchased:48,gifted:4,amount:6165.0,unitPrice:128.4375,type:"2025.9.30续费"}; d.renewals["r102"] = {id:"r102",studentId:"s22",date:"2026-4",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2026.3.29续费"}; d.renewals["r103"] = {id:"r103",studentId:"s23",date:"2026-4",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.4.2 续费"}; d.renewals["r104"] = {id:"r104",studentId:"s24",date:"2026-4",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2025.9.2续费"}; d.renewals["r105"] = {id:"r105",studentId:"s25",date:"2026-4",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2026.4.15 续费"}; d.renewals["r106"] = {id:"r106",studentId:"s26",date:"2026-4",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.9.30续费"}; d.renewals["r107"] = {id:"r107",studentId:"s27",date:"2026-4",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.11.12 续费"}; d.renewals["r108"] = {id:"r108",studentId:"s28",date:"2026-4",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.11.12 续费"}; d.renewals["r109"] = {id:"r109",studentId:"s29",date:"2026-4",purchased:48,gifted:4,amount:5200.0,unitPrice:108.333333333333,type:"2025.9.29续费"}; d.renewals["r110"] = {id:"r110",studentId:"s30",date:"2026-4",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2023.8.31续费"}; d.renewals["r111"] = {id:"r111",studentId:"s31",date:"2026-4",purchased:48,gifted:3,amount:5780.0,unitPrice:120.416666666667,type:"2023.8.20续费"}; d.renewals["r112"] = {id:"r112",studentId:"s32",date:"2026-4",purchased:24,gifted:1,amount:2998.0,unitPrice:124.916666666667,type:"2025.9.28续费"}; d.renewals["r113"] = {id:"r113",studentId:"s33",date:"2026-4",purchased:48,gifted:4,amount:5880.0,unitPrice:122.5,type:"2024.11.29 续费"}; d.renewals["r114"] = {id:"r114",studentId:"s34",date:"2026-4",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.3.16续费"}; d.renewals["r115"] = {id:"r115",studentId:"s35",date:"2026-4",purchased:48,gifted:4,amount:5871.0,unitPrice:122.31,type:"2026.3.26续费"}; d.renewals["r116"] = {id:"r116",studentId:"s36",date:"2026-4",purchased:48,gifted:4,amount:5871.0,unitPrice:122.31,type:"2026.3.27续费"}; d.renewals["r117"] = {id:"r117",studentId:"s37",date:"2026-4",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.3.26续费"}; d.renewals["r118"] = {id:"r118",studentId:"s40",date:"2026-4",purchased:24,gifted:1,amount:3090.0,unitPrice:128.75,type:"2025.10.1续费"}; d.renewals["r119"] = {id:"r119",studentId:"s41",date:"2026-4",purchased:48,gifted:0,amount:4800.0,unitPrice:100.0,type:"2025.7.19续费"}; d.renewals["r120"] = {id:"r120",studentId:"s43",date:"2026-4",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2026.2.3 新生"}; d.renewals["r121"] = {id:"r121",studentId:"s44",date:"2026-4",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2026.3.1 新生"}; d.renewals["r122"] = {id:"r122",studentId:"s46",date:"2026-4",purchased:48,gifted:2,amount:6165.0,unitPrice:128.4375,type:"2024.8.11续费"}; d.renewals["r123"] = {id:"r123",studentId:"s47",date:"2026-4",purchased:24,gifted:1,amount:3035.0,unitPrice:126.458333333333,type:"2025.9.19续费"}; d.renewals["r124"] = {id:"r124",studentId:"s48",date:"2026-4",purchased:24,gifted:1,amount:3000.0,unitPrice:125.0,type:"2026.4.3 续费"}; d.renewals["r125"] = {id:"r125",studentId:"s49",date:"2026-4",purchased:48,gifted:5,amount:6180.0,unitPrice:128.75,type:"2025.3.18续费"}; d.renewals["r126"] = {id:"r126",studentId:"s50",date:"2026-4",purchased:48,gifted:4,amount:5668.0,unitPrice:118.083333333333,type:"2025.3.18续费"}; d.renewals["r127"] = {id:"r127",studentId:"s51",date:"2026-4",purchased:48,gifted:2,amount:5000.0,unitPrice:104.166666666667,type:"2025.10.18续费"}; d.renewals["r128"] = {id:"r128",studentId:"s54",date:"2026-4",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2026.4.5 续费"}; d.renewals["r129"] = {id:"r129",studentId:"s55",date:"2026-4",purchased:48,gifted:4,amount:5996.0,unitPrice:124.916666666667,type:"2025.3.7续费"}; d.renewals["r130"] = {id:"r130",studentId:"s56",date:"2026-4",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.4.3 续费"}; d.renewals["r131"] = {id:"r131",studentId:"s57",date:"2026-4",purchased:24,gifted:1,amount:3180.0,unitPrice:132.5,type:"2026.4.8 续费"}; d.renewals["r132"] = {id:"r132",studentId:"s58",date:"2026-4",purchased:50,gifted:0,amount:5000.0,unitPrice:100.0,type:"2025.8.25续费"}; d.renewals["r133"] = {id:"r133",studentId:"s59",date:"2026-4",purchased:48,gifted:2,amount:5200.0,unitPrice:108.333333333333,type:"2025.8.19续费"}; d.renewals["r134"] = {id:"r134",studentId:"s60",date:"2026-4",purchased:48,gifted:4,amount:5696.0,unitPrice:118.666666666667,type:"2025.9.5续费"}; d.renewals["r135"] = {id:"r135",studentId:"s61",date:"2026-4",purchased:48,gifted:0,amount:6180.0,unitPrice:128.75,type:"2024.6.8 续费"}; d.renewals["r136"] = {id:"r136",studentId:"s66",date:"2026-4",purchased:12,gifted:0,amount:2400.0,unitPrice:200.0,type:"2024.8.17报名"}; d.renewals["r137"] = {id:"r137",studentId:"s39",date:"2026-4",purchased:10,gifted:0,amount:1500.0,unitPrice:150.0,type:"2024.10.30 报名"}; d.renewals["r138"] = {id:"r138",studentId:"s42",date:"2026-4",purchased:25,gifted:0,amount:5000.0,unitPrice:200.0,type:"2025.11.10 新生"}; d.renewals["r139"] = {id:"r139",studentId:"s38",date:"2026-4",purchased:50,gifted:2,amount:10000.0,unitPrice:200.0,type:"2025.10.1续费"}; d.renewals["r140"] = {id:"r140",studentId:"s63",date:"2026-4",purchased:48,gifted:4,amount:5280.0,unitPrice:110.0,type:"2024.9.15 续费"}; d.renewals["r141"] = {id:"r141",studentId:"s64",date:"2026-4",purchased:48,gifted:2,amount:6000.0,unitPrice:125.0,type:"2024.3.15 续费"}; d.renewals["r142"] = {id:"r142",studentId:"s65",date:"2026-4",purchased:24,gifted:1,amount:2400.0,unitPrice:100.0,type:"2025.3.15续费"}; d.renewals["r143"] = {id:"r143",studentId:"s75",date:"2026-4",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2025.9.13 续费"}; d.renewals["r144"] = {id:"r144",studentId:"s76",date:"2026-4",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2025.9.13 续费"}; d.renewals["r145"] = {id:"r145",studentId:"s79",date:"2026-4",purchased:12,gifted:0,amount:1320.0,unitPrice:110.0,type:"2026.3.8 续费"}; d.renewals["r146"] = {id:"r146",studentId:"s81",date:"2026-4",purchased:48,gifted:0,amount:4000.0,unitPrice:83.3333333333333,type:"2025.3.30 报名"}; d.renewals["r147"] = {id:"r147",studentId:"s82",date:"2026-4",purchased:48,gifted:4,amount:2880.0,unitPrice:60.0,type:"2025.11.23 续费"}; d.renewals["r148"] = {id:"r148",studentId:"s83",date:"2026-4",purchased:48,gifted:6,amount:4980.0,unitPrice:103.75,type:"2025.9.20 报名"}; d.renewals["r149"] = {id:"r149",studentId:"s84",date:"2026-4",purchased:48,gifted:6,amount:4980.0,unitPrice:103.75,type:"2025.11.29 报名"}; d.renewals["r150"] = {id:"r150",studentId:"s85",date:"2026-4",purchased:24,gifted:0,amount:2400.0,unitPrice:100.0,type:"2026.1. 29 报名"}; d.renewals["r151"] = {id:"r151",studentId:"s86",date:"2026-4",purchased:17,gifted:0,amount:1700.0,unitPrice:100.0,type:"2026.3.23 报名"}; d.renewals["r152"] = {id:"r152",studentId:"s87",date:"2026-4",purchased:10,gifted:0,amount:1200.0,unitPrice:120.0,type:"2026.3.27 报名"}; d.renewals["r153"] = {id:"r153",studentId:"s93",date:"2026-4",purchased:10,gifted:0,amount:880.0,unitPrice:88.0,type:"2026.4.21 报名"}; d.renewals["r154"] = {id:"r154",studentId:"s88",date:"2026-4",purchased:10,gifted:0,amount:880.0,unitPrice:88.0,type:"2026.4.9 续费"}; d.renewals["r155"] = {id:"r155",studentId:"s42",date:"2026-4",purchased:20,gifted:0,amount:3000.0,unitPrice:150.0,type:"2025.12.3 报名"}; d.renewals["r156"] = {id:"r156",studentId:"s77",date:"2026-4",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2025.3.30 续费"}; d.renewals["r157"] = {id:"r157",studentId:"s74",date:"2026-4",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2024.3.23续费"}; d.renewals["r158"] = {id:"r158",studentId:"s78",date:"2026-4",purchased:24,gifted:2,amount:2540.0,unitPrice:105.833333333333,type:"2025.4.3 续费"}; d.renewals["r159"] = {id:"r159",studentId:"s80",date:"2026-4",purchased:20,gifted:0,amount:1800.0,unitPrice:90.0,type:"2025.11.4 续费"}; d.renewals["r160"] = {id:"r160",studentId:"s1",date:"2026-5",purchased:48,gifted:4,amount:5980.0,unitPrice:124.58,type:"2026.3.28续费"}; d.renewals["r161"] = {id:"r161",studentId:"s2",date:"2026-5",purchased:48,gifted:4,amount:5980.0,unitPrice:124.583333333333,type:"2025.9.30续费"}; d.renewals["r162"] = {id:"r162",studentId:"s3",date:"2026-5",purchased:24,gifted:1,amount:3090.0,unitPrice:128.75,type:"2026.4.12 续费"}; d.renewals["r163"] = {id:"r163",studentId:"s4",date:"2026-5",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.6.13续费"}; d.renewals["r164"] = {id:"r164",studentId:"s5",date:"2026-5",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.9.25续费"}; d.renewals["r165"] = {id:"r165",studentId:"s6",date:"2026-5",purchased:48,gifted:3,amount:4899.0,unitPrice:102.0625,type:"2023.8.26续费"}; d.renewals["r166"] = {id:"r166",studentId:"s7",date:"2026-5",purchased:48,gifted:0,amount:4800.0,unitPrice:100.0,type:"2024.9.8 续费"}; d.renewals["r167"] = {id:"r167",studentId:"s8",date:"2026-5",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2025.3.28续费"}; d.renewals["r168"] = {id:"r168",studentId:"s9",date:"2026-5",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2026.4.16 续费"}; d.renewals["r169"] = {id:"r169",studentId:"s10",date:"2026-5",purchased:48,gifted:4,amount:5519.0,unitPrice:114.979166666667,type:"2026.4.2续费"}; d.renewals["r170"] = {id:"r170",studentId:"s11",date:"2026-5",purchased:28,gifted:1,amount:5376.0,unitPrice:112.0,type:"2025.9.27续费"}; d.renewals["r171"] = {id:"r171",studentId:"s12",date:"2026-5",purchased:48,gifted:4,amount:5568.0,unitPrice:116.0,type:"2025.2.27续费"}; d.renewals["r172"] = {id:"r172",studentId:"s13",date:"2026-5",purchased:48,gifted:2,amount:5568.0,unitPrice:116.0,type:"2024.11.2续费"}; d.renewals["r173"] = {id:"r173",studentId:"s14",date:"2026-5",purchased:48,gifted:4,amount:5380.0,unitPrice:112.083333333333,type:"2025.9.18续费"}; d.renewals["r174"] = {id:"r174",studentId:"s15",date:"2026-5",purchased:48,gifted:4,amount:5236.0,unitPrice:109.08,type:"2026.3.19续费"}; d.renewals["r175"] = {id:"r175",studentId:"s16",date:"2026-5",purchased:48,gifted:4,amount:5871.0,unitPrice:122.3125,type:"2025.3.2续费"}; d.renewals["r176"] = {id:"r176",studentId:"s17",date:"2026-5",purchased:48,gifted:3,amount:4800.0,unitPrice:100.0,type:"2023.8.26续费"}; d.renewals["r177"] = {id:"r177",studentId:"s18",date:"2026-5",purchased:48,gifted:4,amount:5376.0,unitPrice:112.0,type:"2025.3.28续费"}; d.renewals["r178"] = {id:"r178",studentId:"s19",date:"2026-5",purchased:48,gifted:4,amount:5077.0,unitPrice:105.770833333333,type:"2025.9.23续费"}; d.renewals["r179"] = {id:"r179",studentId:"s20",date:"2026-5",purchased:24,gifted:1,amount:2940.0,unitPrice:122.5,type:"2026.1.29 续费"}; d.renewals["r180"] = {id:"r180",studentId:"s21",date:"2026-5",purchased:48,gifted:4,amount:6165.0,unitPrice:128.4375,type:"2025.9.30续费"}; d.renewals["r181"] = {id:"r181",studentId:"s22",date:"2026-5",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2026.3.29续费"}; d.renewals["r182"] = {id:"r182",studentId:"s23",date:"2026-5",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.4.2 续费"}; d.renewals["r183"] = {id:"r183",studentId:"s24",date:"2026-5",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2025.9.2续费"}; d.renewals["r184"] = {id:"r184",studentId:"s25",date:"2026-5",purchased:48,gifted:4,amount:5000.0,unitPrice:104.166666666667,type:"2026.4.15 续费"}; d.renewals["r185"] = {id:"r185",studentId:"s26",date:"2026-5",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.9.30续费"}; d.renewals["r186"] = {id:"r186",studentId:"s27",date:"2026-5",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.11.12 续费"}; d.renewals["r187"] = {id:"r187",studentId:"s28",date:"2026-5",purchased:24,gifted:1,amount:2990.0,unitPrice:124.583333333333,type:"2025.11.12 续费"}; d.renewals["r188"] = {id:"r188",studentId:"s29",date:"2026-5",purchased:48,gifted:4,amount:5200.0,unitPrice:108.333333333333,type:"2025.9.29续费"}; d.renewals["r189"] = {id:"r189",studentId:"s30",date:"2026-5",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2023.8.31续费"}; d.renewals["r190"] = {id:"r190",studentId:"s31",date:"2026-5",purchased:48,gifted:3,amount:5780.0,unitPrice:120.416666666667,type:"2023.8.20续费"}; d.renewals["r191"] = {id:"r191",studentId:"s32",date:"2026-5",purchased:24,gifted:1,amount:2998.0,unitPrice:124.916666666667,type:"2025.9.28续费"}; d.renewals["r192"] = {id:"r192",studentId:"s33",date:"2026-5",purchased:48,gifted:4,amount:5880.0,unitPrice:122.5,type:"2024.11.29 续费"}; d.renewals["r193"] = {id:"r193",studentId:"s34",date:"2026-5",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2025.3.16续费"}; d.renewals["r194"] = {id:"r194",studentId:"s35",date:"2026-5",purchased:48,gifted:4,amount:5871.0,unitPrice:122.31,type:"2026.3.26续费"}; d.renewals["r195"] = {id:"r195",studentId:"s36",date:"2026-5",purchased:48,gifted:4,amount:5871.0,unitPrice:122.31,type:"2026.3.27续费"}; d.renewals["r196"] = {id:"r196",studentId:"s37",date:"2026-5",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.3.26续费"}; d.renewals["r197"] = {id:"r197",studentId:"s40",date:"2026-5",purchased:24,gifted:1,amount:3090.0,unitPrice:128.75,type:"2025.10.1续费"}; d.renewals["r198"] = {id:"r198",studentId:"s41",date:"2026-5",purchased:48,gifted:0,amount:4800.0,unitPrice:100.0,type:"2025.7.19续费"}; d.renewals["r199"] = {id:"r199",studentId:"s43",date:"2026-5",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2026.2.3 新生"}; d.renewals["r200"] = {id:"r200",studentId:"s44",date:"2026-5",purchased:48,gifted:3,amount:6180.0,unitPrice:128.75,type:"2026.3.1 新生"}; d.renewals["r201"] = {id:"r201",studentId:"s46",date:"2026-5",purchased:48,gifted:2,amount:6165.0,unitPrice:128.4375,type:"2024.8.11续费"}; d.renewals["r202"] = {id:"r202",studentId:"s47",date:"2026-5",purchased:24,gifted:1,amount:3035.0,unitPrice:126.458333333333,type:"2025.9.19续费"}; d.renewals["r203"] = {id:"r203",studentId:"s48",date:"2026-5",purchased:24,gifted:1,amount:3000.0,unitPrice:125.0,type:"2026.4.3 续费"}; d.renewals["r204"] = {id:"r204",studentId:"s49",date:"2026-5",purchased:48,gifted:5,amount:6180.0,unitPrice:128.75,type:"2025.3.18续费"}; d.renewals["r205"] = {id:"r205",studentId:"s50",date:"2026-5",purchased:48,gifted:4,amount:5668.0,unitPrice:118.083333333333,type:"2025.3.18续费"}; d.renewals["r206"] = {id:"r206",studentId:"s51",date:"2026-5",purchased:48,gifted:2,amount:5000.0,unitPrice:104.166666666667,type:"2025.10.18续费"}; d.renewals["r207"] = {id:"r207",studentId:"s54",date:"2026-5",purchased:48,gifted:4,amount:6180.0,unitPrice:128.75,type:"2026.4.5 续费"}; d.renewals["r208"] = {id:"r208",studentId:"s55",date:"2026-5",purchased:48,gifted:4,amount:5996.0,unitPrice:124.916666666667,type:"2025.3.7续费"}; d.renewals["r209"] = {id:"r209",studentId:"s56",date:"2026-5",purchased:48,gifted:4,amount:6000.0,unitPrice:125.0,type:"2026.4.3 续费"}; d.renewals["r210"] = {id:"r210",studentId:"s57",date:"2026-5",purchased:24,gifted:1,amount:3180.0,unitPrice:132.5,type:"2026.4.8 续费"}; d.renewals["r211"] = {id:"r211",studentId:"s58",date:"2026-5",purchased:50,gifted:0,amount:5000.0,unitPrice:100.0,type:"2025.8.25续费"}; d.renewals["r212"] = {id:"r212",studentId:"s59",date:"2026-5",purchased:48,gifted:2,amount:5200.0,unitPrice:108.333333333333,type:"2025.8.19续费"}; d.renewals["r213"] = {id:"r213",studentId:"s60",date:"2026-5",purchased:48,gifted:4,amount:5696.0,unitPrice:118.666666666667,type:"2025.9.5续费"}; d.renewals["r214"] = {id:"r214",studentId:"s61",date:"2026-5",purchased:48,gifted:0,amount:6180.0,unitPrice:128.75,type:"2024.6.8 续费"}; d.renewals["r215"] = {id:"r215",studentId:"s66",date:"2026-5",purchased:12,gifted:0,amount:2400.0,unitPrice:200.0,type:"2024.8.17报名"}; d.renewals["r216"] = {id:"r216",studentId:"s39",date:"2026-5",purchased:10,gifted:0,amount:1500.0,unitPrice:150.0,type:"2024.10.30 报名"}; d.renewals["r217"] = {id:"r217",studentId:"s42",date:"2026-5",purchased:25,gifted:0,amount:5000.0,unitPrice:200.0,type:"2025.11.10 新生"}; d.renewals["r218"] = {id:"r218",studentId:"s38",date:"2026-5",purchased:50,gifted:2,amount:10000.0,unitPrice:200.0,type:"2025.10.1续费"}; d.renewals["r219"] = {id:"r219",studentId:"s63",date:"2026-5",purchased:48,gifted:4,amount:5280.0,unitPrice:110.0,type:"2024.9.15 续费"}; d.renewals["r220"] = {id:"r220",studentId:"s64",date:"2026-5",purchased:48,gifted:2,amount:6000.0,unitPrice:125.0,type:"2024.3.15 续费"}; d.renewals["r221"] = {id:"r221",studentId:"s65",date:"2026-5",purchased:24,gifted:1,amount:2400.0,unitPrice:100.0,type:"2025.3.15续费"}; d.renewals["r222"] = {id:"r222",studentId:"s75",date:"2026-5",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2025.9.13 续费"}; d.renewals["r223"] = {id:"r223",studentId:"s76",date:"2026-5",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2025.9.13 续费"}; d.renewals["r224"] = {id:"r224",studentId:"s79",date:"2026-5",purchased:12,gifted:0,amount:1320.0,unitPrice:110.0,type:"2026.3.8 续费"}; d.renewals["r225"] = {id:"r225",studentId:"s81",date:"2026-5",purchased:48,gifted:0,amount:4000.0,unitPrice:83.3333333333333,type:"2025.3.30 报名"}; d.renewals["r226"] = {id:"r226",studentId:"s82",date:"2026-5",purchased:48,gifted:4,amount:2880.0,unitPrice:60.0,type:"2025.11.23 续费"}; d.renewals["r227"] = {id:"r227",studentId:"s83",date:"2026-5",purchased:48,gifted:6,amount:4980.0,unitPrice:103.75,type:"2025.9.20 报名"}; d.renewals["r228"] = {id:"r228",studentId:"s84",date:"2026-5",purchased:48,gifted:6,amount:4980.0,unitPrice:103.75,type:"2025.11.29 报名"}; d.renewals["r229"] = {id:"r229",studentId:"s85",date:"2026-5",purchased:24,gifted:0,amount:2400.0,unitPrice:100.0,type:"2026.1. 29 报名"}; d.renewals["r230"] = {id:"r230",studentId:"s86",date:"2026-5",purchased:17,gifted:0,amount:1700.0,unitPrice:100.0,type:"2026.3.23 报名"}; d.renewals["r231"] = {id:"r231",studentId:"s87",date:"2026-5",purchased:10,gifted:0,amount:1200.0,unitPrice:120.0,type:"2026.3.27 报名"}; d.renewals["r232"] = {id:"r232",studentId:"s93",date:"2026-5",purchased:10,gifted:0,amount:880.0,unitPrice:88.0,type:"2026.4.21 报名"}; d.renewals["r233"] = {id:"r233",studentId:"s88",date:"2026-5",purchased:10,gifted:0,amount:880.0,unitPrice:88.0,type:"2026.4.9 续费"}; d.renewals["r234"] = {id:"r234",studentId:"s94",date:"2026-5",purchased:20,gifted:0,amount:2000.0,unitPrice:100.0,type:"2025.6.24 新生"}; d.renewals["r235"] = {id:"r235",studentId:"s42",date:"2026-5",purchased:20,gifted:0,amount:3000.0,unitPrice:150.0,type:"2025.12.3 报名"}; d.renewals["r236"] = {id:"r236",studentId:"s77",date:"2026-5",purchased:48,gifted:4,amount:4800.0,unitPrice:100.0,type:"2025.3.30 续费"}; d.renewals["r237"] = {id:"r237",studentId:"s74",date:"2026-5",purchased:48,gifted:4,amount:4600.0,unitPrice:95.8333333333333,type:"2024.3.23续费"}; d.renewals["r238"] = {id:"r238",studentId:"s78",date:"2026-5",purchased:24,gifted:2,amount:2540.0,unitPrice:105.833333333333,type:"2025.4.3 续费"}; d.renewals["r239"] = {id:"r239",studentId:"s80",date:"2026-5",purchased:20,gifted:0,amount:1800.0,unitPrice:90.0,type:"2025.11.4 续费"}; d.attendance = {}; d.attendance["a1"] = {id:"a1",studentId:"s1",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:48,remG:8,remTotal:56}; d.attendance["a2"] = {id:"a2",studentId:"s2",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:27,remG:4,remTotal:31}; d.attendance["a3"] = {id:"a3",studentId:"s3",month:"2026-03",week1:1,week2:1,week3:1,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a4"] = {id:"a4",studentId:"s4",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:5,remG:4,remTotal:9}; d.attendance["a5"] = {id:"a5",studentId:"s5",month:"2026-03",week1:1,week2:0,week3:1,week4:0,other:0,remP:30,remG:4,remTotal:34}; d.attendance["a6"] = {id:"a6",studentId:"s6",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:16,remG:6,remTotal:22}; d.attendance["a7"] = {id:"a7",studentId:"s7",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:9,remG:2,remTotal:11}; d.attendance["a8"] = {id:"a8",studentId:"s8",month:"2026-03",week1:2,week2:1,week3:1,week4:1,other:0,remP:17,remG:4,remTotal:21}; d.attendance["a9"] = {id:"a9",studentId:"s9",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:-3,remG:4,remTotal:1}; d.attendance["a10"] = {id:"a10",studentId:"s10",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:5,remG:4,remTotal:9}; d.attendance["a11"] = {id:"a11",studentId:"s11",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:33,remG:3,remTotal:36}; d.attendance["a12"] = {id:"a12",studentId:"s12",month:"2026-03",week1:1,week2:0,week3:0,week4:2,other:0,remP:18,remG:4,remTotal:22}; d.attendance["a13"] = {id:"a13",studentId:"s13",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:16,remG:2,remTotal:18}; d.attendance["a14"] = {id:"a14",studentId:"s14",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:29,remG:4,remTotal:33}; d.attendance["a15"] = {id:"a15",studentId:"s15",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:46,remG:4,remTotal:50}; d.attendance["a16"] = {id:"a16",studentId:"s16",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:16,remG:4,remTotal:20}; d.attendance["a17"] = {id:"a17",studentId:"s17",month:"2026-03",week1:1,week2:0,week3:1,week4:0,other:0,remP:6,remG:11,remTotal:17}; d.attendance["a18"] = {id:"a18",studentId:"s18",month:"2026-03",week1:1,week2:1,week3:1,week4:0,other:0,remP:18,remG:4,remTotal:22}; d.attendance["a19"] = {id:"a19",studentId:"s19",month:"2026-03",week1:5,week2:1,week3:1,week4:1,other:0,remP:28,remG:4,remTotal:32}; d.attendance["a20"] = {id:"a20",studentId:"s20",month:"2026-03",week1:0,week2:0,week3:1,week4:1,other:0,remP:11,remG:1,remTotal:12}; d.attendance["a21"] = {id:"a21",studentId:"s21",month:"2026-03",week1:3,week2:1,week3:1,week4:1,other:0,remP:35,remG:4,remTotal:39}; d.attendance["a22"] = {id:"a22",studentId:"s22",month:"2026-03",week1:2,week2:1,week3:0,week4:1,other:0,remP:46,remG:4,remTotal:50}; d.attendance["a23"] = {id:"a23",studentId:"s23",month:"2026-03",week1:2,week2:1,week3:1,week4:1,other:0,remP:1,remG:4,remTotal:5}; d.attendance["a24"] = {id:"a24",studentId:"s24",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:0,remP:29,remG:4,remTotal:33}; d.attendance["a25"] = {id:"a25",studentId:"s25",month:"2026-03",week1:2,week2:1,week3:1,week4:1,other:0,remP:2,remG:3,remTotal:5}; d.attendance["a26"] = {id:"a26",studentId:"s26",month:"2026-03",week1:1,week2:1,week3:0,week4:1,other:0,remP:19,remG:1,remTotal:20}; d.attendance["a27"] = {id:"a27",studentId:"s27",month:"2026-03",week1:1,week2:1,week3:0,week4:1,other:0,remP:17,remG:1,remTotal:18}; d.attendance["a28"] = {id:"a28",studentId:"s28",month:"2026-03",week1:1,week2:1,week3:0,week4:1,other:0,remP:17,remG:1,remTotal:18}; d.attendance["a29"] = {id:"a29",studentId:"s29",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:28,remG:4,remTotal:32}; d.attendance["a30"] = {id:"a30",studentId:"s30",month:"2026-03",week1:0,week2:1,week3:0,week4:0,other:0,remP:11,remG:6,remTotal:17}; d.attendance["a31"] = {id:"a31",studentId:"s31",month:"2026-03",week1:0,week2:1,week3:0,week4:0,other:0,remP:3,remG:6,remTotal:9}; d.attendance["a32"] = {id:"a32",studentId:"s32",month:"2026-03",week1:2,week2:1,week3:1,week4:0,other:0,remP:12,remG:1,remTotal:13}; d.attendance["a33"] = {id:"a33",studentId:"s33",month:"2026-03",week1:2,week2:1,week3:1,week4:1,other:0,remP:11,remG:4,remTotal:15}; d.attendance["a34"] = {id:"a34",studentId:"s34",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:12,remG:4,remTotal:16}; d.attendance["a35"] = {id:"a35",studentId:"s35",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:58,remG:8,remTotal:66}; d.attendance["a36"] = {id:"a36",studentId:"s36",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:46,remG:8,remTotal:54}; d.attendance["a37"] = {id:"a37",studentId:"s37",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:52,remG:8,remTotal:60}; d.attendance["a38"] = {id:"a38",studentId:"s38",month:"2026-03",week1:4,week2:0,week3:1,week4:1,other:0,remP:13,remG:2,remTotal:15}; d.attendance["a39"] = {id:"a39",studentId:"s39",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:9,remG:0,remTotal:9}; d.attendance["a40"] = {id:"a40",studentId:"s40",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:14,remG:1,remTotal:15}; d.attendance["a41"] = {id:"a41",studentId:"s41",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:14,remG:0,remTotal:14}; d.attendance["a42"] = {id:"a42",studentId:"s42",month:"2026-03",week1:0,week2:0,week3:2,week4:0,other:0,remP:11,remG:0,remTotal:11}; d.attendance["a43"] = {id:"a43",studentId:"s43",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:42,remG:4,remTotal:46}; d.attendance["a44"] = {id:"a44",studentId:"s44",month:"2026-03",week1:2,week2:1,week3:1,week4:1,other:0,remP:43,remG:3,remTotal:46}; d.attendance["a45"] = {id:"a45",studentId:"s45",month:"2026-03",week1:1,week2:1,week3:1,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a46"] = {id:"a46",studentId:"s46",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:5,remG:2,remTotal:7}; d.attendance["a47"] = {id:"a47",studentId:"s47",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:8,remG:1,remTotal:9}; d.attendance["a48"] = {id:"a48",studentId:"s48",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:2,remG:2,remTotal:4}; d.attendance["a49"] = {id:"a49",studentId:"s49",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:1,remP:23,remG:6,remTotal:29}; d.attendance["a50"] = {id:"a50",studentId:"s50",month:"2026-03",week1:0,week2:0,week3:1,week4:1,other:1,remP:20,remG:6,remTotal:26}; d.attendance["a51"] = {id:"a51",studentId:"s51",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:1,remP:20,remG:4,remTotal:24}; d.attendance["a52"] = {id:"a52",studentId:"s52",month:"2026-03",week1:1,week2:0,week3:0,week4:0,other:0,remP:35,remG:4,remTotal:39}; d.attendance["a53"] = {id:"a53",studentId:"s53",month:"2026-03",week1:1,week2:0,week3:0,week4:0,other:0,remP:35,remG:4,remTotal:39}; d.attendance["a54"] = {id:"a54",studentId:"s54",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:1,remP:0,remG:5,remTotal:5}; d.attendance["a55"] = {id:"a55",studentId:"s55",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:1,remP:15,remG:6,remTotal:21}; d.attendance["a56"] = {id:"a56",studentId:"s56",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:1,remP:1,remG:4,remTotal:5}; d.attendance["a57"] = {id:"a57",studentId:"s57",month:"2026-03",week1:1,week2:0,week3:0,week4:1,other:1,remP:-2,remG:0,remTotal:-2}; d.attendance["a58"] = {id:"a58",studentId:"s58",month:"2026-03",week1:1,week2:1,week3:1,week4:0,other:0,remP:26,remG:0,remTotal:26}; d.attendance["a59"] = {id:"a59",studentId:"s59",month:"2026-03",week1:0,week2:1,week3:1,week4:0,other:0,remP:19,remG:0,remTotal:19}; d.attendance["a60"] = {id:"a60",studentId:"s60",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:22,remG:4,remTotal:26}; d.attendance["a61"] = {id:"a61",studentId:"s61",month:"2026-03",week1:1,week2:0,week3:0,week4:1,other:1,remP:0,remG:21,remTotal:21}; d.attendance["a62"] = {id:"a62",studentId:"s62",month:"2026-03",week1:2,week2:0,week3:0,week4:0,other:0,remP:0,remG:1,remTotal:1}; d.attendance["a63"] = {id:"a63",studentId:"s63",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:2,remTotal:5}; d.attendance["a64"] = {id:"a64",studentId:"s64",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a65"] = {id:"a65",studentId:"s65",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a66"] = {id:"a66",studentId:"s66",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:8,remG:0,remTotal:8}; d.attendance["a67"] = {id:"a67",studentId:"s67",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a68"] = {id:"a68",studentId:"s68",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a69"] = {id:"a69",studentId:"s69",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:5,remTotal:6}; d.attendance["a70"] = {id:"a70",studentId:"s70",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a71"] = {id:"a71",studentId:"s71",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:13,remG:5,remTotal:18}; d.attendance["a72"] = {id:"a72",studentId:"s72",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:10,remG:3,remTotal:13}; d.attendance["a73"] = {id:"a73",studentId:"s73",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:20,remG:5,remTotal:25}; d.attendance["a74"] = {id:"a74",studentId:"s74",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:1,remTotal:1}; d.attendance["a75"] = {id:"a75",studentId:"s75",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:34,remG:4,remTotal:38}; d.attendance["a76"] = {id:"a76",studentId:"s76",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:0,remP:41,remG:4,remTotal:45}; d.attendance["a77"] = {id:"a77",studentId:"s77",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:40,remG:4,remTotal:44}; d.attendance["a78"] = {id:"a78",studentId:"s78",month:"2026-03",week1:0,week2:1,week3:1,week4:0,other:0,remP:15,remG:2,remTotal:17}; d.attendance["a79"] = {id:"a79",studentId:"s79",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:7,remG:0,remTotal:7}; d.attendance["a80"] = {id:"a80",studentId:"s80",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a81"] = {id:"a81",studentId:"s81",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:1,remP:9,remG:0,remTotal:9}; d.attendance["a82"] = {id:"a82",studentId:"s82",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:32,remG:4,remTotal:36}; d.attendance["a83"] = {id:"a83",studentId:"s83",month:"2026-03",week1:1,week2:0,week3:1,week4:1,other:0,remP:20,remG:6,remTotal:26}; d.attendance["a84"] = {id:"a84",studentId:"s42",month:"2026-03",week1:0,week2:0,week3:2,week4:0,other:0,remP:8,remG:0,remTotal:8}; d.attendance["a85"] = {id:"a85",studentId:"s84",month:"2026-03",week1:1,week2:1,week3:2,week4:1,other:0,remP:28,remG:6,remTotal:34}; d.attendance["a86"] = {id:"a86",studentId:"s85",month:"2026-03",week1:1,week2:1,week3:1,week4:1,other:0,remP:17,remG:0,remTotal:17}; d.attendance["a87"] = {id:"a87",studentId:"s86",month:"2026-03",week1:1,week2:1,week3:0,week4:1,other:0,remP:15,remG:0,remTotal:15}; d.attendance["a88"] = {id:"a88",studentId:"s87",month:"2026-03",week1:0,week2:0,week3:0,week4:1,other:0,remP:9,remG:0,remTotal:9}; d.attendance["a89"] = {id:"a89",studentId:"s88",month:"2026-03",week1:0,week2:1,week3:1,week4:1,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a90"] = {id:"a90",studentId:"s89",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:6,remG:2,remTotal:8}; d.attendance["a91"] = {id:"a91",studentId:"s90",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:4,remG:4,remTotal:8}; d.attendance["a92"] = {id:"a92",studentId:"s91",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a93"] = {id:"a93",studentId:"s92",month:"2026-03",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a94"] = {id:"a94",studentId:"s1",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:43,remG:8,remTotal:51}; d.attendance["a95"] = {id:"a95",studentId:"s2",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:22,remG:4,remTotal:26}; d.attendance["a96"] = {id:"a96",studentId:"s3",month:"2026-04",week1:1,week2:1,week3:0,week4:1,other:0,remP:21,remG:3,remTotal:24}; d.attendance["a97"] = {id:"a97",studentId:"s4",month:"2026-04",week1:1,week2:0,week3:1,week4:1,other:1,remP:1,remG:4,remTotal:5}; d.attendance["a98"] = {id:"a98",studentId:"s5",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:25,remG:4,remTotal:29}; d.attendance["a99"] = {id:"a99",studentId:"s6",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:16,remG:6,remTotal:22}; d.attendance["a100"] = {id:"a100",studentId:"s7",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:9,remG:2,remTotal:11}; d.attendance["a101"] = {id:"a101",studentId:"s8",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:0,remP:15,remG:4,remTotal:19}; d.attendance["a102"] = {id:"a102",studentId:"s9",month:"2026-04",week1:1,week2:0,week3:1,week4:1,other:0,remP:45,remG:5,remTotal:50}; d.attendance["a103"] = {id:"a103",studentId:"s10",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:49,remG:8,remTotal:57}; d.attendance["a104"] = {id:"a104",studentId:"s11",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:30,remG:3,remTotal:33}; d.attendance["a105"] = {id:"a105",studentId:"s12",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:15,remG:4,remTotal:19}; d.attendance["a106"] = {id:"a106",studentId:"s13",month:"2026-04",week1:0,week2:0,week3:1,week4:1,other:0,remP:14,remG:2,remTotal:16}; d.attendance["a107"] = {id:"a107",studentId:"s14",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:25,remG:4,remTotal:29}; d.attendance["a108"] = {id:"a108",studentId:"s15",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:43,remG:4,remTotal:47}; d.attendance["a109"] = {id:"a109",studentId:"s16",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:13,remG:4,remTotal:17}; d.attendance["a110"] = {id:"a110",studentId:"s17",month:"2026-04",week1:1,week2:0,week3:0,week4:0,other:0,remP:5,remG:11,remTotal:16}; d.attendance["a111"] = {id:"a111",studentId:"s18",month:"2026-04",week1:1,week2:1,week3:1,week4:0,other:0,remP:15,remG:4,remTotal:19}; d.attendance["a112"] = {id:"a112",studentId:"s19",month:"2026-04",week1:1,week2:1,week3:1,week4:0,other:0,remP:25,remG:4,remTotal:29}; d.attendance["a113"] = {id:"a113",studentId:"s20",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:8,remG:1,remTotal:9}; d.attendance["a114"] = {id:"a114",studentId:"s21",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:32,remG:4,remTotal:36}; d.attendance["a115"] = {id:"a115",studentId:"s22",month:"2026-04",week1:0,week2:1,week3:0,week4:1,other:0,remP:44,remG:4,remTotal:48}; d.attendance["a116"] = {id:"a116",studentId:"s23",month:"2026-04",week1:0,week2:0,week3:1,week4:1,other:0,remP:47,remG:8,remTotal:55}; d.attendance["a117"] = {id:"a117",studentId:"s24",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:26,remG:4,remTotal:30}; d.attendance["a118"] = {id:"a118",studentId:"s25",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:0,remP:48,remG:7,remTotal:55}; d.attendance["a119"] = {id:"a119",studentId:"s26",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:0,remP:17,remG:1,remTotal:18}; d.attendance["a120"] = {id:"a120",studentId:"s27",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:0,remP:15,remG:1,remTotal:16}; d.attendance["a121"] = {id:"a121",studentId:"s28",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:0,remP:15,remG:1,remTotal:16}; d.attendance["a122"] = {id:"a122",studentId:"s29",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:24,remG:4,remTotal:28}; d.attendance["a123"] = {id:"a123",studentId:"s30",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:11,remG:6,remTotal:17}; d.attendance["a124"] = {id:"a124",studentId:"s31",month:"2026-04",week1:0,week2:0,week3:0,week4:1,other:0,remP:2,remG:6,remTotal:8}; d.attendance["a125"] = {id:"a125",studentId:"s32",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:9,remG:1,remTotal:10}; d.attendance["a126"] = {id:"a126",studentId:"s33",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:8,remG:4,remTotal:12}; d.attendance["a127"] = {id:"a127",studentId:"s34",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:9,remG:4,remTotal:13}; d.attendance["a128"] = {id:"a128",studentId:"s35",month:"2026-04",week1:1,week2:0,week3:1,week4:0,other:2,remP:54,remG:8,remTotal:62}; d.attendance["a129"] = {id:"a129",studentId:"s36",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:41,remG:8,remTotal:49}; d.attendance["a130"] = {id:"a130",studentId:"s37",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:47,remG:8,remTotal:55}; d.attendance["a131"] = {id:"a131",studentId:"s40",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:11,remG:1,remTotal:12}; d.attendance["a132"] = {id:"a132",studentId:"s41",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:11,remG:0,remTotal:11}; d.attendance["a133"] = {id:"a133",studentId:"s43",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:37,remG:4,remTotal:41}; d.attendance["a134"] = {id:"a134",studentId:"s44",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:40,remG:3,remTotal:43}; d.attendance["a135"] = {id:"a135",studentId:"s46",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:5,remG:2,remTotal:7}; d.attendance["a136"] = {id:"a136",studentId:"s47",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:8,remG:1,remTotal:9}; d.attendance["a137"] = {id:"a137",studentId:"s48",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:22,remG:3,remTotal:25}; d.attendance["a138"] = {id:"a138",studentId:"s49",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:1,remP:19,remG:6,remTotal:25}; d.attendance["a139"] = {id:"a139",studentId:"s50",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:1,remP:17,remG:6,remTotal:23}; d.attendance["a140"] = {id:"a140",studentId:"s51",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:1,remP:16,remG:4,remTotal:20}; d.attendance["a141"] = {id:"a141",studentId:"s54",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:45,remG:9,remTotal:54}; d.attendance["a142"] = {id:"a142",studentId:"s55",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:11,remG:6,remTotal:17}; d.attendance["a143"] = {id:"a143",studentId:"s56",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:45,remG:8,remTotal:53}; d.attendance["a144"] = {id:"a144",studentId:"s57",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:19,remG:1,remTotal:20}; d.attendance["a145"] = {id:"a145",studentId:"s58",month:"2026-04",week1:0,week2:1,week3:1,week4:0,other:0,remP:24,remG:0,remTotal:24}; d.attendance["a146"] = {id:"a146",studentId:"s59",month:"2026-04",week1:0,week2:0,week3:1,week4:1,other:0,remP:17,remG:0,remTotal:17}; d.attendance["a147"] = {id:"a147",studentId:"s60",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:19,remG:4,remTotal:23}; d.attendance["a148"] = {id:"a148",studentId:"s61",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:21,remTotal:21}; d.attendance["a149"] = {id:"a149",studentId:"s66",month:"2026-04",week1:0,week2:4,week3:2,week4:0,other:0,remP:2,remG:0,remTotal:2}; d.attendance["a150"] = {id:"a150",studentId:"s39",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:9,remG:0,remTotal:9}; d.attendance["a151"] = {id:"a151",studentId:"s42",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:11,remG:0,remTotal:11}; d.attendance["a152"] = {id:"a152",studentId:"s38",month:"2026-04",week1:0,week2:1,week3:0,week4:0,other:0,remP:12,remG:2,remTotal:14}; d.attendance["a153"] = {id:"a153",studentId:"s63",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:2,remTotal:5}; d.attendance["a154"] = {id:"a154",studentId:"s64",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a155"] = {id:"a155",studentId:"s65",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a156"] = {id:"a156",studentId:"s67",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a157"] = {id:"a157",studentId:"s68",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a158"] = {id:"a158",studentId:"s69",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:5,remTotal:6}; d.attendance["a159"] = {id:"a159",studentId:"s70",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a160"] = {id:"a160",studentId:"s71",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:13,remG:5,remTotal:18}; d.attendance["a161"] = {id:"a161",studentId:"s72",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:10,remG:3,remTotal:13}; d.attendance["a162"] = {id:"a162",studentId:"s73",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:20,remG:5,remTotal:25}; d.attendance["a163"] = {id:"a163",studentId:"s75",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:30,remG:4,remTotal:34}; d.attendance["a164"] = {id:"a164",studentId:"s76",month:"2026-04",week1:1,week2:0,week3:1,week4:1,other:0,remP:38,remG:4,remTotal:42}; d.attendance["a165"] = {id:"a165",studentId:"s79",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a166"] = {id:"a166",studentId:"s81",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:5,remG:0,remTotal:5}; d.attendance["a167"] = {id:"a167",studentId:"s82",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:28,remG:4,remTotal:32}; d.attendance["a168"] = {id:"a168",studentId:"s83",month:"2026-04",week1:0,week2:1,week3:1,week4:1,other:0,remP:17,remG:6,remTotal:23}; d.attendance["a169"] = {id:"a169",studentId:"s84",month:"2026-04",week1:1,week2:1,week3:0,week4:2,other:1,remP:23,remG:6,remTotal:29}; d.attendance["a170"] = {id:"a170",studentId:"s85",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:1,remP:12,remG:0,remTotal:12}; d.attendance["a171"] = {id:"a171",studentId:"s86",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:11,remG:0,remTotal:11}; d.attendance["a172"] = {id:"a172",studentId:"s87",month:"2026-04",week1:1,week2:1,week3:0,week4:0,other:0,remP:7,remG:0,remTotal:7}; d.attendance["a173"] = {id:"a173",studentId:"s93",month:"2026-04",week1:0,week2:0,week3:1,week4:1,other:0,remP:8,remG:0,remTotal:8}; d.attendance["a174"] = {id:"a174",studentId:"s88",month:"2026-04",week1:1,week2:1,week3:1,week4:1,other:0,remP:6,remG:0,remTotal:6}; d.attendance["a175"] = {id:"a175",studentId:"s42",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:8,remG:0,remTotal:8}; d.attendance["a176"] = {id:"a176",studentId:"s77",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:40,remG:4,remTotal:44}; d.attendance["a177"] = {id:"a177",studentId:"s74",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:1,remTotal:1}; d.attendance["a178"] = {id:"a178",studentId:"s78",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:15,remG:2,remTotal:17}; d.attendance["a179"] = {id:"a179",studentId:"s80",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a180"] = {id:"a180",studentId:"s89",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:6,remG:2,remTotal:8}; d.attendance["a181"] = {id:"a181",studentId:"s90",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:4,remG:4,remTotal:8}; d.attendance["a182"] = {id:"a182",studentId:"s91",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a183"] = {id:"a183",studentId:"s92",month:"2026-04",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a184"] = {id:"a184",studentId:"s1",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:39,remG:8,remTotal:47}; d.attendance["a185"] = {id:"a185",studentId:"s2",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:18,remG:4,remTotal:22}; d.attendance["a186"] = {id:"a186",studentId:"s3",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:17,remG:3,remTotal:20}; d.attendance["a187"] = {id:"a187",studentId:"s4",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:0,remP:-2,remG:4,remTotal:2}; d.attendance["a188"] = {id:"a188",studentId:"s5",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:21,remG:4,remTotal:25}; d.attendance["a189"] = {id:"a189",studentId:"s6",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:16,remG:6,remTotal:22}; d.attendance["a190"] = {id:"a190",studentId:"s7",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:9,remG:2,remTotal:11}; d.attendance["a191"] = {id:"a191",studentId:"s8",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:12,remG:4,remTotal:16}; d.attendance["a192"] = {id:"a192",studentId:"s9",month:"2026-05",week1:1,week2:0,week3:1,week4:1,other:1,remP:41,remG:5,remTotal:46}; d.attendance["a193"] = {id:"a193",studentId:"s10",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:46,remG:8,remTotal:54}; d.attendance["a194"] = {id:"a194",studentId:"s11",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:28,remG:3,remTotal:31}; d.attendance["a195"] = {id:"a195",studentId:"s12",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:12,remG:4,remTotal:16}; d.attendance["a196"] = {id:"a196",studentId:"s13",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:12,remG:2,remTotal:14}; d.attendance["a197"] = {id:"a197",studentId:"s14",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:22,remG:4,remTotal:26}; d.attendance["a198"] = {id:"a198",studentId:"s15",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:40,remG:4,remTotal:44}; d.attendance["a199"] = {id:"a199",studentId:"s16",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:10,remG:4,remTotal:14}; d.attendance["a200"] = {id:"a200",studentId:"s17",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:5,remG:11,remTotal:16}; d.attendance["a201"] = {id:"a201",studentId:"s18",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:12,remG:4,remTotal:16}; d.attendance["a202"] = {id:"a202",studentId:"s19",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:23,remG:4,remTotal:27}; d.attendance["a203"] = {id:"a203",studentId:"s20",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:5,remG:1,remTotal:6}; d.attendance["a204"] = {id:"a204",studentId:"s21",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:29,remG:4,remTotal:33}; d.attendance["a205"] = {id:"a205",studentId:"s22",month:"2026-05",week1:1,week2:1,week3:0,week4:1,other:1,remP:40,remG:4,remTotal:44}; d.attendance["a206"] = {id:"a206",studentId:"s23",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:43,remG:8,remTotal:51}; d.attendance["a207"] = {id:"a207",studentId:"s24",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:22,remG:4,remTotal:26}; d.attendance["a208"] = {id:"a208",studentId:"s25",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:1,remP:47,remG:7,remTotal:54}; d.attendance["a209"] = {id:"a209",studentId:"s26",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:15,remG:1,remTotal:16}; d.attendance["a210"] = {id:"a210",studentId:"s27",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:13,remG:1,remTotal:14}; d.attendance["a211"] = {id:"a211",studentId:"s28",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:13,remG:1,remTotal:14}; d.attendance["a212"] = {id:"a212",studentId:"s29",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:20,remG:4,remTotal:24}; d.attendance["a213"] = {id:"a213",studentId:"s30",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:9,remG:6,remTotal:15}; d.attendance["a214"] = {id:"a214",studentId:"s31",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:0,remG:6,remTotal:6}; d.attendance["a215"] = {id:"a215",studentId:"s32",month:"2026-05",week1:0,week2:1,week3:0,week4:1,other:0,remP:7,remG:1,remTotal:8}; d.attendance["a216"] = {id:"a216",studentId:"s33",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:4,remG:4,remTotal:8}; d.attendance["a217"] = {id:"a217",studentId:"s34",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:5,remG:4,remTotal:9}; d.attendance["a218"] = {id:"a218",studentId:"s35",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:50,remG:8,remTotal:58}; d.attendance["a219"] = {id:"a219",studentId:"s36",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:37,remG:8,remTotal:45}; d.attendance["a220"] = {id:"a220",studentId:"s37",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:43,remG:8,remTotal:51}; d.attendance["a221"] = {id:"a221",studentId:"s40",month:"2026-05",week1:0,week2:0,week3:1,week4:0,other:1,remP:9,remG:1,remTotal:10}; d.attendance["a222"] = {id:"a222",studentId:"s41",month:"2026-05",week1:1,week2:1,week3:0,week4:1,other:1,remP:7,remG:0,remTotal:7}; d.attendance["a223"] = {id:"a223",studentId:"s43",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:34,remG:4,remTotal:38}; d.attendance["a224"] = {id:"a224",studentId:"s44",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:36,remG:3,remTotal:39}; d.attendance["a225"] = {id:"a225",studentId:"s46",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:5,remG:2,remTotal:7}; d.attendance["a226"] = {id:"a226",studentId:"s47",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:8,remG:1,remTotal:9}; d.attendance["a227"] = {id:"a227",studentId:"s48",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:19,remG:3,remTotal:22}; d.attendance["a228"] = {id:"a228",studentId:"s49",month:"2026-05",week1:0,week2:0,week3:1,week4:0,other:1,remP:17,remG:6,remTotal:23}; d.attendance["a229"] = {id:"a229",studentId:"s50",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:0,remP:15,remG:6,remTotal:21}; d.attendance["a230"] = {id:"a230",studentId:"s51",month:"2026-05",week1:0,week2:1,week3:0,week4:1,other:0,remP:14,remG:4,remTotal:18}; d.attendance["a231"] = {id:"a231",studentId:"s54",month:"2026-05",week1:0,week2:0,week3:1,week4:0,other:0,remP:44,remG:9,remTotal:53}; d.attendance["a232"] = {id:"a232",studentId:"s55",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:7,remG:6,remTotal:13}; d.attendance["a233"] = {id:"a233",studentId:"s56",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:41,remG:8,remTotal:49}; d.attendance["a234"] = {id:"a234",studentId:"s57",month:"2026-05",week1:0,week2:0,week3:1,week4:1,other:1,remP:16,remG:1,remTotal:17}; d.attendance["a235"] = {id:"a235",studentId:"s58",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:24,remG:0,remTotal:24}; d.attendance["a236"] = {id:"a236",studentId:"s59",month:"2026-05",week1:0,week2:1,week3:1,week4:0,other:1,remP:14,remG:0,remTotal:14}; d.attendance["a237"] = {id:"a237",studentId:"s60",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:1,remP:15,remG:4,remTotal:19}; d.attendance["a238"] = {id:"a238",studentId:"s61",month:"2026-05",week1:0,week2:0,week3:0,week4:2,other:0,remP:-2,remG:21,remTotal:19}; d.attendance["a239"] = {id:"a239",studentId:"s66",month:"2026-05",week1:0,week2:0,week3:0,week4:2,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a240"] = {id:"a240",studentId:"s39",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:9,remG:0,remTotal:9}; d.attendance["a241"] = {id:"a241",studentId:"s42",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:11,remG:0,remTotal:11}; d.attendance["a242"] = {id:"a242",studentId:"s38",month:"2026-05",week1:0,week2:1,week3:4,week4:2,other:0,remP:5,remG:2,remTotal:7}; d.attendance["a243"] = {id:"a243",studentId:"s63",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:2,remTotal:5}; d.attendance["a244"] = {id:"a244",studentId:"s64",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a245"] = {id:"a245",studentId:"s65",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a246"] = {id:"a246",studentId:"s67",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:0,remTotal:0}; d.attendance["a247"] = {id:"a247",studentId:"s68",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:2,remTotal:2}; d.attendance["a248"] = {id:"a248",studentId:"s69",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:5,remTotal:6}; d.attendance["a249"] = {id:"a249",studentId:"s70",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a250"] = {id:"a250",studentId:"s71",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:13,remG:5,remTotal:18}; d.attendance["a251"] = {id:"a251",studentId:"s72",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:10,remG:3,remTotal:13}; d.attendance["a252"] = {id:"a252",studentId:"s73",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:20,remG:5,remTotal:25}; d.attendance["a253"] = {id:"a253",studentId:"s75",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:0,remP:27,remG:4,remTotal:31}; d.attendance["a254"] = {id:"a254",studentId:"s76",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:0,remP:35,remG:4,remTotal:39}; d.attendance["a255"] = {id:"a255",studentId:"s79",month:"2026-05",week1:1,week2:1,week3:0,week4:0,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a256"] = {id:"a256",studentId:"s81",month:"2026-05",week1:1,week2:1,week3:1,week4:1,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a257"] = {id:"a257",studentId:"s82",month:"2026-05",week1:1,week2:1,week3:1,week4:1,other:0,remP:24,remG:4,remTotal:28}; d.attendance["a258"] = {id:"a258",studentId:"s83",month:"2026-05",week1:1,week2:1,week3:1,week4:0,other:0,remP:14,remG:6,remTotal:20}; d.attendance["a259"] = {id:"a259",studentId:"s84",month:"2026-05",week1:2,week2:2,week3:1,week4:2,other:0,remP:16,remG:6,remTotal:22}; d.attendance["a260"] = {id:"a260",studentId:"s85",month:"2026-05",week1:1,week2:1,week3:1,week4:1,other:0,remP:8,remG:0,remTotal:8}; d.attendance["a261"] = {id:"a261",studentId:"s86",month:"2026-05",week1:1,week2:1,week3:1,week4:1,other:0,remP:7,remG:0,remTotal:7}; d.attendance["a262"] = {id:"a262",studentId:"s87",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:7,remG:0,remTotal:7}; d.attendance["a263"] = {id:"a263",studentId:"s93",month:"2026-05",week1:1,week2:1,week3:1,week4:1,other:0,remP:4,remG:0,remTotal:4}; d.attendance["a264"] = {id:"a264",studentId:"s88",month:"2026-05",week1:0,week2:1,week3:1,week4:1,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a265"] = {id:"a265",studentId:"s94",month:"2026-05",week1:0,week2:0,week3:0,week4:2,other:0,remP:18,remG:0,remTotal:18}; d.attendance["a266"] = {id:"a266",studentId:"s42",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:8,remG:0,remTotal:8}; d.attendance["a267"] = {id:"a267",studentId:"s77",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:40,remG:4,remTotal:44}; d.attendance["a268"] = {id:"a268",studentId:"s74",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:0,remG:1,remTotal:1}; d.attendance["a269"] = {id:"a269",studentId:"s78",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:15,remG:2,remTotal:17}; d.attendance["a270"] = {id:"a270",studentId:"s80",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:0,remTotal:1}; d.attendance["a271"] = {id:"a271",studentId:"s89",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:6,remG:2,remTotal:8}; d.attendance["a272"] = {id:"a272",studentId:"s90",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:4,remG:4,remTotal:8}; d.attendance["a273"] = {id:"a273",studentId:"s91",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:3,remG:0,remTotal:3}; d.attendance["a274"] = {id:"a274",studentId:"s92",month:"2026-05",week1:0,week2:0,week3:0,week4:0,other:0,remP:1,remG:0,remTotal:1}; d.save(); } function getDefaultData() { return { version: 1, teachers: {}, students: {}, renewals: {}, attendance: {}, teacherOrder: [], studentOrder: [], }; } function loadData() { try { const raw = localStorage.getItem(LS_KEY); if (raw) return JSON.parse(raw); } catch(e) { console.warn('Data load error', e); } return null; } function saveData(data) { localStorage.setItem(LS_KEY, JSON.stringify(data)); } // ========== STATE ========== let d = loadData(); if (!d) { // Initialize with sample data from the xlsx d = getDefaultData(); initSampleData(d); saveData(d); } let currentTeacherId = Object.keys(d.teachers)[0] || null; let currentMonth = ''; let editingStudentId = null; // ========== INIT ========== function getStudentsByTeacher(teacherId) { return d.studentOrder.map(id => d.students[id]).filter(s => s && s.teacherId === teacherId); } function getStudentRenewals(studentId) { return Object.values(d.renewals).filter(r => r.studentId === studentId).sort((a,b) => a.date.localeCompare(b.date)); } function getLatestRenewal(studentId) { const renewals = getStudentRenewals(studentId); return renewals.length > 0 ? renewals[renewals.length - 1] : null; } function getRemainingHours(studentId) { return getTotalPurchased(studentId) + getTotalGifted(studentId) - getTotalConsumed(studentId); } function getRemainingPurchased(studentId) { const consumed = getTotalConsumed(studentId); const purchased = getTotalPurchased(studentId); return Math.max(0, purchased - Math.min(consumed, purchased)); } function getRemainingGifted(studentId) { const consumed = getTotalConsumed(studentId); const purchased = getTotalPurchased(studentId); const gifted = getTotalGifted(studentId); const consumedFromGifted = Math.max(0, consumed - purchased); return Math.max(0, gifted - consumedFromGifted); } function getLatestUnitPrice(studentId) { const r = getLatestRenewal(studentId); return r ? r.unitPrice : 0; } function getMonthlyAttendance(studentId, month) { return Object.values(d.attendance).find(a => a.studentId === studentId && a.month === month) || null; } function getMonthlyTotal(studentId, month) { const a = getMonthlyAttendance(studentId, month); if (!a) return 0; return (a.week1||0) + (a.week2||0) + (a.week3||0) + (a.week4||0) + (a.other||0); } function getMonthlyAmount(studentId, month) { const total = getMonthlyTotal(studentId, month); const price = getLatestUnitPrice(studentId); return total * price; } // ========== RENDER ========== function render() { renderTeachers(); renderTabs(); renderEntry(); renderSummary(); renderCarry(); renderStudents(); renderRenewals(); renderStats(); } function renderTeachers() { const el = document.getElementById('teacherList'); el.innerHTML = ''; d.teacherOrder.forEach(id => { const t = d.teachers[id]; if (!t) return; const btn = document.createElement('button'); btn.className = 'teacher-btn' + (id === currentTeacherId ? ' active' : ''); btn.textContent = t.name + ' ' + t.subject; btn.onclick = () => { currentTeacherId = id; render(); }; el.appendChild(btn); }); } function renderTabs() { document.querySelectorAll('.tab').forEach(tab => { tab.onclick = () => { document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active')); tab.classList.add('active'); document.getElementById('panel-' + tab.dataset.tab).classList.add('active'); }; }); } function getWeekDates(month) { const [y, m] = month.split('-').map(Number); const lastDay = new Date(y, m, 0).getDate(); const w1 = m + '月1日-' + m + '月7日'; const w2 = m + '月8日-' + m + '月14日'; const w3 = m + '月15日-' + m + '月21日'; const w4 = m + '月22日-' + m + '月' + Math.min(28, lastDay) + '日'; const other = lastDay > 28 ? m + '月29日-' + m + '月' + lastDay + '日' : ''; return { w1, w2, w3, w4, other }; } function renderEntry() { if (!currentTeacherId) return; const students = getStudentsByTeacher(currentTeacherId); const m = getCurrentMonth(); const el = document.getElementById('entryTableWrap'); if (!students.length) { el.innerHTML = '
暂无学员,请先添加。
'; return; } // Check month attendance exists let hasAny = students.some(s => getMonthlyAttendance(s.id, m)); const wd = getWeekDates(m); let html = ``; let grandTotal = 0; let sumW1=0, sumW2=0, sumW3=0, sumW4=0, sumWo=0; const activeStudents = students.filter(s => !s.xiuxue && !s.tuifei); const xiuxueStudents = students.filter(s => s.xiuxue); const tuifeiStudents = students.filter(s => s.tuifei); activeStudents.forEach((s, i) => { const att = getMonthlyAttendance(s.id, m) || { week1: 0, week2: 0, week3: 0, week4: 0, other: 0 }; const attKey = getAttendanceKey(s.id, m); const total = (att.week1||0) + (att.week2||0) + (att.week3||0) + (att.week4||0) + (att.other||0); grandTotal += total; const remaining = getRemainingHours(s.id, m); const warnClass = remaining < 0 ? 'has-error' : ''; html += ``; sumW1 += att.week1||0; sumW2 += att.week2||0; sumW3 += att.week3||0; sumW4 += att.week4||0; sumWo += att.other||0; }); // 合计 row html += ``; // 休学 students - collapsed by default if (xiuxueStudents.length > 0) { const cid = 'cx' + currentTeacherId; html += ``; xiuxueStudents.forEach((s, i) => { const att = getMonthlyAttendance(s.id, m) || { week1: 0, week2: 0, week3: 0, week4: 0, other: 0 }; const attKey = getAttendanceKey(s.id, m); const total = (att.week1||0) + (att.week2||0) + (att.week3||0) + (att.week4||0) + (att.other||0); const remaining = getRemainingHours(s.id, m); html += ``; }); html += ``; } // 退费 students if (tuifeiStudents.length > 0) { const cid4 = 'ctf' + currentTeacherId; html += ``; tuifeiStudents.forEach((s, i) => { const att = getMonthlyAttendance(s.id, m) || { week1: 0, week2: 0, week3: 0, week4: 0, other: 0 }; const total = (att.week1||0) + (att.week2||0) + (att.week3||0) + (att.week4||0) + (att.other||0); html += ``; }); html += ``; } html += `
# 姓名 第一周
${wd.w1}
第二周
${wd.w2}
第三周
${wd.w3}
第四周
${wd.w4}
其他
${wd.other}
月合计 剩余课时 操作
${i + 1} ${s.name} ${remaining <= 10 ? '' : ''} ${getLatestUnitPrice(s.id) >= 150 ? '💎' : ''} ${remaining < 0 ? '' : ''} ${total} ${remaining} (正${getRemainingPurchased(s.id, m)}/赠${getRemainingGifted(s.id, m)})
合计 ${sumW1} ${sumW2} ${sumW3} ${sumW4} ${sumWo} ${grandTotal} 正${activeStudents.reduce((s,st) => s+getRemainingPurchased(st.id),0)}/赠${activeStudents.reduce((s,st) => s+getRemainingGifted(st.id),0)}
休学学员 (${xiuxueStudents.length}人)
退费学员 (${tuifeiStudents.length}人)
`; html += `
本月总消课:${grandTotal}
`; el.innerHTML = html; document.getElementById('entryInfo').textContent = `${d.teachers[currentTeacherId]?.name || ''} - ${m} 消课录入`; } function getAttendanceKey(studentId, month) { return studentId + '|' + month; } function updateAtt(input) { const key = input.dataset.att; const field = input.dataset.field; const [studentId, month] = key.split('|'); const val = parseInt(input.value) || 0; // Find or create attendance record let att = Object.values(d.attendance).find(a => a.studentId === studentId && a.month === month); if (!att) { const id = 'a' + (Object.keys(d.attendance).length + 1); att = { id, studentId, month, week1: 0, week2: 0, week3: 0, week4: 0, other: 0 }; d.attendance[att.id] = att; } att[field] = val; saveData(d); // Update the total cell and remaining const tr = input.closest('tr'); const tds = tr.querySelectorAll('td'); const total = (parseInt(tr.querySelector('[data-field="week1"]')?.value)||0) + (parseInt(tr.querySelector('[data-field="week2"]')?.value)||0) + (parseInt(tr.querySelector('[data-field="week3"]')?.value)||0) + (parseInt(tr.querySelector('[data-field="week4"]')?.value)||0) + (parseInt(tr.querySelector('[data-field="other"]')?.value)||0); if (tds.length > 7) tds[7].innerHTML = '' + total + ''; if (tds.length > 8) { const remaining = getRemainingHours(studentId); tds[8].textContent = remaining + ' (正' + getRemainingPurchased(studentId) + '/赠' + getRemainingGifted(studentId) + ')'; tr.className = remaining < 0 ? 'has-error' : ''; } } function saveAttendance() { saveData(d); showToast('已保存'); } function addEmptyRow() { showStudentModal(); } // ========== SUMMARY (表B) ========== function toggleXiuxue(id) { const tbody = document.getElementById(id); const icon = document.getElementById(id + '-icon'); if (tbody) { if (tbody.style.display === 'none') { tbody.style.display = ''; if(icon) icon.textContent = '▼'; } else { tbody.style.display = 'none'; if(icon) icon.textContent = '▶'; } } } function renderSummary() { if (!currentTeacherId) return; const students = getStudentsByTeacher(currentTeacherId); const m = getCurrentMonth(); document.getElementById('summaryTitle').textContent = `${d.teachers[currentTeacherId]?.name || ''} - ${m} 月消课汇总 表B`; // Cards const activeStudents = students.filter(s => !s.xiuxue); const xiuxueStudents = students.filter(s => s.xiuxue); let totalAmount = 0; let totalHours = 0; let activeCount = 0; activeStudents.forEach(s => { const h = getMonthlyTotal(s.id, m); if (h > 0) activeCount++; totalHours += h; totalAmount += getMonthlyAmount(s.id, m); }); document.getElementById('summaryCards').innerHTML = `
本月消课学员
${activeCount}人
本月总消课
${totalHours}节
月消课金额
¥${totalAmount.toFixed(2)}
剩余总课时
${activeStudents.reduce((s,st) => s + Math.max(0, getRemainingHours(st.id)), 0)}节
`; let html = ``; let sumTotal=0, sumAmount=0, sumRemaining=0, sumP=0, sumG=0; activeStudents.forEach((s, i) => { const total = getMonthlyTotal(s.id, m); const price = getLatestUnitPrice(s.id); const amount = total * price; const r = getLatestRenewal(s.id); sumTotal += total; sumAmount += amount; sumRemaining += Math.max(0, getRemainingHours(s.id, m)); sumP += getRemainingPurchased(s.id, m); sumG += getRemainingGifted(s.id, m); const rem = getRemainingHours(s.id, m); html += ``; }); // 休学 students const sumXiuxue = students.filter(s => s.xiuxue); if (sumXiuxue.length > 0) { const cid2 = 'cxsum' + currentTeacherId; html += ``; sumXiuxue.forEach((s, i) => { const total = getMonthlyTotal(s.id, m); const price = getLatestUnitPrice(s.id); const amount = total * price; const r = getLatestRenewal(s.id); html += ``; }); html += ``; } html += `
#姓名月消课课单价月金额剩余课时正课剩余赠课剩余最新续费操作
${i+1} ${s.name}${rem <= 10 ? '' : ''}}${price >= 150 ? '💎' : ''} ${total} ${price ? '¥' + price.toFixed(2) : '-'} ¥${amount.toFixed(2)} ${rem} ${getRemainingPurchased(s.id, m)} ${getRemainingGifted(s.id, m)} ${r ? r.date : '-'}
休学学员 (${sumXiuxue.length}人)
合计 ${sumTotal} ¥${sumAmount.toFixed(2)} ${sumRemaining} ${sumP} ${sumG}
`; document.getElementById('summaryTableWrap').innerHTML = html; } // ========== CARRY (表C) ========== function renderCarry() { if (!currentTeacherId) return; const allStudents = getStudentsByTeacher(currentTeacherId); const m = getCurrentMonth(); const nextMonth = getNextMonth(m); document.getElementById('carryTitle').textContent = `${d.teachers[currentTeacherId]?.name || ''} - ${nextMonth} 结转空白模板 表C`; const carryActive = allStudents.filter(s => !s.xiuxue && !s.tuifei); const carryXiuxue = allStudents.filter(s => s.xiuxue); const carryTuifei = allStudents.filter(s => s.tuifei); let html = ``; let cSumRem=0, cSumP=0, cSumG=0; carryActive.forEach((s, i) => { const rem = getRemainingHours(s.id, m); const pRem = getRemainingPurchased(s.id, m); const gRem = getRemainingGifted(s.id, m); const price = getLatestUnitPrice(s.id); cSumRem += Math.max(0, rem); cSumP += pRem; cSumG += gRem; html += ``; }); // 合计 html += ''; // Xiuxue if (carryXiuxue.length > 0) { const cid3 = 'cxc' + currentTeacherId; html += ''; carryXiuxue.forEach((s, i) => { const rem = getRemainingHours(s.id, m); const pRem = getRemainingPurchased(s.id, m); const gRem = getRemainingGifted(s.id, m); const price = getLatestUnitPrice(s.id); html += ''; }); html += ''; } // Tuifei if (carryTuifei.length > 0) { const cid5 = 'cctf' + currentTeacherId; html += ''; carryTuifei.forEach((s, i) => { const rem = getRemainingHours(s.id, m); const pRem = getRemainingPurchased(s.id, m); const gRem = getRemainingGifted(s.id, m); const price = getLatestUnitPrice(s.id); html += ''; }); html += ''; } html += '
#姓名 第一周第二周 第三周第四周 其他月合计 剩余课时正课剩余赠课剩余 课单价备注
${i+1} ${s.name}${rem <= 10 ? '' : ''}${price >= 150 ? '💎' : ''} ${rem} ${pRem} ${gRem} ${price ? '¥' + price.toFixed(2) : '-'} ${rem < 5 ? '⚠️ ' : ''}${rem < 0 ? '超课' : rem <= 3 ? '极少' : rem <= 10 ? '不足' : ''}
合计' + cSumRem + '' + cSumP + '' + cSumG + '
休学学员 (' + carryXiuxue.length + '人)
退费学员 (' + carryTuifei.length + '人)
'; document.getElementById('carryTableWrap').innerHTML = html; } // ========== STUDENTS ========== function renderStudents() { if (!currentTeacherId) return; const q = (document.getElementById('studentSearch')?.value || '').toLowerCase(); let students = getStudentsByTeacher(currentTeacherId); if (q) students = students.filter(s => s.name.includes(q)); let html = ``; students.forEach((s, i) => { const renewals = getStudentRenewals(s.id); html += ``; }); html += '
#姓名入读日期总购课总赠课已消课剩余课时当前课单价续费次数操作
${i+1} ${s.name}${getRemainingHours(s.id, currentMonth) <= 10 ? '' : ''}${getLatestUnitPrice(s.id) >= 150 ? '💎' : ''}${s.xiuxue ? ' (休学)' : ''}${s.tuifei ? ' (退费)' : ''} ${s.enrollDate || '-'} ${getTotalPurchased(s.id)} ${getTotalGifted(s.id)} ${getTotalConsumed(s.id)} ${getRemainingHours(s.id, currentMonth)} ${getLatestUnitPrice(s.id) ? '¥' + getLatestUnitPrice(s.id).toFixed(2) : '-'} ${renewals.length}
'; document.getElementById('studentTableWrap').innerHTML = html; renderTuifeiList(); } // ========== RENEWALS ========== function renderRenewals() { if (!currentTeacherId) return; const students = getStudentsByTeacher(currentTeacherId); const studentMap = {}; students.forEach(s => studentMap[s.id] = s); let allRenewals = []; students.forEach(s => { getStudentRenewals(s.id).forEach(r => { allRenewals.push({ ...r, studentName: s.name }); }); }); allRenewals.sort((a,b) => b.date.localeCompare(a.date)); let html = ``; allRenewals.forEach(r => { html += ``; }); html += '
日期学员购买正课赠课金额课单价操作
${r.date} ${r.studentName} ${r.purchased} ${r.gifted} ¥${(r.amount || 0).toFixed(2)} ¥${(r.unitPrice || 0).toFixed(2)}
'; document.getElementById('renewalTableWrap').innerHTML = html; } // ========== STATS ========== // ========== 异动处理 ========== function handleStudentAction(studentId, action, selectEl) { const s = d.students[studentId]; if (!s) return; if (selectEl) selectEl.value = ''; // Reset dropdown if (action === 'xiuxue') { s.xiuxue = true; delete s.tuifei; showToast(s.name + ' 已设为休学'); } else if (action === 'tuifei') { s.tuifei = true; delete s.xiuxue; showToast(s.name + ' 已设为退费'); } saveData(d); render(); } // ========== 退费学员列表 ========== function renderTuifeiList() { const el = document.getElementById('tuifeiList'); if (!el) return; const tuifei = Object.values(d.students).filter(s => s.tuifei); const xiuxue = Object.values(d.students).filter(s => s.xiuxue); let html = ''; if (xiuxue.length > 0) { html += '
休学学员 (' + xiuxue.length + '人)
'; html += ''; xiuxue.forEach((s, i) => { html += ''; }); html += '
#姓名剩余课时操作
' + (i+1) + '' + s.name + '' + getRemainingHours(s.id) + '' + '
'; } if (tuifei.length > 0) { html += '
退费学员 (' + tuifei.length + '人)
'; html += ''; tuifei.forEach((s, i) => { html += ''; }); html += '
#姓名剩余课时操作
' + (i+1) + '' + s.name + '' + getRemainingHours(s.id) + '' + '
'; } if (xiuxue.length === 0 && tuifei.length === 0) { html = '
暂无休学或退费学员
'; } el.innerHTML = html; } function restoreStudent(studentId) { const s = d.students[studentId]; if (!s) return; delete s.xiuxue; delete s.tuifei; saveData(d); render(); showToast(s.name + ' 已恢复'); } function renderStats() { document.getElementById('statTeachers').textContent = Object.keys(d.teachers).length; document.getElementById('statStudents').textContent = Object.keys(d.students).length; document.getElementById('statRenewals').textContent = Object.keys(d.renewals).length; } // ========== MODALS ========== function showStudentModal(studentId) { editingStudentId = studentId || null; document.getElementById('studentModalTitle').textContent = studentId ? '编辑学员' : '新增学员'; if (studentId) { const s = d.students[studentId]; document.getElementById('sName').value = s.name || ''; document.getElementById('sPurchased').value = 0; document.getElementById('sGifted').value = 0; document.getElementById('sAmount').value = 0; document.getElementById('sUnitPrice').value = 0; document.getElementById('sRenewDate').value = ''; document.getElementById('sNote').value = ''; } else { document.getElementById('sName').value = ''; document.getElementById('sPurchased').value = 0; document.getElementById('sGifted').value = 0; document.getElementById('sAmount').value = 0; document.getElementById('sUnitPrice').value = 0; document.getElementById('sRenewDate').value = new Date().toISOString().slice(0,10); document.getElementById('sNote').value = ''; } document.getElementById('studentModal').classList.add('show'); } function closeModal(id) { document.getElementById(id).classList.remove('show'); } function saveStudent() { const name = document.getElementById('sName').value.trim(); if (!name) { alert('请输入学员姓名'); return; } if (editingStudentId) { // Update existing student d.students[editingStudentId].name = name; saveData(d); showToast('已更新'); closeModal('studentModal'); render(); return; } // New student const id = 's' + (Object.keys(d.students).length + 1000); const s = { id, name, teacherId: currentTeacherId, enrollDate: new Date().toISOString().slice(0,10) }; d.students[id] = s; d.studentOrder.push(id); // Create initial renewal record const purchased = parseInt(document.getElementById('sPurchased').value) || 0; const gifted = parseInt(document.getElementById('sGifted').value) || 0; const amount = parseFloat(document.getElementById('sAmount').value) || 0; const unitPrice = parseFloat(document.getElementById('sUnitPrice').value) || 0; const date = document.getElementById('sRenewDate').value || new Date().toISOString().slice(0,10); if (purchased > 0 || gifted > 0) { const rid = 'r' + (Object.keys(d.renewals).length + 1); d.renewals[rid] = { id: rid, studentId: id, date, purchased, gifted, amount, unitPrice }; } saveData(d); showToast('已添加学员'); closeModal('studentModal'); render(); } function editStudent(studentId) { showStudentModal(studentId); } function deleteStudent(studentId) { if (!confirm('确定删除该学员及其所有消课记录?')) return; delete d.students[studentId]; d.studentOrder = d.studentOrder.filter(id => id !== studentId); // Remove attendance Object.keys(d.attendance).forEach(k => { if (d.attendance[k].studentId === studentId) delete d.attendance[k]; }); // Remove renewals Object.keys(d.renewals).forEach(k => { if (d.renewals[k].studentId === studentId) delete d.renewals[k]; }); saveData(d); render(); } function handleXiuxueAction(selectEl) { if (!selectEl) return; const studentId = selectEl.dataset.sid; const action = selectEl.value; if (!action) return; const s = d.students[studentId]; if (!s) return; selectEl.value = ''; if (action === 'restore') { delete s.xiuxue; delete s.tuifei; showToast(s.name + ' 已恢复正常'); } else if (action === 'tuifei') { delete s.xiuxue; s.tuifei = true; showToast(s.name + ' 已移至退费'); } saveData(d); render(); } // ========== RENEWAL ========== function showRenewalForStudent(studentId) { const s = d.students[studentId]; const sel = document.getElementById('rStudent'); sel.innerHTML = ''; getStudentsByTeacher(currentTeacherId).forEach(st => { const opt = document.createElement('option'); opt.value = st.id; opt.textContent = st.name; if (st.id === studentId) opt.selected = true; sel.appendChild(opt); }); document.getElementById('rPurchased').value = 48; document.getElementById('rGifted').value = 4; document.getElementById('rAmount').value = 0; document.getElementById('rUnitPrice').value = 0; document.getElementById('rDate').value = new Date().toISOString().slice(0,10); document.getElementById('renewalModal').classList.add('show'); } function showRenewalModal() { showRenewalForStudent(null); // If no student selected, default to first const sel = document.getElementById('rStudent'); if (!sel.value && sel.options.length > 0) sel.selectedIndex = 0; } function saveRenewal() { const studentId = document.getElementById('rStudent').value; if (!studentId) { alert('请选择学员'); return; } const purchased = parseInt(document.getElementById('rPurchased').value) || 0; const gifted = parseInt(document.getElementById('rGifted').value) || 0; const amount = parseFloat(document.getElementById('rAmount').value) || 0; const unitPrice = parseFloat(document.getElementById('rUnitPrice').value) || 0; const date = document.getElementById('rDate').value; if (!date) { alert('请选择日期'); return; } const id = 'r' + (Object.keys(d.renewals).length + 1); d.renewals[id] = { id, studentId, date, purchased, gifted, amount, unitPrice }; saveData(d); showToast('续费记录已保存'); closeModal('renewalModal'); render(); } function deleteRenewal(rid) { if (!confirm('确定删除此续费记录?')) return; delete d.renewals[rid]; saveData(d); render(); } // ========== EXPORT / IMPORT ========== function exportSheet(type) { if (!currentTeacherId) return; const students = getStudentsByTeacher(currentTeacherId); const m = getCurrentMonth(); let rows = []; if (type === 'entry') { rows = students.map(s => { const att = getMonthlyAttendance(s.id, m) || {}; return [s.name, att.week1||0, att.week2||0, att.week3||0, att.week4||0, att.other||0]; }); } else if (type === 'summary') { rows = students.map(s => [ s.name, getMonthlyTotal(s.id, m), getLatestUnitPrice(s.id), getMonthlyAmount(s.id, m), getRemainingHours(s.id), getRemainingPurchased(s.id), getRemainingGifted(s.id) ]); } else if (type === 'renewals') { rows = students.flatMap(s => getStudentRenewals(s.id).map(r => [s.name, r.date, r.purchased, r.gifted, r.amount, r.unitPrice]) ); } const csv = rows.map(r => r.join(',')).join('\n'); downloadText(csv, `${type}_${m}.csv`, 'text/csv'); } function exportAllData() { const blob = new Blob([JSON.stringify(d, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `消课数据_${new Date().toISOString().slice(0,10)}.json`; a.click(); URL.revokeObjectURL(url); } function importData(e) { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function(ev) { try { const imported = JSON.parse(ev.target.result); if (!imported.version || !imported.teachers) { alert('数据格式不正确'); return; } if (!confirm('导入将覆盖当前全部数据,确定继续?')) return; data = imported; saveData(d); currentTeacherId = Object.keys(d.teachers)[0] || null; render(); showToast('数据已导入'); } catch(e) { alert('导入失败:' + e.message); } }; reader.readAsText(file); e.target.value = ''; } function printSummary() { window.print(); } // ========== UTILS ========== function getCurrentMonth() { if (currentMonth) return currentMonth; const now = new Date(); return now.getFullYear() + '-' + String(now.getMonth() + 1).padStart(2, '0'); } function getNextMonth(m) { const [y, mon] = m.split('-').map(Number); if (mon === 12) return (y+1) + '-01'; return y + '-' + String(mon + 1).padStart(2, '0'); } function downloadText(content, filename, mime) { const blob = new Blob(['\uFEFF' + content], { type: mime + ';charset=utf-8' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); } function showToast(msg) { const existing = document.querySelector('.toast'); if (existing) existing.remove(); const div = document.createElement('div'); div.className = 'toast'; div.style.cssText = 'position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:#333;color:#fff;padding:10px 20px;border-radius:8px;z-index:9999;font-size:14px;box-shadow:0 2px 8px rgba(0,0,0,.2);transition:opacity .3s'; div.textContent = msg; document.body.appendChild(div); setTimeout(() => { div.style.opacity = '0'; setTimeout(() => div.remove(), 300); }, 2000); } // ========== MONTH PICKER ========== document.getElementById('monthPicker').addEventListener('change', function() { currentMonth = this.value; render(); }); // ========== INIT ========== (function init() { // Set month picker const mp = document.getElementById('monthPicker'); const now = new Date(); currentMonth = now.getFullYear() + '-' + String(now.getMonth() + 1).padStart(2, '0'); mp.value = currentMonth; // Find first teacher if (!currentTeacherId && d.teacherOrder.length > 0) { currentTeacherId = d.teacherOrder[0]; } render(); })();