找回密码
 立即注册
查看: 2|回复: 0

选项卡切换/确定要取消订单吗?获取对应的字典数据/前端获取当前用户的信息

[复制链接]

297

主题

6

精华

301

金币

技术维护QQ:515138

积分
645
发表于 昨天 10:27 | 显示全部楼层 |阅读模式
选项卡切换/确定要取消订单吗?获取对应的字典数据/前端获取当前用户的信息

  1. <template>
  2.   <!-- 页面容器 -->
  3.   <div class="orderList-page">
  4.     <el-tabs v-model="activeTab" @tab-change="handleTableChange">
  5.       <el-tab-pane label="全部订单" name="全部订单"/>
  6.       <el-tab-pane label="待入住" name="0"/>
  7.       <el-tab-pane label="已入住" name="1"/>
  8.       <el-tab-pane label="已完成" name="2"/>
  9.       <el-tab-pane label="已取消" name="3"/>
  10.     </el-tabs>
  11.     <!-- 订单列表区域 -->
  12.     <div>
  13.       <el-card v-for="order in orderList" :key="order.orderId" class="order-card">
  14.         <!-- 订单头部信息 -->
  15.         <div class="order-header">
  16.           <!-- 订单号 -->
  17.           <div class="order-number">订单号: {{ order.orderId }}</div>
  18.           <!-- 订单状态 -->
  19.           <div class="order-status" :class="order.status">
  20.             <dict-tag :options="order_status" :value="order.status"/>
  21.           </div>
  22.         </div>
  23.         <!-- 订单内容信息 -->
  24.         <div class="order-content">
  25.           <!-- 房间信息 -->
  26.           <div class="room-info">
  27.             <!-- 房间类型图片 -->
  28.             <image-preview :src="order.image" class="room-image"/>
  29.             <!-- 房间详情 -->
  30.             <div class="room-details">
  31.               <h3>{{ order.name }}</h3>
  32.               <p>{{ order.checkInDate }} 至 {{ order.checkOutDate }}</p>
  33.               <p>{{ order.nights }}晚 | {{ order.rooms }}间房</p>
  34.             </div>
  35.           </div>
  36.           <!-- 订单价格 -->
  37.           <div class="order-price">
  38.             <div class="price-label">总价</div>
  39.             <div class="price">¥{{ order.totalPrice }}</div>
  40.           </div>
  41.         </div>
  42.         <!-- 订单底部操作区域 -->
  43.         <div class="order-footer">
  44.           <el-button v-if="order.status === 0"
  45.                      type="primary"
  46.                      @click="cancelToOrder(order.orderId)">
  47.             取消订单
  48.           </el-button>
  49.           <el-button @click="toDetail(order.orderId)">查看详情</el-button>
  50.         </div>
  51.       </el-card>
  52.     </div>
  53.     <!-- 分页组件 -->
  54.     <div class="pagination-container">
  55.       <pagination
  56.           v-show="total>0"
  57.           :total="total"
  58.           v-model:page="query.pageNum"
  59.           v-model:limit="query.pageSize"
  60.           @pagination="selectOrderList"
  61.       />
  62.     </div>
  63.     <!-- 空状态提示 -->
  64.     <el-empty v-if="orderList.length === 0" description="暂无订单"/>
  65.   </div>
  66. </template>
  67. import {ref} from 'vue'
  68. import useUserStore from "@/store/modules/user.js";
  69. import {cancelOrder, listOrder} from "@/api/hotel/order.js";
  70. import {ElMessage, ElMessageBox} from "element-plus";
  71. //基础API路径
  72. const baseUrl = import.meta.env.VITE_APP_BASE_API
  73. //当前组件实例
  74. const {proxy} = getCurrentInstance()
  75. //获取对应的字段数据
  76. const {order_status} = proxy.useDict('order_status')
  77. //当前激活的标签页, 默认为全部订单
  78. const activeTab = ref('全部订单')
  79. //获取当前用户的信息
  80. const loginUser = useUserStore()
  81. //查询参数
  82. const query = ref({
  83.   pageNum: 1,
  84.   pageSize: 10,
  85.   categoryId: null,
  86.   status: null,
  87.   userId: loginUser.id,
  88.   userName: null
  89. })
  90. //订单列表数据
  91. const orderList = ref([])
  92. //数据总数
  93. const total = ref(0)
  94. //路由实例
  95. const router = useRouter()
  96. //打开详情页面
  97. const toDetail = (orderId) => {
  98.   //跳转到订单详情页面
  99.   router.push(`/index/order/${orderId}`)
  100. }
  101. //取消订单
  102. const cancelToOrder = (orderId) => {
  103.   ElMessageBox.confirm(
  104.       '确定要取消订单吗?',
  105.       '提示',
  106.       {
  107.         confirmButtonText: '确定',
  108.         cancelButtonText: '算了, 不取消',
  109.         type: 'warning',
  110.       }
  111.   )
  112.       .then(() => {
  113.         cancelOrder(orderId).then(res => {
  114.           selectOrderList()
  115.           ElMessage.success("订单取消成功, 已退款至账户余额")
  116.         })
  117.       })
  118.       .catch(() => {
  119.       })
  120. }
  121. //处理标签页切换
  122. const handleTableChange = (tab) => {
  123.   console.log(tab)
  124.   if (tab === '全部订单') {
  125.     query.value.status = null
  126.   } else {
  127.     query.value.status = tab
  128.   }
  129.   //重新查询订单列表
  130.   selectOrderList()
  131. }
  132. //查询订单列表数据
  133. const selectOrderList = () => {
  134.   //调用API查询数据
  135.   listOrder(query.value).then(res => {
  136.     total.value = res.total
  137.     orderList.value = res.rows
  138.   })
  139. }
  140. //组件挂载时执行
  141. onMounted(() => {
  142.   //获取订单列表
  143.   selectOrderList()
  144. })
复制代码




上一篇:2,element-plus的loading效果和消息提示
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2026-5-28 02:07

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表