Browse Source

扫码签到

libushang 2 weeks ago
parent
commit
d5051ed04a
4 changed files with 209 additions and 34 deletions
  1. 9 1
      src/api/event.ts
  2. 1 1
      src/permission.ts
  3. 45 32
      src/views/signPage/index.vue
  4. 154 0
      src/views/signPage/index.vue.bak

+ 9 - 1
src/api/event.ts

@@ -53,7 +53,7 @@ export function getSignInfo(data) {
   });
 }
 
-export function signEvent(data) {
+export function checkEvent(data) {
   return request({
     url: "/api/event_management/checkin/check",
     method: "post",
@@ -61,6 +61,14 @@ export function signEvent(data) {
   });
 }
 
+export function signEvent(data) {
+  return request({
+    url: "/api/qrcode/check",
+    method: "post",
+    data: data
+  });
+}
+
 export function uploadCasualties(data) {
   return request({
     url: "/api/event_management/event/upload_casualties",

+ 1 - 1
src/permission.ts

@@ -10,7 +10,7 @@ import setPageTitle from "@/utils/set-page-title";
 import usePermissionStore from '@/store/modules/permission';
 
 NProgress.configure({ showSpinner: false });
-const whiteList = ['/login', '/yzy/callback', '/mplogin'];
+const whiteList = ['/login', '/yzy/callback', '/mplogin', '/signPage', '/signOK'];
 
 router.beforeEach(async (to, from, next) => {
   NProgress.start();

+ 45 - 32
src/views/signPage/index.vue

@@ -1,5 +1,9 @@
 <template>
   <div class="container">
+    <div style="padding: 16px 0 ;display:flex;flex-direction: row;justify-content: space-between;" v-if="type === '2'">
+      <div class="van-doc-block__title"></div>
+      <div class="van-doc-block__sub_title" @click="change_user">换人签到</div>
+    </div>
     <van-form @submit="onSubmit">
       <van-cell-group inset>
         <van-field
@@ -51,24 +55,12 @@
         <van-button :loading="loading" loading-text="签到中..." block type="primary" native-type="submit">
           确定签到
         </van-button>
-
-        <div class="div-line"></div>
-
-        <van-button block type="default" @click="handleSignCancel" v-if="type === '1'">
-          取消签到
-        </van-button>
       </div>
 
       <div class="button-list" v-if="type === '2'">
         <van-button :loading="loading" loading-text="签退中..." block type="danger" native-type="submit">
           确定签退
         </van-button>
-
-        <div class="div-line"></div>
-
-        <van-button block type="default" @click="handleSignCancel">
-          取消签退
-        </van-button>
       </div>
     </van-form>
   </div>
@@ -110,32 +102,45 @@ const onSubmit = () => {
   loading.value = true;
   signEvent(data).then((res)=>{
     loading.value = false;
+    if(submitMethod == '1') {
+      form.value.sign_time = res.data.sign_time;
+      localStorage.setItem(event_id+"_signData", JSON.stringify(form.value));
+    }  
+    else {
+      localStorage.removeItem(event_id+"_signData");
+    }
     router.push("/signOK?type="+submitMethod)
   })
 }
 
-
-const handleSignCancel = () => {
-  router.push("/")
-}
+const change_user = () => {
+  type.value = '1';
+  form.value = {
+    user_id: '0',
+    nick_name: '',
+    dept_id: '0',
+    dept_name: '',
+    duties: '',
+    sign_time: '',
+    phone: ''
+  };
+  localStorage.removeItem(event_id+"_signData");
+};
 
 onMounted(() => {
-  if (/(wxworklocal)/i.test(navigator.userAgent)) {
-    getSignInfo({event_id: event_id}).then((res)=> {
-      const user = res.data;
-      console.log('user', user);
-      type.value = user.sign_time == '' ? '1' : '2';
-
-      form.value = {
-        user_id: user.user_id,
-        nick_name: user.nick_name,
-        dept_id: user.dept_id,
-        dept_name: user.dept_name,
-        duties: user.duties,
-        sign_time: user.sign_time,
-        phone: user.phone
-      }
-    })
+  const jsonData = localStorage.getItem(event_id+"_signData");
+  if (jsonData) {
+    const user = JSON.parse(jsonData);
+    type.value = user.sign_time == '' ? '1' : '2';
+    form.value = {
+      user_id: user.user_id,
+      nick_name: user.nick_name,
+      dept_id: user.dept_id,
+      dept_name: user.dept_name,
+      duties: user.duties,
+      sign_time: user.sign_time,
+      phone: user.phone
+    }
   }
 })
 </script>
@@ -150,5 +155,13 @@ onMounted(() => {
   .div-line {
     height: 16px;
   }
+  .van-doc-block__sub_title {
+    margin: 0px;
+    padding: 0 6vmin;
+    font-size: 3.6vmin;
+    font-weight: 400;
+    line-height: 6.0vmin;
+    color: #1989fa;
+  }
 }
 </style>

+ 154 - 0
src/views/signPage/index.vue.bak

@@ -0,0 +1,154 @@
+<template>
+  <div class="container">
+    <van-form @submit="onSubmit">
+      <van-cell-group inset>
+        <van-field
+            v-model="form.nick_name"
+            name="姓名"
+            label="姓名"
+            placeholder="请填写姓名"
+            required
+            :rules="[{ required: true, message: '请填写姓名' }]"
+        />
+        <van-field
+            v-model="form.duties"
+            name="职务"
+            label="职务"
+            placeholder="请填写职务"
+            required
+            :rules="[{ required: true, message: '请填写职务' }]"
+        />
+        <van-field
+            v-model="form.dept_name"
+            name="单位"
+            label="单位"
+            placeholder="请填写单位"
+            required
+            :rules="[{ required: true, message: '请填写单位' }]"
+        />
+        <van-field
+            v-model="form.phone"
+            name="联系方式"
+            label="联系方式"
+            placeholder="请填写联系方式"
+            required
+            :rules="[
+                { required: true, message: '请填写联系方式' },
+                { validator: validatePhone, message: '请输入正确的联系方式' }
+            ]"
+        />
+
+        <van-field
+            v-show="type === '2'"
+            readonly
+            v-model="form.sign_time"
+            name="签到时间"
+            label="签到时间"
+        />
+      </van-cell-group>
+
+      <div class="button-list" v-if="type === '1'">
+        <van-button :loading="loading" loading-text="签到中..." block type="primary" native-type="submit">
+          确定签到
+        </van-button>
+
+        <div class="div-line"></div>
+
+        <van-button block type="default" @click="handleSignCancel" v-if="type === '1'">
+          取消签到
+        </van-button>
+      </div>
+
+      <div class="button-list" v-if="type === '2'">
+        <van-button :loading="loading" loading-text="签退中..." block type="danger" native-type="submit">
+          确定签退
+        </van-button>
+
+        <div class="div-line"></div>
+
+        <van-button block type="default" @click="handleSignCancel">
+          取消签退
+        </van-button>
+      </div>
+    </van-form>
+  </div>
+</template>
+
+<script lang="ts" setup name="signPage">
+import {onMounted, ref} from "vue";
+import {validatePhone} from "@/utils/validate";
+import { getSignInfo, signEvent } from '@/api/event';
+import { useRoute, useRouter } from 'vue-router';
+
+const route = useRoute();
+const router = useRouter()
+
+const loading = ref(false);
+
+const event_id = route.query.event_id as string;
+
+// 1 签到 2 签退
+const type = ref('1');
+const form = ref({
+  user_id: '0',
+  nick_name: '',
+  dept_id: '0',
+  dept_name: '',
+  duties: '',
+  sign_time: '',
+  phone: ''
+})
+
+// 提交
+const onSubmit = () => {
+  const submitMethod = type.value === '1' ? '1' : '2';
+  const data = {
+    ...form.value,
+    event_id: event_id,
+    type: submitMethod
+  };
+  loading.value = true;
+  signEvent(data).then((res)=>{
+    loading.value = false;
+    router.push("/signOK?type="+submitMethod)
+  })
+}
+
+
+const handleSignCancel = () => {
+  router.push("/")
+}
+
+onMounted(() => {
+  if (/(wxworklocal)/i.test(navigator.userAgent)) {
+    getSignInfo({event_id: event_id}).then((res)=> {
+      const user = res.data;
+      console.log('user', user);
+      type.value = user.sign_time == '' ? '1' : '2';
+
+      form.value = {
+        user_id: user.user_id,
+        nick_name: user.nick_name,
+        dept_id: user.dept_id,
+        dept_name: user.dept_name,
+        duties: user.duties,
+        sign_time: user.sign_time,
+        phone: user.phone
+      }
+    })
+  }
+})
+</script>
+
+<style lang="scss" scoped>
+.container {
+  padding-top: 16px;
+
+  .button-list {
+    margin: 16px;
+  }
+  .div-line {
+    height: 16px;
+  }
+}
+</style>