Showing
2 changed files
with
699 additions
and
763 deletions
| 1 | -import request from "@/utils/request"; | ||
| 2 | - | ||
| 3 | -export function scanList(query) { | ||
| 4 | - return request({ | ||
| 5 | - url: "/scan/task/queryPage", | ||
| 6 | - method: "get", | ||
| 7 | - params: query, | ||
| 8 | - }); | ||
| 9 | -} | ||
| 10 | - | ||
| 11 | -export function scanOrderList(query) { | ||
| 12 | - return request({ | ||
| 13 | - url: "/scan/order/queryPage", | ||
| 14 | - method: "get", | ||
| 15 | - params: query, | ||
| 16 | - }); | ||
| 17 | -} | ||
| 18 | - | ||
| 19 | -export function scanOrderDetailList(query) { | ||
| 20 | - return request({ | ||
| 21 | - url: "/scan/specification/queryPage", | ||
| 22 | - method: "get", | ||
| 23 | - params: query, | ||
| 24 | - }); | ||
| 25 | -} | ||
| 26 | - | ||
| 27 | - | ||
| 28 | - | ||
| 29 | -export function scanSpecQueryList(query) { | ||
| 30 | - return request({ | ||
| 31 | - url: "/scanSpec/queryList", | ||
| 32 | - method: "GET", | ||
| 33 | - params: query, | ||
| 34 | - }); | ||
| 35 | -} | ||
| 36 | - | ||
| 37 | -export function scanTaskdetal(id) { | ||
| 38 | - return request({ | ||
| 39 | - url: "/scanTask/" + id, | ||
| 40 | - method: "GET" | ||
| 41 | - }); | ||
| 42 | -} | ||
| 43 | - | ||
| 44 | -export function scanResultTypeList(query) { | ||
| 45 | - return request({ | ||
| 46 | - url: "/sorting/queryScanResultType", | ||
| 47 | - method: "GET", | ||
| 48 | - params: query, | ||
| 49 | - }); | ||
| 50 | -} | ||
| 51 | - | ||
| 52 | - | ||
| 53 | -export function deviceTypeQueryList(query) { | ||
| 54 | - return request({ | ||
| 55 | - url: "/deviceType/queryList", | ||
| 56 | - method: "GET", | ||
| 57 | - params: query, | ||
| 58 | - }); | ||
| 59 | -} | ||
| 60 | -export function sortingStationQueryList(query) { | ||
| 61 | - return request({ | ||
| 62 | - url: "/sorting/queryPage", | ||
| 63 | - method: "GET", | ||
| 64 | - params: query, | ||
| 65 | - }); | ||
| 66 | -} | ||
| 67 | - | ||
| 68 | -export function businesseQueryList(query) { | ||
| 69 | - return request({ | ||
| 70 | - url: "/business/queryPage", | ||
| 71 | - method: "GET", | ||
| 72 | - params: query, | ||
| 73 | - }); | ||
| 74 | -} | ||
| 75 | - | ||
| 76 | -export function taskList(query) { | ||
| 77 | - return request({ | ||
| 78 | - url: "/scanTask/queryPage", | ||
| 79 | - method: "GET", | ||
| 80 | - params: query, | ||
| 81 | - }); | ||
| 82 | -} | ||
| 83 | - | ||
| 84 | - | ||
| 85 | - | ||
| 86 | -export function editSortingStation(query) { | ||
| 87 | - return request({ | ||
| 88 | - url: "/sorting", | ||
| 89 | - method: "PUT", | ||
| 90 | - data: query, | ||
| 91 | - }); | ||
| 92 | -} | ||
| 93 | - | ||
| 94 | -export function addSortingStation(query) { | ||
| 95 | - return request({ | ||
| 96 | - url: "/sorting", | ||
| 97 | - method: "POST", | ||
| 98 | - data: query, | ||
| 99 | - }); | ||
| 100 | -} | ||
| 101 | - | ||
| 102 | -export function addScanItem(query) { | ||
| 103 | - return request({ | ||
| 104 | - url: "/scanItem", | ||
| 105 | - method: "POST", | ||
| 106 | - data: query, | ||
| 107 | - }); | ||
| 108 | -} | ||
| 109 | - | ||
| 110 | -export function deleteScanItem(id) { | ||
| 111 | - return request({ | ||
| 112 | - url: "/scanItem/" + id, | ||
| 113 | - method: "DELETE", | ||
| 114 | - }); | ||
| 115 | -} | ||
| 116 | - | ||
| 117 | -export function editScanSpec(query) { | ||
| 118 | - return request({ | ||
| 119 | - url: "/scanSpec", | ||
| 120 | - method: "PUT", | ||
| 121 | - data: query, | ||
| 122 | - }); | ||
| 123 | -} | ||
| 124 | - | ||
| 125 | - | ||
| 126 | -export function editStore(query) { | ||
| 127 | - return request({ | ||
| 128 | - url: "/business", | ||
| 129 | - method: "PUT", | ||
| 130 | - data: query, | ||
| 131 | - }); | ||
| 132 | -} | ||
| 133 | - | ||
| 134 | -export function deleteStore(id) { | ||
| 135 | - return request({ | ||
| 136 | - url: "/business/" + id, | ||
| 137 | - method: "DELETE", | ||
| 138 | - }); | ||
| 139 | -} | ||
| 140 | - | ||
| 141 | - | ||
| 142 | - | ||
| 143 | -export function addScanOrder(query) { | ||
| 144 | - return request({ | ||
| 145 | - url: "/scan/order", | ||
| 146 | - method: "POST", | ||
| 147 | - data: query, | ||
| 148 | - }); | ||
| 149 | -} | ||
| 150 | - | ||
| 151 | -export function addScanSpec(query) { | ||
| 152 | - return request({ | ||
| 153 | - url: "/scanSpec", | ||
| 154 | - method: "POST", | ||
| 155 | - data: query, | ||
| 156 | - }); | ||
| 157 | -} | ||
| 158 | - | ||
| 159 | -export function scanTaskQueryList(query) { | ||
| 160 | - return request({ | ||
| 161 | - url: "/scanItem/queryPage", | ||
| 162 | - method: "GET", | ||
| 163 | - params: query, | ||
| 164 | - }); | ||
| 165 | -} | ||
| 166 | - | ||
| 167 | - | ||
| 168 | -export function editScanTask(query) { | ||
| 169 | - return request({ | ||
| 170 | - url: "/scanTask", | ||
| 171 | - method: "PUT", | ||
| 172 | - data: query, | ||
| 173 | - }); | ||
| 174 | -} | ||
| 175 | - | ||
| 176 | -export function startTask(id) { | ||
| 177 | - return request({ | ||
| 178 | - url: `/scanTask/${id}/start`, | ||
| 179 | - method: "PUT" | ||
| 180 | - }); | ||
| 181 | -} | ||
| 182 | - | ||
| 183 | -export function pauseTask(id) { | ||
| 184 | - return request({ | ||
| 185 | - url: `/scanTask/${id}/pause`, | ||
| 186 | - method: "PUT" | ||
| 187 | - }); | ||
| 188 | -} | ||
| 189 | - | ||
| 190 | - | ||
| 191 | -export function finishedTask(id) { | ||
| 192 | - return request({ | ||
| 193 | - url: `/scanTask/${id}/finish`, | ||
| 194 | - method: "PUT" | ||
| 195 | - }); | ||
| 196 | -} | ||
| 197 | - | ||
| 198 | - | ||
| 199 | -export function searchBusinessInfo(query) { | ||
| 200 | - return request({ | ||
| 201 | - url: "/business/detailByNumber", | ||
| 202 | - method: "GET", | ||
| 203 | - params: query, | ||
| 204 | - }); | ||
| 205 | -} | ||
| 206 | - | ||
| 207 | -export function addScanTask(query) { | ||
| 208 | - return request({ | ||
| 209 | - url: "/scanTask", | ||
| 210 | - method: "POST", | ||
| 211 | - data: query, | ||
| 212 | - }); | ||
| 213 | -} | ||
| 214 | - | ||
| 215 | -export function scanCode(query) { | ||
| 216 | - return request({ | ||
| 217 | - url: "/scanLog/latest", | ||
| 218 | - method: "GET", | ||
| 219 | - params: query, | ||
| 220 | - }); | ||
| 221 | -} | ||
| 222 | - | ||
| 223 | - | ||
| 224 | - | ||
| 225 | -export function deleteScanSpec(id) { | ||
| 226 | - return request({ | ||
| 227 | - url: "/scanSpec/" + id, | ||
| 228 | - method: "DELETE" | ||
| 229 | - }); | ||
| 230 | -} | ||
| 231 | - | ||
| 232 | - | ||
| 233 | - | ||
| 234 | -export function scanTaskDetail(id) { | ||
| 235 | - return request({ | ||
| 236 | - url: "/scan/task/" + id, | ||
| 237 | - method: "GET", | ||
| 238 | - }); | ||
| 239 | -} | ||
| 240 | - | ||
| 241 | -export function scanDetailOrder(id) { | ||
| 242 | - return request({ | ||
| 243 | - url: "/scan/order/" + id, | ||
| 244 | - method: "GET", | ||
| 245 | - }); | ||
| 246 | -} | ||
| 247 | - | 1 | +import request from "@/utils/request"; | 
| 2 | + | ||
| 3 | +export function scanList(query) { | ||
| 4 | + return request({ | ||
| 5 | + url: "/scan/task/queryPage", | ||
| 6 | + method: "get", | ||
| 7 | + params: query, | ||
| 8 | + }); | ||
| 9 | +} | ||
| 10 | + | ||
| 11 | +export function scanOrderList(query) { | ||
| 12 | + return request({ | ||
| 13 | + url: "/scan/order/queryPage", | ||
| 14 | + method: "get", | ||
| 15 | + params: query, | ||
| 16 | + }); | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +export function scanOrderDetailList(query) { | ||
| 20 | + return request({ | ||
| 21 | + url: "/scan/specification/queryPage", | ||
| 22 | + method: "get", | ||
| 23 | + params: query, | ||
| 24 | + }); | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | + | ||
| 28 | + | ||
| 29 | +export function scanSpecQueryList(query) { | ||
| 30 | + return request({ | ||
| 31 | + url: "/scanSpec/queryList", | ||
| 32 | + method: "GET", | ||
| 33 | + params: query, | ||
| 34 | + }); | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +export function scanTaskdetal(id) { | ||
| 38 | + return request({ | ||
| 39 | + url: "/scanTask/" + id, | ||
| 40 | + method: "GET" | ||
| 41 | + }); | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +export function scanResultTypeList(query) { | ||
| 45 | + return request({ | ||
| 46 | + url: "/sorting/queryScanResultType", | ||
| 47 | + method: "GET", | ||
| 48 | + params: query, | ||
| 49 | + }); | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | + | ||
| 53 | +export function deviceTypeQueryList(query) { | ||
| 54 | + return request({ | ||
| 55 | + url: "/deviceType/queryList", | ||
| 56 | + method: "GET", | ||
| 57 | + params: query, | ||
| 58 | + }); | ||
| 59 | +} | ||
| 60 | +export function sortingStationQueryList(query) { | ||
| 61 | + return request({ | ||
| 62 | + url: "/sorting/queryPage", | ||
| 63 | + method: "GET", | ||
| 64 | + params: query, | ||
| 65 | + }); | ||
| 66 | +} | ||
| 67 | + | ||
| 68 | +export function businesseQueryList(query) { | ||
| 69 | + return request({ | ||
| 70 | + url: "/business/queryPage", | ||
| 71 | + method: "GET", | ||
| 72 | + params: query, | ||
| 73 | + }); | ||
| 74 | +} | ||
| 75 | + | ||
| 76 | +export function taskList(query) { | ||
| 77 | + return request({ | ||
| 78 | + url: "/scanTask/queryPage", | ||
| 79 | + method: "GET", | ||
| 80 | + params: query, | ||
| 81 | + }); | ||
| 82 | +} | ||
| 83 | + | ||
| 84 | + | ||
| 85 | + | ||
| 86 | +export function editSortingStation(query) { | ||
| 87 | + return request({ | ||
| 88 | + url: "/sorting", | ||
| 89 | + method: "PUT", | ||
| 90 | + data: query, | ||
| 91 | + }); | ||
| 92 | +} | ||
| 93 | + | ||
| 94 | +export function addSortingStation(query) { | ||
| 95 | + return request({ | ||
| 96 | + url: "/sorting", | ||
| 97 | + method: "POST", | ||
| 98 | + data: query, | ||
| 99 | + }); | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +export function addScanItem(query) { | ||
| 103 | + return request({ | ||
| 104 | + url: "/scanItem", | ||
| 105 | + method: "POST", | ||
| 106 | + data: query, | ||
| 107 | + }); | ||
| 108 | +} | ||
| 109 | + | ||
| 110 | +export function deleteScanItem(id) { | ||
| 111 | + return request({ | ||
| 112 | + url: "/scanItem/" + id, | ||
| 113 | + method: "DELETE", | ||
| 114 | + }); | ||
| 115 | +} | ||
| 116 | + | ||
| 117 | +export function editScanSpec(query) { | ||
| 118 | + return request({ | ||
| 119 | + url: "/scanSpec", | ||
| 120 | + method: "PUT", | ||
| 121 | + data: query, | ||
| 122 | + }); | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | + | ||
| 126 | +export function editStore(query) { | ||
| 127 | + return request({ | ||
| 128 | + url: "/business", | ||
| 129 | + method: "PUT", | ||
| 130 | + data: query, | ||
| 131 | + }); | ||
| 132 | +} | ||
| 133 | + | ||
| 134 | +export function deleteStore(id) { | ||
| 135 | + return request({ | ||
| 136 | + url: "/business/" + id, | ||
| 137 | + method: "DELETE", | ||
| 138 | + }); | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | + | ||
| 142 | + | ||
| 143 | +export function addScanOrder(query) { | ||
| 144 | + return request({ | ||
| 145 | + url: "/scan/order", | ||
| 146 | + method: "POST", | ||
| 147 | + data: query, | ||
| 148 | + }); | ||
| 149 | +} | ||
| 150 | + | ||
| 151 | +export function addScanSpec(query) { | ||
| 152 | + return request({ | ||
| 153 | + url: "/scanSpec", | ||
| 154 | + method: "POST", | ||
| 155 | + data: query, | ||
| 156 | + }); | ||
| 157 | +} | ||
| 158 | + | ||
| 159 | +export function scanTaskQueryList(query) { | ||
| 160 | + return request({ | ||
| 161 | + url: "/scanItem/queryPage", | ||
| 162 | + method: "GET", | ||
| 163 | + params: query, | ||
| 164 | + }); | ||
| 165 | +} | ||
| 166 | + | ||
| 167 | + | ||
| 168 | +export function editScanTask(query) { | ||
| 169 | + return request({ | ||
| 170 | + url: "/scanTask", | ||
| 171 | + method: "PUT", | ||
| 172 | + data: query, | ||
| 173 | + }); | ||
| 174 | +} | ||
| 175 | + | ||
| 176 | +export function startTask(id) { | ||
| 177 | + return request({ | ||
| 178 | + url: `/scanTask/${id}/start`, | ||
| 179 | + method: "PUT" | ||
| 180 | + }); | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +export function pauseTask(id) { | ||
| 184 | + return request({ | ||
| 185 | + url: `/scanTask/${id}/pause`, | ||
| 186 | + method: "PUT" | ||
| 187 | + }); | ||
| 188 | +} | ||
| 189 | + | ||
| 190 | + | ||
| 191 | +export function finishedTask(id) { | ||
| 192 | + return request({ | ||
| 193 | + url: `/scanTask/${id}/finish`, | ||
| 194 | + method: "PUT" | ||
| 195 | + }); | ||
| 196 | +} | ||
| 197 | + | ||
| 198 | + | ||
| 199 | +export function searchBusinessInfo(query) { | ||
| 200 | + return request({ | ||
| 201 | + url: "/business/detailByNumber", | ||
| 202 | + method: "GET", | ||
| 203 | + params: query, | ||
| 204 | + }); | ||
| 205 | +} | ||
| 206 | + | ||
| 207 | +export function addScanTask(query) { | ||
| 208 | + return request({ | ||
| 209 | + url: "/scanTask", | ||
| 210 | + method: "POST", | ||
| 211 | + data: query, | ||
| 212 | + }); | ||
| 213 | +} | ||
| 214 | + | ||
| 215 | +export function scanCode(query) { | ||
| 216 | + return request({ | ||
| 217 | + url: "/scanLog/latest", | ||
| 218 | + method: "GET", | ||
| 219 | + params: query, | ||
| 220 | + }); | ||
| 221 | +} | ||
| 222 | + | ||
| 223 | + | ||
| 224 | + | ||
| 225 | +export function deleteScanSpec(id) { | ||
| 226 | + return request({ | ||
| 227 | + url: "/scanSpec/" + id, | ||
| 228 | + method: "DELETE" | ||
| 229 | + }); | ||
| 230 | +} | ||
| 231 | + | ||
| 232 | + | ||
| 233 | + | ||
| 234 | +export function scanTaskDetail(id) { | ||
| 235 | + return request({ | ||
| 236 | + url: "/scan/task/" + id, | ||
| 237 | + method: "GET", | ||
| 238 | + }); | ||
| 239 | +} | ||
| 240 | + | ||
| 241 | +export function scanDetailOrder(id) { | ||
| 242 | + return request({ | ||
| 243 | + url: "/scan/order/" + id, | ||
| 244 | + method: "GET", | ||
| 245 | + }); | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | + | ||
| 249 | +export function deleteReviewItemTask(id) { | ||
| 250 | + return request({ | ||
| 251 | + url: `/scanTask/${id}/reviewItem`, | ||
| 252 | + method: "DELETE", | ||
| 253 | + }); | ||
| 254 | +} | ||
| 255 | + | 
| 1 | -<template> | ||
| 2 | - <div class="app-container"> | ||
| 3 | - <el-descriptions title="" column="3"> | ||
| 4 | - <el-descriptions-item label="任务ID:">{{ | ||
| 5 | - detailData.id | ||
| 6 | - }}</el-descriptions-item> | ||
| 7 | - <el-descriptions-item label="任务名称:">{{ | ||
| 8 | - detailData.name | ||
| 9 | - }}</el-descriptions-item> | ||
| 10 | - <el-descriptions-item label="创建时间:">{{ | ||
| 11 | - detailData.createTime | ||
| 12 | - }}</el-descriptions-item> | ||
| 13 | - <el-descriptions-item label="分拣数量:">{{ | ||
| 14 | - detailData.totalItemCount | ||
| 15 | - }}</el-descriptions-item> | ||
| 16 | - <!-- <el-descriptions-item label="营业厅代码:">{{ | ||
| 17 | - route.query.bookingRef | ||
| 18 | - }}</el-descriptions-item> --> | ||
| 19 | - <el-descriptions-item label="对应营业厅:">{{ | ||
| 20 | - detailData.businessName | ||
| 21 | - }}</el-descriptions-item> | ||
| 22 | - </el-descriptions> | ||
| 23 | - <el-divider></el-divider> | ||
| 24 | - <el-form | ||
| 25 | - v-if="false" | ||
| 26 | - :model="queryParams" | ||
| 27 | - ref="queryRef" | ||
| 28 | - v-show="showSearch" | ||
| 29 | - :inline="true" | ||
| 30 | - label-width="100px" | ||
| 31 | - label-position="left" | ||
| 32 | - > | ||
| 33 | - <el-form-item label="Type:" prop="type"> | ||
| 34 | - <el-input | ||
| 35 | - v-model="queryParams.type" | ||
| 36 | - placeholder="Please enter type" | ||
| 37 | - clearable | ||
| 38 | - style="width: 240px" | ||
| 39 | - @keyup.enter="handleQuery" | ||
| 40 | - /> | ||
| 41 | - </el-form-item> | ||
| 42 | - <el-form-item label="Trans:" prop="trans"> | ||
| 43 | - <el-input | ||
| 44 | - v-model="queryParams.trans" | ||
| 45 | - placeholder="Please enter trans" | ||
| 46 | - clearable | ||
| 47 | - style="width: 240px" | ||
| 48 | - @keyup.enter="handleQuery" | ||
| 49 | - /> | ||
| 50 | - </el-form-item> | ||
| 51 | - <el-form-item label="Contract No:" prop="contractNo"> | ||
| 52 | - <el-input | ||
| 53 | - v-model="queryParams.contractNo" | ||
| 54 | - placeholder="Please enter contractNo" | ||
| 55 | - clearable | ||
| 56 | - style="width: 240px" | ||
| 57 | - @keyup.enter="handleQuery" | ||
| 58 | - /> | ||
| 59 | - </el-form-item> | ||
| 60 | - <el-form-item label="Del:" prop="del"> | ||
| 61 | - <el-input | ||
| 62 | - v-model="queryParams.del" | ||
| 63 | - placeholder="Please enter del" | ||
| 64 | - clearable | ||
| 65 | - style="width: 240px" | ||
| 66 | - @keyup.enter="handleQuery" | ||
| 67 | - /> | ||
| 68 | - </el-form-item> | ||
| 69 | - <el-form-item label="EX-Fact:" prop="exFact"> | ||
| 70 | - <el-input | ||
| 71 | - v-model="queryParams.exFact" | ||
| 72 | - placeholder="Please enter exFact" | ||
| 73 | - clearable | ||
| 74 | - style="width: 240px" | ||
| 75 | - @keyup.enter="handleQuery" | ||
| 76 | - /> | ||
| 77 | - </el-form-item> | ||
| 78 | - <el-form-item> | ||
| 79 | - <el-button type="primary" icon="Search" @click="handleQuery" | ||
| 80 | - >Search</el-button | ||
| 81 | - > | ||
| 82 | - <el-button icon="Refresh" @click="resetQuery">Reset</el-button> | ||
| 83 | - </el-form-item> | ||
| 84 | - </el-form> | ||
| 85 | - <div class="title">任务详情</div> | ||
| 86 | - | ||
| 87 | - <right-toolbar | ||
| 88 | - v-model:showSearch="showSearch" | ||
| 89 | - :search="false" | ||
| 90 | - @queryTable="getList" | ||
| 91 | - > | ||
| 92 | - <el-row :gutter="10" class="mb8"> | ||
| 93 | - <el-col :span="1.5"> | ||
| 94 | - <el-button type="primary" plain :disabled="detailData.status !== 'ONGOING'" icon="Plus" @click="addTask" | ||
| 95 | - >新增</el-button | ||
| 96 | - > | ||
| 97 | - </el-col> | ||
| 98 | - <el-col :span="1.5"> | ||
| 99 | - <el-button | ||
| 100 | - type="primary" | ||
| 101 | - plain | ||
| 102 | - icon="Download" | ||
| 103 | - @click="handleExportDiff" | ||
| 104 | - >导出回收差异表</el-button | ||
| 105 | - > | ||
| 106 | - </el-col> | ||
| 107 | - <el-col :span="1.5"> | ||
| 108 | - <el-button | ||
| 109 | - type="primary" | ||
| 110 | - plain | ||
| 111 | - icon="Download" | ||
| 112 | - @click="handleExportResult" | ||
| 113 | - >导出分拣结果表</el-button | ||
| 114 | - > | ||
| 115 | - </el-col> | ||
| 116 | - </el-row> | ||
| 117 | - </right-toolbar> | ||
| 118 | - | ||
| 119 | - <!-- Table Data --> | ||
| 120 | - <el-table v-loading="loading" :data="dataList"> | ||
| 121 | - <el-table-column | ||
| 122 | - v-for="(column, columnIndex) in columnList" | ||
| 123 | - :key="columnIndex" | ||
| 124 | - :label="column.label" | ||
| 125 | - :prop="column.prop" | ||
| 126 | - :show-overflow-tooltip="column.showOverflowTooltip || true" | ||
| 127 | - :align="column.align || 'center'" | ||
| 128 | - :width="column.width || 'auto'" | ||
| 129 | - > | ||
| 130 | - <template #default="scope"> | ||
| 131 | - <span | ||
| 132 | - v-if="column.prop === 'status'" | ||
| 133 | - :style="{ | ||
| 134 | - fontWeight: 500, | ||
| 135 | - color: | ||
| 136 | - scope.row[column.prop] == 'COMPLETED' | ||
| 137 | - ? '#27B148' | ||
| 138 | - : scope.row[column.prop] === 'WAITING' | ||
| 139 | - ? '#ff6200' | ||
| 140 | - : '#409EFF', | ||
| 141 | - }" | ||
| 142 | - > | ||
| 143 | - {{ scope.row[column.prop] || "/" }} | ||
| 144 | - </span> | ||
| 145 | - <span v-else>{{ scope.row[column.prop] || "/" }}</span> | ||
| 146 | - </template> | ||
| 147 | - </el-table-column> | ||
| 148 | - | ||
| 149 | - <el-table-column | ||
| 150 | - label="操作" | ||
| 151 | - fixed="right" | ||
| 152 | - align="center" | ||
| 153 | - class-name="small-padding fixed-width" | ||
| 154 | - > | ||
| 155 | - <template #default="scope"> | ||
| 156 | - <el-tooltip content="删除" placement="top"> | ||
| 157 | - <el-button | ||
| 158 | - link | ||
| 159 | - type="primary" | ||
| 160 | - @click="delItem(scope.row)" | ||
| 161 | - >删除</el-button | ||
| 162 | - > | ||
| 163 | - </el-tooltip> | ||
| 164 | - </template> | ||
| 165 | - </el-table-column> | ||
| 166 | - </el-table> | ||
| 167 | - | ||
| 168 | - <pagination | ||
| 169 | - v-show="total > 0" | ||
| 170 | - :total="total" | ||
| 171 | - layout="prev, pager, next" | ||
| 172 | - v-model:page="queryParams.pageNo" | ||
| 173 | - v-model:limit="queryParams.pageSize" | ||
| 174 | - @pagination="getList" | ||
| 175 | - /> | ||
| 176 | - | ||
| 177 | - <!-- Add or Edit User Config Dialog --> | ||
| 178 | - <el-dialog :title="title" v-model="open" width="500px" append-to-body> | ||
| 179 | - <el-form :model="form" :rules="rules" @submit.prevent ref="userRef" label-width="120px"> | ||
| 180 | - <el-row> | ||
| 181 | - <el-col :span="24"> | ||
| 182 | - <el-form-item label="串码" prop="barcode"> | ||
| 183 | - <el-input v-model="form.barcode" placeholder="请输入串码" /> | ||
| 184 | - </el-form-item> | ||
| 185 | - </el-col> | ||
| 186 | - </el-row> | ||
| 187 | - </el-form> | ||
| 188 | - <template #footer> | ||
| 189 | - <div class="dialog-footer"> | ||
| 190 | - <el-button type="primary" :loading="isLoading" @click="submitForm">确认</el-button> | ||
| 191 | - <el-button @click="() => (open = false)">取消</el-button> | ||
| 192 | - </div> | ||
| 193 | - </template> | ||
| 194 | - </el-dialog> | ||
| 195 | - | ||
| 196 | - <el-dialog | ||
| 197 | - :title="upload.title" | ||
| 198 | - v-model="upload.open" | ||
| 199 | - width="400px" | ||
| 200 | - append-to-body | ||
| 201 | - > | ||
| 202 | - <el-upload | ||
| 203 | - ref="uploadRef" | ||
| 204 | - :limit="1" | ||
| 205 | - accept=".xlsx, .xls" | ||
| 206 | - :headers="upload.headers" | ||
| 207 | - :action="upload.url" | ||
| 208 | - :disabled="upload.isUploading" | ||
| 209 | - :on-progress="handleFileUploadProgress" | ||
| 210 | - :on-success="handleFileSuccess" | ||
| 211 | - :auto-upload="false" | ||
| 212 | - drag | ||
| 213 | - > | ||
| 214 | - <el-icon class="el-icon--upload"><upload-filled /></el-icon> | ||
| 215 | - <div class="el-upload__text"> | ||
| 216 | - Drag file here, or <em>click to upload</em> | ||
| 217 | - </div> | ||
| 218 | - <template #tip> | ||
| 219 | - <div class="el-upload__tip text-center"> | ||
| 220 | - <span>Only xls, xlsx files are allowed.</span> | ||
| 221 | - <!-- <el-link | ||
| 222 | - type="primary" | ||
| 223 | - :underline="false" | ||
| 224 | - style="font-size: 12px; vertical-align: baseline" | ||
| 225 | - @click="importTemplate" | ||
| 226 | - >Download Template</el-link> --> | ||
| 227 | - </div> | ||
| 228 | - </template> | ||
| 229 | - </el-upload> | ||
| 230 | - <template #footer> | ||
| 231 | - <div class="dialog-footer"> | ||
| 232 | - <el-button type="primary" @click="submitFileForm">Confirm</el-button> | ||
| 233 | - <el-button @click="upload.open = false">Cancel</el-button> | ||
| 234 | - </div> | ||
| 235 | - </template> | ||
| 236 | - </el-dialog> | ||
| 237 | - </div> | ||
| 238 | -</template> | ||
| 239 | - | ||
| 240 | -<script setup> | ||
| 241 | -import { getToken } from "@/utils/auth"; | ||
| 242 | -import { formatDate } from "@/utils/index"; | ||
| 243 | - | ||
| 244 | -import { onMounted, ref } from "vue"; | ||
| 245 | -import { addScanItem, scanTaskdetal, scanTaskQueryList,deleteScanItem } from "@/api/system/scan"; | ||
| 246 | - | ||
| 247 | -const router = useRouter(); | ||
| 248 | -const route = useRoute(); | ||
| 249 | -const { proxy } = getCurrentInstance(); | ||
| 250 | - | ||
| 251 | -const dataList = ref([]); | ||
| 252 | -const loading = ref(true); | ||
| 253 | -const showSearch = ref(true); | ||
| 254 | -const total = ref(0); | ||
| 255 | -const dateRange = ref([]); | ||
| 256 | - | ||
| 257 | -const columnList = ref([ | ||
| 258 | - { | ||
| 259 | - label: "设备类型", | ||
| 260 | - prop: "deviceTypeName", | ||
| 261 | - width: 100, | ||
| 262 | - }, | ||
| 263 | - { | ||
| 264 | - label: "规格型号", | ||
| 265 | - prop: "model", | ||
| 266 | - width: 150, | ||
| 267 | - }, | ||
| 268 | - { | ||
| 269 | - label: "串码", | ||
| 270 | - prop: "barcode", | ||
| 271 | - width: 150, | ||
| 272 | - }, | ||
| 273 | - { | ||
| 274 | - label: "重量", | ||
| 275 | - prop: "weight", | ||
| 276 | - width: 150, | ||
| 277 | - }, | ||
| 278 | - { | ||
| 279 | - label: "状态", | ||
| 280 | - prop: "status", | ||
| 281 | - width: 150, | ||
| 282 | - }, | ||
| 283 | - { | ||
| 284 | - label: "分拣时间", | ||
| 285 | - prop: "scanTime", | ||
| 286 | - width: 200, | ||
| 287 | - }, | ||
| 288 | - { | ||
| 289 | - label: "分拣结果", | ||
| 290 | - prop: "scanResult" | ||
| 291 | - }, | ||
| 292 | - { | ||
| 293 | - label: "备注", | ||
| 294 | - prop: "remark", | ||
| 295 | - width: 200 | ||
| 296 | - }, | ||
| 297 | - { | ||
| 298 | - label: "分拣人", | ||
| 299 | - prop: "scanBy", | ||
| 300 | - width: 150, | ||
| 301 | - }, | ||
| 302 | - { | ||
| 303 | - label: "分检口号", | ||
| 304 | - prop: "sortingNo", | ||
| 305 | - width: 150 | ||
| 306 | - }, | ||
| 307 | - { | ||
| 308 | - label: "袋码", | ||
| 309 | - prop: "scanBoxNumber", | ||
| 310 | - width: 180 | ||
| 311 | - }, | ||
| 312 | -]); | ||
| 313 | - | ||
| 314 | -const data = reactive({ | ||
| 315 | - form: {}, | ||
| 316 | - queryParams: { | ||
| 317 | - pageNo: 1, | ||
| 318 | - pageSize: 10, | ||
| 319 | - scanTaskId: route.query.scanTaskId | ||
| 320 | - }, | ||
| 321 | - rules: { | ||
| 322 | - barcode: [{ required: true, message: "请输入串码", trigger: "blur" }], | ||
| 323 | - }, | ||
| 324 | -}); | ||
| 325 | - | ||
| 326 | -const { queryParams, form, rules } = toRefs(data); | ||
| 327 | - | ||
| 328 | -const open = ref(false); | ||
| 329 | -const title = ref(""); | ||
| 330 | -const isLoading = ref(false) | ||
| 331 | -function submitForm() { | ||
| 332 | - proxy.$refs["userRef"].validate((valid) => { | ||
| 333 | - if (valid) { | ||
| 334 | - isLoading.value = true | ||
| 335 | - addScanItem({ | ||
| 336 | - ...form.value, | ||
| 337 | - scanTaskId:route.query.scanTaskId | ||
| 338 | - }).then((response) => { | ||
| 339 | - proxy.$modal.msgSuccess("新增成功!"); | ||
| 340 | - open.value = false; | ||
| 341 | - | ||
| 342 | - getList(); | ||
| 343 | - }).finally(() => { | ||
| 344 | - isLoading.value = false | ||
| 345 | - }) | ||
| 346 | - } | ||
| 347 | - }); | ||
| 348 | -} | ||
| 349 | - | ||
| 350 | -const addTask = () => { | ||
| 351 | - reset(); | ||
| 352 | - title.value = '新增任务' | ||
| 353 | - open.value = true | ||
| 354 | -} | ||
| 355 | - | ||
| 356 | -const delItem = (row) => { | ||
| 357 | - proxy.$modal | ||
| 358 | - .confirm("确认删除?") | ||
| 359 | - .then(() => { | ||
| 360 | - deleteScanItem(row.id).then((response) => { | ||
| 361 | - proxy.$modal.msgSuccess("删除成功!"); | ||
| 362 | - getList(); | ||
| 363 | - }); | ||
| 364 | - }) | ||
| 365 | - .catch(() => { | ||
| 366 | - proxy.$modal.msgWarning("已取消"); | ||
| 367 | - }); | ||
| 368 | -}; | ||
| 369 | - | ||
| 370 | -const handleExportDiff = () => { | ||
| 371 | - proxy.download( | ||
| 372 | - "/scanSpec/difference/export", | ||
| 373 | - { | ||
| 374 | - scanTaskId:route.query.scanTaskId, | ||
| 375 | - status:'COMPLETED' | ||
| 376 | - }, | ||
| 377 | - `回收差异表.xlsx`, | ||
| 378 | - { | ||
| 379 | - headers: {} | ||
| 380 | - }, | ||
| 381 | - false | ||
| 382 | - ); | ||
| 383 | -}; | ||
| 384 | - | ||
| 385 | -const handleExportResult = () => { | ||
| 386 | - proxy.download( | ||
| 387 | - "/scanItem/result/export", | ||
| 388 | - { | ||
| 389 | - scanTaskId:route.query.scanTaskId, | ||
| 390 | - status:'COMPLETED' | ||
| 391 | - }, | ||
| 392 | - `分拣结果表.xlsx`, | ||
| 393 | - { | ||
| 394 | - headers: {} | ||
| 395 | - }, | ||
| 396 | - false | ||
| 397 | - ); | ||
| 398 | -}; | ||
| 399 | -// Reset operation form | ||
| 400 | -function reset() { | ||
| 401 | - form.value = { | ||
| 402 | - scanTaskId: route.query.scanTaskId, | ||
| 403 | - barcode: undefined | ||
| 404 | - }; | ||
| 405 | - proxy.resetForm("userRef"); | ||
| 406 | -} | ||
| 407 | - | ||
| 408 | -function handleAdd() { | ||
| 409 | - reset(); | ||
| 410 | - open.value = true; | ||
| 411 | - title.value = "Add Order"; | ||
| 412 | -} | ||
| 413 | - | ||
| 414 | -// Query list | ||
| 415 | -const getList = () => { | ||
| 416 | - loading.value = true; | ||
| 417 | - scanTaskQueryList(proxy.addDateRange(queryParams.value, dateRange.value)).then( | ||
| 418 | - (res) => { | ||
| 419 | - loading.value = false; | ||
| 420 | - dataList.value = res.data.records.map(item => ({ | ||
| 421 | - ...item, | ||
| 422 | - scanTime:formatDate(item.scanTime) | ||
| 423 | - })) | ||
| 424 | - total.value = res.data.total; | ||
| 425 | - } | ||
| 426 | - ); | ||
| 427 | -}; | ||
| 428 | - | ||
| 429 | -// Search button operation | ||
| 430 | -const handleQuery = () => { | ||
| 431 | - queryParams.value.pageNo = 1; | ||
| 432 | - getList(); | ||
| 433 | -}; | ||
| 434 | - | ||
| 435 | -// Reset button operation | ||
| 436 | -const resetQuery = () => { | ||
| 437 | - dateRange.value = []; | ||
| 438 | - proxy.resetForm("queryRef"); | ||
| 439 | - handleQuery(); | ||
| 440 | -}; | ||
| 441 | - | ||
| 442 | -const upload = reactive({ | ||
| 443 | - open: false, | ||
| 444 | - title: "Import", | ||
| 445 | - isUploading: false, | ||
| 446 | - updateSupport: 0, | ||
| 447 | - headers: { Authorization: "Bearer " + getToken() }, | ||
| 448 | - url: import.meta.env.VITE_APP_BASE_API + "/scan/specification/import", | ||
| 449 | -}); | ||
| 450 | - | ||
| 451 | -const uploadRef = ref(null); | ||
| 452 | - | ||
| 453 | -const handleImport = () => { | ||
| 454 | - upload.title = "Import"; | ||
| 455 | - upload.open = true; | ||
| 456 | - upload.isUploading = false; | ||
| 457 | - upload.updateSupport = 0; | ||
| 458 | -}; | ||
| 459 | - | ||
| 460 | -const handleFileUploadProgress = (event, file, fileList) => { | ||
| 461 | - upload.isUploading = true; | ||
| 462 | -}; | ||
| 463 | - | ||
| 464 | -const handleFileSuccess = (response, file, fileList) => { | ||
| 465 | - upload.isUploading = false; | ||
| 466 | - if (response.code === 200) { | ||
| 467 | - upload.open = false; | ||
| 468 | - proxy.$modal.msgSuccess(response.msg); | ||
| 469 | - getList(); // Refresh main table | ||
| 470 | - } else { | ||
| 471 | - proxy.$modal.msgError(response.msg); | ||
| 472 | - } | ||
| 473 | -}; | ||
| 474 | - | ||
| 475 | -const importTemplate = () => { | ||
| 476 | - proxy.download("/system/user/importTemplate"); | ||
| 477 | -}; | ||
| 478 | - | ||
| 479 | -const submitFileForm = () => { | ||
| 480 | - uploadRef.value.submit(); | ||
| 481 | -}; | ||
| 482 | - | ||
| 483 | -const enterDetail = (row) => { | ||
| 484 | - router.push({ | ||
| 485 | - path: "/scan-manage/order-manage/order-detail", | ||
| 486 | - query: { | ||
| 487 | - scanTaskId: row.scanTaskId, | ||
| 488 | - scanOrderId: row.id, | ||
| 489 | - }, | ||
| 490 | - }); | ||
| 491 | -}; | ||
| 492 | - | ||
| 493 | -const detailData = ref({}); | ||
| 494 | -const getDetail = () => { | ||
| 495 | - scanTaskdetal(proxy.$route.query.scanTaskId).then((res) => { | ||
| 496 | - detailData.value = res.data; | ||
| 497 | - detailData.value.createTime = formatDate(detailData.value.createTime) | ||
| 498 | - }); | ||
| 499 | -}; | ||
| 500 | - | ||
| 501 | -onMounted(() => { | ||
| 502 | - getList(); | ||
| 503 | - getDetail(); | ||
| 504 | -}); | ||
| 505 | -</script> | ||
| 506 | - | ||
| 507 | -<style lang="scss" scoped> | ||
| 508 | -.el-divider--horizontal { | ||
| 509 | - margin: 10px 0 24px; | ||
| 510 | -} | ||
| 511 | - | ||
| 512 | -.title { | ||
| 513 | - font-weight: 500; | ||
| 514 | - margin: 20px 0px 10px; | ||
| 515 | -} | ||
| 516 | -</style> | 1 | +<template> | 
| 2 | + <div class="app-container"> | ||
| 3 | + <el-descriptions title="" column="3"> | ||
| 4 | + <el-descriptions-item label="任务ID:">{{ | ||
| 5 | + detailData.id | ||
| 6 | + }}</el-descriptions-item> | ||
| 7 | + <el-descriptions-item label="任务名称:">{{ | ||
| 8 | + detailData.name | ||
| 9 | + }}</el-descriptions-item> | ||
| 10 | + <el-descriptions-item label="创建时间:">{{ | ||
| 11 | + detailData.createTime | ||
| 12 | + }}</el-descriptions-item> | ||
| 13 | + <el-descriptions-item label="分拣数量:">{{ | ||
| 14 | + detailData.totalItemCount | ||
| 15 | + }}</el-descriptions-item> | ||
| 16 | + <!-- <el-descriptions-item label="营业厅代码:">{{ | ||
| 17 | + route.query.bookingRef | ||
| 18 | + }}</el-descriptions-item> --> | ||
| 19 | + <el-descriptions-item label="对应营业厅:">{{ | ||
| 20 | + detailData.businessName | ||
| 21 | + }}</el-descriptions-item> | ||
| 22 | + </el-descriptions> | ||
| 23 | + <el-divider></el-divider> | ||
| 24 | + <el-form v-if="false" :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="100px" | ||
| 25 | + label-position="left"> | ||
| 26 | + <el-form-item label="Type:" prop="type"> | ||
| 27 | + <el-input v-model="queryParams.type" placeholder="Please enter type" clearable style="width: 240px" | ||
| 28 | + @keyup.enter="handleQuery" /> | ||
| 29 | + </el-form-item> | ||
| 30 | + <el-form-item label="Trans:" prop="trans"> | ||
| 31 | + <el-input v-model="queryParams.trans" placeholder="Please enter trans" clearable style="width: 240px" | ||
| 32 | + @keyup.enter="handleQuery" /> | ||
| 33 | + </el-form-item> | ||
| 34 | + <el-form-item label="Contract No:" prop="contractNo"> | ||
| 35 | + <el-input v-model="queryParams.contractNo" placeholder="Please enter contractNo" clearable style="width: 240px" | ||
| 36 | + @keyup.enter="handleQuery" /> | ||
| 37 | + </el-form-item> | ||
| 38 | + <el-form-item label="Del:" prop="del"> | ||
| 39 | + <el-input v-model="queryParams.del" placeholder="Please enter del" clearable style="width: 240px" | ||
| 40 | + @keyup.enter="handleQuery" /> | ||
| 41 | + </el-form-item> | ||
| 42 | + <el-form-item label="EX-Fact:" prop="exFact"> | ||
| 43 | + <el-input v-model="queryParams.exFact" placeholder="Please enter exFact" clearable style="width: 240px" | ||
| 44 | + @keyup.enter="handleQuery" /> | ||
| 45 | + </el-form-item> | ||
| 46 | + <el-form-item> | ||
| 47 | + <el-button type="primary" icon="Search" @click="handleQuery">Search</el-button> | ||
| 48 | + <el-button icon="Refresh" @click="resetQuery">Reset</el-button> | ||
| 49 | + </el-form-item> | ||
| 50 | + </el-form> | ||
| 51 | + <div class="title">任务详情</div> | ||
| 52 | + | ||
| 53 | + <right-toolbar v-model:showSearch="showSearch" :search="false" @queryTable="getList"> | ||
| 54 | + <el-row :gutter="10" class="mb8"> | ||
| 55 | + <el-col :span="1.5"> | ||
| 56 | + <el-button type="primary" plain :disabled="detailData.status !== 'ONGOING'" icon="Plus" | ||
| 57 | + @click="addTask">新增</el-button> | ||
| 58 | + </el-col> | ||
| 59 | + <el-col :span="1.5"> | ||
| 60 | + <el-button type="primary" plain icon="Download" @click="handleExportDiff">导出回收差异表</el-button> | ||
| 61 | + </el-col> | ||
| 62 | + <el-col :span="1.5"> | ||
| 63 | + <el-button type="primary" plain icon="Download" @click="handleExportResult">导出分拣结果表</el-button> | ||
| 64 | + </el-col> | ||
| 65 | + | ||
| 66 | + <el-col :span="1.5"> | ||
| 67 | + <el-button type="primary" plain icon="Delete" @click="handleDeleteCheck">批量删除待复核</el-button> | ||
| 68 | + </el-col> | ||
| 69 | + </el-row> | ||
| 70 | + </right-toolbar> | ||
| 71 | + | ||
| 72 | + <!-- Table Data --> | ||
| 73 | + <el-table v-loading="loading" :data="dataList"> | ||
| 74 | + <el-table-column v-for="(column, columnIndex) in columnList" :key="columnIndex" :label="column.label" | ||
| 75 | + :prop="column.prop" :show-overflow-tooltip="column.showOverflowTooltip || true" | ||
| 76 | + :align="column.align || 'center'" :width="column.width || 'auto'"> | ||
| 77 | + <template #default="scope"> | ||
| 78 | + <span v-if="column.prop === 'status'" :style="{ | ||
| 79 | + fontWeight: 500, | ||
| 80 | + color: | ||
| 81 | + scope.row[column.prop] == 'COMPLETED' | ||
| 82 | + ? '#27B148' | ||
| 83 | + : scope.row[column.prop] === 'WAITING' | ||
| 84 | + ? '#ff6200' | ||
| 85 | + : '#409EFF', | ||
| 86 | + }"> | ||
| 87 | + {{ scope.row[column.prop] || "/" }} | ||
| 88 | + </span> | ||
| 89 | + <span v-else>{{ scope.row[column.prop] || "/" }}</span> | ||
| 90 | + </template> | ||
| 91 | + </el-table-column> | ||
| 92 | + | ||
| 93 | + <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width"> | ||
| 94 | + <template #default="scope"> | ||
| 95 | + <el-tooltip content="删除" placement="top"> | ||
| 96 | + <el-button link type="primary" @click="delItem(scope.row)">删除</el-button> | ||
| 97 | + </el-tooltip> | ||
| 98 | + </template> | ||
| 99 | + </el-table-column> | ||
| 100 | + </el-table> | ||
| 101 | + | ||
| 102 | + <pagination v-show="total > 0" :total="total" layout="prev, pager, next" v-model:page="queryParams.pageNo" | ||
| 103 | + v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||
| 104 | + | ||
| 105 | + <!-- Add or Edit User Config Dialog --> | ||
| 106 | + <el-dialog :title="title" v-model="open" width="500px" append-to-body> | ||
| 107 | + <el-form :model="form" :rules="rules" @submit.prevent ref="userRef" label-width="120px"> | ||
| 108 | + <el-row> | ||
| 109 | + <el-col :span="24"> | ||
| 110 | + <el-form-item label="串码" prop="barcode"> | ||
| 111 | + <el-input v-model="form.barcode" placeholder="请输入串码" /> | ||
| 112 | + </el-form-item> | ||
| 113 | + </el-col> | ||
| 114 | + </el-row> | ||
| 115 | + </el-form> | ||
| 116 | + <template #footer> | ||
| 117 | + <div class="dialog-footer"> | ||
| 118 | + <el-button type="primary" :loading="isLoading" @click="submitForm">确认</el-button> | ||
| 119 | + <el-button @click="() => (open = false)">取消</el-button> | ||
| 120 | + </div> | ||
| 121 | + </template> | ||
| 122 | + </el-dialog> | ||
| 123 | + | ||
| 124 | + <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body> | ||
| 125 | + <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" | ||
| 126 | + :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" | ||
| 127 | + :auto-upload="false" drag> | ||
| 128 | + <el-icon class="el-icon--upload"><upload-filled /></el-icon> | ||
| 129 | + <div class="el-upload__text"> | ||
| 130 | + Drag file here, or <em>click to upload</em> | ||
| 131 | + </div> | ||
| 132 | + <template #tip> | ||
| 133 | + <div class="el-upload__tip text-center"> | ||
| 134 | + <span>Only xls, xlsx files are allowed.</span> | ||
| 135 | + <!-- <el-link | ||
| 136 | + type="primary" | ||
| 137 | + :underline="false" | ||
| 138 | + style="font-size: 12px; vertical-align: baseline" | ||
| 139 | + @click="importTemplate" | ||
| 140 | + >Download Template</el-link> --> | ||
| 141 | + </div> | ||
| 142 | + </template> | ||
| 143 | + </el-upload> | ||
| 144 | + <template #footer> | ||
| 145 | + <div class="dialog-footer"> | ||
| 146 | + <el-button type="primary" @click="submitFileForm">Confirm</el-button> | ||
| 147 | + <el-button @click="upload.open = false">Cancel</el-button> | ||
| 148 | + </div> | ||
| 149 | + </template> | ||
| 150 | + </el-dialog> | ||
| 151 | + </div> | ||
| 152 | +</template> | ||
| 153 | + | ||
| 154 | +<script setup> | ||
| 155 | +import { getToken } from "@/utils/auth"; | ||
| 156 | +import { formatDate } from "@/utils/index"; | ||
| 157 | + | ||
| 158 | +import { onMounted, ref } from "vue"; | ||
| 159 | +import { addScanItem, scanTaskdetal, scanTaskQueryList, deleteScanItem, deleteReviewItemTask } from "@/api/system/scan"; | ||
| 160 | + | ||
| 161 | +const router = useRouter(); | ||
| 162 | +const route = useRoute(); | ||
| 163 | +const { proxy } = getCurrentInstance(); | ||
| 164 | + | ||
| 165 | +const dataList = ref([]); | ||
| 166 | +const loading = ref(true); | ||
| 167 | +const showSearch = ref(true); | ||
| 168 | +const total = ref(0); | ||
| 169 | +const dateRange = ref([]); | ||
| 170 | + | ||
| 171 | +const columnList = ref([ | ||
| 172 | + { | ||
| 173 | + label: "设备类型", | ||
| 174 | + prop: "deviceTypeName", | ||
| 175 | + width: 100, | ||
| 176 | + }, | ||
| 177 | + { | ||
| 178 | + label: "规格型号", | ||
| 179 | + prop: "model", | ||
| 180 | + width: 150, | ||
| 181 | + }, | ||
| 182 | + { | ||
| 183 | + label: "串码", | ||
| 184 | + prop: "barcode", | ||
| 185 | + width: 150, | ||
| 186 | + }, | ||
| 187 | + { | ||
| 188 | + label: "重量", | ||
| 189 | + prop: "weight", | ||
| 190 | + width: 150, | ||
| 191 | + }, | ||
| 192 | + { | ||
| 193 | + label: "状态", | ||
| 194 | + prop: "status", | ||
| 195 | + width: 150, | ||
| 196 | + }, | ||
| 197 | + { | ||
| 198 | + label: "分拣时间", | ||
| 199 | + prop: "scanTime", | ||
| 200 | + width: 200, | ||
| 201 | + }, | ||
| 202 | + { | ||
| 203 | + label: "分拣结果", | ||
| 204 | + prop: "scanResult" | ||
| 205 | + }, | ||
| 206 | + { | ||
| 207 | + label: "备注", | ||
| 208 | + prop: "remark", | ||
| 209 | + width: 200 | ||
| 210 | + }, | ||
| 211 | + { | ||
| 212 | + label: "分拣人", | ||
| 213 | + prop: "scanBy", | ||
| 214 | + width: 150, | ||
| 215 | + }, | ||
| 216 | + { | ||
| 217 | + label: "分检口号", | ||
| 218 | + prop: "sortingNo", | ||
| 219 | + width: 150 | ||
| 220 | + }, | ||
| 221 | + { | ||
| 222 | + label: "袋码", | ||
| 223 | + prop: "scanBoxNumber", | ||
| 224 | + width: 180 | ||
| 225 | + }, | ||
| 226 | +]); | ||
| 227 | + | ||
| 228 | +const data = reactive({ | ||
| 229 | + form: {}, | ||
| 230 | + queryParams: { | ||
| 231 | + pageNo: 1, | ||
| 232 | + pageSize: 10, | ||
| 233 | + scanTaskId: route.query.scanTaskId | ||
| 234 | + }, | ||
| 235 | + rules: { | ||
| 236 | + barcode: [{ required: true, message: "请输入串码", trigger: "blur" }], | ||
| 237 | + }, | ||
| 238 | +}); | ||
| 239 | + | ||
| 240 | +const { queryParams, form, rules } = toRefs(data); | ||
| 241 | + | ||
| 242 | +const open = ref(false); | ||
| 243 | +const title = ref(""); | ||
| 244 | +const isLoading = ref(false) | ||
| 245 | +function submitForm() { | ||
| 246 | + proxy.$refs["userRef"].validate((valid) => { | ||
| 247 | + if (valid) { | ||
| 248 | + isLoading.value = true | ||
| 249 | + addScanItem({ | ||
| 250 | + ...form.value, | ||
| 251 | + scanTaskId: route.query.scanTaskId | ||
| 252 | + }).then((response) => { | ||
| 253 | + proxy.$modal.msgSuccess("新增成功!"); | ||
| 254 | + open.value = false; | ||
| 255 | + | ||
| 256 | + getList(); | ||
| 257 | + }).finally(() => { | ||
| 258 | + isLoading.value = false | ||
| 259 | + }) | ||
| 260 | + } | ||
| 261 | + }); | ||
| 262 | +} | ||
| 263 | + | ||
| 264 | +const addTask = () => { | ||
| 265 | + reset(); | ||
| 266 | + title.value = '新增任务' | ||
| 267 | + open.value = true | ||
| 268 | +} | ||
| 269 | + | ||
| 270 | +const handleDeleteCheck = () => { | ||
| 271 | + proxy.$modal | ||
| 272 | + .confirm("确认批量删除待复核?") | ||
| 273 | + .then(() => { | ||
| 274 | + deleteReviewItemTask(route.query.scanTaskId).then((response) => { | ||
| 275 | + proxy.$modal.msgSuccess("批量删除待复核成功!"); | ||
| 276 | + getList(); | ||
| 277 | + }); | ||
| 278 | + }) | ||
| 279 | + .catch(() => { | ||
| 280 | + proxy.$modal.msgWarning("已取消"); | ||
| 281 | + }); | ||
| 282 | +} | ||
| 283 | + | ||
| 284 | +const delItem = (row) => { | ||
| 285 | + proxy.$modal | ||
| 286 | + .confirm("确认删除?") | ||
| 287 | + .then(() => { | ||
| 288 | + deleteScanItem(row.id).then((response) => { | ||
| 289 | + proxy.$modal.msgSuccess("删除成功!"); | ||
| 290 | + getList(); | ||
| 291 | + }); | ||
| 292 | + }) | ||
| 293 | + .catch(() => { | ||
| 294 | + proxy.$modal.msgWarning("已取消"); | ||
| 295 | + }); | ||
| 296 | +}; | ||
| 297 | + | ||
| 298 | +const handleExportDiff = () => { | ||
| 299 | + proxy.download( | ||
| 300 | + "/scanSpec/difference/export", | ||
| 301 | + { | ||
| 302 | + scanTaskId: route.query.scanTaskId, | ||
| 303 | + status: 'COMPLETED' | ||
| 304 | + }, | ||
| 305 | + `回收差异表.xlsx`, | ||
| 306 | + { | ||
| 307 | + headers: {} | ||
| 308 | + }, | ||
| 309 | + false | ||
| 310 | + ); | ||
| 311 | +}; | ||
| 312 | + | ||
| 313 | +const handleExportResult = () => { | ||
| 314 | + proxy.download( | ||
| 315 | + "/scanItem/result/export", | ||
| 316 | + { | ||
| 317 | + scanTaskId: route.query.scanTaskId, | ||
| 318 | + status: 'COMPLETED' | ||
| 319 | + }, | ||
| 320 | + `分拣结果表.xlsx`, | ||
| 321 | + { | ||
| 322 | + headers: {} | ||
| 323 | + }, | ||
| 324 | + false | ||
| 325 | + ); | ||
| 326 | +}; | ||
| 327 | +// Reset operation form | ||
| 328 | +function reset() { | ||
| 329 | + form.value = { | ||
| 330 | + scanTaskId: route.query.scanTaskId, | ||
| 331 | + barcode: undefined | ||
| 332 | + }; | ||
| 333 | + proxy.resetForm("userRef"); | ||
| 334 | +} | ||
| 335 | + | ||
| 336 | +function handleAdd() { | ||
| 337 | + reset(); | ||
| 338 | + open.value = true; | ||
| 339 | + title.value = "Add Order"; | ||
| 340 | +} | ||
| 341 | + | ||
| 342 | +// Query list | ||
| 343 | +const getList = () => { | ||
| 344 | + loading.value = true; | ||
| 345 | + scanTaskQueryList(proxy.addDateRange(queryParams.value, dateRange.value)).then( | ||
| 346 | + (res) => { | ||
| 347 | + loading.value = false; | ||
| 348 | + dataList.value = res.data.records.map(item => ({ | ||
| 349 | + ...item, | ||
| 350 | + scanTime: formatDate(item.scanTime) | ||
| 351 | + })) | ||
| 352 | + total.value = res.data.total; | ||
| 353 | + } | ||
| 354 | + ); | ||
| 355 | +}; | ||
| 356 | + | ||
| 357 | +// Search button operation | ||
| 358 | +const handleQuery = () => { | ||
| 359 | + queryParams.value.pageNo = 1; | ||
| 360 | + getList(); | ||
| 361 | +}; | ||
| 362 | + | ||
| 363 | +// Reset button operation | ||
| 364 | +const resetQuery = () => { | ||
| 365 | + dateRange.value = []; | ||
| 366 | + proxy.resetForm("queryRef"); | ||
| 367 | + handleQuery(); | ||
| 368 | +}; | ||
| 369 | + | ||
| 370 | +const upload = reactive({ | ||
| 371 | + open: false, | ||
| 372 | + title: "Import", | ||
| 373 | + isUploading: false, | ||
| 374 | + updateSupport: 0, | ||
| 375 | + headers: { Authorization: "Bearer " + getToken() }, | ||
| 376 | + url: import.meta.env.VITE_APP_BASE_API + "/scan/specification/import", | ||
| 377 | +}); | ||
| 378 | + | ||
| 379 | +const uploadRef = ref(null); | ||
| 380 | + | ||
| 381 | +const handleImport = () => { | ||
| 382 | + upload.title = "Import"; | ||
| 383 | + upload.open = true; | ||
| 384 | + upload.isUploading = false; | ||
| 385 | + upload.updateSupport = 0; | ||
| 386 | +}; | ||
| 387 | + | ||
| 388 | +const handleFileUploadProgress = (event, file, fileList) => { | ||
| 389 | + upload.isUploading = true; | ||
| 390 | +}; | ||
| 391 | + | ||
| 392 | +const handleFileSuccess = (response, file, fileList) => { | ||
| 393 | + upload.isUploading = false; | ||
| 394 | + if (response.code === 200) { | ||
| 395 | + upload.open = false; | ||
| 396 | + proxy.$modal.msgSuccess(response.msg); | ||
| 397 | + getList(); // Refresh main table | ||
| 398 | + } else { | ||
| 399 | + proxy.$modal.msgError(response.msg); | ||
| 400 | + } | ||
| 401 | +}; | ||
| 402 | + | ||
| 403 | +const importTemplate = () => { | ||
| 404 | + proxy.download("/system/user/importTemplate"); | ||
| 405 | +}; | ||
| 406 | + | ||
| 407 | +const submitFileForm = () => { | ||
| 408 | + uploadRef.value.submit(); | ||
| 409 | +}; | ||
| 410 | + | ||
| 411 | +const enterDetail = (row) => { | ||
| 412 | + router.push({ | ||
| 413 | + path: "/scan-manage/order-manage/order-detail", | ||
| 414 | + query: { | ||
| 415 | + scanTaskId: row.scanTaskId, | ||
| 416 | + scanOrderId: row.id, | ||
| 417 | + }, | ||
| 418 | + }); | ||
| 419 | +}; | ||
| 420 | + | ||
| 421 | +const detailData = ref({}); | ||
| 422 | +const getDetail = () => { | ||
| 423 | + scanTaskdetal(proxy.$route.query.scanTaskId).then((res) => { | ||
| 424 | + detailData.value = res.data; | ||
| 425 | + detailData.value.createTime = formatDate(detailData.value.createTime) | ||
| 426 | + }); | ||
| 427 | +}; | ||
| 428 | + | ||
| 429 | +onMounted(() => { | ||
| 430 | + getList(); | ||
| 431 | + getDetail(); | ||
| 432 | +}); | ||
| 433 | +</script> | ||
| 434 | + | ||
| 435 | +<style lang="scss" scoped> | ||
| 436 | +.el-divider--horizontal { | ||
| 437 | + margin: 10px 0 24px; | ||
| 438 | +} | ||
| 439 | + | ||
| 440 | +.title { | ||
| 441 | + font-weight: 500; | ||
| 442 | + margin: 20px 0px 10px; | ||
| 443 | +} | ||
| 444 | +</style> | 
Please
register
or
login
to post a comment