总金额:¥{{ totalPrice.toFixed(2) }}
- 生成订单
取消
确认支付
@@ -42,7 +41,7 @@
v-model="orderRemark"
type="textarea"
placeholder="请输入订单备注,如:不要香菜、少盐等"
- rows="3"
+ :rows="3"
/>
@@ -94,20 +93,33 @@ watch(showPayDialog, (val) => {
// 确认支付函数
const confirmPay = async () => {
try {
- const response = await axios.post('/api/alipay/pay', {
- totalAmount: totalPrice.value,
- items: cartItems.value
+ // 先调用已有的 createOrder 方法,生成订单
+ const orderId = await createOrder()
+ if (!orderId) {
+ // 如果订单创建失败,不继续支付
+ return
+ }
+
+ // 发起支付宝支付请求
+ const payResponse = await axios.post('/api/user/alipay/pay', {
+ outTradeNo: orderId,
+ subject: '顾客订单',
+ totalAmount: totalPrice.value.toFixed(2)
}, {
- responseType: 'blob' // 让后端返回的 HTML 可以被正确打开
+ responseType: 'blob'
})
- const blob = new Blob([response.data], { type: 'text/html' })
+ // 打开支付宝支付页
+ const blob = new Blob([payResponse.data], { type: 'text/html' })
const url = URL.createObjectURL(blob)
window.open(url, '_blank')
+
+ // 清空购物车、关闭弹窗
+ cartStore.clearCart()
showPayDialog.value = false
} catch (error) {
console.error('支付失败:', error)
- ElMessage.error('支付请求失败')
+ ElMessage.error('支付失败,请稍后再试')
}
}
@@ -135,18 +147,16 @@ const createOrder = async () => {
branchId: restaurantId,
orderRemarks: orderRemark.value,
orderMoney: totalPrice.value,
- orderStatus: 0
+ orderStatus: 1
},
items: orderItems
}
const response = await axios.post('/api/user/orders/create', orderRequest)//ok
+ const orderId = response.data.orderId
+ ElMessage.success('订单已生成,订单号:' + orderId)
- ElMessage.success('订单已生成,订单号:' + response.data.orderId)
-
- // 可选:清空购物车、关闭支付弹窗
- cartStore.clearCart()
- showPayDialog.value = false
+ return orderId
} catch (error) {
console.error('订单生成失败:', error)
ElMessage.error('生成订单失败')
diff --git a/src/views/user/SpendingChart.vue b/src/views/user/SpendingChart.vue
index 6c7f4b2..fce1331 100644
--- a/src/views/user/SpendingChart.vue
+++ b/src/views/user/SpendingChart.vue
@@ -4,6 +4,14 @@
花费图表
+
+ 导出订单Excel
+
+
{
// 当选择店铺时重新渲染图表
watch(selectedBranch, renderChart)
+
+const downloadExcel = async () => {
+ try {
+ const response = await axios.get(`/api/user/orders/export/${customerId}`, {
+ responseType: 'blob' // 一定要是 blob,否则文件下载不了
+ })
+
+ const blob = new Blob([response.data], {
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ })
+ const url = window.URL.createObjectURL(blob)
+ const link = document.createElement('a')
+ link.href = url
+ // 你可以自定义文件名,也可以从后端 header 获取 filename
+ link.setAttribute('download', `订单数据_${new Date().toISOString().slice(0,10)}.xlsx`)
+ document.body.appendChild(link)
+ link.click()
+ document.body.removeChild(link)
+ window.URL.revokeObjectURL(url)
+ } catch (error) {
+ ElMessage.error('导出失败,请稍后再试')
+ }
+}
+