{"id":2695,"date":"2023-12-15T09:19:03","date_gmt":"2023-12-15T01:19:03","guid":{"rendered":"https:\/\/bookmark.tw\/?p=2695"},"modified":"2025-06-07T03:34:44","modified_gmt":"2025-06-06T19:34:44","slug":"first-impression","status":"publish","type":"post","link":"https:\/\/xinliceyan.org\/zh\/first-impression","title":{"rendered":"\u7ebf\u4e0a\u514d\u8d39\u6d4b\u9a8c\uff1a\u4f60\u7559\u7ed9\u4eba\u7684\u7b2c\u4e00\u5370\u8c61\u5982\u4f55\uff0812\u9898\uff09"},"content":{"rendered":"<link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/bootstrap\/5.3.3\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/bootstrap-icons\/1.11.3\/font\/bootstrap-icons.min.css\" rel=\"stylesheet\">\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.min.js\"><\/script>\n    <!-- \u5f15\u5c0e\u9801 -->\n    <section id=\"impression-quiz-intro\" class=\"d-block\" data-page=\"intro\">\n        <div class=\"container-fluid px-3 py-4\">\n            <div class=\"row justify-content-center\">\n                <div class=\"col-12\" style=\"max-width: 720px;\">\n                    <header class=\"text-center mb-4\">\n                        <h2 class=\"display-6 fw-bold text-success mb-3\">\u60a8\u7684\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u6e2c\u9a57<\/h2>\n                        <p class=\"fs-5 text-muted\">\u77ed\u77ed7\u79d2\u5167\uff0c\u60a8\u7559\u7d66\u5225\u4eba\u4ec0\u9ebc\u5370\u8c61\uff1f<\/p>\n                    <\/header>\n\n                    <main>\n                        <div class=\"row g-3 mb-4\">\n                            <div class=\"col-12 col-sm-4\">\n                                <div class=\"card h-100 border-0 shadow-sm\">\n                                    <div class=\"card-body text-center p-3\">\n                                        <div class=\"bg-success bg-opacity-10 rounded-circle d-inline-flex align-items-center justify-content-center mb-2\" style=\"width: 60px; height: 60px;\">\n                                            <i class=\"bi bi-stopwatch fs-3 text-success\"><\/i>\n                                        <\/div>\n                                        <h3 class=\"h5 fw-bold mb-1\">7\u79d2\u5b9a\u5f8b<\/h3>\n                                        <p class=\"text-muted mb-0\">\u7b2c\u4e00\u5370\u8c61\u5728\u77ed\u77ed7\u79d2\u5167\u5f62\u6210\uff0c\u6df1\u523b\u5f71\u97ff\u5f8c\u7e8c\u4eba\u969b\u4e92\u52d5<\/p>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            <div class=\"col-12 col-sm-4\">\n                                <div class=\"card h-100 border-0 shadow-sm\">\n                                    <div class=\"card-body text-center p-3\">\n                                        <div class=\"bg-info bg-opacity-10 rounded-circle d-inline-flex align-items-center justify-content-center mb-2\" style=\"width: 60px; height: 60px;\">\n                                            <i class=\"bi bi-graph-up fs-3 text-info\"><\/i>\n                                        <\/div>\n                                        <h3 class=\"h5 fw-bold mb-1\">\u79d1\u5b66\u6d4b\u8bc4<\/h3>\n                                        <p class=\"text-muted mb-0\">\u57fa\u65bc\u5fc3\u7406\u5b78\u9996\u56e0\u6548\u61c9\u7406\u8ad6\uff0c\u5c08\u696d\u8a55\u4f30\u60a8\u7684\u793e\u4ea4\u5f71\u97ff\u529b<\/p>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            <div class=\"col-12 col-sm-4\">\n                                <div class=\"card h-100 border-0 shadow-sm\">\n                                    <div class=\"card-body text-center p-3\">\n                                        <div class=\"bg-warning bg-opacity-10 rounded-circle d-inline-flex align-items-center justify-content-center mb-2\" style=\"width: 60px; height: 60px;\">\n                                            <i class=\"bi bi-lightbulb fs-3 text-warning\"><\/i>\n                                        <\/div>\n                                        <h3 class=\"h5 fw-bold mb-1\">\u4e2a\u4eba\u5316\u5efa\u8bae<\/h3>\n                                        <p class=\"text-muted mb-0\">\u53d6\u5f97\u5c08\u5c6c\u6539\u5584\u65b9\u5411\u548c\u5be6\u7528\u793e\u4ea4\u6280\u5de7\u6307\u5c0e<\/p>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"bg-light rounded-3 p-3 mb-4\">\n                            <h3 class=\"h5 fw-bold mb-2\">\n                                <i class=\"bi bi-info-circle text-success me-2\"><\/i>\u6e2c\u9a57\u8aaa\u660e\n                            <\/h3>\n                            <p class=\"mb-2\">\u672c\u6e2c\u9a57\u5171\u670912\u9053\u984c\u76ee\uff0c\u6bcf\u9053\u984c\u76ee\u90fd\u95dc\u4e4e\u60a8\u5728\u793e\u4ea4\u5834\u5408\u4e2d\u7684\u8868\u73fe\u3002\u8acb\u6839\u64da\u771f\u5be6\u60c5\u6cc1\u9078\u64c7\u6700\u7b26\u5408\u7684\u7b54\u6848\u3002<\/p>\n                            <ul class=\"list-unstyled mb-0\">\n                                <li class=\"mb-1\"><i class=\"bi bi-check-circle text-success me-2\"><\/i>\u6e2c\u9a57\u6642\u9593\u7d04\u97003-5\u5206\u9418<\/li>\n                                <li class=\"mb-1\"><i class=\"bi bi-check-circle text-success me-2\"><\/i>\u57fa\u65bc\u5fc3\u7406\u5b78\u9996\u56e0\u6548\u61c9\u7406\u8ad6<\/li>\n                                <li class=\"mb-1\"><i class=\"bi bi-check-circle text-success me-2\"><\/i>\u63d0\u4f9b\u500b\u4eba\u5316\u6539\u5584\u5efa\u8b70<\/li>\n                                <li><i class=\"bi bi-check-circle text-success me-2\"><\/i>\u5b8c\u5168\u514d\u8cbb\u4e14\u4e0d\u8490\u96c6\u500b\u4eba\u8cc7\u8a0a<\/li>\n                            <\/ul>\n                        <\/div>\n\n                        <div class=\"text-center\">\n                            <button type=\"button\" class=\"btn btn-success btn-lg px-4 py-2 rounded-pill shadow\" data-action=\"start-quiz\">\n                                <i class=\"bi bi-play-circle me-2\"><\/i>\u5f00\u59cb\u6d4b\u9a8c\n                            <\/button>\n                        <\/div>\n                    <\/main>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/section>\n\n    <!-- \u6e2c\u9a57\u9801 -->\n    <section id=\"impression-quiz-test\" class=\"d-none\" data-page=\"test\">\n        <div class=\"container-fluid px-3 py-4\">\n            <div class=\"row justify-content-center\">\n                <div class=\"col-12\" style=\"max-width: 720px;\">\n                    <header class=\"text-center mb-3\">\n                        <h2 class=\"h3 fw-bold text-success\">\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u6e2c\u9a57<\/h2>\n                    <\/header>\n\n                    <!-- \u9032\u5ea6\u689d -->\n                    <div class=\"mb-4\">\n                        <div class=\"d-flex justify-content-between align-items-center mb-2\">\n                            <span class=\"small text-muted\">\u9032\u5ea6<\/span>\n                            <span class=\"small text-muted\" data-progress-text>\u7b2c 1 \u984c \/ \u5171 12 \u984c<\/span>\n                        <\/div>\n                        <div class=\"progress\" style=\"height: 6px;\">\n                            <div class=\"progress-bar bg-success\" role=\"progressbar\" data-progress-bar style=\"width: 8.33%;\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <main>\n                        <!-- \u984c\u76ee\u5bb9\u5668 -->\n                        <div data-question-container>\n                            <!-- \u984c\u76ee\u5c07\u900f\u904eJavaScript\u52d5\u614b\u63d2\u5165 -->\n                        <\/div>\n\n                        <!-- \u5c0e\u89bd\u6309\u9215 -->\n                        <div class=\"text-center mt-3\">\n                            <button type=\"button\" class=\"btn btn-outline-secondary\" data-action=\"prev-question\" style=\"display: none;\">\n                                <i class=\"bi bi-arrow-left me-2\"><\/i>\u4e0a\u4e00\u9898\n                            <\/button>\n                        <\/div>\n                    <\/main>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/section>\n\n    <!-- \u7d50\u679c\u9801 -->\n    <section id=\"impression-quiz-result\" class=\"d-none\" data-page=\"result\">\n        <div class=\"container-fluid px-3 py-4\">\n            <div class=\"row justify-content-center\">\n                <div class=\"col-12\" style=\"max-width: 720px;\">\n                    <header class=\"text-center mb-4\">\n                        <h2 class=\"display-6 fw-bold text-success mb-2\">\u60a8\u7684\u6d4b\u9a8c\u7ed3\u679c<\/h2>\n                        <p class=\"text-muted\">\u57fa\u65bc\u60a8\u7684\u7b54\u6848\uff0c\u4ee5\u4e0b\u662f\u60a8\u7684\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u5206\u6790<\/p>\n                    <\/header>\n\n                    <main>\n                        <!-- \u7d50\u679c\u6458\u8981 -->\n                        <div class=\"mb-4\">\n                            <div class=\"card border-0 shadow-sm mb-3\">\n                                <div class=\"card-body p-3\">\n                                    <div class=\"text-center\">\n                                        <div class=\"d-inline-flex align-items-center justify-content-center rounded-circle mb-2\" data-result-icon-container style=\"width: 60px; height: 60px;\">\n                                            <!-- \u5716\u793a\u5c07\u900f\u904eJavaScript\u52d5\u614b\u63d2\u5165 -->\n                                        <\/div>\n                                        <h3 class=\"h5 fw-bold mb-1\" data-result-type><\/h3>\n                                        <div class=\"badge bg-success-subtle text-success fs-6 px-2 py-1\" data-result-level><\/div>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            \n                            <div class=\"card border-0 shadow-sm\">\n                                <div class=\"card-body p-3\">\n                                    <h4 class=\"h5 fw-bold mb-2 text-center\">\u60a8\u5728\u6574\u9ad4\u5206\u5e03\u4e2d\u7684\u4f4d\u7f6e<\/h4>\n                                    <div style=\"height: 120px; display: flex; align-items: center;\">\n                                        <canvas id=\"impression-result-chart\" style=\"width: 100%; height: 100%;\"><\/canvas>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <!-- \u8a73\u7d30\u5206\u6790 -->\n                        <div class=\"card border-0 shadow-sm mb-3\">\n                            <div class=\"card-body p-3\">\n                                <h3 class=\"h5 fw-bold mb-2\">\n                                    <i class=\"bi bi-clipboard-data text-success me-2\"><\/i>\u8be6\u7ec6\u5206\u6790\n                                <\/h3>\n                                <div data-result-description><\/div>\n                            <\/div>\n                        <\/div>\n\n                        <!-- \u6539\u5584\u5efa\u8b70 -->\n                        <div class=\"card border-0 shadow-sm mb-4\">\n                            <div class=\"card-body p-3\">\n                                <h3 class=\"h5 fw-bold mb-2\">\n                                    <i class=\"bi bi-lightbulb text-warning me-2\"><\/i>\u6539\u5584\u5efa\u8bae\n                                <\/h3>\n                                <div data-result-suggestions><\/div>\n                            <\/div>\n                        <\/div>\n\n                        <!-- \u91cd\u65b0\u6e2c\u9a57 -->\n                        <div class=\"text-center\">\n                            <button type=\"button\" class=\"btn btn-success btn-lg px-4 py-2 rounded-pill shadow\" data-action=\"restart-quiz\">\n                                <i class=\"bi bi-arrow-repeat me-2\"><\/i>\u91cd\u65b0\u6d4b\u9a8c\n                            <\/button>\n                        <\/div>\n                    <\/main>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/section>\n\n    <style>\n        \/* \u91dd\u5c0d750px\u6700\u5927\u5bec\u5ea6\u512a\u5316\u7684\u6a23\u5f0f *\/\n        .impression-quiz-option {\n            transition: all 0.3s ease;\n            border: 2px solid #e9ecef;\n            background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n            cursor: pointer;\n        }\n        \n        .impression-quiz-option:hover {\n            border-color: #198754;\n            background: linear-gradient(135deg, #f0fff4 0%, #e6f7f0 100%);\n            transform: translateY(-2px);\n            box-shadow: 0 6px 20px rgba(25, 135, 84, 0.12);\n        }\n        \n        .impression-quiz-option.selected {\n            border-color: #198754;\n            background: linear-gradient(135deg, #d1e7dd 0%, #a3cfbb 100%);\n            color: #0f5132;\n            transform: translateY(-1px);\n            box-shadow: 0 4px 15px rgba(25, 135, 84, 0.15);\n        }\n        \n        .impression-quiz-option .form-check-input {\n            display: none;\n        }\n        \n        .impression-quiz-option .option-indicator {\n            width: 20px;\n            height: 20px;\n            border: 2px solid #dee2e6;\n            border-radius: 50%;\n            transition: all 0.3s ease;\n            flex-shrink: 0;\n        }\n        \n        .impression-quiz-option:hover .option-indicator {\n            border-color: #198754;\n            background-color: #f0fff4;\n        }\n        \n        .impression-quiz-option.selected .option-indicator {\n            border-color: #198754;\n            background-color: #198754;\n        }\n        \n        .impression-quiz-option.selected .option-indicator::after {\n            content: '\u2713';\n            color: white;\n            font-size: 12px;\n            font-weight: bold;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            width: 100%;\n            height: 100%;\n        }\n        \n        .card {\n            transition: transform 0.3s ease, box-shadow 0.3s ease;\n        }\n        \n        .card:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08);\n        }\n        \n        .btn {\n            transition: all 0.3s ease;\n        }\n        \n        .btn:hover {\n            transform: translateY(-1px);\n            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.12);\n        }\n        \n        \/* 750px\u5bec\u5ea6\u512a\u5316 *\/\n        @media (max-width: 767.98px) {\n            .container-fluid {\n                padding-left: 1rem;\n                padding-right: 1rem;\n            }\n            \n            .h2 {\n                font-size: 1.5rem;\n            }\n            \n            .h3 {\n                font-size: 1.3rem;\n            }\n            \n            .h4 {\n                font-size: 1.2rem;\n            }\n        }\n        \n        @media (max-width: 575.98px) {\n            .row.g-3 {\n                row-gap: 0.75rem;\n            }\n            \n            .card-body.p-3 {\n                padding: 0.75rem;\n            }\n        }\n    <\/style>\n\n    <script>\n        (() => {\n            'use strict';\n            \n            \/\/ \u6e2c\u9a57\u8cc7\u6599\n            const quizData = {\n                questions: [\n                    {\n                        id: 1,\n                        text: \"\u521d\u6b21\u898b\u9762\u6642\uff0c\u60a8\u7684\u6574\u9ad4\u8868\u73fe\u901a\u5e38\u662f\uff1a\",\n                        options: [\n                            { value: 'A', text: \"\u773c\u795e\u63a5\u89f8\u81ea\u7136\uff0c\u8868\u60c5\u771f\u8aa0\u53cb\u5584\", score: 5 },\n                            { value: 'B', text: \"\u7565\u986f\u7dca\u5f35\uff0c\u9700\u8981\u6642\u9593\u9069\u61c9\", score: 3 },\n                            { value: 'C', text: \"\u8868\u73fe\u96a8\u610f\uff0c\u4e0d\u592a\u5728\u610f\u5c0d\u65b9\u611f\u53d7\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 2,\n                        text: \"\u8207\u4eba\u521d\u6b21\u4ea4\u8ac7\u5f8c\uff0c\u60a8\u5c0d\u65bc\u5224\u8b80\u5c0d\u65b9\u7684\u80fd\u529b\u5982\u4f55\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u80fd\u6e96\u78ba\u611f\u77e5\u5c0d\u65b9\u7684\u6e9d\u901a\u98a8\u683c\u548c\u8208\u8da3\", score: 5 },\n                            { value: 'B', text: \"\u9700\u8981\u66f4\u591a\u6642\u9593\u624d\u80fd\u4e86\u89e3\u5c0d\u65b9\", score: 3 },\n                            { value: 'C', text: \"\u8f03\u96e3\u638c\u63e1\u5c0d\u65b9\u7684\u7279\u8cea\u548c\u504f\u597d\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 3,\n                        text: \"\u60a8\u9078\u64c7\u958b\u5834\u8a71\u984c\u7684\u7b56\u7565\u662f\uff1a\",\n                        options: [\n                            { value: 'A', text: \"\u89c0\u5bdf\u5c0d\u65b9\u53cd\u61c9\uff0c\u9078\u64c7\u4ed6\u5011\u611f\u8208\u8da3\u7684\u8a71\u984c\", score: 5 },\n                            { value: 'B', text: \"\u627e\u5c0b\u5f7c\u6b64\u90fd\u6709\u5171\u9cf4\u7684\u4e2d\u6027\u8a71\u984c\", score: 3 },\n                            { value: 'C', text: \"\u4e3b\u8981\u5206\u4eab\u81ea\u5df1\u719f\u6089\u6216\u95dc\u5fc3\u7684\u4e8b\u7269\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 4,\n                        text: \"\u5728\u5efa\u7acb\u5171\u540c\u8a71\u984c\u65b9\u9762\uff0c\u60a8\u7684\u8868\u73fe\u5982\u4f55\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u80fd\u654f\u92b3\u5bdf\u89ba\u4e26\u5feb\u901f\u627e\u5230\u5171\u540c\u8208\u8da3\u9ede\", score: 5 },\n                            { value: 'B', text: \"\u9700\u8981\u8f03\u9577\u6642\u9593\u7684\u63a2\u7d22\u548c\u8a66\u63a2\", score: 3 },\n                            { value: 'C', text: \"\u7d93\u5e38\u611f\u5230\u56f0\u96e3\uff0c\u4e0d\u77e5\u5982\u4f55\u627e\u5230\u9023\u7d50\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 5,\n                        text: \"\u5728\u5c0d\u8a71\u4e2d\uff0c\u60a8\u7684\u53c3\u8207\u65b9\u5f0f\u901a\u5e38\u662f\uff1a\",\n                        options: [\n                            { value: 'A', text: \"\u4ee5\u50be\u807d\u70ba\u4e3b\uff0c\u9069\u6642\u56de\u61c9\u548c\u63d0\u554f\", score: 5 },\n                            { value: 'B', text: \"\u50be\u807d\u8207\u8868\u9054\u4e26\u91cd\uff0c\u4fdd\u6301\u5e73\u8861\", score: 3 },\n                            { value: 'C', text: \"\u4e3b\u8981\u8868\u9054\u81ea\u5df1\u7684\u60f3\u6cd5\u548c\u7d93\u9a57\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 6,\n                        text: \"\u60a8\u7684\u8eab\u9ad4\u8a9e\u8a00\u901a\u5e38\u50b3\u9054\u4ec0\u9ebc\u8a0a\u606f\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u958b\u653e\u53cb\u5584\uff0c\u59ff\u614b\u81ea\u7136\u653e\u9b06\", score: 5 },\n                            { value: 'B', text: \"\u7565\u986f\u62d8\u8b39\uff0c\u4f46\u52aa\u529b\u8868\u73fe\u53cb\u597d\", score: 3 },\n                            { value: 'C', text: \"\u8f03\u70ba\u5c01\u9589\u6216\u4e0d\u592a\u6ce8\u610f\u8eab\u9ad4\u8a9e\u8a00\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 7,\n                        text: \"\u8207\u4eba\u4ea4\u8ac7\u6642\uff0c\u60a8\u7684\u773c\u795e\u63a5\u89f8\u7fd2\u6163\u662f\uff1a\",\n                        options: [\n                            { value: 'A', text: \"\u9069\u5ea6\u7684\u773c\u795e\u63a5\u89f8\uff0c\u8868\u9054\u5c08\u6ce8\u548c\u5c0a\u91cd\", score: 5 },\n                            { value: 'B', text: \"\u5076\u723e\u770b\u5411\u5c0d\u65b9\uff0c\u4f46\u5bb9\u6613\u5206\u5fc3\", score: 3 },\n                            { value: 'C', text: \"\u8f03\u5c11\u773c\u795e\u63a5\u89f8\uff0c\u6216\u904e\u5ea6\u6ce8\u8996\u5176\u4ed6\u4e8b\u7269\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 8,\n                        text: \"\u60a8\u7684\u8aaa\u8a71\u65b9\u5f0f\u7d66\u4eba\u4ec0\u9ebc\u5370\u8c61\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u97f3\u91cf\u9069\u4e2d\uff0c\u8a9e\u8abf\u6eab\u548c\u6709\u8b8a\u5316\", score: 5 },\n                            { value: 'B', text: \"\u8072\u97f3\u8f03\u5c0f\uff0c\u9700\u8981\u5c0d\u65b9\u5c08\u6ce8\u8046\u807d\", score: 3 },\n                            { value: 'C', text: \"\u97f3\u91cf\u8f03\u5927\uff0c\u8a9e\u8abf\u5145\u6eff\u71b1\u60c5\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 9,\n                        text: \"\u60a8\u7684\u8868\u9054\u65b9\u5f0f\u6709\u591a\u8c50\u5bcc\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u9069\u5ea6\u4f7f\u7528\u624b\u52e2\uff0c\u4f46\u4e0d\u6703\u904e\u65bc\u8a87\u5f35\", score: 5 },\n                            { value: 'B', text: \"\u5076\u723e\u4f7f\u7528\u7c21\u55ae\u7684\u80a2\u9ad4\u8a9e\u8a00\", score: 3 },\n                            { value: 'C', text: \"\u7d93\u5e38\u4f7f\u7528\u8c50\u5bcc\u7684\u624b\u52e2\u548c\u8868\u60c5\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 10,\n                        text: \"\u60a8\u7684\u8aaa\u8a71\u7bc0\u594f\u5982\u4f55\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u8a9e\u901f\u9069\u4e2d\uff0c\u8b93\u5c0d\u65b9\u5bb9\u6613\u8ddf\u4e0a\", score: 5 },\n                            { value: 'B', text: \"\u8aaa\u8a71\u8f03\u6162\uff0c\u6709\u6642\u6703\u9020\u6210\u505c\u9813\", score: 3 },\n                            { value: 'C', text: \"\u8a9e\u901f\u8f03\u5feb\uff0c\u8cc7\u8a0a\u91cf\u8f03\u5927\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 11,\n                        text: \"\u7576\u5c0d\u65b9\u8ac7\u8ad6\u60a8\u4e0d\u611f\u8208\u8da3\u7684\u8a71\u984c\u6642\uff0c\u60a8\u6703\uff1a\",\n                        options: [\n                            { value: 'A', text: \"\u4fdd\u6301\u79ae\u8c8c\u5c08\u6ce8\uff0c\u5617\u8a66\u627e\u51fa\u6709\u8da3\u7684\u89d2\u5ea6\", score: 5 },\n                            { value: 'B', text: \"\u5b89\u975c\u8046\u807d\uff0c\u7b49\u5f85\u8a71\u984c\u8f49\u63db\u7684\u6a5f\u6703\", score: 3 },\n                            { value: 'C', text: \"\u4e3b\u52d5\u8f49\u79fb\u8a71\u984c\u5230\u81ea\u5df1\u611f\u8208\u8da3\u7684\u5167\u5bb9\", score: 1 }\n                        ]\n                    },\n                    {\n                        id: 12,\n                        text: \"\u95dc\u65bc\u5f8c\u7e8c\u806f\u7e6b\uff0c\u60a8\u901a\u5e38\u5982\u4f55\u8655\u7406\uff1f\",\n                        options: [\n                            { value: 'A', text: \"\u4e3b\u52d5\u63d0\u51fa\u5177\u9ad4\u7684\u518d\u6b21\u898b\u9762\u5efa\u8b70\", score: 5 },\n                            { value: 'B', text: \"\u7b49\u5f85\u5c0d\u65b9\u63d0\u51fa\u5f8c\u7e8c\u5b89\u6392\", score: 3 },\n                            { value: 'C', text: \"\u81ea\u7136\u7d50\u675f\uff0c\u6c92\u6709\u7279\u5225\u5b89\u6392\u5f8c\u7e8c\", score: 1 }\n                        ]\n                    }\n                ]\n            };\n            \n            \/\/ \u6e2c\u9a57\u72c0\u614b\n            let currentQuestion = 0;\n            let answers = new Array(quizData.questions.length).fill(null);\n            let totalScore = 0;\n            let chartInstance = null; \/\/ \u7528\u65bc\u8ffd\u8e64\u5716\u8868\u5be6\u4f8b\n            \n            \/\/ DOM \u5143\u7d20\n            const pages = {\n                intro: document.querySelector('[data-page=\"intro\"]'),\n                test: document.querySelector('[data-page=\"test\"]'),\n                result: document.querySelector('[data-page=\"result\"]')\n            };\n            \n            const elements = {\n                progressBar: document.querySelector('[data-progress-bar]'),\n                progressText: document.querySelector('[data-progress-text]'),\n                questionContainer: document.querySelector('[data-question-container]'),\n                prevButton: document.querySelector('[data-action=\"prev-question\"]'),\n                resultType: document.querySelector('[data-result-type]'),\n                resultLevel: document.querySelector('[data-result-level]'),\n                resultDescription: document.querySelector('[data-result-description]'),\n                resultSuggestions: document.querySelector('[data-result-suggestions]'),\n                resultIconContainer: document.querySelector('[data-result-icon-container]')\n            };\n            \n            \/\/ \u521d\u59cb\u5316\n            const init = () => {\n                bindEvents();\n                showPage('intro');\n            };\n            \n            \/\/ \u7d81\u5b9a\u4e8b\u4ef6\n            const bindEvents = () => {\n                \/\/ \u958b\u59cb\u6e2c\u9a57\u6309\u9215\n                document.querySelector('[data-action=\"start-quiz\"]')?.addEventListener('click', startQuiz);\n                \n                \/\/ \u91cd\u65b0\u6e2c\u9a57\u6309\u9215\n                document.querySelector('[data-action=\"restart-quiz\"]')?.addEventListener('click', restartQuiz);\n                \n                \/\/ \u4e0a\u4e00\u984c\u6309\u9215\n                elements.prevButton?.addEventListener('click', prevQuestion);\n                \n                \/\/ \u9078\u9805\u9ede\u64ca\u4e8b\u4ef6\u59d4\u6d3e\n                elements.questionContainer?.addEventListener('click', handleOptionClick);\n            };\n            \n            \/\/ \u986f\u793a\u9801\u9762\n            const showPage = (pageName) => {\n                Object.values(pages).forEach(page => {\n                    page?.classList.add('d-none');\n                    page?.classList.remove('d-block');\n                });\n                \n                const targetPage = pages[pageName];\n                if (targetPage) {\n                    targetPage.classList.remove('d-none');\n                    targetPage.classList.add('d-block');\n                    \n                    \/\/ \u6372\u52d5\u5230\u9801\u9762\u9802\u90e8\n                    setTimeout(() => {\n                        targetPage.scrollIntoView({ \n                            behavior: 'smooth', \n                            block: 'start' \n                        });\n                    }, 100);\n                }\n            };\n            \n            \/\/ \u958b\u59cb\u6e2c\u9a57\n            const startQuiz = () => {\n                \/\/ \u92b7\u6bc0\u73fe\u6709\u7684\u5716\u8868\u5be6\u4f8b\n                if (chartInstance) {\n                    chartInstance.destroy();\n                    chartInstance = null;\n                }\n                \n                currentQuestion = 0;\n                answers = new Array(quizData.questions.length).fill(null);\n                totalScore = 0;\n                showPage('test');\n                displayQuestion();\n            };\n            \n            \/\/ \u91cd\u65b0\u6e2c\u9a57\n            const restartQuiz = () => {\n                \/\/ \u92b7\u6bc0\u73fe\u6709\u7684\u5716\u8868\u5be6\u4f8b\n                if (chartInstance) {\n                    chartInstance.destroy();\n                    chartInstance = null;\n                }\n                \n                currentQuestion = 0;\n                answers = new Array(quizData.questions.length).fill(null);\n                totalScore = 0;\n                showPage('intro');\n            };\n            \n            \/\/ \u986f\u793a\u984c\u76ee\n            const displayQuestion = () => {\n                const question = quizData.questions[currentQuestion];\n                if (!question) return;\n                \n                updateProgress();\n                \n                const optionsHtml = question.options.map((option, index) => `\n                    <div class=\"impression-quiz-option card mb-2\" data-option-value=\"${option.value}\" data-option-score=\"${option.score}\">\n                        <div class=\"card-body p-3\">\n                            <div class=\"d-flex align-items-center\">\n                                <div class=\"option-indicator me-3\"><\/div>\n                                <div class=\"flex-grow-1\">\n                                    <div class=\"fw-medium\" style=\"font-size: 18px; line-height: 1.4;\">\n                                        ${option.text}\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            <input type=\"radio\" name=\"question-${question.id}\" value=\"${option.value}\" class=\"form-check-input d-none\">\n                        <\/div>\n                    <\/div>\n                `).join('');\n                \n                elements.questionContainer.innerHTML = `\n                    <div>\n                        <h3 class=\"fw-bold mb-3\" style=\"font-size: 22px; color: #333; line-height: 1.3;\">\n                            ${question.text}\n                        <\/h3>\n                        <div>\n                            ${optionsHtml}\n                        <\/div>\n                    <\/div>\n                `;\n                \n                \/\/ \u986f\u793a\/\u96b1\u85cf\u4e0a\u4e00\u984c\u6309\u9215\n                elements.prevButton.style.display = currentQuestion > 0 ? 'inline-block' : 'none';\n                \n                \/\/ \u5982\u679c\u5df2\u6709\u7b54\u6848\uff0c\u6062\u5fa9\u9078\u4e2d\u72c0\u614b\n                const previousAnswer = answers[currentQuestion];\n                if (previousAnswer) {\n                    setTimeout(() => {\n                        const optionElement = elements.questionContainer.querySelector(`[data-option-value=\"${previousAnswer.value}\"]`);\n                        if (optionElement) {\n                            optionElement.classList.add('selected');\n                            const input = optionElement.querySelector('input');\n                            if (input) input.checked = true;\n                        }\n                    }, 100);\n                }\n            };\n            \n            \/\/ \u66f4\u65b0\u9032\u5ea6\n            const updateProgress = () => {\n                const progress = ((currentQuestion + 1) \/ quizData.questions.length) * 100;\n                elements.progressBar.style.width = `${progress}%`;\n                elements.progressText.textContent = `\u7b2c ${currentQuestion + 1} \u984c \/ \u5171 ${quizData.questions.length} \u984c`;\n            };\n            \n            \/\/ \u8655\u7406\u9078\u9805\u9ede\u64ca\n            const handleOptionClick = (event) => {\n                const optionElement = event.target.closest('.impression-quiz-option');\n                if (!optionElement) return;\n                \n                \/\/ \u79fb\u9664\u5176\u4ed6\u9078\u9805\u7684\u9078\u4e2d\u72c0\u614b\n                elements.questionContainer.querySelectorAll('.impression-quiz-option').forEach(option => {\n                    option.classList.remove('selected');\n                    const input = option.querySelector('input');\n                    if (input) input.checked = false;\n                });\n                \n                \/\/ \u8a2d\u5b9a\u7576\u524d\u9078\u9805\u70ba\u9078\u4e2d\u72c0\u614b\n                optionElement.classList.add('selected');\n                const input = optionElement.querySelector('input');\n                if (input) input.checked = true;\n                \n                \/\/ \u8a18\u9304\u7b54\u6848\n                answers[currentQuestion] = {\n                    questionId: currentQuestion + 1,\n                    value: optionElement.dataset.optionValue,\n                    score: parseInt(optionElement.dataset.optionScore)\n                };\n                \n                \/\/ \u5ef6\u9072\u9032\u5165\u4e0b\u4e00\u984c\uff0c\u8b93\u4f7f\u7528\u8005\u770b\u5230\u9078\u4e2d\u6548\u679c\n                setTimeout(() => {\n                    \/\/ \u5982\u679c\u662f\u6700\u5f8c\u4e00\u984c\uff0c\u76f4\u63a5\u6aa2\u67e5\u5b8c\u6574\u6027\u4e26\u8df3\u8f49\u7d50\u679c\n                    if (currentQuestion === quizData.questions.length - 1) {\n                        const unansweredQuestions = answers.filter(answer => answer === null);\n                        if (unansweredQuestions.length === 0) {\n                            \/\/ \u6240\u6709\u984c\u76ee\u90fd\u5df2\u56de\u7b54\uff0c\u76f4\u63a5\u8a08\u7b97\u7d50\u679c\n                            calculateResult();\n                            return;\n                        }\n                    }\n                    nextQuestion();\n                }, 600);\n            };\n            \n            \/\/ \u4e0b\u4e00\u984c\n            const nextQuestion = () => {\n                if (currentQuestion < quizData.questions.length - 1) {\n                    currentQuestion++;\n                    displayQuestion();\n                } else {\n                    \/\/ \u5df2\u7d93\u662f\u6700\u5f8c\u4e00\u984c\uff0c\u9019\u7a2e\u60c5\u6cc1\u4e00\u822c\u4e0d\u6703\u5230\u9054\u9019\u88e1\n                    \/\/ \u56e0\u70ba\u6700\u5f8c\u4e00\u984c\u5728handleOptionClick\u4e2d\u76f4\u63a5\u8655\u7406\u4e86\n                    calculateResult();\n                }\n            };\n            \n            \/\/ \u4e0a\u4e00\u984c\n            const prevQuestion = () => {\n                if (currentQuestion > 0) {\n                    currentQuestion--;\n                    displayQuestion();\n                }\n            };\n            \n            \/\/ \u8a08\u7b97\u7d50\u679c\n            const calculateResult = () => {\n                \/\/ \u78ba\u4fdd\u6240\u6709\u7b54\u6848\u90fd\u5b58\u5728\n                const unansweredQuestions = answers.map((answer, index) => answer === null ? index : null).filter(index => index !== null);\n                \n                if (unansweredQuestions.length > 0) {\n                    \/\/ \u9084\u6709\u672a\u56de\u7b54\u7684\u984c\u76ee\uff0c\u8df3\u5230\u7b2c\u4e00\u500b\u672a\u56de\u7b54\u7684\u984c\u76ee\n                    currentQuestion = unansweredQuestions[0];\n                    showPage('test');\n                    displayQuestion();\n                    return;\n                }\n                \n                \/\/ \u8a08\u7b97\u7e3d\u5206\n                totalScore = answers.reduce((sum, answer) => sum + answer.score, 0);\n                \n                const result = getResultType(totalScore);\n                displayResult(result);\n                showPage('result');\n            };\n            \n            \/\/ \u53d6\u5f97\u7d50\u679c\u985e\u578b\n            const getResultType = (score) => {\n                if (score >= 48) {\n                    return {\n                        type: '\u5353\u8d8a\u5370\u8c61\u578b',\n                        level: '\u512a\u79c0\u6c34\u6e96',\n                        icon: 'bi-star-fill',\n                        color: 'success',\n                        description: `\n                            <p class=\"mb-2\">\u60a8\u5728\u5efa\u7acb\u7b2c\u4e00\u5370\u8c61\u65b9\u9762\u8868\u73fe\u5353\u8d8a\u3002\u60a8\u7684\u6eab\u548c\u9069\u5ea6\u3001\u771f\u8aa0\u5408\u4f5c\u7684\u614b\u5ea6\uff0c\u8b93\u521d\u6b21\u898b\u9762\u7684\u4eba\u7559\u4e0b\u6df1\u523b\u6b63\u9762\u5370\u8c61\u3002<\/p>\n                            <p class=\"mb-0\">\u7121\u8ad6\u5728\u8077\u5834\u6216\u79c1\u4eba\u5834\u5408\uff0c\u5225\u4eba\u90fd\u6703\u6709\u8207\u60a8\u9032\u4e00\u6b65\u4ea4\u5f80\u7684\u610f\u9858\u3002\u60a8\u5929\u751f\u5177\u5099\u826f\u597d\u7684\u793e\u4ea4\u76f4\u89ba\uff0c\u80fd\u5920\u654f\u92b3\u5730\u5bdf\u89ba\u4ed6\u4eba\u7684\u9700\u6c42\u548c\u60c5\u7dd2\u3002<\/p>\n                        `,\n                        suggestions: `\n                            <p class=\"mb-2\"><strong>\u7dad\u6301\u512a\u52e2\uff1a<\/strong><\/p>\n                            <ul class=\"mb-2\">\n                                <li class=\"mb-1\">\u7e7c\u7e8c\u4fdd\u6301\u60a8\u81ea\u7136\u771f\u8aa0\u7684\u6e9d\u901a\u98a8\u683c<\/li>\n                                <li class=\"mb-1\">\u5584\u7528\u60a8\u7684\u793e\u4ea4\u5929\u8ce6\uff0c\u6210\u70ba\u5718\u968a\u4e2d\u7684\u6e9d\u901a\u6a4b\u6a11<\/li>\n                                <li class=\"mb-1\">\u5206\u4eab\u60a8\u7684\u7d93\u9a57\uff0c\u5e6b\u52a9\u8eab\u908a\u7684\u4eba\u63d0\u5347\u793e\u4ea4\u6280\u5de7<\/li>\n                            <\/ul>\n                            <p class=\"mb-0\"><strong>\u6ce8\u610f\u4e8b\u9805\uff1a<\/strong> \u6ce8\u610f\u8b58\u5225\u90a3\u4e9b\u5c0d\u60a8\u300c\u4e00\u898b\u937e\u60c5\u300d\u4f46\u53ef\u80fd\u4e0d\u9069\u5408\u7684\u5c0d\u8c61\uff0c\u4fdd\u6301\u7406\u6027\u5224\u65b7\u3002<\/p>\n                        `\n                    };\n                } else if (score >= 28) {\n                    return {\n                        type: '\u6f5b\u529b\u767c\u5c55\u578b',\n                        level: '\u826f\u597d\u6c34\u6e96',\n                        icon: 'bi-graph-up-arrow',\n                        color: 'info',\n                        description: `\n                            <p class=\"mb-2\">\u60a8\u7684\u8868\u73fe\u4e2d\u6709\u8a31\u591a\u8a0e\u4eba\u559c\u6b61\u7684\u5143\u7d20\uff0c\u4f46\u4ecd\u6709\u6539\u5584\u7a7a\u9593\u3002\u5225\u4eba\u4e0d\u6703\u5c0d\u60a8\u7522\u751f\u8ca0\u9762\u5370\u8c61\uff0c\u4f46\u5438\u5f15\u529b\u9084\u53ef\u4ee5\u66f4\u5f37\u3002<\/p>\n                            <p class=\"mb-0\">\u60a8\u5177\u5099\u826f\u597d\u7684\u57fa\u790e\uff0c\u53ea\u9700\u8981\u4e00\u4e9b\u8abf\u6574\u548c\u7df4\u7fd2\uff0c\u5c31\u80fd\u5927\u5e45\u63d0\u5347\u60a8\u7684\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u3002<\/p>\n                        `,\n                        suggestions: `\n                            <p class=\"mb-2\"><strong>\u6539\u5584\u65b9\u5411\uff1a<\/strong><\/p>\n                            <ul class=\"mb-0\">\n                                <li class=\"mb-1\">\u63d0\u9ad8\u5c0d\u9996\u6b21\u4e92\u52d5\u7684\u91cd\u8996\u7a0b\u5ea6<\/li>\n                                <li class=\"mb-1\">\u7df4\u7fd2\u4e3b\u52d5\u5efa\u7acb\u8a71\u984c\u9023\u7d50<\/li>\n                                <li class=\"mb-1\">\u589e\u5f37\u8eab\u9ad4\u8a9e\u8a00\u7684\u958b\u653e\u6027<\/li>\n                                <li class=\"mb-1\">\u57f9\u990a\u66f4\u654f\u92b3\u7684\u793e\u4ea4\u89c0\u5bdf\u529b<\/li>\n                                <li class=\"mb-1\">\u591a\u7df4\u7fd2\u5728\u93e1\u5b50\u524d\u7684\u8868\u60c5\u548c\u59ff\u614b<\/li>\n                                <li>\u5b78\u7fd2\u8b80\u61c2\u4ed6\u4eba\u7684\u975e\u8a9e\u8a00\u8a0a\u865f<\/li>\n                            <\/ul>\n                        `\n                    };\n                } else {\n                    return {\n                        type: '\u57fa\u790e\u5efa\u69cb\u578b',\n                        level: '\u8d77\u6b65\u6c34\u6e96',\n                        icon: 'bi-tools',\n                        color: 'warning',\n                        description: `\n                            <p class=\"mb-2\">\u60a8\u53ef\u80fd\u4f9d\u7167\u7fd2\u6163\u884c\u4e8b\uff0c\u4f46\u7121\u610f\u4e2d\u932f\u5931\u4e86\u5efa\u7acb\u826f\u597d\u7b2c\u4e00\u5370\u8c61\u7684\u6a5f\u6703\u3002\u96d6\u7136\u60a8\u5167\u5fc3\u5e0c\u671b\u7d66\u4eba\u597d\u5370\u8c61\uff0c\u4f46\u5728\u8868\u9054\u65b9\u5f0f\u4e0a\u9700\u8981\u66f4\u591a\u7528\u5fc3\u3002<\/p>\n                            <p class=\"mb-0\">\u4e0d\u7528\u64d4\u5fc3\uff0c\u793e\u4ea4\u6280\u5de7\u662f\u53ef\u4ee5\u5b78\u7fd2\u548c\u6539\u5584\u7684\u3002\u900f\u904e\u6709\u610f\u8b58\u7684\u7df4\u7fd2\uff0c\u60a8\u4e00\u5b9a\u80fd\u5920\u5927\u5e45\u63d0\u5347\u81ea\u5df1\u7684\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u3002<\/p>\n                        `,\n                        suggestions: `\n                            <p class=\"mb-2\"><strong>\u91cd\u9ede\u6539\u5584\uff1a<\/strong><\/p>\n                            <ul class=\"mb-0\">\n                                <li class=\"mb-1\"><strong>\u63d0\u5347\u793e\u4ea4\u610f\u8b58\uff1a<\/strong> \u4e86\u89e3\u7b2c\u4e00\u5370\u8c61\u7684\u91cd\u8981\u6027<\/li>\n                                <li class=\"mb-1\"><strong>\u6539\u5584\u6e9d\u901a\u6280\u5de7\uff1a<\/strong> \u5b78\u7fd2\u50be\u807d\u548c\u56de\u61c9\u7684\u85dd\u8853<\/li>\n                                <li class=\"mb-1\"><strong>\u6ce8\u610f\u7d30\u7bc0\uff1a<\/strong> \u5f9e\u773c\u795e\u63a5\u89f8\u3001\u8eab\u9ad4\u8a9e\u8a00\u958b\u59cb\u7df4\u7fd2<\/li>\n                                <li class=\"mb-1\"><strong>\u57f9\u990a\u540c\u7406\u5fc3\uff1a<\/strong> \u591a\u5f9e\u5c0d\u65b9\u89d2\u5ea6\u601d\u8003\u4e92\u52d5\u6548\u679c<\/li>\n                                <li class=\"mb-1\"><strong>\u5efa\u7acb\u81ea\u4fe1\uff1a<\/strong> \u76f8\u4fe1\u81ea\u5df1\u503c\u5f97\u88ab\u559c\u6b61\u548c\u5c0a\u91cd<\/li>\n                                <li>\u53c3\u52a0\u793e\u4ea4\u6280\u5de7\u57f9\u8a13\u8ab2\u7a0b\u6216\u5de5\u4f5c\u574a<\/li>\n                            <\/ul>\n                        `\n                    };\n                }\n            };\n            \n            \/\/ \u986f\u793a\u7d50\u679c\n            const displayResult = (result) => {\n                \/\/ \u8a2d\u5b9a\u7d50\u679c\u8cc7\u8a0a\n                elements.resultType.textContent = result.type;\n                elements.resultLevel.textContent = result.level;\n                elements.resultDescription.innerHTML = result.description;\n                elements.resultSuggestions.innerHTML = result.suggestions;\n                \n                \/\/ \u8a2d\u5b9a\u5716\u793a\n                elements.resultIconContainer.innerHTML = `<i class=\"bi ${result.icon} fs-3 text-${result.color}\"><\/i>`;\n                elements.resultIconContainer.className = `bg-${result.color} bg-opacity-10 rounded-circle d-inline-flex align-items-center justify-content-center mb-2`;\n                \n                \/\/ \u5efa\u7acb\u5716\u8868\n                createResultChart();\n            };\n            \n            \/\/ \u5efa\u7acb\u7d50\u679c\u5716\u8868 - \u9069\u61c9750px\u5bec\u5ea6\u7684\u5806\u758a\u6c34\u5e73\u9577\u689d\u5716\n            const createResultChart = () => {\n                const ctx = document.getElementById('impression-result-chart');\n                if (!ctx) return;\n                \n                \/\/ \u92b7\u6bc0\u73fe\u6709\u7684\u5716\u8868\u5be6\u4f8b\n                if (chartInstance) {\n                    chartInstance.destroy();\n                    chartInstance = null;\n                }\n                \n                \/\/ \u5b9a\u7fa9\u5206\u6578\u5340\u9593 - \u7e3d\u7bc4\u570d12-60\u5206\n                const totalMin = 12;\n                const totalMax = 60;\n                const totalRange = totalMax - totalMin; \/\/ 48\u5206\n                \n                const ranges = [\n                    { label: '\u57fa\u790e\u5efa\u69cb\u578b', min: 12, max: 27, color: '#ffc107' },\n                    { label: '\u6f5b\u529b\u767c\u5c55\u578b', min: 28, max: 47, color: '#0dcaf0' },\n                    { label: '\u5353\u8d8a\u5370\u8c61\u578b', min: 48, max: 60, color: '#198754' }\n                ];\n                \n                \/\/ \u8a08\u7b97\u6bcf\u500b\u5340\u9593\u7684\u5be6\u969b\u9577\u5ea6\n                const rangeData = ranges.map(range => range.max - range.min + 1);\n                \n                chartInstance = new Chart(ctx, {\n                    type: 'bar',\n                    data: {\n                        labels: ['\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u5206\u5e03'],\n                        datasets: ranges.map((range, index) => ({\n                            label: `${range.label} (${range.min}-${range.max}\u5206)`,\n                            data: [rangeData[index]],\n                            backgroundColor: range.color + '80',\n                            borderColor: range.color,\n                            borderWidth: 1\n                        }))\n                    },\n                    options: {\n                        indexAxis: 'y',\n                        responsive: true,\n                        maintainAspectRatio: false,\n                        scales: {\n                            x: {\n                                stacked: true,\n                                min: 0,\n                                max: totalRange,\n                                ticks: {\n                                    stepSize: 12,\n                                    font: {\n                                        size: 10\n                                    },\n                                    callback: function(value) {\n                                        return (value + totalMin).toString();\n                                    }\n                                },\n                                grid: {\n                                    color: '#e9ecef'\n                                }\n                            },\n                            y: {\n                                stacked: true,\n                                display: false\n                            }\n                        },\n                        plugins: {\n                            legend: {\n                                display: true,\n                                position: 'bottom',\n                                labels: {\n                                    font: {\n                                        size: 11\n                                    },\n                                    boxWidth: 12,\n                                    padding: 8\n                                }\n                            },\n                            tooltip: {\n                                callbacks: {\n                                    title: function() {\n                                        return '\u7b2c\u4e00\u5370\u8c61\u5f71\u97ff\u529b\u5206\u5e03';\n                                    },\n                                    label: function(context) {\n                                        const range = ranges[context.datasetIndex];\n                                        if (range) {\n                                            return `${range.label}: ${range.min}-${range.max}\u5206`;\n                                        }\n                                        return '';\n                                    }\n                                }\n                            }\n                        },\n                        animation: {\n                            onComplete: function() {\n                                \/\/ \u5728\u5716\u8868\u5b8c\u6210\u5f8c\u65b0\u589e\u4f7f\u7528\u8005\u4f4d\u7f6e\u6a19\u8a18\n                                const chart = this;\n                                const ctx = chart.ctx;\n                                const chartArea = chart.chartArea;\n                                \n                                \/\/ \u8a08\u7b97\u4f7f\u7528\u8005\u4f4d\u7f6e\u7684x\u5ea7\u6a19\uff08\u76f8\u5c0d\u65bc\u5716\u8868\u8d77\u59cb\u4f4d\u7f6e\uff09\n                                const userRelativePosition = totalScore - totalMin; \/\/ \u76f8\u5c0d\u65bc\u6700\u5c0f\u503c\u7684\u4f4d\u7f6e\n                                const xScale = chart.scales.x;\n                                const userX = xScale.getPixelForValue(userRelativePosition);\n                                const barY = chartArea.top + (chartArea.bottom - chartArea.top) \/ 2;\n                                \n                                \/\/ \u7e6a\u88fd\u4f7f\u7528\u8005\u4f4d\u7f6e\u6a19\u8a18\n                                ctx.save();\n                                ctx.fillStyle = '#dc3545';\n                                ctx.strokeStyle = '#fff';\n                                ctx.lineWidth = 2;\n                                \n                                \/\/ \u7e6a\u88fd\u5713\u9ede\n                                ctx.beginPath();\n                                ctx.arc(userX, barY, 6, 0, Math.PI * 2);\n                                ctx.fill();\n                                ctx.stroke();\n                                \n                                \/\/ \u7e6a\u88fd\u6a19\u7c64\n                                ctx.fillStyle = '#333';\n                                ctx.font = 'bold 11px sans-serif';\n                                ctx.textAlign = 'center';\n                                ctx.fillText(`\u60a8: ${totalScore}\u5206`, userX, barY - 15);\n                                \n                                ctx.restore();\n                            }\n                        }\n                    }\n                });\n            };\n            \n            \/\/ \u521d\u59cb\u5316\u61c9\u7528\u7a0b\u5f0f\n            init();\n        })();\n    <\/script>\n\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/bootstrap\/5.3.3\/js\/bootstrap.bundle.min.js\"><\/script>","protected":false},"excerpt":{"rendered":"<p>\u4ece\u5fc3\u7406\u5b66\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u7b2c\u4e00\u6b21\u5370\u8c61\u662f\u5728\u5bf9\u5176\u4eba\u4e00\u65e0\u6240\u77e5\u7684\u60c5\u51b5\u4e0b\u83b7\u5f97\u7684\uff0c\u6240\u4ee5\u5d4c\u5165\u5927\u8111\u7684\u7a0b\u5ea6\u8f83\u6df1\uff0c\u5e76\u4e14\u5bf9\u4eca\u540e\u8f93\u5165\u7684\u5173\u4e8e\u6b64\u4eba\u7684\u8d44\u8baf\u5c06\u4ea7\u751f\u4e0d\u53ef\u5ffd\u7565\u7684\u4f5c\u7528\u3002\u8fd9\u4e2a\u5fc3\u7406\u73b0\u8c61\u53c8\u79f0\u4e3a\u300c\u9996\u56e0\u6548\u5e94\u300d\u3002\u4e0b\u976212\u4e2a\u95ee\u9898\u53ef\u4ee5\u4f7f\u4f60\u77e5\u9053\u81ea\u5df1\u662f\u5426\u5584\u4e8e\u8fd0\u7528\u9996\u56e0\u6548\u5e94\uff0c\u4ece\u800c\u8fc5\u901f\u5efa\u7acb\u826f\u597d\u7684\u4eba\u9645\u5173\u7cfb\u3002<\/p>","protected":false},"author":19,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"narrow-width-container","site-content-style":"unboxed","site-sidebar-style":"default","ast-global-header-display":"disabled","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[167,175],"tags":[205],"class_list":["post-2695","post","type-post","status-publish","format-standard","hentry","category-personality","category-relationships","tag-first-impressions"],"_links":{"self":[{"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/posts\/2695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/comments?post=2695"}],"version-history":[{"count":4,"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/posts\/2695\/revisions"}],"predecessor-version":[{"id":10176,"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/posts\/2695\/revisions\/10176"}],"wp:attachment":[{"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/media?parent=2695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/categories?post=2695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xinliceyan.org\/zh\/wp-json\/wp\/v2\/tags?post=2695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}