金诚优选前端代码
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.
 
 
 
 
 

620 lines
16 KiB

<template>
<view id="address-add">
<lf-nav :title="page_title" :showIcon="true" bgColor="#fff"></lf-nav>
<view class="indetify-img" v-show="parseResult" @tap="closeImg">
<image src="https://cdn.guojiang.club/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20200403161800.png" mode="widthFix"></image>
</view>
<view class="address-info">
<view class="info-item">
<label for="name">姓名:</label>
<view class="form-control">
<input type="text" id="name" placeholder="请输入收货人姓名" data-type="accept_name" :value="detail.accept_name" @input="input" />
</view>
</view>
<view class="info-item">
<radio-group class="lf-flex">
<label>
<radio-group @change="radioChange">
<radio :checked="detail.sex == '男'" value="男"></radio>
</radio-group>
<text class="lf-m-l-15">先生</text>
</label>
<label>
<radio-group @change="radioChange">
<radio :checked="detail.sex == '女'" value="女"></radio>
</radio-group>
<text class="lf-m-l-15">女士</text>
</label>
</radio-group>
</view>
<view class="info-item">
<label for="phone">联系电话:</label>
<view class="form-control">
<input type="number" maxlength="11" placeholder="请输入联系电话" id="phone" data-type="mobile" :value="detail.mobile" @input="input" />
</view>
</view>
<!-- #ifdef MP-WEIXIN -->
<view class="info-item">
<label>所在地:</label>
<view class="form-control select">
<picker mode="region" @change="bindRegionChange" :value="detail.address_name">
<view class="picker">
{{detail.address_name[0] || ''}} {{detail.address_name[1] || ''}} {{detail.address_name[2] || ''}}
</view>
</picker>
</view>
<text class="lf-iconfont icon-xiangyou lf-font-24"></text>
</view>
<!-- #endif -->
<!-- #ifdef APP-PLUS || H5 -->
<view class="mpvue-picker">
<view class="info-item uni-btn-v" @click="showMulLinkageThreePicker">
<label>所在地:</label>
<view class="form-control select">
<view class="picker uni-common-mt">
{{pickerText.label || ''}}
</view>
</view>
</view>
<mpvue-city-picker :themeColor="themeColor" ref="mpvueCityPicker" :pickerValueDefault="cityPickerValueDefault"
@onConfirm="onConfirm"></mpvue-city-picker>
</view>
<!-- #endif -->
<view class="info-item">
<label for="address">详细地址:</label>
<view class="form-control">
<input type="text" id="address" data-type="address" placeholder="请输入详细地址" :value="detail.address" @input="input" />
</view>
</view>
<view class="info-item">
<label for="name">门牌号:</label>
<view class="form-control">
<input type="text" id="name" placeholder="请输入门牌号(选填)" data-type="house_num" :value="detail.house_num" @input="input" />
</view>
</view>
<view class="info-item lf-m-t-10">
<label class="checkbox" @tap="check">
<!-- #ifdef H5 -->
<checkbox color="red" :checked="detail.is_default"></checkbox>
<!-- #endif -->
<!-- #ifdef APP-PLUS -->
<checkbox color="#FFFFFF" :checked="detail.is_default"></checkbox>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<checkbox color="#FFFFFF" :checked="detail.is_default"></checkbox>
<!-- #endif -->
<text class="lf-m-l-10">设为默认地址</text>
</label>
</view>
</view>
<!-- <view class="identify-address">
<textarea @input="changeIdentify" :value="address_text" placeholder-class="textarea-placeholder" placeholder="粘贴或输入整段地址,点击“识别”自动拆分姓名、电话和地址。" />
<view class="btn-box" v-if="address_text">
<view class="clear" @tap="clearInfo">清空</view>
<view class="sure" @tap="sureAddress">识别</view>
</view>
</view> -->
<view class="button-box">
<button type="primary" :style="'background: ' + config.mainColor" class="submit" @tap="submit" :loading="loading">保存</button>
<!-- <button type="warn" class="delete" :style="'background: ' + config.secColor" v-if="id" @tap="deleteAddress" :loading="deleteLoading">删除</button> -->
</view>
</view>
</template>
<script>
import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
export default {
data() {
return {
detail: {
is_default: false,
address_name: [
'','',''
],
area: 430105,
city: 430100,
province: 430000,
sex: '男',
house_num: ''
},
order_no: '',
id: '',
loading: false,
deleteLoading: false,
config: '',
title: 'Hello',
/* mode:"range", */
defaultVal:[0,0,0,0,0,0,0],
tabList:[
{
mode:"region",
name:"省市区"
}
],
tabIndex:0,
resultInfo:{
result:""
},
// #ifdef H5
mulLinkageTwoPicker:cityData,
// #endif
cityPickerValueDefault: [0, 0, 1],
themeColor: '#007AFF',
pickerText:{
label:'',
value:'',
cityCode:''
},
mode: '',
deepLength: 1,
pickerValueDefault: [0],
pickerValueArray: [],
address_text:'',
parseResult:'',
page_title: ''
};
},
onShow() {// let app =getApp();
// app.isBirthday().then(()=>{
// if(this.$cookieStorage.get("birthday_gift")){
// var giftData=this.$cookieStorage.get("birthday_gift").data;
// new app.ToastPannel().__page.showText(giftData);
// }
// });
},
onLoad(e) {
// 第三方平台配置颜色
var config = this.$cookieStorage.get('globalConfig') || '';
this.setData({
config: config
});
// pageLogin(getUrl());
this.setData({
id: e.id
});
if (e.id) {
// wx.setNavigationBarTitle({
// title: '修改收货地址'
// });
this.page_title = '修改收货地址';
this.queryAddress(e.id);
} else {
this.page_title = '新增收货地址';
// wx.setNavigationBarTitle({
// title: '新增收货地址'
// });
}
},
methods: {
radioChange(e){
this.detail['sex'] = e.target.value;
},
//清楚图片
closeImg(){
this.parseResult = '';
},
//清空所有地址
clearInfo(){
this.address_text = '';
},
//识别地址
sureAddress(){
if(this.address_text){
const options = {
type: 0, // 哪种方式解析,0:正则,1:树查找
textFilter: [], // 预清洗的字段
nameMaxLength: 4, // 查找最大的中文名字长度
}
let parseResult = AddressParse(this.address_text,options);
this.parseResult = parseResult;
this.detail.accept_name = parseResult.name;
this.detail.mobile = parseResult.phone;
this.detail.address = parseResult.detail;
// #ifdef MP-WEIXIN
this.detail.address_name = [parseResult.province,parseResult.city,parseResult.area];
// #endif
// #ifdef APP-PLUS || H5
this.detail.address_name = [parseResult.province,parseResult.city,parseResult.area];
let address = [parseResult.province,parseResult.city,parseResult.area];
this.pickerText.label = address.join(' ');
// #endif
} else{
return
}
},
changeIdentify(e){
this.address_text = e.detail.value;
},
showMulLinkageThreePicker() {
this.$refs.mpvueCityPicker.show()
},
onConfirm(e) {
this.pickerText = e;
var index = e.value;
var province_code = provinceData[index[0]].value+"0000";
var city_code = cityData[index[0]][index[1]].value+"00";
var label = e.label;
var address_name = label.split('-');
// 设置传给后台的参数
this.detail.address_name = address_name;
this.detail.city = city_code;
this.detail.province = province_code;
this.detail.area = e.cityCode;
},
bindRegionChange(e) {
this.setData({
'detail.address_name': e.detail.value
});
},
check(e) {
this.setData({
"detail.is_default": !this.detail.is_default
});
},
input(e) {
var type = e.currentTarget.dataset.type;
var value = e.detail.value;
// this.setData({
// [`detail.${type}`]: value
// });
//
this.detail[type]=value;
},
deleteAddress() {
this.setData({
deleteLoading: true
});
this.removeAddress(this.id);
},
/* onConfirm(val){
console.log(val);
//如果页面需要调用多个mode类型,可以根据mode处理结果渲染到哪里;
// switch(this.mode){
// case "date":
// break;
// }
this.detail.address_name[0]=val.checkArr[0];
this.detail.address_name[1]=val.checkArr[1];
this.detail.address_name[2]=val.checkArr[2];
this.resultInfo.result=val.result;
},
*/
toggleTab(item,index){
this.tabIndex=index;
this.mode=item.mode;
this.defaultVal=item.value;
this.$refs[item.mode].show();
},
submit() {
this.setData({
loading: true
});
var message = null;
if (!is.has(this.detail.accept_name)) {
message = '请输入姓名';
} else if (!is.has(this.detail.mobile)) {
message = '请输入手机号码';
} else if (!is.mobile(this.detail.mobile)) {
message = '请输入正确的手机号码';
} else if (!is.has(this.detail.address_name)||!is.has(this.detail.address_name[0]) ) {
message = '请选择地址';
} else if (!is.has(this.detail.address)) {
message = '请输入详细地址';
}
if (message) {
this.setData({
loading: false
});
wx.showModal({
title: '',
content: message,
showCancel: false
});
} else {
if (this.id) {
this.updateAddress(this.detail);
} else {
this.createAddress(this.detail);
}
}
},
// 获取收货地址详情
queryAddress(id) {
uni.showLoading({
title: '正在获取中'
})
var token = this.$cookieStorage.get('user_token');
this.$http.get({
api: 'api/address/' + id,
header: {
Authorization: token
}
}).then(res => {
if (res.statusCode == 200) {
res = res.data;
var data = res.data;
data.is_default = !!data.is_default;
data.address_value = [data.province, data.city, data.area].join(' ');
this.resultInfo.result=data.address_name;
data.address_name = data.address_name.split(' ');
if (res.status) {
this.setData({
detail: data
});
// #ifndef MP-WEIXIN
this.pickerText.label = res.data.address_name.join(' ')
// #endif
} else {
wx.showToast({
title: res.message,
icon: 'error'
});
}
} else {
wx.showToast({
title: '获取信息失败',
icon: 'error'
});
}
uni.hideLoading();
}).catch(err => uni.hideLoading())
},
// 新增收货地址
createAddress(data) {
var address = {
accept_name: data.accept_name,
mobile: data.mobile,
province: data.province,
city: data.city,
area: data.area,
address_name: data.address_name.join(" "),
address: data.address,
house_num: data.house_num,
sex: data.sex,
is_default: data.is_default ? 1 : 0
};
var token = this.$cookieStorage.get('user_token');
this.$http.post({
api: 'api/address/create',
header: {
Authorization: token
},
data: address
}).then(res => {
if (res.statusCode == 200) {
res = res.data;
if (res.status) {
wx.showModal({
title: '',
content:'新增收货地址成功',
showCancel: false,
success: res => {
if (res.confirm) {
wx.navigateBack();
}
}
});
} else {
wx.showToast({
title: '新增收货地址失败',
icon: 'error',
complete: err => {
setTimeout(() => {
wx.navigateBack();
}, 1600);
}
});
}
} else {
wx.showToast({
title: '请求错误',
icon: 'error',
complete: err => {
setTimeout(() => {
wx.navigateBack();
}, 1600);
}
});
}
this.setData({
loading: false
});
}).catch(rej => {
this.setData({
loading: false
});
});
},
// 修改收货地址
updateAddress(data) {
var address = {
id: data.id,
accept_name: data.accept_name,
mobile: data.mobile,
province: data.province,
city: data.city,
area: data.area,
address_name: data.address_name.join(" "),
address: data.address,
house_num: data.house_num,
sex: data.sex,
is_default: data.is_default ? 1 : 0
};
var token = this.$cookieStorage.get('user_token');
this.$http.ajax({
api: 'api/address/'+data.id,
method: 'PUT',
header: {
Authorization: token
},
data: address
}).then(res => {
res = res.data;
if (res.status) {
wx.showModal({
title: '',
content: '修改收货地址成功',
showCancel: false,
success: res => {
if (res.confirm) {
wx.navigateBack();
}
}
});
} else {
wx.showToast({
title: '修改收货地址失败',
icon: 'error',
complete: err => {
setTimeout(() => {
wx.navigateBack();
}, 1600);
}
});
}
this.setData({
loading: false
});
}).catch(rej => {
this.setData({
loading: false
});
});
},
// 删除收货地址
removeAddress(id) {
var token = this.$cookieStorage.get('user_token');
this.$http.ajax({
api: 'api/address/' + id,
header: {
Authorization: token
},
method: 'DELETE'
}).then(res => {
if (res.statusCode == 200) {
res = res.data;
if (res.status) {
wx.showModal({
title: '',
content: '删除收货地址成功',
showCancel: false,
success: res => {
if (res.confirm) {
wx.navigateBack();
}
}
});
} else {
wx.showToast({
title: '删除收货地址失败',
icon: 'error',
complete: err => {
setTimeout(() => {
wx.navigateBack();
}, 1600);
}
});
}
} else {
wx.showToast({
title: '请求错误',
icon: 'error',
complete: err => {
setTimeout(() => {
wx.navigateBack();
}, 1600);
}
});
}
this.setData({
deleteLoading: false
});
}).catch(rej => {
this.setData({
deleteLoading: false
});
});
},
setData: function (obj) {
let that = this;
let keys = [];
let val, data;
Object.keys(obj).forEach(function (key) {
keys = key.split('.');
val = obj[key];
data = that.$data;
keys.forEach(function (key2, index) {
if (index + 1 == keys.length) {
that.$set(data, key2, val);
} else {
if (!data[key2]) {
that.$set(data, key2, {});
}
}
data = data[key2];
});
});
}
},
computed: {},
watch: {}
};
</script>
<style lang="less" scoped>
@import "add";
.identify-address>textarea{
border-color: #e5e5e5 !important;
}
/deep/.input-placeholder{
font-weight: initial;
}
</style>