classDetail.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { defineComponent, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NTabs, NTabPane } from 'naive-ui';
  4. import { useRoute } from 'vue-router';
  5. import CBreadcrumb from '@/components/CBreadcrumb';
  6. import ClassStudent from './components/classStudent';
  7. import AfterWork from './components/afterWork';
  8. import ClassRecord from './components/classRecord';
  9. import TestRecode from './components/testRecode';
  10. import { getTabsCache, setTabsCaches } from '@/hooks/use-async';
  11. export default defineComponent({
  12. name: 'base-setting',
  13. setup() {
  14. const activeTab = ref('student');
  15. const route = useRoute();
  16. const routerList = ref([
  17. { name: '班级管理', path: '/classList' },
  18. { name: route.query.name, path: '/classDetail' }
  19. ] as any);
  20. getTabsCache((val: any) => {
  21. if (val.form.tabName) {
  22. activeTab.value = val.form.tabName;
  23. }
  24. });
  25. const setTabs = (val: any) => {
  26. setTabsCaches(val, 'tabName', route);
  27. };
  28. return () => (
  29. <div>
  30. <CBreadcrumb list={routerList.value}></CBreadcrumb>
  31. <div class={styles.listWrap}>
  32. <NTabs
  33. onUpdate:value={(val: any) => setTabs(val)}
  34. class={styles.customTabs}
  35. v-model:value={activeTab.value}
  36. size="large"
  37. animated
  38. pane-wrapper-style="margin: 0 -4px"
  39. pane-style="padding-left: 4px; padding-right: 4px; box-sizing: border-box;">
  40. <NTabPane name="student" tab="学员名单">
  41. <ClassStudent></ClassStudent>
  42. </NTabPane>
  43. <NTabPane name="afterWork" tab="课后训练">
  44. <AfterWork></AfterWork>
  45. </NTabPane>
  46. <NTabPane name="practice" tab="练习记录">
  47. <TestRecode></TestRecode>
  48. </NTabPane>
  49. <NTabPane name="attendclass" tab="上课记录">
  50. <ClassRecord />
  51. </NTabPane>
  52. </NTabs>
  53. </div>
  54. </div>
  55. );
  56. }
  57. });