| | |
| | | <!-- PPä»å åæºç¶æé¢æ¿ --> |
| | | <div class="skuang"> |
| | | <div class="zhuname">PPä»å åæº</div> |
| | | |
| | | <div class="zhankuang"> |
| | | <div class="xname">å åæºç¶æ:</div> |
| | | <div class="xzhi" :title="ppData.R_PP_Status">{{ ppData.R_PP_Status }}</div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="nowcolumn" :class="{ 'abnormal-column': ppData.R_PP_Status !== 'æ£å¸¸' }"> |
| | | <div>PPå åæºå½åæå¨å: |
| | | <span :title="ppData.R_PP_Column">{{ ppData.R_PP_Column || 'æªç¥' }}</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="column-container" :class="{ 'pp-status-abnormal': ppData.R_PP_Status !== 'æ£å¸¸' }"> |
| | | <!-- 䏿¹1-24å --> |
| | | <div class="column-grid-container"> |
| | | <div |
| | | v-for="num in 24" |
| | | :key="num" |
| | | class="column-grid-item" |
| | | :class="{ 'active': num == ppData.R_PP_Column }" |
| | | :title="`åå·: ${num}`" |
| | | > |
| | | {{ num }} |
| | | </div> |
| | | </div> |
| | | <!-- 䏿¹25-47å (23个) --> |
| | | <div class="column-grid-container"> |
| | | <div |
| | | v-for="i in 23" |
| | | :key="'lower-' + i" |
| | | class="column-grid-item" |
| | | :class="{ 'active': (24 + i) == ppData.R_PP_Column }" |
| | | :title="`åå·: ${24 + i}`" |
| | | > |
| | | {{ 24 + i }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | }, |
| | | setup() { |
| | | const store = useStore(); |
| | | // ä»
åå¨PPæ°æ®ï¼é¿å
ä¸ZHæ°æ®æ··æ· |
| | | const ppData = ref({}); |
| | | |
| | | // å»¶è¿æ´æ°é
ç½®ï¼è§£å³é«é¢å·æ°å¯¼è´çéªç |
| | | const UPDATE_DELAY = 300; // å»¶è¿300msæ´æ°UI |
| | | let updateTimer = null; // 宿¶å¨å®ä¾ |
| | | // å»¶è¿æ´æ°é
ç½® |
| | | const UPDATE_DELAY = 300; |
| | | let updateTimer = null; |
| | | |
| | | // PPæ°æ®æ å°è§åï¼ä»
å¤çPPç¸å
³åæ®µï¼ |
| | | // PPæ°æ®æ å°è§å |
| | | const statusMap = { |
| | | R_PP_Status: { |
| | | 1: "æ£å¸¸", |
| | | 2: "æ
é", |
| | | 3: "æ¥å", |
| | | 0: "æ£å¸¸", |
| | | 1: "æ
é", |
| | | 2: "æ¥å", |
| | | 3: "æªç¥" |
| | | }, |
| | | R_PP_AutoStatus: { |
| | | 0: "ç»´ä¿®", |
| | |
| | | 2: "䏿ç(2)", |
| | | 3: "大æç(3)", |
| | | 4: "ç¹å¤§æç(4)", |
| | | } |
| | | }, |
| | | R_PP_Column: (val) => val !== undefined ? val : "æªç¥" |
| | | }; |
| | | |
| | | // PPç¸å
³å¸å°å段åç» |
| | |
| | | // å¤çPPåå§æ°æ® |
| | | const processPPData = (rawData) => { |
| | | if (!rawData) return {}; |
| | | |
| | | // å¤å¶åå§æ°æ®ï¼é¿å
ç´æ¥ä¿®æ¹ |
| | | const processed = { ...rawData }; |
| | | |
| | | // å¤çç¶æåæ®µæ å° |
| | | Object.keys(statusMap).forEach(key => { |
| | | if (processed.hasOwnProperty(key)) { |
| | | processed[key] = statusMap[key][processed[key]] || processed[key]; |
| | | const mapper = statusMap[key]; |
| | | processed[key] = typeof mapper === 'function' |
| | | ? mapper(processed[key]) |
| | | : (mapper[processed[key]] || processed[key]); |
| | | } |
| | | }); |
| | | |
| | |
| | | return processed; |
| | | }; |
| | | |
| | | // å»¶è¿æ´æ°PPæ°æ®ï¼é¿å
é«é¢å·æ° |
| | | // å»¶è¿æ´æ°PPæ°æ® |
| | | const delayedUpdatePPData = (newRawData) => { |
| | | // æ¸
é¤ä¹åç宿¶å¨ï¼ç¡®ä¿åªæ§è¡æå䏿¬¡æ´æ° |
| | | if (updateTimer) { |
| | | clearTimeout(updateTimer); |
| | | } |
| | | |
| | | // å»¶è¿æå®æ¶é´åæ´æ°æ°æ® |
| | | if (updateTimer) clearTimeout(updateTimer); |
| | | updateTimer = setTimeout(() => { |
| | | // åªå¤çå
å«PPç¹å¾åæ®µçæ°æ® |
| | | if (newRawData && newRawData.R_PP_Status !== undefined) { |
| | | ppData.value = processPPData(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_PP_Status !== undefined) { |
| | | ppData.value = processPPData(initialData); |
| | | } |
| | | |
| | | // ç嬿°æ®ååï¼åªå¤çPPæ°æ® |
| | | const unwatch = watch( |
| | | () => store.state.homedata, |
| | | (newData) => { |
| | | // ä»
彿°æ®å
å«PPç¹å¾åæ®µæ¶ææ´æ° |
| | | if (newData && newData.R_PP_Status !== undefined) { |
| | | delayedUpdatePPData(newData); |
| | | } |
| | | }, |
| | | { deep: true } // 深度çå¬å¯¹è±¡å
é¨åå |
| | | { deep: true } |
| | | ); |
| | | |
| | | // ç»ä»¶å¸è½½æ¶æ¸
çèµæº |
| | | onUnmounted(() => { |
| | | unwatch(); |
| | | if (updateTimer) { |
| | | clearTimeout(updateTimer); |
| | | } |
| | | if (updateTimer) clearTimeout(updateTimer); |
| | | }); |
| | | }); |
| | | |
| | |
| | | background: rgba(255, 255, 255, 0.2); |
| | | margin-left: 1.7%; |
| | | border-radius: 10px; |
| | | padding-bottom: 20px; |
| | | } |
| | | |
| | | /* å åæºå½ååæ ·å¼ */ |
| | | #nowcolumn { |
| | | width: 100%; |
| | | height: 70px; |
| | | float: left; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-size: 1.5cqw; |
| | | font-weight: bold; |
| | | color: #00ff4c; |
| | | } |
| | | |
| | | /* å åæºç¶æå¼å¸¸æ¶ï¼å½ååæååä¸ºçº¢è² */ |
| | | #nowcolumn.abnormal-column { |
| | | color: red !important; |
| | | } |
| | | #nowcolumn.abnormal-column span { |
| | | color: red !important; |
| | | } |
| | | |
| | | /* åå®¹å¨ */ |
| | | .column-container { |
| | | width: 95%; |
| | | margin: 0 auto; |
| | | position: relative; |
| | | clear: both; |
| | | padding-top: 15px; |
| | | } |
| | | |
| | | /* èè²åå²çº¿ */ |
| | | .column-separator { |
| | | width: 100%; |
| | | height: 20px; |
| | | background-color: #3bc0ed; |
| | | position: absolute; |
| | | top: 0; /* è°æ´å°æ¹æ ¼é¡¶é¨å¯¹é½ */ |
| | | left: 0; |
| | | z-index: 1; /* ç¡®ä¿å¨æ¹æ ¼ä¸æ¹ */ |
| | | border-radius: 4px 4px 0 0; |
| | | } |
| | | |
| | | .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> |
| | | |