PageSourceSearch

https://0hm.cn/article/755.html

html 0hm.cn collected 2026-10-09 04:34:17 UTC 79,817 bytes, 2,357 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<title>社群营销</title>
6<meta name="keywords" content="诚盟软件行业解决方案
7
8">
9<meta name="description" content="诚盟软件行业解决方案
10
11">
12<link rel="icon" href="https://zj.chengmenghudong.com.cn/storage/2/20221212/4b267f86d702fff8956b9774e853ae06.png" />
13<!-- Stylesheets -->
14<link href="/resource/css/bootstrap.css" rel="stylesheet">
15<link href="/resource/css/icons.css" rel="stylesheet">
16<link href="/resource/css/style.css" rel="stylesheet">
17<link href="/resource/css/style1.css" rel="stylesheet">
18<link href="/resource/css/animation.css" rel="stylesheet">
19<link href="/resource/css/responsive.css" rel="stylesheet">
20<link href="/resource/css/style-zh.css" rel="stylesheet">
21<link href="/resource/css/layer.css" rel="stylesheet">
22<script src="/resource/js/jquery.js"></script>
vendor: 1 bytes, line 22
22
23<script src="/resource/js/layer.js"></script>
23
24<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/c/font_2408324_pezmgeu9b9d.css">
25<meta name="content-protection" content='{"enabled":false,"mode":"disable_all","message":""}'>
26<script src="/resource/js/custom.js"></script>
26
27<meta name="external-link-notice" content='{"enabled":false}'>
28<!-- 水印配置信息 -->
29<meta name="watermark" content='{"enabled":false,"type":"text","text":"网站水印","color":"#CCCCCC","fontSize":"16","image":"","imageWidth":"100","opacity":"0.3","position":"tile","rotate":"-30","xSpace":"100","ySpace":"100","xOffset":"20","yOffset":"20"}'>
30
31
32<!-- Responsive -->
33<meta http-equiv="X-UA-Compatible" content="IE=edge">
34<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
35<!--[if lt IE 9]>
35<script src="/resource/js/html5shiv.js"></script>
35<![endif]-->
36<!--[if lt IE 9]>
36<script src="/resource/js/respond.js"></script>
36<![endif]-->
37<script type="text/javascript" src="/resource/js/swiper.min.js"></script>
37
38<style>
39	.theme-color{color:!important;}
40    .theme-bor-color{border-color:!important;}
41    .theme-icon-color{color:!important;}
42    .theme-bg-color{background:!important;}
43    .theme-active-color:active{color:!important;}
44    .theme-actice-bg-color:active{background:!important;}
45    .btn-style-one, .quote-widget .widget-content, .projects-section-five .filters .filter:hover, .blog-cat-three li a:hover, .blog-cat-three li.active a, .blog-cat-three li a:before, .services-block .inner-box .lower-content .category:before, .services-section .owl-dots .owl-dot.active, .services-section .owl-dots .owl-dot:hover, .btn-style-two, .banner-carousel .content-box .btn-style-three:hover::before, .news-block-three .inner-box .image .post-date, .scroll-to-top, .contact-form .form-group .submit-btn:hover, .accordion-box .block .acc-btn.active .icon-outer, .news-block .inner-box .image .post-date, .footer_kf, .main-menu .navigation > li > ul > li  > ul > li > a:before, .main-menu .navigation > li > ul > li >
46            a:before, .projects-section-five .filters li.active, .sidebar-title h2, .our-product .single-product:hover, .pagination .pagination .active span, .imgText ul li.active span{background-color: ;}
47    .accordion-box .block .acc-btn.active .icon-outer{border-color: ;}
48    .services-block-two .inner-box .image .overlay-box, .services-block-two .inner-box .image .heading-box
49            {border-color: ;}
50    .text_theme_color{transition:.3s; color: !important;}
51    .bg_theme_color{transition:.3s; background: !important;}
52    .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:focus, .pagination > .active > span:focus{background:!important;border-color:!important;}
53    #think_page_trace_open{display: none;}
54
55    /* 提取主题颜色的RGB值,用于透明度效果 */
56    :root {
57        --theme-color: #409EFF;
58        --theme-color-rgb: 64, 158, 255; /* 默认蓝色 */
59    }
60
61    /* 水印样式 */
62    .watermark {
63        position: fixed;
64        top: 0;
65        left: 0;
66        width: 100%;
67        height: 100%;
68        pointer-events: none; /* 确保水印不会影响页面交互 */
69        z-index: 9999;
70        overflow: hidden;
71    }
72</style>
73<style>
74	.main-menu .navigation > li > a{color:#333333;}
75	.fixed-header .navigation > li > a{color:#333333;}
76	.main-menu .navigation > li .active{padding: 0 15px;border-radius: 30px;border:1px solid #409EFF;color:#ffffff;background:#409EFF;}
77	.iconfont{font-size: 25px;}
78</style>
79<!-- header1 -->
80<header class="main-header clearfix pc-show" style="background:#ffffff;">
81	<div class="header-upper">
82		<div class="inner-container">
83			<div class="auto-container clearfix zh-logo">
84				<div class="fl flex">
85					<div class="gf-logo logo55 pad-20 pad-l5">
86						<a href="/"><img src="https://zj.chengmenghudong.com.cn/storage/2/20260402/1776134117890.png" alt=""></a>
87					</div>
88					<div class="trans_logo logo55 pd-10">
89						<a href="/"><img src="https://zj.chengmenghudong.com.cn/storage/2/20251101/1762761216087.png" alt=""></a>
90					</div>
91					
91<script src="/resource/js/vue.min.js"></script>
91
92<link rel="stylesheet" href="/resource/css/city-selector.css">
93				</div>
94
95				<div class="nav-outer clearfix">
96					<nav class="main-menu navbar-expand-md navbar-light">
97						<div class="navbar-header">
98							<button class="navbar-toggler" type="button" data-toggle="collapse"
99								data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
100								aria-expanded="false" aria-label="Toggle navigation">
101								<span class="icon flaticon-menu"></span>
102							</button>
103						</div>
104
105						<div class="collapse navbar-collapse clearfix" id="navbarSupportedContent">
106							<ul class="navigation clearfix">
107																<li class="current dropdown">
108									<a  data-translate="true" class=""
109										href="/124"  data-field=" ">
110										首页									</a>
111																	</li>
112																								<li class="current dropdown">
113									<a  data-translate="true" class=""
114										href="/128"  data-field=" ">
115										行业资讯									</a>
116																	</li>
117																								<li class="current dropdown">
118									<a  data-translate="true" class=""
119										href="/127"  data-field=" ">
120										常见问题									</a>
121																	</li>
122																								<li class="current dropdown">
123									<a  data-translate="true" class=""
124										href="/126"  data-field=" ">
125										案例展示									</a>
126																	</li>
127																								<li class="current dropdown">
128									<a  data-translate="true" class=""
129										href="/125"  target="_blank"  data-field=" ">
130										旗下产品									</a>
131																	</li>
132																								<li class="current dropdown">
133									<a  data-translate="true" class=""
134										href="/130"  data-field=" ">
135										关于我们									</a>
136																	</li>
137																							</ul>
138							<div class="outer-box clearfix">
139								<!-- 主题样式 -->
140<style>
141    :root {
142        --theme-color: #409EFF;
143    }
144
145    .user-menu .dropdown-toggle span.name {
146        position: relative;
147        top: 0;
148        left: 0;
149        background: transparent;
150        color: #000;
151    }
152        #think_page_trace_open{display: none;}
153
154    /* 用户菜单样式 */
155    .user-menu {
156        position: relative;
157        display: inline-block;
158        margin: 0 15px;
159    }
160
161    .user-menu .avatar {
162        width: 32px;
163        height: 32px;
164        border-radius: 50%;
165        margin-right: 8px;
166        object-fit: cover;
167        border: 2px solid var(--theme-color);
168    }
169
170    .user-menu .dropdown-toggle {
171        display: flex;
172        align-items: center;
173        color: #333;
174        text-decoration: none;
175        padding: 5px 10px;
176        border-radius: 4px;
177        transition: all 0.3s;
178    }
179
180    .user-menu .dropdown-toggle:hover {
181        background: rgba(0,0,0,0.05);
182    }
183
184    .user-menu .dropdown-toggle span {
185        max-width: 120px;
186        overflow: hidden;
187        text-overflow: ellipsis;
188        white-space: nowrap;
189    }
190
191    .user-menu .dropdown-menu {
192        min-width: 200px;
193        padding: 8px 0;
194        margin-top: 10px;
195        display: none;
196        position: absolute;
197        right: 0;
198        background: #fff;
199        border: 1px solid #ddd;
200        border-radius: 4px;
201        box-shadow: 0 2px 8px rgba(0,0,0,0.1);
202        z-index: 1000;
203        animation: fadeIn 0.2s ease-out;
204    }
205
206    @keyframes fadeIn {
207        from {
208            opacity: 0;
209            transform: translateY(-10px);
210        }
211        to {
212            opacity: 1;
213            transform: translateY(0);
214        }
215    }
216
217    .user-menu .dropdown-menu.show {
218        display: block;
219    }
220
221    .user-menu .dropdown-item {
222        display: flex;
223        align-items: center;
224        padding: 8px 20px;
225        color: #333;
226        text-decoration: none;
227        transition: all 0.3s;
228    }
229
230    .user-menu .dropdown-item i {
231        width: 20px;
232        margin-right: 8px;
233        color: #666;
234        transition: all 0.3s;
235    }
236
237    .user-menu .dropdown-item:hover {
238        background: #f8f9fa;
239        color: var(--theme-color);
240    }
241
242    .user-menu .dropdown-item:hover i {
243        color: var(--theme-color);
244    }
245
246    .user-menu .dropdown-divider {
247        height: 1px;
248        margin: 8px 0;
249        background-color: #e9ecef;
250    }
251
252    .user-menu .login-btns {
253        display: flex;
254        gap: 10px;
255        align-items: center;
256    }
257
258    .user-menu .login-btns .btn {
259        padding: 7px 16px;
260        border-radius: 4px;
261        text-decoration: none;
262        transition: all 0.3s;
263        font-weight: 500;
264    }
265
266    .user-menu .login-btns .btn-outline-primary {
267        border: 1px solid var(--theme-color);
268        color: var(--theme-color);
269    }
270
271    .user-menu .login-btns .btn-outline-primary:hover {
272        background: var(--theme-color);
273        color: #fff;
274    }
275
276    .user-menu .login-btns .btn-primary {
277        background: var(--theme-color);
278        color: #fff;
279        border: 1px solid var(--theme-color);
280    }
281
282    .user-menu .login-btns .btn-primary:hover {
283        opacity: 0.9;
284        transform: translateY(-1px);
285    }
286</style>
287
288<!-- 动态主题颜色 -->
289<script>
290document.documentElement.style.setProperty('--theme-color', '');
291</script>
291
292<!-- 用户菜单 -->
293<div class="user-menu">
294        <div class="login-btns">
295        <style>
296    /* 语言下拉菜单样式 */
297    .language-dropdown {
298        position: relative;
299    }
300
301    .language-dropdown .dropdown-toggle {
302        display: flex;
303        align-items: center;
304        text-decoration: none;
305        padding: 5px 10px;
306        border-radius: 4px;
307        transition: all 0.3s;
308        color:#333333;
309    }
310    .fixed-header .language-dropdown .dropdown-toggle {
311        color:#333333;
312    }
313
314    .language-dropdown .dropdown-toggle i {
315        margin-right: 5px;
316    }
317
318    .language-dropdown .dropdown-toggle:hover {
319        background: rgba(0,0,0,0.05);
320    }
321
322    .language-dropdown .dropdown-menu {
323        display: none; /* 默认隐藏下拉框 */
324        position: absolute;
325        top: 100%;
326        left: 0;
327        z-index: 1000;
328        min-width: 150px;
329        background: #fff;
330        border: 1px solid rgba(0,0,0,0.15);
331        border-radius: 4px;
332        box-shadow: 0 2px 8px rgba(0,0,0,0.1);
333        margin-top: 2px;
334    }
335
336    .language-dropdown .dropdown-menu.show {
337        display: block; /* 点击时显示下拉框 */
338    }
339
340    /* 多列展示样式 - 当语言超过10种时使用 */
341    .language-dropdown .dropdown-menu.multi-column.show {
342        display: flex; /* 只有在show状态下才使用flex布局 */
343        flex-wrap: wrap;
344        min-width: 235px;
345        padding: 5px;
346        line-height: 1.2;
347    }
348
349    .language-dropdown .dropdown-menu.multi-column .dropdown-item {
350        width: 33.33%; /* 三列布局 */
351        box-sizing: border-box;
352        padding: 0 8px;
353        font-size: 13px;
354        white-space: nowrap;
355        overflow: hidden;
356        text-overflow: ellipsis;
357        margin: 0;
358    }
359
360    /* 响应式调整 - 当屏幕较小时改为两列 */
361    @media (max-width: 768px) {
362        .language-dropdown .dropdown-menu.multi-column {
363            min-width: 240px;
364            max-width: 320px;
365            padding: 4px;
366        }
367
368        .language-dropdown .dropdown-menu.multi-column .dropdown-item {
369            width: 50%; /* 两列布局 */
370            padding: 5px 6px;
371            font-size: 12px;
372        }
373    }
374
375    /* 超小屏幕优化 */
376    @media (max-width: 480px) {
377        .language-dropdown .dropdown-menu.multi-column {
378            min-width: 200px;
379            max-width: 280px;
380        }
381
382        .language-dropdown .dropdown-menu.multi-column .dropdown-item {
383            padding: 4px 5px;
384        }
385    }
386
387    /* 语言选中状态样式 */
388    .language-dropdown .dropdown-item.active {
389        background-color: var(--theme-color);
390        color: #fff;
391    }
392
393    .language-dropdown .dropdown-item:hover {
394        background-color: rgba(0,0,0,0.05);
395    }
396
397    .language-dropdown .dropdown-item.active:hover {
398        background-color: var(--theme-color);
399        opacity: 0.9;
400    }
401</style>
402<!-- 语言切换下拉菜单 -->
403<script>
404    // 语言切换工具对象
405    window.langSwitchUtils = {
406        // 切换下拉菜单显示/隐藏
407        toggleDropdown: function(element) {
408            if (!element) return;
409            var dropdownMenu = element.nextElementSibling;
410            if (!dropdownMenu) return;
411            dropdownMenu.classList.toggle('show');
412
413            // 如果是显示状态,点击页面其他区域时关闭
414            if (dropdownMenu.classList.contains('show')) {
415                document.addEventListener('click', this.closeDropdownOnOutsideClick);
416            } else {
417                document.removeEventListener('click', this.closeDropdownOnOutsideClick);
418            }
419        },
420
421        // 点击页面其他区域关闭下拉菜单
422        closeDropdownOnOutsideClick: function(event) {
423            const dropdowns = document.querySelectorAll('.dropdown-menu.show');
424            dropdowns.forEach(function(dropdown) {
425                let targetElement = event.target;
426                let isDropdownClick = false;
427
428                while (targetElement != null) {
429                    if (targetElement.classList && targetElement.classList.contains('language-dropdown')) {
430                        isDropdownClick = true;
431                        break;
432                    }
433                    targetElement = targetElement.parentElement;
434                }
435
436                if (!isDropdownClick) {
437                    dropdown.classList.remove('show');
438                    document.removeEventListener('click', langSwitchUtils.closeDropdownOnOutsideClick);
439                }
440            });
441        },
442
443        // 切换语言
444        changeLanguage: function(languageCode) {
445            console.log('切换语言到:', languageCode);
446
447            // 保存用户语言偏好到本地存储
448            try {
449                localStorage.setItem('preferred_language', languageCode);
450            } catch (e) {
451                console.error('保存语言偏好失败:', e);
452            }
453
454            // 更新语言显示和菜单选中状态
455            this.updateLanguageDisplay(languageCode);
456
457            // 刷新页面应用新语言
458            if (languageCode === 'zh-cn') {
459                window.location.reload();
460                return;
461            }
462
463            // 显示加载提示
464            const translationLoading = document.querySelector('.translation-loading');
465            if (translationLoading) {
466                translationLoading.style.display = 'block';
467            }
468
469            // 尝试调用全局的translate函数进行翻译
470            if (typeof window.translate === 'object' && typeof window.translate.changeLanguage === 'function') {
471                try {
472                    window.translate.changeLanguage(languageCode);
473                } catch (e) {
474                    console.error('调用翻译函数失败:', e);
475                    // 失败时刷新页面
476                    window.location.reload();
477                }
478            } else {
479                // 没有翻译函数时直接刷新页面
480                window.location.reload();
481            }
482        },
483
484        // 更新语言显示和菜单选中状态
485        updateLanguageDisplay: function(languageCode) {
486            // 获取当前语言对应的名称
487            fetch('/index/translate/getLanguages')
488                .then(response => response.json())
489                .then(data => {
490                    if (data.code === 200 && data.data && data.data.languages) {
491                        const languages = data.data.languages;
492                        const language = languages.find(lang => lang.code === languageCode);
493
494                        if (language) {
495                            // 更新当前显示的语言名称
496                            const currentLanguageElement = document.getElementById('current-language');
497                            if (currentLanguageElement) {
498                                currentLanguageElement.textContent = language.name;
499                            }
500
501                            // 更新下拉菜单中的选中状态
502                            const languageMenu = document.getElementById('language-menu');
503                            if (languageMenu) {
504                                // 移除所有项的选中状态
505                                const items = languageMenu.querySelectorAll('.dropdown-item');
506                                items.forEach(item => {
507                                    item.classList.remove('active');
508                                });
509
510                                // 为当前选中的语言添加选中状态
511                                const selectedItem = Array.from(items).find(item => {
512                                    return item.getAttribute('data-lang-code') === languageCode;
513                                });
514
515                                if (selectedItem) {
516                                    selectedItem.classList.add('active');
517                                }
518                            }
519                        }
520                    }
521                })
522                .catch(error => {
523                    console.error('获取语言名称失败:', error);
524                });
525        }
526    };
527
528    // 页面加载完成后获取语言列表
529    document.addEventListener('DOMContentLoaded', function() {
530        // 检查是否启用多语言功能
531        const enableMultilang = '0' === '1';
532        if (!enableMultilang) {
533            return; // 如果未启用多语言功能,则不加载语言列表
534        }
535
536        // 获取语言列表
537        fetch('/index/translate/getLanguages')
538            .then(response => response.json())
539            .then(data => {
540                if (data.code === 200 && data.data) {
541                    const languages = data.data.languages || [];
542
543                    // 渲染语言菜单
544                    renderLanguageMenu(languages);
545
546                    // 如果没有语言配置,保留"加载中"的显示
547                    if (!languages || languages.length === 0) {
548                        const languageMenu = document.getElementById('language-menu');
549                        if (languageMenu) {
550                            languageMenu.innerHTML = '<div class="dropdown-item loading-text"><span>加载中...</span></div>';
551                        }
552                        return;
553                    }
554                }
555            })
556            .catch(error => {
557                console.error('获取语言列表失败:', error);
558            });
559    });
560
561    // 渲染语言菜单
562    function renderLanguageMenu(languages) {
563        const languageMenu = document.getElementById('language-menu');
564        if (!languageMenu) return;
565
566        // 清空加载提示
567        languageMenu.innerHTML = '';
568
569        // 判断是否需要多列展示(语言超过10种)
570        if (languages && languages.length > 10) {
571            languageMenu.classList.add('multi-column');
572        } else {
573            languageMenu.classList.remove('multi-column');
574        }
575
576        // 如果语言列表为空,保留加载中的显示
577        if (!languages || languages.length === 0) {
578            // 保持"加载中"文本显示
579            languageMenu.innerHTML = '<div class="dropdown-item loading-text"><span>加载中...</span></div>';
580            return;
581        }
582
583        // 获取当前选中的语言代码
584        let currentLangCode = '';
585        try {
586            currentLangCode = localStorage.getItem('preferred_language');
587        } catch (e) {
588            console.error('获取语言偏好失败:', e);
589        }
590
591        // 如果本地存储中没有语言偏好,尝试从translate.to获取
592        if (!currentLangCode && window.translate && window.translate.to) {
593            currentLangCode = window.translate.to;
594        }
595
596        // 如果仍然没有语言代码,使用第一个语言作为默认
597        if (!currentLangCode && languages.length > 0) {
598            currentLangCode = languages[0].code;
599        }
600
601        // 创建文档片段,减少DOM操作次数
602        const fragment = document.createDocumentFragment();
603
604        // 添加语言选项
605        languages.forEach(lang => {
606            const item = document.createElement('a');
607            item.className = 'dropdown-item';
608
609            // 设置data-lang-code属性
610            item.setAttribute('data-lang-code', lang.code);
611            item.dataset.langCode = lang.code;
612
613            // 检查是否为当前选中的语言
614            if (lang.code === currentLangCode) {
615                item.className += ' active'; // 添加active类以高亮显示当前选中的语言
616
617                // 同时更新顶部显示的语言名称
618                const currentLanguageElement = document.getElementById('current-language');
619                if (currentLanguageElement) {
620                    currentLanguageElement.textContent = lang.name;
621                }
622            }
623
624            item.href = 'javascript:void(0);';
625
626            const span = document.createElement('span');
627            span.textContent = lang.name;
628
629            item.appendChild(span);
630            fragment.appendChild(item);
631        });
632
633        // 一次性添加所有元素到DOM
634        languageMenu.appendChild(fragment);
635
636        // 使用事件委托绑定点击事件
637        languageMenu.addEventListener('click', function(e) {
638            const target = e.target.closest('.dropdown-item');
639            if (target && target.dataset.langCode) {
640                const langCode = target.dataset.langCode;
641                console.log('点击切换语言:', langCode);
642
643                // 调用语言切换工具对象的方法
644                langSwitchUtils.changeLanguage(langCode);
645            }
646        });
647    }
648
649    // 设置全局changeLanguage函数
650    window.changeLanguage = function(languageCode) {
651        langSwitchUtils.changeLanguage(languageCode);
652    };
653</script>
653
654            </div>
655    </div>
656
657<script>
658// 处理退出登录
659function handleLogout() {
660    const confirmMsg = window.LangUtil ? window.LangUtil.getText('logout_confirm') : '确定要退出登录吗?';
661    if(!confirm(confirmMsg)) return;
662
663    // 清除本地存储
664    localStorage.clear();
665    sessionStorage.clear();
666
667    // 清除所有cookie
668    document.cookie.split(';').forEach(function(c) {
669        document.cookie = c.trim().split('=')[0] + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';
670    });
671
672    // 发送退出请求并刷新当前页面
673    fetch('/index/login/logout.html', {
674        method: 'GET',
675        credentials: 'same-origin',
676        cache: 'no-cache'
677    }).then(function(response) {
678        return response.json();
679    }).then(function(data) {
680        if(data.code === 200) {
681            // 刷新当前页面
682            window.location.reload(true);
683        } else {
684            // 如果有错误,也刷新页面
685            window.location.reload(true);
686        }
687    }).catch(function() {
688        // 发生错误时也刷新页面
689        window.location.reload(true);
690    });
691}
692
693// 切换下拉菜单显示/隐藏
694function toggleDropdown(element) {
695    if (!element) return;
696    var dropdownMenu = element.nextElementSibling;
697    if (!dropdownMenu) return;
698    dropdownMenu.classList.toggle('show');
699}
700
701// 点击页面其他地方关闭下拉菜单
702document.addEventListener('click', function(event) {
703    var dropdowns = document.getElementsByClassName('dropdown-menu');
704    Array.from(dropdowns).forEach(function(dropdown) {
705        if (dropdown.classList.contains('show')) {
706            var targetElement = event.target;
707            var isDropdownClick = false;
708            while (targetElement != null) {
709                if (targetElement.classList.contains('dropdown')) {
710                    isDropdownClick = true;
711                    break;
712                }
713                targetElement = targetElement.parentElement;
714            }
715            if (!isDropdownClick) {
716                dropdown.classList.remove('show');
717            }
718        }
719    });
720});
721</script>
721
722							</div>
723						</div>
724					</nav>
725				</div>
726			</div>
727		</div>
728	</div>
729	
729<script src="/resource/js/custom.js"></script>
729
730</header>
731<!-- 手机端头部导航 -->
732<header class="mobile-header mobile-show">
733    <div class="header-container">
734        <!-- 左侧Logo区域 -->
735        <div class="header-logo">
736            <a href="/">
737                <picture class="logo">
738                    <img srcset="https://zj.chengmenghudong.com.cn/storage/2/20251101/1762761216087.png" alt="logo">
739                </picture>
740            </a>
741        </div>
742        <div class="mobile-language-switch-container">
743            <!-- 移动端语言切换 -->
744            <div class="mobile-language-switch">
745                            </div>
746            <!-- 汉堡菜单按钮 -->
747            <div class="menu-trigger">
748                <span></span>
749                <span></span>
750                <span></span>
751            </div>
752        </div>
753        
754        <!-- 导航菜单区域 -->
755        <div class="nav-wrapper">
756            <nav class="main-nav">
757                <ul class="nav-list">
758                                        <li class="nav-item">
759                                                <a href="/124" class="nav-link">
760                            <span>首页</span>
761                        </a>
762                                            </li>
763                                                            <li class="nav-item">
764                                                <a href="/128" class="nav-link">
765                            <span>行业资讯</span>
766                        </a>
767                                            </li>
768                                                            <li class="nav-item">
769                                                <a href="/127" class="nav-link">
770                            <span>常见问题</span>
771                        </a>
772                                            </li>
773                                                            <li class="nav-item">
774                                                <a href="/126" class="nav-link">
775                            <span>案例展示</span>
776                        </a>
777                                            </li>
778                                                            <li class="nav-item">
779                                                <a href="/125" class="nav-link">
780                            <span>旗下产品</span>
781                        </a>
782                                            </li>
783                                                            <li class="nav-item">
784                                                <a href="/130" class="nav-link">
785                            <span>关于我们</span>
786                        </a>
787                                            </li>
788                                                        </ul>
789            </nav>
790            
791            <!-- 登录注册按钮区域 -->
792            <div class="auth-buttons">
793                            </div>
794        </div>
795
796    </div>
797    
798</header>
799
800<style>
801/* 移动端头部样式 */
802.mobile-header {
803    position: relative; /* 初始为absolute定位 */
804    top: 0;
805    left: 0;
806    width: 100%;
807    background: #fff;
808    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
809    z-index: 1000;
810    transition: all 0.3s ease; /* 添加过渡效果 */
811}
812
813/* 滚动状态下的样式 */
814.mobile-header.fixed {
815    position: fixed;
816    animation: slideDown 0.3s forwards; /* 添加向下滑入动画 */
817}
818
819@keyframes slideDown {
820    from {
821        transform: translateY(-100%);
822    }
823    to {
824        transform: translateY(0);
825    }
826}
827
828.header-container {
829    display: flex;
830    align-items: center;
831    justify-content: space-between;
832    padding: 15px;
833    height: 60px;
834}
835
836/* Logo样式 */
837.header-logo {
838    height: 35px;
839}
840
841.header-logo img {
842    height: 100%;
843    width: auto;
844}
845
846/* 汉堡菜单按钮 */
847.menu-trigger {
848    width: 30px;
849    height: 20px;
850    position: relative;
851    cursor: pointer;
852    z-index: 1001;
853}
854
855.menu-trigger span {
856    display: block;
857    position: absolute;
858    height: 2px;
859    width: 100%;
860    background: #333;
861    border-radius: 2px;
862    transition: all 0.3s ease;
863}
864
865.menu-trigger span:nth-child(1) { top: 0; }
866.menu-trigger span:nth-child(2) { top: 9px; }
867.menu-trigger span:nth-child(3) { top: 18px; }
868
869/* 菜单打开状态 */
870.menu-active .menu-trigger span:nth-child(1) {
871    transform: rotate(45deg);
872    top: 9px;
873}
874
875.menu-active .menu-trigger span:nth-child(2) {
876    opacity: 0;
877}
878
879.menu-active .menu-trigger span:nth-child(3) {
880    transform: rotate(-45deg);
881    top: 9px;
882}
883
884/* 移动端语言切换样式 */
885.mobile-language-switch {
886    margin-right: 10px;
887    position: relative;
888    z-index: 1001;
889}
890.mobile-language-switch-container{
891    display: flex;
892    align-items: center;
893    justify-content: center;
894}
895/* 移动端语言下拉菜单样式覆盖 */
896.mobile-language-switch .language-dropdown {
897    margin-right: 5px;
898}
899
900.mobile-language-switch .language-dropdown .dropdown-toggle {
901    padding: 5px 8px;
902    font-size: 14px;
903    white-space: nowrap;
904    background-color: #f5f5f5;
905    border-radius: 4px;
906    display: flex;
907    align-items: center;
908}
909
910.mobile-language-switch .language-dropdown .dropdown-toggle i {
911    margin-right: 3px;
912}
913
914.mobile-language-switch .language-dropdown .dropdown-menu {
915    position: absolute;
916    top: 100%;
917    right: 0;
918    left: auto;
919    min-width: 120px;
920    background: #fff;
921    border-radius: 4px;
922    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
923    z-index: 1002;
924    padding: 5px 0;
925    margin-top: 5px;
926    display: none;
927}
928
929.mobile-language-switch .language-dropdown .dropdown-menu.show {
930    display: block;
931}
932
933.mobile-language-switch .language-dropdown .dropdown-item {
934    padding: 8px 15px;
935    font-size: 14px;
936    color: #333;
937    text-decoration: none;
938    display: block;
939    white-space: nowrap;
940}
941
942.mobile-language-switch .language-dropdown .dropdown-item:hover {
943    background-color: #f5f5f5;
944}
945
946.mobile-language-switch .language-dropdown .dropdown-item.active {
947    background-color: var(--theme-color);
948    color: #fff;
949}
950
951/* 导航菜单区域 */
952.nav-wrapper {
953    position: fixed;
954    top: 60px;
955    left: 0;
956    width: 100%;
957    height: calc(100vh - 60px);
958    background: #fff;
959    overflow-y: auto;
960    transform: translateX(100%);
961    transition: transform 0.3s ease;
962    z-index: 999;
963}
964
965.menu-active .nav-wrapper {
966    transform: translateX(0);
967}
968
969/* 主导航样式 */
970.nav-list {
971    padding: 0;
972    margin: 0;
973    list-style: none;
974}
975
976.nav-item {
977    border-bottom: 1px solid #eee;
978}
979
980.nav-link {
981    display: flex;
982    align-items: center;
983    justify-content: space-between;
984    padding: 15px;
985    color: #333;
986    text-decoration: none;
987    font-size: 16px;
988}
989
990.arrow {
991    width: 10px;
992    height: 10px;
993    border-right: 2px solid #666;
994    border-bottom: 2px solid #666;
995    transform: rotate(45deg);
996    transition: transform 0.3s ease;
997}
998
999.nav-item.active > .nav-link .arrow {
1000    transform: rotate(-135deg);
1001}
1002
1003/* 二级菜单样式 */
1004.submenu {
1005    display: none;
1006    background: #f8f8f8;
1007}
1008
1009.nav-item.active > .submenu {
1010    display: block;
1011}
1012
1013.submenu-item {
1014    border-bottom: 1px solid #eee;
1015}
1016
1017.submenu-title {
1018    display: flex;
1019    align-items: center;
1020    justify-content: space-between;
1021    padding: 12px 15px 12px 30px;
1022    color: #666;
1023    font-size: 15px;
1024}
1025
1026/* 三级菜单样式 */
1027.third-menu {
1028    display: none;
1029    background: #f1f1f1;
1030    padding: 0;
1031    margin: 0;
1032    list-style: none;
1033}
1034
1035.submenu-item.active > .third-menu {
1036    display: block;
1037}
1038
1039.third-menu li a {
1040    display: block;
1041    padding: 10px 15px 10px 45px;
1042    color: #888;
1043    font-size: 14px;
1044    text-decoration: none;
1045}
1046
1047/* 登录注册按钮样式 */
1048.auth-buttons {
1049    padding: 20px 15px;
1050    display: flex;
1051    gap: 10px;
1052}
1053
1054.auth-btn {
1055    flex: 1;
1056    display: flex;
1057    align-items: center;
1058    justify-content: center;
1059    padding: 12px;
1060    border-radius: 5px;
1061    text-decoration: none;
1062    font-size: 15px;
1063    transition: all 0.3s ease;
1064}
1065
1066.login-btn {
1067    background: #f5f5f5;
1068    color: #333;
1069}
1070
1071.register-btn {
1072    background: #2196F3;
1073    color: #fff;
1074}
1075
1076.auth-btn i {
1077    margin-right: 5px;
1078}
1079</style>
1080
1081<script>
1082$(function() {
1083    // 初始化菜单交互
1084    initMobileMenu();
1085    
1086    // 初始化滚动监听
1087    initScrollHeader();
1088    
1089    // 初始化移动端语言切换
1090    initMobileLangSwitch();
1091});
1092
1093// 初始化移动端语言切换功能
1094function initMobileLangSwitch() {
1095    // 检查是否启用多语言功能
1096    const enableMultilang = '0' === '1';
1097    if (!enableMultilang) {
1098        return; // 如果未启用多语言功能,则不加载语言列表
1099    }
1100    
1101    // 获取语言列表
1102    fetch('/index/translate/getLanguages')
1103        .then(response => response.json())
1104        .then(data => {
1105            if (data.code === 200 && data.data) {
1106                const languages = data.data.languages || [];
1107                
1108                // 渲染移动端语言菜单
1109                renderMobileLanguageMenu(languages);
1110                
1111                // 如果没有语言配置,保留"加载中"的显示
1112                if (!languages || languages.length === 0) {
1113                    const languageMenu = document.getElementById('m-language-menu');
1114                    if (languageMenu) {
1115                        languageMenu.innerHTML = '<div class="dropdown-item loading-text"><span>加载中...</span></div>';
1116                    }
1117                    return;
1118                }
1119            }
1120        })
1121        .catch(error => {
1122            console.error('获取语言列表失败:', error);
1123        });
1124}
1125
1126// 渲染移动端语言菜单
1127function renderMobileLanguageMenu(languages) {
1128    const languageMenu = document.getElementById('m-language-menu');
1129    if (!languageMenu) return;
1130    
1131    // 清空加载提示
1132    languageMenu.innerHTML = '';
1133    
1134    // 如果语言列表为空,保留加载中的显示
1135    if (!languages || languages.length === 0) {
1136        languageMenu.innerHTML = '<div class="dropdown-item loading-text"><span>加载中...</span></div>';
1137        return;
1138    }
1139    
1140    // 获取当前选中的语言代码
1141    let currentLangCode = '';
1142    try {
1143        currentLangCode = localStorage.getItem('preferred_language');
1144    } catch (e) {
1145        console.error('获取语言偏好失败:', e);
1146    }
1147    
1148    // 如果本地存储中没有语言偏好,尝试从translate.to获取
1149    if (!currentLangCode && window.translate && window.translate.to) {
1150        currentLangCode = window.translate.to;
1151    }
1152    
1153    // 如果仍然没有语言代码,使用第一个语言作为默认
1154    if (!currentLangCode && languages.length > 0) {
1155        currentLangCode = languages[0].code;
1156    }
1157    
1158    // 创建文档片段,减少DOM操作次数
1159    const fragment = document.createDocumentFragment();
1160    
1161    // 添加语言选项
1162    languages.forEach(lang => {
1163        const item = document.createElement('a');
1164        item.className = 'dropdown-item';
1165        
1166        // 设置data-lang-code属性
1167        item.setAttribute('data-lang-code', lang.code);
1168        item.dataset.langCode = lang.code;
1169        
1170        // 检查是否为当前选中的语言
1171        if (lang.code === currentLangCode) {
1172            item.className += ' active'; // 添加active类以高亮显示当前选中的语言
1173            
1174            // 同时更新顶部显示的语言名称
1175            const currentLanguageElement = document.getElementById('m-current-language');
1176            if (currentLanguageElement) {
1177                currentLanguageElement.textContent = lang.name;
1178            }
1179        }
1180        
1181        item.href = 'javascript:void(0);';
1182        
1183        const span = document.createElement('span');
1184        span.textContent = lang.name;
1185        
1186        item.appendChild(span);
1187        fragment.appendChild(item);
1188    });
1189    
1190    // 一次性添加所有元素到DOM
1191    languageMenu.appendChild(fragment);
1192    
1193    // 使用事件委托绑定点击事件
1194    languageMenu.addEventListener('click', function(e) {
1195        const target = e.target.closest('.dropdown-item');
1196        if (target && target.dataset.langCode) {
1197            const langCode = target.dataset.langCode;
1198            console.log('点击切换语言:', langCode);
1199            
1200            // 调用语言切换方法
1201            if (window.langSwitchUtils && typeof window.langSwitchUtils.changeLanguage === 'function') {
1202                window.langSwitchUtils.changeLanguage(langCode);
1203            } else {
1204                // 如果没有全局方法,使用简单的刷新方式切换
1205                try {
1206                    localStorage.setItem('preferred_language', langCode);
1207                } catch (e) {
1208                    console.error('保存语言偏好失败:', e);
1209                }
1210                window.location.reload();
1211            }
1212        }
1213    });
1214}
1215
1216// 移动端语言切换工具对象
1217window.mobileLangSwitchUtils = {
1218    // 切换下拉菜单显示/隐藏
1219    toggleDropdown: function(element) {
1220        if (!element) return;
1221        var dropdownMenu = document.getElementById('m-language-menu');
1222        if (!dropdownMenu) return;
1223        dropdownMenu.classList.toggle('show');
1224        
1225        // 阻止事件冒泡
1226        event.stopPropagation();
1227        
1228        // 如果是显示状态,点击页面其他区域时关闭
1229        if (dropdownMenu.classList.contains('show')) {
1230            document.addEventListener('click', this.closeDropdownOnOutsideClick);
1231        } else {
1232            document.removeEventListener('click', this.closeDropdownOnOutsideClick);
1233        }
1234    },
1235    
1236    // 点击页面其他区域关闭下拉菜单
1237    closeDropdownOnOutsideClick: function(event) {
1238        const dropdownMenu = document.getElementById('m-language-menu');
1239        if (!dropdownMenu) return;
1240        
1241        let targetElement = event.target;
1242        let isDropdownClick = false;
1243        
1244        while (targetElement != null) {
1245            if (targetElement.classList && targetElement.classList.contains('language-dropdown')) {
1246                isDropdownClick = true;
1247                break;
1248            }
1249            targetElement = targetElement.parentElement;
1250        }
1251        
1252        if (!isDropdownClick) {
1253            dropdownMenu.classList.remove('show');
1254            document.removeEventListener('click', mobileLangSwitchUtils.closeDropdownOnOutsideClick);
1255        }
1256    }
1257};
1258
1259function initMobileMenu() {
1260    // 汉堡菜单点击事件
1261    $('.menu-trigger').on('click', function(e) {
1262        e.stopPropagation();
1263        $('body').toggleClass('menu-active');
1264    });
1265
1266    // 一级菜单点击事件
1267    $('.nav-link').on('click', function(e) {
1268        if ($(this).siblings('.submenu').length) {
1269            e.preventDefault();
1270            const $parent = $(this).parent();
1271            
1272            if ($parent.hasClass('active')) {
1273                $parent.removeClass('active');
1274                $parent.find('.submenu-item.active').removeClass('active');
1275            } else {
1276                $('.nav-item.active').removeClass('active');
1277                $parent.addClass('active');
1278            }
1279        }
1280    });
1281
1282    // 二级菜单点击事件
1283    $('.submenu-title').on('click', function(e) {
1284        if ($(this).siblings('.third-menu').length) {
1285            e.preventDefault();
1286            const $parent = $(this).parent();
1287            
1288            if ($parent.hasClass('active')) {
1289                $parent.removeClass('active');
1290            } else {
1291                $(this).closest('.submenu').find('.submenu-item.active').removeClass('active');
1292                $parent.addClass('active');
1293            }
1294        }
1295    });
1296
1297    // 点击空白处关闭菜单,但不关闭语言切换菜单
1298    $(document).on('click', function(e) {
1299        // 检查点击的元素是否在语言切换区域内
1300        if (!$(e.target).closest('.mobile-language-switch, .language-dropdown, .menu-trigger').length) {
1301            // 不是在语言切换区域内的点击,关闭主菜单
1302            $('body').removeClass('menu-active');
1303        }
1304    });
1305
1306    // 阻止菜单内部点击事件冒泡
1307    $('.nav-wrapper').on('click', function(e) {
1308        e.stopPropagation();
1309    });
1310}
1311
1312function initScrollHeader() {
1313    const $header = $('.mobile-header');
1314    const headerHeight = $header.outerHeight();
1315    let lastScroll = 0;
1316    const scrollThreshold = 300; // 滚动多少像素后固定头部
1317    
1318    // 创建一个占位元素,防止内容跳动
1319    const $placeholder = $('<div>').css({
1320        height: headerHeight,
1321        display: 'none'
1322    }).insertAfter($header);
1323    
1324    $(window).on('scroll', function() {
1325        const currentScroll = $(this).scrollTop();
1326        
1327        // 向下滚动超过阈值时固定头部
1328        if (currentScroll > scrollThreshold) {
1329            if (!$header.hasClass('fixed')) {
1330                $header.addClass('fixed');
1331                $placeholder.show();
1332            }
1333        } else {
1334            // 回到顶部附近时恢复原始位置
1335            $header.removeClass('fixed');
1336            $placeholder.hide();
1337        }
1338        
1339        lastScroll = currentScroll;
1340    });
1341}
1342</script>
1342
1343<!-- 添加必要的JS库 -->
1344<script src="/static/js/layer.min.js"></script>
vendor: 1 bytes, line 1344
1344
1345<script src="/static/js/qrcode.min.js"></script>
1345
1346<section class="page-title zh-w-100 pc-show">
1347        <img src="/resource/image/inner_img.jpg" alt="">
1348    </section>
1349<section class="page-title zh-w-100 mobile-show">
1350        <img src="/resource/image/inner_img.jpg" alt="">
1351    </section>
1352<!-- img_template1 -->
1353<div class="sidebar-page-container">
1354    <div class="auto-container">
1355        <div class="row clearfix flex-row-reverse">
1356            <!--Content Side-->
1357            <div class="content-side col-lg-9 col-md-12 col-xs-12">
1358                <div class="services-single">
1359                    <div class="inner-box">
1360                        <h2>社群营销</h2>
1361                        <div class="issue_time">
1362                                                        <span>分类:</span>四项能力                                                        <span class="mar-l20">发布人:</span>admin                                                        <span class="mar-l20">阅读:</span>36850                                                    </div>
1363                        <div class="text w-e-text-container">
1364                                                    </div>
1365
1366                        <!-- 转载说明和社交分享区域 -->
1367                        
1368                        <!-- 点赞和分享区域 -->
1369                        
1370                        <!-- 附件列表 -->
1371                        
1372                    </div>
1373                </div>
1374                <div class="bottom-page clearfix">
1375                    <div class="left-column">
1376                        <div class="inner-column">
1377                                                        <a href="/article/756.html">
1378                                <div>
1379                                    <div class="post"><span>上一篇:</span>分享助力</div>
1380                                </div>
1381                            </a>
1382                                                    </div>
1383                    </div>
1384                    <div class="right-column">
1385                        <div class="inner-column">
1386                                                        <a href="/article/754.html">
1387                                <div>
1388                                    <div class="post"><span>下一篇:</span>社区圈子</div>
1389                                </div>
1390                            </a>
1391                                                    </div>
1392                    </div>
1393                </div>
1394            </div>
1395
1396            <div class="sidebar-side col-lg-3 col-md-12 col-xs-12">
1397                <div class="left-sidebar">
1398
1399                    <!-- 热门推荐 -->
1400                    <div class="sidebar-widget categories-widget">
1401                        <div class="sidebar-title">
1402                            <h2>热门推荐</h2>
1403                        </div>
1404                        <div class="widget-content">
1405                            <ul class="blog-cat">
1406                                                                <li><a href="/article/757.html">社区圈子</a></li>
1407                                                                <li><a href="/article/756.html">分享助力</a></li>
1408                                                                <li><a href="/article/755.html">社群营销</a></li>
1409                                                                <li><a href="/article/754.html">社区圈子</a></li>
1410                                                            </ul>
1411                        </div>
1412                    </div>
1413
1414
1415                    <!-- 联系 -->
1416                    <div class="sidebar-widget quote-widget">
1417                        <div class="sidebar-title">
1418                            <h2>联系我们</h2>
1419                        </div>
1420                        <div class="iconfont icon-dianhua2 theme-color text-center pad-b20 bor-b-1"><p class="theme-color mar-t20 f-siz26"></p></div>
1421                        <div class="lower-box pad-20">
1422                            <p>诚盟软件行业解决方案</p>
1423                            <p>手机:18523692368</p>
1424                                                        <p>邮箱:[email protected]</p>
1425                                                        <p>地址:云南省丽江市古城区西安街道寨鑫路博士后写字楼6层</p>
1426                        </div>
1427                    </div>
1428
1429                </div>
1430            </div>
1431        </div>
1432    </div>
1433</div>
1434
1435<style type="text/css">
1436/* 附件列表样式 */
1437.attachment-section {
1438    margin-top: 30px;
1439    padding: 20px;
1440    background: #f8f9fa;
1441    border-radius: 4px;
1442}
1443
1444.attachment-title {
1445    font-size: 18px;
1446    color: #333;
1447    margin-bottom: 15px;
1448    padding-bottom: 10px;
1449    border-bottom: 1px solid #eee;
1450}
1451
1452.attachment-list {
1453    display: flex;
1454    flex-direction: column;
1455    gap: 15px;
1456}
1457
1458.attachment-item {
1459    display: flex;
1460    justify-content: space-between;
1461    align-items: center;
1462    padding: 15px;
1463    background: #fff;
1464    border-radius: 4px;
1465    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
1466    transition: all 0.3s ease;
1467}
1468
1469.attachment-item:hover {
1470    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
1471}
1472
1473.attachment-info {
1474    flex: 1;
1475    margin-right: 15px;
1476}
1477
1478.attachment-name {
1479    font-size: 16px;
1480    color: #333;
1481    margin-left: 8px;
1482}
1483
1484.attachment-desc {
1485    margin-top: 5px;
1486    font-size: 14px;
1487    color: #666;
1488    padding-left: 24px;
1489}
1490
1491.attachment-download,
1492.attachment-link {
1493    display: inline-flex;
1494    align-items: center;
1495    padding: 8px 15px;
1496    background: #409EFF;
1497    color: #fff;
1498    border-radius: 4px;
1499    text-decoration: none;
1500    transition: all 0.3s ease;
1501}
1502
1503.attachment-download:hover,
1504.attachment-link:hover {
1505    background: #66b1ff;
1506}
1507
1508.attachment-pwd {
1509    margin-left: 10px;
1510    padding: 2px 8px;
1511    background: #f4f4f5;
1512    color: #909399;
1513    border-radius: 2px;
1514    font-size: 12px;
1515}
1516
1517.iconfont {
1518    font-size: 18px;
1519}
1520
1521.icon-attachment,
1522.icon-download,
1523.icon-link {
1524    margin-right: 5px;
1525}
1526
1527/* 转载说明样式 */
1528.article-copyright {
1529    margin: 30px 0;
1530    padding: 15px 20px;
1531    background: #f8f9fa;
1532    border-left: 4px solid #409EFF;
1533    border-radius: 4px;
1534}
1535
1536.copyright-info {
1537    display: flex;
1538    align-items: center;
1539    color: #666;
1540    font-size: 14px;
1541}
1542
1543.copyright-info i {
1544    margin-right: 8px;
1545}
1546
1547.copyright-info a {
1548    color: #409EFF;
1549    text-decoration: none;
1550    margin-left: 5px;
1551}
1552
1553/* 社交操作区域样式 */
1554.social-actions {
1555    margin: 30px 0;
1556    padding: 20px;
1557    border-top: 1px solid #eee;
1558    border-bottom: 1px solid #eee;
1559    display: flex;
1560    align-items: center;
1561    justify-content: center;
1562    gap: 30px;
1563}
1564
1565/* 点赞按钮样式 */
1566.like-btn {
1567    display: flex;
1568    align-items: center;
1569    padding: 8px 20px;
1570    border-radius: 20px;
1571    background: #f8f9fa;
1572    cursor: pointer;
1573    transition: all 0.3s ease;
1574}
1575
1576.like-btn:hover {
1577    background: #e8f4ff;
1578}
1579
1580.like-btn i {
1581    margin-right: 5px;
1582}
1583
1584.like-count {
1585    color: #666;
1586}
1587
1588/* 赞赏按钮样式 */
1589.reward-btn {
1590    position: relative;
1591    display: flex;
1592    align-items: center;
1593    padding: 8px 20px;
1594    border-radius: 20px;
1595    background: #f8f9fa;
1596    cursor: pointer;
1597    transition: all 0.3s ease;
1598}
1599
1600.reward-btn:hover {
1601    background: #e8f4ff;
1602}
1603
1604.reward-btn i {
1605    margin-right: 5px;
1606}
1607
1608/* 分享按钮组样式 */
1609.share-btns {
1610    display: flex;
1611    align-items: center;
1612    gap: 10px;
1613}
1614
1615.share-title {
1616    color: #666;
1617    font-size: 14px;
1618}
1619
1620.share-item {
1621    width: 36px;
1622    height: 36px;
1623    border-radius: 50%;
1624    background: #f8f9fa;
1625    display: flex;
1626    align-items: center;
1627    justify-content: center;
1628    text-decoration: none;
1629    transition: all 0.3s ease;
1630    position: relative;
1631}
1632
1633.share-item:hover {
1634    background: #e8f4ff;
1635}
1636
1637.share-item i {
1638    font-size: 20px;
1639}
1640
1641.share-item i.icon-weibo-sina {
1642    color: #e6162d;
1643}
1644
1645.share-item i.icon-tubiao215 {
1646    color: #12b7f5;
1647}
1648
1649.share-item i.icon-xiaoxi-comment {
1650    color: #07c160;
1651}
1652
1653/* 二维码弹窗样式 */
1654.qrcode-popup {
1655    position: absolute;
1656    bottom: 100%;
1657    left: 50%;
1658    transform: translateX(-50%);
1659    background: white;
1660    padding: 10px;
1661    border-radius: 4px;
1662    box-shadow: 0 2px 12px rgba(0,0,0,0.1);
1663    display: none;
1664    z-index: 100;
1665    width: 150px;
1666    text-align: center;
1667}
1668
1669.reward-btn:hover .qrcode-popup,
1670.share-item:hover .qrcode-popup {
1671    display: block;
1672}
1673
1674.qrcode-popup img {
1675    width: 100%;
1676    height: auto;
1677}
1678
1679.qrcode-popup p {
1680    margin: 5px 0 0;
1681    font-size: 12px;
1682    color: #666;
1683}
1684
1685/* 字体大小控制样式 */
1686.font-size-control {
1687    display: inline-flex;
1688    align-items: center;
1689    vertical-align: middle;
1690}
1691
1692.font-size-control span {
1693    color: #666;
1694    margin-right: 5px;
1695    font-size: 14px;
1696}
1697
1698.size-btns {
1699    display: inline-flex;
1700    gap: 5px;
1701}
1702
1703.size-btn {
1704    padding: 0 5px;
1705    cursor: pointer;
1706    color: #666;
1707    text-align: center;
1708}
1709
1710.size-btn.active {
1711    color: #409EFF;
1712}
1713
1714/* 文章内容样式 - 使用WangEditor样式,不覆盖编辑器内容 */
1715.text {
1716    transition: all 0.3s ease;
1717}
1718
1719/* 确保编辑器内容样式不被覆盖 */
1720.text.w-e-text-container {
1721    /* 移除可能覆盖编辑器样式的属性,让编辑器样式完全生效 */
1722    font-size: inherit;
1723    line-height: inherit;
1724}
1725
1726/* 字体大小控制时,只影响基础字体大小,不影响编辑器内部元素的样式 */
1727.text.w-e-text-container[style*="font-size"] * {
1728    /* 字体大小控制只影响容器,内部元素保持编辑器样式 */
1729    font-size: inherit;
1730}
1731</style>
1732<script type="text/javascript">
1733    // 点赞功能
1734    function handleLike(articleId) {
1735        fetch('/index/article/like', {
1736            method: 'POST',
1737            headers: {
1738                'Content-Type': 'application/json',
1739            },
1740            body: JSON.stringify({ id: articleId })
1741        })
1742            .then(response => response.json())
1743            .then(data => {
1744                if (data.code === 200) {
1745                    let likeCount = document.querySelector('.like-count');
1746                    likeCount.textContent = parseInt(likeCount.textContent) + 1;
1747                    layer.msg('点赞成功');
1748                } else {
1749                    layer.msg(data.message || '操作失败');
1750                }
1751            })
1752            .catch(error => {
1753                console.error('点赞失败:', error);
1754                layer.msg('操作失败');
1755            });
1756    }
1757
1758    // 分享到微博
1759    function shareToWeibo() {
1760        const url = encodeURIComponent(window.location.href);
1761        const title = encodeURIComponent(document.title);
1762        window.open('https://service.weibo.com/share/share.php?url=' + url + '&title=' + title, '_blank', 'width=700,height=500');
1763    }
1764
1765    // 分享到QQ
1766    function shareToQQ() {
1767        const url = encodeURIComponent(window.location.href);
1768        const title = encodeURIComponent(document.title);
1769        const desc = encodeURIComponent(document.querySelector('meta[name="description"]')?.content || '');
1770        window.open('https://connect.qq.com/widget/shareqq/index.html?url=' + url + '&title=' + title + '&desc=' + desc, '_blank', 'width=700,height=500');
1771    }
1772
1773    // 分享到微信
1774    function shareToWechat() {
1775        const qrcodeElement = document.getElementById('wechatQrcode');
1776        if (!qrcodeElement.hasChildNodes()) {
1777            new QRCode(qrcodeElement, {
1778                text: window.location.href,
1779                width: 128,
1780                height: 128,
1781                colorDark: "#000000",
1782                colorLight: "#ffffff",
1783                correctLevel: QRCode.CorrectLevel.H
1784            });
1785        }
1786    }
1787
1788    // 页面加载完成后执行
1789    window.onload = function () {
1790        // 初始化微信二维码
1791        const qrcodeElement = document.getElementById('wechatQrcode');
1792        if (qrcodeElement && !qrcodeElement.hasChildNodes()) {
1793            new QRCode(qrcodeElement, {
1794                text: window.location.href,
1795                width: 128,
1796                height: 128,
1797                colorDark: "#000000",
1798                colorLight: "#ffffff",
1799                correctLevel: QRCode.CorrectLevel.H
1800            });
1801        }
1802
1803        // 初始化字体大小
1804        initFontSizeControl();
1805    };
1806
1807    // 字体大小控制功能
1808    function initFontSizeControl() {
1809        // 获取文章内容元素
1810        const contentElement = document.querySelector('.text');
1811        const sizeButtons = document.querySelectorAll('.size-btn');
1812
1813        if (!contentElement || sizeButtons.length === 0) {
1814            console.error('找不到文章内容元素或字体大小按钮');
1815            return;
1816        }
1817
1818        // 字体大小比例映射 - 使用后台配置的值
1819        const fontSizeRatios = {
1820            'small': parseFloat("0.875"),  // 默认0.875
1821            'medium': 1,     // 原始大小100%
1822            'large': parseFloat("1.125")   // 默认1.125
1823        };
1824
1825        // 从本地存储中获取用户之前的字体大小设置
1826        const savedSize = localStorage.getItem('articleFontSize') || 'medium';
1827
1828        // 立即应用保存的字体大小
1829        setTimeout(() => {
1830            applyFontSize(contentElement, fontSizeRatios[savedSize]);
1831
1832            // 设置对应按钮为激活状态
1833            updateActiveButton(sizeButtons, savedSize);
1834
1835            console.log('初始化字体大小:', savedSize);
1836        }, 100);
1837
1838        // 为按钮添加点击事件
1839        sizeButtons.forEach(button => {
1840            button.addEventListener('click', function(event) {
1841                event.preventDefault(); // 阻止默认行为
1842                // 获取选中的字体大小
1843                const selectedSize = this.getAttribute('data-size');
1844
1845                // 设置字体大小
1846                applyFontSize(contentElement, fontSizeRatios[selectedSize]);
1847
1848                // 更新按钮状态
1849                updateActiveButton(sizeButtons, selectedSize);
1850
1851                // 保存到本地存储
1852                localStorage.setItem('articleFontSize', selectedSize);
1853
1854                console.log('字体大小已更改为:', selectedSize);
1855            });
1856        });
1857    }
1858
1859    // 应用字体大小 - 修改后的方法使用document.body.style来设置全局字体大小
1860    function applyFontSize(element, scale) {
1861        try {
1862            // 设置直接样式
1863            element.style.fontSize = scale + 'em';
1864
1865            // 直接修改元素内部所有文本节点的大小
1866            const allElements = element.getElementsByTagName('*');
1867            for (let i = 0; i < allElements.length; i++) {
1868                if (allElements[i].style) {
1869                    // 注意:这里不使用em而是使用相对比例
1870                    allElements[i].style.fontSize = scale * 100 + '%';
1871                }
1872            }
1873        } catch (error) {
1874            console.error('设置字体大小时出错:', error);
1875        }
1876    }
1877
1878    // 更新激活按钮
1879    function updateActiveButton(buttons, activeSize) {
1880        buttons.forEach(btn => {
1881            if (btn.getAttribute('data-size') === activeSize) {
1882                btn.classList.add('active');
1883            } else {
1884                btn.classList.remove('active');
1885            }
1886        });
1887    }
1888</script>
1888
1889    <style>
1890    .suspension{position:fixed;z-index:1000;right: 20px; top: 50%;width:70px;height:240px;transform: translateY(-50%);}
1891    .suspension-box{position:relative;float:right;}
1892    .suspension .a{display:block;width:44px;height:44px;margin-bottom:4px;cursor:pointer;outline:none;line-height: 44px;text-align: center;background-color: #ffffff ;}
1893    .suspension .a.active,
1894    .suspension .a:hover{color:#fff;background:#888;}
1895    .suspension .a, .suspension .a i{font-size: 24px;color: #fff;}
1896    .suspension .a-qrcode .i{background-position:-44px 0;}
1897    .suspension .a-cart .i{background-position:-88px 0;}
1898    .suspension .a-top .i{background-position:-132px 0;}
1899    .suspension .a-top{background:#D2D3D6;display:none;}
1900    .suspension .a-top:hover{background:#c0c1c3;}
1901    .suspension .d{display:none;width:223px;background:#fff;position:absolute;right:67px;min-height:90px;border:1px solid #E0E1E5;border-radius:3px;box-shadow:0px 2px 5px 0px rgba(161, 163, 175, 0.11);}
1902    .suspension .d .arrow-left{position:absolute;width:8px;height:12px;background:url(/resource/image/side_bg_arrow.png) no-repeat;right:-8px;top:31px;}
1903    .suspension .d-service{top:0;}
1904    .suspension .d-service-phone{top:34px;}
1905    .suspension .d-qrcode{top:78px;}
1906    .suspension .d .inner-box{padding:8px 22px 12px;}
1907    .suspension .d-service-item{padding:14px 0;}
1908    .suspension .d-service .d-service-item{border-bottom:none;}
1909    .suspension .d-service-item .circle{width:44px;height:44px;border-radius:50%;overflow:hidden;background:#F1F1F3;display:block;float:left;}
1910    .suspension .d-service-item .i-qq{width:44px;height:44px;background:url(/resource/image/side_con_icon03.png) no-repeat center 15px;display:block;transition:all .2s;border-radius:50%;overflow:hidden;}
1911    .suspension .d-service-item:hover .i-qq{background-position:center 3px;}
1912    .suspension .d-service-item .i-tel{width:44px;height:44px;background:url(/resource/image/side_con_icon02.png) no-repeat center center;display:block;}
1913    .suspension .d-service-item h3{float:left;width:112px;line-height:44px;font-size:15px;margin-left:12px;}
1914    .suspension .d-service-item .text{float:left;width:112px;line-height:22px;font-size:15px;margin-left:12px;}
1915    .suspension .d-service-item .text .number{font-family:Arial,"Microsoft Yahei","HanHei SC",PingHei,"PingFang SC","Helvetica Neue",Helvetica,Arial,"Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif;}
1916    .suspension .d-service-intro{padding-top:10px;font-size: 14px;}
1917    .suspension .d-service-intro p{float:left;line-height:27px;font-size:12px;width:50%;white-space:nowrap;color:#888;}
1918    .suspension .d-qrcode{text-align:center;}
1919    .suspension .d-qrcode .inner-box, .suspension .d-ewmcode .inner-box{padding:20px;}
1920    .suspension .d-qrcode p{font-size:14px;color:#93959c;line-height:30px;margin: 0;}
1921    .suspension p{margin: 0;}
1922    .scroll-top{display: none;}
1923    .suspension .d-qrcode img, .suspension .d-ewmcode img{display: inline-block;}
1924    .suspension .d-ewmcode{top: 130px;}
1925    .scroll-to-top{display: none!important;}
1926    .suspension .a{background-color: ;}
1927	.suspension .a.active, .suspension .a:hover{background: ;}
1928</style>
1929<!-- service1 -->
1930<div class="suspension pc_show">
1931    <div class="suspension-box">
1932                <a href="javascript:;" class="a a-service tran3s"><i class="iconfont icon-tubiao215"></i></a>
1933                <a href="javascript:;" class="a a-service-phone tran3s"><i class="iconfont icon-dianhua1"></i></a>
1934        <a href="javascript:;" class="a a-qrcode tran3s"><i class="iconfont icon-kefu"></i></a>
1935        <a href="javascript:;" class="a a-ewmcode a-cart"><i class="iconfont icon-weixin"></i></a>
1936        <a href="javascript:;" class="a a-top tran3s"><i class="iconfont icon-huidingbu1"></i></a>
1937                <div class="d d-service" style="display: none;">
1938            <i class="arrow-left"></i>
1939            <div class="inner-box">
1940                <div class="d-service-item clearfix">
1941                    <a href="http://wpa.qq.com/msgrd?v=3&amp;uin=877998773&amp;site=qq&amp;menu=yes" target="_blank"
1942                       class="clearfix"><span class="circle"><i class="i-qq"></i></span>
1943                        <h3>咨询在线客服</h3>
1944                    </a>
1945                </div>
1946            </div>
1947        </div>
1948                <div class="d d-service-phone" style="display: none;">
1949            <i class="arrow-left"></i>
1950            <div class="inner-box">
1951                <div class="d-service-item clearfix">
1952                    <span class="circle"><i class="i-tel"></i></span>
1953                    <div class="text">
1954                        <p>服务热线</p>
1955                        <p class="red number"><a href="tel:18523692368">18523692368</a></p>
1956                    </div>
1957                </div>
1958            </div>
1959        </div>
1960                <div class="d d-qrcode" style="display: none;">
1961            <i class="arrow-left"></i>
1962            <div class="inner-box">
1963                <div class="qrcode-img"><img src="https://zj.chengmenghudong.com.cn/storage/2/20251101/1762761177945.jpg" width="150" height="150" alt=""></div>
1964                <p>在线客服</p>
1965            </div>
1966        </div>
1967                <div class="d d-ewmcode text-center" style="display: none;">
1968            <i class="arrow-left"></i>
1969            <div class="inner-box">
1970                <div class="qrcode-img"><img src="https://zj.chengmenghudong.com.cn/storage/2/20251101/1762761177945.jpg " width="150" height="150" alt=""></div>
1971                <p>微信公众号</p>
1972            </div>
1973        </div>
1974            </div>
1975</div>
1976<script type="text/javascript">
1977    $(document).ready(function () {
1978                /* ----- 侧边悬浮 ---- */
1979        $(document).on("mouseenter", ".suspension .a", function () {
1980            var _this = $(this);
1981            var s = $(".suspension");
1982            var isService = _this.hasClass("a-service");
1983            var isServicePhone = _this.hasClass("a-service-phone");
1984            var isQrcode = _this.hasClass("a-qrcode");
1985            var isEwmcode = _this.hasClass("a-ewmcode");
1986            if (isService) { s.find(".d-service").show().siblings(".d").hide(); }
1987            if (isServicePhone) { s.find(".d-service-phone").show().siblings(".d").hide(); }
1988            if (isQrcode) { s.find(".d-qrcode").show().siblings(".d").hide(); }
1989            if (isEwmcode) { s.find(".d-ewmcode").show().siblings(".d").hide(); }
1990        });
1991        $(document).on("mouseleave", ".suspension, .suspension .a-top", function () {
1992            $(".suspension").find(".d").hide();
1993        });
1994        $(document).on("mouseenter", ".suspension .a-top", function () {
1995            $(".suspension").find(".d").hide();
1996        });
1997        $(document).on("click", ".suspension .a-top", function () {
1998            $("html,body").animate({ scrollTop: 0 });
1999        });
2000        $(window).scroll(function () {
2001            var st = $(document).scrollTop();
2002            var $top = $(".suspension .a-top");
2003            if (st > 400) {
2004                $top.css({ display: 'block' });
2005            } else {
2006                if ($top.is(":visible")) {
2007                    $top.hide();
2008                }
2009            }
2010        });
2011            });
2012</script>
2012
2013<style>
2014    .main-footer{background:#2d3047;}
2015    .footer-bottom .copyright span.follow{background: url(/resource/picture/beian.png) no-repeat left top;}
2016    .bottom-img{ background:url("") no-repeat center/cover;}
2017    .bottom-img::before{background:;}
2018    .main-footer .footer-bottom .footer-color, .main-footer .footer-bottom .copyright a, .main-footer .footer-bottom .copyright span{color:#ccc;}
2019    .footer-bottom .copyright span.follow::before, .footer-bottom .copyright .more_link::before {background-color: #ccc;}
2020</style>
2021<!-- footer1 -->
2022<footer class="main-footer">
2023    <div class="bottom-img"></div>
2024    <div class="auto-container">
2025        <!-- 版权信息 -->
2026        <div class="footer-bottom">
2027            <div class="clearfix">
2028                <div class="">
2029                    <div class="copyright footer-color">云南诚盟互动科技有限责任公司</div>
2030                    <div class="copyright">
2031                        <a href="https://beian.miit.gov.cn" target="_blank">备案号:滇ICP备2021000460号-6</a>
2032                                                <span class="follow footer-color"><a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=53070202001314" target="_blank">公安机关备案号:滇公安备53070202001314</a></span>
2033                                            </div>
2034                    <div class="copyright footer-color">云南省丽江市古城区西安街道寨鑫路博士后写字楼6层</div> 
2035                </div>
2036            </div>
2037        </div>
2038    </div>
2039</footer>
2040</div>
2041<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
vendor: 1 bytes, line 2041
2041
2042<script type="text/javascript">
2043(function() {
2044    // 检查是否在微信浏览器中
2045    var ua = navigator.userAgent.toLowerCase();
2046    var isWechat = ua.indexOf('micromessenger') !== -1
2047        || ua.indexOf('windowswechat') !== -1
2048        || ua.indexOf('macwechat') !== -1
2049        || ua.indexOf('wxwork') !== -1;
2050
2051    if (!isWechat) {
2052        return; // 非微信浏览器,不初始化微信分享
2053    }
2054
2055    // 获取当前页面URL(去除hash和参数中的code、state等)
2056    var currentUrl = window.location.href.split('#')[0];
2057    // 移除微信授权相关参数
2058    var urlObj = new URL(currentUrl);
2059    urlObj.searchParams.delete('code');
2060    urlObj.searchParams.delete('state');
2061    urlObj.searchParams.delete('trigger_auth');
2062    urlObj.searchParams.delete('refresh_userinfo');
2063    currentUrl = urlObj.toString();
2064
2065    // 获取配置ID(从config表)
2066    var configId = "";
2067    var userId = "2";
2068    var shareTitle = "诚盟软件行业解决方案";
2069    var shareDesc = "诚盟软件行业解决方案
2070
2071";
2072    var shareImgUrl = "https://zj.chengmenghudong.com.cn/storage/2/20221212/4b267f86d702fff8956b9774e853ae06.png";
2073
2074    // 如果没有配置ID,尝试通过user_id获取
2075    if (!configId && userId) {
2076        // 通过AJAX获取config的id
2077        fetch('/index/api/getConfigId?user_id=' + userId)
2078            .then(function(response) { return response.json(); })
2079            .then(function(data) {
2080                if (data.code === 200 && data.data && data.data.config_id) {
2081                    configId = data.data.config_id;
2082                    initWechatShare();
2083                }
2084            })
2085            .catch(function(err) {
2086                console.error('获取配置ID失败:', err);
2087            });
2088    } else if (configId) {
2089        initWechatShare();
2090    }
2091
2092    function initWechatShare() {
2093        if (!configId) {
2094            return;
2095        }
2096
2097        // 获取微信JS-SDK配置
2098        fetch('/index/api/getJssdk?uid=' + configId + '&url=' + encodeURIComponent(currentUrl))
2099            .then(function(response) { return response.json(); })
2100            .then(function(data) {
2101                if (data.code !== 200 || !data.data || !data.data.appId) {
2102                    console.log('微信JS-SDK配置获取失败或未配置微信参数');
2103                    return;
2104                }
2105
2106                var wxConfig = data.data;
2107
2108                // 配置微信JS-SDK
2109                wx.config({
2110                    debug: false,
2111                    appId: wxConfig.appId,
2112                    timestamp: wxConfig.timestamp,
2113                    nonceStr: wxConfig.nonceStr,
2114                    signature: wxConfig.signature,
2115                    jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline']
2116                });
2117
2118                wx.ready(function () {
2119                    // 优先使用后台配置的分享信息
2120                    // 处理空字符串的情况:如果值为空字符串,也视为未设置
2121                    var apiTitle = (wxConfig.share_title && wxConfig.share_title.trim()) ? wxConfig.share_title.trim() : '';
2122                    var apiDesc = (wxConfig.share_desc && wxConfig.share_desc.trim()) ? wxConfig.share_desc.trim() : '';
2123                    var apiImg = (wxConfig.share_img && wxConfig.share_img.trim()) ? wxConfig.share_img.trim() : '';
2124
2125                    var pageTitle = (shareTitle && shareTitle.trim()) ? shareTitle.trim() : '';
2126                    var pageDesc = (shareDesc && shareDesc.trim()) ? shareDesc.trim() : '';
2127                    var pageImg = (shareImgUrl && shareImgUrl.trim()) ? shareImgUrl.trim() : '';
2128
2129                    // 确定最终使用的分享信息:优先API返回的,其次页面配置的
2130                    // 标题:必须使用后台配置,如果都为空则使用站点名称(从document.title提取)
2131                    var finalTitle = apiTitle || pageTitle;
2132                    if (!finalTitle) {
2133                        // 如果都没有,尝试从页面标题中提取(去除"- 装修"等后缀)
2134                        var docTitle = document.title || '';
2135                        finalTitle = docTitle.replace(/\s*[-|]\s*.*$/, '').trim();
2136                    }
2137
2138                    var finalDesc = apiDesc || pageDesc || '';
2139                    var finalImgUrl = apiImg || pageImg || '';
2140
2141                    // 确保图片URL是完整路径
2142                    if (finalImgUrl && finalImgUrl.indexOf('http') !== 0) {
2143                        finalImgUrl = window.location.protocol + '//' + window.location.host + finalImgUrl;
2144                    }
2145
2146                    // 分享给微信好友
2147                    wx.onMenuShareAppMessage({
2148                        title: finalTitle,
2149                        desc: finalDesc,
2150                        link: currentUrl,
2151                        imgUrl: finalImgUrl,
2152                        success: function () {
2153                            console.log('分享给微信好友成功');
2154                        },
2155                        cancel: function () {
2156                            console.log('取消分享给微信好友');
2157                        }
2158                    });
2159
2160                    // 分享到朋友圈(朋友圈只显示标题,不显示描述)
2161                    wx.onMenuShareTimeline({
2162                        title: finalTitle,
2163                        link: currentUrl,
2164                        imgUrl: finalImgUrl,
2165                        success: function () {
2166                            console.log('分享到朋友圈成功');
2167                        },
2168                        cancel: function () {
2169                            console.log('取消分享到朋友圈');
2170                        }
2171                    });
2172                });
2173
2174                wx.error(function(res) {
2175                    console.error('微信JS-SDK配置失败:', res);
2176                });
2177            })
2178            .catch(function(err) {
2179                console.error('获取微信JS-SDK配置失败:', err);
2180            });
2181    }
2182})();
2183</script>
vendor: 1 bytes, line 2183
2183
2184<script src="/resource/js/popper.min.js"></script>
vendor: 1 bytes, line 2184
2184
2185<script src="/resource/js/jquery-ui.js"></script>
vendor: 1 bytes, line 2185
2185
2186<script src="/resource/js/jquery.fancybox.js"></script>
vendor: 1 bytes, line 2186
2186
2187<script src="/resource/js/owl.js"></script>
vendor: 1 bytes, line 2187
2187
2188<script src="/resource/js/validate.js"></script>
vendor: 1 bytes, line 2188
2188
2189<script src="/resource/js/wow.js"></script>
vendor: 1 bytes, line 2189
2189
2190<script src="/resource/js/mixitup.js"></script>
vendor: 1 bytes, line 2190
2190
2191<script src="/resource/js/appear.js"></script>
vendor: 1 bytes, line 2191
2191
2192<script src="/resource/js/script.js"></script>
vendor: 1 bytes, line 2192
2192
2193<script src="/resource/js/jquery.cycle2.js"></script>
vendor: 1 bytes, line 2193
2193
2194<script src="/resource/js/slides.jquery.js"></script>
vendor: 1 bytes, line 2194
2194
2195<script src="/resource/js/main.js"></script>
2195
2196</body>
2197<script src="/resource/js/translate.js"></script>
vendor: 1 bytes, line 2197
2197
2198<script>
2199    $(function () {
2200        // 初始化翻译功能
2201        initTranslate();
2202    });
2203
2204    function translateSelectLanguageFunction(value){
2205        translate.changeLanguage(value);
2206    }
2207
2208    function changeStationTranslationF(obj){
2209        var value = $(obj).val();
2210        translate.changeLanguage(value);
2211    }
2212
2213    // 定义changeLanguage函数用于前台切换语言
2214    function changeLanguage(languageCode) {
2215        // 保存语言偏好到本地存储
2216        try {
2217            localStorage.setItem('preferred_language', languageCode);
2218        } catch (e) {
2219            console.error('保存语言偏好失败:', e);
2220        }
2221
2222        // 调用translate的语言切换函数
2223        translate.changeLanguage(languageCode);
2224
2225        // 更新语言显示
2226        updateLanguageDisplay(languageCode);
2227
2228        // 关闭下拉菜单
2229        var dropdowns = document.getElementsByClassName('dropdown-menu');
2230        Array.from(dropdowns).forEach(function(dropdown) {
2231            dropdown.classList.remove('show');
2232        });
2233    }
2234
2235    // 更新语言显示
2236    function updateLanguageDisplay(languageCode) {
2237        // 获取当前语言对应的名称
2238        fetch('/index/translate/getLanguages')
2239            .then(response => response.json())
2240            .then(data => {
2241                if (data.code === 200 && data.data && data.data.languages) {
2242                    const languages = data.data.languages;
2243                    const language = languages.find(lang => lang.code === languageCode);
2244
2245                    if (language) {
2246                        // 更新当前显示的语言名称
2247                        const currentLanguageElement = document.getElementById('current-language');
2248                        if (currentLanguageElement) {
2249                            currentLanguageElement.textContent = language.name;
2250                        }
2251
2252                        // 更新下拉菜单中的选中状态
2253                        const languageMenu = document.getElementById('language-menu');
2254                        if (languageMenu) {
2255                            // 移除所有项的选中状态
2256                            const items = languageMenu.querySelectorAll('.dropdown-item');
2257                            items.forEach(item => {
2258                                item.classList.remove('active');
2259                            });
2260
2261                            // 为当前选中的语言添加选中状态
2262                            const selectedItem = Array.from(items).find(item => {
2263                                return item.getAttribute('data-lang-code') === languageCode;
2264                            });
2265
2266                            if (selectedItem) {
2267                                selectedItem.classList.add('active');
2268                            }
2269                        }
2270                    }
2271                }
2272            })
2273            .catch(error => {
2274                console.error('获取语言名称失败:', error);
2275            });
2276    }
2277
2278    // 确保nodeuuid对象可用
2279    if (typeof nodeuuid === 'undefined') {
2280        nodeuuid = {
2281            uuid: function(node) {
2282                return node ? (Math.random().toString(36).substring(2, 15)) : '';
2283            }
2284        };
2285    }
2286
2287    // 禁用初始化请求,避免错误
2288    if (translate.init) {
2289        translate.init_execute = '已进行';
2290    }
2291
2292    // 设置请求超时,避免请求挂起
2293    if (translate.request) {
2294        translate.request.timeout = 3000;
2295    }
2296
2297    // 初始化翻译功能
2298    function initTranslate() {
2299        translate.setUseVersion2();
2300        translate.setAutoDiscriminateLocalLanguage(); // 设置用户第一次用时,自动识别其所在国家的语种进行切换
2301        translate.selectLanguageTag.show = false; // 不显示select的选择语言
2302
2303        // 从后台获取默认语言
2304        fetch('/index/translate/getDefaultLanguage')
2305            .then(response => response.json())
2306            .then(data => {
2307                if (data.code === 200 && data.data && data.data.language) {
2308                    // 设置默认语言
2309                    var default_language = data.data.translate_js_code || data.data.language.code;
2310                    if (default_language) {
2311                        translate.language.setDefaultTo(default_language);
2312                    }
2313
2314                    // 使用Edge翻译服务
2315                    translate.service.use('client.edge');
2316
2317                    // 启动监听,用于动态内容的翻译
2318                    translate.listener.start();
2319
2320                    try {
2321                        // 执行翻译
2322                        translate.execute();
2323                    } catch (e) {
2324                        console.log('翻译执行错误: ' + e.message);
2325                        // 如果Edge翻译出错,尝试使用本地翻译
2326                        translate.service.use('local');
2327                        translate.execute();
2328                    }
2329                } else {
2330                    // 使用默认值
2331                    fallbackTranslate();
2332                }
2333            })
2334            .catch(error => {
2335                console.error('获取默认语言失败:', error);
2336                // 使用默认值
2337                fallbackTranslate();
2338            });
2339    }
2340
2341    // 回退到默认翻译设置
2342    function fallbackTranslate() {
2343        var default_language = "chinese_simplified";
2344        translate.language.setDefaultTo(default_language);
2345        translate.service.use('client.edge');
2346        translate.listener.start();
2347
2348        try {
2349            translate.execute();
2350        } catch (e) {
2351            console.log('翻译执行错误: ' + e.message);
2352            translate.service.use('local');
2353            translate.execute();
2354        }
2355    }
2356</script>
2356
2357</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.