| | |
| | | <template> |
| | | <div id="title"> |
| | | <div id="bkuang" style="border-top: none"> |
| | | |
| | | <div class="skuang"> |
| | | <div class="zhuname">å
¥åº8005ç«å°</div> |
| | | <div class="zhankuang"> |
| | | <div class="xname">æ¾è´§å®æ(å):</div> |
| | | <div class="xzhi" :title="data.W_PutFinish5">{{ data.W_PutFinish5 }}</div> |
| | | <div class="xzhi" :title="flData.W_PutFinish5">{{ flData.W_PutFinish5 || '-' }}</div> |
| | | </div> |
| | | <div class="zhankuang"> |
| | | <div class="xname">å
¥åºå°ä½æä»¤(读):</div> |
| | | <div class="xzhi" :title="data.R_ConveyArrivaled5">{{ data.R_ConveyArrivaled5 }}</div> |
| | | <div class="xzhi" :title="flData.R_ConveyArrivaled5">{{ flData.R_ConveyArrivaled5 || '-' }}</div> |
| | | </div> |
| | | <div class="zhankuang"> |
| | | <div class="xname">å°ä½æçå·(读):</div> |
| | | <div class="xzhi" :title="data.R_Barcode5">{{ data.R_Barcode5 }}</div> |
| | | <div class="xzhi" :title="flData.R_Barcode5">{{ flData.R_Barcode5 || '-' }}</div> |
| | | </div> |
| | | <div class="zhankuang"> |
| | | <div class="xname">å°ä½ä»»å¡å·(读):</div> |
| | | <div class="xzhi" :title="data.R_TaskNum5">{{ data.R_TaskNum5 }}</div> |
| | | <div class="xzhi" :title="flData.R_TaskNum5">{{ flData.R_TaskNum5 || '-' }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | <div class="zhuname">åºåº8001ç«å°</div> |
| | | <div class="zhankuang"> |
| | | <div class="xname">æ¾è´§å®æ(å):</div> |
| | | <div class="xzhi" :title="data.W_PutFinish1">{{ data.W_PutFinish1 }}</div> |
| | | <div class="xzhi" :title="flData.W_PutFinish1">{{ flData.W_PutFinish1 || '-' }}</div> |
| | | </div> |
| | | <div class="zhankuang"> |
| | | <div class="xname">æ¯å¦å
许æ¾è´§(读):</div> |
| | | <div class="xzhi" :title="data.R_IsCanPut">{{ data.R_IsCanPut }}</div> |
| | | <div class="xzhi" :title="flData.R_IsCanPut">{{ flData.R_IsCanPut || '-' }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { ref, nextTick } from "vue"; |
| | | import { ref, nextTick, watch, onUnmounted } from "vue"; |
| | | import { useStore } from "vuex"; |
| | | import { onMounted } from "vue"; |
| | | |
| | |
| | | xuan: 0 |
| | | }; |
| | | }, |
| | | methods: { |
| | | }, |
| | | setup() { |
| | | const store = useStore(); |
| | | const data = ref({}); |
| | | // ä»
åå¨FLç¸å
³æ°æ® |
| | | const flData = ref({}); |
| | | |
| | | // 1. å®ä¹æ®éåæ®µçæ å°è§å |
| | | const statusMap = { |
| | | |
| | | // å»¶è¿æ´æ°é
ç½®ï¼è§£å³éªçé®é¢ |
| | | const UPDATE_DELAY = 300; // 300mså»¶è¿ï¼å¹³è¡¡å®æ¶æ§åçé¢ç¨³å®æ§ |
| | | let updateTimer = null; // 宿¶å¨å®ä¾ |
| | | |
| | | // FLæ°æ®æ å°è§åé
ç½® |
| | | const flStatusConfig = { |
| | | // FL booleanç±»ååæ®µæ å° |
| | | booleanFields: { |
| | | keys: [ |
| | | "W_PutFinish5", "W_PutFinish1", |
| | | "R_IsCanPut", "R_ConveyArrivaled5" |
| | | ], |
| | | map: { true: "æ¯", false: "å¦" } |
| | | } |
| | | }; |
| | | |
| | | // 2. å®ä¹éè¦å
±ç¨æ å°è§åçåæ®µå表å对åºçæ å°è§å |
| | | const booleanFields = [ |
| | | "W_PutFinish5", "W_PutFinish1", |
| | | "R_IsCanPut", "R_ConveyArrivaled5", |
| | | ]; |
| | | const booleanMap = { |
| | | true: "æ¯", |
| | | false: "å¦" |
| | | }; |
| | | |
| | | // å¤çæ°æ®ï¼å
å¤çæ®éæ å°ï¼åæ¹éå¤çå
±ç¨æ å°çåæ®µ |
| | | const processData = (rawData) => { |
| | | // å¤çFLåå§æ°æ® |
| | | const processFLData = (rawData) => { |
| | | if (!rawData) return {}; |
| | | const processed = { ...rawData }; |
| | | |
| | | // å¤çæ®éåæ®µæ å° |
| | | Object.keys(statusMap).forEach(key => { |
| | | // å¤çbooleanç±»ååæ®µ |
| | | flStatusConfig.booleanFields.keys.forEach(key => { |
| | | if (processed.hasOwnProperty(key)) { |
| | | const map = statusMap[key]; |
| | | processed[key] = map[processed[key]] || processed[key]; |
| | | } |
| | | }); |
| | | |
| | | // æ¹éå¤çå
±ç¨æ å°è§åçåæ®µ |
| | | booleanFields.forEach(key => { |
| | | if (processed.hasOwnProperty(key)) { |
| | | processed[key] = booleanMap[processed[key]] || processed[key]; |
| | | processed[key] = flStatusConfig.booleanFields.map[processed[key]] || processed[key]; |
| | | } |
| | | }); |
| | | |
| | | return processed; |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | nextTick(() => { |
| | | setInterval(() => { |
| | | const rawData = store.state.homedata; |
| | | data.value = processData(rawData); |
| | | const xian = document.getElementsByClassName("xzhi"); |
| | | for (let i = 0; i < xian.length; i++) { |
| | | if (xian[i].innerHTML === "æ¯") { |
| | | xian[i].style.color = "yellow"; |
| | | } else if (xian[i].innerHTML === "å¦") { |
| | | xian[i].style.color = "red"; |
| | | // å»¶è¿æ´æ°FLæ°æ®ï¼é¿å
é«é¢å·æ°å¯¼è´çéªç |
| | | const delayedUpdateFLData = (newRawData) => { |
| | | if (updateTimer) clearTimeout(updateTimer); |
| | | |
| | | updateTimer = setTimeout(() => { |
| | | // æ£æ¥æ¯å¦å
å«FLç¹å¾å段 |
| | | const hasFLFields = flStatusConfig.booleanFields.keys.some(key => |
| | | newRawData && newRawData[key] !== undefined |
| | | ); |
| | | |
| | | if (hasFLFields) { |
| | | flData.value = processFLData(newRawData); |
| | | |
| | | // æ´æ°æ ·å¼ |
| | | nextTick(() => { |
| | | const valueElements = document.getElementsByClassName("xzhi"); |
| | | for (let i = 0; i < valueElements.length; i++) { |
| | | const text = valueElements[i].innerHTML; |
| | | if (text === "æ¯") { |
| | | valueElements[i].style.color = "yellow"; |
| | | } else if (text === "å¦") { |
| | | valueElements[i].style.color = "red"; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }, UPDATE_DELAY); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | // åå§å è½½æ°æ® |
| | | const initialData = store.state.homedata; |
| | | const hasFLFields = flStatusConfig.booleanFields.keys.some(key => |
| | | initialData && initialData[key] !== undefined |
| | | ); |
| | | |
| | | if (hasFLFields) { |
| | | flData.value = processFLData(initialData); |
| | | } |
| | | |
| | | // ç嬿°æ®ååï¼åªå¤çFLæ°æ® |
| | | const unwatch = watch( |
| | | () => store.state.homedata, |
| | | (newData) => { |
| | | const hasFLFields = flStatusConfig.booleanFields.keys.some(key => |
| | | newData && newData[key] !== undefined |
| | | ); |
| | | |
| | | if (hasFLFields) { |
| | | delayedUpdateFLData(newData); |
| | | } |
| | | }); |
| | | }, |
| | | { deep: true } |
| | | ); |
| | | |
| | | // ç»ä»¶å¸è½½æ¶æ¸
çèµæº |
| | | onUnmounted(() => { |
| | | unwatch(); |
| | | if (updateTimer) clearTimeout(updateTimer); |
| | | }); |
| | | }); |
| | | |
| | | return { |
| | | data, |
| | | flData |
| | | }; |
| | | } |
| | | }; |
| | |
| | | border-radius: 10px; |
| | | } |
| | | </style> |
| | | |