contentItem.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { defineComponent, onMounted, reactive, toRefs } from 'vue';
  2. import CurrentStudent from './component/CurrentStudent';
  3. import Subjects from './component/Subjects';
  4. import MusicGroup from './component/MusicGroup';
  5. import DetailData from './component/DetailData';
  6. import Attendance from './component/Attendance';
  7. import Practice from './component/Practice';
  8. import {
  9. api_schoolIndexAttendanceStat,
  10. api_schoolIndexLessonStat,
  11. api_schoolIndexStat
  12. } from './api';
  13. import {
  14. IGradeDistribution,
  15. IMusicGradeDistribution,
  16. IStudentAttendance,
  17. IStudentLessons,
  18. ISubjectDistribution,
  19. ISubjectGradeDistribution
  20. } from './type';
  21. export default defineComponent({
  22. name: 'content',
  23. props: {
  24. musicGroupId: {
  25. type: String,
  26. default: ''
  27. }
  28. },
  29. setup(props) {
  30. const data = reactive({
  31. gradeDistributions: [] as IGradeDistribution[],
  32. /** 声部分布 */
  33. subjectDistributions: [] as ISubjectDistribution[],
  34. /** 年级分布 */
  35. musicGradeDistributions: [] as IMusicGradeDistribution[],
  36. subjectGradeDistributions: [] as ISubjectGradeDistribution[],
  37. /** 出勤 */
  38. studentAttendance: {} as IStudentAttendance,
  39. /** 练习 */
  40. studentLessons: {} as IStudentLessons
  41. });
  42. const { musicGroupId } = toRefs(props);
  43. /** 统计 */
  44. const getSchool = async () => {
  45. const res = await api_schoolIndexStat({
  46. musicGroupId: musicGroupId.value
  47. });
  48. if (res.data) {
  49. const {
  50. gradeDistributions,
  51. subjectDistributions,
  52. musicGradeDistributions,
  53. subjectGradeDistributions
  54. } = res.data;
  55. if (gradeDistributions) {
  56. data.gradeDistributions = gradeDistributions;
  57. }
  58. if (subjectDistributions) {
  59. data.subjectDistributions = subjectDistributions;
  60. }
  61. if (musicGradeDistributions) {
  62. data.musicGradeDistributions = musicGradeDistributions;
  63. }
  64. if (subjectGradeDistributions) {
  65. data.subjectGradeDistributions = subjectGradeDistributions;
  66. }
  67. }
  68. };
  69. /** 出勤统计 */
  70. const getAttendanceStat = async (period: string) => {
  71. const res = await api_schoolIndexAttendanceStat({
  72. period
  73. });
  74. if (res.data) {
  75. data.studentAttendance = res.data;
  76. }
  77. };
  78. /** 练习统计 */
  79. const getLessonStat = async (period: string) => {
  80. const res = await api_schoolIndexLessonStat({
  81. period
  82. });
  83. if (res.data) {
  84. data.studentLessons = res.data;
  85. }
  86. };
  87. const init = () => {
  88. getSchool();
  89. getAttendanceStat('week');
  90. getLessonStat('week');
  91. };
  92. onMounted(() => {
  93. init();
  94. });
  95. return () => (
  96. <div>
  97. <CurrentStudent list={data.gradeDistributions} />
  98. <Subjects list={data.subjectDistributions} />
  99. <MusicGroup data={data.musicGradeDistributions} />
  100. <DetailData data={data.subjectGradeDistributions} />
  101. <Attendance
  102. data={data.studentAttendance}
  103. onChange={(value) => {
  104. getAttendanceStat(value);
  105. }}
  106. />
  107. <Practice
  108. data={data.studentLessons}
  109. onChange={(value) => {
  110. getLessonStat(value);
  111. }}
  112. />
  113. </div>
  114. );
  115. }
  116. });