apply-withdrawal.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import OHeader from '@/components/o-header'
  2. import { defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue'
  3. import iconStudent from '@common/images/icon_student.png'
  4. import styles from './apply-withdrawal.module.less'
  5. import { Button, Field, Image, showToast } from 'vant'
  6. import OSticky from '@/components/o-sticky'
  7. import { useRoute, useRouter } from 'vue-router'
  8. import request from '@/helpers/request'
  9. import { postMessage } from '@/helpers/native-message'
  10. import ODialog from '@/components/o-dialog'
  11. export default defineComponent({
  12. name: 'apply-withdrawal',
  13. setup() {
  14. const route = useRoute()
  15. const router = useRouter()
  16. const headColor = reactive({
  17. headBg: 'transparent',
  18. textColor: '#fff'
  19. })
  20. const forms = reactive({
  21. status: false,
  22. statusMember: false,
  23. reason: '',
  24. id: route.query.id,
  25. dataInfo: {} as any,
  26. isClick: false
  27. })
  28. const getDetails = async () => {
  29. try {
  30. const { data } = await request.post('/api-student/student/getOrchestraDate/' + forms.id)
  31. forms.dataInfo = data
  32. } catch {
  33. //
  34. }
  35. }
  36. const onSubmit = async () => {
  37. if (!forms.reason) {
  38. showToast('请输入退团原因')
  39. return
  40. }
  41. try {
  42. const { data } = await request.post('/api-student/student/hasWaitActivateVipOrder', {
  43. requestType: 'form',
  44. data: {
  45. orchestraId: forms.id
  46. }
  47. })
  48. if (data) {
  49. forms.statusMember = true
  50. } else {
  51. forms.status = true
  52. }
  53. } catch {
  54. //
  55. }
  56. }
  57. //
  58. const onConfirm = async () => {
  59. try {
  60. forms.isClick = true
  61. await request.post('/api-student/orchestra/leaveOrchestra', {
  62. data: {
  63. studentId: forms.dataInfo.studentId,
  64. orchestraId: forms.id,
  65. reason: forms.reason
  66. }
  67. })
  68. forms.isClick = false
  69. router.back()
  70. } catch {
  71. //
  72. forms.isClick = false
  73. }
  74. }
  75. onMounted(() => {
  76. postMessage({ api: 'setStatusBarTextColor', content: { statusBarTextColor: true } })
  77. getDetails()
  78. })
  79. onUnmounted(() => {
  80. postMessage({ api: 'setStatusBarTextColor', content: { statusBarTextColor: false } })
  81. })
  82. return () => (
  83. <div class={styles.applyWithdrawal}>
  84. <div class={styles.headers}>
  85. <OHeader
  86. background={headColor.headBg}
  87. color={headColor.textColor}
  88. border={false}
  89. backIconColor="white"
  90. />
  91. <div class={styles.userInfo}>
  92. <Image
  93. src={forms.dataInfo.studentAvatar || iconStudent}
  94. class={styles.img}
  95. fit="contain"
  96. />
  97. <div class={styles.userName}>{forms.dataInfo.studentName} 同学</div>
  98. <div class={styles.timer}>
  99. 您已在{forms.dataInfo.orchestraName}训练<span>{forms.dataInfo.joinDays}</span>天
  100. </div>
  101. </div>
  102. </div>
  103. <div class={styles.content}>
  104. 在乐团训练的日子里,有付出有汗水,有从0到1的喜悦也有攻克难关的坚持。你的付出为你带来成长,你的成长让老师感到欣喜。
  105. </div>
  106. <div class={styles.resion}>
  107. <div class={styles.title}>
  108. <div class={styles.name}>
  109. <i></i>退团原因<span>*</span>
  110. </div>
  111. <div class={styles.nums}>{forms.reason.length || 0}/400</div>
  112. </div>
  113. <Field v-model={forms.reason} placeholder="请输入退团详细原因" type="textarea" rows={3} />
  114. </div>
  115. <OSticky position="bottom">
  116. <div class={'btnGroup'}>
  117. <Button block round type="primary" onClick={onSubmit} disabled={forms.isClick}>
  118. 确定
  119. </Button>
  120. </div>
  121. </OSticky>
  122. <ODialog
  123. v-model:show={forms.status}
  124. title="提示"
  125. message={'确定要提交退团申请吗?'}
  126. messageAlign="left"
  127. confirmButtonText="确定"
  128. cancelButtonText="取消"
  129. showCancelButton
  130. onConfirm={onConfirm}
  131. ></ODialog>
  132. <ODialog
  133. v-model:show={forms.statusMember}
  134. title="提示"
  135. message={'您有待激活的团练宝订单,是否继续退团?'}
  136. messageAlign="left"
  137. confirmButtonText="继续"
  138. cancelButtonText="取消"
  139. showCancelButton
  140. onConfirm={onConfirm}
  141. ></ODialog>
  142. </div>
  143. )
  144. }
  145. })