{"id":34733,"date":"2026-03-10T12:50:17","date_gmt":"2026-03-10T04:50:17","guid":{"rendered":"https:\/\/zfun.i234.me\/stock\/?page_id=34733"},"modified":"2026-03-10T13:45:16","modified_gmt":"2026-03-10T05:45:16","slug":"gate","status":"publish","type":"page","link":"https:\/\/zfun.i234.me\/stock\/gate","title":{"rendered":"\u5834\u5167\u4eba\u54e1\u9032\u51fa\u7d00\u9304"},"content":{"rendered":"\r\n    <div class=\"sensor-monitor\">\r\n        <h3 style=\"margin:0 0 20px 0;color:#1f2937;font-size:20px;\">\u51b7\u51cd\u5eab\u9032\u51fa\u76e3\u63a7<\/h3>\r\n        \r\n        \r\n        <div style=\"color:#ef4444;font-weight:bold;\">\u8acb\u5148\u767b\u5165\u5f8c\u518d\u4f7f\u7528\u6b64\u76e3\u63a7\u9762\u677f<\/div>\r\n        \r\n    <\/div>\r\n    <style>\r\n    .sensor-monitor {\r\n        max-width: 550px;\r\n        background: #f8fafc;\r\n        padding: 28px;\r\n        border-radius: 16px;\r\n        margin: 20px 0;\r\n        box-shadow: 0 2px 10px rgba(0,0,0,0.1);\r\n    }\r\n    .sensor-zones {\r\n        display: flex;\r\n        height: 130px;\r\n        border: 2px solid #262626;\r\n        border-radius: 12px;\r\n        overflow: hidden;\r\n        margin: 20px 0;\r\n    }\r\n    .zone-outside {\r\n        width: 40%;\r\n        background: #e5e7eb;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: 18px;\r\n        font-weight: 600;\r\n        color: #6b7280;\r\n        border-right: 2px dashed #9ca3af;\r\n    }\r\n    .zone-inside {\r\n        width: 60%;\r\n        background: #d1d5db;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: 18px;\r\n        font-weight: 600;\r\n        color: white;\r\n        transition: background 0.3s ease;\r\n        position: relative;\r\n    }\r\n    .zone-inside.enter-mode {\r\n        background: #10b981;\r\n        box-shadow: inset 0 0 25px rgba(0, 120, 0, 0.4);\r\n    }\r\n    .zone-inside.exit-mode {\r\n        background: #ef4444;\r\n        box-shadow: inset 0 0 25px rgba(120, 0, 0, 0.4);\r\n    }\r\n    .sensor-points {\r\n        position: absolute;\r\n        bottom: 12px;\r\n        width: 100%;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        padding: 0 25px;\r\n        font-size: 14px;\r\n    }\r\n    .sensor-stats {\r\n        font-size: 16px;\r\n        line-height: 2;\r\n        margin: 15px 0;\r\n    }\r\n    .stat-in { color: #10b981; font-weight: 600; font-size: 18px; }\r\n    .stat-out { color: #ef4444; font-weight: 600; font-size: 18px; }\r\n    .stat-current { color: #3b82f6; font-weight: 700; font-size: 24px; }\r\n    .sensor-tips {\r\n        font-size: 13px;\r\n        color: #6b7280;\r\n        margin-top: 15px;\r\n        line-height: 1.6;\r\n    }\r\n    .error-tip {\r\n        color: #ef4444;\r\n        font-weight: 600;\r\n        margin: 10px 0;\r\n    }\r\n    <\/style>\r\n\r\n    <script>\r\n    jQuery(document).ready(function($) {\r\n        \/\/ \ud83d\udd25 \u6539\u7528\u767b\u5165\u5224\u65b7\r\n        const isLoggedIn = false;\r\n        if (!isLoggedIn) return;\r\n\r\n        const config = {\r\n            firstKey: null,\r\n            hasPassedSecondKey: false,\r\n            keyState: {a: false, q: false},\r\n            triggerMode: null,\r\n            passThreshold: 500,\r\n            passStartTime: 0,\r\n            timeoutTimer: null,\r\n            timeoutDuration: 15000\r\n        };\r\n\r\n        $(document).on(\"keydown\", function(e) {\r\n            const key = String.fromCharCode(e.which).toLowerCase();\r\n            if (key !== \"a\" && key !== \"q\") return;\r\n\r\n            config.keyState[key] = true;\r\n\r\n            if (!config.firstKey) {\r\n                config.firstKey = key;\r\n                config.triggerMode = (key === \"a\") ? \"enter-mode\" : \"exit-mode\";\r\n                config.passStartTime = Date.now();\r\n                clearTimeout(config.timeoutTimer);\r\n                config.timeoutTimer = setTimeout(() => {\r\n                    resetSensorConfig();\r\n                    showTip(\"\u26a0\ufe0f \u611f\u61c9\u8d85\u6642\uff0c\u8acb\u91cd\u65b0\u5b8c\u6574\u901a\u904e\u611f\u61c9\u5340\");\r\n                }, config.timeoutDuration);\r\n            }\r\n\r\n            if (config.firstKey) {\r\n                const secondKey = (config.firstKey === \"a\") ? \"q\" : \"a\";\r\n                if (config.keyState[secondKey]) {\r\n                    config.hasPassedSecondKey = true;\r\n                }\r\n            }\r\n            updateSensorZone();\r\n        });\r\n\r\n        $(document).on(\"keyup\", function(e) {\r\n            const key = String.fromCharCode(e.which).toLowerCase();\r\n            if (key !== \"a\" && key !== \"q\") return;\r\n\r\n            config.keyState[key] = false;\r\n\r\n            if (!config.keyState.a && !config.keyState.q) {\r\n                const passTime = Date.now() - config.passStartTime;\r\n                if (config.firstKey && config.hasPassedSecondKey && passTime >= config.passThreshold) {\r\n                    const recordType = (config.triggerMode === \"enter-mode\") ? \"in\" : \"out\";\r\n                    saveSensorRecord(recordType);\r\n                    showTip(recordType === \"in\" ? \"\u2705 \u9032\u5165\u51b7\u51cd\u5eab\u8a18\u9304\u6210\u529f\" : \"\u2705 \u96e2\u958b\u51b7\u51cd\u5eab\u8a18\u9304\u6210\u529f\");\r\n                } else if (config.firstKey && !config.hasPassedSecondKey) {\r\n                    showTip(\"\u26a0\ufe0f \u50c5\u78b0\u89f8\u55ae\u9ede\uff0c\u4e0d\u8a18\u9304\");\r\n                } else if (config.firstKey && passTime < config.passThreshold) {\r\n                    showTip(\"\u26a0\ufe0f \u89f8\u767c\u6642\u9593\u904e\u77ed\uff0c\u5224\u5b9a\u8aa4\u78b0\");\r\n                }\r\n                resetSensorConfig();\r\n            }\r\n            updateSensorZone();\r\n        });\r\n\r\n        function updateSensorZone() {\r\n            const $insideZone = $(\".zone-inside\");\r\n            $insideZone.removeClass(\"enter-mode exit-mode\");\r\n            if (config.triggerMode) $insideZone.addClass(config.triggerMode);\r\n        }\r\n\r\n        function resetSensorConfig() {\r\n            config.firstKey = null;\r\n            config.hasPassedSecondKey = false;\r\n            config.keyState = {a: false, q: false};\r\n            config.triggerMode = null;\r\n            config.passStartTime = 0;\r\n            clearTimeout(config.timeoutTimer);\r\n            $(\".zone-inside\").removeClass(\"enter-mode exit-mode\");\r\n            $(\".sensor-tips .error-tip\").remove();\r\n        }\r\n\r\n        function showTip(text) {\r\n            $(\".sensor-tips .error-tip\").remove();\r\n            $(\".sensor-tips\").prepend(`<div class=\"error-tip\">${text}<\/div>`);\r\n            setTimeout(() => $(\".error-tip\").fadeOut(500), 5000);\r\n        }\r\n\r\n        function saveSensorRecord(type) {\r\n            $.post(\"https:\/\/zfun.i234.me\/stock\/wp-admin\/admin-ajax.php\", {\r\n                action: \"save_sensor_record\",\r\n                record_type: type,\r\n                nonce: \"a7baa5aa5f\"\r\n            }, function(res){\r\n                if (res.success) updateSensorStats();\r\n            });\r\n        }\r\n\r\n        function updateSensorStats() {\r\n            $.post(\"https:\/\/zfun.i234.me\/stock\/wp-admin\/admin-ajax.php\", {\r\n                action: \"get_sensor_stats\",\r\n                nonce: \"a7baa5aa5f\"\r\n            }, function(res){\r\n                if (res.success) {\r\n                    $(\"#stat-in-count\").text(res.data.in);\r\n                    $(\"#stat-out-count\").text(res.data.out);\r\n                    $(\"#stat-current-count\").text(res.data.inside);\r\n                    $(\".real-number-display\").text(res.data.inside);\r\n                }\r\n            });\r\n        }\r\n\r\n        updateSensorStats();\r\n        setInterval(updateSensorStats, 5000);\r\n    });\r\n    <\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-34733","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/pages\/34733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/comments?post=34733"}],"version-history":[{"count":2,"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/pages\/34733\/revisions"}],"predecessor-version":[{"id":34738,"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/pages\/34733\/revisions\/34738"}],"wp:attachment":[{"href":"https:\/\/zfun.i234.me\/stock\/wp-json\/wp\/v2\/media?parent=34733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}