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
33 KiB

{"ast":null,"code":"import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createTextVNode as _createTextVNode, toDisplayString as _toDisplayString, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"order-management\"\n};\nconst _hoisted_2 = {\n class: \"card-header\"\n};\nconst _hoisted_3 = {\n class: \"pagination\"\n};\nconst _hoisted_4 = {\n class: \"order-info\"\n};\nconst _hoisted_5 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_date_picker = _resolveComponent(\"el-date-picker\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\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 _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_card, null, {\n header: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_cache[11] || (_cache[11] = _createElementVNode(\"span\", null, \"订单管理\", -1 /* HOISTED */)), _createVNode(_component_el_form, {\n inline: true,\n model: $setup.searchForm,\n class: \"search-form\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $setup.searchForm.orderNo,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $setup.searchForm.orderNo = $event),\n placeholder: \"订单号\",\n clearable: \"\",\n onClear: $setup.handleSearch\n }, null, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_form_item, null, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $setup.searchForm.customerName,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $setup.searchForm.customerName = $event),\n placeholder: \"客户名称\",\n clearable: \"\",\n onClear: $setup.handleSearch\n }, null, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_form_item, null, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $setup.searchForm.status,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $setup.searchForm.status = $event),\n placeholder: \"订单状态\",\n clearable: \"\",\n onClear: $setup.handleSearch\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.availableSearchStatusOptions, (text, value) => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: value,\n label: text,\n value: Number(value)\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_form_item, null, {\n default: _withCtx(() => [_createVNode(_component_el_date_picker, {\n modelValue: $setup.dateRange,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $setup.dateRange = $event),\n type: \"datetimerange\",\n \"range-separator\": \"至\",\n \"start-placeholder\": \"开始时间\",\n \"end-placeholder\": \"结束时间\",\n \"value-format\": \"YYYY-MM-DD HH:mm:ss\",\n onChange: $setup.handleDateChange\n }, null, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_form_item, null, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $setup.handleSearch\n }, {\n default: _withCtx(() => _cache[9] || (_cache[9] = [_createTextVNode(\"搜索\")])),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_button, {\n onClick: $setup.resetSearch\n }, {\n default: _withCtx(() => _cache[10] || (_cache[10] = [_createTextVNode(\"重置\")])),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"model\"])])]),\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: \"customerId\",\n label: \"客户ID\"\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?.toFixed(2)), 1 /* TEXT */)]),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_table_column, {\n prop: \"status\",\n label: \"状态\"\n }, {\n default: _withCtx(({\n row\n }) => [_createTextVNode(_toDisplayString($setup.getStatusText(row.status)), 1 /* TEXT */)]),\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: \"text\",\n size: \"small\",\n onClick: $event => $setup.viewDetail(row.id)\n }, {\n default: _withCtx(() => _cache[12] || (_cache[12] = [_createTextVNode(\" 查看详情 \")])),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"text\",\n size: \"small\",\n onClick: $event => $setup.handleUpdateStatus(row),\n disabled: !$setup.canUpdateStatus(row.status)\n }, {\n default: _withCtx(() => _cache[13] || (_cache[13] = [_createTextVNode(\" 修改状态 \")])),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\", \"disabled\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"data\"])), [[_directive_loading, $setup.loading]]), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_pagination, {\n \"current-page\": $setup.currentPage,\n \"onUpdate:currentPage\": _cache[4] || (_cache[4] = $event => $setup.currentPage = $event),\n \"page-size\": $setup.pageSize,\n \"onUpdate:pageSize\": _cache[5] || (_cache[5] = $event => $setup.pageSize = $event),\n total: $setup.total,\n \"page-sizes\": [10, 20, 50],\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 }), _createCommentVNode(\" 修改状态对话框 \"), _createVNode(_component_el_dialog, {\n modelValue: $setup.statusDialogVisible,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $setup.statusDialogVisible = $event),\n title: \"修改订单状态\",\n width: \"50%\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_5, [_createVNode(_component_el_button, {\n onClick: _cache[7] || (_cache[7] = $event => $setup.statusDialogVisible = false)\n }, {\n default: _withCtx(() => _cache[22] || (_cache[22] = [_createTextVNode(\"取消\")])),\n _: 1 /* STABLE */\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $setup.confirmUpdateStatus,\n loading: $setup.updating\n }, {\n default: _withCtx(() => _cache[23] || (_cache[23] = [_createTextVNode(\" 确认修改 \")])),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"loading\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"p\", null, [_cache[14] || (_cache[14] = _createElementVNode(\"strong\", null, \"订单编号:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.currentOrder?.orderNo), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[15] || (_cache[15] = _createElementVNode(\"strong\", null, \"客户ID:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.currentOrder?.customerId), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[16] || (_cache[16] = _createElementVNode(\"strong\", null, \"商品名称:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.currentOrder?.goodsName), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[17] || (_cache[17] = _createElementVNode(\"strong\", null, \"商品数量:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.currentOrder?.goodsQuantity), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[18] || (_cache[18] = _createElementVNode(\"strong\", null, \"起始地:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.currentOrder?.startLocation), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[19] || (_cache[19] = _createElementVNode(\"strong\", null, \"目的地:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.currentOrder?.endLocation), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[20] || (_cache[20] = _createElementVNode(\"strong\", null, \"运费:\", -1 /* HOISTED */)), _createTextVNode(\"¥\" + _toDisplayString($setup.currentOrder?.transportFee), 1 /* TEXT */)]), _createElementVNode(\"p\", null, [_cache[21] || (_cache[21] = _createElementVNode(\"strong\", null, \"当前状态:\", -1 /* HOISTED */)), _createTextVNode(_toDisplayString($setup.getStatusText($setup.currentOrder?.status)), 1 /* TEXT */)])]), _createVNode(_component_el_form, {\n model: $setup.statusForm,\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: \"新状态\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $setup.statusForm.status,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $setup.statusForm.status = $event)\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.statusOptions, (text, value) => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: value,\n label: text,\n value: Number(value),\n disabled: Number(value) === $setup.currentOrder?.status\n }, null, 8 /* PROPS */, [\"label\", \"value\", \"disabled\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"model\"])]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"])]);\n}","map":{"version":3,"names":["class","_createElementBlock","_hoisted_1","_createVNode","_component_el_card","header","_withCtx","_createElementVNode","_hoisted_2","_component_el_form","inline","model","$setup","searchForm","default","_component_el_form_item","_component_el_input","modelValue","orderNo","_cache","$event","placeholder","clearable","onClear","handleSearch","_","customerName","_component_el_select","status","_Fragment","_renderList","availableSearchStatusOptions","text","value","_createBlock","_component_el_option","key","label","Number","_component_el_date_picker","dateRange","type","onChange","handleDateChange","_component_el_button","onClick","_createTextVNode","resetSearch","_component_el_table","data","orderList","style","_component_el_table_column","prop","row","_toDisplayString","transportFee","toFixed","getStatusText","width","size","viewDetail","id","handleUpdateStatus","disabled","canUpdateStatus","loading","_hoisted_3","_component_el_pagination","currentPage","pageSize","total","layout","onSizeChange","handleSizeChange","onCurrentChange","handleCurrentChange","_createCommentVNode","_component_el_dialog","statusDialogVisible","title","footer","_hoisted_5","confirmUpdateStatus","updating","_hoisted_4","currentOrder","customerId","goodsName","goodsQuantity","startLocation","endLocation","statusForm","statusOptions"],"sources":["D:\\language\\VScode\\Front-end logistics\\src\\views\\admin\\OrderManagement.vue"],"sourcesContent":["<template>\n <div class=\"order-management\">\n <el-card>\n <template #header>\n <div class=\"card-header\">\n <span>订单管理</span>\n <el-form :inline=\"true\" :model=\"searchForm\" class=\"search-form\">\n <el-form-item>\n <el-input\n v-model=\"searchForm.orderNo\"\n placeholder=\"订单号\"\n clearable\n @clear=\"handleSearch\"\n />\n </el-form-item>\n \n <el-form-item>\n <el-input\n v-model=\"searchForm.customerName\"\n placeholder=\"客户名称\"\n clearable\n @clear=\"handleSearch\"\n />\n </el-form-item>\n \n <el-form-item>\n <el-select \n v-model=\"searchForm.status\" \n placeholder=\"订单状态\"\n clearable\n @clear=\"handleSearch\"\n >\n <el-option \n v-for=\"(text, value) in availableSearchStatusOptions\"\n :key=\"value\"\n :label=\"text\"\n :value=\"Number(value)\"\n />\n </el-select>\n </el-form-item>\n \n <el-form-item>\n <el-date-picker\n v-model=\"dateRange\"\n type=\"datetimerange\"\n range-separator=\"至\"\n start-placeholder=\"开始时间\"\n end-placeholder=\"结束时间\"\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n @change=\"handleDateChange\"\n />\n </el-form-item>\n \n <el-form-item>\n <el-button type=\"primary\" @click=\"handleSearch\">搜索</el-button>\n <el-button @click=\"resetSearch\">重置</el-button>\n </el-form-item>\n </el-form>\n </div>\n </template>\n \n <el-table\n v-loading=\"loading\"\n :data=\"orderList\"\n style=\"width: 100%\"\n >\n <el-table-column prop=\"orderNo\" label=\"订单编号\" />\n <el-table-column prop=\"customerId\" label=\"客户ID\" />\n <el-table-column prop=\"goodsName\" label=\"商品名称\" />\n <el-table-column prop=\"goodsQuantity\" label=\"数量\" />\n <el-table-column prop=\"startLocation\" label=\"起始地\" />\n <el-table-column prop=\"endLocation\" label=\"目的地\" />\n <el-table-column prop=\"transportFee\" label=\"运费\">\n <template #default=\"{ row }\">\n ¥{{ row.transportFee?.toFixed(2) }}\n </template>\n </el-table-column>\n <el-table-column prop=\"status\" label=\"状态\">\n <template #default=\"{ row }\">\n {{ getStatusText(row.status) }}\n </template>\n </el-table-column>\n <el-table-column prop=\"createTime\" label=\"创建时间\" />\n <el-table-column label=\"操作\" width=\"200\">\n <template #default=\"{ row }\">\n <el-button \n type=\"text\"\n size=\"small\"\n @click=\"viewDetail(row.id)\"\n >\n 查看详情\n </el-button>\n <el-button \n type=\"text\"\n size=\"small\"\n @click=\"handleUpdateStatus(row)\"\n :disabled=\"!canUpdateStatus(row.status)\"\n >\n 修改状态\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n \n <div class=\"pagination\">\n <el-pagination\n v-model:current-page=\"currentPage\"\n v-model:page-size=\"pageSize\"\n :total=\"total\"\n :page-sizes=\"[10, 20, 50]\"\n layout=\"total, sizes, prev, pager, next\"\n @size-change=\"handleSizeChange\"\n @current-change=\"handleCurrentChange\"\n />\n </div>\n </el-card>\n\n <!-- 修改状态对话框 -->\n <el-dialog\n v-model=\"statusDialogVisible\"\n title=\"修改订单状态\"\n width=\"50%\"\n >\n <div class=\"order-info\">\n <p><strong>订单编号:</strong>{{ currentOrder?.orderNo }}</p>\n <p><strong>客户ID:</strong>{{ currentOrder?.customerId }}</p>\n <p><strong>商品名称:</strong>{{ currentOrder?.goodsName }}</p>\n <p><strong>商品数量:</strong>{{ currentOrder?.goodsQuantity }}</p>\n <p><strong>起始地:</strong>{{ currentOrder?.startLocation }}</p>\n <p><strong>目的地:</strong>{{ currentOrder?.endLocation }}</p>\n <p><strong>运费:</strong>¥{{ currentOrder?.transportFee }}</p>\n <p><strong>当前状态:</strong>{{ getStatusText(currentOrder?.status) }}</p>\n </div>\n <el-form :model=\"statusForm\" label-width=\"100px\">\n <el-form-item label=\"新状态\">\n <el-select v-model=\"statusForm.status\">\n <el-option\n v-for=\"(text, value) in statusOptions\"\n :key=\"value\"\n :label=\"text\"\n :value=\"Number(value)\"\n :disabled=\"Number(value) === currentOrder?.status\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"statusDialogVisible = false\">取消</el-button>\n <el-button type=\"primary\" @click=\"confirmUpdateStatus\" :loading=\"updating\">\n 确认修改\n </el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, computed } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useStore } from 'vuex'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getAllOrders, updateOrderStatus } from '@/api/order'\n\nconst router = useRouter()\nconst store = useStore()\nconst loading = ref(false)\nconst updating = ref(false)\nconst orderList = ref([])\nconst total = ref(0)\nconst currentPage = ref(1)\nconst pageSize = ref(10)\nconst statusDialogVisible = ref(false)\nconst currentOrder = ref(null)\n\nconst searchForm = reactive({\n orderNo: '',\n customerName: '',\n status: '',\n startTime: '',\n endTime: ''\n})\n\nconst statusForm = reactive({\n status: ''\n})\n\nconst dateRange = ref([])\n\n// 状态选项\nconst statusOptions = computed(() => {\n const userRoles = store.state.userInfo?.roles || []\n const currentStatus = currentOrder.value?.status\n \n // 基础状态映射\n const baseOptions = {\n 0: '待处理',\n 1: '待发货',\n 2: '已发货',\n 3: '运输中',\n 4: '已送达',\n 5: '已完成',\n 6: '已取消'\n }\n \n // 系统管理员可以修改为任意状态\n if (userRoles.includes('ROLE_ADMIN')) {\n return baseOptions\n }\n \n // 仓库管理员只能将订单从\"待处理\"改为\"待发货\"\n if (userRoles.includes('ROLE_WAREHOUSE_ADMIN')) {\n return currentStatus === 0 ? { 1: '待发货' } : {}\n }\n \n // 物流管理员的状态流转\n if (userRoles.includes('ROLE_LOGISTICS_ADMIN')) {\n switch (currentStatus) {\n case 1: return { 2: '已发货' }\n case 2: return { 3: '运输中' }\n case 3: return { 4: '已送达' }\n case 4: return { 5: '已完成' }\n default: return {}\n }\n }\n \n return {}\n})\n\n// 判断是否可以修改状态\nconst canUpdateStatus = (status) => {\n const userRoles = store.state.userInfo?.roles || []\n \n // 系统管理员可以修改任意状态\n if (userRoles.includes('ROLE_ADMIN')) {\n return status !== 5 && status !== 6 // 已完成和已取消的订单不能修改\n }\n \n // 仓库管理员只能修改待处理的订单\n if (userRoles.includes('ROLE_WAREHOUSE_ADMIN')) {\n return status === 0\n }\n \n // 物流管理员可以修改的状态\n if (userRoles.includes('ROLE_LOGISTICS_ADMIN')) {\n return status >= 1 && status <= 4 // 可以修改待发货到已送达的订单\n }\n \n return false\n}\n\n// 获取状态文本\nconst getStatusText = (status) => {\n const statusMap = {\n 0: '待处理',\n 1: '待发货',\n 2: '已发货',\n 3: '运输中',\n 4: '已送达',\n 5: '已完成',\n 6: '已取消'\n }\n return statusMap[status] || '未知状态'\n}\n\n// 可用于搜索的状态选项\nconst availableSearchStatusOptions = computed(() => {\n const userRoles = store.state.userInfo?.roles || []\n const baseOptions = {\n 0: '待处理',\n 1: '待发货',\n 2: '已发货',\n 3: '运输中',\n 4: '已送达',\n 5: '已完成',\n 6: '已取消'\n }\n \n // 仓库管理员只能看到待处理和待发货的订单\n if (userRoles.includes('ROLE_WAREHOUSE_ADMIN')) {\n return {\n 0: '待处理',\n 1: '待发货'\n }\n }\n \n return baseOptions\n})\n\n// 处理日期范围变化\nconst handleDateChange = (val) => {\n if (val) {\n searchForm.startTime = val[0]\n searchForm.endTime = val[1]\n } else {\n searchForm.startTime = ''\n searchForm.endTime = ''\n }\n}\n\n// 重置搜索\nconst resetSearch = () => {\n searchForm.orderNo = ''\n searchForm.customerName = ''\n searchForm.status = ''\n searchForm.startTime = ''\n searchForm.endTime = ''\n dateRange.value = []\n handleSearch()\n}\n\n// 加载订单列表\nconst loadOrders = async () => {\n loading.value = true\n try {\n const res = await getAllOrders({\n pageNum: currentPage.value,\n pageSize: pageSize.value,\n orderNo: searchForm.orderNo || undefined,\n customerName: searchForm.customerName || undefined,\n status: searchForm.status,\n startTime: searchForm.startTime,\n endTime: searchForm.endTime\n })\n \n if (res.code === 200) {\n orderList.value = res.data.records\n total.value = res.data.total\n currentPage.value = res.data.current\n pageSize.value = res.data.size\n }\n } catch (error) {\n console.error('加载订单失败:', error)\n ElMessage.error(error.message || '加载订单失败')\n } finally {\n loading.value = false\n }\n}\n\n// 查看订单详情\nconst viewDetail = (orderId) => {\n router.push(`/orders/detail/${orderId}`)\n}\n\n// 处理修改状态\nconst handleUpdateStatus = (order) => {\n // 已完成或已取消的订单不能修改状态\n if (!canUpdateStatus(order.status)) {\n return\n }\n currentOrder.value = order\n statusForm.status = order.status\n statusDialogVisible.value = true\n}\n\n// 确认修改状态\nconst confirmUpdateStatus = async () => {\n if (!currentOrder.value || statusForm.status === currentOrder.value.status) {\n statusDialogVisible.value = false\n return\n }\n\n try {\n updating.value = true\n const res = await updateOrderStatus(currentOrder.value.id, statusForm.status)\n if (res.code === 200) {\n ElMessage.success('订单状态修改成功')\n statusDialogVisible.value = false\n loadOrders() // 重新加载订单列表\n }\n } catch (error) {\n console.error('修改订单状态失败:', error)\n if (error.response?.data?.message) {\n ElMessage.error(error.response.data.message)\n } else {\n ElMessage.error(error.message || '修改订单状态失败')\n }\n } finally {\n updating.value = false\n }\n}\n\n// 处理搜索\nconst handleSearch = () => {\n currentPage.value = 1\n loadOrders()\n}\n\n// 处理分页\nconst handleSizeChange = (val) => {\n pageSize.value = val\n loadOrders()\n}\n\nconst handleCurrentChange = (val) => {\n currentPage.value = val\n loadOrders()\n}\n\n// 初始加载\nloadOrders()\n</script>\n\n<style scoped>\n.order-management {\n min-height: 100%;\n}\n\n.card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.search-form {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.el-date-picker {\n width: 360px;\n}\n\n.pagination {\n margin-top: 20px;\n display: flex;\n justify-content: flex-end;\n}\n\n.order-info {\n padding: 20px;\n background-color: #f5f7fa;\n border-radius: 4px;\n margin-bottom: 20px;\n}\n\n.order-info p {\n margin: 10px 0;\n}\n\n.dialog-footer {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n}\n</style> "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}