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

{"ast":null,"code":"import { createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, toDisplayString as _toDisplayString, resolveDirective as _resolveDirective, openBlock as _openBlock, createBlock as _createBlock, withDirectives as _withDirectives, createElementBlock as _createElementBlock } 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: \"pagination\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\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(() => [_createElementVNode(\"div\", _hoisted_2, [_cache[6] || (_cache[6] = _createElementVNode(\"span\", null, \"订单管理\", -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_input, {\n modelValue: $setup.searchForm.orderId,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $setup.searchForm.orderId = $event),\n placeholder: \"请输入订单ID\",\n clearable: \"\",\n style: {\n \"width\": \"200px\"\n },\n onClear: $setup.handleReset\n }, {\n prefix: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode($setup[\"Search\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"]), _createVNode(_component_el_input, {\n modelValue: $setup.searchForm.customerId,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $setup.searchForm.customerId = $event),\n modelModifiers: {\n number: true\n },\n placeholder: \"请输入客户ID\",\n clearable: \"\",\n style: {\n \"width\": \"200px\"\n },\n onInput: $setup.validateCustomerId\n }, {\n prefix: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode($setup[\"Search\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $setup.handleSearch,\n disabled: !$setup.isValidCustomerId\n }, {\n default: _withCtx(() => _cache[4] || (_cache[4] = [_createTextVNode(\"搜索\")])),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"disabled\"]), _createVNode(_component_el_button, {\n onClick: $setup.handleReset\n }, {\n default: _withCtx(() => _cache[5] || (_cache[5] = [_createTextVNode(\"重置\")])),\n _: 1 /* STABLE */\n })])])]),\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 width: \"120\"\n }), _createVNode(_component_el_table_column, {\n prop: \"customerId\",\n label: \"客户ID\",\n width: \"80\"\n }), _createVNode(_component_el_table_column, {\n prop: \"goodsName\",\n label: \"商品名称\"\n }), _createVNode(_component_el_table_column, {\n prop: \"goodsQuantity\",\n label: \"数量\",\n width: \"80\"\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 width: \"100\"\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 width: \"100\"\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: \"createBy\",\n label: \"创建人\",\n width: \"120\"\n }), _createVNode(_component_el_table_column, {\n prop: \"createTime\",\n label: \"创建时间\",\n width: \"160\"\n }), _createVNode(_component_el_table_column, {\n prop: \"updateTime\",\n label: \"更新时间\",\n width: \"160\"\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"data\"])), [[_directive_loading, $setup.loading]]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_pagination, {\n \"current-page\": $setup.currentPage,\n \"onUpdate:currentPage\": _cache[2] || (_cache[2] = $event => $setup.currentPage = $event),\n \"page-size\": $setup.pageSize,\n \"onUpdate:pageSize\": _cache[3] || (_cache[3] = $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","_createElementVNode","_hoisted_2","_hoisted_3","_component_el_input","modelValue","$setup","searchForm","orderId","_cache","$event","placeholder","clearable","style","onClear","handleReset","prefix","_component_el_icon","default","_","customerId","modelModifiers","number","onInput","validateCustomerId","_component_el_button","type","onClick","handleSearch","disabled","isValidCustomerId","_createTextVNode","_createBlock","_component_el_table","data","orderList","_component_el_table_column","prop","label","width","row","_toDisplayString","transportFee","_component_el_tag","getStatusType","status","getStatusText","loading","_hoisted_4","_component_el_pagination","currentPage","pageSize","total","layout","onSizeChange","handleSizeChange","onCurrentChange","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 <div class=\"search-area\">\r\n <el-input\r\n v-model=\"searchForm.orderId\"\r\n placeholder=\"请输入订单ID\"\r\n clearable\r\n style=\"width: 200px\"\r\n @clear=\"handleReset\"\r\n >\r\n <template #prefix>\r\n <el-icon><Search /></el-icon>\r\n </template>\r\n </el-input>\r\n <el-input\r\n v-model.number=\"searchForm.customerId\"\r\n placeholder=\"请输入客户ID\"\r\n clearable\r\n style=\"width: 200px\"\r\n @input=\"validateCustomerId\"\r\n >\r\n <template #prefix>\r\n <el-icon><Search /></el-icon>\r\n </template>\r\n </el-input>\r\n <el-button \r\n type=\"primary\" \r\n @click=\"handleSearch\"\r\n :disabled=\"!isValidCustomerId\"\r\n >搜索</el-button>\r\n <el-button @click=\"handleReset\">重置</el-button>\r\n </div>\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=\"订单编号\" width=\"120\" />\r\n <el-table-column prop=\"customerId\" label=\"客户ID\" width=\"80\" />\r\n <el-table-column prop=\"goodsName\" label=\"商品名称\" />\r\n <el-table-column prop=\"goodsQuantity\" label=\"数量\" width=\"80\" />\r\n <el-table-column prop=\"startLocation\" label=\"起始地\" />\r\n <el-table-column prop=\"endLocation\" label=\"目的地\" />\r\n <el-table-column prop=\"transportFee\" label=\"运费\" width=\"100\">\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=\"状态\" width=\"100\">\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=\"createBy\" label=\"创建人\" width=\"120\" />\r\n <el-table-column prop=\"createTime\" label=\"创建时间\" width=\"160\" />\r\n <el-table-column prop=\"updateTime\" label=\"更新时间\" width=\"160\" />\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, reactive, onMounted, computed } from 'vue'\r\nimport { useRouter } from 'vue-router'\r\nimport { ElMessage } from 'element-plus'\r\nimport { Search } from '@element-plus/icons-vue'\r\nimport { getAllOrders, getOrderById } from '@/api/order'\r\nimport store from '@/store'\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 searchForm = reactive({\r\n customerId: '',\r\n orderId: ''\r\n})\r\n\r\nconst isValidCustomerId = computed(() => {\r\n if (!searchForm.customerId) return true // 空值是有效的\r\n const num = Number(searchForm.customerId)\r\n return Number.isInteger(num) && num > 0 // 必须是正整数\r\n})\r\n\r\nconst validateCustomerId = (val) => {\r\n if (val === '') { // 允许清空\r\n searchForm.customerId = ''\r\n return\r\n }\r\n if (!isValidCustomerId.value) {\r\n ElMessage.warning('客户ID必须是正整数')\r\n searchForm.customerId = ''\r\n }\r\n}\r\n\r\nconst getStatusText = (status) => {\r\n const orderStatus = Number(status)\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 const orderStatus = Number(status)\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 hasPermission = computed(() => {\r\n const userRole = store.state.userInfo.role\r\n return ['ROLE_ADMIN', 'ROLE_LOGISTICS_ADMIN'].includes(userRole)\r\n})\r\n\r\nconst loadOrders = async () => {\r\n loading.value = true\r\n try {\r\n const params = {\r\n pageNum: currentPage.value,\r\n pageSize: pageSize.value\r\n }\r\n \r\n if (searchForm.customerId && searchForm.customerId.trim() !== '') {\r\n params.customerId = Number(searchForm.customerId)\r\n }\r\n \r\n const res = await getAllOrders(params)\r\n if (res.code === 200 && res.data) {\r\n orderList.value = res.data.records\r\n total.value = res.data.total\r\n pageSize.value = res.data.size\r\n currentPage.value = res.data.current\r\n } else {\r\n throw new Error(res.message || '获取订单列表失败')\r\n }\r\n } catch (error) {\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 } 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 handleSearch = () => {\r\n if (searchForm.customerId && !isValidCustomerId.value) {\r\n ElMessage.warning('请输入有效的客户ID')\r\n return\r\n }\r\n currentPage.value = 1\r\n loadOrders()\r\n}\r\n\r\nconst handleReset = () => {\r\n searchForm.customerId = ''\r\n currentPage.value = 1\r\n loadOrders()\r\n}\r\n\r\nonMounted(() => {\r\n if (!hasPermission.value) {\r\n ElMessage.error('没有权限访问此页面')\r\n router.push('/')\r\n return\r\n }\r\n loadOrders()\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.order-management {\r\n padding: 20px;\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-area {\r\n display: flex;\r\n gap: 10px;\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":[]}