| | |
| | | <template> |
| | | <div class="title"></div> |
| | | <div> |
| | | <!-- height:40px --> |
| | | <div class="title">åºä½å¹³é¢å¾</div> |
| | | |
| | | <!-- <div>åªæ¾ç¤ºä¸ä¸ªåºåçä¸ä¸ªå åæºå¯¹åºçç¶æ</div> --> |
| | | <div class="main" :style="{ height: mian_height }"> |
| | | <!-- å¹³é¢å¾æ¾ç¤ºåºå --> |
| | | <div class="right"> |
| | | <div v-for="layer in locationData" :key="layer.index"> |
| | | <div class="row_tip">第{{ layer.index }}å±</div> |
| | | <div class="row" v-for="row in layer.rows" :key="row.index"> |
| | | <el-tooltip |
| | | v-for="col in row.cols" |
| | | :key="col.column" |
| | | effect="dark" |
| | | placement="top" |
| | | :show-after="200" |
| | | :hide-after="0" |
| | | > |
| | | <template #content v-if="col.locationStatus == 99"> |
| | | <!-- <div>è´§ä½ç¶æï¼{{ getStatusText(col.locationStatus) }}</div> --> |
| | | <div>ç©æåç§°ï¼ {{ col.materielName }}</div> |
| | | <!-- <div>ç©æç¼å·ï¼ {{ col.materielCode }}</div> --> |
| | | <div>æ°éï¼{{ col.quantity }}æ</div> |
| | | <!-- <div>æçå·ï¼{{ col.palletCode }}</div> --> |
| | | </template> |
| | | <template #content v-else-if="col.locationStatus == 0"> |
| | | <div>空货ä½</div> |
| | | </template> |
| | | <template #content v-else> |
| | | <div> |
| | | è´§ä½åç§°ï¼{{ |
| | | col.row + "æ" + col.column + "å" + col.layer + "å±" |
| | | }} |
| | | </div> |
| | | <div>è´§ä½ç¶æï¼{{ getStatusText(col.locationStatus) }}</div> |
| | | <div>ç©æåç§°ï¼ {{ col.materielName }}</div> |
| | | <div>ç©æç¼å·ï¼ {{ col.materielCode }}</div> |
| | | <div>æ¹å·ï¼{{ col.orderNo }}</div> |
| | | <div>æå·ï¼{{ col.batchNo }}</div> |
| | | <div>æ°éï¼{{ col.quantity }}æ</div> |
| | | <!-- <div>æçå·ï¼{{ col.palletCode }}</div> --> |
| | | <div>å
¥åºæ¶é´ï¼{{ col.inDate }}</div> |
| | | <div>å¯ç¨ç¶æï¼{{ getEnableStatusText(col.enalbeStatus) }}</div> |
| | | </template> |
| | | <div |
| | | class="item" |
| | | :style="{ 'background-color': GetBgColor(col) }" |
| | | > |
| | | {{ row.index }}-{{ col.column }}-{{ layer.index }} |
| | | </div> |
| | | </el-tooltip> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- éæ©æç¤ºåºå --> |
| | | <div class="left"> |
| | | <!-- <div>åºåï¼</div> |
| | | <el-select |
| | | size="mini" |
| | | filterable |
| | | v-model="Area.shelf_code" |
| | | placeholder="è¯·éæ©" |
| | | > |
| | | <el-option |
| | | v-for="item in slectData" |
| | | :value="item.shelf_code" |
| | | :label="item.house_name" |
| | | :key="item.house_name" |
| | | ></el-option> |
| | | </el-select> --> |
| | | <!-- <div class="tipText">å åæºï¼</div> |
| | | <el-select |
| | | size="mini" |
| | | clearable |
| | | filterable |
| | | @change="SCChange" |
| | | v-model="Area.tunnel" |
| | | placeholder="è¯·éæ©" |
| | | > |
| | | <el-option |
| | | v-for="item in scList" |
| | | :value="item" |
| | | :label="item" |
| | | :key="item" |
| | | ></el-option> |
| | | </el-select> --> |
| | | <!-- <div class="tipText">å±ï¼</div> |
| | | <el-select |
| | | size="mini" |
| | | clearable |
| | | filterable |
| | | @change="SCChange" |
| | | v-model="Area.layer" |
| | | placeholder="è¯·éæ©" |
| | | > |
| | | <el-option |
| | | v-for="item in layers" |
| | | :value="item" |
| | | :label="item" |
| | | :key="item" |
| | | ></el-option> |
| | | </el-select> --> |
| | | <br /> |
| | | <ElButton type="success" class="btn" @click="GetViewData" |
| | | >å·æ°</ElButton |
| | | > |
| | | |
| | | <div style="margin-top: 80px"> |
| | | <!-- <div style="color: red">åºä½æåºè¯´æï¼æ-å-å±</div> |
| | | <div style="color: red">1+2æä¸ºé¿è´§ä½,3æä¸ºçè´§ä½</div> |
| | | <div style="color: red">1ä¸ªæ ¼å=12ä¸ªè´§ä½æå¤å¯æ¾12æ</div> --> |
| | | <div>说æ</div> |
| | | <div v-for="item in infoMsg" :key="item.bgcolor"> |
| | | <div class="infoMsg" :style="{ 'background-color': item.bgcolor }"> |
| | | {{ item.msg }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { ref, reactive } from 'vue' |
| | | import { ElButton } from "element-plus"; |
| | | |
| | | export default { |
| | | setup() { |
| | | data() { |
| | | return { |
| | | |
| | | } |
| | | } |
| | | } |
| | | slectData: [], |
| | | scList: [], |
| | | layers: [], |
| | | Area: { house_name: "", tunnel: "", shelf_code: "" }, |
| | | mian_height: "", |
| | | infoMsg: [ |
| | | { bgcolor: "lightgreen", msg: "空货ä½", state: 0 }, |
| | | { bgcolor: "orange", msg: "æè´§", state: "Stored" }, |
| | | { bgcolor: "#2BB3D5", msg: "æ§è¡ä¸", state: "InAssigned" }, |
| | | { bgcolor: "#ccc", msg: "ç¦ç¨", state: "Lock" }, |
| | | { bgcolor: "red", msg: "å¼å¸¸", state: "error" }, |
| | | { bgcolor: "#b7ba6b", msg: "空æ", state: 99 }, |
| | | ], |
| | | locationData: [], |
| | | }; |
| | | }, |
| | | computed: { |
| | | GetBgColor() { |
| | | return (col) => { |
| | | var bgColor = "#b7ba6b"; |
| | | //ä¼å
æ¾ç¤ºç¦ç¨ç¶æ |
| | | if (col.enalbeStatus == 3) { |
| | | this.infoMsg.forEach((el) => { |
| | | if (el.state == "Lock") { |
| | | bgColor = el.bgcolor; |
| | | } |
| | | }); |
| | | } else { |
| | | this.infoMsg.forEach((el) => { |
| | | if ( |
| | | col.locationStatus == 4 || |
| | | col.locationStatus == 6 || |
| | | col.locationStatus == 7 |
| | | ) { |
| | | if (el.state == "InAssigned") { |
| | | bgColor = el.bgcolor; |
| | | } |
| | | } else if (col.locationStatus == 2 || col.locationStatus == 3) { |
| | | if (el.state == "Stored") { |
| | | bgColor = el.bgcolor; |
| | | } |
| | | } else if (el.state == col.locationStatus) { |
| | | bgColor = el.bgcolor; |
| | | } |
| | | }); |
| | | } |
| | | return bgColor; |
| | | }; |
| | | }, |
| | | }, |
| | | watch: { |
| | | //忢åºåº |
| | | "Area.shelf_code"(newValue, oldValue) { |
| | | this.scList = []; |
| | | this.layers = []; |
| | | this.slectData.forEach((e) => { |
| | | if (e.areaName == newValue) { |
| | | this.Area.tunnel = e.tunnel[0]; |
| | | this.scList = e.tunnel; |
| | | this.Area.layer = "第" + e.layers[0] + "å±"; |
| | | this.layers = e.layers; |
| | | } |
| | | }); |
| | | this.GetViewData(); |
| | | }, |
| | | }, |
| | | methods: { |
| | | getTooltipContent(col) { |
| | | return `ç¶æ: ${this.getStatusText(col.locationStatus)} |
| | | å¯ç¨ç¶æ: ${this.getEnableStatusText(col.enalbeStatus)} |
| | | æçå·: ${col.palletNo || "æ "}`; |
| | | }, |
| | | getStatusText(status) { |
| | | const statusMap = { |
| | | 0: "空é²", |
| | | 1: "æå®å
¥åº", |
| | | 2: "æè´§", |
| | | 3: "满货", |
| | | 4: "å
¥åºä¸", |
| | | 5: "æå®åºåº", |
| | | 6: "åºåºä¸", |
| | | 7: "ç§»åºä¸", |
| | | 99: "空æç", |
| | | }; |
| | | return statusMap[status] || "æªç¥ç¶æ"; |
| | | }, |
| | | getEnableStatusText(status) { |
| | | const enableMap = { |
| | | 0: "æ£å¸¸", |
| | | 1: "åªå
¥", |
| | | 2: "åªåº", |
| | | 3: "ç¦ç¨", |
| | | }; |
| | | return enableMap[status] || "æªç¥"; |
| | | }, |
| | | GetViewData() { |
| | | var _this = this; |
| | | this.http |
| | | .post("/api/StockView/GetLocationStockView", {}, "æ¥è¯¢ä¸") |
| | | .then((x) => { |
| | | _this.locationData = x.data; |
| | | // console.log("å端è¿å:", x.data); |
| | | // console.log("è¿åæ°æ®:", _this.locationData); |
| | | }); |
| | | }, |
| | | // 忢å åæº |
| | | SCChange() { |
| | | this.GetViewData(); |
| | | }, |
| | | }, |
| | | mounted() { |
| | | var mainHeight = document.getElementById("vol-main"); |
| | | this.mian_height = mainHeight.offsetHeight - 40 + "px"; |
| | | var _this = this; |
| | | //å è½½ä¸æé项 |
| | | this.http |
| | | .get("/api/LocationInfo/GetLocationLayer", {}, "æ¥è¯¢ä¸") |
| | | .then((x) => { |
| | | _this.slectData = x; |
| | | //å 载第ä¸ä¸ªåºåï¼ç¬¬ä¸ä¸ªå åæº |
| | | _this.Area.shelf_code = _this.slectData[0].areaName; |
| | | _this.scList = _this.slectData[0].tunnel; |
| | | _this.layers = _this.slectData[0].layers; |
| | | }); |
| | | this.GetViewData(); |
| | | }, |
| | | components: { ElButton }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .left { |
| | | height: 100%; |
| | | float: left; |
| | | width: 18%; |
| | | /* background: lightblue; */ |
| | | padding-top: 20px; |
| | | padding-left: 20px; |
| | | } |
| | | |
| | | .right { |
| | | padding: 9px; |
| | | height: 98%; |
| | | overflow-y: auto; |
| | | overflow-x: auto; |
| | | float: left; |
| | | width: 82%; |
| | | padding-top: 5px; |
| | | } |
| | | |
| | | .title { |
| | | line-height: 70vh; |
| | | text-align: center; |
| | | font-size: 28px; |
| | | color: orange; |
| | | padding: 5px 0px; |
| | | font-size: 20px; |
| | | font-weight: bold; |
| | | width: 82%; |
| | | } |
| | | |
| | | .row_tip { |
| | | font-size: 16px; |
| | | padding-left: 5px; |
| | | } |
| | | |
| | | .row { |
| | | overflow: auto; |
| | | margin-bottom: 11px; |
| | | } |
| | | |
| | | .item { |
| | | float: left; |
| | | width: 66px; |
| | | height: 38px; |
| | | margin: 3px; |
| | | background-color: lightblue; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | border-radius: 3px; |
| | | line-height: 38px; |
| | | } |
| | | |
| | | .tipText { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .btn { |
| | | margin-top: 15px; |
| | | } |
| | | |
| | | .infoMsg { |
| | | float: left; |
| | | width: 63px; |
| | | height: 35px; |
| | | margin: 3px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | border-radius: 3px; |
| | | line-height: 38px; |
| | | } |
| | | </style> |
| | | |
| | | <style> |
| | | .el-input { |
| | | width: 180px; |
| | | } |
| | | </style> |