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

{"ast":null,"code":"import { ref, reactive } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport { getAllOrders, updateOrderStatus } from '@/api/order';\nexport default {\n __name: 'OrderManagement',\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const router = useRouter();\n const loading = ref(false);\n const updating = ref(false);\n const orderList = ref([]);\n const total = ref(0);\n const currentPage = ref(1);\n const pageSize = ref(10);\n const statusDialogVisible = ref(false);\n const currentOrder = ref(null);\n const searchForm = reactive({\n customerId: ''\n });\n const statusForm = reactive({\n status: ''\n });\n const statusOptions = {\n 0: '待处理',\n 1: '已接单',\n 2: '运输中',\n 3: '已完成',\n 4: '已取消'\n };\n\n // 获取状态文本\n const getStatusText = status => {\n return statusOptions[status] || '未知状态';\n };\n\n // 加载订单列表\n const loadOrders = async () => {\n loading.value = true;\n try {\n const res = await getAllOrders({\n pageNum: currentPage.value,\n pageSize: pageSize.value,\n customerId: searchForm.customerId || undefined\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 // 查看订单详情\n const viewDetail = orderId => {\n router.push(`/orders/detail/${orderId}`);\n };\n\n // 处理修改状态\n const handleUpdateStatus = order => {\n // 已完成或已取消的订单不能修改状态\n if (order.status === 3 || order.status === 4) {\n return;\n }\n currentOrder.value = order;\n statusForm.status = order.status;\n statusDialogVisible.value = true;\n };\n\n // 确认修改状态\n const confirmUpdateStatus = async () => {\n if (!currentOrder.value || statusForm.status === currentOrder.value.status) {\n statusDialogVisible.value = false;\n return;\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 ElMessage.error(error.message || '修改订单状态失败');\n } finally {\n updating.value = false;\n }\n };\n\n // 处理搜索\n const handleSearch = () => {\n currentPage.value = 1;\n loadOrders();\n };\n\n // 处理分页\n const handleSizeChange = val => {\n pageSize.value = val;\n loadOrders();\n };\n const handleCurrentChange = val => {\n currentPage.value = val;\n loadOrders();\n };\n\n // 初始加载\n loadOrders();\n const __returned__ = {\n router,\n loading,\n updating,\n orderList,\n total,\n currentPage,\n pageSize,\n statusDialogVisible,\n currentOrder,\n searchForm,\n statusForm,\n statusOptions,\n getStatusText,\n loadOrders,\n viewDetail,\n handleUpdateStatus,\n confirmUpdateStatus,\n handleSearch,\n handleSizeChange,\n handleCurrentChange,\n ref,\n reactive,\n get useRouter() {\n return useRouter;\n },\n get ElMessage() {\n return ElMessage;\n },\n get ElMessageBox() {\n return ElMessageBox;\n },\n get getAllOrders() {\n return getAllOrders;\n },\n get updateOrderStatus() {\n return updateOrderStatus;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n};","map":{"version":3,"names":["ref","reactive","useRouter","ElMessage","ElMessageBox","getAllOrders","updateOrderStatus","router","loading","updating","orderList","total","currentPage","pageSize","statusDialogVisible","currentOrder","searchForm","customerId","statusForm","status","statusOptions","getStatusText","loadOrders","value","res","pageNum","undefined","code","data","records","current","size","error","console","message","viewDetail","orderId","push","handleUpdateStatus","order","confirmUpdateStatus","id","success","handleSearch","handleSizeChange","val","handleCurrentChange"],"sources":["D:/language/VScode/Front-end logistics/src/views/admin/OrderManagement.vue"],"sourcesContent":["<template>\r\n <div class=\"order-management\">\r\n <el-card>\r\n <template #header>\r\n <div class=\"card-header\">\r\n <span>订单管理</span>\r\n <el-form :inline=\"true\" :model=\"searchForm\" class=\"search-form\">\r\n <el-form-item>\r\n <el-input\r\n v-model=\"searchForm.customerId\"\r\n placeholder=\"客户ID\"\r\n clearable\r\n @clear=\"handleSearch\"\r\n />\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" @click=\"handleSearch\">搜索</el-button>\r\n </el-form-item>\r\n </el-form>\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=\"customerId\" label=\"客户ID\" />\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 {{ getStatusText(row.status) }}\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=\"text\"\r\n size=\"small\"\r\n @click=\"viewDetail(row.id)\"\r\n >\r\n 查看详情\r\n </el-button>\r\n <el-button \r\n type=\"text\"\r\n size=\"small\"\r\n @click=\"handleUpdateStatus(row)\"\r\n :disabled=\"row.status === 3 || row.status === 4\"\r\n >\r\n 修改状态\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]\"\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\r\n <!-- 修改状态对话框 -->\r\n <el-dialog\r\n v-model=\"statusDialogVisible\"\r\n title=\"修改订单状态\"\r\n width=\"50%\"\r\n >\r\n <div class=\"order-info\">\r\n <p><strong>订单编号:</strong>{{ currentOrder?.orderNo }}</p>\r\n <p><strong>客户ID:</strong>{{ currentOrder?.customerId }}</p>\r\n <p><strong>商品名称:</strong>{{ currentOrder?.goodsName }}</p>\r\n <p><strong>商品数量:</strong>{{ currentOrder?.goodsQuantity }}</p>\r\n <p><strong>起始地:</strong>{{ currentOrder?.startLocation }}</p>\r\n <p><strong>目的地:</strong>{{ currentOrder?.endLocation }}</p>\r\n <p><strong>运费:</strong>¥{{ currentOrder?.transportFee }}</p>\r\n <p><strong>当前状态:</strong>{{ getStatusText(currentOrder?.status) }}</p>\r\n </div>\r\n <el-form :model=\"statusForm\" label-width=\"100px\">\r\n <el-form-item label=\"新状态\">\r\n <el-select v-model=\"statusForm.status\">\r\n <el-option\r\n v-for=\"(text, value) in statusOptions\"\r\n :key=\"value\"\r\n :label=\"text\"\r\n :value=\"Number(value)\"\r\n :disabled=\"Number(value) === currentOrder?.status\"\r\n />\r\n </el-select>\r\n </el-form-item>\r\n </el-form>\r\n <template #footer>\r\n <span class=\"dialog-footer\">\r\n <el-button @click=\"statusDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"confirmUpdateStatus\" :loading=\"updating\">\r\n 确认修改\r\n </el-button>\r\n </span>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, reactive } from 'vue'\r\nimport { useRouter } from 'vue-router'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\nimport { getAllOrders, updateOrderStatus } from '@/api/order'\r\n\r\nconst router = useRouter()\r\nconst loading = ref(false)\r\nconst updating = ref(false)\r\nconst orderList = ref([])\r\nconst total = ref(0)\r\nconst currentPage = ref(1)\r\nconst pageSize = ref(10)\r\nconst statusDialogVisible = ref(false)\r\nconst currentOrder = ref(null)\r\n\r\nconst searchForm = reactive({\r\n customerId: ''\r\n})\r\n\r\nconst statusForm = reactive({\r\n status: ''\r\n})\r\n\r\nconst statusOptions = {\r\n 0: '待处理',\r\n 1: '已接单',\r\n 2: '运输中',\r\n 3: '已完成',\r\n 4: '已取消'\r\n}\r\n\r\n// 获取状态文本\r\nconst getStatusText = (status) => {\r\n return statusOptions[status] || '未知状态'\r\n}\r\n\r\n// 加载订单列表\r\nconst loadOrders = async () => {\r\n loading.value = true\r\n try {\r\n const res = await getAllOrders({\r\n pageNum: currentPage.value,\r\n pageSize: pageSize.value,\r\n customerId: searchForm.customerId || undefined\r\n })\r\n \r\n if (res.code === 200) {\r\n orderList.value = res.data.records\r\n total.value = res.data.total\r\n currentPage.value = res.data.current\r\n pageSize.value = res.data.size\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\n// 查看订单详情\r\nconst viewDetail = (orderId) => {\r\n router.push(`/orders/detail/${orderId}`)\r\n}\r\n\r\n// 处理修改状态\r\nconst handleUpdateStatus = (order) => {\r\n // 已完成或已取消的订单不能修改状态\r\n if (order.status === 3 || order.status === 4) {\r\n return\r\n }\r\n currentOrder.value = order\r\n statusForm.status = order.status\r\n statusDialogVisible.value = true\r\n}\r\n\r\n// 确认修改状态\r\nconst confirmUpdateStatus = async () => {\r\n if (!currentOrder.value || statusForm.status === currentOrder.value.status) {\r\n statusDialogVisible.value = false\r\n return\r\n }\r\n\r\n try {\r\n updating.value = true\r\n const res = await updateOrderStatus(currentOrder.value.id, statusForm.status)\r\n if (res.code === 200) {\r\n ElMessage.success('订单状态修改成功')\r\n statusDialogVisible.value = false\r\n loadOrders() // 重新加载订单列表\r\n }\r\n } catch (error) {\r\n console.error('修改订单状态失败:', error)\r\n ElMessage.error(error.message || '修改订单状态失败')\r\n } finally {\r\n updating.value = false\r\n }\r\n}\r\n\r\n// 处理搜索\r\nconst handleSearch = () => {\r\n currentPage.value = 1\r\n loadOrders()\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\n// 初始加载\r\nloadOrders()\r\n</script>\r\n\r\n<style scoped>\r\n.order-management {\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.search-form {\r\n margin-bottom: 0;\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\r\n.order-info {\r\n padding: 20px;\r\n background-color: #f5f7fa;\r\n border-radius: 4px;\r\n margin-bottom: 20px;\r\n}\r\n\r\n.order-info p {\r\n margin: 10px 0;\r\n}\r\n\r\n.dialog-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 10px;\r\n}\r\n</style> "],"mappings":"AAwHA,SAASA,GAAG,EAAEC,QAAQ,QAAQ,KAAK;AACnC,SAASC,SAAS,QAAQ,YAAY;AACtC,SAASC,SAAS,EAAEC,YAAY,QAAQ,cAAc;AACtD,SAASC,YAAY,EAAEC,iBAAiB,QAAQ,aAAa;;;;;;;IAE7D,MAAMC,MAAM,GAAGL,SAAS,CAAC,CAAC;IAC1B,MAAMM,OAAO,GAAGR,GAAG,CAAC,KAAK,CAAC;IAC1B,MAAMS,QAAQ,GAAGT,GAAG,CAAC,KAAK,CAAC;IAC3B,MAAMU,SAAS,GAAGV,GAAG,CAAC,EAAE,CAAC;IACzB,MAAMW,KAAK,GAAGX,GAAG,CAAC,CAAC,CAAC;IACpB,MAAMY,WAAW,GAAGZ,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAMa,QAAQ,GAAGb,GAAG,CAAC,EAAE,CAAC;IACxB,MAAMc,mBAAmB,GAAGd,GAAG,CAAC,KAAK,CAAC;IACtC,MAAMe,YAAY,GAAGf,GAAG,CAAC,IAAI,CAAC;IAE9B,MAAMgB,UAAU,GAAGf,QAAQ,CAAC;MAC1BgB,UAAU,EAAE;IACd,CAAC,CAAC;IAEF,MAAMC,UAAU,GAAGjB,QAAQ,CAAC;MAC1BkB,MAAM,EAAE;IACV,CAAC,CAAC;IAEF,MAAMC,aAAa,GAAG;MACpB,CAAC,EAAE,KAAK;MACR,CAAC,EAAE,KAAK;MACR,CAAC,EAAE,KAAK;MACR,CAAC,EAAE,KAAK;MACR,CAAC,EAAE;IACL,CAAC;;IAED;IACA,MAAMC,aAAa,GAAIF,MAAM,IAAK;MAChC,OAAOC,aAAa,CAACD,MAAM,CAAC,IAAI,MAAM;IACxC,CAAC;;IAED;IACA,MAAMG,UAAU,GAAG,MAAAA,CAAA,KAAY;MAC7Bd,OAAO,CAACe,KAAK,GAAG,IAAI;MACpB,IAAI;QACF,MAAMC,GAAG,GAAG,MAAMnB,YAAY,CAAC;UAC7BoB,OAAO,EAAEb,WAAW,CAACW,KAAK;UAC1BV,QAAQ,EAAEA,QAAQ,CAACU,KAAK;UACxBN,UAAU,EAAED,UAAU,CAACC,UAAU,IAAIS;QACvC,CAAC,CAAC;QAEF,IAAIF,GAAG,CAACG,IAAI,KAAK,GAAG,EAAE;UACpBjB,SAAS,CAACa,KAAK,GAAGC,GAAG,CAACI,IAAI,CAACC,OAAO;UAClClB,KAAK,CAACY,KAAK,GAAGC,GAAG,CAACI,IAAI,CAACjB,KAAK;UAC5BC,WAAW,CAACW,KAAK,GAAGC,GAAG,CAACI,IAAI,CAACE,OAAO;UACpCjB,QAAQ,CAACU,KAAK,GAAGC,GAAG,CAACI,IAAI,CAACG,IAAI;QAChC;MACF,CAAC,CAAC,OAAOC,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAAC,SAAS,EAAEA,KAAK,CAAC;QAC/B7B,SAAS,CAAC6B,KAAK,CAACA,KAAK,CAACE,OAAO,IAAI,QAAQ,CAAC;MAC5C,CAAC,SAAS;QACR1B,OAAO,CAACe,KAAK,GAAG,KAAK;MACvB;IACF,CAAC;;IAED;IACA,MAAMY,UAAU,GAAIC,OAAO,IAAK;MAC9B7B,MAAM,CAAC8B,IAAI,CAAC,kBAAkBD,OAAO,EAAE,CAAC;IAC1C,CAAC;;IAED;IACA,MAAME,kBAAkB,GAAIC,KAAK,IAAK;MACpC;MACA,IAAIA,KAAK,CAACpB,MAAM,KAAK,CAAC,IAAIoB,KAAK,CAACpB,MAAM,KAAK,CAAC,EAAE;QAC5C;MACF;MACAJ,YAAY,CAACQ,KAAK,GAAGgB,KAAK;MAC1BrB,UAAU,CAACC,MAAM,GAAGoB,KAAK,CAACpB,MAAM;MAChCL,mBAAmB,CAACS,KAAK,GAAG,IAAI;IAClC,CAAC;;IAED;IACA,MAAMiB,mBAAmB,GAAG,MAAAA,CAAA,KAAY;MACtC,IAAI,CAACzB,YAAY,CAACQ,KAAK,IAAIL,UAAU,CAACC,MAAM,KAAKJ,YAAY,CAACQ,KAAK,CAACJ,MAAM,EAAE;QAC1EL,mBAAmB,CAACS,KAAK,GAAG,KAAK;QACjC;MACF;MAEA,IAAI;QACFd,QAAQ,CAACc,KAAK,GAAG,IAAI;QACrB,MAAMC,GAAG,GAAG,MAAMlB,iBAAiB,CAACS,YAAY,CAACQ,KAAK,CAACkB,EAAE,EAAEvB,UAAU,CAACC,MAAM,CAAC;QAC7E,IAAIK,GAAG,CAACG,IAAI,KAAK,GAAG,EAAE;UACpBxB,SAAS,CAACuC,OAAO,CAAC,UAAU,CAAC;UAC7B5B,mBAAmB,CAACS,KAAK,GAAG,KAAK;UACjCD,UAAU,CAAC,CAAC,EAAC;QACf;MACF,CAAC,CAAC,OAAOU,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAAC,WAAW,EAAEA,KAAK,CAAC;QACjC7B,SAAS,CAAC6B,KAAK,CAACA,KAAK,CAACE,OAAO,IAAI,UAAU,CAAC;MAC9C,CAAC,SAAS;QACRzB,QAAQ,CAACc,KAAK,GAAG,KAAK;MACxB;IACF,CAAC;;IAED;IACA,MAAMoB,YAAY,GAAGA,CAAA,KAAM;MACzB/B,WAAW,CAACW,KAAK,GAAG,CAAC;MACrBD,UAAU,CAAC,CAAC;IACd,CAAC;;IAED;IACA,MAAMsB,gBAAgB,GAAIC,GAAG,IAAK;MAChChC,QAAQ,CAACU,KAAK,GAAGsB,GAAG;MACpBvB,UAAU,CAAC,CAAC;IACd,CAAC;IAED,MAAMwB,mBAAmB,GAAID,GAAG,IAAK;MACnCjC,WAAW,CAACW,KAAK,GAAGsB,GAAG;MACvBvB,UAAU,CAAC,CAAC;IACd,CAAC;;IAED;IACAA,UAAU,CAAC,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}