You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
8.7 KiB
277 lines
8.7 KiB
<?php
|
|
/**
|
|
* 流程图Tab切换区块模板
|
|
* 支持自定义器设置和短代码调用
|
|
*/
|
|
|
|
// 防止直接访问
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
// 获取短代码参数(如果通过短代码调用)
|
|
global $flowchart_tabs_shortcode_atts;
|
|
$is_shortcode = !empty($flowchart_tabs_shortcode_atts) && is_array($flowchart_tabs_shortcode_atts);
|
|
|
|
// 获取容器设置
|
|
$container_id = $is_shortcode ? $flowchart_tabs_shortcode_atts['id'] : 'nenghui-flowchart-tabs';
|
|
$container_class = $is_shortcode ? $flowchart_tabs_shortcode_atts['class'] : '';
|
|
|
|
// 定义三个固定的tab数据
|
|
$flowchart_tabs = array(
|
|
1 => array(
|
|
'id' => 'pack-process',
|
|
'title' => get_theme_mod('flowchart_tab_1_title', 'PACK Process Flowchart'),
|
|
'image' => get_theme_mod('flowchart_tab_1_image', get_template_directory_uri() . '/assets/images/pack-process flow-chart.png'),
|
|
'note' => get_theme_mod('flowchart_tab_1_note', 'Note 1: Blue procedures denote liquid-cooled project operations; Turquoise procedures indicate universal processes (Air-cooled PACK units require turquoise procedures only). 2.Operations marked with [★] denote critical processes; those marked with [▲] indicate inspection operations.')
|
|
),
|
|
2 => array(
|
|
'id' => 'enclosure-manufacturing',
|
|
'title' => get_theme_mod('flowchart_tab_2_title', 'Enclosure Manufacturing Process Flow Diagram'),
|
|
'image' => get_theme_mod('flowchart_tab_2_image', get_template_directory_uri() . '/assets/images/cabinet-process flow-chart.png'),
|
|
'note' => get_theme_mod('flowchart_tab_2_note', '') // 第二个tab没有文案
|
|
),
|
|
3 => array(
|
|
'id' => 'module-manufacturing',
|
|
'title' => get_theme_mod('flowchart_tab_3_title', 'Module Manufacturing Process Flow Diagram'),
|
|
'image' => get_theme_mod('flowchart_tab_3_image', get_template_directory_uri() . '/assets/images/module-process flow.png'),
|
|
'note' => get_theme_mod('flowchart_tab_3_note', 'Note: [★] denotes Critical Processes; [▲] denotes Inspection Processes.')
|
|
)
|
|
);
|
|
|
|
// 获取第一个tab作为默认显示
|
|
$first_tab = $flowchart_tabs[1];
|
|
?>
|
|
|
|
<style>
|
|
/* 流程图Tab区块样式 */
|
|
#<?php echo esc_attr($container_id); ?>.nenghui-flowchart-container {
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
padding: 40px 20px;
|
|
font-family: 'NotoSans', Arial, sans-serif;
|
|
bacgroud: #fafafa;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tabs {
|
|
display: flex;
|
|
margin-bottom: 40px;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tab {
|
|
width: 100%;
|
|
padding: 12px 24px;
|
|
border: none;
|
|
cursor: pointer;
|
|
font-size: 16px;
|
|
color: #666;
|
|
font-weight: 500;
|
|
transition: all 0.3s ease;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tab:hover {
|
|
background-color: #d0d0d0;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tab.active {
|
|
background: linear-gradient(135deg, #2cb5a9, #00699f);
|
|
border-color: #2cb5a9;
|
|
color: white;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tab.active:hover {
|
|
background: linear-gradient(135deg, #2cb5a9, #00699f);
|
|
border-color: #2cb5a9;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-content {
|
|
padding: 30px;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-image {
|
|
width: 100%;
|
|
text-align: center;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-image img {
|
|
max-width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-note {
|
|
font-size: 14px;
|
|
color: #666;
|
|
line-height: 1.6;
|
|
margin-top: 20px;
|
|
padding: 15px;
|
|
background-color: #f8f9fa;
|
|
}
|
|
|
|
/* 动画效果 */
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-content {
|
|
transition: opacity 0.3s ease, transform 0.3s ease;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-content.fade-out {
|
|
opacity: 0;
|
|
transform: translateY(10px);
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-content.fade-in {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
/* 响应式设计 */
|
|
@media (max-width: 768px) {
|
|
#<?php echo esc_attr($container_id); ?>.nenghui-flowchart-container {
|
|
padding: 30px 15px;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tabs {
|
|
gap: 5px;
|
|
margin-bottom: 20px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-tab {
|
|
font-size: 11px;
|
|
padding: 8px 4px;
|
|
flex: 1;
|
|
white-space: normal;
|
|
line-height: 1.2;
|
|
text-align: center;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 50px;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-content {
|
|
padding: 20px;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 480px) {
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-content {
|
|
padding: 15px;
|
|
}
|
|
|
|
#<?php echo esc_attr($container_id); ?> .flowchart-note {
|
|
font-size: 13px;
|
|
padding: 12px;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<div id="<?php echo esc_attr($container_id); ?>" class="nenghui-flowchart-container <?php echo esc_attr($container_class); ?>" data-aos="fade-up">
|
|
<!-- 选项卡导航 -->
|
|
<div class="flowchart-tabs" data-aos="fade-up" data-aos-delay="200">
|
|
<?php foreach ($flowchart_tabs as $index => $tab) : ?>
|
|
<button class="flowchart-tab<?php echo $index === 1 ? ' active' : ''; ?>"
|
|
data-flowchart-tab="<?php echo esc_attr($tab['id']); ?>">
|
|
<?php echo esc_html($tab['title']); ?>
|
|
</button>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<!-- 内容区域 -->
|
|
<div class="flowchart-content" data-aos="fade-up" data-aos-delay="400">
|
|
<div class="flowchart-image">
|
|
<img src="<?php echo esc_url($first_tab['image']); ?>"
|
|
alt="<?php echo esc_attr($first_tab['title']); ?>"
|
|
id="flowchart-current-image">
|
|
</div>
|
|
<?php if (!empty($first_tab['note'])) : ?>
|
|
<div class="flowchart-note" id="flowchart-current-note">
|
|
<?php echo wp_kses_post($first_tab['note']); ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
/**
|
|
* 流程图Tab切换功能
|
|
*/
|
|
function initFlowchartTabs() {
|
|
const container = document.getElementById('<?php echo esc_js($container_id); ?>');
|
|
if (!container) return;
|
|
|
|
const tabs = container.querySelectorAll('.flowchart-tab');
|
|
const content = container.querySelector('.flowchart-content');
|
|
const image = container.querySelector('#flowchart-current-image');
|
|
const note = container.querySelector('#flowchart-current-note');
|
|
|
|
// 流程图数据
|
|
const flowchartData = <?php echo json_encode($flowchart_tabs, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); ?>;
|
|
|
|
tabs.forEach(tab => {
|
|
tab.addEventListener('click', function() {
|
|
// 移除所有活动状态
|
|
tabs.forEach(t => t.classList.remove('active'));
|
|
|
|
// 添加当前活动状态
|
|
this.classList.add('active');
|
|
|
|
// 获取tab类型
|
|
const tabType = this.getAttribute('data-flowchart-tab');
|
|
|
|
// 更新内容
|
|
updateFlowchartContent(tabType);
|
|
});
|
|
});
|
|
|
|
function updateFlowchartContent(tabType) {
|
|
// 找到对应的数据
|
|
let tabData = null;
|
|
for (let key in flowchartData) {
|
|
if (flowchartData[key].id === tabType) {
|
|
tabData = flowchartData[key];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!tabData) return;
|
|
|
|
// 添加淡出效果
|
|
content.classList.add('fade-out');
|
|
|
|
// 延迟更新内容
|
|
setTimeout(() => {
|
|
// 更新图片
|
|
if (image) {
|
|
image.src = tabData.image;
|
|
image.alt = tabData.title;
|
|
}
|
|
|
|
// 更新注释
|
|
if (note) {
|
|
if (tabData.note && tabData.note.trim() !== '') {
|
|
note.innerHTML = tabData.note;
|
|
note.style.display = 'block';
|
|
} else {
|
|
note.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
// 移除淡出效果,添加淡入效果
|
|
content.classList.remove('fade-out');
|
|
content.classList.add('fade-in');
|
|
|
|
// 清理动画类
|
|
setTimeout(() => {
|
|
content.classList.remove('fade-in');
|
|
}, 300);
|
|
}, 150);
|
|
}
|
|
}
|
|
|
|
// 页面加载完成后初始化
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
initFlowchartTabs();
|
|
});
|
|
</script>
|