|
@@ -1,11 +1,11 @@
|
|
|
<template>
|
|
|
<view class="editAddress">
|
|
|
- <page-navbar bgColor="#fff" title="新增地址"></page-navbar>
|
|
|
+ <page-navbar bgColor="#fff" :title="getTitle"></page-navbar>
|
|
|
<base-card padding="24rpx">
|
|
|
<view class="f-s-32 text-333 u-m-b-24 text-bold"> 地址信息</view>
|
|
|
<u--form
|
|
|
labelPosition="left"
|
|
|
- :model="userInfo"
|
|
|
+ :model="addressInfo"
|
|
|
:rules="rules"
|
|
|
ref="uForm"
|
|
|
labelWidth="80"
|
|
@@ -13,23 +13,28 @@
|
|
|
>
|
|
|
<u-form-item label="用户名" prop="receiveName" borderBottom required>
|
|
|
<u--input
|
|
|
- v-model="userInfo.receiveName"
|
|
|
+ v-model="addressInfo.receiveName"
|
|
|
border="none"
|
|
|
placeholder="请输入用户名"
|
|
|
></u--input>
|
|
|
</u-form-item>
|
|
|
<u-form-item label="联系方式" prop="phone" borderBottom required>
|
|
|
<u--input
|
|
|
- v-model="userInfo.phone"
|
|
|
+ v-model="addressInfo.phone"
|
|
|
border="none"
|
|
|
placeholder="请输入联系方式"
|
|
|
></u--input>
|
|
|
</u-form-item>
|
|
|
|
|
|
- <u-form-item label="所属地区" prop="regionArea" borderBottom required>
|
|
|
+ <u-form-item
|
|
|
+ label="所属地区"
|
|
|
+ prop="regionArea"
|
|
|
+ borderBottom
|
|
|
+ required
|
|
|
+ @click="orientation"
|
|
|
+ >
|
|
|
<u--input
|
|
|
- v-model="userInfo.regionArea"
|
|
|
- disabled
|
|
|
+ v-model="addressInfo.regionArea"
|
|
|
disabledColor="#ffffff"
|
|
|
placeholder="请选择所属地区"
|
|
|
border="none"
|
|
@@ -37,33 +42,32 @@
|
|
|
<u-icon slot="right" name="arrow-right" color="#999999" size="12"></u-icon>
|
|
|
</u-form-item>
|
|
|
|
|
|
- <u-form-item label="详细地址" prop="detailAddress" borderBottom required>
|
|
|
+ <u-form-item
|
|
|
+ label="详细地址"
|
|
|
+ prop="detailAddress"
|
|
|
+ borderBottom
|
|
|
+ required
|
|
|
+ @click="orientation"
|
|
|
+ >
|
|
|
<u--input
|
|
|
- v-model="userInfo.detailAddress"
|
|
|
- disabled
|
|
|
+ v-model="addressInfo.detailAddress"
|
|
|
disabledColor="#ffffff"
|
|
|
placeholder="请输入详情地址"
|
|
|
border="none"
|
|
|
></u--input>
|
|
|
- <u-icon
|
|
|
- slot="right"
|
|
|
- name="map"
|
|
|
- color="#000"
|
|
|
- size="20"
|
|
|
- @click="orientation"
|
|
|
- ></u-icon>
|
|
|
+ <u-icon slot="right" name="map" color="#000" size="20"></u-icon>
|
|
|
</u-form-item>
|
|
|
|
|
|
<u-form-item>
|
|
|
<view class="fl-flex-item">
|
|
|
<view class="f-s-28 text-primary">设置为默认地址</view>
|
|
|
- <u-switch></u-switch>
|
|
|
+ <u-switch v-model="addressInfo.defaultStatus"></u-switch>
|
|
|
</view>
|
|
|
</u-form-item>
|
|
|
</u--form>
|
|
|
</base-card>
|
|
|
<view class="editAddress-bottom">
|
|
|
- <base-button text="保存" @click="handleSave"></base-button>
|
|
|
+ <base-button text="保存" :loading="loading" @click="handleSave"></base-button>
|
|
|
</view>
|
|
|
<region-picker :show="show"></region-picker>
|
|
|
</view>
|
|
@@ -71,21 +75,30 @@
|
|
|
|
|
|
|
|
|
<script>
|
|
|
+import { getCurrentLocation } from '@/api/client/home';
|
|
|
+import ADDRESS_API from '@/api/client/address.js';
|
|
|
+// detail
|
|
|
export default {
|
|
|
name: 'editAddress',
|
|
|
data() {
|
|
|
return {
|
|
|
- personalInfo: {
|
|
|
+ addressInfo: {
|
|
|
receiveName: '', //收货人名称
|
|
|
phone: '', //收件人联系电话
|
|
|
- defaultStatus: '', //是否为默认地址 0-否 1-是
|
|
|
+ defaultStatus: false, //是否为默认地址
|
|
|
+ detailAddress: '', //详细地址(街道)
|
|
|
+ regionArea: '', //所属地区【页面渲染】
|
|
|
+ longitude: 0,
|
|
|
+ latitude: 0,
|
|
|
postCode: '', //邮政编码
|
|
|
- city: '', //省份/直辖市
|
|
|
+ province: '', //省份/直辖市
|
|
|
+ city: '', //城市
|
|
|
region: '', //区
|
|
|
- detailAddress: '', //详细地址(街道)
|
|
|
- regionArea: '', //所属地区 页面渲染
|
|
|
},
|
|
|
- show: true,
|
|
|
+ show: false,
|
|
|
+ boolean: false,
|
|
|
+ addressId: '', //地址ID
|
|
|
+ title: '', //地址标题
|
|
|
rules: {
|
|
|
receiveName: {
|
|
|
type: 'string',
|
|
@@ -93,6 +106,18 @@ export default {
|
|
|
message: '请输入用户',
|
|
|
trigger: ['blur', 'change'],
|
|
|
},
|
|
|
+ detailAddress: {
|
|
|
+ type: 'string',
|
|
|
+ required: true,
|
|
|
+ message: '请选择详情地址',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
+ regionArea: {
|
|
|
+ type: 'string',
|
|
|
+ required: true,
|
|
|
+ message: '请选择属于地区',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
phone: [
|
|
|
{
|
|
|
required: true,
|
|
@@ -108,28 +133,91 @@ export default {
|
|
|
},
|
|
|
],
|
|
|
},
|
|
|
- radio: '',
|
|
|
- switchVal: false,
|
|
|
};
|
|
|
},
|
|
|
onReady() {
|
|
|
this.$refs.uForm.setRules(this.rules);
|
|
|
},
|
|
|
- onShow() {},
|
|
|
+ onLoad(options) {
|
|
|
+ if (options.addressId) {
|
|
|
+ this.addressId = options.addressId;
|
|
|
+ }
|
|
|
+ },
|
|
|
computed: {
|
|
|
labelStyle() {
|
|
|
return {
|
|
|
height: '50rpx',
|
|
|
};
|
|
|
},
|
|
|
+ getTitle() {
|
|
|
+ return this.title ? '新增地址' : '编辑地址';
|
|
|
+ },
|
|
|
+ },
|
|
|
+ onShow() {
|
|
|
+ if (this.addressId) {
|
|
|
+ this.getInitDetail(this.addressId);
|
|
|
+ }
|
|
|
},
|
|
|
methods: {
|
|
|
- orientation() {
|
|
|
- this.getOrientationInfo();
|
|
|
+ getInitDetail(data) {
|
|
|
+ ADDRESS_API.detail(data).then(res => {
|
|
|
+ let { province, region, city } = res;
|
|
|
+ this.addressInfo = Object.assign(this.addressInfo, {
|
|
|
+ ...res,
|
|
|
+ regionArea: `${province}·${region}·${city}`,
|
|
|
+ });
|
|
|
+ });
|
|
|
},
|
|
|
handleSave() {
|
|
|
- this.$refs.uForm.validate().then(res => {
|
|
|
- console.log(res);
|
|
|
+ this.loading = true;
|
|
|
+ this.$refs.uForm.validate().then(val => {
|
|
|
+ if (!val) return;
|
|
|
+ if (this.addressId) {
|
|
|
+ /* 编辑 */
|
|
|
+ console.log(this.addressInfo, 'this.addressInfo');
|
|
|
+ ADDRESS_API.update(this.addressId, this.addressInfo).then(res => {
|
|
|
+ this.loading = false;
|
|
|
+ this.$u.toast('保存成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ uni.navigateBack(-1);
|
|
|
+ }, 1500);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ /* 新增 */
|
|
|
+ ADDRESS_API.add(this.addressInfo).then(res => {
|
|
|
+ this.loading = false;
|
|
|
+ this.$u.toast('保存成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ uni.navigateBack(-1);
|
|
|
+ }, 1500);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ orientation() {
|
|
|
+ uni.chooseLocation({
|
|
|
+ type: 'gcj02',
|
|
|
+ success: res => {
|
|
|
+ let { longitude, latitude } = res;
|
|
|
+ let point = `${latitude},${longitude}`;
|
|
|
+ getCurrentLocation({ point }).then(res => {
|
|
|
+ if (res.code === 'OK') {
|
|
|
+ this.mapLocationInfo = res.data;
|
|
|
+ let { longitude, latitude, address, name, id, province, district, city } =
|
|
|
+ this.mapLocationInfo;
|
|
|
+ this.addressInfo = Object.assign(this.addressInfo, {
|
|
|
+ longitude,
|
|
|
+ latitude,
|
|
|
+ detailAddress: address,
|
|
|
+ regionArea: name,
|
|
|
+ postCode: id,
|
|
|
+ province: province.name,
|
|
|
+ city: city.name,
|
|
|
+ region: district.name,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
});
|
|
|
},
|
|
|
},
|