You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

263 lines
6.3 KiB

<template>
<view class="visitor-form-page">
<view class="block">
<input-box class="inputcom-wrapper" v-model="name" holder="必填项" label="姓名"
@blurEvent="nameBlurEvent" required></input-box>
<!-- <input-box class="inputcom-wrapper" v-model="idcard" holder="填写身份证号码" label="身份证号" @blurEvent="idCardBlurEvent" rule="idcard"></input-box> -->
<!-- <input-box class="inputcom-wrapper" v-model="phone" holder="方便预约后联系,非必填" label="手机号"
@blurEvent="phoneBlurEvent" rule="phone"></input-box> -->
<!-- <FormItem label="姓名" type="input" v-model="name" placeholder="必填项" required /> -->
<FormItem label="性别" type="picker" :display-value="genders[sex] || ''" placeholder="必选" required
@click="showGenderPicker" />
<FormItem label="出生年份" type="picker" :display-value="year ? `${year}年` : ''" placeholder="必选"
required @click="showYearPicker" />
<FormItem label="手机号" type="input" v-model="phone" rule="phone" placeholder="方便预约后联系,非必填" />
</view>
<view class="submit-wrapper btPadding" v-if="!vid">
<view :class="'btn btn3 PfScMedium submit' + (canSubmit ? ' primary' : ' noclick')"
:hover-class="(canSubmit ? 'hover' : '')" @click="submit" v-if="!vid">
确认新增
</view>
<view :class="'btn btn3 PfScMedium submit' + (canSubmit ? ' primary' : ' noclick')"
:hover-class="(canSubmit ? 'hover' : '')" @click="submit" v-else>
确认修改
</view>
</view>
<view class="fixedBot btPadding" v-if="vid">
<view class="submit">
<view class="btn cancel btn1" @click="reback">取消</view>
<view class="btn primary btn1" hover-class="hover" @click="submit">确认</view>
</view>
</view>
<SelectYear ref="yearPicker" @change="handleYearChange" />
<SexPop ref="genderPopup" v-model="sex" @confirm="handleConfirm" />
</view>
</template>
<script>
import InputBox from '@/components/inputBox.vue';
import FormItem from '@/components/FormItem.vue';
import SelectYear from '@/components/SelectYear.vue';
import SexPop from '@/components/SexPop.vue';
export default {
data() {
return {
canSubmit: false,
cssUrl: this.cssUrl,
year: '',
name: '',
// form: {
// year: '',
// name: '',
// sex: '',
// phone: ''
// },
sex:'',
nameRule: false,
idcard: '',
idcardExtRule: false,
phone: '',
phoneRule: false,
type: 1,
adding: false,
vid: false,
visitor_info: {},
genders: {
0:'男',
1:'女'
},
}
},
components: {
InputBox,
FormItem,
SexPop,
SelectYear
},
onLoad(option) {
if (option.type) this.type = option.type
if (option.vid) {
this.vid = option.vid
uni.setNavigationBarTitle({
title: '修改预约人'
});
} else {
uni.setNavigationBarTitle({
title: '新增预约人'
});
}
},
onShow() {
if (this.vid) this.getVisitorInfo()
},
methods: {
handleConfirm(sex){
this.sex = sex;
this.checkSubmit()
},
handleYearChange(year) {
this.year = year;
this.checkSubmit()
},
showYearPicker() {
this.$refs.yearPicker.show()
},
showGenderPicker() {
this.$refs.genderPopup.show();
},
add() {
if (this.adding) return
this.adding = true
var param = new Object()
param.name = this.name
param.sex = this.sex
param.birth_year = this.year
param.phone = this.phone
// param.idcard = this.idcard
var that = this
var addtimer = setTimeout(function () {
that.adding = false
}, 5000);
var req = 'api/user/add_visitor'
var method = 'POST'
if (this.vid) {
param.id = this.vid
param.get_idcard = 1
req = 'api/user/update_visitor'
}
this.$http.req(req, param, method).then(data => {
if (data == -1) return
clearTimeout(addtimer)
this.adding = false
if (this.vid) {
uni.removeStorageSync('visitor_info_' + this.vid)
}
uni.navigateBack()
});
},
getVisitorInfo() {
var param = new Object()
param.vid = this.vid
this.$http.req('api/user/get_modify_visitor', param, 'POST').then(data => {
if (data == -1) return
this.name = data.name
this.year = data.birth_year
this.sex = data.sex
// this.idcard = data.idcard
this.phone = data.phone
this.nameRule = true
// this.idcardExtRule = true
this.phoneRule = false
this.checkSubmit()
});
},
nameBlurEvent(value, res) {
this.name = value
this.nameRule = res
this.checkSubmit()
},
// idCardBlurEvent(value, res) {
// this.idcard = value
// this.idcardExtRule = res
// this.checkSubmit()
// },
// phoneBlurEvent(value, res) {
// this.phone = value
// this.phoneRule = res
// this.checkSubmit()
// },
checkSubmit() {
this.canSubmit = false
if (!this.name || (this.sex !=0 && this.sex!=1) || !this.year) return
this.canSubmit = true
},
reback() {
if (this.vid) {
uni.removeStorageSync('visitor_info_' + this.vid)
}
this.$func.toPage('/pages/visitors_new/visitors_new')
},
submit() {
this.checkSubmit()
if (!this.canSubmit) return
this.add()
}
}
}
</script>
<style lang="scss" scoped>
.visitor-form-page {
// background: #F8F8F8;
background: #FFFFFF;
height: 100vh;
overflow-y: scroll;
.block {
// background: #FFFFFF;
box-shadow: 0rpx 2rpx 24rpx 0rpx rgba(0, 0, 0, 0.03);
border-radius: 8rpx;
width: 714rpx;
margin: 20rpx auto 0rpx;
overflow: hidden;
&:nth-child(3) {
border: none !important;
}
.title {
font-size: 32rpx;
color: #000000;
width: 666rpx;
height: 50rpx;
line-height: 50rpx;
letter-spacing: 2rpx;
margin: 36rpx 0 36rpx 24rpx;
}
}
.submit-wrapper {
overflow: hidden;
position: fixed;
top: 88vh;
height: 92rpx;
left: 50%;
transform: translateX(-50%);
}
.submit {
margin: 0 auto;
}
.fixedBot {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 124rpx;
background: #FFFFFF;
box-shadow: 0rpx -2rpx 6rpx 0rpx rgba(181, 181, 181, 0.13);
backdrop-filter: blur(20rpx);
display: flex;
.submit {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
column-gap: 50rpx;
}
}
}
</style>