index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <template>
  2. <div class="container">
  3. <van-form @submit="onSubmit">
  4. <van-cell-group inset>
  5. <van-field
  6. v-model="form.user_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" style="margin: 16px;">
  49. <van-button :loading="loading" loading-text="签到中..." block type="primary" native-type="submit" v-if="type === '1'">
  50. 确定签到
  51. </van-button>
  52. <van-button block type="default" @click="handleSignCancel" v-if="type === '1'">
  53. 取消签到
  54. </van-button>
  55. <van-button :loading="loading" loading-text="签退中..." block type="primary" native-type="submit" v-if="type === '2'">
  56. 确定签退
  57. </van-button>
  58. <van-button block type="default" @click="handleSignCancel" v-if="type === '2'">
  59. 取消签退
  60. </van-button>
  61. </div>
  62. </van-form>
  63. </div>
  64. </template>
  65. <script lang="ts" setup name="signPage">
  66. import {onMounted, ref} from "vue";
  67. import {validatePhone} from "@/utils/validate";
  68. import { getSignInfo, signEvent } from '@/api/event';
  69. import { useRoute, useRouter } from 'vue-router';
  70. const route = useRoute();
  71. const router = useRouter()
  72. const loading = ref(false);
  73. const event_id = route.query.event_id as string;
  74. // 1 签到 2 签退
  75. const type = ref('1');
  76. const form = ref({
  77. user_id: '',
  78. user_name: '',
  79. dept_id: '',
  80. dept_name: '',
  81. duties: '',
  82. sign_time: '',
  83. phone: ''
  84. })
  85. // 提交
  86. const onSubmit = () => {
  87. const submitMethod = type.value === '1' ? '1' : '2';
  88. const data = {
  89. ...form.value,
  90. event_id: event_id,
  91. type: submitMethod
  92. };
  93. loading.value = true;
  94. signEvent(data).then((res)=>{
  95. loading.value = false;
  96. router.push("/signOK?type="+submitMethod)
  97. })
  98. }
  99. const handleSignCancel = () => {
  100. router.push("/")
  101. }
  102. onMounted(() => {
  103. getSignInfo({event_id: event_id}).then((res)=> {
  104. const user = res.data;
  105. console.log('user', user);
  106. type.value = user.sign_time == '' ? '1' : '2';
  107. form.value = {
  108. user_id: user.user_id,
  109. user_name: user.nick_name,
  110. dept_id: user.dept_id,
  111. dept_name: user.dept_name,
  112. duties: user.duties,
  113. sign_time: user.sign_time,
  114. phone: user.phone
  115. }
  116. })
  117. })
  118. </script>
  119. <style lang="scss" scoped>
  120. .container {
  121. padding-top: 10px;
  122. }
  123. </style>