16. 开发在线点餐功能(三)
我们点餐的数据存储在页面上,没有存到数据库,所以页面刷新会清空数据
所以点餐的过程中不能刷新页面,要一次性点餐完成,然后下单
订单模块SQL
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`content` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单内容',
`total` decimal(10,0) DEFAULT NULL COMMENT '总价',
`user_id` int(11) DEFAULT NULL COMMENT '点餐人',
`time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '点餐时间',
`status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单状态',
`order_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单信息';
前端下单的逻辑
// 下单逻辑
const save = () => {
if (data.orderList.length === 0) {
ElMessage.warning('请选择餐品')
return
}
let content = ''
data.orderList.forEach(item => {
content += item.name + 'x' + item.num + ','
})
content = content.substring(0 , content.length - 1) // 理论上来说 最后会多出一个逗号,所以我们去掉最后一个逗号即可 菜单的内容: 腊肠炒芹菜x1, 糖醋排骨x2
let orderData = { content: content, total: data.orderTotal, userId: data.user.id, status: '待出餐'}
request.post('/orders/add', orderData).then(res => {
if (res.code === '200') { // 下单成功
ElMessage.success('下单成功,请在我的订单里查看订单状态')
data.dialogShow = false
} else {
ElMessage.error(res.msg)
}
})
}
后台下单逻辑
public void add(Orders orders) {
// 设置唯一的订单号
String orderNo = IdUtil.fastSimpleUUID();
orders.setOrderNo(orderNo);
orders.setTime(DateUtil.now()); // 当前的年月日 时分秒
ordersMapper.insert(orders);
}
排查问题,页面不显示某个字段的数据怎么办?

- 看页面,页面的表格的字段写的对不对

- 看网络,看网络有没有返回数据

- 看后台,看看你的接口是怎么写的,看看你的sql有没有报错

最后解决问题:实体类缺少了字段

用户只能看到自己的订单
<select id="selectAll" resultType="com.example.entity.Orders">
select orders.*, user.name userName from orders
left join user on orders.user_id = user.id
<where>
<if test="userName != null">
and user.name like concat('%', #{userName}, '%')
</if>
<if test="userId != null">
and orders.user_id = #{userId}
</if>
</where>
order by orders.id desc
</select>
前端查询的时候做条件判断,只有用户登录查询的时候,才传userId数据
const load = () => {
request.get('/orders/selectPage', {
params: {
pageNum: data.pageNum,
pageSize: data.pageSize,
userName: data.userName,
userId: data.user.role === 'USER' ? data.user.id : null
}
}).then(res => {
data.tableData = res.data?.list || []
data.total = res.data.total
})
}