<template>
|
<view class="visit">
|
<view class="list">
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>被访人姓名</text>
|
</view>
|
<view class="list_item_content"><input type="text" placeholder="请输入姓名" v-model="form1.receptMemberName" @blur="getUser" placeholder-style="color: #999999;" /></view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>入厂时间</text>
|
</view>
|
<view class="list_item_content" @click="show4 = true">
|
<text :style="{ color: form1.starttime ? '#000000' : '' }">{{ form1.starttime ? form1.starttime : '请选择' }}</text>
|
<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
|
</view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>离厂时间</text>
|
</view>
|
<view class="list_item_content" @click="openLC">
|
<text :style="{ color: form1.endtime ? '#000000' : '' }">{{ form1.endtime ? form1.endtime : '请选择' }}</text>
|
<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
|
</view>
|
</view>
|
<div class="empty"></div>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>联系人</text>
|
</view>
|
<view class="list_item_content"><input type="text" v-model="form1.reason" placeholder="请输入联系人姓名" placeholder-style="color: #999999;" /></view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>手机号</text>
|
</view>
|
<view class="list_item_content">
|
<input
|
type="number"
|
maxlength="11"
|
v-model="form1.phone1"
|
:placeholder="'请输入联系人手机号'"
|
placeholder-style="color: #999999;"
|
/>
|
</view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>来访单位</text>
|
</view>
|
<view class="list_item_content"><input type="text" v-model="form1.reason" placeholder="请输入来访单位的全称" placeholder-style="color: #999999;" /></view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>入园车辆</text>
|
</view>
|
<view class="list_item_content" @click="openInput(1)">
|
<text :style="{ color: form1.carNos ? '#000000' : '' }">{{ form1.carNos ? form1.carNos : '请输入车牌号码' }}</text>
|
<!-- <input type="text" placeholder="请输入车牌号" v-model="form1.carNos" maxlength="8" placeholder-style="color: #999999;" /> -->
|
</view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>随车人数</text>
|
</view>
|
<view class="list_item_content"><input type="text" v-model="form1.reason" placeholder="请输入随车人员总数" placeholder-style="color: #999999;" /></view>
|
</view>
|
<view class="list_item">
|
<view class="list_item_label">
|
<text>*</text>
|
<text>来访事由</text>
|
</view>
|
<view class="list_item_content"><input type="text" v-model="form1.reason" placeholder="请输入来访事由" placeholder-style="color: #999999;" /></view>
|
</view>
|
</view>
|
<view class="zw"></view>
|
<view class="footer"><view class="footer_btn" @click="submit">提交</view></view>
|
<!-- 入场时间 -->
|
<u-datetime-picker :show="show4" :minDate="new Date().getTime()" mode="datetime" @cancel="show4 = false" @confirm="setinDate"></u-datetime-picker>
|
<!-- 离场时间 -->
|
<u-datetime-picker
|
v-if="form1.starttime"
|
:show="show5"
|
:minDate="formatTimeStamp(form1.starttime)"
|
:maxDate="formatTimeStamp(maxTime)"
|
mode="datetime"
|
@cancel="show5 = false"
|
@confirm="setoutDate"
|
></u-datetime-picker>
|
<!-- 车辆 -->
|
<u-popup :show="show2" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show2 = false">
|
<view class="addcar">
|
<view class="addcar_head">添加车辆</view>
|
<view class="addcar_ipt"><input type="text" v-model="carName" placeholder="请输入车牌号" /></view>
|
<view class="addcar_footer">
|
<view class="addcar_footer_item" @click="show2 = false">取消</view>
|
<view class="addcar_footer_item t" @click="submitCart">提交</view>
|
</view>
|
</view>
|
</u-popup>
|
<u-picker keyName="name" :show="show6" :columns="columns1" @confirm="seleIdcard" @cancel="show6 = false"></u-picker>
|
<!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
|
<keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
|
<qf-image-cropper ref="cropper" :width="280" :height="280" :radius="30" @crop="uploadImg"></qf-image-cropper>
|
</view>
|
</template>
|
|
<script>
|
import tlyPictureCut from '@/components/tly-picture-cut/tlyPictureCut.vue';
|
import keyboardInput from '@/components/keyboard-input/keyboard-input.vue';
|
import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
|
import { getDaysAfterDate } from '@/utils/utils.js';
|
export default {
|
data() {
|
return {
|
photoSrc: '',
|
type: '',
|
inputType: '',
|
show1: false,
|
show2: false,
|
show4: false,
|
show5: false,
|
show6: false,
|
show7: false,
|
fileList: [],
|
columns1: [[{ name: '身份证', id: 0 }, { name: '港澳证件', id: 1 }, { name: '护照', id: 2 }]],
|
columnsNames: [[{ name: '张三', id: 0 }, { name: '张三', id: 1 }, { name: '张三', id: 2 }]],
|
columns: [],
|
cars: [],
|
day: null,
|
maxTime: '',
|
carName: '',
|
personnel: [],
|
userAnswerId: '',
|
form1: {
|
phone1: '',
|
receptMemberId: '',
|
receptMemberName: '',
|
starttime: '',
|
endtime: '',
|
doors: '',
|
doorSelectName: '',
|
reason: '',
|
carNos: ''
|
},
|
withUserList: {
|
name: '',
|
phone: '',
|
idcardType: '',
|
idcardTypeName: '',
|
companyName: '',
|
idcardNo: '',
|
faceImg: '',
|
faceImgUrl: '',
|
imgurl: '',
|
imgurlUrl: ''
|
},
|
visit: '',
|
form: {},
|
accessControl: '',
|
verify: ''
|
};
|
},
|
components: { tlyPictureCut, keyboardInput, QfImageCropper },
|
onLoad(options) {
|
if (options.data) {
|
this.form = JSON.parse(options.data);
|
}
|
// this.getvisit()
|
// this.getVisit1()
|
// this.getUserValid()
|
},
|
methods: {
|
openInput(type) {
|
this.inputType = type;
|
this.$refs.keyboard.open();
|
},
|
setPlate(e) {
|
if (this.inputType === 1) {
|
this.form1.carNos = e;
|
} else if (this.inputType === 2) {
|
this.withUserList.carNos = e;
|
}
|
this.$forceUpdate();
|
this.closeInput();
|
},
|
closeInput() {
|
this.$refs.keyboard.close();
|
},
|
uploadImg(file) {
|
this.$refs.cropper.close();
|
uni.showLoading({ title: '上传中', mask: true });
|
uni.uploadFile({
|
url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
|
filePath: file.tempFilePath,
|
name: 'file',
|
formData: {
|
folderCode: 'MEMBER_IMG'
|
},
|
success: uploadFileRes => {
|
let res = JSON.parse(uploadFileRes.data);
|
this.withUserList.faceImg = res.data.halfPath;
|
this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath;
|
},
|
complete() {
|
uni.hideLoading();
|
}
|
});
|
},
|
submit() {
|
if (!this.form1.receptMemberId)
|
return uni.showToast({
|
title: '请填写有效的访问人',
|
icon: 'none'
|
});
|
if (!this.form1.starttime)
|
return uni.showToast({
|
title: '入场时间不能为空',
|
icon: 'none'
|
});
|
if (!this.form1.endtime)
|
return uni.showToast({
|
title: '离场时间不能为空',
|
icon: 'none'
|
});
|
if (!this.form1.doorSelectName && this.accessControl == 1)
|
return uni.showToast({
|
title: '访问门禁不能为空',
|
icon: 'none'
|
});
|
if (!this.form1.reason)
|
return uni.showToast({
|
title: '拜访事由不能为空',
|
icon: 'none'
|
});
|
// this.form1.starttime = this.form1.starttime + ':00'
|
// this.form1.endtime = this.form1.endtime + ':00'
|
let data = JSON.parse(JSON.stringify(this.form1));
|
data.starttime = data.starttime + ':00';
|
data.endtime = data.endtime + ':00';
|
this.$u.api
|
.createFk({
|
...this.form,
|
...data,
|
openid: this.$store.state.openId,
|
withUserList: this.personnel
|
})
|
.then(res => {
|
if (res.code === 200) {
|
uni.reLaunch({
|
url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
|
});
|
}
|
});
|
},
|
deleUser(i) {
|
this.personnel.splice(i, 1);
|
},
|
getVisit1() {
|
// 是否需要答题
|
this.$u.api
|
.getSystemDictData({
|
dictCode: 'SYSTEM',
|
label: 'HEALTH_CARD'
|
})
|
.then(res => {
|
if (res.code === 200) {
|
this.visit = res.data.code;
|
}
|
});
|
// 起始时间时长
|
this.$u.api
|
.getSystemDictData({
|
dictCode: 'VISIT_CONFIG',
|
label: 'VALIDATE_VISIT'
|
})
|
.then(res => {
|
if (res.code === 200) {
|
this.day = Number(res.data.code);
|
// console.log(nextDay('after', true, this.day))
|
}
|
});
|
},
|
upload(type) {
|
this.type = type;
|
if (type === 'faceImg') {
|
this.$refs.cropper.open();
|
return;
|
}
|
uni.chooseImage({
|
success: chooseImageRes => {
|
// if (type === 'faceImg') {
|
// this.photoSrc = chooseImageRes.tempFilePaths[0];
|
// this.$refs.tlyPictureCut.showPop();
|
// return
|
// }
|
uni.showLoading({ title: '上传中', mask: true });
|
for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
|
uni.uploadFile({
|
url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
|
filePath: chooseImageRes.tempFilePaths[i],
|
name: 'file',
|
formData: {
|
folderCode: 'MEMBER_IMG'
|
},
|
success: uploadFileRes => {
|
let res = JSON.parse(uploadFileRes.data);
|
if (type === 'faceImg') {
|
this.withUserList.faceImg = res.data.halfPath;
|
this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath;
|
} else {
|
this.withUserList.imgurl = res.data.halfPath;
|
this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath;
|
}
|
},
|
complete() {
|
if (i === chooseImageRes.tempFilePaths.length - 1) {
|
uni.hideLoading();
|
}
|
}
|
});
|
}
|
}
|
});
|
},
|
seleIdcard(e) {
|
this.withUserList.idcardType = e.value[0].id;
|
this.withUserList.idcardTypeName = e.value[0].name;
|
this.show6 = false;
|
},
|
submitCart() {
|
if (!this.carName)
|
return uni.showToast({
|
title: '请输入车牌号码',
|
icon: 'none'
|
});
|
this.cars.push(this.carName);
|
this.form1.carNos = this.cars.join(',');
|
this.carName = '';
|
this.show2 = false;
|
},
|
deleCars(i) {
|
this.cars.splice(i, 1);
|
this.form1.carNos = this.cars.join(',');
|
},
|
seleMJ(i) {
|
this.columns.forEach((item, index) => {
|
if (index === i) {
|
item.active = !item.active;
|
}
|
});
|
},
|
openLC() {
|
if (!this.form1.starttime)
|
return uni.showToast({
|
title: '请先选择入厂时间',
|
icon: 'none'
|
});
|
this.show5 = true;
|
},
|
setinDate(e) {
|
this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
|
// this.maxTime = getDaysAfterDate(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM'), this.day)
|
this.maxTime = this.form1.starttime.slice(0, 11) + '23:59'
|
this.form1.endtime = ''
|
this.show4 = false;
|
},
|
setoutDate(e) {
|
this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
|
this.show5 = false;
|
},
|
formatTimeStamp(date) {
|
return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`));
|
},
|
// 查询用户
|
getUser() {
|
if (this.verify === '0') {
|
if (this.form1.phone1) {
|
this.$u.api
|
.getVisitedMember({
|
mobile: this.form1.phone1
|
})
|
.then(res => {
|
if (res.code === 200) {
|
this.form1.receptMemberId = res.data.id;
|
this.form1.receptMemberName = res.data.name;
|
}
|
});
|
}
|
} else {
|
if (this.form1.phone1 && this.form1.receptMemberName) {
|
this.$u.api
|
.getVisitedMember({
|
mobile: this.form1.phone1,
|
name: this.form1.receptMemberName
|
})
|
.then(res => {
|
if (res.code === 200) {
|
this.form1.receptMemberId = res.data.id;
|
this.form1.receptMemberName = res.data.name;
|
}
|
});
|
}
|
}
|
},
|
// 被拜访人信息校验方式(0手机号单独校验 1手机号和姓名组合校验)
|
getUserValid() {
|
this.$u.api
|
.getSystemDictData({
|
dictCode: 'SYSTEM',
|
label: 'BEVISITED_USER_VALID'
|
})
|
.then(res => {
|
if (res.code === 200) {
|
this.verify = res.data.code;
|
}
|
});
|
},
|
// 获取是否需要选择门禁/门禁列表
|
getvisit() {
|
this.$u.api
|
.getSystemDictData({
|
dictCode: 'SYSTEM',
|
label: 'SELECT_DOORS_VISIT_REQUIRED'
|
})
|
.then(res => {
|
if (res.code === 200) {
|
this.accessControl = res.data.code;
|
if (res.data.code === '1') {
|
this.$u.api.deviceRoleList({ type: 1 }).then(device => {
|
if (device.code === 200) {
|
if (device.data.length > 0) {
|
device.data.forEach(item => {
|
item.active = false;
|
});
|
this.columns = device.data;
|
}
|
}
|
});
|
}
|
}
|
});
|
}
|
}
|
};
|
</script>
|
<style>
|
page {
|
background-color: #f7f7f7 !important;
|
}
|
.u-upload__button {
|
margin: 0 !important;
|
}
|
</style>
|
<style lang="scss" scoped>
|
.visit {
|
width: 100%;
|
padding-top: 10rpx 0;
|
.menjin {
|
width: 100%;
|
.respondent-title {
|
width: 100%;
|
height: 100rpx;
|
line-height: 100rpx;
|
text-align: center;
|
font-size: 32rpx;
|
font-weight: 500;
|
color: #222222;
|
}
|
.list {
|
width: 100%;
|
height: 400rpx;
|
display: flex;
|
flex-direction: column;
|
.list_item {
|
width: 100%;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
text {
|
font-size: 28rpx;
|
color: #000000;
|
}
|
image {
|
width: 30rpx;
|
height: 30rpx;
|
}
|
}
|
}
|
.menjin_footer {
|
width: 100%;
|
padding: 30rpx;
|
box-sizing: border-box;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
.menjin_footer_item {
|
flex: 1;
|
height: 80rpx;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
border-radius: 10rpx;
|
background-color: #025eef;
|
color: #ffffff;
|
font-size: 26rpx;
|
margin-left: 30rpx;
|
&:first-child {
|
margin-left: 0 !important;
|
}
|
}
|
}
|
}
|
|
.addcar {
|
padding: 30rpx;
|
width: 100%;
|
box-sizing: border-box;
|
.addcar_head {
|
text-align: center;
|
font-size: 32rpx;
|
font-family: PingFangSC, PingFang SC;
|
font-weight: 500;
|
color: #222222;
|
}
|
.addcar_ipt {
|
width: 100%;
|
height: 100rpx;
|
line-height: 100rpx;
|
text-align: center;
|
background: #f7f7f7;
|
border-radius: 50rpx;
|
margin-top: 60rpx;
|
input {
|
width: 100%;
|
height: 100%;
|
font-size: 28rpx;
|
font-weight: 400;
|
color: #000000;
|
text-align: center;
|
}
|
}
|
.addcar_footer {
|
width: 100%;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
margin-top: 60rpx;
|
.t {
|
background: #025eef !important;
|
color: #ffffff !important;
|
}
|
.addcar_footer_item {
|
flex: 1;
|
height: 88rpx;
|
line-height: 88rpx;
|
font-size: 32rpx;
|
font-weight: 400;
|
color: #025eef;
|
text-align: center;
|
border-radius: 44rpx;
|
border: 1rpx solid #025eef;
|
margin-right: 18rpx;
|
&:last-child {
|
margin-right: 0 !important;
|
}
|
}
|
}
|
}
|
.list {
|
width: 100%;
|
padding: 0 30rpx;
|
box-sizing: border-box;
|
background-color: #ffffff;
|
.empty {
|
width: 750rpx;
|
height: 20rpx;
|
background-color: #f7f7f7;
|
margin: 0 -30rpx;
|
}
|
.list_item {
|
width: 100%;
|
// min-height: 98rpx;
|
padding: 30rpx 0;
|
box-sizing: border-box;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
border-bottom: 1rpx solid #e5e5e5;
|
|
.list_item_label {
|
flex-shrink: 0;
|
display: flex;
|
align-items: center;
|
|
text {
|
&:nth-child(2) {
|
font-size: 30rpx;
|
font-weight: 400;
|
color: #222222;
|
}
|
|
&:nth-child(1) {
|
font-size: 30rpx;
|
font-weight: 400;
|
color: #e42d2d;
|
}
|
}
|
}
|
|
.list_item_content {
|
flex: 1;
|
height: 100%;
|
margin-left: 30rpx;
|
display: flex;
|
align-items: center;
|
justify-content: flex-end;
|
|
text {
|
font-size: 28rpx;
|
font-weight: 400;
|
color: #999999;
|
margin-right: 6rpx;
|
}
|
|
input {
|
width: 100%;
|
height: 100%;
|
text-align: right;
|
font-size: 28rpx;
|
font-weight: 400;
|
color: #222222;
|
}
|
}
|
}
|
}
|
|
.zw {
|
width: 100%;
|
height: calc(env(safe-area-inset-bottom) + 118rpx);
|
}
|
|
.footer {
|
width: 100%;
|
padding: 0 30rpx;
|
padding-bottom: env(safe-area-inset-bottom);
|
box-sizing: border-box;
|
position: fixed;
|
left: 0;
|
bottom: 68rpx;
|
|
.footer_btn {
|
width: 100%;
|
height: 88rpx;
|
line-height: 88rpx;
|
text-align: center;
|
background: #4e99a9;
|
border-radius: 44rpx;
|
font-size: 32rpx;
|
color: #ffffff;
|
}
|
}
|
}
|
</style>
|