From 63fea2990e587837ed3dde2b9ac8f2b4ef729672 Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期四, 28 五月 2026 10:02:01 +0800
Subject: [PATCH] 考点核验+签到
---
src/assets/json/cityItems.json | 112 ++++++++++++++
src/views/components/PdfPreview.vue | 10
src/views/h5/faceAuth/components/auditDialog.vue | 4
src/views/h5/login/bind.vue | 7
src/views/h5/login/index.vue | 6
src/views/components/Signature.vue | 20 +
src/views/h5/addrVerify/index.vue | 10 +
src/views/h5/login/redirect.vue | 8
/dev/null | 9 -
src/assets/images/signInSuccess.png | 0
src/views/h5/index.vue | 21 ++
src/views/h5/map/index.vue | 63 +++++--
src/main.js | 6
src/views/h5/map/BaiduMap.vue | 18 +
src/views/h5/signIn/index.vue | 75 +++++++++
src/views/h5/signIn/signInSuccess.vue | 49 ++++++
src/views/h5/faceAuth/index.vue | 2
src/utils/axios.js | 2
src/config/qxueyou.js | 2
vite.config.js | 8
src/router/h5/router.js | 26 ++
src/views/h5/noTask/index.vue | 7
src/App.vue | 8
23 files changed, 391 insertions(+), 82 deletions(-)
diff --git a/src/App.vue b/src/App.vue
index 1342935..26eeb5d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -9,9 +9,7 @@
import { getWxSignature } from '@/utils/wxjssdk.js'
export default {
data() {
- return {
-
- }
+ return {}
},
watch: {
'$route.path': function(){
@@ -23,9 +21,7 @@
}
},
},
- created() {
- console.log('localHost')
- }
+ created() {}
}
</script>
diff --git a/src/assets/images/signInSuccess.png b/src/assets/images/signInSuccess.png
new file mode 100644
index 0000000..06def6e
--- /dev/null
+++ b/src/assets/images/signInSuccess.png
Binary files differ
diff --git a/src/assets/json/cityItems.json b/src/assets/json/cityItems.json
new file mode 100644
index 0000000..7c4a03f
--- /dev/null
+++ b/src/assets/json/cityItems.json
@@ -0,0 +1,112 @@
+[
+ {
+ "id": 1,
+ "name": "骞夸笢鐪�",
+ "areaCode": "440000"
+ },
+ {
+ "id": 54,
+ "name": "骞垮窞甯�",
+ "areaCode": "440100"
+ },
+ {
+ "id": 55,
+ "name": "闊跺叧甯�",
+ "areaCode": "440200"
+ },
+ {
+ "id": 56,
+ "name": "娣卞湷甯�",
+ "areaCode": "440300"
+ },
+ {
+ "id": 57,
+ "name": "鐝犳捣甯�",
+ "areaCode": "440400"
+ },
+ {
+ "id": 58,
+ "name": "姹曞ご甯�",
+ "areaCode": "440500"
+ },
+ {
+ "id": 59,
+ "name": "浣涘北甯�",
+ "areaCode": "440600"
+ },
+ {
+ "id": 60,
+ "name": "姹熼棬甯�",
+ "areaCode": "440700"
+ },
+ {
+ "id": 61,
+ "name": "婀涙睙甯�",
+ "areaCode": "440800"
+ },
+ {
+ "id": 62,
+ "name": "鑼傚悕甯�",
+ "areaCode": "440900"
+ },
+ {
+ "id": 63,
+ "name": "鑲囧簡甯�",
+ "areaCode": "441200"
+ },
+ {
+ "id": 64,
+ "name": "鎯犲窞甯�",
+ "areaCode": "441300"
+ },
+ {
+ "id": 65,
+ "name": "姊呭窞甯�",
+ "areaCode": "441400"
+ },
+ {
+ "id": 66,
+ "name": "姹曞熬甯�",
+ "areaCode": "441500"
+ },
+ {
+ "id": 67,
+ "name": "娌虫簮甯�",
+ "areaCode": "441600"
+ },
+ {
+ "id": 68,
+ "name": "闃虫睙甯�",
+ "areaCode": "441700"
+ },
+ {
+ "id": 69,
+ "name": "娓呰繙甯�",
+ "areaCode": "441800"
+ },
+ {
+ "id": 70,
+ "name": "涓滆帪甯�",
+ "areaCode": "441900"
+ },
+ {
+ "id": 71,
+ "name": "涓北甯�",
+ "areaCode": "442000"
+ },
+ {
+ "id": 72,
+ "name": "娼窞甯�",
+ "areaCode": "445100"
+ },
+ {
+ "id": 73,
+ "name": "鎻槼甯�",
+ "areaCode": "445200"
+ },
+ {
+ "id": 74,
+ "name": "浜戞诞甯�",
+ "areaCode": "445300"
+ }
+]
\ No newline at end of file
diff --git a/src/config/qxueyou.js b/src/config/qxueyou.js
index 17004ea..a09c262 100644
--- a/src/config/qxueyou.js
+++ b/src/config/qxueyou.js
@@ -1,5 +1,5 @@
let baseDomain = `${location.protocol}//${location.host}`
-let qxyRes = 'https://qxy-examination-dev.obs.cn-south-1.myhuaweicloud.com/'
+let qxyRes = `https://qxy-examination${baseDomain.includes('dev.') || import.meta.env.MODE === 'development' ? '-dev': ''}.obs.cn-south-1.myhuaweicloud.com/`
let serverContext = '/app-api'
let htmlContext = '/examination/verify'
diff --git a/src/main.js b/src/main.js
index 3c7ec9c..5391ace 100644
--- a/src/main.js
+++ b/src/main.js
@@ -24,9 +24,9 @@
app.component(key, component)
}
-// import('vconsole').then((module) => {
-// new module.default()
-// })
+import('vconsole').then((module) => {
+ new module.default()
+})
app.config.globalProperties.$rules = ruleGenerator
app.config.globalProperties.$property = property
diff --git a/src/router/h5/router.js b/src/router/h5/router.js
index 4ce309a..84f05be 100644
--- a/src/router/h5/router.js
+++ b/src/router/h5/router.js
@@ -10,19 +10,35 @@
component: () => import('@/views/h5/addrVerify/index.vue'),
},
{
+ path: 'examineeSignIn',
+ name: '鑰冪敓绛惧埌',
+ component: () => import('@/views/h5/signIn/index.vue'),
+ },
+ {
+ path: 'staffSignIn',
+ name: '鑰冭瘎鍛樼鍒�',
+ component: () => import('@/views/h5/signIn/index.vue'),
+ },
+
+ {
path: 'verForm',
name: '鎻愪氦鑰冪偣鏍搁獙',
component: () => import('@/views/h5/addrVerify/form.vue'),
},
{
- path: 'noVerAccess',
- name: '鏍搁獙鏃犳潈闄�',
- component: () => import('@/views/h5/addrVerify/noAccess.vue'),
+ path: 'noTask',
+ name: '鏆傛棤浠诲姟',
+ component: () => import('@/views/h5/noTask/index.vue'),
},
{
- path: 'signup',
+ path: 'map',
name: '绛惧埌',
- component: () => import('@/views/h5/signup/index.vue'),
+ component: () => import('@/views/h5/map/index.vue'),
+ },
+ {
+ path: 'signInSuccess',
+ name: '绛惧埌鎴愬姛',
+ component: () => import('@/views/h5/signIn/signInSuccess.vue')
},
{
path: 'face',
diff --git a/src/router/main/appraisalPlan/index.js b/src/router/main/appraisalPlan/index.js
deleted file mode 100644
index ea8d59e..0000000
--- a/src/router/main/appraisalPlan/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const appraisalPlan = [
- {
- path: 'appraisalPlan',
- name: '璇勪环璁″垝',
- component: () => import('@/views/main/appraisalPlan/index.vue'),
- },
-]
-
-export default appraisalPlan
\ No newline at end of file
diff --git a/src/router/main/center/index.js b/src/router/main/center/index.js
deleted file mode 100644
index 1a3fdc6..0000000
--- a/src/router/main/center/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const score = [
- {
- path: 'center',
- name: '涓汉涓績',
- component: () => import('@/views/main/center/index.vue'),
- },
-]
-
-export default score
\ No newline at end of file
diff --git a/src/router/main/certificate/index.js b/src/router/main/certificate/index.js
deleted file mode 100644
index 4983dfe..0000000
--- a/src/router/main/certificate/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const certificate = [
- {
- path: 'certificate',
- name: '璇佷功鏌ヨ',
- component: () => import('@/views/main/certificate/index.vue'),
- },
-]
-
-export default certificate
\ No newline at end of file
diff --git a/src/router/main/examTicket/index.js b/src/router/main/examTicket/index.js
deleted file mode 100644
index 24ccd43..0000000
--- a/src/router/main/examTicket/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const examTicket = [
- {
- path: 'examTicket',
- name: '鍑嗚�冭瘉鏌ヨ',
- component: () => import('@/views/main/examTicket/index.vue'),
- },
-]
-
-export default examTicket
\ No newline at end of file
diff --git a/src/router/main/home/index.js b/src/router/main/home/index.js
deleted file mode 100644
index 2b753c4..0000000
--- a/src/router/main/home/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const home = [
- {
- path: 'home',
- name: '棣栭〉',
- component: () => import('@/views/main/home/index.vue'),
- },
-]
-
-export default home
\ No newline at end of file
diff --git a/src/router/main/index.js b/src/router/main/index.js
deleted file mode 100644
index be598fb..0000000
--- a/src/router/main/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import home from '@/router/main/home/index.js'
-import notice from '@/router/main/notice/index.js'
-import appraisalPlan from '@/router/main/appraisalPlan'
-import examTicket from '@/router/main/examTicket/index.js'
-import score from '@/router/main/score/index.js'
-import certificate from '@/router/main/certificate/index.js'
-import center from '@/router/main/center/index.js'
-
-const mainRouter = [
- ...home,
- ...notice,
- ...appraisalPlan,
- ...examTicket,
- ...score,
- ...certificate,
- ...center
-]
-const router = [
- {
- path: '/main',
- name: '鐢ㄦ埛绔�',
- component: () => import('@/views/main/index.vue'),
- children: mainRouter,
- },
-]
-export default router
diff --git a/src/router/main/notice/index.js b/src/router/main/notice/index.js
deleted file mode 100644
index f8777d2..0000000
--- a/src/router/main/notice/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const notice = [
- {
- path: 'noticeList',
- name: '鍏憡鍒楄〃',
- component: () => import('@/views/main/notice/list.vue'),
- },
- {
- path: 'noticeDetail/:id',
- name: '鍏憡璇︽儏',
- component: () => import('@/views/main/notice/detail.vue'),
- },
-]
-
-export default notice
\ No newline at end of file
diff --git a/src/router/main/score/index.js b/src/router/main/score/index.js
deleted file mode 100644
index f932815..0000000
--- a/src/router/main/score/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const score = [
- {
- path: 'score',
- name: '鎴愮哗鏌ヨ',
- component: () => import('@/views/main/score/index.vue'),
- },
-]
-
-export default score
\ No newline at end of file
diff --git a/src/utils/axios.js b/src/utils/axios.js
index 247b2ed..1b2b1e7 100644
--- a/src/utils/axios.js
+++ b/src/utils/axios.js
@@ -46,7 +46,7 @@
return !!(this.getAccessToken() && this.getRefreshToken());
},
reLogin() {
- router.push({ path: '/h5/login', query: router.currentRoute._value.query })
+ router.push({ path: '/h5/login' })
}
}
let isRefreshing = false;
diff --git a/src/views/components/PdfPreview.vue b/src/views/components/PdfPreview.vue
index 97e23ba..bdc4146 100644
--- a/src/views/components/PdfPreview.vue
+++ b/src/views/components/PdfPreview.vue
@@ -18,11 +18,11 @@
pdfViewer = new Pdfh5(container.value!, {
pdfurl: props.url,
textLayer: true,
- workerSrc: '/examination/admin/pdf.worker.min.js',
- cMapUrl: '/examination/admin/cmaps/',
- standardFontDataUrl: '/examination/admin/standard_fonts/',
- iccUrl: '/examination/admin/iccs/',
- wasmUrl: '/examination/admin/wasm/'
+ workerSrc: '/examination/verify/pdf.worker.min.js',
+ cMapUrl: '/examination/verify/cmaps/',
+ standardFontDataUrl: '/examination/verify/standard_fonts/',
+ iccUrl: '/examination/verify/iccs/',
+ wasmUrl: '/examination/verify/wasm/'
});
const appElement = document.getElementById('app')
diff --git a/src/views/components/Signature.vue b/src/views/components/Signature.vue
index 7d1bf71..a205cf1 100644
--- a/src/views/components/Signature.vue
+++ b/src/views/components/Signature.vue
@@ -2,10 +2,12 @@
<div class="signature">
<el-row justify="space-between">
<el-text>绛惧悕</el-text>
- <el-text v-if="imageUrl" @click="imageUrl=''">娓呴櫎绛惧悕</el-text>
- <el-text v-else @click="signatureDialog=true">鐐瑰嚮绛惧悕</el-text>
+ <template v-if="!disabled">
+ <el-text v-if="imageUrl" @click="imageUrl=''">娓呴櫎绛惧悕</el-text>
+ <el-text v-else @click="signatureDialog=true">鐐瑰嚮绛惧悕</el-text>
+ </template>
</el-row>
- <el-image v-if="imageUrl" :src="imageUrl"></el-image>
+ <el-image v-if="imageUrl" :src="imageUrl.includes('data:image/png') ? imageUrl : $qxueyou.qxyRes + imageUrl"></el-image>
<div v-else class="image-slot"></div>
<el-dialog
@@ -68,6 +70,10 @@
modelValue: {
type: String,
default: ''
+ },
+ disabled: {
+ type: Boolean,
+ default: false
}
},
computed: {
@@ -193,9 +199,11 @@
}
let base64 = this.editCanvas.toDataURL('image/png', 1)
let smallBase64 = await this.resizedataURL(base64, 240, 80)
- // let url = await uploadByBase64(smallBase64, '绛惧悕')
- // if (!url) return false
- this.imageUrl = smallBase64
+ // this.imageUrl = smallBase64
+ let url = await uploadByBase64(smallBase64, '绛惧悕')
+ if (!url) return false
+ this.imageUrl = url
+ this.$emit('update:modelValue', url)
this.signatureDialog = false
},
resizedataURL: function(base64, wantedWidth, wantedHeight){
diff --git a/src/views/h5/addrVerify/index.vue b/src/views/h5/addrVerify/index.vue
index 6c4bc70..4a46ea0 100644
--- a/src/views/h5/addrVerify/index.vue
+++ b/src/views/h5/addrVerify/index.vue
@@ -5,7 +5,9 @@
export default {
components: {},
data() {
- return {}
+ return {
+ noTaskTip: ''
+ }
},
computed: {
appId() {
@@ -15,7 +17,7 @@
async created() {
const canVerify = await this.getCanVerify()
if (!canVerify) {
- this.$router.replace('/h5/noVerAccess')
+ this.$router.replace({ path: '/h5/noTask', query: { tip: this.noTaskTip }})
return
}
const getCheckIsSubmit = await this.getCheckIsSubmit()
@@ -36,9 +38,13 @@
}
this.$axios.get('/exam/verify-record/can-verify', { params }).then(res => {
if (res.data.code == 0) {
+ if (!res.data.data) {
+ this.noTaskTip = '鎮ㄩ潪姝よ�冪偣鏍搁獙浜哄憳锛屾棤娉曠鍒帮紝璇疯仈绯诲伐浣滀汉鍛樼‘璁ゃ��'
+ }
resolve(res.data.data)
} else {
resolve(false)
+ this.noTaskTip = res.data.msg
}
}, () => {
resolve(false)
diff --git a/src/views/h5/faceAuth/components/auditDialog.vue b/src/views/h5/faceAuth/components/auditDialog.vue
index 9662901..58c0dc4 100644
--- a/src/views/h5/faceAuth/components/auditDialog.vue
+++ b/src/views/h5/faceAuth/components/auditDialog.vue
@@ -13,7 +13,7 @@
<el-image :src="base64" style="width: 100%;" fit="cover"></el-image>
<div v-if="status=='auditing'" class="scan-line"></div>
</div>
- <el-row justify="center" v-else-if="['success', 'fail'].includes(status)">
+ <div style="display: flex; flex-direction: column; align-items: center;" v-else-if="['success', 'fail'].includes(status)">
<el-image :src="$getImageUrl(`/h5/face_${status}.png`)"></el-image>
<el-row>
<el-text class="text-lg">浜鸿劯楠岃瘉{{ status=='success'?'':'涓�' }}閫氳繃</el-text>
@@ -22,7 +22,7 @@
<el-text v-if="status=='success'">绯荤粺宸叉垚鍔熷鏍告偍鐨勮韩浠�</el-text>
<el-text v-else-if="status=='fail'">璇烽噸鏂伴獙璇佹偍鐨勮韩浠�</el-text>
</el-row>
- </el-row>
+ </div>
<el-row justify="center" class="mt-5" v-if="status=='auditing'">
<el-text>姝e湪瀹℃牳涓紝璇疯�愬績绛夊緟...</el-text>
</el-row>
diff --git a/src/views/h5/faceAuth/index.vue b/src/views/h5/faceAuth/index.vue
index 32f2e91..a4fd8cc 100644
--- a/src/views/h5/faceAuth/index.vue
+++ b/src/views/h5/faceAuth/index.vue
@@ -115,7 +115,7 @@
}
},
auditSuccess(evt) {
- this.$router.replace({ path: '/h5/signup', query: { appId: this.appId, url: evt } })
+ this.$router.replace({ path: '/h5/map', query: { appId: this.appId, url: evt } })
},
}
}
diff --git a/src/views/h5/index.vue b/src/views/h5/index.vue
index fd2c39d..f66d1e8 100644
--- a/src/views/h5/index.vue
+++ b/src/views/h5/index.vue
@@ -6,6 +6,7 @@
<script>
import { useSessionStore } from '@/stores/session.js'
import { storeToRefs } from 'pinia';
+import { tokenUtils } from '@/utils/axios.js'
export default {
setup() {
const { setUserInfo } = useSessionStore()
@@ -15,10 +16,26 @@
data() {
return {}
},
+ computed: {
+
+ },
created() {
- if (this.$route.path == '/h5/verify' && this.$route.query.appId) {
- localStorage.setItem('verify_url', this.$route.fullPath)
+ const path = this.$route.path
+ const regionCode = this.$route.query.regionCode
+ const fullPath = this.$route.fullPath
+ let personType = null
+ if (path == '/h5/addrVer') { //0==宸ヤ綔浜哄憳 2==鑰冪偣鏍搁獙鍛�
+ personType = '2'
+ } else if (path == '/h5/staffSignIn') {
+ personType = '0'
}
+ localStorage.setItem('_personType', personType)
+ localStorage.setItem('_regionCode', regionCode)
+ localStorage.setItem('_enterUrl', fullPath)
+ // const lastPersonType = localStorage.getItem('_personType')
+ // if (lastPersonType && lastPersonType !== personType) {
+ // tokenUtils.clearTokens()
+ // }
this.getUserInfo()
},
methods: {
diff --git a/src/views/h5/login/bind.vue b/src/views/h5/login/bind.vue
index ede5d35..fb77e56 100644
--- a/src/views/h5/login/bind.vue
+++ b/src/views/h5/login/bind.vue
@@ -34,6 +34,7 @@
import { tokenUtils } from '@/utils/axios.js';
import { useLoginStore } from '@/stores/login.js'
import { storeToRefs } from 'pinia';
+import cityItems from '@/assets/json/cityItems.json'
export default {
setup() {
const { lastRouteInfo } = storeToRefs(useLoginStore())
@@ -106,12 +107,12 @@
}
},
login() {
- const data = {
+ let data = {
mobile: this.form.mobile,
code: this.form.code,
state: this.state,
openid: this.openid,
- wxCode: this.wxCode
+ wxCode: this.wxCode,
}
this.loginLoading = true
this.$axios.post('/system/auth/staff/checkin/bind', data).then(async res => {
@@ -119,7 +120,7 @@
const resData = res.data.data
tokenUtils.setTokens(resData.accessToken, resData.refreshToken)
this.$message.success('缁戝畾鎴愬姛')
- const path = localStorage.getItem('verify_url')
+ const path = localStorage.getItem('_enterUrl')
if (path) {
this.$router.replace(path)
}
diff --git a/src/views/h5/login/index.vue b/src/views/h5/login/index.vue
index 86af36f..57ef81a 100644
--- a/src/views/h5/login/index.vue
+++ b/src/views/h5/login/index.vue
@@ -35,6 +35,7 @@
import { useLoginStore } from '@/stores/login.js'
import { storeToRefs } from 'pinia';
import { isWeixin } from '@/utils/UA.js'
+import cityItems from '@/assets/json/cityItems.json'
export default {
setup() {
const { lastRouteInfo } = storeToRefs(useLoginStore())
@@ -54,7 +55,6 @@
}
},
created() {
-
tokenUtils.clearTokens()
this.loginType = isWeixin ? 'weixin' : 'mobilePhone'
if (isWeixin) {
@@ -110,7 +110,7 @@
}
},
login() {
- const data = {
+ let data = {
mobile: this.form.mobile,
code: this.form.code,
}
@@ -120,7 +120,7 @@
const resData = res.data.data
tokenUtils.setTokens(resData.accessToken, resData.refreshToken)
this.$message.success('鐧诲綍鎴愬姛')
- const path = localStorage.getItem('verify_url')
+ const path = localStorage.getItem('_enterUrl')
if (path) {
this.$router.replace(path)
}
diff --git a/src/views/h5/login/redirect.vue b/src/views/h5/login/redirect.vue
index cb6b526..f1aebc2 100644
--- a/src/views/h5/login/redirect.vue
+++ b/src/views/h5/login/redirect.vue
@@ -86,11 +86,11 @@
const resData = res.data.data || {}
if (resData.userId) {
tokenUtils.setTokens(resData.accessToken, resData.refreshToken)
- const path = localStorage.getItem('verify_url')
+ const path = localStorage.getItem('_enterUrl')
if (path) {
this.$router.replace(path)
} else {
- this.$router.replace('/h5/noVerAccess')
+ this.$message.error('鍙傛暟寮傚父锛岃閲嶆柊鎵爜鎴栬仈绯荤鐞嗗憳')
}
} else {
this.$router.replace({
@@ -103,7 +103,9 @@
})
}
} else {
- this.$message.error(res.data.msg)
+ setTimeout(() => {
+ this.$router.replace({ path: '/h5/noTask', query: { tip: res.data.msg }})
+ }, 1000)
}
})
}
diff --git a/src/views/h5/signup/BaiduMap.vue b/src/views/h5/map/BaiduMap.vue
similarity index 83%
rename from src/views/h5/signup/BaiduMap.vue
rename to src/views/h5/map/BaiduMap.vue
index 68d0b3d..614f694 100644
--- a/src/views/h5/signup/BaiduMap.vue
+++ b/src/views/h5/map/BaiduMap.vue
@@ -39,6 +39,7 @@
type: Object,
default: () => ({ lng: 0, lat: 0 })
},
+ limitDistanceFlag: Boolean
},
data() {
return {
@@ -60,7 +61,7 @@
center: {
handler: function(val) {
const newPoint = new BMapGL.Point(val.lng, val.lat);
- this.map.map.setCenter(newPoint)
+ this.map.setCenter(newPoint)
},
deep: true
}
@@ -99,10 +100,19 @@
lng: pt.lng,
lat: pt.lat
}
- that.$emit('getUserPositionStatus', 'success')
- that.diffDistance()
+ const positionAddressText = r.address.province + r.address.city + r.address.district + r.address.street
+ that.$emit('getUserPositionStatus', {
+ status: 'success',
+ userPositionText: positionAddressText
+ })
+ if (this.limitDistanceFlag) {
+ that.diffDistance()
+ } else {
+ const newPoint = new BMapGL.Point(that.userPosition.lng, that.userPosition.lat);
+ that.map.setCenter(newPoint)
+ }
} else {
- that.$emit('getUserPositionStatus', 'fail')
+ that.$emit('getUserPositionStatus', { status: 'fail' })
}
});
},
diff --git a/src/views/h5/signup/index.vue b/src/views/h5/map/index.vue
similarity index 76%
rename from src/views/h5/signup/index.vue
rename to src/views/h5/map/index.vue
index f80cf0c..ded16a6 100644
--- a/src/views/h5/signup/index.vue
+++ b/src/views/h5/map/index.vue
@@ -11,7 +11,8 @@
<div class="mapBox">
<BaiduMap
:center="centerPoint"
- @getUserPositionStatus="(evt) => userPositionStatus = evt"
+ :limitDistanceFlag="limitDistanceFlag"
+ @getUserPositionStatus="getUserPositionStatus"
@getMapStatus="(evt) => mapStatus = evt"
@getDistance="getDistance"
/>
@@ -20,19 +21,21 @@
<el-image
style="width: 50px;height: 50px;"
fit="contain"
- :src="$getImageUrl(`/map/position-marker-${positionError?'red':'green'}.png`)"
+ :src="$getImageUrl(`/map/position-marker-${limitDistanceFlag&&positionError?'red':'green'}.png`)"
></el-image>
</div>
<div class="text-sign">
<el-text style="color: #8c8c8c;" v-if="userPositionStatus=='loading'">瀹氫綅涓�...</el-text>
- <el-text style="color: #e73f3f;" v-else-if="userPositionStatus=='fail'">鑾峰彇瀹氫綅澶辫触锛屽綋鍓嶈澶囩殑瀹氫綅鏈嶅姟</el-text>
+ <el-text style="color: #e73f3f;" v-else-if="userPositionStatus=='fail'">鑾峰彇瀹氫綅澶辫触锛岃妫�鏌ュ綋鍓嶈澶囩殑瀹氫綅鏈嶅姟</el-text>
<template v-else-if="userPositionStatus=='success'">
- <el-text v-if="distance>0&&distance<500" style="color: #56c16d;">
- 浣嶇疆姝e父 璺濈绛惧埌鍦扮偣{{ distance }}绫�
- </el-text>
- <el-text v-else style="color: #e73f3f;">
- 瓒呭嚭绛惧埌鑼冨洿锛屼笉鍙鍒�
- </el-text>
+ <template v-if="limitDistanceFlag">
+ <el-text v-if="distance>0&&distance<500" style="color: #56c16d;">
+ 浣嶇疆姝e父 璺濈绛惧埌鍦扮偣{{ distance }}绫�
+ </el-text>
+ <el-text v-else style="color: #e73f3f;">
+ 瓒呭嚭绛惧埌鑼冨洿锛屼笉鍙鍒�
+ </el-text>
+ </template>
</template>
</div>
</div>
@@ -40,8 +43,8 @@
<!-- <el-row justify="center">
<el-text class="text-lg font-bold">{{ positionName }}</el-text>
</el-row> -->
- <el-row justify="center" class="mt-1">
- <el-text class="text-lg text-info">{{ positionAddress }}</el-text>
+ <el-row justify="center" class="mt-7">
+ <el-text class="text-lg text-info" style="text-align: center;">{{ positionAddress }}</el-text>
</el-row>
</div>
<el-row justify="center" class="mt-7">
@@ -59,7 +62,7 @@
</template>
<script>
-import BaiduMap from '@/views/h5/signup/BaiduMap.vue'
+import BaiduMap from '@/views/h5/map/BaiduMap.vue'
import { useSessionStore } from '@/stores/session.js'
import { storeToRefs } from 'pinia';
export default {
@@ -83,7 +86,9 @@
lat: 23.135618,
lng: 113.27077
},
- clickCount: 0
+ clickCount: 0,
+ personType: 0,
+ limitDistanceFlag: false
}
},
computed: {
@@ -111,13 +116,20 @@
}
},
created() {
- this.getSignupAddress()
+ const type = localStorage.getItem('_personType')
+ this.personType = Number(type)
+ if (this.personType == 2) {
+ this.limitDistanceFlag = true
+ this.getVerifyAddress()
+ } else {
+ this.limitDistanceFlag = false
+ }
},
async mounted() {
this.currentTimeText = this.$dayjs().format('HH:mm')
},
methods: {
- getSignupAddress() {
+ getVerifyAddress() {
const params = { applicationId: this.appId }
this.$axios.get('/exam/verify-record/get-by-application-id', { params }).then(res => {
if (res.data.code == 0) {
@@ -135,7 +147,8 @@
})
},
getUserPositionStatus(evt) {
- this.userPositionStatus = evt
+ this.userPositionStatus = evt.status
+ this.positionAddress = evt.userPositionText
},
getDistance(evt) {
this.distance = evt
@@ -152,19 +165,27 @@
return
}
}
- const data = {
+ let data = {
targetId: this.appId,
- targetType: 2,
+ targetType: this.personType,
url: this.url,
- type: 0
+ type: this.url ? 0 : 2
}
this.confirmLoading = true
this.$axios.post('/exam/staff/checkin', data).then(res => {
if (res.data.code == 0) {
- this.$message.success('绛惧埌鎴愬姛')
setTimeout(() => {
- this.$router.replace({ path: '/h5/verForm', query: { appId: this.appId }})
+ if (data.targetType == 2) {
+ this.$message.success('绛惧埌鎴愬姛')
+ this.$router.replace({ path: '/h5/verForm', query: { appId: this.appId }})
+ } else {
+ this.$router.replace({ path: '/h5/signInSuccess', query: {
+ timeText: this.$dayjs().format('HH:mm:ss'),
+ address: this.positionAddress
+ }})
+ }
}, 500)
+
} else {
this.$message.error(res.data.msg)
}
diff --git a/src/views/h5/addrVerify/noAccess.vue b/src/views/h5/noTask/index.vue
similarity index 69%
rename from src/views/h5/addrVerify/noAccess.vue
rename to src/views/h5/noTask/index.vue
index 05aef8d..99d95cb 100644
--- a/src/views/h5/addrVerify/noAccess.vue
+++ b/src/views/h5/noTask/index.vue
@@ -2,7 +2,7 @@
<div class="content">
<el-image style="width: 150px" fit="contain" :src="$getImageUrl('/h5/noVerify.png')"></el-image>
<el-row style="margin-top: 40px;">
- <el-text class="text-center">鎮ㄩ潪鏈�冪偣璧勮川瀹℃牳鐨勬牳楠屽憳锛屾棤娉曟牳楠岋紝璇疯仈绯诲伐浣滀汉鍛樼‘璁ゃ��</el-text>
+ <el-text class="text-center">{{ tip }}</el-text>
</el-row>
</div>
</template>
@@ -12,6 +12,11 @@
return {
}
+ },
+ computed: {
+ tip() {
+ return this.$route.query.tip || '鎮ㄩ潪鐩稿叧宸ヤ綔浜哄憳锛屾棤娉曠鍒帮紝璇疯仈绯诲伐浣滀汉鍛樼‘璁ゃ��'
+ }
}
}
</script>
diff --git a/src/views/h5/signIn/index.vue b/src/views/h5/signIn/index.vue
new file mode 100644
index 0000000..c0c0cc7
--- /dev/null
+++ b/src/views/h5/signIn/index.vue
@@ -0,0 +1,75 @@
+<template>
+ <div></div>
+</template>
+<script>
+export default {
+ components: {},
+ data() {
+ return {
+ noTaskTip: ''
+ }
+ },
+ computed: {
+ appId() {
+ return this.$route.query.appId
+ }
+ },
+ async created() {
+ const canSignIn = await this.getCanSignIn()
+ if (!canSignIn) {
+ this.$router.replace({ path: '/h5/noTask', query: { tip: this.noTaskTip }})
+ return
+ }
+ const setting = await this.getSignInSetting()
+
+ if (setting === 0) {
+ this.$router.replace({ path: '/h5/face', query: { appId: this.appId } })
+ } else if (setting === 2) {
+ this.$router.replace({ path: '/h5/map', query: { appId: this.appId } })
+ } else {
+ this.$router.replace({ path: '/h5/noTask', query: { tip: this.noTaskTip }})
+ }
+ },
+ mounted() {
+ document.title = '宸ヤ綔浜哄憳绛惧埌'
+ },
+ methods: {
+ getCanSignIn() {
+ return new Promise((resolve) => {
+ const params = {
+ targetId: '',
+ appraisalPlanId: this.appId
+ }
+ this.$axios.get('/exam/staff/checkin/open', { params }).then(res => {
+ if (res.data.code == 0) {
+ if (!res.data.data) {
+ this.noTaskTip = '褰撳墠璇勪环璁″垝鏈紑鍚鍒�'
+ }
+ resolve(res.data.data)
+ } else {
+ resolve(false)
+ this.$message.error(res.data.msg)
+ }
+ }, () => {
+ resolve(false)
+ })
+ })
+ },
+ getSignInSetting() {
+ return new Promise((resolve) => {
+ const params = { appraisalPlanId: this.appId }
+ this.$axios.get('/exam/staff/checkin/config', { params }).then(res => {
+ if (res.data.code == 0) {
+ resolve(res.data.data)
+ } else {
+ this.noTaskTip = res.data.msg
+ resolve(null)
+ }
+ }, () => {
+ resolve(null)
+ })
+ })
+ },
+ }
+}
+</script>
\ No newline at end of file
diff --git a/src/views/h5/signIn/signInSuccess.vue b/src/views/h5/signIn/signInSuccess.vue
new file mode 100644
index 0000000..94b0919
--- /dev/null
+++ b/src/views/h5/signIn/signInSuccess.vue
@@ -0,0 +1,49 @@
+<template>
+ <div class="p-7">
+ <el-row justify="center" class="mt-7">
+ <el-image style="width: 150px" fit="contain" :src="$getImageUrl('/signInSuccess.png')"></el-image>
+ </el-row>
+ <el-row justify="center">
+ <el-text class="font-bold text-2xl">
+ 绛惧埌鎴愬姛
+ </el-text>
+ </el-row>
+ <div style="margin-top: 50px;" class="ml-4">
+ <el-row align="middle">
+ <Icon icon="material-symbols:person-rounded" width="20" height="20" class="mr-1" style="color: #cccccc" />
+ <el-text>濮撳悕锛歿{ userInfo.name }}</el-text>
+ </el-row>
+ <el-row class="mt-2" align="middle">
+ <Icon icon="mingcute:idcard-fill" width="18" height="18" class="mr-1" style="color: #cccccc" />
+ <el-text>韬唤璇佸熬鍙凤細{{ userInfo.idCard?.slice(-4) }}</el-text>
+ </el-row>
+ <el-row class="mt-2" align="middle">
+ <Icon icon="mdi:clock" width="18" height="18" class="mr-1" style="color: #cccccc" />
+ <el-text>绛惧埌鏃堕棿锛歿{ timeText }}</el-text>
+ </el-row>
+ <el-row class="mt-2" align="middle">
+ <Icon icon="game-icons:position-marker" width="18" height="18" class="mr-1" style="color: #cccccc" />
+ <el-text>{{ positionAddress }}</el-text>
+ </el-row>
+ </div>
+ </div>
+</template>
+
+<script>
+import { useSessionStore } from '@/stores/session.js'
+import { storeToRefs } from 'pinia';
+export default {
+ setup() {
+ const { userInfo } = storeToRefs(useSessionStore())
+ return { userInfo }
+ },
+ computed: {
+ positionAddress() {
+ return this.$route.query.address
+ },
+ timeText() {
+ return this.$route.query.timeText
+ }
+ },
+}
+</script>
\ No newline at end of file
diff --git a/vite.config.js b/vite.config.js
index 543eb21..e829416 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -8,9 +8,9 @@
export default defineConfig({
base: '/examination/verify',
plugins: [vue(), vueDevTools()],
- esbuild: {
- drop: ['console', 'debugger']
- },
+ // esbuild: {
+ // drop: ['console', 'debugger']
+ // },
define: {
// 娉ㄥ叆鏋勫缓鏃堕棿鎴冲埌浠g爜涓�
'__BUILD_TIME__': JSON.stringify(timestamp)
@@ -33,7 +33,7 @@
host: '0.0.0.0',
proxy: {
'/app-api': {
- target: 'http://101.43.143.75:48180', // dev
+ target: 'http://101.43.143.75:48080', // dev
changeOrigin: true,
},
},
--
Gitblit v1.8.0