You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 lines
14 KiB

{"ast":null,"code":"import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"order-list\"\n};\nconst _hoisted_2 = {\n class: \"pagination\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_card, null, {\n header: _withCtx(() => _cache[2] || (_cache[2] = [_createElementVNode(\"div\", {\n class: \"card-header\"\n }, [_createElementVNode(\"span\", null, \"我的订单\")], -1 /* HOISTED */)])),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $setup.orderList,\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"orderNo\",\n label: \"订单编号\"\n }), _createVNode(_component_el_table_column, {\n prop: \"goodsName\",\n label: \"商品名称\"\n }), _createVNode(_component_el_table_column, {\n prop: \"goodsQuantity\",\n label: \"数量\"\n }), _createVNode(_component_el_table_column, {\n prop: \"startLocation\",\n label: \"起始地\"\n }), _createVNode(_component_el_table_column, {\n prop: \"endLocation\",\n label: \"目的地\"\n }), _createVNode(_component_el_table_column, {\n prop: \"transportFee\",\n label: \"运费\"\n }, {\n default: _withCtx(({\n row\n }) => [_createTextVNode(\" ¥\" + _toDisplayString(row.transportFee), 1 /* TEXT */)]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_table_column, {\n prop: \"status\",\n label: \"状态\"\n }, {\n default: _withCtx(({\n row\n }) => [_createVNode(_component_el_tag, {\n type: $setup.getStatusType(row.status)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($setup.getStatusText(row.status)), 1 /* TEXT */)]),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"type\"])]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_table_column, {\n prop: \"createTime\",\n label: \"创建时间\"\n }), _createVNode(_component_el_table_column, {\n label: \"操作\",\n width: \"200\"\n }, {\n default: _withCtx(({\n row\n }) => [_createVNode(_component_el_button, {\n type: \"primary\",\n link: \"\",\n onClick: $event => $setup.handleViewDetail(row)\n }, {\n default: _withCtx(() => _cache[3] || (_cache[3] = [_createTextVNode(\"查看详情\")])),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"]), row.status === 0 ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"danger\",\n link: \"\",\n onClick: $event => $setup.handleCancel(row)\n }, {\n default: _withCtx(() => _cache[4] || (_cache[4] = [_createTextVNode(\"取消订单\")])),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"])) : _createCommentVNode(\"v-if\", true)]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"data\"])), [[_directive_loading, $setup.loading]]), _createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_el_pagination, {\n \"current-page\": $setup.currentPage,\n \"onUpdate:currentPage\": _cache[0] || (_cache[0] = $event => $setup.currentPage = $event),\n \"page-size\": $setup.pageSize,\n \"onUpdate:pageSize\": _cache[1] || (_cache[1] = $event => $setup.pageSize = $event),\n total: $setup.total,\n \"page-sizes\": [10, 20, 50, 100],\n layout: \"total, sizes, prev, pager, next\",\n onSizeChange: $setup.handleSizeChange,\n onCurrentChange: $setup.handleCurrentChange\n }, null, 8 /* PROPS */, [\"current-page\", \"page-size\", \"total\"])])]),\n _: 1 /* STABLE */\n })]);\n}","map":{"version":3,"names":["class","_createElementBlock","_hoisted_1","_createVNode","_component_el_card","header","_withCtx","_cache","_createElementVNode","default","_createBlock","_component_el_table","data","$setup","orderList","style","_component_el_table_column","prop","label","row","_createTextVNode","_toDisplayString","transportFee","_","_component_el_tag","type","getStatusType","status","getStatusText","width","_component_el_button","link","onClick","$event","handleViewDetail","key","handleCancel","_createCommentVNode","loading","_hoisted_2","_component_el_pagination","currentPage","pageSize","total","layout","onSizeChange","handleSizeChange","onCurrentChange","handleCurrentChange"],"sources":["D:\\language\\VScode\\Front-end logistics\\src\\views\\order\\OrderList.vue"],"sourcesContent":["<template>\r\n <div class=\"order-list\">\r\n <el-card>\r\n <template #header>\r\n <div class=\"card-header\">\r\n <span>我的订单</span>\r\n </div>\r\n </template>\r\n \r\n <el-table\r\n v-loading=\"loading\"\r\n :data=\"orderList\"\r\n style=\"width: 100%\"\r\n >\r\n <el-table-column prop=\"orderNo\" label=\"订单编号\" />\r\n <el-table-column prop=\"goodsName\" label=\"商品名称\" />\r\n <el-table-column prop=\"goodsQuantity\" label=\"数量\" />\r\n <el-table-column prop=\"startLocation\" label=\"起始地\" />\r\n <el-table-column prop=\"endLocation\" label=\"目的地\" />\r\n <el-table-column prop=\"transportFee\" label=\"运费\">\r\n <template #default=\"{ row }\">\r\n ¥{{ row.transportFee }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"status\" label=\"状态\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getStatusType(row.status)\">\r\n {{ getStatusText(row.status) }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"createTime\" label=\"创建时间\" />\r\n <el-table-column label=\"操作\" width=\"200\">\r\n <template #default=\"{ row }\">\r\n <el-button \r\n type=\"primary\" \r\n link\r\n @click=\"handleViewDetail(row)\"\r\n >查看详情</el-button>\r\n <el-button \r\n v-if=\"row.status === 0\"\r\n type=\"danger\" \r\n link\r\n @click=\"handleCancel(row)\"\r\n >取消订单</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n \r\n <div class=\"pagination\">\r\n <el-pagination\r\n v-model:current-page=\"currentPage\"\r\n v-model:page-size=\"pageSize\"\r\n :total=\"total\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n layout=\"total, sizes, prev, pager, next\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n />\r\n </div>\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted } from 'vue'\r\nimport { useRouter } from 'vue-router'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\nimport { getMyOrders, cancelOrder } from '@/api/order'\r\n\r\nconst router = useRouter()\r\nconst loading = ref(false)\r\nconst orderList = ref([])\r\nconst currentPage = ref(1)\r\nconst pageSize = ref(10)\r\nconst total = ref(0)\r\n\r\nconst getStatusText = (status) => {\r\n // 确保 status 是数字类型\r\n const orderStatus = Number(status)\r\n \r\n switch (orderStatus) {\r\n case 0:\r\n return '待处理'\r\n case 1:\r\n return '已接单'\r\n case 2:\r\n return '运输中'\r\n case 3:\r\n return '已完成'\r\n case 4:\r\n return '已取消'\r\n default:\r\n return '未知状态'\r\n }\r\n}\r\n\r\nconst getStatusType = (status) => {\r\n // 确保 status 是数字类型\r\n const orderStatus = Number(status)\r\n \r\n switch (orderStatus) {\r\n case 0:\r\n return 'info'\r\n case 1:\r\n return 'warning'\r\n case 2:\r\n return 'warning'\r\n case 3:\r\n return 'success'\r\n case 4:\r\n return 'danger'\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nconst loadOrders = async () => {\r\n loading.value = true\r\n try {\r\n const res = await getMyOrders({\r\n pageNum: currentPage.value,\r\n pageSize: pageSize.value\r\n })\r\n \r\n if (res.code === 200) {\r\n // 直接使用后端返回的数据,包括 status\r\n orderList.value = res.data.records\r\n total.value = res.data.total\r\n pageSize.value = res.data.pageSize\r\n currentPage.value = res.data.pageNum\r\n } else {\r\n throw new Error(res.message || '获取订单列表失败')\r\n }\r\n } catch (error) {\r\n console.error('加载订单失败:', error)\r\n ElMessage.error(error.message || '加载订单失败,请重试')\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleSizeChange = (val) => {\r\n pageSize.value = val\r\n loadOrders()\r\n}\r\n\r\nconst handleCurrentChange = (val) => {\r\n currentPage.value = val\r\n loadOrders()\r\n}\r\n\r\nconst handleViewDetail = (row) => {\r\n router.push(`/orders/${row.id}`)\r\n}\r\n\r\nconst handleCancel = async (row) => {\r\n try {\r\n await ElMessageBox.confirm('确定要取消该订单吗?', '提示', {\r\n type: 'warning',\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消'\r\n })\r\n \r\n loading.value = true\r\n const res = await cancelOrder(row.id)\r\n \r\n if (res.code === 200) {\r\n ElMessage.success('订单已取消')\r\n // 刷新订单列表,获取最新状态\r\n await loadOrders()\r\n } else {\r\n throw new Error(res.message || '取消订单失败')\r\n }\r\n } catch (error) {\r\n if (error !== 'cancel') { // 用户点击取消按钮时不显示错误\r\n console.error('取消订单失败:', error)\r\n if (error.response?.status === 401) {\r\n ElMessage.error('登录已过期,请重新登录')\r\n router.push('/login')\r\n } else if (error.response?.status === 403) {\r\n ElMessage.error('您没有权限执行此操作')\r\n } else {\r\n ElMessage.error(error.message || '取消订单失败,请重试')\r\n }\r\n }\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n loadOrders()\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.order-list {\r\n min-height: 100%;\r\n}\r\n\r\n.card-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n\r\n.pagination {\r\n margin-top: 20px;\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n</style> "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}