Vant踩坑之地址列表AddressList +地址编辑AddressEdit
在学校做实习项目的商城用到了,感觉网上搜到的都不是很全所以自己写一份,也方便自己后面使用。后端是我自己拿Nodejs写的接口,使用的时候大家根据自己需求改一下吧。我自己技术也不是很好,就是发出来给大家参考参考,欢迎指正。功能包括了添加地址,修改地址,删除地址,保存地址。vant组件我引入的是全部,按需引入请自行添加引入的代码Vant踩坑之地址列表AddressList +地址编辑AddressEd
·
在学校做实习项目的商城用到了,感觉网上搜到的都不是很全所以自己写一份,也方便自己后面使用。后端是我自己拿Nodejs写的接口,使用的时候大家根据自己需求改一下吧。
我自己技术也不是很好,就是发出来给大家参考参考,欢迎指正。
功能包括了添加地址,修改地址,删除地址,保存地址。
vant组件我引入的是全部,按需引入请自行添加引入的代码
Vant踩坑之地址列表AddressList +地址编辑AddressEdit
目录
地址列表
//地址列表
<template>
<div>
<van-nav-bar
title="确认收货地址"
placeholder
fixed
left-arrow
@click-left="goBack"
/>
<van-address-list
v-model="chosenAddressId"
:list="list"
default-tag-text="默认"
@add="onAdd"
@edit="onEdit"
/>
</div>
</template>
<script>
export default {
data() {
return {
uname: sessionStorage.getItem("uname"), //获取用户名
chosenAddressId: "1",
list: [],
};
},
methods: {
goBack() {
this.$router.go(-1);
},
onAdd() {
this.$router.push("/address");
},
//点击编辑传地址id给地址编辑,以便地址回显
onEdit(item, index) {
let id = this.list[index].id;
this.$router.push(`address?id=${id}`);
},
},
mounted() {
//发送请求获取地址
this.axios.post("/address?uname=" + this.uname).then((res) => {
this.list = res.data.results;
//选中地址列表的第一个地址
if (this.list.length != 0) {
this.chosenAddressId = this.list[0].id;
}
console.log(this.list);
});
},
};
</script>
地址编辑
需要在控制台引入areaList
npm i @vant/area-data -D
//地址编辑
<template>
<div>
<van-nav-bar
title="新增地址"
placeholder
fixed
left-arrow
@click-left="goBack"
/>
<van-address-edit
:area-list="areaList"
show-postal
show-delete
show-set-default
show-search-result
:area-columns-placeholder="['请选择', '请选择', '请选择']"
@save="onSave"
@delete="onDelete"
:address-info="{
name: info.name,
tel: info.tel,
addressDetail: info.addressDetail,
areaCode: info.areaCode,
postalCode: info.postalCode,
isDefault: info.isDefault,
}"
/>
</div>
</template>
<script>
import { areaList } from "@vant/area-data";
export default {
data() {
return {
areaList,
searchResult: [],
info: [],
uname: sessionStorage.getItem("uname"),
};
},
methods: {
goBack() {
this.$router.go(-1);
},
onSave(content) {
this.isDefault = content.isDefault ? "1" : "0"; //数据库该项设置为0,1,如不需修改可删除该行
//如果地址id不存在,则连接新增地址接口,存在则连接修改地址接口
if (!this.$route.query.id) {
//发送请求连接新增地址接口
this.axios
.post(
"/addAddress",
`uname=${this.uname}&name=${content.name}&phone=${content.tel}&province=${content.province}&city=${content.city}&county=${content.county}&detail_addr=${content.addressDetail}&group_message=${this.isDefault }&areaCode=${content.areaCode}&postalCode=${content.postalCode}`
)
.then((res) => {
console.log(res);
});
} else {
//发送请求连接修改地址接口
this.axios
.post(
"/updateAddress",
`id=${this.$route.query.id}&name=${content.name}&phone=${content.tel}&province=${content.province}&city=${content.city}&county=${content.county}&detail_addr=${content.addressDetail}&group_message=${this.group_message}&areaCode=${content.areaCode}&postalCode=${content.postalCode}`
)
.then((res) => {
console.log(res);
});
}
this.$toast.success("保存成功");
//返回地址列表页,强制刷新
this.$router.replace("/addresslist");
location.reload();
},
onDelete() {
let id = this.$route.query.id;
//发送请求连接删除地址接口
this.axios.post("/delAddress?id=" + id).then((res) => {
console.log(res.data);
});
this.$toast.success("删除成功");
this.$router.go(-1);
},
},
mounted() {
//获取地址列表传的地址id
let id = this.$route.query.id;
//地址id存在则发请求回显地址
if (id) {
//发送请求获取地址内容
this.axios.post("/addressId?id=" + id).then((res) => {
//通过address-info回显地址
this.info = res.data.results;
this.info.isDefault = this.info.isDefault == 1 ? true : false;
console.log(this.info.isDefault);
console.log(this.info);
});
}
},
};
</script>
JS接口
地址列表显示的时候需要拼接省市区详细地址,重命名为address,这样地址列表才能显示 concat(province,city,county,addressDetail) AS address
//查看全部地址的接口
server.post('/address', (req, res) => {
//获取地址栏中的uname参数
let uname = req.query.uname
// SQL查询
let sql =
'SELECT id,user_id,name,isDefault,tel,province,city,county,addressDetail,concat(province,city,county,addressDetail) AS address FROM `xz_receiver_address` WHERE user_id=? ORDER BY `xz_receiver_address`.`isDefault` DESC'
// 执行SQL查询
pool.query(sql, [uname], (error, results) => {
if (error) throw error
// 返回数据到客户端
res.send({ message: 'ok', code: 200, results: results })
})
})
//按序号删除地址的接口
server.post('/delAddress', (req, res) => {
//获取地址栏中的uname参数
let id = req.query.id
// SQL查询
let sql = 'DELETE FROM `xz_receiver_address`WHERE id =?'
// 执行SQL查询
pool.query(sql, [id], (error, results) => {
if (error) throw error
// 返回数据到客户端
res.send({ message: 'ok', code: 200, results: results[0] })
})
})
//按序号查看地址的接口
server.post('/addressId', (req, res) => {
//获取地址栏中的uname参数
let id = req.query.id
// SQL查询
let sql = 'SELECT * FROM `xz_receiver_address`WHERE id =?'
// 执行SQL查询
pool.query(sql, [id], (error, results) => {
if (error) throw error
// 返回数据到客户端
res.send({ message: 'ok', code: 200, results: results[0] })
})
})
// 修改地址数据的接口
server.post('/updateAddress', (req, res) => {
//获取地址栏中的id参数
let id = parseInt(req.body.id)
let name = req.body.name
let phone = req.body.phone
let province = req.body.province
let city = req.body.city
let county = req.body.county
let detail_addr = req.body.detail_addr
let group_message = req.body.group_message
let areaCode = req.body.areaCode
let postalCode = req.body.postalCode
// SQL查询
let sql =
'UPDATE xz_receiver_address SET name =?, province =?, city =?, county =?, addressDetail =?, tel =?, postalCode =?, areaCode =?, isDefault =? WHERE id =?'
// 执行SQL查询
pool.query(
sql,
[
name,
province,
city,
county,
detail_addr,
phone,
postalCode,
areaCode,
group_message,
id,
],
(error, results) => {
if (error) throw error
// 返回数据到客户端
if (results.length == 0) {
//登录失败
res.send({ message: 'login failed', code: 201 })
} else {
//登录成功
res.send({ message: 'ok', code: 200, result: results })
}
},
)
})
// 添加地址数据的接口
server.post('/addAddress', (req, res) => {
//获取地址栏中的id参数
let uname = req.body.uname
let name = req.body.name
let phone = req.body.phone
let province = req.body.province
let city = req.body.city
let county = req.body.county
let detail_addr = req.body.detail_addr
let group_message = req.body.group_message
let areaCode = req.body.areaCode
let postalCode = req.body.postalCode
// SQL查询
let sql =
'INSERT `xz_receiver_address` (`user_id`, `name`, `province`, `city`, `county`, `addressDetail`, `tel`, `postalCode`, `areaCode`, `isDefault`) VALUES (?,?,?,?,?,?,?,?,?,?) '
// 执行SQL查询
pool.query(
sql,
[
uname,
name,
province,
city,
county,
detail_addr,
phone,
postalCode,
areaCode,
group_message,
],
(error, results) => {
if (error) throw error
// 返回数据到客户端
if (results.length == 0) {
//请求失败
res.send({ message: 'get failed', code: 201 })
} else {
//请求成功
res.send({ message: 'ok', code: 200, result: results })
console.log(phone)
}
},
)
})
数据库
CREATE TABLE `xz_receiver_address` (
`id` int(11) NOT NULL,
`user_id` varchar(100) DEFAULT NULL,
`name` varchar(16) DEFAULT NULL,
`province` varchar(16) DEFAULT NULL,
`city` varchar(16) DEFAULT NULL,
`county` varchar(16) DEFAULT NULL,
`addressDetail` varchar(128) DEFAULT NULL,
`tel` varchar(32) NOT NULL,
`postalCode` char(6) DEFAULT NULL,
`areaCode` varchar(16) DEFAULT NULL,
`isDefault` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
---------------默认地址的问题----------------
这个是你在输入地址时选中就会添加为默认,
但他不会判断其他地址中有没有默认地址,然后修改,
这个大家自己解决一下吧
更多推荐
已为社区贡献1条内容
所有评论(0)