end-approval.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import OEmpty from '@/components/o-empty'
  2. import OFullRefresh from '@/components/o-full-refresh'
  3. import dayjs from 'dayjs'
  4. import { List, PullRefresh, showToast } from 'vant'
  5. import { defineComponent, reactive, ref, onMounted, TransitionGroup } from 'vue'
  6. import { useRouter } from 'vue-router'
  7. import styles from './wait-approval.module.less'
  8. import request from '@/helpers/request'
  9. import ApprovalItem from './approval-item'
  10. export default defineComponent({
  11. name: 'end-approval',
  12. setup() {
  13. const router = useRouter()
  14. const forms = reactive({
  15. page: 1,
  16. rows: 20
  17. })
  18. const refreshing = ref(false)
  19. const loading = ref(false)
  20. const finished = ref(false)
  21. const list = ref([])
  22. const getList = async () => {
  23. if (loading.value) return
  24. loading.value = true
  25. try {
  26. if (refreshing.value) {
  27. list.value = []
  28. forms.page = 1
  29. finished.value = false
  30. }
  31. const res = await request.post('/api-school/userApproveRecord/page', {
  32. data: { ...forms, hasHandle: true },
  33. hideLoading: refreshing.value
  34. })
  35. if (Array.isArray(res?.data?.rows)) {
  36. list.value = list.value.concat(res.data.rows || [])
  37. forms.page = res.data.current + 1
  38. finished.value = !res.data.next
  39. } else {
  40. finished.value = true
  41. }
  42. } catch (e: any) {
  43. finished.value = true
  44. }
  45. loading.value = false
  46. refreshing.value = false
  47. }
  48. onMounted(() => {
  49. getList()
  50. })
  51. const gotoDetail = (row: any) => {
  52. // leaveCategoryId 1请假 2退团
  53. router.push({ path: '/student-leave', query: { id: row.id, type: 'end' } })
  54. }
  55. return () => (
  56. <OFullRefresh
  57. modelValue={refreshing.value}
  58. onRefresh={() => {
  59. refreshing.value = true
  60. getList()
  61. }}
  62. style="min-height: calc(100vh - var(--van-tabs-line-height) - var(--header-height) - 1.33333rem);"
  63. >
  64. <List
  65. loading={loading.value}
  66. loading-text=" "
  67. finished={finished.value}
  68. finished-text=" "
  69. onLoad={getList}
  70. >
  71. <TransitionGroup name="van-fade">
  72. {list.value.map((item: any, itemIndex: number) => (
  73. <div key={`index-${itemIndex}`} onClick={() => gotoDetail(item)}>
  74. <ApprovalItem item={item} type="end"></ApprovalItem>
  75. </div>
  76. ))}
  77. </TransitionGroup>
  78. </List>
  79. {!loading.value && !list.value.length && <OEmpty tips="暂无审批" />}
  80. </OFullRefresh>
  81. )
  82. }
  83. })