information.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import OSticky from '@/components/o-sticky'
  2. import { Button, Grid, GridItem, Icon, Image, Popover, Popup } from 'vant'
  3. import { defineComponent, reactive } from 'vue'
  4. import styles from './information.module.less'
  5. import iconSaveImage from '../images/icon-save-image.png'
  6. import iconWechat from '../images/icon-wechat.png'
  7. import OQrcode from '@/components/o-qrcode'
  8. export default defineComponent({
  9. name: 'detail-information',
  10. setup() {
  11. const state = reactive({
  12. showPopover: false,
  13. actions: [
  14. { text: '全部乐团', color: 'var(--van-primary-color)' },
  15. { text: '交付团' },
  16. { text: '晋升团' }
  17. ],
  18. oPopover: false,
  19. check: [],
  20. checkboxRefs: [] as any,
  21. showQrcode: false
  22. })
  23. return () => (
  24. <>
  25. <div style={{ padding: '12px 13px 16px', background: '#F8F8F8' }}>
  26. <Popover
  27. v-model:show={state.showPopover}
  28. actions={state.actions}
  29. showArrow={false}
  30. placement="bottom-start"
  31. offset={[0, 12]}
  32. style={{ zIndex: '9999' }}
  33. >
  34. {{
  35. reference: () => (
  36. <div class={styles.searchBand}>
  37. 全部乐团 <Icon name={state.showPopover ? 'arrow-up' : 'arrow-down'} />
  38. </div>
  39. )
  40. }}
  41. </Popover>
  42. <Popover
  43. v-model:show={state.oPopover}
  44. actions={state.actions}
  45. showArrow={false}
  46. placement="bottom"
  47. offset={[0, 12]}
  48. style={{ zIndex: '9999' }}
  49. >
  50. {{
  51. reference: () => (
  52. <div class={styles.searchBand} style="margin-left: 16px">
  53. 武汉小学2022预备团 <Icon name={state.oPopover ? 'arrow-up' : 'arrow-down'} />
  54. </div>
  55. )
  56. }}
  57. </Popover>
  58. </div>
  59. <Grid border={false} class={styles.gridContainer}>
  60. <GridItem>
  61. <p class={[styles.title, styles.red]}>
  62. 92<span>名</span>
  63. </p>
  64. <p class={styles.name}>在读学生</p>
  65. </GridItem>
  66. <GridItem>
  67. <p class={[styles.title, styles.red]}>92%</p>
  68. <p class={styles.name}>到课率</p>
  69. </GridItem>
  70. <GridItem>
  71. <p class={[styles.title, styles.red]}>92%</p>
  72. <p class={styles.name}>作业提交率</p>
  73. </GridItem>
  74. <GridItem>
  75. <p class={[styles.title, styles.red]}>92%</p>
  76. <p class={styles.name}>练习合格率</p>
  77. </GridItem>
  78. </Grid>
  79. {[1, 2, 3, 4, 5, 6].map((val: any) => (
  80. <div class={[styles.gridContainer, styles.gridClass]}>
  81. <div class={styles.className}>
  82. <i class={styles.line}></i>
  83. 长笛班
  84. </div>
  85. <Grid border={false} columnNum={3}>
  86. <GridItem>
  87. <p class={styles.title}>18</p>
  88. <p class={styles.name}>在读学生</p>
  89. </GridItem>
  90. <GridItem>
  91. <p class={[styles.title, styles.teacher]}>张老师</p>
  92. <p class={styles.name}>伴学指导</p>
  93. </GridItem>
  94. <GridItem>
  95. <p class={styles.title}>10/16</p>
  96. <p class={styles.name}>课时</p>
  97. </GridItem>
  98. </Grid>
  99. </div>
  100. ))}
  101. <OSticky position="bottom">
  102. <div class={'btnGroup'}>
  103. <Button round block type="primary" onClick={() => (state.showQrcode = true)}>
  104. 报名二维码
  105. </Button>
  106. </div>
  107. </OSticky>
  108. <Popup
  109. v-model:show={state.showQrcode}
  110. position="bottom"
  111. style={{ background: 'transparent' }}
  112. safeAreaInsetBottom={true}
  113. >
  114. <div class={styles.codeContainer}>
  115. <div class={styles.codeImg}>
  116. <div class={styles.codeContent}>
  117. <h2 class={styles.codeTitle}>乐团报名</h2>
  118. <div class={styles.codeName}>武汉小学2022上学期团武汉小学</div>
  119. <div class={styles.codeQr}>
  120. <OQrcode text="http://ponline.dayaedu.com/" size={400} />
  121. </div>
  122. <div style={{ textAlign: 'center' }}>
  123. <span class={styles.codeBtnText}>扫描上方二维码完成资料填写</span>
  124. </div>
  125. <div class={styles.codeTips}>二维码将在两小时后失效,请及时登记</div>
  126. </div>
  127. </div>
  128. <div class={styles.codeBottom}>
  129. <Icon
  130. name="cross"
  131. size={22}
  132. class={styles.close}
  133. color="#666"
  134. onClick={() => (state.showQrcode = false)}
  135. />
  136. <h3 class={styles.title}>
  137. <i></i>分享方式
  138. </h3>
  139. <Grid columnNum={2} border={false}>
  140. <GridItem>
  141. {{
  142. icon: () => <Image class={styles.shareImg} src={iconSaveImage} />,
  143. text: () => <div class={styles.shareText}>保存图片</div>
  144. }}
  145. </GridItem>
  146. <GridItem>
  147. {{
  148. icon: () => <Image class={styles.shareImg} src={iconWechat} />,
  149. text: () => <div class={styles.shareText}>微信</div>
  150. }}
  151. </GridItem>
  152. </Grid>
  153. </div>
  154. </div>
  155. </Popup>
  156. </>
  157. )
  158. }
  159. })