| | |
| | | class="full-width"> |
| | | <el-option v-for="item in warehouseList" :value="item" :label="item" :key="item"></el-option> |
| | | </el-select> |
| | | <h4>è´§ä½æ</h4> |
| | | <el-select size="mini" @change="SCChange" v-model="Area.row" placeholder="è¯·éæ©æ" class="full-width"> |
| | | <el-option v-for="item in scList" :value="item" :label="'第' + item + 'æ'" :key="item"></el-option> |
| | | <h4>å··é</h4> |
| | | <el-select size="mini" @change="SCChange" v-model="Area.roadwayNo" placeholder="è¯·éæ©å··é" class="full-width"> |
| | | <el-option v-for="item in scList" :value="item" :label="item" :key="item"></el-option> |
| | | </el-select> |
| | | <el-button type="success" class="refresh-btn" @click="GetViewData"> |
| | | å·æ° |
| | |
| | | |
| | | <!-- è´§ä½å±ç¤ºåºå --> |
| | | <div v-if="loading" class="loading-container"> |
| | | <el-icon class="is-loading"> |
| | | <Loading /> |
| | | </el-icon> |
| | | <span>å è½½ä¸...</span> |
| | | </div> |
| | | |
| | | <div v-else-if="locationData.length === 0" class="empty-container"> |
| | | <div |
| | | v-else-if="(!locationData.row1 || locationData.row1.length === 0) && (!locationData.row2 || locationData.row2.length === 0)" |
| | | class="empty-container"> |
| | | <el-empty description="ææ æ°æ®" /> |
| | | </div> |
| | | |
| | | <div v-else> |
| | | <div class="location-view"> |
| | | <div class="layer-container" v-for="(item, index) in locationData" :key="index"> |
| | | <h3 class="layer-title">第{{ item.layer }}å±</h3> |
| | | <div class="row"> |
| | | <!-- 第1æï¼ä¸é¢ï¼ --> |
| | | <div class="roadway-section"> |
| | | <h2 class="roadway-title">{{ Area.roadwayNo }} 第1å··é第1æ(ä¸é¢:å>å)</h2> |
| | | <div class="row" v-for="(item, index) in locationData.row1" :key="'row1-' + index"> |
| | | <div class="location-cell" :style="{ 'background-color': GetBgColor(column) }" |
| | | v-for="(column, index) in item.locationObj" :key="index" @mouseenter="showTooltip(column, $event)" |
| | | @mouseleave="hideTooltip"> |
| | | {{ column.row }}-{{ column.column }}-{{ column.layer }} |
| | | v-for="(column, colIndex) in item.locationObj" :key="'row1-' + item.layer + '-' + colIndex" |
| | | @mouseenter="showTooltip(column, $event)" @mouseleave="hideTooltip"> |
| | | {{ getRoadwayNo(column) }}-{{ column.column }}-{{ column.layer }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 第2æï¼è¥¿é¢ï¼ --> |
| | | <div class="roadway-section"> |
| | | <h2 class="roadway-title">{{ Area.roadwayNo }} 第1å··é第2æ(西é¢:å>å)</h2> |
| | | <div class="row" v-for="(item, index) in locationData.row2" :key="'row2-' + index"> |
| | | <div class="location-cell" :style="{ 'background-color': GetBgColor(column) }" |
| | | v-for="(column, colIndex) in item.locationObj" :key="'row2-' + item.layer + '-' + colIndex" |
| | | @mouseenter="showTooltip(column, $event)" @mouseleave="hideTooltip"> |
| | | {{ getRoadwayNo(column) }}-{{ column.column }}-{{ column.layer }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | top: tooltipPosition.y + 'px', |
| | | }"> |
| | | <div v-if="currentLocation"> |
| | | <p><strong>ä»åº:</strong>{{ Area.warehouse || "æªéæ©" }}</p> |
| | | <p><strong>è´§ä½å·:</strong>{{ currentLocation.locationCode }}</p> |
| | | <!-- <p><strong>æç®±å·:</strong>{{ currentLocation.barCode ? currentLocation.barCode : "æ æç®±" }}</p> --> |
| | | <p><strong>ä»åº:</strong><span>{{ Area.warehouse || "æªéæ©" }}</span></p> |
| | | <p><strong>è´§ä½å·:</strong><span>{{ currentLocation.locationCode }}</span></p> |
| | | <!-- æ ¹æ®ä»åºç±»åæ¾ç¤ºä¸åçæ ç¾åå
容 --> |
| | | <p v-if="Area.warehouse === 'åæåº'"> |
| | | <strong>RFID:</strong>{{ this.rfidData[currentLocation.locationCode] || "æ " }} |
| | | </p> |
| | | <p v-else-if="Area.warehouse === 'æååº'"> |
| | | <strong>æçå·:</strong>{{ this.rfidData[currentLocation.locationCode] || "æ " }} |
| | | </p> |
| | | <p v-else> |
| | | <strong>æ è¯:</strong>{{ this.rfidData[currentLocation.locationCode] || "æ " }} |
| | | </p> |
| | | <!-- åæåºæ¾ç¤ºå
容 --> |
| | | <div v-if="Area.warehouse === 'åæåº'"> |
| | | <p><strong>纸å·:</strong><span>{{ currentLocation.paperRoll || "æ " }}</span></p> |
| | | <p><strong>é¨å¹
:</strong><span>{{ currentLocation.width ? currentLocation.width + "m" : "æ " }}</span></p> |
| | | <p><strong>æ¡ç :</strong><span>{{ currentLocation.barcode || "æ " }}</span></p> |
| | | <p><strong>RFID:</strong><span>{{ currentLocation.rfid || "æ " }}</span></p> |
| | | </div> |
| | | <!-- æååºæ¾ç¤ºå
容 --> |
| | | <div v-else-if="Area.warehouse === 'æååº'"> |
| | | <p><strong>æååç§°:</strong><span>{{ currentLocation.productName || currentLocation.paperRoll || "æ " }}</span></p> |
| | | <p><strong>æåæ°é:</strong><span>{{ currentLocation.quantity || currentLocation.width || "æ " }}</span></p> |
| | | <p><strong>æçå·:</strong><span>{{ currentLocation.rfid || currentLocation.rfidCode || |
| | | this.rfidData[currentLocation.locationCode] || "æ " }}</span></p> |
| | | </div> |
| | | <p> |
| | | <strong>æåå±:</strong> {{ currentLocation.row }}æ{{ |
| | | currentLocation.column |
| | | }}å{{ currentLocation.layer }}å± |
| | | <strong>æåå±:</strong> <span>{{ currentLocation.row }}æ{{ currentLocation.column }}å{{ currentLocation.layer |
| | | }}å±</span> |
| | | </p> |
| | | <p><strong>ç¶æ:</strong> {{ getStatusText(currentLocation) }}</p> |
| | | <!-- <p> |
| | | <strong>ç¦ç¨:</strong> |
| | | {{ currentLocation.location_lock == 3 ? "æ¯" : "å¦" }} |
| | | </p> --> |
| | | <!-- <p v-if="currentLocation.location_state > 0"> |
| | | <strong>ç©æç¼ç :</strong> |
| | | {{ currentLocation.material_code || "æ " }} |
| | | </p> |
| | | <p v-if="currentLocation.location_state > 0"> |
| | | <strong>æ°é:</strong> {{ currentLocation.quantity || "æ " }} |
| | | </p> --> |
| | | <p><strong>ç¶æ:</strong> <span>{{ getStatusText(currentLocation) }}</span></p> |
| | | <p><strong>å
¥åºæ¥æ:</strong><span>{{ currentLocation.inDate ? new Date(currentLocation.inDate).toLocaleString() : |
| | | "æ " }}</span></p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { ElButton, Loading } from "element-plus"; |
| | | import { ElButton } from "element-plus"; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | slectData: [], |
| | | scList: [], |
| | | warehouseList: ["åæåº", "æååº"], |
| | | warehouseMap: { |
| | | "åæåº": 1, |
| | | "æååº": 2 |
| | | }, |
| | | Area: { |
| | | warehouse: "åæåº", |
| | | row: "", |
| | | shelf_code: "" |
| | | }, |
| | | mian_height: "", |
| | | loading: false, |
| | | infoMsg: [ |
| | | { bgcolor: "lightgreen", msg: "空é²", state: 0 }, |
| | | { bgcolor: "orange", msg: "æè´§", state: 100 }, |
| | | { bgcolor: "#2BB3D5", msg: "éå®", state: 1 }, |
| | | { bgcolor: "yellow", msg: "空é²éå®", state: 20 }, |
| | | { bgcolor: "purple", msg: "æè´§éå®", state: 10 }, |
| | | ], |
| | | locationData: [], |
| | | showTooltipFlag: false, |
| | | currentLocation: null, |
| | | tooltipPosition: { x: 0, y: 0 }, |
| | | rfidData: {}, // åå¨è´§ä½ç¼å·ä¸RFIDçæ å°å
³ç³» |
| | | }; |
| | | }, |
| | | return { |
| | | slectData: [], |
| | | scList: [], |
| | | allRoadways: [], // ä¿åææå··éå表 |
| | | warehouseList: ["åæåº", "æååº"], |
| | | warehouseMap: { |
| | | "åæåº": 1, |
| | | "æååº": 2 |
| | | }, |
| | | // å··éç±»åæ å° |
| | | roadwayTypeMap: { |
| | | "åæåº": ["SC01_YL", "SC02_YL", "SC03_YLDual", "SC04_YLDual", "SC05_YLDual"], |
| | | "æååº": ["SC01_CP", "SC02_CP", "SC03_CP", "SC04_CP", "SC05_CP"] |
| | | }, |
| | | Area: { |
| | | warehouse: "åæåº", |
| | | roadwayNo: "", |
| | | shelf_code: "" |
| | | }, |
| | | mian_height: "", |
| | | loading: false, |
| | | infoMsg: [ |
| | | { bgcolor: "#f0f0f0", msg: "空é²", state: 0 }, |
| | | { bgcolor: "#90ee90", msg: "æè´§", state: 100 }, |
| | | { bgcolor: "#a0a0a0", msg: "空é²éå®", state: 20 }, |
| | | { bgcolor: "#228b22", msg: "æè´§éå®", state: 10 }, |
| | | { bgcolor: "#2BB3D5", msg: "ä¸ç¨è´§ä½", state: 3 }, |
| | | ], |
| | | locationData: [], |
| | | showTooltipFlag: false, |
| | | currentLocation: null, |
| | | tooltipPosition: { x: 0, y: 0 }, |
| | | rfidData: {}, // åå¨è´§ä½ç¼å·ä¸RFIDçæ å°å
³ç³» |
| | | }; |
| | | }, |
| | | computed: { |
| | | GetBgColor() { |
| | | return (col) => { |
| | | var bgColor = ""; |
| | | //ä¼å
æ¾ç¤ºç¦ç¨ç¶æ |
| | | if (col.location_lock > 0) { |
| | | this.infoMsg.forEach((el) => { |
| | | if (el.state === col.location_lock) { |
| | | bgColor = el.bgcolor; |
| | | } |
| | | }); |
| | | } |
| | | else { |
| | | return "lightgreen"; |
| | | //æ ¹æ®ç¶æè®¾ç½®é¢è² |
| | | switch (col.location_lock) { |
| | | case 0: //ç©ºé² |
| | | bgColor = "#f0f0f0"; //徿µ
ç° |
| | | break; |
| | | case 20: //空é²éå® |
| | | bgColor = "#a0a0a0"; //æ·±ç° |
| | | break; |
| | | case 100: //æè´§ |
| | | bgColor = "#90ee90"; //æµ
绿 |
| | | break; |
| | | case 10: //æè´§éå® |
| | | bgColor = "#228b22"; //深绿 |
| | | break; |
| | | case 3: //ä¸ç¨åºä½ |
| | | bgColor = "#2BB3D5"; //èè²(ä¸å) |
| | | break; |
| | | default: |
| | | bgColor = "#f0f0f0"; //é»è®¤å¾æµ
ç° |
| | | } |
| | | return bgColor; |
| | | }; |
| | |
| | | console.log("RFIDæ¥è¯¢APIè¿åç»æ:", response); |
| | | if (response.status && response.data) { |
| | | console.log(`æåè·å${response.data.length}æ¡RFIDè®°å½`); |
| | | // æ´æ°rfidDataæ å° |
| | | |
| | | // å°RFIDæ°æ®è½¬æ¢ä¸ºä»¥locationCode为é®çæ å° |
| | | const rfidDataMap = {}; |
| | | response.data.forEach((item, index) => { |
| | | try { |
| | | // æ£æ¥å段åï¼æ¯æå¤§å°åä¸¤ç§æ ¼å¼ |
| | | const locationCode = item.LocationCode || item.locationCode; |
| | | const rfidCode = item.RfidCode || item.rfidCode; |
| | | |
| | | if (item && locationCode !== undefined) { |
| | | console.log(`æ´æ°RFIDæ°æ®: ${locationCode} -> ${rfidCode}`); |
| | | this.rfidData[locationCode] = rfidCode; |
| | | rfidDataMap[locationCode] = { |
| | | paperRoll: item.PaperRoll || item.paperRoll || "", |
| | | productName: item.ProductName || item.productName || item.PaperRoll || item.paperRoll || "", // ä¼å
使ç¨ProductNameåæ®µ |
| | | width: item.Width || item.width || 0, |
| | | quantity: item.Quantity || item.quantity || item.Width || item.width || 0, // ä¼å
使ç¨Quantityåæ®µ |
| | | barcode: item.Barcode || item.barcode || "", |
| | | rfid: item.RfidCode || item.rfidCode || "", |
| | | rfidCode: item.RfidCode || item.rfidCode || "", // ç¡®ä¿rfidCodeåæ®µåå¨ |
| | | status: item.Status || item.status || 0, |
| | | inDate: item.InDate || item.inDate || null |
| | | }; |
| | | } else { |
| | | console.warn(`è·³è¿æ æçRFIDæ°æ®é¡¹(${index}):`, item); |
| | | } |
| | |
| | | console.error(`å¤çRFIDæ°æ®é¡¹(${index})æ¶åºé:`, error, item); |
| | | } |
| | | }); |
| | | console.log("æ´æ°åçrfidData:", this.rfidData); |
| | | |
| | | console.log("RFIDæ°æ®æ å°:", rfidDataMap); |
| | | |
| | | // æ´æ°è´§ä½æ°æ®ï¼å°RFIDä¿¡æ¯åå¹¶å°å¯¹åºçè´§ä½å¯¹è±¡ä¸ |
| | | |
| | | // å¤ç第1ææ°æ® |
| | | if (this.locationData.row1) { |
| | | this.locationData.row1.forEach(layer => { |
| | | layer.locationObj.forEach(location => { |
| | | const rfidInfo = rfidDataMap[location.locationCode]; |
| | | if (rfidInfo) { |
| | | // æ´æ°è´§ä½å¯¹è±¡çåæ®µ |
| | | location.paperRoll = rfidInfo.paperRoll; |
| | | location.productName = rfidInfo.productName; // æ°å¢æååç§°åæ®µ |
| | | location.width = rfidInfo.width; |
| | | location.quantity = rfidInfo.quantity; // æ°å¢æåæ°éåæ®µ |
| | | location.barcode = rfidInfo.barcode; |
| | | location.rfid = rfidInfo.rfid; |
| | | location.rfidCode = rfidInfo.rfidCode; // æ°å¢rfidCodeåæ®µ |
| | | location.status = rfidInfo.status; |
| | | location.inDate = rfidInfo.inDate; |
| | | // æ´æ°rfidDataæ å°ï¼ä¿æååå
¼å®¹ï¼ |
| | | this.rfidData[location.locationCode] = rfidInfo.rfid || rfidInfo.rfidCode; // 使ç¨rfidærfidCodeä½ä¸ºæçå· |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | // å¤ç第2ææ°æ® |
| | | if (this.locationData.row2) { |
| | | this.locationData.row2.forEach(layer => { |
| | | layer.locationObj.forEach(location => { |
| | | const rfidInfo = rfidDataMap[location.locationCode]; |
| | | if (rfidInfo) { |
| | | // æ´æ°è´§ä½å¯¹è±¡çåæ®µ |
| | | location.paperRoll = rfidInfo.paperRoll; |
| | | location.productName = rfidInfo.productName; // æ°å¢æååç§°åæ®µ |
| | | location.width = rfidInfo.width; |
| | | location.quantity = rfidInfo.quantity; // æ°å¢æåæ°éåæ®µ |
| | | location.barcode = rfidInfo.barcode; |
| | | location.rfid = rfidInfo.rfid; |
| | | location.rfidCode = rfidInfo.rfidCode; // æ°å¢rfidCodeåæ®µ |
| | | location.status = rfidInfo.status; |
| | | location.inDate = rfidInfo.inDate; |
| | | // æ´æ°rfidDataæ å°ï¼ä¿æååå
¼å®¹ï¼ |
| | | this.rfidData[location.locationCode] = rfidInfo.rfid || rfidInfo.rfidCode; // 使ç¨rfidærfidCodeä½ä¸ºæçå· |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | console.log("æ´æ°åçè´§ä½æ°æ®:", this.locationData); |
| | | } else { |
| | | console.log("RFIDæ¥è¯¢APIè¿åç¶æå¤±è´¥ææ°æ®ä¸ºç©º"); |
| | | } |
| | |
| | | |
| | | this.loading = true; |
| | | this.rfidData = {}; // æ¸
空ä¹åçRFIDæ°æ® |
| | | this.locationData = { row1: [], row2: [] }; // åå§åæ°çæ°æ®ç»æ |
| | | |
| | | let warehouseId = 0; |
| | | if (this.Area.warehouse) { |
| | |
| | | console.log(`å½åéæ©çä»åº: ${this.Area.warehouse}, 对åºçwarehouseId: ${warehouseId}`); |
| | | } |
| | | |
| | | console.log(`è°ç¨GetLocationStatus API: row=${_this.Area.row}, warehouseId=${warehouseId}`); |
| | | |
| | | console.log(`è°ç¨GetLocationStatus API: roadwayNo=${_this.Area.roadwayNo}, warehouseId=${warehouseId}`); |
| | | |
| | | this.http |
| | | .post(`/api/LocationInfo/GetLocationStatus?row=${_this.Area.row}&warehouseId=${warehouseId}`, {}, "æ¥è¯¢ä¸") |
| | | .post(`/api/LocationInfo/GetLocationStatus?roadwayNo=${_this.Area.roadwayNo}&warehouseId=${warehouseId}`, {}, "æ¥è¯¢ä¸") |
| | | .then((x) => { |
| | | console.log("GetLocationStatus APIè¿åç»æ:", x); |
| | | this.locationData = x.data || []; |
| | | |
| | | if (x.data) { |
| | | this.locationData = x.data; |
| | | |
| | | // 对第1ææ°æ®è¿è¡æåº |
| | | if (this.locationData.row1) { |
| | | // æå±å·ä»é«å°ä½æåº |
| | | this.locationData.row1.sort((a, b) => parseInt(b.layer) - parseInt(a.layer)); |
| | | |
| | | // 对æ¯å±å
çè´§ä½æåå·ä»åå°åæåºï¼01-64ï¼ |
| | | this.locationData.row1.forEach(layer => { |
| | | layer.locationObj.sort((a, b) => { |
| | | // ç¡®ä¿åå·ææ°åé¡ºåºæå |
| | | const colA = parseInt(a.column); |
| | | const colB = parseInt(b.column); |
| | | return colA - colB; |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | // 对第2ææ°æ®è¿è¡åæ ·çæåº |
| | | if (this.locationData.row2) { |
| | | // æå±å·ä»é«å°ä½æåº |
| | | this.locationData.row2.sort((a, b) => parseInt(b.layer) - parseInt(a.layer)); |
| | | |
| | | // 对æ¯å±å
çè´§ä½æåå·ä»åå°åæåºï¼01-64ï¼ |
| | | this.locationData.row2.forEach(layer => { |
| | | layer.locationObj.sort((a, b) => { |
| | | // ç¡®ä¿åå·ææ°åé¡ºåºæå |
| | | const colA = parseInt(a.column); |
| | | const colB = parseInt(b.column); |
| | | return colA - colB; |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // æåææè´§ä½ç¼å· |
| | | let locationCodes = []; |
| | | this.locationData.forEach(layer => { |
| | | layer.locationObj.forEach(location => { |
| | | locationCodes.push(location.locationCode); |
| | | |
| | | // æå第1æè´§ä½ç¼å· |
| | | if (this.locationData.row1) { |
| | | this.locationData.row1.forEach(layer => { |
| | | layer.locationObj.forEach(location => { |
| | | locationCodes.push(location.locationCode); |
| | | // åå§åæ¯ä¸ªè´§ä½çRFIDç¸å
³å段 |
| | | if (!location.paperRoll) location.paperRoll = "æ "; |
| | | if (!location.productName) location.productName = "æ "; |
| | | if (!location.width) location.width = 0; |
| | | if (!location.quantity) location.quantity = 0; |
| | | if (!location.barcode) location.barcode = "æ "; |
| | | if (!location.rfid) location.rfid = "æ "; |
| | | if (!location.rfidCode) location.rfidCode = "æ "; |
| | | if (!location.inDate) location.inDate = null; |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | } |
| | | |
| | | // æå第2æè´§ä½ç¼å· |
| | | if (this.locationData.row2) { |
| | | this.locationData.row2.forEach(layer => { |
| | | layer.locationObj.forEach(location => { |
| | | locationCodes.push(location.locationCode); |
| | | // åå§åæ¯ä¸ªè´§ä½çRFIDç¸å
³å段 |
| | | if (!location.paperRoll) location.paperRoll = "æ "; |
| | | if (!location.productName) location.productName = "æ "; |
| | | if (!location.width) location.width = 0; |
| | | if (!location.quantity) location.quantity = 0; |
| | | if (!location.barcode) location.barcode = "æ "; |
| | | if (!location.rfid) location.rfid = "æ "; |
| | | if (!location.rfidCode) location.rfidCode = "æ "; |
| | | if (!location.inDate) location.inDate = null; |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | console.log(`ä»è´§ä½æ°æ®ä¸æåå°${locationCodes.length}个货ä½ç¼å·`); |
| | | console.log("æåçè´§ä½ç¼å·:", locationCodes); |
| | | |
| | | |
| | | // è°ç¨APIè·åRFIDä¿¡æ¯ |
| | | this.getRfidInfo(locationCodes, warehouseId); |
| | | }) |
| | |
| | | SCChange() { |
| | | this.GetViewData(); |
| | | }, |
| | | // æ ¹æ®ä»åºç±»åè¿æ»¤å··éå表 |
| | | filterRoadwaysByWarehouse(warehouse) { |
| | | const allowedRoadways = this.roadwayTypeMap[warehouse] || []; |
| | | this.scList = this.allRoadways.filter(roadway => allowedRoadways.includes(roadway)); |
| | | |
| | | // 妿å½åéä¸çå··éä¸å¨è¿æ»¤åçå表ä¸ï¼éç½®éæ© |
| | | if (this.Area.roadwayNo && !this.scList.includes(this.Area.roadwayNo)) { |
| | | this.Area.roadwayNo = this.scList[0] || ""; |
| | | } else if (!this.Area.roadwayNo && this.scList.length > 0) { |
| | | this.Area.roadwayNo = this.scList[0]; |
| | | } |
| | | }, |
| | | |
| | | // 忢ä»åº |
| | | onWarehouseChange() { |
| | | // 忢ä»åºæ¶éç½®æéæ© |
| | | // æ ¹æ®ä»åºç±»åè¿æ»¤å··éå表 |
| | | this.filterRoadwaysByWarehouse(this.Area.warehouse); |
| | | // éç½®æéæ©åè·åæ°æ® |
| | | this.GetViewData(); |
| | | }, |
| | | showTooltip(location, event) { |
| | |
| | | }, |
| | | |
| | | getStatusText(location) { |
| | | // if (location.location_lock === 3) return "ç¦ç¨"; |
| | | if (location.location_lock === 0) return "空é²"; |
| | | if (location.location_lock === 1) return "éå®"; |
| | | if (location.location_lock === 100) return "æè´§"; |
| | | if (location.location_lock === 20) return "空é²éå®"; |
| | | if (location.location_lock === 10) return "æè´§éå®"; |
| | | // if (location.location_state > 0 && location.location_state < 100) |
| | | // return "éå®"; |
| | | return "å
¶ä»"; |
| | | }, |
| | | getRoadwayNo(column) { |
| | | // æ ¹æ®ç¨æ·è¦æ±çè§åçææ ååå··éå· |
| | | // å··é/æï¼ä»ä¸å°è¥¿ 11ã12ã21ã22ã31ã32ã41ã42ã51ã52 |
| | | // åï¼ä»åå°å 01â64 |
| | | // å±ï¼01â10 |
| | | |
| | | if (column && column.locationCode && column.row) { |
| | | // æååå§å··éå·ï¼å¦SC01_YL |
| | | const locationCode = column.locationCode; |
| | | const row = column.row; |
| | | const originalRoadwayNo = locationCode.split('-')[0]; |
| | | |
| | | // æ ¹æ®åå§å··éå·åè¡å·æ å°å°æ ååå··éå· |
| | | const standardizedRoadwayMap = { |
| | | // åæåºå··éæ å° |
| | | // SC01_YL, 第1æ -> 11ï¼ç¬¬2æ -> 12 |
| | | 'SC01_YL': { |
| | | '01': '11', |
| | | '1': '11', |
| | | '02': '12', |
| | | '2': '12' |
| | | }, |
| | | // SC02_YL, 第1æ -> 21ï¼ç¬¬2æ -> 22 |
| | | 'SC02_YL': { |
| | | '01': '21', |
| | | '1': '21', |
| | | '02': '22', |
| | | '2': '22' |
| | | }, |
| | | // SC03_YLDual, 第1æ -> 31ï¼ç¬¬2æ -> 32 |
| | | 'SC03_YLDual': { |
| | | '01': '31', |
| | | '1': '31', |
| | | '02': '32', |
| | | '2': '32' |
| | | }, |
| | | // SC04_YLDual, 第1æ -> 41ï¼ç¬¬2æ -> 42 |
| | | 'SC04_YLDual': { |
| | | '01': '41', |
| | | '1': '41', |
| | | '02': '42', |
| | | '2': '42' |
| | | }, |
| | | // SC05_YLDual, 第1æ -> 51ï¼ç¬¬2æ -> 52 |
| | | 'SC05_YLDual': { |
| | | '01': '51', |
| | | '1': '51', |
| | | '02': '52', |
| | | '2': '52' |
| | | }, |
| | | // æååºå··éæ å° |
| | | // SC01_CP, 第1æ -> 11ï¼ç¬¬2æ -> 12 |
| | | 'SC01_CP': { |
| | | '01': '11', |
| | | '1': '11', |
| | | '02': '12', |
| | | '2': '12' |
| | | }, |
| | | // SC02_CP, 第1æ -> 21ï¼ç¬¬2æ -> 22 |
| | | 'SC02_CP': { |
| | | '01': '21', |
| | | '1': '21', |
| | | '02': '22', |
| | | '2': '22' |
| | | }, |
| | | // SC03_CP, 第1æ -> 31ï¼ç¬¬2æ -> 32 |
| | | 'SC03_CP': { |
| | | '01': '31', |
| | | '1': '31', |
| | | '02': '32', |
| | | '2': '32' |
| | | }, |
| | | // SC04_CP, 第1æ -> 41ï¼ç¬¬2æ -> 42 |
| | | 'SC04_CP': { |
| | | '01': '41', |
| | | '1': '41', |
| | | '02': '42', |
| | | '2': '42' |
| | | }, |
| | | // SC05_CP, 第1æ -> 51ï¼ç¬¬2æ -> 52 |
| | | 'SC05_CP': { |
| | | '01': '51', |
| | | '1': '51', |
| | | '02': '52', |
| | | '2': '52' |
| | | } |
| | | }; |
| | | |
| | | // ä»column.rowè·åè¡å·ï¼æ³¨æcolumn.rowæ¯å¸¦å导é¶çå符串 |
| | | const rowStr = row; |
| | | |
| | | // æ¥æ¾æ å° |
| | | if (standardizedRoadwayMap[originalRoadwayNo]) { |
| | | const rowMap = standardizedRoadwayMap[originalRoadwayNo]; |
| | | if (rowMap[rowStr]) { |
| | | return rowMap[rowStr]; |
| | | } |
| | | // å°è¯ä¸å¸¦å导é¶çæ
åµ |
| | | const rowStrWithoutZero = rowStr.replace(/^0/, ''); |
| | | if (rowMap[rowStrWithoutZero]) { |
| | | return rowMap[rowStrWithoutZero]; |
| | | } |
| | | } |
| | | |
| | | // å¦ææ²¡æå¹é
çæ å°ï¼è¿ååå§å··éå· |
| | | return originalRoadwayNo; |
| | | } |
| | | return ''; |
| | | }, |
| | | getWarehouseName(location) { |
| | | if (location.warehouseId === 1) return "åæåº"; |
| | | if (location.warehouseId === 2) return "æååº"; |
| | | return "æªç¥ä»åº"; |
| | | }, |
| | | } |
| | | }, |
| | | mounted() { |
| | | var mainHeight = document.getElementById("vol-main"); |
| | |
| | | var _this = this; |
| | | //å è½½ä¸æé项 |
| | | this.http.post("/api/LocationInfo/GetRow", {}, "æ¥è¯¢ä¸").then((x) => { |
| | | //å 载第ä¸ä¸ªåºåï¼ç¬¬ä¸æ |
| | | // _this.Area.shelf_code = _this.slectData[0].shelf_code; |
| | | _this.scList = x.data; |
| | | //ä¿åææå··é |
| | | _this.allRoadways = x.data; |
| | | //æ ¹æ®å½åä»åºç±»åè¿æ»¤å··é |
| | | _this.filterRoadwaysByWarehouse(_this.Area.warehouse); |
| | | if (_this.scList.length > 0) { |
| | | _this.Area.row = _this.scList[0]; |
| | | _this.Area.roadwayNo = _this.scList[0]; |
| | | } |
| | | _this.GetViewData(); |
| | | }); |
| | | }, |
| | | components: { ElButton, Loading }, |
| | | components: { ElButton } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .container { |
| | | display: flex; |
| | | flex-direction: column; |
| | | height: 100%; |
| | | width: 100%; |
| | | padding: 10px; |
| | | } |
| | | display: flex; |
| | | flex-direction: column; |
| | | height: 100%; |
| | | width: 100%; |
| | | padding: 10px; |
| | | } |
| | | |
| | | .header { |
| | | text-align: center; |
| | |
| | | } |
| | | |
| | | .location-view { |
| | | flex: 1; |
| | | width: 100%; |
| | | max-width: 100%; |
| | | overflow: auto; |
| | | padding: 10px; |
| | | background-color: white; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .layer-container { |
| | | margin-bottom: 25px; |
| | | } |
| | | |
| | | .layer-title { |
| | | margin: 0 0 10px 0; |
| | | font-size: 16px; |
| | | color: #333; |
| | | flex: 1; |
| | | width: 470%; |
| | | max-width: 470%; |
| | | overflow: auto; |
| | | padding: 20px; |
| | | background-color: #f5f7fa; |
| | | border-radius: 8px; |
| | | } |
| | | |
| | | .row { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-bottom: 8px; |
| | | cursor: pointer; |
| | | flex-wrap: nowrap; |
| | | } |
| | | |
| | | .location-cell { |
| | | width: 85px; |
| | | height: 38px; |
| | | margin: 3px; |
| | | width: 120px; |
| | | height: 50px; |
| | | margin: 5px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | border-radius: 3px; |
| | | line-height: 38px; |
| | | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); |
| | | font-size: 16px; |
| | | border-radius: 4px; |
| | | line-height: 50px; |
| | | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); |
| | | border: 1px solid #ccc; |
| | | background-color: #f9f9f9; |
| | | } |
| | | |
| | | /* å··éåºåæ ·å¼ */ |
| | | .roadway-section { |
| | | margin-bottom: 40px; |
| | | padding: 20px; |
| | | background-color: white; |
| | | border-radius: 6px; |
| | | border: 1px solid #eaeaea; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); |
| | | } |
| | | |
| | | .roadway-title { |
| | | margin: 0 0 20px 0; |
| | | font-size: 24px; |
| | | font-weight: bold; |
| | | color: #2c3e50; |
| | | text-align: left; |
| | | padding-bottom: 15px; |
| | | border-bottom: 3px solid #409EFF; |
| | | } |
| | | |
| | | .location-tooltip { |
| | |
| | | background-color: white; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | padding: 10px; |
| | | padding: 12px; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); |
| | | pointer-events: none; |
| | | max-width: 250px; |
| | | min-width: 280px; |
| | | max-width: 320px; |
| | | } |
| | | |
| | | .location-tooltip p { |
| | | margin: 5px 0; |
| | | font-size: 13px; |
| | | line-height: 1.4; |
| | | margin: 6px 0; |
| | | font-size: 14px; |
| | | line-height: 1.5; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .location-tooltip strong { |
| | | display: inline-block; |
| | | width: 70px; |
| | | color: #666; |
| | | width: 80px; |
| | | color: #555; |
| | | font-weight: 600; |
| | | text-align: right; |
| | | margin-right: 12px; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .location-tooltip span { |
| | | display: inline-block; |
| | | color: #333; |
| | | font-weight: 500; |
| | | flex: 1; |
| | | text-align: left; |
| | | } |
| | | |
| | | .form-group { |