676 lines
18 KiB
Vue
676 lines
18 KiB
Vue
<template>
|
|
<view style="background-color: white; height: 100vh">
|
|
<u-navbar :is-back="false" title="二维码核验"></u-navbar>
|
|
<!-- 内容 -->
|
|
<scroll-view
|
|
scroll-y="true"
|
|
style="
|
|
height: calc(100vh - 240rpx);
|
|
width: 100%;
|
|
border-top: 1px solid #edf2fa;
|
|
background-color: #f1f2f6;
|
|
box-sizing: border-box;
|
|
"
|
|
>
|
|
<!-- 基础信息 -->
|
|
<view class="base-box">
|
|
<view class="item-line">
|
|
<text class="line-label"> 返校人员</text>
|
|
<text class="line-value"> {{ formData.userName || "-" }} </text>
|
|
</view>
|
|
<view class="item-line">
|
|
<text class="line-label"> 学院专业</text>
|
|
<text class="line-value"> {{ formData.college + "-" + formData.major }} </text>
|
|
</view>
|
|
<view class="item-line" v-if="false">
|
|
<text class="line-label"> 学历层次</text>
|
|
<text class="line-value"> {{ baseMsg.educationStr || "-" }} </text>
|
|
</view>
|
|
<view class="item-line" v-if="false">
|
|
<text class="line-label"> 毕业年份</text>
|
|
<text class="line-value"> {{ baseMsg.endYear || "-" }} </text>
|
|
</view>
|
|
</view>
|
|
<!-- 表单 -->
|
|
<view class="form-box">
|
|
<!-- 返校日期 -->
|
|
<view class="item-date">
|
|
<text class="line-label"> 返校日期</text>
|
|
<u-input
|
|
:custom-style="inputStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
:value="formData.retuenSchoolTime"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
<!-- 提示 -->
|
|
<view class="item-tip" v-if="weekSet.length">
|
|
<text class="line-label"> 提示:每周{{ dateTip }}暂停开放返校服务</text>
|
|
</view>
|
|
<!-- 车牌号 -->
|
|
<view class="item-line">
|
|
<text class="line-label"> 车牌号</text>
|
|
<u-input
|
|
:custom-style="inputStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="10"
|
|
:value="formData.carNumber || '-'"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
<!-- 联系电话 -->
|
|
<view class="item-line">
|
|
<text class="line-label"> 联系电话</text>
|
|
<u-input
|
|
:custom-style="inputStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="20"
|
|
:value="formData.phone"
|
|
placeholder=""
|
|
/>
|
|
</view>
|
|
<!-- 随行人信息 -->
|
|
<view class="item-line" v-if="sxList.length">
|
|
<text class="line-label"> 随行人信息</text>
|
|
</view>
|
|
<!-- 动态随行人 -->
|
|
<view class="item-for" v-for="(x, xIndex) in sxList" :key="xIndex">
|
|
<!-- 左侧内容 -->
|
|
<view class="for-left">
|
|
<view class="each">
|
|
<text> 随行人{{ xIndex + 1 }}</text>
|
|
<u-input
|
|
:custom-style="eachStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="20"
|
|
:value="x.name"
|
|
placeholder="-"
|
|
disabled
|
|
/>
|
|
</view>
|
|
<view class="each">
|
|
<text> 手机号</text>
|
|
<u-input
|
|
:custom-style="eachStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="20"
|
|
:value="x.phone"
|
|
placeholder="-"
|
|
disabled
|
|
/>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 返校事由 -->
|
|
<template v-if="false">
|
|
<view class="item-line">
|
|
<text class="line-label"> 返校事由</text>
|
|
</view>
|
|
<view class="item-text">
|
|
<u-input
|
|
type="textarea"
|
|
height="200"
|
|
:border="false"
|
|
:value="formData.retuenSchoolReason || '-'"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
</template>
|
|
</view>
|
|
<!-- 其余信息 -->
|
|
<view class="other-box" v-if="false">
|
|
<!-- 提交时间 -->
|
|
<view class="item-line">
|
|
<text class="line-label"> 提交时间</text>
|
|
<u-input
|
|
:custom-style="inputStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="10"
|
|
:value="formData.createTime"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
<!-- 核验状态 -->
|
|
<view class="item-line">
|
|
<text class="line-label"> 核验状态</text>
|
|
<u-input
|
|
:custom-style="inputStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="10"
|
|
:value="formData.prebookStateZN"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
<!-- 核验时间 -->
|
|
<view class="item-line" v-if="['已核验'].includes(formData.prebookStateZN)">
|
|
<text class="line-label"> 核验时间</text>
|
|
<u-input
|
|
:custom-style="inputStyle"
|
|
type="text"
|
|
input-align="right"
|
|
:border="false"
|
|
maxlength="10"
|
|
:value="formData.hyDate"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
<!-- 驳回理由 -->
|
|
<template v-if="['已驳回'].includes(formData.prebookStateZN)">
|
|
<view class="item-line">
|
|
<text class="line-label"> 驳回理由</text>
|
|
</view>
|
|
<view class="item-text">
|
|
<u-input
|
|
type="textarea"
|
|
height="200"
|
|
:border="false"
|
|
:value="formData.auditRemark || '-'"
|
|
placeholder=""
|
|
disabled
|
|
/>
|
|
</view>
|
|
</template>
|
|
</view>
|
|
<view style="height: 50rpx"></view>
|
|
</scroll-view>
|
|
<!-- 核验弹窗 -->
|
|
<u-modal
|
|
ref="uModal"
|
|
title="核验口令"
|
|
v-model="validaShow"
|
|
@confirm="submitFn"
|
|
:async-close="true"
|
|
:show-cancel-button="true"
|
|
>
|
|
<view class="dialog">
|
|
<u-input
|
|
:custom-style="eachStyle"
|
|
type="text"
|
|
maxlength="20"
|
|
v-model="command"
|
|
placeholder="请输入核验口令"
|
|
/>
|
|
</view>
|
|
</u-modal>
|
|
<!-- 按钮 -->
|
|
<view class="btn-box">
|
|
<u-button style="width: 80%" shape="square" type="primary" @click="validaFn"
|
|
>核验</u-button
|
|
>
|
|
</view>
|
|
<u-top-tips ref="uTips" :navbar-height="50"></u-top-tips>
|
|
<u-toast ref="uToast" />
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import { AuditStateEnumMap, PrebookStateEnumMap } from "@/enums/index.js";
|
|
export default {
|
|
data() {
|
|
return {
|
|
// 表单
|
|
formData: {
|
|
userName: "",
|
|
college: "",
|
|
major: "",
|
|
endYear: "",
|
|
carNumber: "", // 车牌号
|
|
phone: "", // 联系电话
|
|
checked: false, //是否同意
|
|
retuenSchoolReason: "-", //返校事由
|
|
retuenSchoolTime: "", //返校日期
|
|
hyDate: "", //核验时间
|
|
createTime: "", //提交时间
|
|
auditRemark: null, //驳回理由
|
|
|
|
id: "",
|
|
retuenSchoolCount: 3,
|
|
prebookState: 0,
|
|
prebookStateZN: "", //状态
|
|
verifyCount: 0,
|
|
auditState: 0,
|
|
auditStateZN: "",
|
|
auditTime: null,
|
|
|
|
schoolId:'',
|
|
},
|
|
// 随行人
|
|
sxList: [
|
|
{
|
|
name: "",
|
|
phone: "",
|
|
},
|
|
],
|
|
// 选择日期
|
|
dateShow: false,
|
|
//
|
|
inputStyle: {
|
|
lineHeight: "90rpx",
|
|
height: "90rpx",
|
|
width: "400rpx",
|
|
},
|
|
eachStyle: {
|
|
lineHeight: "80rpx",
|
|
height: "80rpx",
|
|
width: "400rpx",
|
|
},
|
|
queryParams: {
|
|
id: "",
|
|
},
|
|
// 基础信息
|
|
baseMsg: {
|
|
id: "",
|
|
name: "", //姓名
|
|
schoolName: "",
|
|
schoolLogo: "",
|
|
startYear: "", //入学年份
|
|
college: "", //学院
|
|
educationStr: "", //学历层次
|
|
major: "", //专业
|
|
endYear: "", //毕业年份
|
|
},
|
|
// 选择日期提示
|
|
dateTip: "",
|
|
// 禁用的星期
|
|
weekSet: [],
|
|
// 是否查看二维码
|
|
isVerify: false,
|
|
// 核验弹窗
|
|
validaShow: false,
|
|
// 口令
|
|
command: "",
|
|
};
|
|
},
|
|
onLoad(e) {
|
|
console.log(e, "e--");
|
|
Object.assign(this.queryParams, e);
|
|
},
|
|
async onShow() {
|
|
await this.getDetailFn();
|
|
// 获取返校设置
|
|
this.getSetFn();
|
|
},
|
|
methods: {
|
|
//获取返校设置
|
|
async getSetFn() {
|
|
const req = {
|
|
schoolId: this.formData.schoolId,
|
|
}
|
|
const res = await this.$u.apiList.SelectInfoSetNoTokenApi(req);
|
|
console.log(res, "res--");
|
|
let AllArr = [0, 1, 2, 3, 4, 5, 6];
|
|
// 星期设置
|
|
if (res.isDayOfWeek) {
|
|
let result = res.dayOfWeek.split(",").map((x) => Number(x));
|
|
this.weekSet = AllArr.filter((x) => {
|
|
return !result.includes(x);
|
|
});
|
|
console.log(this.weekSet, "weekSet--");
|
|
// 处理tip提示
|
|
this.dateTip = this.arrayToString(this.weekSet);
|
|
}
|
|
},
|
|
// 核验
|
|
validaFn() {
|
|
// 未到核验时间不可核验
|
|
const startTime = this.formData.retuenSchoolTime.slice(0, 10);
|
|
if (new Date(startTime) > new Date()) {
|
|
/* uni.showToast({
|
|
icon: "none",
|
|
title: "未到核验时间不可核验",
|
|
duration: 2000,
|
|
}); */
|
|
this.$refs.uToast.show({
|
|
title: "未到核验时间不可核验",
|
|
type: "error",
|
|
});
|
|
return;
|
|
}
|
|
// 判断是否是禁用日期
|
|
const today = new Date();
|
|
const todayIndex = today.getDay(); // 获取当前日期的星期几索引
|
|
if (this.weekSet.includes(todayIndex)) {
|
|
/* uni.showToast({
|
|
icon: "none",
|
|
title: this.dateTip + "暂停开放返校服务,不可核验",
|
|
duration: 2000,
|
|
}); */
|
|
this.$refs.uToast.show({
|
|
title: this.dateTip + "暂停开放返校服务,不可核验",
|
|
type: "error",
|
|
});
|
|
return;
|
|
}
|
|
|
|
this.validaShow = true;
|
|
// 默认给一个值
|
|
let year = new Date().getFullYear();
|
|
let month =
|
|
new Date().getMonth() < 10
|
|
? `0${new Date().getMonth() + 1}`
|
|
: new Date().getMonth() + 1;
|
|
let day =
|
|
new Date().getDate() < 10 ? `0${new Date().getDate()}` : new Date().getDate();
|
|
// this.command = year + month + day;
|
|
},
|
|
// 确认核验
|
|
async submitFn() {
|
|
let year = new Date().getFullYear();
|
|
let month =
|
|
new Date().getMonth() < 10
|
|
? `0${new Date().getMonth() + 1}`
|
|
: new Date().getMonth() + 1;
|
|
let day =
|
|
new Date().getDate() < 10 ? `0${new Date().getDate()}` : new Date().getDate();
|
|
|
|
let currentDate = year + month + day;
|
|
console.log(currentDate, "currentDate--");
|
|
if (!this.command) {
|
|
/* uni.showToast({
|
|
icon: "none",
|
|
title: "请输入核验口令",
|
|
}); */
|
|
this.$refs.uToast.show({
|
|
title: "请输入核验口令",
|
|
type: "error",
|
|
});
|
|
this.$refs.uModal.clearLoading();
|
|
return;
|
|
}
|
|
if (this.command !== currentDate) {
|
|
/* uni.showToast({
|
|
icon: "none",
|
|
title: "核验口令不正确!",
|
|
}); */
|
|
this.$refs.uToast.show({
|
|
title: "核验口令不正确!",
|
|
type: "error",
|
|
});
|
|
this.$refs.uModal.clearLoading();
|
|
return;
|
|
}
|
|
const req = {
|
|
id: this.queryParams.id,
|
|
command: this.command,
|
|
schoolId: this.formData.schoolId,
|
|
};
|
|
const res = await this.$u.apiList.SaveReturnSchoolInfoNoTokenApi(req);
|
|
console.log(res, "res----");
|
|
this.$refs.uModal.clearLoading();
|
|
/* uni.showToast({
|
|
title: "核验成功",
|
|
duration: 2000,
|
|
}); */
|
|
this.$refs.uToast.show({
|
|
title: "核验成功",
|
|
type: "success",
|
|
});
|
|
this.validaShow = false;
|
|
setTimeout(() => {
|
|
// 跳转成功界面
|
|
// this.$u.route({
|
|
// url: "pages/my/BackSuccess/BackSuccess",
|
|
// });
|
|
uni.redirectTo({
|
|
url: "/pages/my/BackSuccess/BackSuccess",
|
|
});
|
|
}, 1000);
|
|
},
|
|
arrayToString(arr) {
|
|
let result = "";
|
|
const map = new Map([
|
|
[0, "周日"],
|
|
[1, "周一"],
|
|
[2, "周二"],
|
|
[3, "周三"],
|
|
[4, "周四"],
|
|
[5, "周五"],
|
|
[6, "周六"],
|
|
]);
|
|
arr.forEach((x) => {
|
|
if (map.has(x)) {
|
|
result += map.get(x) + "、";
|
|
}
|
|
});
|
|
return arr.length ? result.slice(0, result.length - 1) : result;
|
|
},
|
|
|
|
// 获取教育经历
|
|
async getSchoolFn() {
|
|
const req = {
|
|
userId: this.vuex_user.id,
|
|
};
|
|
const res = await this.$u.apiList.MyEducations(req);
|
|
console.log(res, "res--");
|
|
const findRow = res.find((x) => x.isSelected === true);
|
|
if (!findRow) {
|
|
/* uni.showToast({
|
|
title: "未查询到当前教育经历",
|
|
icon: "none",
|
|
}); */
|
|
this.$refs.uToast.show({
|
|
title: "未查询到当前教育经历",
|
|
type: "error",
|
|
});
|
|
return;
|
|
}
|
|
Object.assign(this.baseMsg, findRow);
|
|
this.baseMsg.name = this.vuex_user.name;
|
|
},
|
|
// 获取详情
|
|
async getDetailFn() {
|
|
const req = {
|
|
id: this.queryParams.id,
|
|
};
|
|
const res = await this.$u.apiList.SelectReturnSchoolInfoNotokenApi(req);
|
|
console.log(res, "res-");
|
|
// 回填基础信息
|
|
Object.assign(this.formData, res);
|
|
this.formData.prebookStateZN = PrebookStateEnumMap.get(res.prebookState);
|
|
this.formData.auditStateZN = AuditStateEnumMap.get(res.auditState);
|
|
this.formData.retuenSchoolTime = res.retuenSchoolTime
|
|
.replaceAll("0:00:00", "")
|
|
.replaceAll("00:00:00", "");
|
|
console.log(JSON.parse(JSON.stringify(this.formData)));
|
|
// 回填随行人
|
|
this.sxList = res.returnSchoolPrebookTogetherPerson.sort((a, b) => {
|
|
return a.index - b.index;
|
|
});
|
|
},
|
|
},
|
|
watch: {
|
|
validaShow(val) {
|
|
console.log(val, "val--");
|
|
console.log(val === false, "val === false--");
|
|
if (val === false) {
|
|
console.log("清空了");
|
|
this.command = "";
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.body-box {
|
|
max-height: calc(100vh - 250rpx);
|
|
overflow-y: auto;
|
|
border: 1px solid red;
|
|
}
|
|
// 基础信息
|
|
.base-box {
|
|
background-color: white;
|
|
// 单行样式
|
|
.item-line {
|
|
text-align: left;
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
font-size: 30rpx;
|
|
line-height: 90rpx;
|
|
height: 90rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid #f1f2f6;
|
|
.line-label {
|
|
// font-size: 30rpx;
|
|
color: black;
|
|
}
|
|
.line-value {
|
|
// font-weight: 700;
|
|
color: #969696;
|
|
}
|
|
}
|
|
}
|
|
// 表单
|
|
.form-box {
|
|
margin-top: 20rpx;
|
|
background-color: white;
|
|
// 返校日期
|
|
.item-date {
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
font-size: 30rpx;
|
|
line-height: 90rpx;
|
|
height: 90rpx;
|
|
display: flex;
|
|
position: relative;
|
|
// border-bottom: 1px solid #f1f2f6;
|
|
.input-mask {
|
|
position: absolute;
|
|
width: 100%;
|
|
height: 90rpx;
|
|
// background-color: red;
|
|
}
|
|
.img {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 50rpx;
|
|
// padding-right: 30rpx;
|
|
}
|
|
}
|
|
// 单行样式
|
|
.item-line {
|
|
text-align: left;
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
font-size: 30rpx;
|
|
line-height: 90rpx;
|
|
height: 90rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid #f1f2f6;
|
|
.line-label {
|
|
// font-size: 30rpx;
|
|
color: black;
|
|
}
|
|
}
|
|
// 提示
|
|
.item-tip {
|
|
text-align: left;
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
padding-bottom: 10rpx;
|
|
font-size: 22rpx;
|
|
// line-height: 90rpx;
|
|
// height: 90rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid #f1f2f6;
|
|
.line-label {
|
|
// font-size: 30rpx;
|
|
color: red;
|
|
}
|
|
}
|
|
// 随行人样式
|
|
.item-for {
|
|
background-color: #f7f6f9;
|
|
padding-left: 30rpx;
|
|
display: flex;
|
|
width: 100%;
|
|
border-bottom: 1px solid #7b7c8033;
|
|
.for-left {
|
|
// border: 1px solid blue;
|
|
width: calc(100%);
|
|
.each {
|
|
flex: 1;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
line-height: 80rpx;
|
|
height: 80rpx;
|
|
padding-right: 30rpx;
|
|
}
|
|
}
|
|
}
|
|
// 文本框
|
|
.item-text {
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
}
|
|
}
|
|
// 其余信息
|
|
.other-box {
|
|
margin-top: 20rpx;
|
|
background-color: white;
|
|
// 文本框
|
|
.item-text {
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
}
|
|
// 单行样式
|
|
.item-line {
|
|
text-align: left;
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
font-size: 30rpx;
|
|
line-height: 90rpx;
|
|
height: 90rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid #f1f2f6;
|
|
.line-label {
|
|
// font-size: 30rpx;
|
|
color: black;
|
|
}
|
|
}
|
|
}
|
|
// 按钮
|
|
.btn-box {
|
|
position: fixed;
|
|
width: 100%;
|
|
bottom: 0;
|
|
height: 150rpx;
|
|
border-top: 1px solid #f1f2f6;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.dialog {
|
|
// border: 1px solid red;
|
|
padding-left: 30rpx;
|
|
padding-right: 30rpx;
|
|
margin-top: 50rpx;
|
|
margin-bottom: 80rpx;
|
|
}
|
|
</style>
|