Browse Source

提交

发测试看看
mo 1 năm trước cách đây
mục cha
commit
1cb2431c94

+ 17 - 0
src/router/router-root.ts

@@ -176,6 +176,23 @@ export default [
     }
   },
   {
+    path: '/tenantAllData',
+    name: 'tenantAllData',
+    component: () => import('@/views/tenantAllData/index'),
+    meta: {
+      title: '学练工具报名统计'
+    }
+  },
+  {
+    path: '/tenamtDataDetail',
+    name: 'tenamtDataDetail',
+    component: () => import('@/views/tenantAllData/tenamtDataDetail'),
+    meta: {
+      title: '学校报名详情'
+    }
+  },
+
+  {
     path: '/:pathMatch(.*)*',
     component: () => import('@/views/404'),
     meta: {

BIN
src/views/tenantAllData/images/arrowIcon.png


BIN
src/views/tenantAllData/images/homeIcon.png


BIN
src/views/tenantAllData/images/personIcon.png


BIN
src/views/tenantAllData/images/san.png


BIN
src/views/tenantAllData/images/topDot.png


+ 197 - 0
src/views/tenantAllData/index.module.less

@@ -0,0 +1,197 @@
+.tenantAllData {
+  padding: 0 12px;
+  .topWrap {
+    margin-top: 16px;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: space-between;
+    .topHead {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      font-size: 17px;
+      font-weight: 600;
+      color: #333333;
+      line-height: 24px;
+      .topDot {
+        width: 4px;
+        height: 14px;
+        margin-right: 6px;
+      }
+    }
+    .timerWrap {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      font-size: 14px;
+      font-weight: 400;
+      color: #333333;
+      .sanIcon {
+        width: 12px;
+        height: 12px;
+        margin-left: 5px;
+      }
+    }
+  }
+  .cardWrap {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: space-between;
+    margin-top: 18px;
+    .cardItem {
+      padding: 8px 16px;
+      width: 170px;
+      height: 70px;
+      background: #ffffff;
+      border-radius: 10px;
+      overflow: hidden;
+      position: relative;
+      .cardLine {
+        width: 6px;
+        height: 70px;
+        background: #fe6f25;
+        opacity: 0.24;
+        position: absolute;
+        left: 0;
+        top: 0;
+      }
+    }
+    .cardNum {
+      font-size: 24px;
+      font-family: 'DINA';
+      font-weight: bold;
+      color: #fe6f25;
+      line-height: 28px;
+    }
+    .studentCard {
+      .cardLine {
+        background: #259cfe;
+        color: #fe6f25;
+      }
+      .cardNum {
+        color: #259cfe;
+      }
+    }
+    .cardInfo {
+      margin-top: 5px;
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      font-size: 15px;
+      font-weight: 400;
+      color: #777777;
+      line-height: 21px;
+      img {
+        width: 16px;
+        height: 16px;
+      }
+    }
+  }
+  .searchWrap {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    .allDataWrap {
+      padding-left: 0px !important;
+    }
+    .searechInfo {
+      width: 273px;
+    }
+  }
+  .sanIcon {
+    width: 12px;
+    height: 12px;
+  }
+  .routeSan {
+    transform: rotate(180deg);
+    transition: 0.2;
+  }
+  .schoolItem {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: space-between;
+    background-color: #fff;
+    margin-bottom: 12px;
+    padding: 12px;
+    border-radius: 10px;
+    .title {
+      font-weight: 400;
+      color: #777777;
+      line-height: 17px;
+      font-size: 12px;
+      margin-bottom: 6px;
+    }
+    .schoolName {
+      font-size: 14px;
+      font-weight: 500;
+      color: #333333;
+      line-height: 20px;
+    }
+    .personNum {
+      font-size: 20px;
+      font-family: 'DINA';
+      font-weight: bold;
+      color: #ff5a56;
+      line-height: 24px;
+      text-align: center;
+    }
+    .schoolCountWrap {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      .arrow {
+        width: 6px;
+        height: 12px;
+        margin-left: 17px;
+      }
+    }
+  }
+}
+
+.topHeadSchool {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  .sanIcon {
+    margin-left: 5px;
+  }
+}
+
+.detailCard {
+  width: 100% !important;
+}
+
+.studentItem {
+  display: flex;
+  flex-direction: row;
+  // align-items: center;
+  justify-content: space-between;
+  background-color: #fff;
+  margin-bottom: 12px;
+  padding: 12px;
+  border-radius: 10px;
+  .studentNameWrap {
+    .title {
+      font-size: 16px;
+      font-weight: 500;
+      color: #333333;
+      line-height: 22px;
+      margin-bottom: 4px;
+    }
+    .studentPhone {
+      font-size: 14px;
+      font-weight: 400;
+      color: #777777;
+      line-height: 20px;
+    }
+  }
+  .studentCountWrap {
+    font-size: 14px;
+    font-weight: 400;
+    color: #777777;
+    line-height: 20px;
+  }
+}

+ 332 - 0
src/views/tenantAllData/index.tsx

@@ -0,0 +1,332 @@
+import { defineComponent, onMounted, reactive, ref } from 'vue';
+import styles from './index.module.less';
+import {
+  Cell,
+  CellGroup,
+  Col,
+  List,
+  Picker,
+  Popup,
+  Row,
+  Tab,
+  Tabs,
+  DatePicker
+} from 'vant';
+import MSticky from '@/components/m-sticky';
+// import icon1 from './images/icon1.png';
+// import icon2 from './images/icon2.png';
+// import icon3 from './images/icon3.png';
+// import icon4 from './images/icon4.png';
+// import iconTimer from './images/icon-timer.png';
+import personIcon from './images/personIcon.png';
+import homeIcon from './images/homeIcon.png';
+import sanIcon from './images/san.png';
+import request from '@/helpers/request';
+import topDot from './images/topDot.png';
+import { useRoute, useRouter } from 'vue-router';
+import { moneyFormat, numberFormat } from '@/helpers/utils';
+import OFullRefresh from '@/components/m-full-refresh';
+import OEmpty from '@/components/m-empty';
+import arrowIcon from './images/arrowIcon.png';
+import OHeader from '@/components/m-header';
+import OSearch from '@/components/m-search';
+import numeral from 'numeral';
+export default defineComponent({
+  name: 'tenant-apply-data',
+  setup() {
+    const route = useRoute();
+    const router = useRouter()
+    const tabName = ref('all');
+    const forms = reactive({
+      keyword: '',
+      // id: route.query.id,
+      id: '1687275949971763202',
+      yearStatus: false,
+      schoolId: null,
+      year: [new Date().getFullYear()] as any,
+      yearName: new Date().getFullYear(),
+      classList: [] as any,
+      statObj: {
+        registerNum: 0,
+        schoolNum: 0
+      } as any,
+      perponStatus: false,
+      sortId: 'desc',
+      sortName: '人数降序',
+      sortList: [
+        { value: 'desc', text: '人数降序' },
+        { value: 'asc', text: '人数升序' }
+      ] as any,
+      page: 1,
+      rows: 20,
+      isClick: false
+    });
+
+    const refreshing = ref(false);
+    const loading = ref(true);
+    const finished = ref(false);
+    const showContact = ref(false);
+    const list = ref([]);
+
+    const getSchoolList = async () => {
+      try {
+        const { data } = await request.get('/edu-app/open/school/list', {
+          params: {
+            tenantId: forms.id
+          }
+        });
+        const temp = [
+          {
+            value: '',
+            text: '全部学校'
+          }
+        ];
+        if (Array.isArray(data)) {
+          data.forEach((item: any) => {
+            temp.push({
+              value: item.id,
+              text: item.name
+            });
+          });
+          forms.classList = temp;
+        }
+      } catch {
+        //
+      }
+    };
+
+    const getList = async () => {
+      if (forms.isClick) {
+        return;
+      }
+      forms.isClick = true;
+      if (refreshing.value) {
+        list.value = [];
+        forms.page = 1;
+        refreshing.value = false;
+      }
+      try {
+        const res = await request.post(
+          '/edu-app/open/school/schoolRegisterPage',
+          {
+            data: {
+              tenantId: forms.id,
+              page: forms.page,
+              rows: forms.rows,
+              year: forms.yearName,
+              keyword: forms.keyword,
+              sort: forms.sortId
+            }
+          }
+        );
+
+        if (list.value.length > 0 && res.data.current === 1) {
+          return;
+        }
+
+        list.value = list.value.concat(res.data.rows || []);
+        forms.page = res.data.current + 1;
+        showContact.value = list.value.length > 0;
+        loading.value = false;
+        finished.value = res.data.current >= res.data.pages;
+      } catch {
+        showContact.value = false;
+        finished.value = true;
+      } finally {
+        loading.value = false;
+      }
+      forms.isClick = false;
+    };
+    const onRefresh = () => {
+      finished.value = false;
+      // 重新加载数据
+      // 将 loading 设置为 true,表示处于加载状态
+      loading.value = true;
+      getList();
+    };
+
+    onMounted(async () => {
+      document.title = '学生报名统计';
+      // await getSchoolList();
+      await getStat();
+      await getList();
+    });
+    const gotoDetail = (item:any)=>{
+      router.push({path:'/tenamtDataDetail',query:{id:route.query.id,schoolId:item.schoolId,schoolName:item.schoolName}})
+    }
+    const getStat = async () => {
+      try {
+        const { data } = await request.post(
+          '/edu-app/open/school/schoolRegisterStat',
+          {
+            data: {
+              tenantId: forms.id,
+              year: forms.yearName
+            }
+          }
+        );
+        forms.statObj = data;
+      } catch {
+        //
+      }
+    };
+    return () => (
+      <div class={styles.tenantAllData}>
+        <OHeader isBack={false} />
+        <div class={styles.topWrap}>
+          <div class={styles.topHead}>
+            <img src={topDot} class={styles.topDot} alt="" />
+            汇总数据
+          </div>
+          <div
+            class={styles.timerWrap}
+            onClick={() => {
+              forms.yearStatus = true;
+            }}>
+            {forms.yearName}年{' '}
+            <img
+              src={sanIcon}
+              class={[styles.sanIcon, forms.yearStatus ? styles.routeSan : '']}
+              alt=""
+            />
+          </div>
+        </div>
+        <div class={styles.cardWrap}>
+          <div class={[styles.schoolCard, styles.cardItem]}>
+            <div class={styles.cardNum}>
+              {' '}
+              {numeral(forms.statObj.schoolNum).format('0,0')}
+            </div>
+            <div class={styles.cardInfo}>
+              <img src={homeIcon} class={styles.cardInfoImg} alt="" />
+              学校数量
+            </div>
+            <div class={styles.cardLine}></div>
+          </div>
+          <div class={[styles.studentCard, styles.cardItem]}>
+            <div class={styles.cardNum}>
+              {' '}
+              {numeral(forms.statObj.registerNum).format('0,0')}
+            </div>
+            <div class={styles.cardInfo}>
+              <img src={personIcon} class={styles.cardInfoImg} alt="" />
+              报名人数
+            </div>
+            <div class={styles.cardLine}></div>
+          </div>
+        </div>
+        <div class={styles.searchWrap}>
+          <div class={styles.searechInfo}>
+            <OSearch
+              class={styles.allDataWrap}
+              shape="round"
+              background="#F6F8F9"
+              inputBackground="white"
+              onSearch={val => {
+                forms.keyword = val;
+                forms.page = 1;
+                refreshing.value = true;
+                getList();
+              }}></OSearch>
+          </div>
+
+          <div
+            class={styles.timerWrap}
+            onClick={() => (forms.perponStatus = true)}>
+            {forms.sortName}{' '}
+            <img
+              src={sanIcon}
+              class={[
+                styles.sanIcon,
+                forms.perponStatus ? styles.routeSan : ''
+              ]}
+              alt=""
+            />
+          </div>
+        </div>
+
+        <div class={styles.schoolList}>
+          {showContact.value ? (
+            <OFullRefresh
+              v-model:modelValue={refreshing.value}
+              onRefresh={onRefresh}
+              class={styles.refreshC}>
+              <List
+                loading-text=" "
+                finished={finished.value}
+                finished-text=" "
+                onLoad={getList}>
+                {list.value.map((item: any) => (
+                  <div class={styles.schoolItem} onClick={()=>gotoDetail(item)}>
+                    <div class={styles.schoolNameWrap}>
+                      <p class={styles.title}>学校名称</p>
+                      <p class={styles.schoolName}>{item.schoolName}</p>
+                    </div>
+                    <div class={styles.schoolCountWrap}>
+                      <div>
+                        <p class={styles.title}>报名人数</p>
+                        <p class={styles.personNum}>{item.registerNum}</p>
+                      </div>
+                      <img class={[styles.arrow]} src={arrowIcon} alt="" />
+                    </div>
+                  </div>
+                ))}
+              </List>
+            </OFullRefresh>
+          ) : null}
+
+          {!showContact.value && !loading.value && (
+            <OEmpty description="暂无学校信息" class={styles.emptyC} />
+          )}
+        </div>
+        <Popup
+          v-model:show={forms.yearStatus}
+          position="bottom"
+          round
+          class={'popupBottomSearch'}>
+          <DatePicker
+            showToolbar
+            v-model={forms.year}
+            columns-type={['year']}
+            onCancel={() => (forms.yearStatus = false)}
+            onConfirm={(val: any) => {
+              console.log(val);
+              // const selectedOption = val.selectedOptions[0];
+              // console.log(selectedOption, 'selectedOption');
+              // forms.schoolId = selectedOption.value;
+              // // forms.schoolName = selectedOption.text;
+              forms.year = [val.selectedValues[0]];
+              forms.yearName = val.selectedValues[0];
+              forms.page = 1;
+              refreshing.value = true;
+              getStat();
+              getList();
+              forms.yearStatus = false;
+            }}
+          />
+        </Popup>
+
+        <Popup
+          v-model:show={forms.perponStatus}
+          position="bottom"
+          round
+          class={'popupBottomSearch'}>
+          <Picker
+            showToolbar
+            columns={forms.sortList}
+            onCancel={() => (forms.perponStatus = false)}
+            onConfirm={(val: any) => {
+              console.log(val);
+              const selectedOption = val.selectedOptions[0];
+              forms.sortId = selectedOption.value;
+              forms.sortName = selectedOption.text;
+              refreshing.value = true;
+              getList();
+              forms.perponStatus = false;
+            }}
+          />
+        </Popup>
+      </div>
+    );
+  }
+});

+ 362 - 0
src/views/tenantAllData/tenamtDataDetail.tsx

@@ -0,0 +1,362 @@
+import { defineComponent, onMounted, reactive, ref } from 'vue';
+import styles from './index.module.less';
+import {
+  Cell,
+  CellGroup,
+  Col,
+  List,
+  Picker,
+  Popup,
+  Row,
+  Tab,
+  Tabs,
+  DatePicker
+} from 'vant';
+import MSticky from '@/components/m-sticky';
+// import icon1 from './images/icon1.png';
+// import icon2 from './images/icon2.png';
+// import icon3 from './images/icon3.png';
+// import icon4 from './images/icon4.png';
+// import iconTimer from './images/icon-timer.png';
+import personIcon from './images/personIcon.png';
+import homeIcon from './images/homeIcon.png';
+import sanIcon from './images/san.png';
+import request from '@/helpers/request';
+import topDot from './images/topDot.png';
+import { useRoute, useRouter } from 'vue-router';
+import { moneyFormat, numberFormat } from '@/helpers/utils';
+import OFullRefresh from '@/components/m-full-refresh';
+import OEmpty from '@/components/m-empty';
+import arrowIcon from './images/arrowIcon.png';
+import OHeader from '@/components/m-header';
+import OSearch from '@/components/m-search';
+import numeral from 'numeral';
+export default defineComponent({
+  name: 'tenant-apply-data',
+  setup() {
+    const route = useRoute();
+
+    const tabName = ref('all');
+    const forms = reactive({
+      keyword: '',
+      // id: route.query.id,
+      id: '1687275949971763202',
+      yearStatus: false,
+      schoolId: route.query.schoolId,
+      schoolName:route.query.schoolName,
+      year: [new Date().getFullYear()] as any,
+      yearName: new Date().getFullYear(),
+      classList: [] as any,
+      classStatus:false,
+      statObj: {
+        registerNum: 0,
+        schoolNum: 0
+      } as any,
+      perponStatus: false,
+      sortId: 'desc',
+      sortName: '人数降序',
+      sortList: [
+        { value: 'desc', text: '人数降序' },
+        { value: 'asc', text: '人数升序' }
+      ] as any,
+      page: 1,
+      rows: 20,
+      isClick: false
+    });
+
+    const refreshing = ref(false);
+    const loading = ref(true);
+    const finished = ref(false);
+    const showContact = ref(false);
+    const list = ref([]);
+
+    const getSchoolList = async () => {
+      try {
+        const { data } = await request.get('/edu-app/open/school/list', {
+          params: {
+            tenantId: forms.id
+          }
+        });
+        const temp = [
+          {
+            value: '',
+            text: '全部学校'
+          }
+        ];
+        if (Array.isArray(data)) {
+          data.forEach((item: any) => {
+            temp.push({
+              value: item.id,
+              text: item.name
+            });
+          });
+          forms.classList = temp;
+        }
+      } catch {
+        //
+      }
+    };
+
+    const getList = async () => {
+      if (forms.isClick) {
+        return;
+      }
+      forms.isClick = true;
+      if (refreshing.value) {
+        list.value = [];
+        forms.page = 1;
+        refreshing.value = false;
+      }
+      try {
+        const res = await request.post(
+          '/edu-app/open/school/schoolRegisterUserPage',
+          {
+            data: {
+              tenantId: forms.id,
+              page: forms.page,
+              rows: forms.rows,
+              year: forms.yearName,
+              keyword: forms.keyword,
+              sort: forms.sortId,
+              schoolId:forms.schoolId
+            }
+          }
+        );
+
+        if (list.value.length > 0 && res.data.current === 1) {
+          return;
+        }
+
+        list.value = list.value.concat(res.data.rows || []);
+        forms.page = res.data.current + 1;
+        showContact.value = list.value.length > 0;
+        loading.value = false;
+        finished.value = res.data.current >= res.data.pages;
+      } catch {
+        showContact.value = false;
+        finished.value = true;
+      } finally {
+        loading.value = false;
+      }
+      forms.isClick = false;
+    };
+    const onRefresh = () => {
+      finished.value = false;
+      // 重新加载数据
+      // 将 loading 设置为 true,表示处于加载状态
+      loading.value = true;
+      getList();
+    };
+
+    onMounted(async () => {
+      document.title = '学生报名统计';
+      // await getSchoolList();
+      await getStat();
+      await getList();
+      await getSchoolList()
+    });
+
+    const getStat = async () => {
+      try {
+        const { data } = await request.post(
+          '/edu-app/open/school/schoolRegisterStat',
+          {
+            data: {
+              tenantId: forms.id,
+              year: forms.yearName
+            }
+          }
+        );
+        forms.statObj = data;
+      } catch {
+        //
+      }
+    };
+    return () => (
+      <div class={styles.tenantAllData}>
+        <OHeader />
+        <div class={styles.topWrap}>
+          <div class={styles.topHeadSchool} onClick={()=>forms.classStatus= true}>
+
+            {forms.schoolName}
+            <img
+              src={sanIcon}
+              class={[styles.sanIcon, forms.classStatus ? styles.routeSan : '']}
+              alt=""
+            />
+          </div>
+          <div
+            class={styles.timerWrap}
+            onClick={() => {
+              forms.yearStatus = true;
+            }}>
+            {forms.yearName}年{' '}
+            <img
+              src={sanIcon}
+              class={[styles.sanIcon, forms.yearStatus ? styles.routeSan : '']}
+              alt=""
+            />
+          </div>
+        </div>
+        <div class={styles.cardWrap}>
+          {/* <div class={[styles.schoolCard, styles.cardItem]}>
+            <div class={styles.cardNum}>
+              {' '}
+              {numeral(forms.statObj.schoolNum).format('0,0')}
+            </div>
+            <div class={styles.cardInfo}>
+              <img src={homeIcon} class={styles.cardInfoImg} alt="" />
+              学校数量
+            </div>
+            <div class={styles.cardLine}></div>
+          </div> */}
+          <div class={[styles.studentCard, styles.cardItem,styles.detailCard]}>
+            <div class={styles.cardNum}>
+              {' '}
+              {numeral(forms.statObj.registerNum).format('0,0')}
+            </div>
+            <div class={styles.cardInfo}>
+              <img src={personIcon} class={styles.cardInfoImg} alt="" />
+              报名总人数
+            </div>
+            <div class={styles.cardLine}></div>
+          </div>
+        </div>
+        <div class={styles.searchWrap}>
+          <div class={styles.searechInfo}>
+            <OSearch
+              class={styles.allDataWrap}
+              shape="round"
+              background="#F6F8F9"
+              inputBackground="white"
+              onSearch={val => {
+                forms.keyword = val;
+                forms.page = 1;
+                refreshing.value = true;
+                getList();
+              }}></OSearch>
+          </div>
+
+          <div
+            class={styles.timerWrap}
+            onClick={() => (forms.perponStatus = true)}>
+            {forms.sortName}{' '}
+            <img
+              src={sanIcon}
+              class={[
+                styles.sanIcon,
+                forms.perponStatus ? styles.routeSan : ''
+              ]}
+              alt=""
+            />
+          </div>
+        </div>
+
+        <div class={styles.schoolList}>
+          {showContact.value ? (
+            <OFullRefresh
+              v-model:modelValue={refreshing.value}
+              onRefresh={onRefresh}
+              class={styles.refreshC}>
+              <List
+                loading-text=" "
+                finished={finished.value}
+                finished-text=" "
+                onLoad={getList}>
+                {list.value.map((item: any) => (
+                  <div class={styles.studentItem} >
+                    <div class={styles.studentNameWrap}>
+                      <p class={styles.title}>{item.userName}</p>
+                      <p class={styles.studentPhone}>{item.phone}</p>
+                    </div>
+                    <div class={styles.studentCountWrap}>
+                      <div>
+                        <p class={styles.title}>{item.createTime}</p>
+                        {/* <p class={styles.personNum}>{item.registerNum}</p> */}
+                      </div>
+
+                    </div>
+                  </div>
+                ))}
+              </List>
+            </OFullRefresh>
+          ) : null}
+
+          {!showContact.value && !loading.value && (
+            <OEmpty description="暂无学校信息" class={styles.emptyC} />
+          )}
+        </div>
+        <Popup
+          v-model:show={forms.yearStatus}
+          position="bottom"
+          round
+          class={'popupBottomSearch'}>
+          <DatePicker
+            showToolbar
+            v-model={forms.year}
+            columns-type={['year']}
+            onCancel={() => (forms.yearStatus = false)}
+            onConfirm={(val: any) => {
+              console.log(val);
+              // const selectedOption = val.selectedOptions[0];
+              // console.log(selectedOption, 'selectedOption');
+              // forms.schoolId = selectedOption.value;
+              // // forms.schoolName = selectedOption.text;
+              forms.year = [val.selectedValues[0]];
+              forms.yearName = val.selectedValues[0];
+              forms.page = 1;
+              refreshing.value = true;
+              // getStat();
+              getList();
+              forms.yearStatus = false;
+            }}
+          />
+        </Popup>
+
+        <Popup
+          v-model:show={forms.perponStatus}
+          position="bottom"
+          round
+          class={'popupBottomSearch'}>
+          <Picker
+            showToolbar
+            columns={forms.sortList}
+            onCancel={() => (forms.perponStatus = false)}
+            onConfirm={(val: any) => {
+              console.log(val);
+              const selectedOption = val.selectedOptions[0];
+              forms.sortId = selectedOption.value;
+              forms.sortName = selectedOption.text;
+              refreshing.value = true;
+              getList();
+              forms.perponStatus = false;
+            }}
+          />
+        </Popup>
+
+
+        <Popup
+          v-model:show={forms.classStatus}
+          position="bottom"
+          round
+          class={'popupBottomSearch'}>
+          <Picker
+            showToolbar
+            columns={forms.classList}
+            onCancel={() => (forms.classStatus = false)}
+            onConfirm={(val: any) => {
+              const selectedOption = val.selectedOptions[0];
+
+              forms.schoolId = selectedOption.value;
+              forms.schoolName = selectedOption.text;
+              // getStat();
+              forms.classStatus = false;
+              refreshing.value = true;
+              getList()
+            }}
+          />
+        </Popup>
+      </div>
+    );
+  }
+});