跳至正文

2026-8新标-星评质控评价表(填得分项)_GLM

    2026年社区养老服务设施星级评定质控评价表 /* ============ 基础变量(政务/民政文档风格) ============ */ :root { --primary: #345b6e; /* 暖墨青,主色(温馨向) */ --primary-dark: #244a5c; /* 表头深色 */ --accent: #b08968; /* 暖陶土棕,强调/分组 */ --gold: #c9a227; /* 暖金,星级/补贴 */ --bg: #faf5ee; /* 暖米白背景,略带杏色 */ --surface: #ffffff; /* 卡片白 */ --row-alt: #f5efe6; /* 暖米交替行 */ --row-group: #efe6d8; /* 暖陶土浅,分组标题行 */ --row-subtotal: #f2ede4; /* 暖小计行 */ --row-total: #ebe4d6; /* 暖合计行 */ --border: #ddd3c2; /* 暖灰边框 */ --border-light: #e8e0d2; /* 暖细线 */ --text: #3a332c; /* 暖深棕灰正文 */ --text-soft: #5d5249; /* 暖灰次要文字 */ --text-mute: #9a8d7d; /* 暖灰弱化 */ --required: #c0392b; /* 暖砖红,必填 */ --error: #c0392b; --success-bg: #ecf3e8; --success-text: #4a6b3a; --error-bg: #f9eae6; --error-text: #8a3a2a; } * { margin: 0; padding: 0; box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { font-family: 'Microsoft YaHei', '微软雅黑', 'PingFang SC', sans-serif; background-color: var(--bg); color: var(--text); line-height: 1.65; padding: 18px 14px; font-size: 17px; } /* ============ 容器 ============ */ .eval-container { max-width: 960px; margin: 0 auto; } /* ============ 页眉 ============ */ .eval-header { background: var(--surface); border: 1px solid var(--border); border-top: 4px solid var(--accent); padding: 22px 26px 18px; margin-bottom: 14px; border-radius: 8px; box-shadow: 0 2px 10px rgba(176, 137, 104, 0.10); } .eval-header .doc-meta { font-size: 15px; color: var(--text-soft); border-bottom: 1px solid var(--border-light); padding-bottom: 8px; margin-bottom: 12px; display: flex; flex-wrap: wrap; gap: 4px 22px; } .eval-header .doc-meta span b { color: var(--primary); font-weight: 600; } .eval-header h1 { font-family: 'SimSun', '宋体', 'Songti SC', serif; font-size: 24px; font-weight: 700; color: var(--primary); letter-spacing: 1px; margin-bottom: 6px; } .eval-header .subtitle { font-size: 15px; color: var(--text-soft); } /* ============ 填报说明 ============ */ .eval-notice { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--accent); padding: 14px 20px; margin-bottom: 14px; font-size: 13.5px; color: var(--text-soft); border-radius: 6px; box-shadow: 0 2px 8px rgba(176, 137, 104, 0.08); } .eval-notice .notice-title { font-family: 'SimSun', '宋体', serif; font-size: 15px; font-weight: 700; color: var(--primary); margin-bottom: 6px; } .eval-notice ul { margin: 4px 0 0 18px; } .eval-notice li { margin-bottom: 3px; } .eval-notice .required { color: var(--required); font-weight: 700; } /* ============ 区块标题 ============ */ .section-bar { font-family: 'SimSun', '宋体', serif; font-size: 18px; font-weight: 700; color: #fff; background: var(--primary); padding: 7px 16px; margin-bottom: 0; border: 1px solid var(--primary); border-bottom: 2px solid var(--accent); } /* ============ 基本信息区 ============ */ .info-block { background: var(--surface); border: 1px solid var(--border); border-top: none; padding: 18px 20px; margin-bottom: 14px; } .info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px 22px; } .info-field { display: flex; flex-direction: column; } .info-field.full { grid-column: 1 / -1; } .info-field label { font-size: 15.5px; font-weight: 600; color: var(--text-soft); margin-bottom: 5px; } .info-field label .required { color: var(--required); margin-left: 2px; } .info-field .hint { font-size: 14px; color: var(--text-mute); font-weight: 400; margin-top: 3px; } .cf7-input, .cf7-select, .cf7-password { width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: 6px; background: #fff; font-size: 16px; color: var(--text); font-family: inherit; transition: border-color 0.15s, box-shadow 0.15s; } .cf7-input:focus, .cf7-select:focus, .cf7-password:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 2px rgba(52, 91, 110, 0.16); } .cf7-input::placeholder { color: var(--text-mute); } /* 提交类型 单选 */ .radio-inline { display: flex; flex-wrap: wrap; gap: 18px; padding-top: 2px; } .radio-inline .wpcf7-list-item { margin: 0; } .radio-inline label { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; font-size: 16px; color: var(--text); font-weight: 500; } .radio-inline input[type="radio"] { appearance: none; -webkit-appearance: none; width: 16px; height: 16px; border: 1.5px solid var(--border); border-radius: 50%; background: #fff; position: relative; cursor: pointer; flex-shrink: 0; } .radio-inline input[type="radio"]:checked { border-color: var(--primary); } .radio-inline input[type="radio"]:checked::after { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 8px; height: 8px; border-radius: 50%; background: var(--primary); } /* ============ 评分表格 ============ */ .table-block { background: var(--surface); border: 1px solid var(--border); border-top: none; margin-bottom: 14px; overflow-x: auto; -webkit-overflow-scrolling: touch; } /* 同时保留无前缀选择器(便于本地预览)并增加 .wpcf7-form 前缀(提高在 WordPress/CF7 中的优先级) */ .eval-table, .wpcf7-form .eval-table { width: 100% !important; border-collapse: collapse; font-size: 16px; table-layout: fixed !important; min-width: 760px; } .eval-table th, .wpcf7-form .eval-table th { background: var(--primary-dark); color: #fff; font-weight: 600; font-size: 13.5px; padding: 9px 8px; border: 1px solid var(--primary-dark); text-align: center; white-space: nowrap; word-break: break-word; } .eval-table td, .wpcf7-form .eval-table td { border: 1px solid var(--border-light); padding: 9px 10px; vertical-align: top; color: var(--text); word-break: break-word; } .eval-table tbody tr:nth-child(even):not(.group-header):not(.subtotal-row):not(.total-row) td, .wpcf7-form .eval-table tbody tr:nth-child(even):not(.group-header):not(.subtotal-row):not(.total-row) td { background: var(--row-alt); } .eval-table tbody tr:nth-child(odd):not(.group-header):not(.subtotal-row):not(.total-row) td, .wpcf7-form .eval-table tbody tr:nth-child(odd):not(.group-header):not(.subtotal-row):not(.total-row) td { background: #fff; } /* 列宽(百分比,合计100%) */ .col-no, .wpcf7-form .col-no { width: 6%; text-align: center; } .col-item, .wpcf7-form .col-item { width: 12%; } .col-criteria, .wpcf7-form .col-criteria { width: 43%; } .col-score, .wpcf7-form .col-score { width: 7%; text-align: center; } .col-self, .wpcf7-form .col-self { width: 13%; text-align: center; } .col-basis, .wpcf7-form .col-basis { width: 19%; } /* 序号、分值居中列 */ .eval-table td.col-no, .wpcf7-form .eval-table td.col-no, .eval-table td.col-score, .wpcf7-form .eval-table td.col-score { text-align: center; font-weight: 600; } .eval-table td.col-no, .wpcf7-form .eval-table td.col-no { font-size: 14px; /* 序号列 a1-a19:加大2号后再减2号,回到原始字号 */ } .eval-table td.col-item, .wpcf7-form .eval-table td.col-item { font-weight: 600; color: var(--primary); } .eval-table td.col-criteria, .wpcf7-form .eval-table td.col-criteria { font-size: 15.5px; line-height: 1.7; } /* 分组标题行 */ .eval-table tr.group-header td, .wpcf7-form .eval-table tr.group-header td { background: var(--row-group); font-family: 'SimSun', '宋体', serif; font-weight: 700; font-size: 16.5px; color: var(--primary); text-align: left; padding: 8px 12px; border-top: 2px solid var(--accent); border-bottom: 1px solid var(--border); } /* 小计行 */ .eval-table tr.subtotal-row td, .wpcf7-form .eval-table tr.subtotal-row td { background: var(--row-subtotal); font-weight: 700; font-size: 15.5px; color: var(--primary); text-align: center; } .eval-table tr.subtotal-row td.subtotal-label, .wpcf7-form .eval-table tr.subtotal-row td.subtotal-label { text-align: right; padding-right: 14px; } /* 合计行 */ .eval-table tr.total-row td, .wpcf7-form .eval-table tr.total-row td { background: var(--row-total); font-family: 'SimSun', '宋体', serif; font-weight: 700; font-size: 17px; color: var(--primary); text-align: center; border-top: 2px solid var(--primary); } .eval-table tr.total-row td.total-label, .wpcf7-form .eval-table tr.total-row td.total-label { text-align: right; padding-right: 14px; } /* 得分输入框 */ .score-input, .wpcf7-form .wpcf7-form-control.score-input { box-sizing: border-box !important; max-width: 100% !important; width: 78px !important; padding: 6px 4px; border: 1px solid var(--border); border-radius: 6px; background: #fff; text-align: center; font-size: 16px; color: var(--text); font-family: inherit; transition: border-color 0.15s, box-shadow 0.15s; } .score-input:focus, .wpcf7-form .wpcf7-form-control.score-input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 2px rgba(52, 91, 110, 0.16); } .basis-input, .wpcf7-form .wpcf7-form-control.basis-input { box-sizing: border-box !important; max-width: 100% !important; width: 100% !important; padding: 6px 8px; border: 1px solid var(--border); border-radius: 6px; background: #fff; font-size: 15px; color: var(--text); font-family: inherit; transition: border-color 0.15s, box-shadow 0.15s; } .basis-input:focus, .wpcf7-form .wpcf7-form-control.basis-input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 2px rgba(52, 91, 110, 0.16); } .basis-input::placeholder, .wpcf7-form .wpcf7-form-control.basis-input::placeholder { color: var(--text-mute); } /* 只读汇总框 */ .readonly-box { background: var(--row-alt); border: 1px solid var(--border); font-weight: 700; color: var(--primary); text-align: center; padding: 6px 8px; border-radius: 6px; width: 78px; font-size: 16px; } .readonly-box.wide { width: 100%; } /* ============ 评定结果区 ============ */ .result-block { background: var(--surface); border: 1px solid var(--border); padding: 16px 20px; margin-bottom: 14px; border-radius: 8px; box-shadow: 0 2px 10px rgba(176, 137, 104, 0.10); } .result-row { display: flex; align-items: center; gap: 14px; padding: 8px 0; border-bottom: 1px dashed var(--border-light); flex-wrap: wrap; } .result-row:last-child { border-bottom: none; } .result-row .result-label { font-family: 'SimSun', '宋体', serif; font-weight: 700; color: var(--primary); font-size: 17px; min-width: 120px; } .star-display { font-size: 22px; letter-spacing: 3px; color: var(--gold); font-weight: 700; background: transparent !important; border: none !important; flex: 1; min-width: 160px; } .bonus-amount { font-size: 18px; font-weight: 700; color: var(--gold); } /* ============ 提交按钮 ============ */ .submit-wrapper { text-align: center; padding: 8px 0 4px; } .cf7-submit { background: var(--primary); color: #fff; border: none; border-radius: 6px; padding: 12px 56px; font-size: 18px; font-weight: 600; font-family: 'SimSun', '宋体', serif; letter-spacing: 4px; cursor: pointer; transition: background 0.15s; } .cf7-submit:hover { background: var(--primary-dark); } .cf7-submit:active { background: #0d2236; } /* ============ 页脚 ============ */ .eval-footer { text-align: center; color: var(--text-mute); font-size: 14px; padding: 12px 0 4px; border-top: 1px solid var(--border-light); margin-top: 6px; } /* ============ 必填错误样式 ============ */ .field-error .cf7-input, .field-error .cf7-select, .field-error .cf7-password, .field-error .score-input, .field-error .basis-input, .field-error .wpcf7-form-control.score-input, .field-error .wpcf7-form-control.basis-input { border-color: var(--error) !important; box-shadow: 0 0 0 2px rgba(179, 38, 30, 0.12) !important; } .field-error .radio-inline { outline: 1px solid var(--error); outline-offset: 2px; } .err-tip { color: var(--error); font-size: 14px; margin-top: 3px; display: none; } .field-error .err-tip { display: block; } /* ============ 提示框 ============ */ .custom-alert { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 16px 30px; border-radius: 10px; font-size: 18px; font-weight: 500; text-align: center; box-shadow: 0 4px 18px rgba(0, 0, 0, 0.18); z-index: 10000; animation: alertIn 0.25s ease-out, alertOut 0.4s ease-in 4.4s forwards; max-width: 86vw; } @keyframes alertIn { from { opacity: 0; transform: translate(-50%, -42%); } to { opacity: 1; transform: translate(-50%, -50%); } } @keyframes alertOut { from { opacity: 1; } to { opacity: 0; visibility: hidden; } } .custom-alert.success { background: var(--success-bg); color: var(--success-text); border: 1px solid #b8d8b8; } .custom-alert.error { background: var(--error-bg); color: var(--error-text); border: 1px solid #e0b8b8; } /* ============ 响应式:移动端 ============ */ @media (max-width: 768px) { body { padding: 10px 8px; font-size: 16px; } .eval-header { padding: 16px 14px 14px; } .eval-header h1 { font-size: 20px; letter-spacing: 0.5px; } .eval-header .doc-meta { gap: 2px 14px; font-size: 14px; } .info-block, .result-block { padding: 14px 12px; } .info-grid { grid-template-columns: 1fr; gap: 12px; } /* 表格转堆叠卡片 */ .table-block { overflow-x: visible; } .eval-table, .wpcf7-form .eval-table { min-width: 0; display: block; } .eval-table thead, .wpcf7-form .eval-table thead { display: none; } .eval-table tbody, .wpcf7-form .eval-table tbody { display: block; } .eval-table tr, .wpcf7-form .eval-table tr { display: block; border: 1px solid var(--border); margin-bottom: 10px; background: #fff; } .eval-table tr.group-header td, .wpcf7-form .eval-table tr.group-header td { border-top: 3px solid var(--accent); } .eval-table td, .wpcf7-form .eval-table td { display: block; border: none; border-bottom: 1px solid var(--border-light); padding: 8px 12px; text-align: left !important; background: #fff !important; } .eval-table td::before, .wpcf7-form .eval-table td::before { content: attr(data-label); display: block; font-size: 14px; font-weight: 700; color: var(--text-mute); margin-bottom: 3px; } .eval-table td.col-no::before, .wpcf7-form .eval-table td.col-no::before, .eval-table td.col-score::before, .wpcf7-form .eval-table td.col-score::before { display: inline; margin-right: 6px; } .eval-table td.col-no, .wpcf7-form .eval-table td.col-no { display: inline-block; width: auto; border-bottom: none; padding-bottom: 0; font-size: 13px; } .eval-table td.col-item, .wpcf7-form .eval-table td.col-item { display: inline-block; width: auto; border-bottom: 1px solid var(--border-light); font-size: 16.5px; } /* 小计/合计行保持块状 */ .eval-table tr.subtotal-row, .wpcf7-form .eval-table tr.subtotal-row, .eval-table tr.total-row, .wpcf7-form .eval-table tr.total-row { background: var(--row-subtotal); } .eval-table tr.subtotal-row td, .wpcf7-form .eval-table tr.subtotal-row td, .eval-table tr.total-row td, .wpcf7-form .eval-table tr.total-row td { background: transparent !important; } .eval-table tr.subtotal-row td::before, .wpcf7-form .eval-table tr.subtotal-row td::before, .eval-table tr.total-row td::before, .wpcf7-form .eval-table tr.total-row td::before { display: none; } .eval-table tr.subtotal-row td.subtotal-label, .wpcf7-form .eval-table tr.subtotal-row td.subtotal-label, .eval-table tr.total-row td.total-label, .wpcf7-form .eval-table tr.total-row td.total-label { text-align: left; padding-right: 12px; } .score-input, .wpcf7-form .wpcf7-form-control.score-input { width: 100% !important; max-width: 200px; } .readonly-box { width: 100%; max-width: 200px; } .result-row .result-label { min-width: 100px; font-size: 16px; } .cf7-submit { padding: 12px 40px; letter-spacing: 2px; } } @media (max-width: 420px) { .eval-header h1 { font-size: 18px; } .cf7-submit { padding: 11px 28px; font-size: 17px; letter-spacing: 1px; } }
    制定机关:武汉市民政局 适用年度:2026年度 表单版本:V2026.1

    社区养老服务设施星级评定质控评价表

    依据《武汉市社区养老服务设施星级评定管理办法(2026年修订)》及最新评分细则编制
    填报说明
    • 本表用于社区养老服务设施星级评定的网点自评与质控评价,满分100分(基本项5分+增值项95分)。
    • 请选择对应网点名称,填写主管密钥及工号,并逐项填写自评得分与得分依据。
    • 系统将自动汇总总分并按分档标准评定星级及相应补贴金额。星级分档:≥91分五星、≥81分四星、≥71分三星、≥61分二星、≥51分一星、<51分无等级。
    • * 为必填项,得分依据须如实填写、可佐证。
    一、基本信息
    [password* manager-key id:manager-key class:cf7-password placeholder "请输入主管密钥"]
    工号以邮箱格式填写,例:A00000@purenywk.com
    请选择提交类型
    二、评分标准及得分情况
    序号 项目 标准内容 分值 自评得分 得分依据
    一、基本项(共5分)
    a1 运营资质 运营主体具备《营业执照》《民办非企业单位登记证书》等依法取得的独立法人资格。 1
    a2 统计设备 配备可统计服务人次的电子统计设备,且与市、区养老服务平台对接。 1
    a3 场地标识 (1)设施名称标识、服务设施出入口标识、楼层索引图等符合老年人生理特点,色彩明亮、位置明显、图文清晰;(2)在醒目位置张贴/放置各项规章制度、服务流程、服务项目、服务承诺、服务质量标准、服务收费标准、投诉渠道、安全管理等管理制度,易于老年人咨询、获取。 1
    a4 安全管理 (1)配置视频监控、防灭火设施、疏散设施等消防设施设备,定期检查且记录保存完好;(2)采用辨识度高、色彩丰富、照明充足、环境安静、无障碍、无尖角等适老化设计,主要出入口、大门、走廊、楼层通道、电梯、生活用房、文化休闲区、康复与医疗用房等均符合无障碍设计要求;(3)建立风险管理制度,包括但不限于老年人意外伤害、突发疾病、火灾应急预案等;(4)安全专(兼)职人员,每年接受在岗教育培训,熟悉安全管理相关法律法规及技术规范,能熟练使用消防器具、处理突发安全事件,按要求配备《日常消防检查手册》,具备近1年内完整的应急演练、安全检查、安全培训等记录。 1
    a5 制度建设 (1)结合中心运营、老年人需求、服务项目提供情况制定管理制度,配备《管理制度手册》,包括但不限于行政管理制度、员工管理制度、服务管理制度、财务管理制度、档案管理制度、清洁卫生管理制度等;(2)具备《工作标准手册》,每项服务项目有清晰的工作流程与质量标准,建立投诉处理与调解制度,接受服务对象的投诉与监督;(3)具备近1年内完整的台账资料,包括但不限于与老年人签订的服务协议、老年人基本档案资料、员工档案信息、设备使用记录、投诉处理记录等。 1
    基本项 小计 5 0
    二、增值项(共95分)
    a6 建筑面积 1分:建筑面积达120㎡不足300㎡;2分:建筑面积达200㎡不足600㎡;4分:建筑面积达600㎡不足800㎡;6分:建筑面积达800㎡不足1000㎡;8分:建筑面积达1000㎡及以上。 8
    a7 功能设施/文体娱乐 设置娱乐区、文化活动区、室外活动场所等满足老年人的文体娱乐需求,具备提供阅览、观影、绘画、书法、上网、棋牌、健身、排练、手工制作、兴趣活动开展等服务功能设施,每具备2种服务功能得1分。 5
    a8 功能设施/日间照料 (1)1分。设施具备接待、休息、心理疏导、就餐区或备餐、浴室、理发、洗衣等至少5项日间照料服务功能;(2)2分。配置照料床位(达6㎡)或躺椅,每3张日间照料床位或每5张躺椅得1分;(3)2分。休息区功能齐全,配备空调、被子等取暖制冷设施得1分,配备电视机、饮水机等设施得1分。 5
    a9 功能设施/保健康复 配备血压测量仪、体温计、体检仪、适老健身器材、物理康复器材、紧急护理包等,每配备2种类别保健康复设施设备得1分。 2
    a10 功能设施/信息设施 具备提供网络服务功能的设施,服务内容包括但不限于:信息公示、咨询、服务预约、服务查询、缴费、投诉建议、服务评价等,年使用总人数达1200人次的视为可得分。 2
    a11 功能设施/电子设备 (1)1分。依托互联网技术为服务对象提供生命体征监控、位置查询、信息预警、紧急呼叫、联络紧急联系人等服务,社区养老服务设施储备4种及以上设备得1分;(2)2分。每5名老年人配备并使用1种电子设备得1分,满分2分。 3
    a12 服务内容/社区养老服务 (1)7分。每开展社区养老服务中的一项服务得1分;(2)5分。助餐服务年服务达1000人次得1分,满分2分;公益服务年服务达1000人次得1分,满分3分;(3)3分。全日托养、日间托养、康复护理、助浴服务、其他服务,每项服务年服务人数达20人,得1分,累计不超过3分。 15
    a13 服务内容/居家养老服务 (1)10分。每开展居家养老服务中的一项服务得2分,满分10分;(2)10分。每项服务年服务人数达20人,年服务到达100人次,得2分,各项累计不超过10分。 20
    a14 服务人数 3分:月均服务人次达本社区老年人口数的60%;6分:月均服务人次达本社区老年人口数的70%,或月均服务人次达60%且年上门服务人数不少于50人;9分:月均服务人次达80%,或月均达70%且年上门不少于100人;12分:月均达90%且年上门不少于150人;15分:月均达100%且年上门不少于200人。 15
    a15 人员配置/工作人员 (1)2分。有1名全职工作人员得1分,有2名及以上全职工作人员得2分。(2)2分。全职工作人员持有证书(社会工作师证、保健调理师证、养老护理员证、心理咨询师证、中医康复理疗师证、医师证、护士证等),每1位工作人员持证得1分,累计不超过2分。(3)1分。服务人员着统一工作服,挂工作牌。 5
    a16 人员配置/志愿者 (1)1分。建立健全的志愿者管理制度,包括但不限于志愿者招募、培训、活动开展、激励机制等且执行良好得0.5分;有不少于20人的志愿者服务团队得0.5分。(2)1分。每年开展志愿者活动达4次且服务人次不少于100人次,志愿服务记录完整。 2
    a17 满意度 满意度评价得分。(依据《服务满意度评价表》10项指标加权计算:服务态度7%、技能水平7%、人员配备7%、生活设施7%、安全设施7%、服务设施7%、清洁卫生8%、服务效果20%、服务需求20%、收费价格10%,每项评分10—1分。) 10
    a18 社会反响/社会影响 服务成效或服务优秀案例获国家级媒体报道或奖项1次得2分,省级媒体报道或奖项1次得1分,市级媒体报道或奖项1次得0.5分,同类报道或奖项以最高级别报道媒体为准。 2
    a19 社会反响/品牌效应 社区养老服务设施在运营管理、服务提供等方面有重大创新(如公开发表成果或市级以上政府部门专项调研等),每1项得0.5分。 1
    增值项 小计 95 0
    合 计
    三、星级评定结果
    星级评定:
    星级补贴金额:
    document.addEventListener('DOMContentLoaded', function () { // 保存原始表单 HTML,用于提交成功后还原 var formEl = document.querySelector('.wpcf7-form') || document.querySelector('.eval-container'); var originalFormHTML = formEl ? formEl.innerHTML : ''; var deductionInputs = []; var totalSelfInput = document.getElementById('total-self'); var starRatingInput = document.getElementById('star-rating'); var bonusAmountInput = document.getElementById('bonus-amount'); var subtotalBasicEl = document.getElementById('subtotal-basic-self'); var subtotalValueEl = document.getElementById('subtotal-value-self'); function collectInputs() { deductionInputs = Array.prototype.slice.call(document.querySelectorAll('.deduction-input')); } // 按 data-group 计算分组小计 function groupSum(group) { var sum = 0; deductionInputs.forEach(function (input) { if (input.getAttribute('data-group') === group) { sum += parseFloat(input.value) || 0; } }); return sum; } // 更新总分与小计 function updateTotalScore() { var total = 0; deductionInputs.forEach(function (input) { total += parseFloat(input.value) || 0; }); if (totalSelfInput) totalSelfInput.value = total.toFixed(2); if (subtotalBasicEl) subtotalBasicEl.textContent = groupSum('basic').toFixed(2); if (subtotalValueEl) subtotalValueEl.textContent = groupSum('value').toFixed(2); } // 星级评定 function calculateStarRating() { if (!totalSelfInput || !starRatingInput || !bonusAmountInput) return; var total = parseFloat(totalSelfInput.value) || 0; var stars = '无', bonus = '0万'; if (total >= 91) { stars = '★★★★★'; bonus = '20万'; } else if (total >= 81) { stars = '★★★★'; bonus = '15万'; } else if (total >= 71) { stars = '★★★'; bonus = '11万'; } else if (total >= 61) { stars = '★★'; bonus = '8万'; } else if (total >= 51) { stars = '★'; bonus = '5万'; } else { stars = '无等级'; bonus = '0万'; } starRatingInput.value = stars + '(' + total.toFixed(2) + '分)'; bonusAmountInput.value = bonus; } // 绑定输入事件 function bindInputEvents() { deductionInputs.forEach(function (input) { input.addEventListener('input', function () { var max = parseFloat(this.getAttribute('max')); var value = parseFloat(this.value) || 0; if (value > max) { this.value = max; value = max; } if (value < 0) { this.value = 0; } updateTotalScore(); calculateStarRating(); }); // 失焦时规整空值 input.addEventListener('blur', function () { if (this.value === '') this.value = ''; }); }); } // 必填字段校验 function validateRequiredFields() { var isValid = true; var firstError = null; // 清除既有错误标记 var prevErrors = document.querySelectorAll('.field-error'); prevErrors.forEach(function (el) { el.classList.remove('field-error'); }); // 文本/下拉/密码/邮箱/数字类必填 var requiredInputs = document.querySelectorAll('.eval-container [required], .eval-container .wpcf7-validates-as-required'); requiredInputs.forEach(function (field) { if (field.type === 'radio') return; // 单选单独处理 var wrapper = field.closest('.info-field') || field.closest('td') || field.closest('.cf7-input-wrapper'); if (!field.value || !field.value.trim()) { isValid = false; if (wrapper) { wrapper.classList.add('field-error'); if (!firstError) firstError = wrapper; } } }); // 提交类型单选 var qaLevel = document.querySelectorAll('[name="qa-level"]'); if (qaLevel.length) { var checked = false; qaLevel.forEach(function (r) { if (r.checked) checked = true; }); if (!checked) { isValid = false; var qaWrapper = document.getElementById('qa-level'); if (qaWrapper) { var field = qaWrapper.closest('.info-field'); if (field) { field.classList.add('field-error'); if (!firstError) firstError = field; } } } } if (firstError) { firstError.scrollIntoView({ behavior: 'smooth', block: 'center' }); } return isValid; } // 提示框 function showAlert(message, type) { var existing = document.querySelector('.custom-alert'); if (existing) existing.remove(); var div = document.createElement('div'); div.className = 'custom-alert ' + (type || 'error'); div.textContent = message; document.body.appendChild(div); setTimeout(function () { if (div.parentNode) div.parentNode.removeChild(div); }, 5000); } // 初始化 function initForm() { collectInputs(); bindInputEvents(); updateTotalScore(); calculateStarRating(); } initForm(); // CF7 提交前校验 document.addEventListener('wpcf7beforesubmit', function () { if (!validateRequiredFields()) { showAlert('请填写所有必填字段后再提交', 'error'); } }, false); // 提交成功 document.addEventListener('wpcf7mailsent', function () { showAlert('提交成功!您的评估已成功发送。', 'success'); if (formEl && originalFormHTML) { formEl.innerHTML = originalFormHTML; setTimeout(initForm, 120); } }, false); // 提交失败(邮件) document.addEventListener('wpcf7mailfailed', function () { showAlert('提交失败:邮件发送出现问题,请稍后重试。', 'error'); }, false); // 校验失败 document.addEventListener('wpcf7invalid', function () { showAlert('表单验证失败:请检查所有必填字段并修正错误。', 'error'); }, false); });