approval-item.tsx 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { defineComponent, reactive, ref } from 'vue'
  2. import styles from './approval-item.module.less'
  3. import clockIcon from '@/school/attendance/images/clock-icon.png'
  4. import passIcon from '../images/pass-icon.png'
  5. import unpassIcon from '../images/unpass-icon.png'
  6. import defaultIcon from '@/school/images/default-icon.jpg'
  7. import msgIcon from '@/school/images/msg-icon.png'
  8. import { Icon, ActionSheet, showToast } from 'vant'
  9. import dayjs from 'dayjs'
  10. import { useRouter } from 'vue-router'
  11. import { postMessage } from '@/helpers/native-message'
  12. export default defineComponent({
  13. props: ['item', 'type'],
  14. name: 'approval-item',
  15. setup(props) {
  16. const router = useRouter()
  17. const gotoStudentDetail = () => {
  18. // router.push({ path: '/student-att-day', query: { time: props.item.time } })
  19. }
  20. const gotoMsg = async () => {
  21. console.log(props.item)
  22. try {
  23. await postMessage({
  24. api: 'joinChatGroup',
  25. content: {
  26. type: 'single', // single 单人 multi 多人
  27. id: props.item.imUserId
  28. }
  29. })
  30. } catch (e) {
  31. showToast('发起聊天失败')
  32. }
  33. }
  34. return () => (
  35. <>
  36. <div class={styles.itemWrap} onClick={gotoStudentDetail}>
  37. <div class={styles.itemWrapTop}>
  38. <div class={styles.itemWrapTopLeft}>
  39. <div class={styles.clockWrap}>
  40. <img src={clockIcon} alt="" />
  41. </div>
  42. <p class={styles.leftTimer}>
  43. {dayjs(props.item.createTime).format('YYYY-MM-DD hh:mm')}
  44. </p>
  45. </div>
  46. {props.type == 'end' && props.item.status == 'PASS' ? (
  47. <div class={styles.itemWrapTopRight}>
  48. <Icon class={styles.passIcon} name={passIcon}></Icon>
  49. <p class={styles.passLabel}>通过</p>
  50. </div>
  51. ) : null}
  52. {props.type == 'end' && props.item.status == 'UNPASS' ? (
  53. <div class={styles.itemWrapTopRight}>
  54. <Icon class={styles.passIcon} name={unpassIcon}></Icon>
  55. <p class={styles.unpassLabel}>拒绝</p>
  56. </div>
  57. ) : null}
  58. {props.type == 'doing' && props.item.status == 'DOING' ? (
  59. <div class={styles.itemWrapTopRight} onClick={gotoMsg}>
  60. <Icon class={styles.msgIcon} name={msgIcon}></Icon>
  61. </div>
  62. ) : null}
  63. </div>
  64. <div class={styles.itemWrapBottom}>
  65. <div class={styles.courseInfo}>
  66. <div class={styles.courseInfoLeft}>
  67. <img class={styles.headImgs} src={defaultIcon} alt="" />
  68. <div class={styles.infoMsg}>
  69. <p class={styles.infoMsgMain}>{props.item.nickName}</p>
  70. {props.item.clientType == 'STUDENT' ? (
  71. <p class={[styles.infoMsgSub, styles.student]}>学生</p>
  72. ) : (
  73. <p class={[styles.infoMsgSub, styles.teacher]}>老师</p>
  74. )}
  75. </div>
  76. </div>
  77. <div class={styles.courseInfoRight}>
  78. {props.item.leaveCategoryId == 1 ? <p class={styles.approvalType}>请假</p> : null}
  79. {props.item.leaveCategoryId == 2 ? <p class={styles.approvalType}>退团</p> : null}
  80. {props.type != 'doing' ? <Icon class={styles.icons} name="arrow"></Icon> : null}
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </>
  86. )
  87. }
  88. })