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
35 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: \"search-area\"\n};\nconst _hoisted_4 = {\n class: \"search-row\"\n};\nconst _hoisted_5 = {\n class: \"search-row\"\n};\nconst _hoisted_6 = {\n class: \"search-buttons\"\n};\nconst _hoisted_7 = {\n class: \"pagination\"\n};\nconst _hoisted_8 = {\n class: \"order-info\"\n};\nconst _hoisted_9 = {\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\", {\n class: \"title\"\n }, \"订单管理\", -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_form, {\n inline: true,\n model: $setup.searchForm,\n class: \"search-form\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_form_item, {\n label: \"订单号\"\n }, {\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, {\n label: \"客户名称\"\n }, {\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, {\n label: \"订单状态\"\n }, {\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 })]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_form_item, {\n label: \"时间范围\"\n }, {\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 }), _createElementVNode(\"div\", _hoisted_6, [_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 }, 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_7, [_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_9, [_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_8, [_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","_hoisted_3","_component_el_form","inline","model","$setup","searchForm","default","_hoisted_4","_component_el_form_item","label","_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","Number","_hoisted_5","_component_el_date_picker","dateRange","type","onChange","handleDateChange","_hoisted_6","_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_7","_component_el_pagination","currentPage","pageSize","total","layout","onSizeChange","handleSizeChange","onCurrentChange","handleCurrentChange","_createCommentVNode","_component_el_dialog","statusDialogVisible","title","footer","_hoisted_9","confirmUpdateStatus","updating","_hoisted_8","currentOrder","customerId","goodsName","goodsQuantity","startLocation","endLocation","statusForm","statusOptions"],"sources":["D:\\IDEAproject\\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 class=\"title\">订单管理</span>\n <div class=\"search-area\">\n <el-form :inline=\"true\" :model=\"searchForm\" class=\"search-form\">\n <div class=\"search-row\">\n <el-form-item label=\"订单号\">\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 label=\"客户名称\">\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 label=\"订单状态\">\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 </div>\n \n <div class=\"search-row\">\n <el-form-item label=\"时间范围\">\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 <div class=\"search-buttons\">\n <el-button type=\"primary\" @click=\"handleSearch\">搜索</el-button>\n <el-button @click=\"resetSearch\">重置</el-button>\n </div>\n </div>\n </el-form>\n </div>\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 flex-direction: column;\n gap: 20px;\n}\n\n.title {\n font-size: 18px;\n font-weight: bold;\n}\n\n.search-area {\n background-color: #f8f9fa;\n padding: 15px;\n border-radius: 4px;\n}\n\n.search-form {\n display: flex;\n flex-direction: column;\n gap: 15px;\n}\n\n.search-row {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.search-row :deep(.el-form-item) {\n margin-bottom: 0;\n margin-right: 0;\n}\n\n.search-row :deep(.el-form-item__label) {\n font-weight: normal;\n color: #606266;\n}\n\n.search-buttons {\n margin-left: auto;\n}\n\n:deep(.el-input),\n:deep(.el-select) {\n width: 200px;\n}\n\n:deep(.el-date-picker) {\n width: 400px;\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":[]}