| | |
| | | <div class="xname">æçç±»å:</div> |
| | | <div class="xzhi" :title="gmData.R_GM_TrayType">{{ gmData.R_GM_TrayType || '-' }}</div> |
| | | </div> |
| | | <!-- æ°å¢ï¼å½ååç¶ææ¾ç¤º --> |
| | | <div class="zhankuang"> |
| | | <div class="xname">å½åæå¨å:</div> |
| | | <div class="xzhi" :title="gmData.R_GM_Column">{{ gmData.R_GM_Column || 'æªç¥' }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- GMå
³èç«å°ï¼å
¥åº7003ï¼ --> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æ°å¢ï¼å åæºå½ååæåæ¾ç¤º --> |
| | | <div id="gm-nowcolumn" :class="{ 'abnormal-column': gmData.R_GM_Status !== 'æ£å¸¸' }"> |
| | | <div>å¹²èå åæºå½åæå¨å: |
| | | <span :title="gmData.R_GM_Column">{{ gmData.R_GM_Column || 'æªç¥' }}</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æ°å¢ï¼åæ¹æ ¼å±ç¤ºåºå --> |
| | | <div class="gm-column-container" :class="{ 'pp-status-abnormal': gmData.R_GM_Status !== 'æ£å¸¸' }"> |
| | | <!-- 䏿¹1-24å --> |
| | | <div class="column-grid-container"> |
| | | <div |
| | | v-for="num in 20" |
| | | :key="num" |
| | | class="column-grid-item" |
| | | :class="{ 'active': num == gmData.R_GM_Column }" |
| | | :title="`åå·: ${num}`" |
| | | > |
| | | {{ num }} |
| | | </div> |
| | | </div> |
| | | <!-- 䏿¹25-47å (23个) --> |
| | | <div class="column-grid-container"> |
| | | <div |
| | | v-for="i in 19" |
| | | :key="'gm-lower-' + i" |
| | | class="column-grid-item" |
| | | :class="{ 'active': (20 + i) == gmData.R_GM_Column }" |
| | | :title="`åå·: ${20 + i}`" |
| | | > |
| | | {{ 20 + i }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | }, |
| | | setup() { |
| | | const store = useStore(); |
| | | // ä»
åå¨GMæ°æ®ï¼ä¸å
¶ä»ä»æ°æ®é离 |
| | | const gmData = ref({}); |
| | | |
| | | // å»¶è¿æ´æ°é
ç½®ï¼è§£å³éªçé®é¢ |
| | | const UPDATE_DELAY = 300; // 300mså»¶è¿ï¼å¹³è¡¡å®æ¶æ§åçé¢ç¨³å®æ§ |
| | | let updateTimer = null; // 宿¶å¨å®ä¾ |
| | | const UPDATE_DELAY = 300; |
| | | let updateTimer = null; |
| | | |
| | | // GMæ°æ®æ å°è§åé
ç½®ï¼æåè½åç»ï¼ |
| | | // GMæ°æ®æ å°è§åï¼æ°å¢åå·å¤çï¼ |
| | | const gmStatusConfig = { |
| | | coreStatus: { |
| | | R_GM_Status: { 1: "æ£å¸¸", 2: "æ
é", 3: "æ¥å" }, |
| | | R_GM_Status: { 0: "æ£å¸¸", 1: "æ
é", 2: "æ¥å", 3: "æªç¥" }, |
| | | R_GM_AutoStatus: { 0: "ç»´ä¿®", 1: "æå¨", 2: "åèªå¨", 3: "èªå¨" }, |
| | | R_GM_WorkStatus: { 0: "å¾
æº", 1: "åè´§ä¸", 2: "åè´§å®æ", 4: "æ¾è´§ä¸", 5: "æ¾è´§å®æ", 6: "ä»»å¡å®æ" }, |
| | | R_GM_WorkType: { 0: "æ ä½ä¸ä»»å¡(0)", 1: "åæ¾è´§ä½ä¸(1)", 2: "åªåè´§ä½ä¸(2)", 3: "åªæ¾è´§ä½ä¸(3)", 4: "ç§»å¨å°æå®ä½ç½®" }, |
| | | R_GM_TrayType: { "-1": "空箱(-1)", 1: "å°æç(1)", 2: "䏿ç(2)", 3: "大æç(3)", 4: "ç¹å¤§æç(4)" } |
| | | R_GM_TrayType: { "-1": "空箱(-1)", 1: "å°æç(1)", 2: "䏿ç(2)", 3: "大æç(3)", 4: "ç¹å¤§æç(4)" }, |
| | | // æ°å¢ï¼åå·æ å°å¤ç |
| | | R_GM_Column: (val) => val !== undefined ? val : "æªç¥" |
| | | }, |
| | | onlineStatus: { |
| | | keys: ["R_GM_Online3", "R_GM_Online4", "R_GM_Online5"], |
| | |
| | | } |
| | | }; |
| | | |
| | | // å¤çGMåå§æ°æ® |
| | | // å¤çGMåå§æ°æ®ï¼å
å«åå·å¤çï¼ |
| | | const processGMData = (rawData) => { |
| | | if (!rawData) return {}; |
| | | const processed = { ...rawData }; |
| | | |
| | | // å¤çæ ¸å¿ç¶æå段 |
| | | Object.entries(gmStatusConfig.coreStatus).forEach(([key, map]) => { |
| | | Object.entries(gmStatusConfig.coreStatus).forEach(([key, handler]) => { |
| | | if (processed.hasOwnProperty(key)) { |
| | | processed[key] = map[processed[key]] || processed[key]; |
| | | // åå·å段使ç¨å½æ°å¤çï¼å
¶ä»ä½¿ç¨æ å°è¡¨ |
| | | processed[key] = typeof handler === 'function' |
| | | ? handler(processed[key]) |
| | | : (handler[processed[key]] || processed[key]); |
| | | } |
| | | }); |
| | | |
| | |
| | | return processed; |
| | | }; |
| | | |
| | | // å»¶è¿æ´æ°GMæ°æ®ï¼é¿å
é«é¢å·æ°å¯¼è´çéªç |
| | | const delayedUpdateGMData = (newRawData) => { |
| | | if (updateTimer) clearTimeout(updateTimer); |
| | | |
| | | updateTimer = setTimeout(() => { |
| | | // ä»
å¤çå
å«GMç¹å¾åæ®µçæ°æ® |
| | | if (newRawData && newRawData.R_GM_Status !== undefined) { |
| | | gmData.value = processGMData(newRawData); |
| | | |
| | | // æ´æ°æ ·å¼ |
| | | nextTick(() => { |
| | | const valueElements = document.getElementsByClassName("xzhi"); |
| | | for (let i = 0; i < valueElements.length; i++) { |
| | |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | // åå§å è½½æ°æ® |
| | | const initialData = store.state.homedata; |
| | | if (initialData && initialData.R_GM_Status !== undefined) { |
| | | gmData.value = processGMData(initialData); |
| | | } |
| | | |
| | | // ç嬿°æ®ååï¼åªå¤çGMæ°æ® |
| | | const unwatch = watch( |
| | | () => store.state.homedata, |
| | | (newData) => { |
| | |
| | | { deep: true } |
| | | ); |
| | | |
| | | // ç»ä»¶å¸è½½æ¶æ¸
çèµæº |
| | | onUnmounted(() => { |
| | | unwatch(); |
| | | if (updateTimer) clearTimeout(updateTimer); |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* åææ ·å¼ä¿æä¸å */ |
| | | .ding { |
| | | float: left; |
| | | width: 20px; |
| | |
| | | margin-left: 1.7%; |
| | | border-radius: 10px; |
| | | } |
| | | </style> |
| | | |
| | | /* æ°å¢ï¼GMå åæºå½ååæ ·å¼ */ |
| | | #gm-nowcolumn { |
| | | width: 100%; |
| | | height: 70px; |
| | | float: left; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-size: 1.5cqw; |
| | | font-weight: bold; |
| | | color: #00ff4c; |
| | | } |
| | | |
| | | /* å¼å¸¸ç¶ææååè² */ |
| | | #gm-nowcolumn.abnormal-column { |
| | | color: red !important; |
| | | } |
| | | #gm-nowcolumn.abnormal-column span { |
| | | color: red !important; |
| | | } |
| | | |
| | | /* å容卿 ·å¼ */ |
| | | .gm-column-container { |
| | | width: 95%; |
| | | margin: 0 auto; |
| | | position: relative; |
| | | clear: both; |
| | | padding-top: 15px; |
| | | } |
| | | |
| | | /* æ¹æ ¼å®¹å¨æ ·å¼ */ |
| | | .column-grid-container { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: nowrap; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | gap: 2px; |
| | | position: relative; |
| | | z-index: 2; |
| | | margin-bottom: 10px; |
| | | padding: 0 2px; |
| | | } |
| | | |
| | | /* æ¹æ ¼æ ·å¼ */ |
| | | .column-grid-item { |
| | | flex: 1; |
| | | min-width: 24px; |
| | | max-width: 60px; |
| | | height: 30px; |
| | | border: 1px solid #fff; |
| | | border-radius: 8px 8px 0 0; |
| | | color: white; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: clamp(8px, 1vw, 14px); |
| | | box-sizing: border-box; |
| | | transition: background-color 0.3s ease; |
| | | } |
| | | |
| | | /* å½ååé«äº® */ |
| | | .column-grid-item.active { |
| | | background-color: green; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | /* å¼å¸¸ç¶æä¸å½åå红è²é«äº® */ |
| | | .pp-status-abnormal .column-grid-item.active { |
| | | background-color: red !important; |
| | | } |
| | | </style> |