Sfoglia il codice sorgente

Merge branch 'master' into jenkins

mo 2 anni fa
parent
commit
9fbee62949

+ 15 - 3
src/router/routes-school.ts

@@ -15,14 +15,16 @@ const noLoginRouter = [
     meta: {
       title: '乐团伴学老师注册'
     }
-  }, {
+  },
+  {
     path: '/manage-teacher-register',
     name: 'manage-teacher-register',
     component: () => import('@/school/manage-teacher/manage-teacher-register'),
     meta: {
       title: '乐团管理老师注册'
     }
-  }]
+  }
+]
 
 export default [
   {
@@ -106,7 +108,8 @@ export default [
         meta: {
           title: '伴学老师详情'
         }
-      }, {
+      },
+      {
         path: '/companion-unbind',
         name: 'companion-unbind',
         component: () => import('@/school/companion-teacher/unbind'),
@@ -170,7 +173,16 @@ export default [
         meta: {
           title: '排行榜'
         }
+      },
+      {
+        path: '/approval-manage',
+        name: 'approval-manage',
+        component: () => import('@/school/approval-manage/index'),
+        meta: {
+          title: '我的审批'
+        }
       }
+      //
     ]
   },
 

+ 69 - 0
src/school/approval-manage/components/approval-item.module.less

@@ -0,0 +1,69 @@
+.itemWrap {
+  padding: 12px 15px 15px;
+  border-radius: 10px;
+  background-color: #fff;
+  margin: 0 13px 12px;
+  .itemWrapTop {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: space-between;
+    padding-bottom: 12px;
+    border-bottom: 1px solid #f2f2f2;
+    .itemWrapTopLeft {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      .clockWrap {
+        width: 18px;
+        height: 18px;
+        margin-right: 6px;
+        img {
+          width: 100%;
+          height: 100%;
+        }
+      }
+      .leftTimer {
+        font-size: 14px;
+        font-weight: 500;
+        color: #333333;
+        line-height: 20px;
+      }
+    }
+    .itemWrapTopRight {
+      font-size: 12px;
+      color: #777;
+    }
+  }
+  .itemWrapBottom {
+    padding-top: 15px;
+
+    .courseInfo {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-bottom: 15px;
+      .headImgs {
+        width: 42px;
+        height: 42px;
+        border-radius: 50%;
+        overflow: hidden;
+        margin-right: 12px;
+      }
+      .infoMsg {
+        .infoMsgMain {
+          font-size: 16px;
+          font-weight: 600;
+          color: #333333;
+          line-height: 22px;
+        }
+        .infoMsgSub {
+          font-size: 12px;
+          font-weight: 400;
+          color: #777777;
+          line-height: 17px;
+        }
+      }
+    }
+  }
+}

+ 50 - 0
src/school/approval-manage/components/approval-item.tsx

@@ -0,0 +1,50 @@
+import { defineComponent, reactive, ref } from 'vue'
+import styles from './approval-item.module.less'
+import clockIcon from '@/school/attendance/images/clock-icon.png'
+
+import defaultIcon from '@/school/images/default-icon.jpg'
+import { Icon, ActionSheet } from 'vant'
+import dayjs from 'dayjs'
+import { useRouter } from 'vue-router'
+export default defineComponent({
+  props: ['item', 'type'],
+  name: 'approval-item',
+  setup(props) {
+    const router = useRouter()
+    const gotoStudentDetail = () => {
+      // router.push({ path: '/student-att-day', query: { time: props.item.time } })
+    }
+    return () => (
+      <>
+        <div class={styles.itemWrap} onClick={gotoStudentDetail}>
+          <div class={styles.itemWrapTop}>
+            <div class={styles.itemWrapTopLeft}>
+              <div class={styles.clockWrap}>
+                <img src={clockIcon} alt="" />
+              </div>
+              <p class={styles.leftTimer}>
+                {dayjs(props.item.startTime).format('YYYY-MM-DD hh:mm')}
+                {'-'}
+                {dayjs(props.item.endTime).format('hh:mm')}
+              </p>
+            </div>
+            <div class={styles.itemWrapTopRight}>
+              <Icon name="arrow"></Icon>
+            </div>
+          </div>
+          <div class={styles.itemWrapBottom}>
+            <div class={styles.courseInfo}>
+              <img class={styles.headImgs} src={defaultIcon} alt="" />
+              <div class={styles.infoMsg}>
+                <p class={styles.infoMsgMain}>
+                  {props.item.classGroupName}-{props.item.teacherName}
+                </p>
+                <p class={styles.infoMsgSub}>{props.item.orchestraName}</p>
+              </div>
+            </div>
+          </div>
+        </div>
+      </>
+    )
+  }
+})

+ 0 - 0
src/school/approval-manage/components/wait-approval.module.less


+ 83 - 0
src/school/approval-manage/components/wait-approval.tsx

@@ -0,0 +1,83 @@
+import OEmpty from '@/components/o-empty'
+import dayjs from 'dayjs'
+import { List, PullRefresh, showToast } from 'vant'
+import { defineComponent, reactive, ref, onMounted } from 'vue'
+import { useRouter } from 'vue-router'
+import styles from './wait-approval.module.less'
+import request from '@/helpers/request'
+import ApprovalItem from './approval-item'
+export default defineComponent({
+  name: 'wait-approval',
+  setup() {
+    const router = useRouter()
+    const forms = reactive({
+      page: 1,
+      rows: 20
+    })
+
+    const refreshing = ref(false)
+    const loading = ref(false)
+    const finished = ref(false)
+    const showContact = ref(false)
+    const list = ref([])
+
+    const getList = async () => {
+      console.log('getList')
+      loading.value = true
+      try {
+        if (refreshing.value) {
+          forms.page = 1
+          list.value = []
+          refreshing.value = false
+        }
+
+        const res = await request.post('/api-school/userLeaveRecord/page', {
+          data: { ...forms }
+        })
+
+        if (list.value.length > 0 && res.data.pages === 1) {
+          return
+        }
+
+        forms.page = res.data.current + 1
+        list.value = list.value.concat(res.data.rows || [])
+        showContact.value = list.value.length > 0
+        loading.value = false
+        finished.value = res.data.current >= res.data.pages
+      } catch (e: any) {
+        // console.log(e, 'e')
+        const message = e.message
+        showToast(message)
+        showContact.value = false
+        finished.value = true
+      }
+    }
+    const onRefresh = () => {
+      finished.value = false
+      // 重新加载数据
+      // 将 loading 设置为 true,表示处于加载状态
+      loading.value = true
+      getList()
+    }
+    return () => (
+      <>
+        {showContact.value ? (
+          <PullRefresh v-model={refreshing.value} onRefresh={onRefresh}>
+            <List
+              v-model:loading={loading.value}
+              finished={finished.value}
+              finished-text="没有更多了"
+              onLoad={getList}
+            >
+              {list.value.map((item: any) => (
+                <ApprovalItem item={item} type="wait"></ApprovalItem>
+              ))}
+            </List>
+          </PullRefresh>
+        ) : (
+          <OEmpty />
+        )}
+      </>
+    )
+  }
+})

+ 8 - 0
src/school/approval-manage/index.module.less

@@ -0,0 +1,8 @@
+.approvalTab {
+  :global {
+    .van-tabs__line {
+      position: absolute;
+      bottom: 20px !important;
+    }
+  }
+}

+ 30 - 0
src/school/approval-manage/index.tsx

@@ -0,0 +1,30 @@
+import OHeader from '@/components/o-header'
+import OSticky from '@/components/o-sticky'
+import { Tabs, Tab } from 'vant'
+import { defineComponent, reactive, ref } from 'vue'
+import styles from './index.module.less'
+import { useRouter } from 'vue-router'
+const activeName = ref('wait')
+export default defineComponent({
+  name: 'approval-manage',
+  setup() {
+    const router = useRouter()
+    const state = reactive({})
+
+    return () => (
+      <>
+        <OSticky position="top" background="#F8F8F8">
+          <OHeader isBack={true}></OHeader>
+          <Tabs v-model:active={activeName.value} class={styles.approvalTab}>
+            <Tab name="wait" title="待审批">
+              待审批
+            </Tab>
+            <Tab name="end" title="已完成">
+              已完成
+            </Tab>
+          </Tabs>
+        </OSticky>
+      </>
+    )
+  }
+})

+ 3 - 3
src/school/attendance/components/attend-student.tsx

@@ -62,7 +62,7 @@ export default defineComponent({
         const res = await request.post(
           '/api-school/courseScheduleStudentAttendance/studentAttendance',
           {
-            params: { ...forms }
+            data: { ...forms }
           }
         )
 
@@ -115,7 +115,7 @@ export default defineComponent({
         .join(',')
       try {
         const res = await request.post('/api-school/orchestra/page', {
-          params: { page: 1, rows: 9999, schoolId }
+          data: { page: 1, rows: 9999, schoolId }
         })
         state.actions = res.data.rows.map((item) => {
           return {
@@ -133,7 +133,7 @@ export default defineComponent({
     const getSubjects = async () => {
       try {
         const res = await request.post('/api-school/subject/page', {
-          params: { page: 1, rows: 9999 }
+          data: { page: 1, rows: 9999 }
         })
         state.subjects = res.data.rows.map((item) => {
           return {

+ 2 - 2
src/school/attendance/components/attend-teacher.tsx

@@ -61,7 +61,7 @@ export default defineComponent({
         }
 
         const res = await request.post('api-school/courseSchedule/teacherAttendance', {
-          params: { ...forms }
+          data: { ...forms }
         })
 
         if (list.value.length > 0 && res.data.pages === 1) {
@@ -117,7 +117,7 @@ export default defineComponent({
         .join(',')
       try {
         const res = await request.post('/api-school/orchestra/page', {
-          params: { page: 1, rows: 9999, schoolId }
+          data: { page: 1, rows: 9999, schoolId }
         })
         state.actions = res.data.rows.map((item) => {
           return {

+ 1 - 1
src/school/attendance/student-att-day.tsx

@@ -59,7 +59,7 @@ export default defineComponent({
         }
 
         const res = await request.post('/api-school/courseScheduleStudentAttendance/page', {
-          params: { ...forms }
+          data: { ...forms }
         })
 
         if (list.value.length > 0 && res.data.pages === 1) {

+ 3 - 3
src/school/exercise-record/index.tsx

@@ -69,7 +69,7 @@ export default defineComponent({
           refreshing.value = false
         }
         const res = await request.post('/api-school/student/page', {
-          params: { ...forms }
+          data: { ...forms }
         })
 
         if (list.value.length > 0 && res.data.pages === 1) {
@@ -136,7 +136,7 @@ export default defineComponent({
         .join(',')
       try {
         const res = await request.post('/api-school/orchestra/page', {
-          params: { page: 1, rows: 9999, schoolId }
+          data: { page: 1, rows: 9999, schoolId }
         })
         state.actions = res.data.rows.map((item) => {
           return {
@@ -154,7 +154,7 @@ export default defineComponent({
     const getSubjects = async () => {
       try {
         const res = await request.post('/api-school/subject/page', {
-          params: { page: 1, rows: 9999 }
+          data: { page: 1, rows: 9999 }
         })
         state.subjects = res.data.rows.map((item) => {
           return {

+ 1 - 1
src/styles/index.less

@@ -83,7 +83,7 @@
 
   --van-tag-default-color: #f8f8f8 !important;
   --van-tag-text-default-color: #c0c0c0;
-
+  --van-tabs-bottom-bar-width: 20px;
   --col-background-color: #f6f8f9;
 
   --white: #fff;