Parcourir la source

对接地址管理接口

yinxiangke il y a 11 heures
Parent
commit
9d94a5d25f

+ 2 - 1
.gitignore

@@ -43,4 +43,5 @@ nbdist/
 
 !*/build/*.java
 !*/build/*.html
-!*/build/*.xml
+!*/build/*.xml
+node_modules

+ 6 - 6
jd_logistics-app/components/AddressItem.vue

@@ -4,20 +4,20 @@
 			<!-- 地址信息 -->
 			<view class="address-info">
 				<view class="name-phone">
-					<text class="name">{{ address.name }}</text>
-					<text class="phone">{{ address.phone }}</text>
+					<text class="name">{{ address.contactName }}</text>
+					<text class="phone">{{ address.contactPhone }}</text>
 				</view>
-				<view class="address-detail">{{ address.address }}</view>
+				<view class="address-detail">{{ address.provinceName }}{{ address.cityName }}{{ address.countyName }}{{ address.detailedAddress }}</view>
 			</view>
 
 			<!-- 操作区域 -->
 			<view class="actions" v-if="isSowAction">
 				<!-- 设为默认 -->
 				<view class="set-default" @click="$emit('set-default')">
-					<view class="default-checkbox" :class="{ 'checked': isDefault }">
-						<text v-if="isDefault" class="checkmark">✓</text>
+					<view class="default-checkbox" :class="{ 'checked': address.defaultFlag == 1 }">
+						<text v-if="address.defaultFlag == 1" class="checkmark">✓</text>
 					</view>
-					<text class="default-text" :class="{ 'checked': isDefault }">设为默认</text>
+					<text class="default-text" :class="{ 'checked': address.defaultFlag == 1 }">设为默认</text>
 				</view>
 
 				<!-- 删除和编辑按钮 -->

+ 1 - 1
jd_logistics-app/package-lock.json

@@ -1,5 +1,5 @@
 {
-  "name": "lightning-app-cs",
+  "name": "jd_logistics-app",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {

+ 2 - 1
jd_logistics-app/pages.json

@@ -187,7 +187,8 @@
 					"path" : "address_list",
 					"style" : 
 					{
-						"navigationBarTitleText" : "地址薄"
+						"navigationBarTitleText" : "地址薄",
+						"enablePullDownRefresh": true
 					}
 				},
 				{

+ 13 - 0
jd_logistics-app/pages/about/index.vue

@@ -0,0 +1,13 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script setup>
+	
+</script>
+
+<style>
+	       
+</style>

+ 46 - 122
jd_logistics-app/pages/address/address_list.vue

@@ -1,7 +1,9 @@
 <template>
 	<view class="address-page">
 		<!-- 地址列表 -->
-		<scroll-view class="address-list" scroll-y @scrolltolower="loadMore">
+		<view class="address-list">
+			
+		
 			<!-- 地址项组件 -->
 			<address-item v-if="addressList.length > 0" v-for="(item, index) in addressList" :key="item.id" :address="item"
 				:is-default="item.isDefault" @set-default="handleSetDefault(index)" @edit="handleEdit(index)"
@@ -21,7 +23,7 @@
 				<view class="load-more-status" v-if="loadFinished && addressList.length !== 0">
 					<text>没有更多数据了</text>
 				</view>
-		</scroll-view>
+		</view>
 
 		<!-- 添加新地址按钮 -->
 		<view class="add-btn-container">
@@ -37,9 +39,9 @@
 	import {
 		ref
 	} from 'vue'
-	import { onShow } from '@dcloudio/uni-app'
+	import { onShow,onPullDownRefresh,onReachBottom } from '@dcloudio/uni-app'
 	import AddressItem from '@/components/AddressItem.vue'
-	import { listBook } from '../../api/address'
+	import { listBook,delBook } from '../../api/address'
 	
 	
 	const pageNum = ref(1)
@@ -49,84 +51,29 @@
 	const loadFinished = ref(false)
 
 	// 模拟地址数据
-	const addressList = ref([{
-			id: 1,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路97号',
-			isDefault: true
-		},
-		{
-			id: 2,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		},
-		{
-			id: 3,
-			name: '张三',
-			phone: '132****5678',
-			address: '广东省深圳市罗湖区贝丽北路97号',
-			isDefault: false
-		}
-	])
+	const addressList = ref([])
+	const pages = ref(0)//数据总条数
 
 	// 当前要操作的地址索引
 	const currentIndex = ref(-1)
 	
 	
 	onShow(() => {
-		getAddressList(false)
+		pageNum.value = 1
+		getAddressList()
+	})
+	// 下拉刷新
+	onPullDownRefresh(()=>{
+		pageNum.value = 1
+		getAddressList()
+	})
+	
+	// 触底加载更多
+	onReachBottom(()=>{
+		if (pageNum.value < pages.value) {
+			pageNum.value++;
+			getAddressList()
+		}
 	})
 
 	// 设置默认地址
@@ -138,9 +85,8 @@
 
 	// 编辑地址
 	const handleEdit = (index) => {
-		console.log('编辑地址:', index)
 		// 这里可以跳转到编辑页面
-		// uni.navigateTo({ url: '/pages/address/edit?id=' + addressList.value[index].id })
+		uni.navigateTo({ url: '/pages/address/edit?id=' + addressList.value[index].addressId })
 	}
 
 	// 删除地址
@@ -150,9 +96,20 @@
 			title: '确认删除',
 			content: '是否确认删除这个地址',
 			// showCancel:false,
-			success: function(res) {
+			success: async (res) => {
 				if (res.confirm) {
-					confirmDelete()
+					
+					let res = await delBook(addressList.value[index].addressId)
+					
+					if (res.code == 200) {
+						addressList.value.splice(currentIndex.value, 1)
+						currentIndex.value = -1
+						uni.showToast({
+							title:'删除成功',
+							icon:'success'
+						})
+					}
+					
 				} else if (res.cancel) {
 					console.log('用户点击取消');
 				}
@@ -160,17 +117,8 @@
 		});
 	}
 
-	// 确认删除
-	const confirmDelete = () => {
-		if (currentIndex.value >= 0) {
-			addressList.value.splice(currentIndex.value, 1)
-			currentIndex.value = -1
-		}
-	}
-
 	// 添加新地址
 	const handleAddAddress = () => {
-		console.log('添加新地址')
 		uni.navigateTo({
 			url: '/pages/address/edit'
 		})
@@ -183,17 +131,8 @@
 	
 	
 	
-	// 获取收益明细列表
-	const getAddressList = (isLoadMore = false) => {
-		if (loadState.value) return
-	
-		if (!isLoadMore) {
-			pageNum.value = 1
-			loadFinished.value = false
-			addressList.value = []
-		}
-		loadState.value = true
-		//商品状态(0 待上架  1 上架  2 下架 )
+	// 获取地址列表
+	const getAddressList = () => {
 		const params = {
 			pageNum: pageNum.value,
 			pageSize: pageSize.value
@@ -202,32 +141,17 @@
 		uni.showLoading({mask:true})
 		listBook(params).then(res => {
 			uni.hideLoading()
-			loadState.value = false
+			uni.stopPullDownRefresh()
+			
 			if (res.code === 200) {
 				const list = res.rows || []
-				const total = res.total || 0
-	
-	
-				if (isLoadMore) {
-					addressList.value = [...addressList.value, ...list]
-				} else {
-					addressList.value = list
-				}
-				recordTotal.value = total
+				addressList.value = pageNum.value == 1 ? list : [...addressList.value,...list]
+				pages.value = Math.ceil(res.total / pageSize.value) || 0
 				
-				if(currentStatus.value === "1"){
-					saleTotal.value = res.total || 0
-				}else{
-					downTotal.value = res.total || 0
-				}
+	
 				
-				// 判断是否还有更多数据
-				if (list.length < pageSize.value) {
-					loadFinished.value = true
-				}
 			}
 		}, err => {
-			loadState.value = false
 			uni.hideLoading()
 		})
 	}
@@ -244,8 +168,8 @@
 	}
 
 	.address-list {
-		flex: 1;
-		padding: 20rpx 30rpx;
+		
+		padding: 20rpx 30rpx 152rpx ;
 		box-sizing: border-box;
 	}
 	

+ 109 - 43
jd_logistics-app/pages/address/edit.vue

@@ -6,21 +6,27 @@
 
 			<view class="form-item">
 				<view class="item-label">
-					<input class="input-field" placeholder="姓名" placeholder-class="placeholder" v-model="formInfo" />
+					<input class="input-field" placeholder="姓名" placeholder-class="placeholder" maxlength="10"
+						v-model="formData.contactName" />
 				</view>
 				<view class="item-control">
-					<input class="input-field" placeholder="电话" placeholder-class="placeholder" v-model="formInfo" />
+					<input class="input-field" placeholder="电话" placeholder-class="placeholder" maxlength="11"
+						v-model="formData.contactPhone" />
 				</view>
 			</view>
-			<view class="form-item" @click="showTimePicker = true">
-				<text class="time-value placeholder">省市区</text>
-				<text class="time-value value">{{ selectedTime }}</text>
-				<u-icon class="arrow" name='arrow-right' size="18"></u-icon>
-			</view>
 
+			<picker mode="region" @change="changeAddress">
+				<view class="form-item form-items">
+					<text
+						class="time-value placeholder">{{ formData.provinceName ? formData.provinceName + formData.cityName + formData.countyName : '省市区' }}</text>
+					<text class="time-value value">{{ selectedTime }}</text>
+					<u-icon class="arrow" name='arrow-right' size="18"></u-icon>
+				</view>
+			</picker>
 			<view class="form-item">
 				<view class="item-control">
-					<input class="input-field" placeholder="详细地址" placeholder-class="placeholder" v-model="formInfo" />
+					<input class="input-field" placeholder="详细地址" placeholder-class="placeholder"
+						v-model="formData.detailedAddress" />
 				</view>
 			</view>
 
@@ -29,7 +35,7 @@
 				<!-- 设置默认和清空 -->
 				<view class="form-actions">
 					<view class="action-left">
-						<switch color="#007AFF" @change="onDefaultChange" />
+						<switch :checked="formData.defaultFlag == 1" color="#007AFF" @change="onDefaultChange" />
 						<text class="action-text">设为默认寄件地址</text>
 					</view>
 					<view class="action-right" @click="clearForm">
@@ -40,19 +46,19 @@
 		</view>
 
 
-		<view class="section-title">最近使用地址</view>
+		<view class="section-title" v-if="false">最近使用地址</view>
 
 		<!-- 最近使用地址 -->
-		<view class="recent-address">
+		<view class="recent-address" v-if="false">
 			<!-- 地址项1 -->
 			<view class="address-item" @tap="selectAddress(0)">
-				
-					<AddressInfo v-if="addressSend.id" :address="addressSend" />
+
+				<AddressInfo v-if="formData.id" :address="addressSend" />
 				<view class="address-info">
 					<view class="address-name">袁添昊 13344642161</view>
 					<view class="address-detail">湖北省荆州市新石南路747号</view>
 				</view>
-			<!-- 	<view class="address-select">
+				<!-- 	<view class="address-select">
 					
 				</view> -->
 			</view>
@@ -83,20 +89,31 @@
 		ref,
 		reactive
 	} from 'vue'
-	import {onLoad} from '@dcloudio/uni-app'
+	import {
+		onLoad
+	} from '@dcloudio/uni-app'
 	import AddressInfo from '@/components/AddressInfo.vue'
-	
+
+	import {
+		addBook,
+		updateBook,
+		getBook
+	} from '@/api/address.js'
+
 	const addType = ref('1') //1 表示从创建订单过来  2 表示编辑  3表示创建
-	
+
 	// 表单数据
 	const formData = reactive({
-		name: '',
-		phone: '',
-		region: [],
-		address: '',
-		isDefault: false
+		contactName: '', //姓名
+		contactPhone: '', //电话
+		provinceName: '', //省
+		cityName: '', //市
+		countyName: '', //区
+		addressId: null, //地址ID
+		detailedAddress: '', //详细地址
+		defaultFlag: 0 //是否默认 0非默认1默认
 	})
-	
+
 	// 最近地址列表
 	const recentAddresses = ref([{
 			name: '袁添昊',
@@ -109,10 +126,49 @@
 			address: '湖北省荆州市新石南路747号'
 		}
 	])
-	
-	onLoad((option)=>{
+
+	onLoad((option) => {
+		if (option.id) {
+			formData.addressId = option.id;
+			getAddress()
+			uni.setNavigationBarTitle({
+				title:'编辑地址'
+			})
+		}
 		
 	})
+	const getAddress = async () => {
+		let res = await getBook(formData.addressId);
+		console.log(res.data, formData);
+		let {
+			addressId,
+			contactName,
+			contactPhone,
+			countyName,
+			defaultFlag,
+			detailedAddress,
+			provinceName,
+			cityName
+		} = res.data;
+
+		// formData = {addressId,contactName,contactPhone,countyName,defaultFlag,detailedAddress,provinceName}
+		Object.assign(formData, {
+			addressId,
+			contactName,
+			contactPhone,
+			cityName,
+			countyName,
+			defaultFlag,
+			detailedAddress,
+			provinceName
+		});
+	}
+	// 选择地址
+	const changeAddress = (e) => {
+		formData.provinceName = e.detail.value[0]
+		formData.cityName = e.detail.value[1]
+		formData.countyName = e.detail.value[2]
+	}
 
 
 	// 省市区选择
@@ -122,46 +178,50 @@
 
 	// 默认地址切换
 	const onDefaultChange = (e) => {
-		formData.isDefault = e.detail.value
+		formData.defaultFlag = e.detail.value ? 1 : 0
 	}
 
 	// 清空表单
 	const clearForm = () => {
-		formData.name = ''
-		formData.phone = ''
-		formData.region = []
-		formData.address = ''
-		formData.isDefault = false
-	}
-
-	// 选择地址
-	const selectAddress = (index) => {
-		const address = recentAddresses.value[index]
-		formData.name = address.name
-		formData.phone = address.phone
-		formData.address = address.address
+		formData.contactName = ''
+		formData.contactPhone = ''
+		formData.provinceName = ''
+		formData.cityName = ''
+		formData.countyName = ''
+		formData.detailedAddress = ''
+		formData.defaultFlag = 0
 	}
 
 	// 确定提交
-	const onConfirm = () => {
+	const onConfirm = async () => {
 		// 这里可以添加表单验证
-		if (!formData.name || !formData.phone || !formData.address) {
+		if (!formData.contactName || !formData.contactPhone || !formData.detailedAddress) {
 			uni.showToast({
 				title: '请填写完整信息',
 				icon: 'none'
 			})
 			return
 		}
+		
+		if (!formData.provinceName) return uni.showToast({
+				title: '请选择省市区',
+				icon: 'none'
+			})
 
 		// 提交逻辑
+		let api = formData.addressId ? updateBook(formData) : addBook(formData)
+		let res = await api;
+
 		console.log('提交数据:', formData)
 		uni.showToast({
 			title: '提交成功',
 			icon: 'success'
 		})
 
-		// 返回上一页或执行其他操作
-		// uni.navigateBack()
+		setTimeout(() => {
+			// 返回上一页或执行其他操作
+			uni.navigateBack()
+		}, 800)
 	}
 </script>
 
@@ -266,6 +326,12 @@
 		}
 	}
 
+	.form-items {
+		&:last-child {
+			border-bottom: 1rpx solid #F1F3F8;
+		}
+	}
+
 	/* 寄件标识 */
 	.send-tag {
 		padding: 40rpx 30rpx 20rpx;