Commit 396643b7 authored by 潘永坪's avatar 潘永坪

填写订单页面开发

parent 34f47abe
......@@ -96,7 +96,7 @@ export default{
return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg))
},
phoneReg:function(){//手机正则
return /^(13[0-9]|14[0-9]|15[0-9]|18[0-9]|17[0-9]|19[0-9]|16[0-9])\d{8}$/
return /^(13[0-9]|14[0-9]|15[0-9]|18[0-9]|17[0-9]|19[0-9]|16[0-9]|12[0-9])\d{8}$/
},
idReg:function(){//身份证正则
return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/
......
......@@ -3,7 +3,7 @@
<view class="son-wrap">
<view class="top">
<view class="top-num">
需填写{{buyNum}}位联系人
需填写{{contactNum}}位联系人
</view>
<view @click="showEdit()" class="top-add">
<text>
......@@ -14,20 +14,25 @@
<view class="bottom">
<checkbox-group @change="chooseContactChange">
<view class="bottom-list" v-for="(item,index) of contactData" :key="item.id">
<view class="bottom-list" v-for="(item,index) of listTotal" :key="item.id">
<label>
<checkbox :value="JSON.stringify(item)" :checked="item.ifChoose" color="#3688ff" />
<view class="bottom-content">
<view>
{{item.name}}
</view>
</view>
<view>
<text>
身份证
</text>
{{item.credentialNumber?item.credentialNumber.substr(0,3)+"****"+item.credentialNumber.substr(14,4):"无"}}
</view>
<view>
<text>
手机号
</text>
{{item.phone?item.phone.substr(0,3)+"****"+item.phone.substr(7,4):"无"}}
</view>
</view>
</label>
......@@ -38,12 +43,12 @@
<u-icon name="trash-fill" color="#3688ff" size="56"></u-icon>
</view>
</view>
<view style="margin: 40rpx 0;text-align: center;" v-if='contactData&&contactData.length>0'>
<view style="margin: 40rpx 0;text-align: center;" v-if='listTotal&&listTotal.length>0'>
已展示所有联系人
</view>
</checkbox-group>
<view class="bottom-sure">
<view class="bottom-sure" @click="config()">
确定
</view>
</view>
......@@ -54,22 +59,22 @@
<script>
export default {
props: ['contactData', 'orderTouristList', 'buyNum'],
props: ['contactTotal', 'contactNum'],
watch: {
orderTouristList: {
handler(newValue, oldValue) {
if (newValue) {
this.chooseContact = this.orderTouristList
}
},
deep: true,
immediate: true
contactTotal: {
handler(newValue, oldValue) {
if (newValue) {
this.listTotal = this.contactTotal
}
},
deep: true,
immediate: true
}
},
data() {
return {
showPop: false, //控制联系人弹窗显示隐藏
chooseContact: [], //选中的联系人
listTotal:[],//所有联系人
showModal: false, //确认弹窗显示隐藏
contactId:'',//删除联系人的Id
......@@ -91,20 +96,41 @@ export default {
//---确定选中的联系人
config() {
this.showPop = false
this.$emit('contactListConfig', this.chooseContact)
//选中的排在前面
this.listTotal.sort(function (a, b) {
return b.ifChoose-a.ifChoose
})
this.$parent.contactTotal=this.listTotal
let chooseArr=[]
this.listTotal.forEach(item=>{
if(item.ifChoose){
chooseArr.push(item)
}
})
this.$parent.chooseContact=chooseArr
},
//---联系人姓名变化
chooseContactChange(e){
let value=e.detail.value
if (value.length > this.contactNum) {
let number=value.length-this.contactNum
value=value.slice(number)
}
let arr=[]
value.forEach(item=>{
arr.push(JSON.parse(item))
})
this.chooseContact=arr
if (arr.length > this.buyNum) {
arr.shift()
}
//先全部取消选中,后面根据选中的值来判断谁选中
this.listTotal.forEach(item=>{
item.ifChoose=false
})
arr.forEach(item=>{
this.listTotal.forEach(item2=>{
if(item.id==item2.id){
item2.ifChoose=true
}
})
})
},
//---点击删除
clickDele(id) {
......@@ -123,7 +149,6 @@ export default {
icon:'none'
})
this.showModal = false
this.showPop=false
this.$parent.getContactList()
} else {
uni.showToast({
......
<template>
<view class="editBox" v-show="showEdit">
<view @click="close()" class="return">
<u-icon name="close"></u-icon>
<u-icon name="close" bold></u-icon>
</view>
<view class="editTop">
</view>
<view class="editBottom">
<view class="bottomContent">
<view>
<text>
姓名:
</text>
<input v-model.trim="name" placeholder="请输入中文姓名" />
<input v-model.trim="name" placeholder="请输入中文姓名,必填" />
</view>
<view>
<text>
身份证:
</text>
<input v-model.trim="credentialNumber" maxlength="18" placeholder="请输入身份证号码" />
<input v-model.trim="credentialNumber" maxlength="18" placeholder="请输入身份证号码,必填" />
</view>
<view>
<text>
联系电话:
</text>
<input v-model.trim="phone" maxlength="11" placeholder="用于接收行程信息" />
</view>
<view>
<!--编辑-->
<a class="middle-btn" @click="keepEdit()" v-if="editBtn">完成</a>
<!--新增-->
<a class="middle-btn" @click="keepPlus()" v-else="">完成</a>
<a class="complete" @click="keepSave()">完成</a>
</view>
</view>
......@@ -37,130 +38,98 @@
</template>
<script>
export default {
props: ["editContact"],
data() {
return {
showEdit: false, //控制组件显示隐藏
name: "", //姓名
credentialNumber: "", //身份证号
reviseContactId: "", //被修改人id
editBtn: "", //控制编辑完成按钮显示隐藏
}
},
watch: {
editContact: { //
handler(newValue, oldValue) {
if (newValue) {
this.editBtn = true
} else {
this.editBtn = false
}
this.name = newValue.name||''
this.credentialNumber = newValue.credentialNumber||''
this.reviseContactId = newValue.id||''
},
deep: false,
immediate: false
}
},
methods: {
//---关闭弹窗
close() {
this.showEdit = false
},
//---新增保存
keepPlus() {
if (!this.$commonjs.nameReg().test(this.name)) {
uni.showToast({
title:'请输入正确的中文名字',
icon:'none'
})
return
}
if (!this.$commonjs.idReg().test(this.credentialNumber)) {
uni.showToast({
title:'请输入正确身份证号',
icon:'none'
})
return
}
let data = {
name: this.name, //保存姓名
phone: "", //电话号码
credentialNumber: this.credentialNumber, //身份证号
category: "", //成人或者儿童
openid: uni.getStorageSync("openid"), //用户Id
credentialsType: "", //证件类型
merchantType: 1, //商户类型,1.景区,2.酒店,3.餐饮
}
this.$request("wechatUser/contact/saveContact", data).then((res) => {
if (res.code == "00") {
uni.showToast({
title:'保存成功',
icon:'none'
})
this.$parent.addChoose()
this.showEdit = false
this.name = "" //成功之后清空数据,防止下次新增的时候出现之前的数据
this.credentialNumber = ""
} else {
uni.showToast({
title:res.message,
icon:'none'
})
}
})
},
//---编辑保存
keepEdit() {
if (!this.$commonjs.nameReg().test(this.name)) {
uni.showToast({
title:'请输入正确的中文名字',
icon:'none'
})
return
}
if (!this.$commonjs.idReg().test(this.credentialNumber)) {
uni.showToast({
title:'请输入正确身份证号',
icon:'none'
})
return
}
let data = {
name: this.name, //保存姓名
phone: "", //电话号码
credentialNumber: this.credentialNumber, //身份证号
category: "", //成人或者儿童
openid: uni.getStorageSync("openid"), //用户Id
credentialsType: "", //证件类型
merchantType: 1, //商户类型,1.景区,2.酒店,3.餐饮
id: this.reviseContactId, //被修改人id
}
this.$request("wechatUser/contact/updateContact", data).then((res) => {
if (res.code == "00") {
uni.showToast({
title:'修改成功',
icon:'none'
})
this.$parent.getContactList()
this.showEdit = false
} else {
uni.showToast({
title:res.message,
icon:'none'
})
}
})
}
}
}
export default {
props: ['editContact'],
data() {
return {
showEdit: false, //控制组件显示隐藏
name: '', //姓名
credentialNumber: '', //身份证号
phone:'',//手机号码
reviseContactId: '', //被修改人id
}
},
watch: {
editContact: {
handler(newValue, oldValue) {
console.log(111)
this.name = newValue.name||''
this.credentialNumber = newValue.credentialNumber||''
this.reviseContactId = newValue.id||''
this.phone=newValue.phone||''
},
deep: true,
immediate: true
}
},
methods: {
//---关闭弹窗
close() {
this.showEdit = false
},
//---保存
keepSave() {
if (!this.$commonjs.nameReg().test(this.name)) {
uni.showToast({
title:'请输入正确的中文名字',
icon:'none'
})
return
}
if (!this.$commonjs.idReg().test(this.credentialNumber)) {
uni.showToast({
title:'请输入正确身份证号',
icon:'none'
})
return
}
if (this.phone&&!this.$commonjs.phoneReg().test(this.phone)) {
uni.showToast({
title:'请输入正确电话号码',
icon:'none'
})
return
}
let data = {
name: this.name, //保存姓名
phone:this.phone, //电话号码
credentialNumber: this.credentialNumber, //身份证号
openid: uni.getStorageSync('openid'), //用户Id
merchantType: 1, //商户类型,1.景区,2.酒店,3.餐饮
id: this.reviseContactId, //被修改人id
category: '', //成人或者儿童
credentialsType: '', //证件类型
}
let queryUrl=''
if(this.reviseContactId){
queryUrl='wechatUser/contact/updateContact'
}else{
queryUrl='wechatUser/contact/saveContact'
}
this.$request(queryUrl, data).then((res) => {
if (res.code == '00') {
uni.showToast({
title:'保存成功',
icon:'none'
})
if(!this.reviseContactId){
this.$parent.addChoose()
}
this.showEdit = false
} else {
uni.showToast({
title:res.message,
icon:'none'
})
}
})
}
}
}
</script>
<style scoped="scoped">
<style scoped="scoped" lang="scss">
.editBox {
height: 100%;
background: #F5F5F5;
position: fixed;
top: 0;
......@@ -168,8 +137,6 @@
right: 0;
bottom: 0;
z-index: 10000;
overflow-y: auto;
font-size:28rpx;
}
.return {
height:100rpx;
......@@ -201,7 +168,7 @@
}
.bottomContent view text {
display: inline-block;
width: 120rpx;
width: 140rpx;
text-align-last: justify;
margin-right: 20rpx;
}
......@@ -209,10 +176,17 @@
flex: 1;
}
.bottomContent view:last-child {
display: flex;
justify-content: center;
align-items: center;
margin-top: 60rpx;
border: none;
}
.complete{
width:100%;
height:70rpx;
border-radius:16rpx;
color: #FFFFFF;
text-align: center;
line-height:70rpx;
background:$theme;
display: inline-block;
}
</style>
......@@ -147,19 +147,23 @@
<text> 游客信息 </text>
<text>
需填<text class="title-bold">{{ contactNum }}</text>位出行人
<text class="title-bold" v-if="contactNum - orderTouristList.length > 0">,还需{{ contactNum - orderTouristList.length }}</text>
<text class="title-bold" v-if="contactNum - chooseContact.length > 0">,还需{{ contactNum - chooseContact.length }}</text>
</text>
</view>
<view class="visitorPlus">
<!-- 这里key必须是index,如果是id会出现数据改变和样式不改变的bug -->
<view
class="plus-list"
:class="{ on: item.ifChoose == true }"
v-for="(item, index) of contactData.slice(0, 3)"
:class="{on:item.ifChoose}"
v-for="(item, index) of contactTotal.slice(0, 3)"
@click="visitorChoose(index)"
:key="item.id"
:key="index"
>
{{ item.name }}
<view v-if="item.ifChoose" class="date-icon">
<u-icon name="checkmark" color="#ffffff"></u-icon>
</view>
</view>
<view @click="showContacts()" class="plus-list plus-list-last">
......@@ -168,8 +172,8 @@
</view>
</view>
<view class="visitorEdit" v-show="orderTouristList.length > 0">
<view class="edit-list" v-for="(item, index) of orderTouristList" :key="item.id">
<view class="visitorEdit" v-show="chooseContact.length > 0">
<view class="edit-list" v-for="(item, index) of chooseContact" :key="item.id">
<view @click="delChooseContact(item, index)">
<u-icon name="close-circle" color="#3688ff" size="40"></u-icon>
</view>
......@@ -297,10 +301,8 @@
<contactList
ref="contactList"
@getEditContact="getEditContact"
:contactData="contactData"
@contactListConfig="contactListConfig"
:orderTouristList="orderTouristList"
:buyNum="contactNum"
:contactTotal="contactTotal"
:contactNum="contactNum"
></contactList>
<!--一个站点时获取排队信息弹窗-->
......@@ -379,8 +381,8 @@ export default {
interfaceCode: '', //接口编号
merchantCode: '', //商户code
productCode: '', //产品code
contactData: [], //联系人列表数据
orderTouristList: [], //选中的游客信息列表
contactTotal: [], //所有联系人列表
chooseContact: [], //选中的游客信息列表
contactNum: 1, //需要选择几位联系人数量
cruisePlanId: '', //班次Id
chooseTimeData: '', //选中的时间传给子组件
......@@ -480,7 +482,8 @@ export default {
merchantCode: this.merchantCode //商户code
}
uni.showLoading({
title: '加载中'
title: '加载中',
mask:true
})
this.$request('distribution/distribution/findNewFetchInfoFromSceinc', data).then(res => {
if (res.code == '00') {
......@@ -501,7 +504,8 @@ export default {
merchantCode: this.merchantCode //商户code
}
uni.showLoading({
title: '加载中'
title: '加载中',
mask:true
})
this.$request('distribution/distribution/findNewFetchInfoFromSceinc', data).then(res => {
if (res.code == '00') {
......@@ -585,7 +589,7 @@ export default {
//如果为班次票,点击时,请求班次票接口
this.cruisePlanId = '' //清空班次id
this.timeActive = 10000
this.getTimeStock()
uni.$u.throttle(this.getTimeStock, 3000)
}
},
//---日历确认事件
......@@ -628,56 +632,28 @@ export default {
//---获取点击的编辑联系人信息,传给编辑联系人组件
getEditContact(data) {
this.editContact = data
console.log(this.editContact)
},
//---删除选中的联系人
delChooseContact(item, index) {
//所有联系人中找到删除联系人下标,改成未选中状态
let sub = this.contactData.findIndex(item2 => item2.id == item.id)
this.contactData[sub].ifChoose = false
this.orderTouristList.splice(index, 1) //删除数组
let sub = this.contactTotal.findIndex(item2 => item2.id == item.id)
this.contactTotal[sub].ifChoose = false
this.chooseContact.splice(index, 1) //删除数组
},
//---展示编辑联系人
showEdit(obj) {
this.$refs.editContacts.showEdit = true
this.editContact = obj
},
//---联系人列表选中确定之后传值事件
contactListConfig(data) {
//把选中的联系人放在前面
this.contactData.forEach((item, index) => {
data.forEach(item2 => {
if (item.id == item2.id) {
delete this.contactData[index]
}
})
})
this.contactData = this.contactData.filter(function (val) {
return val
})
this.contactData = data.concat(this.contactData)
//获取选中的联系人
this.orderTouristList = data
//清空之前的选中状态
this.contactData.forEach(item => {
item.ifChoose = false
})
//选中的联系人,设为选中状态
this.contactData.forEach(item => {
this.orderTouristList.forEach(item2 => {
if (item.id == item2.id) {
item.ifChoose = true
}
})
})
},
//---展示新增联系人,并获取联系人列表
showContacts() {
this.$refs.contactList.showPop = true
},
//---游客选择
visitorChoose(i) {
let chooseList = this.orderTouristList
let data = this.contactData
let chooseList = this.chooseContact
let data = this.contactTotal
data[i].ifChoose = !data[i].ifChoose
if (data[i].ifChoose) {
if (chooseList.length == this.contactNum) {
......@@ -704,12 +680,24 @@ export default {
}
if (this.productIfo.tripTemplateFlag == 1) {
//实名制
this.contactNum = e.value //需要填写的联系人数量等于购买数量
if (this.contactNum < this.orderTouristList.length) {
this.contactNum = e.value
if (this.chooseContact.length>this.contactNum) {
//当选中联系人数量大于购买数量时
this.orderTouristList.splice(this.orderTouristList.length - 1, 1) //删除多余的联系人
this.chooseContact.splice(this.chooseContact.length - 1, 1) //删除多余的联系人
//联系人列表重新判断是否选中
this.contactTotal.forEach(item=>{
item.ifChoose=false
})
this.chooseContact.forEach(item=>{
this.contactTotal.forEach(item2=>{
if(item.id==item2.id){
item2.ifChoose=true
}
})
})
}
} else if (this.productIfo.tripTemplateFlag == 0) {
}
if (this.productIfo.tripTemplateFlag == 0) {
//非实名制
this.contactNum = 1
}
......@@ -724,7 +712,8 @@ export default {
id: this.productId //产品id
}
uni.showLoading({
title: '加载中'
title: '加载中',
mask:true
})
this.$request('scenic/groupGood/loadProduct', data).then(res => {
if (res.code == '00') {
......@@ -745,9 +734,6 @@ export default {
this.merchantId = res.data.merchantId //重新赋值商户id
this.beforeBookDays = res.data.beforeBookDays || 0 //提前预定天数
this.buyKnowData = res.data //购买须知,传给子组件
setTimeout(()=>{
console.log(this.buyKnowData)
},5000)
this.loadProductResVoList = res.data.loadProductResVoList //额外服务
this.afterBuyUrl = res.data.afterBuyUrl || '' //支付成功后页面跳转
//this.choooseService=res.data.data.loadProductResVoList//默认全部选中
......@@ -882,12 +868,12 @@ export default {
productCode: this.productIfo.code //产品code
}
uni.showLoading({
title: '加载中'
title: '加载中',
mask:true
})
this.$request('distribution/distribution/getTimeStock', data).then(res => {
if (res.code == '00') {
this.timeList = res.data
console.log(this.timeList)
this.timeList.forEach((item, index) => {
//增加一个时间Number字段,用于判断当前时间大于班次结束时间时,不显示该班次
item.timeNumber = parseInt(this.$commonjs.changeTime(item.planDate.substr(0, 10) + item.endPlanTime))
......@@ -910,23 +896,23 @@ export default {
}
this.$request('wechatUser/contact/findContactList', data).then(res => {
if (res.code == '00') {
this.contactData = res.data
this.contactData.forEach(item => {
this.contactTotal = res.data
this.contactTotal.forEach(item => {
//用于判断是否被选中
item.ifChoose = false
})
//编辑成功重新调该方法时,把之前选中的游客,设为选中状态
this.contactData.forEach(item => {
this.orderTouristList.forEach(item2 => {
this.contactTotal.forEach(item => {
this.chooseContact.forEach(item2 => {
if (item.id == item2.id) {
item.ifChoose = true
}
})
})
//删除联系人成功重新调该方法时,之前选中的联系人,数据库可能被删除,删除该联系人
this.orderTouristList.forEach((item, index) => {
if (!this.contactData.find(item2 => item.id == item2.id)) {
this.orderTouristList.splice(index, 1)
this.chooseContact.forEach((item, index) => {
if (!this.contactTotal.find(item2 => item.id == item2.id)) {
this.chooseContact.splice(index, 1)
}
})
} else {
......@@ -944,14 +930,14 @@ export default {
}
this.$request('wechatUser/contact/findContactList', data).then(res => {
if (res.code == '00') {
this.contactData = res.data
this.contactTotal = res.data
for (let i = 0; i < this.contactNum; i++) {
let item = this.contactData[i] || null
let item = this.contactTotal[i] || null
if (item) {
item.ifChoose = true
}
}
this.orderTouristList = this.contactData.slice(0, this.contactNum)
this.chooseContact = this.contactTotal.slice(0, this.contactNum)
} else {
uni.showToast({
title: res.message,
......@@ -1007,7 +993,7 @@ export default {
}
if (this.productIfo.tripTemplateFlag == 1) {
//实名制
if (this.orderTouristList.length != this.buyNum) {
if (this.chooseContact.length != this.buyNum) {
uni.showToast({
title: '需要添加' + this.buyNum + '位出行人',
icon: 'none'
......@@ -1016,7 +1002,7 @@ export default {
}
} else if (this.productIfo.tripTemplateFlag == 0) {
//非实名制
if (this.orderTouristList.length < 1) {
if (this.chooseContact.length < 1) {
uni.showToast({
title: '需要添加一位出行人',
icon: 'none'
......@@ -1084,7 +1070,7 @@ export default {
}
if (this.productIfo.tripTemplateFlag == 1) {
//实名制
if (this.orderTouristList.length != this.buyNum) {
if (this.chooseContact.length != this.buyNum) {
uni.showToast({
title: '需要添加' + this.buyNum + '位出行人',
icon: 'none'
......@@ -1093,7 +1079,7 @@ export default {
}
} else if (this.productIfo.tripTemplateFlag == 0) {
//非实名制
if (this.orderTouristList.length < 1) {
if (this.chooseContact.length < 1) {
uni.showToast({
title: '需要添加一位出行人',
icon: 'none'
......@@ -1141,7 +1127,7 @@ export default {
let bookEndTime = new Date(endDate).getTime()
//参数游客信息组装
let reservationInfoList = []
this.orderTouristList.forEach((item, index) => {
this.chooseContact.forEach((item, index) => {
reservationInfoList.push({
category: 0,
name: item.name,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment