MassageRobot_Dobot/UI_next/templates/select_program.html
2025-05-27 15:46:31 +08:00

760 lines
39 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>健康理疗</title>
<link rel="apple-touch-icon" sizes="180x180"
href="{{ url_for('static', filename='images/webapp/apple-touch-icon.png') }}" />
<link rel="icon" type="image/png" sizes="32x32"
href="{{ url_for('static', filename='images/webapp/favicon-32x32.png') }}" />
<link rel="icon" type="image/png" sizes="16x16"
href="{{ url_for('static', filename='images/webapp/favicon-16x16.png') }}" />
<link rel="icon" type="image/ico" href="{{ url_for('static', filename='images/webapp/favicon.ico') }}" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/select_program.css') }}?v={{ time }}" />
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/jquery.dataTables.min.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/volume.css') }}?v={{ time }}" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/mode_real_info.css') }}?v={{ time }}" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/hint.css') }}?v={{ time }}">
<script src="{{ url_for('static', filename='js/socketio/socket.io.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/i18n/jquery-3.7.1.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/i18n/jquery.i18n.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/i18n/setting-lang.js') }}"></script>
</head>
<body>
<div class="top-bar">
<a href="{{ url_for('home') }}" class="logo">
<img src="{{ url_for('static', filename='images/common/首页.svg') }}" alt="首页" />
</a>
<div class="mode-switch">
<div class="mode smart-mode" onclick="switchMode('smart_mode')" i18n="topbar.model1"></div>
<div class="mode manual-mode active" onclick="switchMode('manual_mode')" i18n="topbar.model2"></div>
<div class="mode handheld-mode" onclick="switchMode('handheld_mode')" i18n="topbar.model3"></div>
</div>
<div class="volume-control" id="volume-control">
<!-- 背景 -->
<div class="volume-background"></div>
<!-- 音量值显示 -->
<div class="volume-value" id="volume-value">50</div>
<!-- 可调节的白色底色 -->
<div class="volume-progress" id="volume-progress"></div>
<div class="volume-icon-box">
<img id="volume-icon" src="/static/images/volume/vol-med.png" alt="音量" />
</div>
</div>
<div class="date-time-container">
<div class="weekday"></div>
<div class="date"></div>
<div class="time"></div>
</div>
<div class="right-section">
<div class="status" onclick="toggleConnection()">
<img src="{{ url_for('static', filename='images/common/disconnected.svg') }}" id="status-icon"
alt="Connection Status" />
<span id="status-text"></span>
</div>
<div class="shutdown" onclick="shutdownSystem()">
<img src="{{ url_for('static', filename='images/common/shutdown.svg') }}" id="shutdown-icon" alt="Shutdown" />
</div>
</div>
</div>
<div class="mode-real-info" id="mode-real-info" style="display: none;">
<div class="dot"></div>
<div class="info-text" id="info-text" role="text"></div>
</div>
<div class="container">
<div class="body-container">
<div class="body-image" id="body-image-container">
<img id="massage-img-box" class="massage-img-box"
src="{{ url_for('static', filename='images/smart_mode/belly.png') }}" alt="Fallback Image" />
<!-- <img id="leg-contour" class="contour-img" src="{{ url_for('static', filename='images/massage_control/contour/leg.png') }}" style="display: none;" alt="Fallback Image" />
<img id="back-contour" class="contour-img" src="{{ url_for('static', filename='images/massage_control/contour/back.png') }}" style="display: none;" alt="Fallback Image" />
<img id="belly-contour" class="contour-img" src="{{ url_for('static', filename='images/massage_control/contour/belly.png') }}" style="display: none;" alt="Fallback Image" /> -->
<div class="resize-container" id="resize-container">
<div class="center-point"></div>
<div class="rotate-line">
<div class="ojo-point-box" id="ojo-point-box">
<div class="ojo-point" id="ojo-point"></div>
<div class="ojo-text" id="ojo-text">大椎</div>
</div>
</div>
<div class="rotate-handle">
<img src="{{ url_for('static', filename='images/select_program/rotate.svg') }}" alt="rotate" />
</div>
<div class="neck-point-left">
<div class="neck-point" id="neck-point-left"></div>
<div class="neck-text" id="neck-text-left">脖子左侧</div>
</div>
<div class="neck-point-right">
<div class="neck-point" id="neck-point-right"></div>
<div class="neck-text" id="neck-text-right">脖子右侧</div>
</div>
<div class="neck-point-bottom-left">
<div class="neck-point" id="neck-point-bottom-left"></div>
</div>
<div class="neck-point-bottom-right">
<div class="neck-point" id="neck-point-bottom-right"></div>
</div>
<div class="resize-handle top-left"></div>
<div class="resize-handle top-right"></div>
<div class="resize-handle bottom-left"></div>
<div class="resize-handle bottom-right"></div>
</div>
<!-- 线条拖动容器 -->
<div class="line-container" id="line-container">
<!-- 左侧三个点 -->
<div class="line-point" id="line-point-1">
<div class="leg-text" id="leg-text-left">左臀部下沿</div>
</div>
<div class="line-point" id="line-point-2">
<div class="leg-text" id="leg-text-left">膝关节后侧</div>
</div>
<div class="line-point" id="line-point-3">
<div class="leg-text" id="leg-text-left">足外踝后方</div>
</div>
<!-- 右侧三个点 -->
<div class="line-point" id="line-point-4">
<div class="leg-text" id="leg-text-right">右臀部下沿</div>
</div>
<div class="line-point" id="line-point-5">
<div class="leg-text" id="leg-text-right">膝关节后侧</div>
</div>
<div class="line-point" id="line-point-6">
<div class="leg-text" id="leg-text-right">足外踝后方</div>
</div>
<!-- 曲率控制点 -->
<div class="curve-point" id="curve-point-1"></div>
<div class="curve-point" id="curve-point-2"></div>
<div class="curve-point" id="curve-point-3"></div>
<div class="curve-point" id="curve-point-4"></div>
<svg class="line-svg">
<!-- 左侧线段 -->
<path id="curve-segment-1" d="" fill="none" stroke="#fff" stroke-width="2"></path>
<path id="curve-segment-2" d="" fill="none" stroke="#fff" stroke-width="2"></path>
<!-- 右侧线段 -->
<path id="curve-segment-3" d="" fill="none" stroke="#fff" stroke-width="2"></path>
<path id="curve-segment-4" d="" fill="none" stroke="#fff" stroke-width="2"></path>
</svg>
</div>
</div>
<iframe id="massage-plan-visualization" class="body-image" src="{{ url_for('massage_plan_visualization') }}"
style="display: none; border: none;"></iframe>
</div>
<div class="operate-container">
<div class="function-switch">
<div class="slider"></div>
<div class="function chatbot" i18n="control.tabbar.title" wait="true"></div>
<div class="function active" i18n="control.tabbar.title2" wait="true"></div>
<div class="function plans" i18n="control.tabbar.title4" wait="true"></div>
<div class="function music" i18n="control.tabbar.title3" wait="true"></div>
</div>
<!-- ai -->
<iframe id="ai-frame" src="{{ url_for('ai_chatbot') }}" class="content-frame inactive operate-iframe"></iframe>
<!-- 按摩 -->
<div class="massage-frame operate-iframe active" id="massage-frame">
<!-- 按摩部位选择 -->
<div class="operate-panel step active" id="step1">
<div class="operate-title" i18n="control.manual.step1.title" style="height: 27px;"></div>
<div class="operate-subtitle" i18n="control.manual.step1.sub-title"></div>
<div class="operate-button">
<div class="operate-button-item" data-part="belly">
<img class="item-icon"
src="{{ url_for('static', filename='images/massage_control/bodypart/belly_normal-btn.png') }}" alt="" />
<div class="item-title" i18n="control.manual.step1.bodyPart"></div>
</div>
</div>
<div class="operate-subtitle" i18n="control.manual.step1.sub-title2"></div>
<div class="operate-button">
<div class="operate-button-item" data-part="shoulder">
<img class="item-icon"
src="{{ url_for('static', filename='images/massage_control/bodypart/shoulder_normal-btn.png') }}"
alt="" />
<div class="item-title" i18n="control.manual.step1.bodyPart2"></div>
</div>
<div class="operate-button-item" data-part="back">
<img class="item-icon"
src="{{ url_for('static', filename='images/massage_control/bodypart/back_normal-btn.png') }}" alt="" />
<div class="item-title" i18n="control.manual.step1.bodyPart3"></div>
</div>
<div class="operate-button-item" data-part="waist">
<img class="item-icon"
src="{{ url_for('static', filename='images/massage_control/bodypart/waist_normal-btn.png') }}" alt="" />
<div class="item-title" i18n="control.manual.step1.bodyPart4"></div>
</div>
</div>
<div class="operate-subtitle" i18n="control.manual.step1.sub-title3"></div>
<div class="operate-button">
<div class="operate-button-item" data-part="leg">
<img class="item-icon"
src="{{ url_for('static', filename='images/massage_control/bodypart/leg_normal-btn.png') }}" alt="" />
<div class="item-title" i18n="control.manual.step1.bodyPart5"></div>
</div>
</div>
</div>
<!-- 按摩头选择 -->
<div class="operate-panel step" id="step2">
<div class="operate-title" i18n="control.manual.step2.title"></div>
<div class="header-button" id="header-button">
<div class="header-button-item" data-header="thermotherapy" id="head1" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/深部热疗.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="40"></div>
</div>
<div class="header-button-item" data-header="shockwave" id="head2" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/点阵按摩.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text2" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="ball" id="head3" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/全能滚珠.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text3" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="finger" id="head4" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/指疗通络.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text4" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="roller" id="head5" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/滚滚刺疗.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text5" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="stone" id="head6" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/温砭舒揉.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text6" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="ion" id="head7" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/离子光灸.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text7" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="heat" id="head8" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/能量热疗.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text8" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
<div class="header-button-item" data-header="spheres" id="head9" style="display: none;">
<img class="header-img"
src="{{ url_for('static', filename='images/massage_control/head/天球滚捏.png') }}"></img>
<div class="header-text" i18n="control.massage.data_text9" resize-font=true checkHeight=true
changeLineHeight="true" smallSize="58"></div>
</div>
</div>
<div class="step-button-box">
<div class="prev step-button" id="prev2">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/back.png') }}"
alt="" />
<div class="step-button-text" i18n="control.manual.step2.back_btn"></div>
</div>
<div class="prev step-button" id="photo">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/photo.png') }}"
alt="" />
<div class="step-button-text" i18n="control.manual.step2.photo_btn"></div>
</div>
</div>
</div>
<div class="operate-panel step" id="step3">
<div class="operate-title" i18n="control.manual.step3.title"></div>
<div class="step-button-box">
<div class="step-button" id="acupuncture-btn">
<img class="step-button-icon"
src="{{ url_for('static', filename='images/select_program/acupuncture.png') }}" alt="" />
<div class="step-button-text" i18n="control.manual.step3.choose_btn" resize-font=true smallSize="10"
style="overflow-x: auto; max-width: 80px; text-wrap: nowrap;"></div>
</div>
<div class="radio-box">
<span i18n="control.manual.step3.radio"></span>
<div class="radio-switch">
<div class="radio-slide-toggle" style="left: 0px"></div>
</div>
<span i18n="control.manual.step3.radio2"></span>
</div>
<div class="step-input-box" id="time-input-box">
<div class="step-input-text" style="margin-right: 6px; text-align: right;"
i18n="control.manual.step3.radio_label"></div>
<button type="button" class="loop-btn" id="time-decrease-btn">-</button>
<input type="text" id="time-num" class="input-num" value="15分钟" readonly />
<button type="button" class="loop-btn" id="time-increase-btn">+</button>
</div>
<div class="step-input-box" id="loop-input-box" style="display: none;">
<div class="step-input-text" style="margin-right: 6px;" i18n="control.manual.step3.radio_label2"></div>
<button type="button" class="loop-btn" id="decrease-btn">-</button>
<input type="number" id="acupuncture-num" class="input-num" value="1" readonly />
<button type="button" class="loop-btn" id="increase-btn">+</button>
</div>
<!-- <div class="step-button" id="loop-btn">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/acupuncture.png') }}" alt="" />
<div class="step-button-text">循环几次</div>
</div> -->
</div>
<div class="acupuncture-fun">
<span i18n="control.manual.step5.sub-title"></span>
<span id="acupuncture-name">默认</span>
</div>
<div class="operate-title" i18n="control.manual.step3.title2" style="margin-top: 16px;"></div>
<div class="step-button-box">
<div class="prev step-button" id="re-select">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/back.png') }}"
alt="" />
<div class="step-button-text" i18n="control.manual.step3.re_choose_btn"></div>
</div>
<div class="prev step-button" id="re-photo">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/photo.png') }}"
alt="" />
<div class="step-button-text" i18n="control.manual.step3.re_photo_btn"></div>
</div>
</div>
<div class="operate-title" i18n="control.manual.step3.title3" style="margin-top: 16px;"></div>
<div class="step-button-box">
<div class="manual-switch">
<div class="manual-slide-toggle" style="left: 0px"></div>
</div>
</div>
<div class="operate-title" i18n="control.manual.step3.title4" style="margin-top: 16px;"></div>
<div class="step-button-box">
<div class="step-button" id="get-acupoint-btn">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/scan.png') }}"
alt="" />
<div class="step-button-text" i18n="control.manual.step3.get_acupoint_btn"></div>
</div>
<div class="step-button" id="start-btn">
<img class="step-button-icon" src="{{ url_for('static', filename='images/select_program/start.png') }}"
alt="" />
<div class="step-button-text" i18n="control.manual.step3.start_btn"></div>
</div>
<div class="pre-heat" id="pre-heat" style="display: none; ">
<!-- <span i18n="control.massage.data_text6"></span> -->
<img class="heat-hint-icon" src="{{ url_for('static', filename='images/hint/hint.png') }}" alt="">
<span i18n="control.manual.step3.pre_heat"></span>
<span id="stone-val"></span>
</div>
<div class="step-input-box" id="temp-input-box" style="display: none;">
<div class="step-input-text" style="margin-right: 6px; text-align: right; "
i18n="control.manual.step3.radio_label3"></div>
<button type="button" class="loop-btn" id="temper-decrease-btn">-</button>
<input type="text" id="temper-num" class="input-num" style="width: 20px;" readonly />
<button type="button" class="loop-btn" id="temper-increase-btn">+</button>
</div>
</div>
</div>
<div class="operate-panel step" id="step4">
<div class="operate-title" i18n="control.manual.step4.title"></div>
<div class="acupuncture-btn" id="massage-setting-btn">
<div class="acupuncture-text" i18n="control.manual.step4.back_btn"></div>
<img class="acupuncture-icon" src="{{ url_for('static', filename='images/select_program/back.png') }}"
alt="">
</div>
<iframe id="acupuncture-iframe"></iframe>
</div>
<div class="operate-panel step" id="step5">
<div class="operate-title">
<span i18n="control.manual.step5.title"></span>
<span i18n="control.manual.step5.sub-title"></span>
<span id="massage-plan-text">默认</span>
</div>
<!-- <div class="acupuncture-btn" id="acupuncture-btn">
<div class="acupuncture-text">穴位设置</div>
<img class="acupuncture-icon" src="{{ url_for('static', filename='images/select_program/acupuncture.png') }}" alt="">
</div> -->
<div class="massage-type-container">
<div class="massage-info-item">
<div class="massage-info-part">
<div class="massage-info-bg"></div>
<img class="info-part-icon" src="" alt="" />
<div class="info-part-title"></div>
</div>
</div>
<div class="massage-info-item">
<div class="massage-info-head">
<img class="info-header-img" src="" alt="" />
<div class="info-header-text"></div>
</div>
</div>
<div class="info-long-item">
<div class="massage-info-acupoint">
<div class="info-acupoint-box">
<div class="info-acupoint-text">
<img class="info-acupoint-img"
src="{{ url_for('static', filename='images/select_program/now_acupoint.svg') }}" alt="">
<span class="info-acupoint-label" i18n="control.manual.step5.now_acu"></span>
</div>
<div class="info-acupoint-text" id="info-acupoint-text">-</div>
</div>
<div class="info-acupoint-box">
<div class="info-acupoint-text">
<img class="info-acupoint-img"
src="{{ url_for('static', filename='images/select_program/stroke.svg') }}" alt="">
<span class="info-acupoint-label" i18n="control.manual.step5.now_tec"></span>
</div>
<div class="info-acupoint-text" id="massage-type-text">-</div>
</div>
</div>
<div class="massage-info-operation">
<div class="massage-operation-btn" id="add-massage" role="button">
<img class="operation-icon" src="{{ url_for('static', filename='images/select_program/more.svg') }}"
alt="">
<span class="operation-text" i18n="control.manual.step5.add_btn"></span>
</div>
<div class="massage-operation-btn" id="skip-massage" role="button">
<img class="operation-icon" src= "{{ url_for('static', filename='images/select_program/skip.svg') }}" alt="">
<span class="operation-text" i18n="control.manual.step5.skip_btn"></span>
</div>
</div>
</div>
</div>
<div class="operate-title" style="margin-top: 20px;" i18n="control.massage.header_title2"></div>
<div class="massage-params">
<!-- 参数区域将根据按摩头动态生成 -->
<div class="status-container">
<div class="status-card" id="strength-card">
<div class="status-title">
<span i18n="control.massage.title4" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span">
</span>
<span class="common-range" id="force-range"></span>
</div>
<div class="status-content" id="force">
<span class="force-value common-value">20</span>
<span class="force-unit common-unit">N</span>
</div>
<div class="force-button common-button">
<button class="force-down-btn">
<div class="force-down common-down"></div>
</button>
<button class="force-add-btn">
<div class="force-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="temperature-card">
<div class="status-title">
<span i18n="control.massage.title5" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
<span class="common-range" id="temperature-range"></span>
</div>
<div class="status-content" id="temperature">
<span class="temperature-value common-value">1</span>
<!-- <span class="temperature-unit common-unit">°C</span> -->
</div>
<div class="temperature-button common-button">
<button class="temperature-down-btn">
<div class="temperature-down common-down"></div>
</button>
<button class="temperature-add-btn">
<div class="temperature-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="current-card">
<div class="status-title">
<span i18n="control.massage.title6" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
<span class="common-range" id="gear-range">[0~5]</span>
<!-- <span id="gear-range">[1~15]</span> -->
</div>
<div class="status-content common-no-unit" id="gear">
<span class="gear-value common-no-unit-value">1</span>
</div>
<div class="gear-button common-button">
<button class="gear-down-btn">
<div class="gear-down common-down"></div>
</button>
<button class="gear-add-btn">
<div class="gear-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="shake-card">
<div class="status-title">
<span i18n="control.massage.title7" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
<span id="shake-range" class="common-range">[0~5]</span>
</div>
<div class="status-content common-no-unit" id="shake">
<span class="shake-value common-no-unit-value">1</span>
</div>
<div class="shake-button common-button">
<button class="shake-down-btn">
<div class="shake-down common-down"></div>
</button>
<button class="shake-add-btn">
<div class="shake-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="frequency-card" style="display: none">
<div class="status-title">
<span i18n="control.massage.title7" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
<span class="common-range" id="frequency-range">[1~16]</span>
</div>
<div class="status-content common-no-unit" id="frequency">
<span class="frequency-value common-no-unit-value">1</span>
</div>
<div class="frequency-button common-button">
<button class="frequency-down-btn">
<div class="frequency-down common-down"></div>
</button>
<button class="frequency-add-btn">
<div class="frequency-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="press-card" style="display: none">
<div class="status-title">
<span i18n="control.massage.title8" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
<span id="press-range" class="common-range">[1~27]</span>
</div>
<div class="status-content common-no-unit" id="press">
<span class="press-value common-no-unit-value">1</span>
</div>
<div class="press-button common-button">
<button class="press-down-btn">
<div class="press-down common-down"></div>
</button>
<button class="press-add-btn">
<div class="press-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="speed-card" style="display: none">
<div class="status-title">
<span i18n="control.massage.title9" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
<span class="common-range" id="speed-range">[0~3]</span>
</div>
<div class="status-content common-no-unit" id="speed">
<span class="speed-value common-no-unit-value">1</span>
</div>
<div class="speed-button common-button">
<button class="speed-down-btn">
<div class="speed-down common-down"></div>
</button>
<button class="speed-add-btn">
<div class="speed-add common-add"></div>
</button>
</div>
</div>
<div class="status-card" id="direction-card" style="display: none">
<div class="status-title">
<span i18n="control.massage.title10" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span"></span>
</div>
<div class="status-content" id="direction">
<div class="direction-container">
<div class="common-switch">
<div class="common-slide-toggle" style="left: 40px"></div>
<!-- <div class="common-option"></div>
<div class="common-option active"></div> -->
</div>
<span class="direction-value" i18n="control.massage.title10_txt" resize-font="true"
changeLineHeight="true" smallSize="40" checkHeight="true"></span>
</div>
</div>
</div>
<div class="status-card" id="high-card" style="display: none">
<div class="status-title">
<span i18n="control.massage.title11" resize-font="true" changeLineHeight="true" smallSize="30"
checkHeight="true" class="status-title-span">
</span>
<span class="common-range" id="high-range">[4~15]CM</span>
</div>
<div class="status-content common-no-unit" id="high">
<span class="high-value common-no-unit-value">6</span>
</div>
<div class="high-button common-button">
<button class="high-down-btn">
<div class="high-down common-down"></div>
</button>
<button class="high-add-btn">
<div class="high-add common-add"></div>
</button>
</div>
</div>
</div>
<div class="button-container">
<div class="control-button">
<div class="pause-btn-box">
<button class="pause" id="pause">
<img class="pause-icon" id="pause-icon" src="/static/images/select_program/pause.png" alt="">
<div class="progress-num"></div>
</button>
<div class="progress-bar"></div>
</div>
<button class="stop" id="stop">
<div i18n="control.massage.stop_btn"></div>
</button>
</div>
</div>
</div>
</div>
<div class="step-status">
<div class="step-box" id="step-box">
<div class="step-item active">
<div class="step-subtitle" id="title1"></div>
</div>
<div class="step-arrow">
<img src="/static/images/select_program/arrow.svg" alt="">
</div>
<div class="step-item">
<div class="step-subtitle" id="title2"></div>
</div>
<div class="step-arrow">
<img src="/static/images/select_program/arrow.svg" alt="">
</div>
<div class="step-item">
<div class="step-subtitle" id="title3"></div>
</div>
<div class="step-arrow">
<img src="/static/images/select_program/arrow.svg" alt="">
</div>
<div class="step-item">
<div class="step-subtitle" id="title4" i18n="control.massage.start_btn"></div>
</div>
</div>
</div>
</div>
<!-- 疗程 -->
<iframe id="plans-frame" src="{{ url_for('massage_plans') }}"
class="content-frame inactive operate-iframe"></iframe>
<!-- 音乐 -->
<iframe id="music-frame" src="{{ url_for('music') }}" class="content-frame inactive operate-iframe"></iframe>
</div>
</div>
<div id="popup-modal" class="popup-modal">
<div class="popup-content">
<p id="popup-message">这里是消息内容</p>
<div id="popup-buttons">
<button id="confirm-btn" onclick="confirmAction()" i18n="popup.confirm_btn">
确认
</button>
<button id="cancel-btn" onclick="cancelAction()" i18n="popup.cancel_btn">
取消
</button>
</div>
</div>
</div>
<div class="hint-modal" id="hint-modal" style="display: none;">
<div class="hint-container" id="hint-container">
<div class="hint-title" id="hint-title"></div>
<div class="hint-content" id="hint-content"></div>
<div class="hint-footer">
<div class="hint-btn cancel-hint" id="cancel-hint-btn" ></div>
<div class="hint-btn confirm-hint" id="confirm-hint-btn"></div>
</div>
</div>
</div>
<script src="{{ url_for('static', filename='js/base.js') }}?v={{ time }}"></script>
<script src="{{ url_for('static', filename='js/common.js') }}?v={{ time }}"></script>
<script src="{{ url_for('static', filename='js/interact.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/select_program.js') }}?v={{ time }}"></script>
<script src="{{ url_for('static', filename='js/anime.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/set_volume.js') }}?v={{ time }}"></script>
<script src="{{ url_for('static', filename='js/mode_real_info.js') }}?v={{ time }}"></script>
<script src="{{ url_for('static', filename='js/license_module.js') }}"></script>
<script src="{{ url_for('static', filename='js/self_hint.js') }}?v={{ time }}"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const functions = document.querySelectorAll(".function");
const slider = document.querySelector(".slider");
const iframes = {
ai: document.getElementById("ai-frame"),
massage: document.getElementById("massage-frame"),
plans: document.getElementById("plans-frame"),
music: document.getElementById("music-frame"),
};
// add-code
let activeIndex = 1; // 默认激活状态
// let activeIndex = 0; // 默认激活状态
let iframeList = [iframes.ai, iframes.massage, iframes.plans, iframes.music];
// 初始时将滑块定位到第一个激活的元素
// const initialSliderPosition = `calc(100% / 3 * ${activeIndex})`;
// // slider.style.width = functions[activeIndex].clientWidth + 'px';
setTimeout(() => {
const initialSliderPosition = functions[activeIndex].offsetLeft + "px";
slider.style.left = initialSliderPosition;
slider.style.width = functions[activeIndex].clientWidth + "px";
}, 1000); // 等待翻译完成
functions.forEach((func, index) => {
func.addEventListener("click", function () {
if (index !== activeIndex) {
// Move slider
// slider.style.left = `calc(100% / 3 * ${index})`;
slider.style.left = func.offsetLeft + "px";
setTimeout(() => {
slider.style.width = func.clientWidth + "px";
}, 100); // 等待浏览器渲染完成
// Hide current iframe and show the new one
iframeList[activeIndex].classList.remove("active");
iframeList[activeIndex].classList.add("inactive");
iframeList[index].classList.remove("inactive");
iframeList[index].classList.add("active");
// Update active class for function buttons
functions.forEach((f) => f.classList.remove("active"));
func.classList.add("active");
// 处理body-image和massage-plan-visualization的显示/隐藏
const bodyImageContainer = document.getElementById("body-image-container");
const massagePlanVisualization = document.getElementById("massage-plan-visualization");
if (index === 2) { // 疗程界面
// 隐藏body-image显示massage-plan-visualization
bodyImageContainer.style.display = "none";
massagePlanVisualization.style.display = "block";
} else {
// 显示body-image隐藏massage-plan-visualization
bodyImageContainer.style.display = "block";
massagePlanVisualization.style.display = "none";
}
activeIndex = index;
}
if (index === 1 && nowStep === 4) {
const acupointFrame = document.getElementById('acupuncture-iframe').contentWindow;
acupointFrame.fetchMassagePlans();
}
});
});
});
</script>
</body>
</html>