index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div class="container">
  3. <van-form @submit="onSubmit">
  4. <van-cell-group inset>
  5. <van-field
  6. v-model="form.nick_name"
  7. name="姓名"
  8. label="姓名"
  9. placeholder="请填写姓名"
  10. required
  11. :rules="[{ required: true, message: '请填写姓名' }]"
  12. />
  13. <van-field
  14. v-model="form.duties"
  15. name="职务"
  16. label="职务"
  17. placeholder="请填写职务"
  18. required
  19. :rules="[{ required: true, message: '请填写职务' }]"
  20. />
  21. <van-field
  22. v-model="form.dept_name"
  23. name="单位"
  24. label="单位"
  25. placeholder="请填写单位"
  26. required
  27. :rules="[{ required: true, message: '请填写单位' }]"
  28. />
  29. <van-field
  30. v-model="form.phone"
  31. name="联系方式"
  32. label="联系方式"
  33. placeholder="请填写联系方式"
  34. required
  35. :rules="[
  36. { required: true, message: '请填写联系方式' },
  37. { validator: validatePhone, message: '请输入正确的联系方式' }
  38. ]"
  39. />
  40. <van-field
  41. v-show="type === '2'"
  42. readonly
  43. v-model="form.sign_time"
  44. name="签到时间"
  45. label="签到时间"
  46. />
  47. </van-cell-group>
  48. <div class="button-list" v-if="type === '1'">
  49. <van-button :loading="loading" loading-text="签到中..." block type="primary" native-type="submit">
  50. 确定签到
  51. </van-button>
  52. <div class="div-line"></div>
  53. <van-button block type="default" @click="handleSignCancel" v-if="type === '1'">
  54. 取消签到
  55. </van-button>
  56. </div>
  57. <div class="button-list" v-if="type === '2'">
  58. <van-button :loading="loading" loading-text="签退中..." block type="danger" native-type="submit">
  59. 确定签退
  60. </van-button>
  61. <div class="div-line"></div>
  62. <van-button block type="default" @click="handleSignCancel">
  63. 取消签退
  64. </van-button>
  65. </div>
  66. </van-form>
  67. </div>
  68. </template>
  69. <script lang="ts" setup name="signPage">
  70. import {onMounted, ref} from "vue";
  71. import {validatePhone} from "@/utils/validate";
  72. import { getSignInfo, signEvent } from '@/api/event';
  73. import { useRoute, useRouter } from 'vue-router';
  74. const route = useRoute();
  75. const router = useRouter()
  76. const loading = ref(false);
  77. const event_id = route.query.event_id as string;
  78. // 1 签到 2 签退
  79. const type = ref('1');
  80. const form = ref({
  81. user_id: '0',
  82. nick_name: '',
  83. dept_id: '0',
  84. dept_name: '',
  85. duties: '',
  86. sign_time: '',
  87. phone: ''
  88. })
  89. // 提交
  90. const onSubmit = () => {
  91. const submitMethod = type.value === '1' ? '1' : '2';
  92. const data = {
  93. ...form.value,
  94. event_id: event_id,
  95. type: submitMethod
  96. };
  97. loading.value = true;
  98. signEvent(data).then((res)=>{
  99. loading.value = false;
  100. router.push("/signOK?type="+submitMethod)
  101. })
  102. }
  103. const handleSignCancel = () => {
  104. router.push("/")
  105. }
  106. onMounted(() => {
  107. if (/(wxworklocal)/i.test(navigator.userAgent)) {
  108. getSignInfo({event_id: event_id}).then((res)=> {
  109. const user = res.data;
  110. console.log('user', user);
  111. type.value = user.sign_time == '' ? '1' : '2';
  112. form.value = {
  113. user_id: user.user_id,
  114. nick_name: user.nick_name,
  115. dept_id: user.dept_id,
  116. dept_name: user.dept_name,
  117. duties: user.duties,
  118. sign_time: user.sign_time,
  119. phone: user.phone
  120. }
  121. })
  122. }
  123. })
  124. </script>
  125. <style lang="scss" scoped>
  126. .container {
  127. padding-top: 16px;
  128. .button-list {
  129. margin: 16px;
  130. }
  131. .div-line {
  132. height: 16px;
  133. }
  134. }
  135. </style>