Browse Source

feat:新模版

super-yimizi 4 months ago
parent
commit
bc75840fd2
100 changed files with 12575 additions and 3 deletions
  1. 0 3
      .gitignore
  2. 1 0
      addons/.htaccess
  3. 1 0
      addons/adminlogin/.addonrc
  4. 147 0
      addons/adminlogin/Adminlogin.php
  5. 78 0
      addons/adminlogin/config.php
  6. 6 0
      addons/adminlogin/config/cache.php
  7. 7 0
      addons/adminlogin/config/menu.php
  8. 15 0
      addons/adminlogin/controller/Index.php
  9. 10 0
      addons/adminlogin/info.ini
  10. 0 0
      addons/adminlogin/install.sql
  11. 84 0
      addons/adminlogin/library/Service.php
  12. 1 0
      addons/nkeditor/.gitignore
  13. 70 0
      addons/nkeditor/Nkeditor.php
  14. 17 0
      addons/nkeditor/README.md
  15. 170 0
      addons/nkeditor/bootstrap.js
  16. 116 0
      addons/nkeditor/config.php
  17. 145 0
      addons/nkeditor/controller/Index.php
  18. 10 0
      addons/nkeditor/info.ini
  19. 502 0
      addons/nkeditor/licenses/kindeditor.txt
  20. 0 0
      addons/wwh/.addonrc
  21. 108 0
      addons/wwh/Wwh.php
  22. 59 0
      addons/wwh/common.php
  23. 170 0
      addons/wwh/config.html
  24. 184 0
      addons/wwh/config.php
  25. 92 0
      addons/wwh/controller/Archives.php
  26. 100 0
      addons/wwh/controller/Base.php
  27. 349 0
      addons/wwh/controller/Column.php
  28. 388 0
      addons/wwh/controller/Index.php
  29. 96 0
      addons/wwh/controller/Search.php
  30. 541 0
      addons/wwh/data/menu.php
  31. 10 0
      addons/wwh/info.ini
  32. 528 0
      addons/wwh/install.sql
  33. 5 0
      addons/wwh/lang/en.php
  34. 118 0
      addons/wwh/lang/zh-cn.php
  35. 63 0
      addons/wwh/model/Column.php
  36. 9 0
      addons/wwh/testdata.sql
  37. 33 0
      addons/wwh/updateConfig.php
  38. 187 0
      addons/wwh/view/default/detail_about.html
  39. 84 0
      addons/wwh/view/default/detail_cases.html
  40. 144 0
      addons/wwh/view/default/detail_contact.html
  41. 120 0
      addons/wwh/view/default/detail_download.html
  42. 93 0
      addons/wwh/view/default/detail_faq.html
  43. 81 0
      addons/wwh/view/default/detail_honor.html
  44. 297 0
      addons/wwh/view/default/detail_join.html
  45. 84 0
      addons/wwh/view/default/detail_news.html
  46. 68 0
      addons/wwh/view/default/detail_partner.html
  47. 146 0
      addons/wwh/view/default/detail_product.html
  48. 93 0
      addons/wwh/view/default/detail_qa.html
  49. 62 0
      addons/wwh/view/default/detail_service.html
  50. 194 0
      addons/wwh/view/default/footer.html
  51. 86 0
      addons/wwh/view/default/header.html
  52. 284 0
      addons/wwh/view/default/index.html
  53. 87 0
      addons/wwh/view/default/list_cases.html
  54. 82 0
      addons/wwh/view/default/list_news.html
  55. 123 0
      addons/wwh/view/default/list_product.html
  56. 134 0
      addons/wwh/view/default/search.html
  57. 315 0
      addons/wwh/view/materials/detail_about.html
  58. 84 0
      addons/wwh/view/materials/detail_cases.html
  59. 144 0
      addons/wwh/view/materials/detail_contact.html
  60. 120 0
      addons/wwh/view/materials/detail_download.html
  61. 93 0
      addons/wwh/view/materials/detail_faq.html
  62. 78 0
      addons/wwh/view/materials/detail_honor.html
  63. 297 0
      addons/wwh/view/materials/detail_join.html
  64. 273 0
      addons/wwh/view/materials/detail_news.html
  65. 495 0
      addons/wwh/view/materials/detail_partner.html
  66. 146 0
      addons/wwh/view/materials/detail_product.html
  67. 93 0
      addons/wwh/view/materials/detail_qa.html
  68. 62 0
      addons/wwh/view/materials/detail_service.html
  69. 46 0
      addons/wwh/view/materials/footer.html
  70. 29 0
      addons/wwh/view/materials/header.html
  71. 718 0
      addons/wwh/view/materials/index.html
  72. 87 0
      addons/wwh/view/materials/list_cases.html
  73. 82 0
      addons/wwh/view/materials/list_news.html
  74. 123 0
      addons/wwh/view/materials/list_product.html
  75. 134 0
      addons/wwh/view/materials/search.html
  76. BIN
      public/assets/addons/adminlogin/login2/202111221526557.png
  77. BIN
      public/assets/addons/adminlogin/login2/square-bottom.png
  78. BIN
      public/assets/addons/adminlogin/login2/square-left.png
  79. BIN
      public/assets/addons/adminlogin/login2/square-right.png
  80. BIN
      public/assets/addons/adminlogin/login2/square-top.png
  81. BIN
      public/assets/addons/adminlogin/login3/check_icon.png
  82. BIN
      public/assets/addons/adminlogin/login3/leftBottomImg.png
  83. BIN
      public/assets/addons/adminlogin/login3/mainImg.png
  84. BIN
      public/assets/addons/adminlogin/login3/rightTopImg.png
  85. BIN
      public/assets/addons/adminlogin/login3/success_icon.png
  86. BIN
      public/assets/addons/adminlogin/login3/warn_icon.png
  87. BIN
      public/assets/addons/adminlogin/login5/bgg.jpg
  88. BIN
      public/assets/addons/adminlogin/login5/square-bottom.png
  89. BIN
      public/assets/addons/adminlogin/login5/square-left.png
  90. BIN
      public/assets/addons/adminlogin/login5/square-right.png
  91. BIN
      public/assets/addons/adminlogin/login5/square-top.png
  92. 6 0
      public/assets/addons/material/css/animate.min.css
  93. 698 0
      public/assets/addons/material/css/media copy.css
  94. 698 0
      public/assets/addons/material/css/media.css
  95. 84 0
      public/assets/addons/material/css/reset.css
  96. 384 0
      public/assets/addons/material/css/style.css
  97. 12 0
      public/assets/addons/material/css/swiper.min.css
  98. 592 0
      public/assets/addons/material/css/video.css
  99. BIN
      public/assets/addons/material/images/about/1.png
  100. BIN
      public/assets/addons/material/images/about/2.png

+ 0 - 3
.gitignore

@@ -2,9 +2,6 @@
 /thinkphp/
 /thinkphp/
 /vendor/
 /vendor/
 /runtime/*
 /runtime/*
-/addons/*
-/public/assets/libs/
-/public/assets/addons/*
 /public/uploads/*
 /public/uploads/*
 .DS_Store
 .DS_Store
 .idea
 .idea

+ 1 - 0
addons/.htaccess

@@ -0,0 +1 @@
+deny from all

+ 1 - 0
addons/adminlogin/.addonrc

@@ -0,0 +1 @@
+{"files":["application\/admin\/controller\/Adminlogin.php","application\/admin\/lang\/zh-cn\/adminlogin.php","application\/admin\/view\/adminlogin\/login3.html","application\/admin\/view\/adminlogin\/login2.html","application\/admin\/view\/adminlogin\/login5.html","application\/admin\/view\/adminlogin\/login.html","public\/assets\/js\/backend\/adminlogin.js","public\/assets\/addons\/adminlogin\/login3\/leftBottomImg.png","public\/assets\/addons\/adminlogin\/login3\/check_icon.png","public\/assets\/addons\/adminlogin\/login3\/rightTopImg.png","public\/assets\/addons\/adminlogin\/login3\/success_icon.png","public\/assets\/addons\/adminlogin\/login3\/warn_icon.png","public\/assets\/addons\/adminlogin\/login3\/mainImg.png","public\/assets\/addons\/adminlogin\/login2\/square-left.png","public\/assets\/addons\/adminlogin\/login2\/202111221526557.png","public\/assets\/addons\/adminlogin\/login2\/square-bottom.png","public\/assets\/addons\/adminlogin\/login2\/square-top.png","public\/assets\/addons\/adminlogin\/login2\/square-right.png","public\/assets\/addons\/adminlogin\/login5\/square-left.png","public\/assets\/addons\/adminlogin\/login5\/square-bottom.png","public\/assets\/addons\/adminlogin\/login5\/square-top.png","public\/assets\/addons\/adminlogin\/login5\/bgg.jpg","public\/assets\/addons\/adminlogin\/login5\/square-right.png"],"license":"extended","licenseto":"45835","licensekey":"Y3okCtxmwulXFTpI gMCW0FebjCJ5vG4P71R9uFwCF7j0K+wyrjce6ctIJU0=","domains":["thinkphp_fastadmin_materials_official.test"],"licensecodes":[],"validations":["d11f8452d13ac2488349063a919dc2f3"]}

+ 147 - 0
addons/adminlogin/Adminlogin.php

@@ -0,0 +1,147 @@
+<?php
+
+namespace addons\adminlogin;
+
+use addons\adminlogin\library\Service;
+use app\admin\library\Auth;
+use think\Addons;
+use think\Config;
+use think\Hook;
+use think\Loader;
+use think\Request;
+use think\Validate;
+use think\View;
+
+/**
+ * 插件
+ */
+class Adminlogin extends Addons
+{
+
+    public function adminNologin()
+    {
+        $config = $this->getConfig();
+        if ($config['is_origin'])  return true;
+
+        Service::error();
+    }
+
+    static  $isViewFilter = false;
+
+    public function moduleInit() {
+        $config = $this->getConfig();
+
+        // 如果使用原登录路径
+        if ($config['is_origin']) {
+            // 放到第一个执行,只执行一次
+            Hook::add('view_filter', function (&$content) {
+                if (self::$isViewFilter) return true;
+                self::$isViewFilter = true;
+
+                $auth = new Auth();
+                if ($auth->isLogin()) return true;
+
+                $config = $this->getConfig();
+                $request = Request::instance();
+                $module = strtolower($request->module());
+                $controller = strtolower($request->controller());
+                $action = strtolower($request->action());
+
+                if ($module == 'admin' && $controller == 'index' && $action == 'login') {
+                    $templateTypeList = [];
+                    $type = $config['type'];
+
+
+                    if (true == $config['dev']) {
+                        $type = input('type') ? input('type') : $type;
+
+                        $templateTypeList = get_addon_fullconfig('adminlogin')[0]['content'];
+                        $i = 1;
+                        foreach ($templateTypeList as &$item) {
+                            $item = "{$i}、{$item}";
+                            $i++;
+                        }
+                    }
+
+                    $type = $type > 1 ? $type : '';
+                    $path = APP_PATH. 'admin/view/adminlogin/login'.$type.'.html';
+                    $temp = file_get_contents($path);
+
+                    $background = Config::get('fastadmin.login_background');
+                    $background = $background ? (stripos($background, 'http') === 0 ? $background : config('site.cdnurl') . $background) : '';
+
+                    $data = [
+                        'templateTypeList' => $templateTypeList,
+                        'hasCaptcha' => 1,
+                        'background' => $background
+                    ];
+                    $content =  (View::instance())->display($temp, $data);
+                }
+
+                return false;
+            }, true);
+
+
+            return true;
+        }
+
+
+        // 判断是否关闭fast自带登录
+        $addonConfig = get_addon_config('adminlogin');
+        $is = $addonConfig['close_fast'];
+        if (!$is) {
+            return true;
+        }
+        if (request()->module() != 'admin') {
+            return true;
+        }
+
+        $controllername = Loader::parseName(request()->controller());
+        $actionname = strtolower(request()->action());
+        $path = str_replace('.', '/', $controllername) . '/' . $actionname;
+        if ($path == 'index/login') {
+            Service::error();
+        }
+    }
+
+    /**
+     * 插件安装方法
+     * @return bool
+     */
+    public function install()
+    {
+        
+        return true;
+    }
+
+    /**
+     * 插件卸载方法
+     * @return bool
+     */
+    public function uninstall()
+    {
+        
+        return true;
+    }
+
+    /**
+     * 插件启用方法
+     * @return bool
+     */
+    public function enable()
+    {
+        
+        return true;
+    }
+
+    /**
+     * 插件禁用方法
+     * @return bool
+     */
+    public function disable()
+    {
+        
+        return true;
+    }
+
+}

+ 78 - 0
addons/adminlogin/config.php

@@ -0,0 +1,78 @@
+<?php
+
+return [
+    [
+        'name' => 'type',
+        'title' => '登录主题',
+        'type' => 'radio',
+        'content' => [
+            -1 => '默认主题',
+            3 => '数据中心主题',
+            2 => '酷炫科技主题',
+            5 => '商务主题',
+        ],
+        'value' => '3',
+        'rule' => '',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'is_origin',
+        'title' => 'URL保持不变',
+        'type' => 'radio',
+        'content' => [
+            1 => '开启',
+            0 => '关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '开启后最后两个配置将失效',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'dev',
+        'title' => '调试模式',
+        'type' => 'radio',
+        'content' => [
+            1 => '开启',
+            0 => '不开启',
+        ],
+        'value' => '0',
+        'rule' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+        'visible' => '',
+    ],
+    [
+        'name' => 'num',
+        'title' => '免验证码输入次数',
+        'type' => 'number',
+        'content' => [],
+        'value' => '3',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'close_fast',
+        'title' => '关闭自带登录',
+        'type' => 'radio',
+        'content' => [
+            1 => '关闭',
+            0 => '不关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+];

+ 6 - 0
addons/adminlogin/config/cache.php

@@ -0,0 +1,6 @@
+<?php 
+ return array (
+  'table_name' => '',
+  'self_path' => '',
+  'update_data' => '',
+);

+ 7 - 0
addons/adminlogin/config/menu.php

@@ -0,0 +1,7 @@
+<?php
+/**
+ * 菜单配置文件
+ */
+
+return array (
+);

+ 15 - 0
addons/adminlogin/controller/Index.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace addons\adminlogin\controller;
+
+use think\addons\Controller;
+
+class Index extends Controller
+{
+
+    public function index()
+    {
+        $this->error("当前插件暂无前台页面");
+    }
+
+}

+ 10 - 0
addons/adminlogin/info.ini

@@ -0,0 +1,10 @@
+name = adminlogin
+title = 后台登录页面主题
+intro = 后台登录页面样式切换,输验证码流程简化
+author = 风雨
+website = www.sdkj.cc
+version = 1.1.0
+state = 1
+url = /addons/adminlogin
+license = extended
+licenseto = 45835

+ 0 - 0
addons/adminlogin/install.sql


+ 84 - 0
addons/adminlogin/library/Service.php

@@ -0,0 +1,84 @@
+<?php
+
+namespace addons\adminlogin\library;
+
+
+use think\exception\HttpResponseException;
+use think\Request;
+use think\Response;
+use think\response\Redirect;
+use think\Session;
+
+class Service
+{
+
+    public static function getUrl()
+    {
+        $url = \request()->get('url', 'index/index', 'url_clean');
+        // 返回地址不能是 login/logout
+        $arr = [
+            'index/login',
+            'index/logout',
+            'adminlogin/index'
+        ];
+        foreach ($arr as $item) {
+            if ($url == url($item)) {
+                $url = 'index/index';
+                break;
+            }
+        }
+
+        return $url;
+    }
+
+    /**
+     * URL 重定向
+     * @access protected
+     * @param string    $url    跳转的 URL 表达式
+     * @param array|int $params 其它 URL 参数
+     * @param int       $code   http code
+     * @param array     $with   隐式传参
+     * @return void
+     * @throws HttpResponseException
+     */
+    public static function redirect($url='', $params = [], $code = 302, $with = [])
+    {
+        $url = 'adminlogin/index';
+        if (empty($params)) {
+            $goUrl = Session::get('referer');
+            $goUrl = $goUrl ? $goUrl : request()->url();
+            $params['url'] = $goUrl;
+        }
+
+        if (is_integer($params)) {
+            $code   = $params;
+            $params = [];
+        }
+
+        $response = new Redirect($url);
+        $response->code($code)->params($params)->with($with);
+
+        throw new HttpResponseException($response);
+        die;
+    }
+
+
+    /**
+     * 返回错误消息
+     */
+    public static function error()
+    {
+        if (request()->isAjax()) {
+            $data = [
+                'code' => 0,
+                'msg' => __('Please login first'),
+                'data' => [],
+                'time' => time(),
+            ];
+            $response = \think\Response::create($data, 'json', 200);
+            throw new HttpResponseException($response);
+        } else {
+            static::redirect();
+        }
+    }
+}

+ 1 - 0
addons/nkeditor/.gitignore

@@ -0,0 +1 @@
+.addonrc

+ 70 - 0
addons/nkeditor/Nkeditor.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace addons\nkeditor;
+
+use app\common\library\Menu;
+use think\Addons;
+
+/**
+ * 富文本编辑器插件
+ */
+class Nkeditor extends Addons
+{
+
+    /**
+     * 插件安装方法
+     * @return bool
+     */
+    public function install()
+    {
+
+        return true;
+    }
+
+    /**
+     * 插件卸载方法
+     * @return bool
+     */
+    public function uninstall()
+    {
+
+        return true;
+    }
+
+    /**
+     * 插件启用方法
+     * @return bool
+     */
+    public function enable()
+    {
+
+        return true;
+    }
+
+    /**
+     * 插件禁用方法
+     * @return bool
+     */
+    public function disable()
+    {
+
+        return true;
+    }
+
+    /**
+     * @param $params
+     */
+    public function configInit(&$params)
+    {
+        $config = $this->getConfig();
+        $params['nkeditor'] = [
+            'theme'             => $config['theme'],
+            'fullmode'          => !!($config['fullmode'] ?? '1'),
+            'classname'         => $config['classname'] ?? '.editor',
+            'formulapreviewurl' => $config['formulapreviewurl'] ?? '',
+            'baidumapkey'       => $config['baidumapkey'] ?? '',
+            'baidumapcenter'    => $config['baidumapcenter'] ?? ''
+        ];
+    }
+
+}

+ 17 - 0
addons/nkeditor/README.md

@@ -0,0 +1,17 @@
+# NKeditor
+NKedtior是基于 kindeditor 进行二次开发的项目
+kindeditor 是一款优秀的开源在线编辑器。轻量级且功能强大,代码量却不到百度的ueditor编辑器的一半。可惜已经4年没有更新了,由于业务的需求我们在kindeditor的基础上开发了 NKeditor, 主要做了一下工作:
+1. 调整编辑器和弹出 dialog 的样式,美化了UI
+2. 重写图片上传和批量图片上传插件,使用 html5 上传代替了 flash,实现了待上传图片预览,优化用户体验
+3. 修复一些已知的bug,如 ajax 提交无法获取内容等
+4. 新增涂鸦等功能
+
+再次感谢 kindeditor 的开发者,为我们提供了如此优秀的在线编辑器,让我们能在前人的基础上继续贡献自己的微薄之力。
+
+# 开源说明
+本插件基于Nkeditor进行二次开发,修改的核心文件已开源于 https://gitee.com/karson/kindeditor 
+
+# 特别感谢
+[Kindeditor](https://gitee.com/luolonghao/kindeditor)
+[Nkeditor](https://gitee.com/blackfox/kindeditor)
+

+ 170 - 0
addons/nkeditor/bootstrap.js

@@ -0,0 +1,170 @@
+require.config({
+    paths: {
+        'nkeditor': '../addons/nkeditor/js/customplugin',
+        'nkeditor-core': '../addons/nkeditor/nkeditor',
+        'nkeditor-lang': '../addons/nkeditor/lang/zh-CN',
+    },
+    shim: {
+        'nkeditor': {
+            deps: [
+                'nkeditor-core',
+                'nkeditor-lang'
+            ]
+        },
+        'nkeditor-core': {
+            deps: [
+                'css!../addons/nkeditor/themes/black/editor.min.css',
+                'css!../addons/nkeditor/css/common.css'
+            ],
+            exports: 'window.KindEditor'
+        },
+        'nkeditor-lang': {
+            deps: [
+                'nkeditor-core'
+            ]
+        }
+    }
+});
+require(['form'], function (Form) {
+    var _bindevent = Form.events.bindevent;
+    Form.events.bindevent = function (form) {
+        _bindevent.apply(this, [form]);
+        if ($(Config.nkeditor.classname || '.editor', form).length > 0) {
+            require(['nkeditor', 'upload'], function (Nkeditor, Upload) {
+                var getFileFromBase64, uploadFiles;
+                uploadFiles = async function (files) {
+                    var self = this;
+                    for (var i = 0; i < files.length; i++) {
+                        try {
+                            await new Promise((resolve) => {
+                                var url, html, file;
+                                file = files[i];
+                                Upload.api.send(file, function (data) {
+                                    url = Config.nkeditor.fullmode ? Fast.api.cdnurl(data.url, true) : Fast.api.cdnurl(data.url);
+                                    if (file.type.indexOf("image") !== -1) {
+                                        self.exec("insertimage", url);
+                                    } else {
+                                        html = '<a class="ke-insertfile" href="' + url + '" data-ke-src="' + url + '" target="_blank">' + (file.name || url) + '</a>';
+                                        self.exec("inserthtml", html);
+                                    }
+                                    resolve();
+                                }, function () {
+                                    resolve();
+                                });
+                            });
+                        } catch (e) {
+
+                        }
+                    }
+                };
+                getFileFromBase64 = function (data, url) {
+                    var arr = data.split(','), mime = arr[0].match(/:(.*?);/)[1],
+                        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+                    while (n--) {
+                        u8arr[n] = bstr.charCodeAt(n);
+                    }
+                    var filename, suffix;
+                    if (typeof url != 'undefined') {
+                        var urlArr = url.split('.');
+                        filename = url.substr(url.lastIndexOf('/') + 1);
+                        suffix = urlArr.pop();
+                    } else {
+                        filename = Math.random().toString(36).substring(5, 15);
+                    }
+                    if (!suffix) {
+                        suffix = data.substring("data:image/".length, data.indexOf(";base64"));
+                    }
+
+                    var exp = new RegExp("\\." + suffix + "$", "i");
+                    filename = exp.test(filename) ? filename : filename + "." + suffix;
+                    var file = new File([u8arr], filename, {type: mime});
+                    return file;
+                };
+
+                $(Config.nkeditor.classname || '.editor', form).each(function () {
+                    var that = this;
+                    var options = $(this).data("nkeditor-options");
+                    var editor = Nkeditor.create(that, $.extend({}, {
+                        width: '100%',
+                        filterMode: false,
+                        wellFormatMode: false,
+                        allowMediaUpload: true, //是否允许媒体上传
+                        allowFileManager: true,
+                        allowImageUpload: true,
+                        baiduMapKey: Config.nkeditor.baidumapkey || '',
+                        baiduMapCenter: Config.nkeditor.baidumapcenter || '',
+                        fontSizeTable: ['9px', '10px', '12px', '14px', '16px', '18px', '21px', '24px', '32px'],
+                        formulaPreviewUrl: typeof Config.nkeditor != 'undefined' && Config.nkeditor.formulapreviewurl ? Config.nkeditor.formulapreviewurl : "", //数学公式的预览地址
+                        cssPath: Config.site.cdnurl + '/assets/addons/nkeditor/plugins/code/prism.css',
+                        cssData: "body {font-size: 13px}",
+                        fillDescAfterUploadImage: false, //是否在上传后继续添加描述信息
+                        themeType: typeof Config.nkeditor != 'undefined' ? Config.nkeditor.theme : 'black', //编辑器皮肤,这个值从后台获取
+                        fileManagerJson: Fast.api.fixurl("/addons/nkeditor/index/attachment/module/" + Config.modulename),
+                        items: [
+                            'source', 'undo', 'redo', 'preview', 'print', 'template', 'code', 'quote', 'cut', 'copy', 'paste',
+                            'plainpaste', 'justifyleft', 'justifycenter', 'justifyright',
+                            'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
+                            'superscript', 'clearhtml', 'quickformat', 'selectall',
+                            'formatblock', 'fontname', 'fontsize', 'forecolor', 'hilitecolor', 'bold',
+                            'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', 'image', 'multiimage', 'graft',
+                            'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',
+                            'anchor', 'link', 'unlink', 'remoteimage', 'search', 'math', 'about', 'fullscreen'
+                        ],
+                        afterCreate: function () {
+                            var self = this;
+                            //Ctrl+回车提交
+                            Nkeditor.ctrl(document, 13, function () {
+                                self.sync();
+                                $(that).closest("form").submit();
+                            });
+                            Nkeditor.ctrl(self.edit.doc, 13, function () {
+                                self.sync();
+                                $(that).closest("form").submit();
+                            });
+                            //粘贴上传
+                            $("body", self.edit.doc).bind('paste', function (event) {
+                                var originalEvent;
+                                originalEvent = event.originalEvent;
+                                if (originalEvent.clipboardData && originalEvent.clipboardData.files.length > 0) {
+                                    uploadFiles.call(self, originalEvent.clipboardData.files);
+                                    return false;
+                                }
+                            });
+                            //拖拽上传
+                            $("body", self.edit.doc).bind('drop', function (event) {
+                                var originalEvent;
+                                originalEvent = event.originalEvent;
+                                if (originalEvent.dataTransfer && originalEvent.dataTransfer.files.length > 0) {
+                                    uploadFiles.call(self, originalEvent.dataTransfer.files);
+                                    return false;
+                                }
+                            });
+                        },
+                        afterChange: function () {
+                            $(this.srcElement[0]).trigger("change");
+                        },
+                        //自定义处理
+                        beforeUpload: function (callback, file) {
+                            var file = file ? file : $("input.ke-upload-file", this.form).prop('files')[0];
+                            Upload.api.send(file, function (data) {
+                                var data = {code: '000', data: {url: Config.nkeditor.fullmode ? Fast.api.cdnurl(data.url, true) : Fast.api.cdnurl(data.url)}, title: '', width: '', height: '', border: '', align: ''};
+                                callback(data);
+                            });
+                        },
+                        //错误处理 handler
+                        errorMsgHandler: function (message, type) {
+                            try {
+                                Fast.api.msg(message);
+                                console.log(message, type);
+                            } catch (Error) {
+                                alert(message);
+                            }
+                        },
+                        uploadFiles: uploadFiles
+                    }, options || {}));
+                    $(this).data("nkeditor", editor);
+                });
+            });
+        }
+    }
+});

+ 116 - 0
addons/nkeditor/config.php

@@ -0,0 +1,116 @@
+<?php
+
+return [
+    [
+        'name'    => 'classname',
+        'title'   => '渲染文本框元素',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '.editor',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '用于对指定的元素渲染,一般情况下无需修改',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'theme',
+        'title'   => '编辑器主题',
+        'type'    => 'select',
+        'content' => [
+            'default' => '经典主题',
+            'black'   => '雅黑主题',
+            'blue'    => '淡蓝主题',
+            'grey'    => '深灰主题',
+            'primary' => '深绿主题',
+        ],
+        'value'   => 'black',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'attachmentmode_admin',
+        'title'   => '管理员附件选择模式',
+        'type'    => 'select',
+        'content' => [
+            'all'      => '任何管理员均可以查看全部上传的文件',
+            'auth'     => '仅可以查看自己及所有子管理员上传的文件',
+            'personal' => '仅可以查看选择自己上传的文件',
+        ],
+        'value'   => 'all',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'fullmode',
+        'title'   => '是否启用完整URL路径模式',
+        'type'    => 'radio',
+        'content' => [
+            1 => '是',
+            0 => '否',
+        ],
+        'value'   => '1',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'attachmentmode_index',
+        'title'   => '前台附件选择模式',
+        'type'    => 'select',
+        'content' => [
+            'all'      => '任何会员均可以查看全部上传的文件',
+            'personal' => '仅可以查看选择自己上传的文件',
+        ],
+        'value'   => 'personal',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'baidumapkey',
+        'title'   => '百度地图API密钥',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '',
+        'rule'    => '',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'baidumapcenter',
+        'title'   => '百度地图中心点经纬度',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '116.404413,39.903536',
+        'rule'    => '',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => '__tips__',
+        'title'   => '温馨提示',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '百度地图API密钥申请地址:http://lbsyun.baidu.com/apiconsole/key<br>百度地图经纬度坐标获取:https://api.map.baidu.com/lbsapi/getpoint/index.html',
+        'rule'    => '',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+];

+ 145 - 0
addons/nkeditor/controller/Index.php

@@ -0,0 +1,145 @@
+<?php
+
+namespace addons\nkeditor\controller;
+
+use app\common\model\Attachment;
+use GuzzleHttp\Client;
+use Symfony\Component\HttpFoundation\StreamedResponse;
+use think\addons\Controller;
+
+class Index extends Controller
+{
+
+    public function index()
+    {
+        $this->error('该插件暂无前台页面');
+    }
+
+    /**
+     * 文件列表
+     */
+    public function attachment()
+    {
+        $model = new Attachment;
+        $page = $this->request->request('page');
+        $fileType = $this->request->request('fileType');
+        $module = $this->request->param('module');
+        $pagesize = 15;
+        $config = get_addon_config('nkeditor');
+        $type = [];
+        $imageSuffix = ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg'];
+        if ($fileType == 'image') {
+            $type = $imageSuffix;
+        } elseif ($fileType == 'flash') {
+            $type = ['swf', 'flv'];
+        } elseif ($fileType == 'media') {
+            $type = ['swf', 'flv', 'mp4', 'mpeg', 'mp3', 'wav', 'ogg', 'acc', 'webm'];
+        } elseif ($fileType == 'file') {
+
+        }
+        if ($module == 'admin') {
+            $auth = \app\admin\library\Auth::instance();
+            if (!$auth->id) {
+                $this->error('请登录后再操作!');
+            } else {
+                $mode = $config['attachmentmode_admin'];
+            }
+            if ($mode == 'all') {
+
+            } else {
+                if (!$auth->isSuperAdmin()) {
+                    $adminIds = $mode == 'auth' ? $auth->getChildrenAdminIds(true) : [$auth->id];
+                    $model->where('admin_id', 'in', $adminIds);
+                }
+            }
+        } else {
+            if (!$this->auth->id) {
+                $this->error('请登录后再操作!');
+            } else {
+                $mode = $config['attachmentmode_index'];
+            }
+            if ($mode == 'all') {
+
+            } else {
+                $model->where('user_id', 'in', [$this->auth->id]);
+            }
+        }
+
+        if ($type) {
+            $model->where('imagetype', 'in', $type);
+        }
+
+        $list = $model
+            ->order('id', 'desc')
+            ->paginate($pagesize);
+
+        $fullmode = !!($config['fullmode'] ?? '1');
+        $items = $list->items();
+        $data = [];
+        foreach ($items as $k => &$v) {
+            $v['imagetype'] = strtolower($v['imagetype']);
+            $v['fullurl'] = cdnurl($v['url'], true);
+            $thumbUrl = addon_url("nkeditor/index/preview") . "?suffix=" . $v['imagetype'];
+            $data[] = [
+                'width'    => $v['imagewidth'],
+                'height'   => $v['imageheight'],
+                'filename' => $v['filename'],
+                'filesize' => $v['filesize'],
+                'oriURL'   => $fullmode ? $v['fullurl'] : cdnurl($v['url']),
+                'thumbURL' => $v['fullurl'],
+            ];
+        }
+        $result = [
+            'code'     => '000',
+            'count'    => $list->total(),
+            'page'     => $page,
+            'pagesize' => $pagesize,
+            'extra'    => '',
+            'data'     => $data
+        ];
+        return json($result);
+    }
+
+    /**
+     * 下载图片
+     */
+    public function download()
+    {
+        $url = $this->request->request("url");
+        $contentType = '';
+        try {
+            $client = new Client();
+            $response = $client->request('GET', $url, ['stream' => true, 'verify' => false, 'allow_redirects' => ['strict' => true]]);
+
+            $body = $response->getBody();
+            $contentType = $response->getHeader('Content-Type');
+            $contentType = $contentType[0] ?? 'image/png';
+        } catch (\Exception $e) {
+            $this->error("图片下载失败");
+        }
+
+        $contentTypeArr = explode('/', $contentType);
+        if ($contentTypeArr[0] !== 'image') {
+            $this->error("只支持图片文件");
+        }
+
+        $response = new StreamedResponse(function () use ($body) {
+            while (!$body->eof()) {
+                echo $body->read(1024);
+            }
+        });
+        $response->headers->set('Content-Type', $contentType);
+        $response->send();
+        return;
+    }
+
+    public function get_map_config()
+    {
+        $config = get_addon_config('nkeditor');
+        $params = [
+            'baidumapkey' => $config['baidumapkey'] ?? ''
+        ];
+        return json($params);
+    }
+
+}

+ 10 - 0
addons/nkeditor/info.ini

@@ -0,0 +1,10 @@
+name = nkeditor
+title = 简洁强大的富文本编辑器
+intro = 一款简洁强大的富文本编辑器
+author = FastAdmin
+website = https://www.fastadmin.net
+version = 1.2.0
+state = 1
+url = /addons/nkeditor
+license = extended
+licenseto = 45835

+ 502 - 0
addons/nkeditor/licenses/kindeditor.txt

@@ -0,0 +1,502 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!

File diff suppressed because it is too large
+ 0 - 0
addons/wwh/.addonrc


+ 108 - 0
addons/wwh/Wwh.php

@@ -0,0 +1,108 @@
+<?php
+
+namespace addons\wwh;
+
+use app\common\library\Menu;
+use think\Addons;
+use think\Db;
+
+/**
+ * 插件
+ */
+class Wwh extends Addons
+{
+    /**
+     * 插件安装方法
+     * @return bool
+     */
+    public function install()
+    {
+        $menu = include ADDON_PATH . 'wwh' . DS . 'data' . DS . 'menu.php';
+        Menu::create($menu);
+        return true;
+    }
+
+    /**
+     * 插件卸载方法
+     * @return bool
+     */
+    public function uninstall()
+    {
+        Menu::delete("wwh");
+        return true;
+    }
+
+    /**
+     * 插件启用方法
+     * @return bool
+     */
+    public function enable()
+    {
+        Menu::enable("wwh");
+        return true;
+    }
+
+    /**
+     * 插件禁用方法
+     * @return bool
+     */
+    public function disable()
+    {
+        Menu::disable("wwh");
+        return true;
+    }
+
+    /**
+     * 插件升级方法
+     */
+    public function upgrade()
+    {
+        // 更新菜单
+        $menu = include ADDON_PATH . 'wwh' . DS . 'data' . DS . 'menu.php';
+        Menu::upgrade('wwh', $menu);
+
+        // 替换配置项
+        $this->updateConfig();
+
+        return true;
+    }
+
+    /**
+     * 更新插件配置
+     */
+    protected function updateConfig()
+    {
+        $full_config = get_addon_fullconfig('wwh');
+        $config = get_addon_config('wwh');
+        $updateConfig = include ADDON_PATH . 'wwh' . DS . 'updateConfig.php';
+
+        foreach ($updateConfig as $v) {
+            $found = false;
+            // 查找是否已存在同名配置项
+            foreach ($full_config as &$item) {
+                if ($item['name'] == $v['name']) {
+                    // 如果是rewrite或__tips__配置则完全替换
+                    if (in_array($v['name'], ['rewrite', '__tips__'])) {
+                        $item['value'] = $v['value'];
+                    }
+                    $found = true;
+                    break;
+                }
+            }
+            // 如果不存在则添加新配置
+            if (!$found) {
+                array_push($full_config, $v);
+            }
+        }
+
+        set_addon_fullconfig('wwh', $full_config);
+    }
+
+    /**
+     * 应用初始化
+     */
+    public function appInit()
+    {
+        include_once ADDON_PATH . 'wwh' . DS . 'common.php';
+    }
+}

+ 59 - 0
addons/wwh/common.php

@@ -0,0 +1,59 @@
+<?php
+
+// 公共助手函数
+
+if (!function_exists('__lm')) {
+    /**
+     * @param array|object $data 数据源
+     * @param string $name 字段名
+     * @return string
+     */
+    function __lm($data, string $name): string
+    {
+        $allowed_langs = [1, 2];
+        $lang = in_array((int)($_COOKIE['lang'] ?? 1), $allowed_langs) ? (int)$_COOKIE['lang'] : 1;
+
+        $field = ($lang == 2) ? 'e_'.$name : $name;
+        $value = '';
+
+        if (is_array($data)) {
+            $value = $data[$field] ?? $data[$name] ?? '';
+        } elseif (is_object($data)) {
+            $value = $data->$field ?? $data->$name ?? '';
+        }
+
+        return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
+    }
+}
+
+if (!function_exists('__lang')) {
+    /**
+     * @param string $name 语言键
+     * @param string $sign 插件标识
+     * @return string
+     */
+    function __lang(string $name, string $sign = 'wwh'): string
+    {
+        // 参数过滤
+        $sign = preg_replace('/[^a-z0-9_-]/i', '', $sign);
+        $allowed_langs = ['zh-cn', 'en'];
+        $lang = (int)($_COOKIE['lang'] ?? 1) == 2 ? 'en' : 'zh-cn';
+        $lang = in_array($lang, $allowed_langs) ? $lang : 'zh-cn';
+
+        // 路径构建
+        $file = ADDON_PATH . "{$sign}/lang/{$lang}.php";
+        if (!is_file($file)) {
+            $file = ROOT_PATH . "addons/{$sign}/lang/{$lang}.php";
+        }
+
+        // 安全加载
+        if (is_file($file)) {
+            $data = include $file;
+            if (is_array($data)) {
+                return htmlspecialchars($data[$name] ?? $name, ENT_QUOTES, 'UTF-8');
+            }
+        }
+
+        return htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
+    }
+}

+ 170 - 0
addons/wwh/config.html

@@ -0,0 +1,170 @@
+<form id="config-form" class="edit-form form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+    {if $addon.tips && $addon.tips.value}
+    <div class="alert {$addon.tips.extend|default='alert-info-light'}" style="margin-bottom:10px;">
+        {if $addon.tips.title}
+        <b>{$addon.tips.title}</b><br>
+        {/if}
+        {$addon.tips.value}
+    </div>
+    {/if}
+
+    <div class="panel panel-default panel-intro">
+        {if count($groupList)>1}
+        <div class="panel-heading mb-3">
+            <ul class="nav nav-tabs nav-group">
+                <li class="active"><a href="#all" data-toggle="tab">全部</a></li>
+                {foreach name="groupList" id="tab"}
+                    <li><a href="#tab-{$key}" title="{$tab}" data-toggle="tab">{$tab}</a></li>
+                {/foreach}
+            </ul>
+        </div>
+        {/if}
+
+        <div class="panel-body no-padding">
+            <div id="myTabContent" class="tab-content">
+                {foreach name="groupList" id="group" key="groupName"}
+                <div class="tab-pane fade active in" id="tab-{$groupName}">
+
+                    <table class="table table-striped table-config mb-0">
+                        <tbody>
+                        {foreach name="$addon.config" id="item"}
+                        {if ((!isset($item['group']) || $item['group']=='') && $groupName=='other') || (isset($item['group']) && $item['group']==$group)}
+                        <tr data-favisible="{$item.visible|default=''|htmlentities}" data-name="{$item.name|htmlentities}" class="{if $item.visible??''}hidden{/if}">
+                            <td width="15%">
+                                {$item.title}
+                                {if $item.type=='array' && $item.tip}
+                                <a href="javascript:" class="text-info" data-toggle="popover" data-content="{$item.tip}" data-trigger="click" data-title="配置提示" data-html="true"><i class="fa fa-info-circle"></i></a>
+                                {/if}
+                            </td>
+                            <td>
+                                <div class="row">
+                                    <div class="col-sm-8 col-xs-12">
+                                        {switch $item.type}
+                                        {case string}
+                                        <input {$item.extend|htmlentities} type="text" name="row[{$item.name|htmlentities}]" value="{$item.value|htmlentities}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}"/>
+                                        {/case}
+                                        {case password}
+                                        <input {$item.extend|htmlentities} type="password" name="row[{$item.name|htmlentities}]" value="{$item.value|htmlentities}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}"/>
+                                        {/case}
+                                        {case text}
+                                        <textarea {$item.extend|htmlentities} name="row[{$item.name|htmlentities}]" class="form-control" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value|htmlentities}</textarea>
+                                        {/case}
+                                        {case array}
+                                        <dl class="fieldlist" data-name="row[{$item.name|htmlentities}]">
+                                            <dd>
+                                                <ins>{:__('Array key')}</ins>
+                                                <ins>{:__('Array value')}</ins>
+                                            </dd>
+                                            <dd>
+                                                <a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a>
+                                                {if $item.name=='rewrite'}
+                                                <a href="javascript:" class="btn btn-sm btn-warning btn-removerewrite" data-text="/wwh">一键移除URL中的/wwh</a>
+                                                {/if}
+                                            </dd>
+                                            <textarea name="row[{$item.name|htmlentities}]" cols="30" rows="5" class="hide">{$item.value|json_encode|htmlentities}</textarea>
+                                        </dl>
+                                        {/case}
+                                        {case date}
+                                        <input {$item.extend|htmlentities} type="text" name="row[{$item.name|htmlentities}]" value="{$item.value|htmlentities}" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
+                                        {/case}
+                                        {case time}
+                                        <input {$item.extend|htmlentities} type="text" name="row[{$item.name|htmlentities}]" value="{$item.value|htmlentities}" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
+                                        {/case}
+                                        {case datetime}
+                                        <input {$item.extend|htmlentities} type="text" name="row[{$item.name|htmlentities}]" value="{$item.value|htmlentities}" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
+                                        {/case}
+                                        {case number}
+                                        <input {$item.extend|htmlentities} type="number" name="row[{$item.name|htmlentities}]" value="{$item.value|htmlentities}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
+                                        {/case}
+                                        {case checkbox}
+                                        {foreach name="item.content" item="vo"}
+                                        <label for="row[{$item.name|htmlentities}][]-{$key}"><input id="row[{$item.name|htmlentities}][]-{$key}" name="row[{$item.name|htmlentities}][]" type="checkbox" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
+                                        {/foreach}
+                                        <span class="msg-box n-right" for="c-{$item.name|htmlentities}"></span>
+                                        {/case}
+                                        {case radio}
+                                        {foreach name="item.content" item="vo"}
+                                        <label for="row[{$item.name|htmlentities}]-{$key}"><input id="row[{$item.name|htmlentities}]-{$key}" name="row[{$item.name|htmlentities}]" type="radio" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
+                                        {/foreach}
+                                        <span class="msg-box n-right" for="c-{$item.name|htmlentities}"></span>
+                                        {/case}
+                                        {case value="select" break="0"}{/case}
+                                        {case value="selects"}
+                                        <select {$item.extend|htmlentities} name="row[{$item.name|htmlentities}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-tip="{$item.tip}" {$item.type=='selects'?'multiple':''}>
+                                            {foreach name="item.content" item="vo"}
+                                            <option value="{$key}" {in name="key" value="$item.value" }selected{/in}>{$vo}</option>
+                                            {/foreach}
+                                        </select>
+                                        {/case}
+                                        {case value="image" break="0"}{/case}
+                                        {case value="images"}
+                                        <div class="form-inline">
+                                            <input id="c-{$item.name|htmlentities}" class="form-control" size="35" name="row[{$item.name|htmlentities}]" type="text" value="{$item.value|htmlentities}" data-tip="{$item.tip}">
+                                            <span><button type="button" id="plupload-{$item.name|htmlentities}" class="btn btn-danger plupload" data-input-id="c-{$item.name|htmlentities}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}" data-preview-id="p-{$item.name|htmlentities}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
+                                            <span><button type="button" id="fachoose-{$item.name|htmlentities}" class="btn btn-primary fachoose" data-input-id="c-{$item.name|htmlentities}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
+                                            <ul class="row list-inline plupload-preview" id="p-{$item.name|htmlentities}"></ul>
+                                        </div>
+                                        {/case}
+                                        {case value="file" break="0"}{/case}
+                                        {case value="files"}
+                                        <div class="form-inline">
+                                            <input id="c-{$item.name|htmlentities}" class="form-control" size="35" name="row[{$item.name|htmlentities}]" type="text" value="{$item.value|htmlentities}" data-tip="{$item.tip}">
+                                            <span><button type="button" id="plupload-{$item.name|htmlentities}" class="btn btn-danger plupload" data-input-id="c-{$item.name|htmlentities}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
+                                            <span><button type="button" id="fachoose-{$item.name|htmlentities}" class="btn btn-primary fachoose" data-input-id="c-{$item.name|htmlentities}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
+                                        </div>
+                                        {/case}
+                                        {case bool}
+                                        <label for="row[{$item.name|htmlentities}]-yes"><input id="row[{$item.name|htmlentities}]-yes" name="row[{$item.name|htmlentities}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
+                                        <label for="row[{$item.name|htmlentities}]-no"><input id="row[{$item.name|htmlentities}]-no" name="row[{$item.name|htmlentities}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
+                                        {/case}
+                                        {default /}{$item.value}
+                                        {/switch}
+                                    </div>
+                                    <div class="col-sm-4"></div>
+                                </div>
+
+                            </td>
+                        </tr>
+                        {/if}
+                        {/foreach}
+                        </tbody>
+                    </table>
+                </div>
+                {/foreach}
+                <div class="form-group layer-footer">
+                    <label class="control-label col-xs-12 col-sm-2" style="width:15%;"></label>
+                    <div class="col-xs-12 col-sm-8">
+                        <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
+                        <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</form>
+<script>
+    require.callback = function () {
+        var tabevent = function () {
+            $(document).on("click", ".btn-removerewrite", function () {
+                $("dd", $(this).closest("dl.fieldlist")).each(function () {
+
+                });
+                var reg = new RegExp($(this).data("text"));
+                $(this).closest("dl.fieldlist").find("input[name$='[value]']").each(function () {
+                    $(this).val($(this).val().replace(reg, ''));
+                });
+                $(this).closest("dl.fieldlist").find("input[name$='[value]']:first").trigger("change");
+            });
+        }
+
+        define('backend/addon', ['jquery', 'form'], function ($, Form) {
+            var Controller = {
+                config: function () {
+                    Form.api.bindevent($("form[role=form]"));
+                    tabevent();
+                }
+            };
+            return Controller;
+        });
+    }
+</script>

+ 184 - 0
addons/wwh/config.php

@@ -0,0 +1,184 @@
+<?php
+
+return [
+    [
+        'name' => '__tips__',
+        'title' => '温馨提示',
+        'type' => 'string',
+        'content' => [],
+        'value' => '请先至 常规管理->系统配置->邮件配置 中配置邮件服务器并完成发送测试邮件,成功后在配置[留言收件邮箱]和[简历收件邮箱],如为空将导致前台提交页面报错!配置修改后请清除缓存。',
+        'rule' => '',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'switch_lang',
+        'title' => '是否显示英文',
+        'type' => 'radio',
+        'content' => [
+            1 => '显示',
+            0 => '关闭',
+        ],
+        'value' => '0',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'set_lang',
+        'title' => '前台默认语言',
+        'type' => 'radio',
+        'content' => [
+            1 => '简体中文',
+            'English',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'receive',
+        'title' => '留言收件邮箱',
+        'type' => 'string',
+        'content' => [],
+        'value' => '',
+        'rule' => '',
+        'msg' => '',
+        'tip' => '用于接收客户留言邮件推送',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'hr',
+        'title' => '简历收件邮箱',
+        'type' => 'string',
+        'content' => [],
+        'value' => '',
+        'rule' => '',
+        'msg' => '',
+        'tip' => '用于接收应聘简历邮件推送',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'product_show',
+        'title' => '首页推荐产品',
+        'type' => 'radio',
+        'content' => [
+            1 => '显示',
+            0 => '关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '首页推荐产品是否显示',
+        'extend' => '',
+    ],
+    [
+        'name' => 'about_show',
+        'title' => '首页公司简介',
+        'type' => 'radio',
+        'content' => [
+            1 => '显示',
+            0 => '关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '首页公司简介是否显示',
+        'extend' => '',
+    ],
+    [
+        'name' => 'cases_show',
+        'title' => '首页解决方案',
+        'type' => 'radio',
+        'content' => [
+            1 => '显示',
+            0 => '关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '首页解决方案是否显示',
+        'extend' => '',
+    ],
+    [
+        'name' => 'partner_show',
+        'title' => '首页合作伙伴',
+        'type' => 'radio',
+        'content' => [
+            1 => '显示',
+            0 => '关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '首页合作伙伴是否显示',
+        'extend' => '',
+    ],
+    [
+        'name' => 'news_show',
+        'title' => '首页新闻中心',
+        'type' => 'radio',
+        'content' => [
+            1 => '显示',
+            0 => '关闭',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '首页新闻中心是否显示',
+        'extend' => '',
+    ],
+    [
+        'name' => 'classify',
+        'title' => '所属分类',
+        'type' => 'array',
+        'content' => [],
+        'value' => [
+            'product' => '产品中心',
+            'cases' => '解决方案',
+            'service' => '服务中心',
+            'download' => '资料下载',
+            'partner' => '合作伙伴',
+            'news' => '新闻中心',
+            'about' => '关于我们',
+            'none' => '无',
+            'link' => '跳转链接',
+        ],
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'rewrite',
+        'title' => '伪静态',
+        'type' => 'array',
+        'content' => [],
+        'value' => [
+            'index/index' => '/wwh/$',
+            'search/index' => '/wwh/search/$',
+            'column/index' => '/wwh/[:diyname]$',
+            'archives/index' => '/wwh/[:diyname]/[:id]$',
+        ],
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+];

+ 92 - 0
addons/wwh/controller/Archives.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace addons\wwh\controller;
+
+use think\Db;
+use think\Request;
+use addons\wwh\model\Column as ColumnModel;
+
+class Archives extends Base
+{
+    public function index()
+    {
+        $diyname = $this->request->param('diyname/s');
+        $id = $this->request->param('id/d');
+
+        // 验证参数
+        if (empty($diyname) || empty($id)) {
+            $this->error('参数错误!');
+        }
+
+        // 获取当前活动栏目
+        $navCur = Db::name('wwh_column')->where('diyname', $diyname)->find();
+        if (!$navCur) {
+            $this->error('未知栏目!');
+        }
+
+        // 获取栏目详情及关联信息
+        $archives = Db::name('wwh_archives')
+            ->alias('a')
+            ->join('wwh_column c', 'c.id = a.column_id')
+            ->field('a.*,c.parent_id,c.diyname,c.name')
+            ->where('a.status', '1')
+            ->where('a.id', $id)
+            ->find();
+
+        if (!$archives) {
+            $this->error('内容未审核或不存在!');
+        }
+
+        // 获取顶级栏目
+        $topId = ColumnModel::getTopColumn($navCur);
+
+        // 处理轮播图
+        $archives['lunbo'] = !empty($archives['images']) ? explode(',', $archives['images']) : [];
+
+        // 查询相邻文章
+        $queryParams = [
+            'lang' => $this->lang,
+            'status' => '1',
+            'column_id' => $archives['column_id']
+        ];
+
+        $getAdjacent = function($type, $compare, $order) use ($id, $queryParams) {
+            return Db::name('wwh_archives')
+                ->where($queryParams)
+                ->where('classify', $type)
+                ->where('id', $compare, $id)
+                ->order('id', $order)
+                ->limit(1)
+                ->find();
+        };
+
+        // 使用数组存储相邻文章
+        $adjacentArticles = [
+            'cfront' => $getAdjacent('cases', '>', 'asc'),
+            'cafter' => $getAdjacent('cases', '<', 'desc'),
+            'nfront' => $getAdjacent('news', '>', 'asc'),
+            'nafter' => $getAdjacent('news', '<', 'desc')
+        ];
+
+        // 更新浏览数
+        Db::name('wwh_archives')
+            ->where('id', $id)
+            ->update([
+                'views' => Db::raw('views+1'),
+                'updatetime' => time()
+            ]);
+
+        // 处理模板路径
+        $template = preg_replace('/\.html$/', '', $archives['tpl']);
+
+        // 分配所有模板变量
+        $this->view->assign(array_merge([
+            'navCur' => $navCur,
+            'top' => $topId,
+            'archives' => $archives,
+            'template' => $template
+        ], $adjacentArticles));
+
+        return $this->view->fetch('/' . $template);
+    }
+}

+ 100 - 0
addons/wwh/controller/Base.php

@@ -0,0 +1,100 @@
+<?php
+
+namespace addons\wwh\controller;
+
+use think\Db;
+use fast\Tree;
+
+class Base extends \think\addons\Controller
+{
+    /**
+     * 初始化控制器
+     */
+    public function _initialize()
+    {
+        parent::_initialize();
+
+        // 初始化语言设置
+        $this->initLanguage();
+
+        // 加载站点配置
+        $this->loadSiteConfig();
+
+        // 初始化导航数据
+        $this->initNavigation();
+    }
+
+    /**
+     * 初始化语言设置
+     */
+    protected function initLanguage()
+    {
+        $config = get_addon_config('wwh');
+        $this->lang = (int)cookie('lang');
+        $switch_lang = $config['switch_lang'];
+
+        // 设置默认语言
+        if (empty($this->lang) && !empty($config['set_lang'])) {
+            $this->lang = $config['set_lang'];
+            cookie('lang', $this->lang);
+        }
+
+        $this->assign([
+            'switch_lang' => $switch_lang,
+            'lang' => $this->lang
+        ]);
+    }
+
+    /**
+     * 加载站点配置
+     */
+    protected function loadSiteConfig()
+    {
+        $site = Db::name('wwh_config')
+            ->where('lang', $this->lang)
+            ->find();
+
+        if (empty($site)) {
+            $this->error('站点配置数据为空');
+        }
+
+        $this->assign('site', $site);
+
+        // 设置模板路径
+        $this->view->engine->config(
+            'view_path',
+            $this->view->engine->config('view_path') . $site['template'] . DS
+        );
+    }
+
+    /**
+     * 初始化导航数据
+     */
+    protected function initNavigation()
+    {
+        // 获取所有正常状态的栏目
+        $columns = Db::name('wwh_column')
+            ->where('status', 'normal')
+            ->order('weigh desc')
+            ->select();
+
+        // 主导航
+        $navList = array_filter($columns, function($item) {
+            return $item['isnav'] == '1';
+        });
+
+        $navTree = Tree::instance()
+            ->init(collection($navList)->toArray(), 'parent_id')
+            ->getTreeArray(0);
+        $this->assign('nav', $navTree);
+
+        // 资料下载导航
+        $fullTree = Tree::instance()
+            ->init(collection($columns)->toArray(), 'parent_id')
+            ->getTreeArray(0);
+        $this->assign('nav2', $fullTree);
+        // 导航ID
+        $navMap = array_column($columns, null, 'id');
+        $this->assign('navId', $navMap);
+    }
+}

+ 349 - 0
addons/wwh/controller/Column.php

@@ -0,0 +1,349 @@
+<?php
+
+namespace addons\wwh\controller;
+
+use think\Db;
+use think\Request;
+use addons\wwh\model\Column as ColumnModel;
+
+class Column extends Base
+{
+    public function index()
+    {
+        // 初始化并验证参数
+        $diyname = $this->request->param('diyname/s');
+        if (empty($diyname)) {
+            $this->error('参数错误!');
+        }
+
+        // 获取当前栏目信息
+        $navCur = $this->getCurrentColumn($diyname);
+        $this->view->assign([
+            'navCur' => $navCur,
+            'currentId' => $navCur['id'],
+            'secondId' => ColumnModel::getSecondId($navCur['id']) // 获取第二级栏目ID
+        ]);
+
+        // 处理跳转链接
+        if ($navCur['type'] === 'link') {
+            $this->redirect($navCur['outlink']);
+        }
+
+        // 获取顶级栏目
+        $topId = ColumnModel::getTopColumn($navCur);
+        $this->view->assign('top', $topId);
+
+        // 确定模板
+        $template = $this->getTemplate($navCur);
+
+        // 加载各模块数据
+        $this->loadContentList($navCur);       // 内容列表
+        $this->loadDownloadList();             // 资料下载
+        $this->loadServiceData();              // 服务策略
+        $this->loadFaqList();                  // 常见问题
+        $this->loadQualityAssurance();         // 质保查询
+        $this->loadPartnerList();              // 合作伙伴
+        $this->loadAboutData();                // 公司概况
+        $this->loadDevelopmentData();          // 发展历程
+        $this->loadHonorList();                // 荣誉资质
+        $this->loadJoinUsData();               // 加入我们
+        $this->loadContactData();              // 联系我们
+
+        return $this->view->fetch('/' . $template);
+    }
+
+    /**
+     * 获取当前栏目信息
+     */
+    protected function getCurrentColumn($diyname)
+    {
+        $column = Db::name('wwh_column')
+            ->where('diyname', $diyname)
+            ->find();
+
+        if (!$column) {
+            $this->error('未知栏目!');
+        }
+
+
+        return $column;
+    }
+
+    /**
+     * 获取模板名称
+     */
+    protected function getTemplate($navCur)
+    {
+        $template = preg_replace('/\.html$/', '', $navCur['listtpl']);
+        if (!$template) {
+            $template = preg_replace('/\.html$/', '', $navCur['showtpl']);
+        }
+        return $template;
+    }
+
+    /**
+     * 加载内容列表
+     */
+    protected function loadContentList($navCur)
+    {
+        $archivesQuery = Db::name('wwh_archives')
+            ->where('lang', $this->lang)
+            ->where('status', '1')
+            ->order('weigh desc');
+
+        if ($navCur) {
+            $archivesQuery->where('type', $navCur['classify'])
+                ->whereRaw('find_in_set('.$navCur['id'].', `column_ids`)');
+        }
+
+        $list = $archivesQuery->paginate(9, false, ['query' => request()->param()]);
+
+        $this->assign([
+            'archives' => $list,
+            'lbPage' => $list->render()
+        ]);
+    }
+
+    /**
+     * 加载资料下载列表
+     */
+    protected function loadDownloadList()
+    {
+        $downkeys = trim(input('downkeys', ''));
+        $category = trim(input('category', ''));
+
+        $query = Db::name('wwh_archives')
+            ->where('status', '1')
+            ->where('type', 'download')
+            ->where('lang', $this->lang)
+            ->order('weigh desc');
+
+        if ($downkeys !== '' || $category !== '') {
+            if ($downkeys !== '') {
+                $query->where('title', 'like', '%' . $downkeys . '%');
+            }
+            if ($category !== '') {
+                $query->where('column_id', $category);
+            }
+        }
+
+        $list = $query->paginate(8, false, ['query' => request()->param()]);
+
+        $this->assign([
+            'down' => $list,
+            'downPage' => $list->render(),
+            'downType' => [
+                1 => __lang('Manual'),
+                2 => __lang('Color Page'),
+                3 => __lang('Driver'),
+                4 => __lang('Other')
+            ]
+        ]);
+    }
+
+    /**
+     * 加载服务策略数据
+     */
+    protected function loadServiceData()
+    {
+        $service = Db::name('wwh_service')
+            ->where('lang', $this->lang)
+            ->find();
+
+        $this->assign('service', $service ?: []);
+    }
+
+    /**
+     * 加载常见问题列表
+     */
+    protected function loadFaqList()
+    {
+        $faqkeys = trim(input('faqkeys', ''));
+
+        // 构建基础查询
+        $query = Db::name('wwh_faq')
+            ->where('status', '1')
+            ->where('lang', $this->lang);
+
+        // 应用搜索条件
+        if (!empty($faqkeys)) {
+            $query->where('title', 'like', '%'.$faqkeys.'%');
+        }
+
+        // 获取分页列表
+        $list = $query->order('weigh desc')
+            ->paginate(8, false, ['query' => request()->param()]);
+
+        // 获取总数
+        $faqCount = $list->total();
+
+        $this->assign([
+            'faq' => $list,
+            'faqPage' => $list->render(),
+            'faqCount' => $faqCount
+        ]);
+    }
+
+    /**
+     * 加载质保查询数据
+     */
+    protected function loadQualityAssurance()
+    {
+        $qakeys = trim(input('get.qakeys', ''));
+        $isSearchRequest = request()->has('qakeys');
+
+        if ($isSearchRequest) {
+            if (empty($qakeys)) {
+                $this->error('请输入序列号');
+            }
+
+            $qa = Db::name('wwh_qa')
+                ->where('sn', $qakeys)
+                ->where('lang', $this->lang)
+                ->select();
+
+            $this->assign([
+                'qa' => $qa,
+                'showNoQa' => empty($qa)
+            ]);
+        } else {
+            $this->assign('showNoQa', false);
+        }
+    }
+
+    /**
+     * 加载合作伙伴列表
+     */
+    protected function loadPartnerList()
+    {
+        $list = Db::name('wwh_partner')
+            ->where('lang', $this->lang)
+            ->order('weigh desc')
+            ->paginate('24', false, ['query' => request()->param()]);
+
+        $this->assign([
+            'partner' => $list,
+            'partnerPage' => $list->render()
+        ]);
+    }
+
+    /**
+     * 加载公司概况数据
+     */
+    protected function loadAboutData()
+    {
+        $about = Db::name('wwh_about')
+            ->where('lang', $this->lang)
+            ->find();
+
+        $this->assign('about', $about ?: []);
+    }
+
+    /**
+     * 加载发展历程数据
+     */
+    protected function loadDevelopmentData()
+    {
+        $development = Db::name('wwh_development')
+            ->where('lang', $this->lang)
+            ->order('id asc')
+            ->select();
+
+        $this->assign('development', $development ?: []);
+    }
+
+    /**
+     * 加载荣誉资质列表
+     */
+    protected function loadHonorList()
+    {
+        $list = Db::name('wwh_honor')
+            ->where('lang', $this->lang)
+            ->order('weigh desc')
+            ->paginate('9', false, ['query' => request()->param()]);
+
+        $this->assign([
+            'honor' => $list,
+            'honorPage' => $list->render(),
+            'honorType' => [
+                1 => __lang('Qualifications'),
+                2 => __lang('Honor'),
+                3 => __lang('Other')
+            ]
+        ]);
+    }
+
+    /**
+     * 加载加入我们数据
+     */
+    protected function loadJoinUsData()
+    {
+        // 部门和地址列表
+        $deptList = Db::name('wwh_position')
+            ->where('lang', $this->lang)
+            ->distinct(true)
+            ->field('dept')
+            ->select();
+
+        $addrList = Db::name('wwh_position')
+            ->where('lang', $this->lang)
+            ->distinct(true)
+            ->field('addr')
+            ->select();
+
+        $this->assign([
+            'deptList' => $deptList ?: [],
+            'addrList' => $addrList ?: [],
+        ]);
+
+        // 职位查询
+        $jonKeywords = trim(input('jonKeywords', ''));
+        $branch = trim(input('branch', ''));
+        $address = trim(input('address', ''));
+
+        $query = Db::name('wwh_position')
+            ->where('lang', $this->lang)
+            ->order('time desc');
+
+        if (!empty($jonKeywords) || !empty($branch) || !empty($address)) {
+            $conditions = [];
+            if (!empty($jonKeywords)) {
+                $conditions['name'] = ['like', "%{$jonKeywords}%"];
+            }
+            if (!empty($branch)) {
+                $conditions['dept'] = $branch;
+            }
+            if (!empty($address)) {
+                $conditions['addr'] = $address;
+            }
+            $query->where($conditions);
+        }
+
+        $list = $query->paginate(6, false, ['query' => request()->param()]);
+
+        $this->assign([
+            'join' => $list,
+            'joinPage' => $list->render()
+        ]);
+    }
+
+    /**
+     * 加载联系我们数据
+     */
+    protected function loadContactData()
+    {
+        $market = Db::name('wwh_market')
+            ->where('lang', $this->lang)
+            ->order('weigh desc')
+            ->select() ?: [];
+
+        $contact = Db::name('wwh_contact')
+            ->where('lang', $this->lang)
+            ->find();
+
+        $this->assign([
+            'contact' => $contact ?: [],
+            'market' => $market ?: []
+        ]);
+    }
+}

+ 388 - 0
addons/wwh/controller/Index.php

@@ -0,0 +1,388 @@
+<?php
+
+namespace addons\wwh\controller;
+
+use think\Db;
+use think\Request;
+use think\Exception;
+
+class Index extends Base
+{
+    /**
+     * 首页
+     */
+    public function index()
+    {
+        // 获取URL名称
+        $diyname = $this->request->param('diyname/s', '');
+
+        // 获取插件配置
+        $config = get_addon_config("wwh");
+       
+        $assignConfig = [
+            'product_show' => $config['product_show'] ?? 1,
+            'about_show'   => $config['about_show'] ?? 1,
+            'cases_show'   => $config['cases_show'] ?? 1,
+            'partner_show' => $config['partner_show'] ?? 1,
+            'news_show'    => $config['news_show'] ?? 1
+        ];
+
+        // 使用闭包方式批量查询
+        $data = [
+            // 首页Banner
+            'banner' => Db::name('wwh_banner')
+                ->where('lang', $this->lang)
+                ->order('weigh desc')
+                ->limit(6)
+                ->select(),
+
+            // 首页推荐产品
+            'product' => Db::name('wwh_archives')
+                ->where([
+                    'rec_data' => '1',
+                    'status' => '1',
+                    'classify' => 'product',
+                    'lang' => $this->lang
+                ])
+                ->order('weigh desc')
+                ->limit(4)
+                ->select(),
+
+            // 首页推荐产品大图
+            'productBig' => Db::name('wwh_archives')
+                ->where([
+                    'rec_data' => '1,10',
+                    'status' => '1',
+                    'classify' => 'product',
+                    'lang' => $this->lang
+                ])
+                ->order('weigh desc')
+                ->limit(1)
+                ->select(),  // 确保返回数组
+
+            // 首页解决方案
+            'cases' => Db::name('wwh_archives')
+                ->where([
+                    'rec_data' => '1',
+                    'status' => '1',
+                    'classify' => 'cases',
+                    'lang' => $this->lang
+                ])
+                ->order('weigh desc')
+                ->limit(3)
+                ->select(),
+
+            // 首页合作伙伴
+            'partner' => Db::name('wwh_partner')
+                ->where([
+                    'is_rec' => '1',
+                    'lang' => $this->lang
+                    ])
+                ->order('weigh desc')
+                ->limit(18)
+                ->select(),
+
+            // 首页新闻中心
+            'news' => Db::name('wwh_archives')
+                ->where([
+                    'rec_data' => '1',
+                    'status' => '1',
+                    'classify' => 'news',
+                    'lang' => $this->lang
+                ])
+                ->order('weigh desc')
+                ->limit(6)
+                ->select(),
+               
+
+            // 公司简介
+            'home' => Db::name('wwh_home')
+                ->where('lang', $this->lang)
+                ->limit(1)
+                ->find() ?: [],
+
+            // 当前活动栏目
+            'navCur' => Db::name('wwh_column')
+                ->where('diyname', $diyname)
+                ->find() ?: ['classify' => 'none']
+        ];
+      
+        // 批量分配变量到模板
+        $this->assign(array_merge($data, $assignConfig));
+        return $this->view->fetch('/index');
+    }
+
+    /**
+     * 简历提交处理
+     */
+    public function injoin()
+    {
+        // token验证
+        $token = $this->request->post('__token__');
+        if (!$token || !\think\Validate::is($token, "token", ['__token__' => $token])) {
+            return json(['code' => 0, 'msg' => __lang('Token verification failed')]);
+        }
+
+        // 获取并验证验证码
+        $verify2 = $this->request->post('verify2');
+        if (!captcha_check($verify2)) {
+            return json(['code' => 0, 'msg' => __lang('Verification code error, please try again')]);
+        }
+
+        // 获取并处理输入数据
+        $realname2 = htmlspecialchars(trim($this->request->post('realname2')), ENT_QUOTES);
+        $tel2 = htmlspecialchars(trim($this->request->post('tel2')), ENT_QUOTES);
+        $gangwei2 = htmlspecialchars(trim($this->request->post('gangwei2')), ENT_QUOTES);
+
+        // 验证必填字段
+        if (empty($realname2) || empty($tel2) || empty($gangwei2)) {
+            return json(['code' => 0, 'msg' => __lang('Please fill in all required fields')]);
+        }
+
+        // 验证姓名格式
+        if (!preg_match('/^[\p{L}\s]{2,50}$/u', $realname2)) {
+            return json(['code' => 0, 'msg' => __lang('Please provide a valid name')]);
+        }
+
+        // 验证手机号格式
+        if (!preg_match('/^1[3-9]\d{9}$/', $tel2)) {
+            return json(['code' => 0, 'msg' => __lang('Please provide a valid phone number')]);
+        }
+
+        // 获取上传文件
+        $file = $this->request->file('url');
+        if (!$file) {
+            return json(['code' => 0, 'msg' => __lang('Please upload your resume')]);
+        }
+
+        // 文件验证规则(包含MIME类型)
+        $validate = [
+            'size' => 10000000, // 10MB
+            'ext'  => 'doc,docx,xls,xlsx,ppt,pptx,pdf',
+            'type' => 'application/msword,' .
+                'application/vnd.openxmlformats-officedocument.wordprocessingml.document,' .
+                'application/vnd.ms-excel,' .
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,' .
+                'application/vnd.ms-powerpoint,' .
+                'application/vnd.openxmlformats-officedocument.presentationml.presentation,' .
+                'application/pdf'
+        ];
+
+        try {
+            // 开启事务
+            Db::startTrans();
+
+            // 创建上传目录
+            $uploadPath = ROOT_PATH . 'public/uploads/wwh/resume/';
+            if (!is_dir($uploadPath)) {
+                mkdir($uploadPath, 0755, true);
+            }
+
+            // 安全上传文件
+            $info = $file->validate($validate)->rule('uniqid')->move($uploadPath);
+            if (!$info) {
+                throw new Exception($file->getError());
+            }
+
+            // 获取文件MIME类型进行二次验证
+            $filePath = $uploadPath . $info->getSaveName();
+            $finfo = finfo_open(FILEINFO_MIME_TYPE);
+            $mime = finfo_file($finfo, $filePath);
+            finfo_close($finfo);
+
+            $allowedMimes = [
+                'application/msword',
+                'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+                'application/vnd.ms-excel',
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+                'application/vnd.ms-powerpoint',
+                'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+                'application/pdf'
+            ];
+
+            if (!in_array($mime, $allowedMimes)) {
+                @unlink($filePath);
+                throw new Exception(__lang('Upload file format not allowed or file too large'));
+            }
+
+            $url = '/uploads/wwh/resume/' . str_replace("\\", "/", $info->getSaveName());
+            $fullUrl = $this->request->domain() . $url;
+
+            // 准备数据
+            $data = [
+                'realname2' => $realname2,
+                'tel2' => $tel2,
+                'gangwei2' => $gangwei2,
+                'url' => $url,
+                'lang' => $this->lang,
+                'createtime' => time()
+            ];
+
+            // 构建邮件内容
+            $html = "<p><strong>".__lang('Full Name').":</strong>{$realname2}</p>
+               <p><strong>".__lang('Contact Number').":</strong>{$tel2}</p>
+               <p><strong>".__lang('Position').":</strong>{$gangwei2}</p>
+               <p><strong>".__lang('Resume').":</strong><a href=\"{$fullUrl}\">{$fullUrl}</a></p>";
+
+            // 获取配置
+            $config = get_addon_config("wwh");
+            if (empty($config['hr'])) {
+                throw new Exception(__lang('Resume recipient email not configured'));
+            }
+
+            // 发送邮件
+            $emailResult = \app\common\library\Email::instance()
+                ->to($config['hr'])
+                ->subject(__lang('Job Application Resume'))
+                ->message($html)
+                ->send();
+
+            if (!$emailResult) {
+                throw new Exception(__lang('Failed to send email, Please check the backend email configuration'));
+            }
+
+            // 保存到数据库
+            $dbResult = Db::name('wwh_injoin')->insert($data);
+            if (!$dbResult) {
+                throw new Exception(__lang('Database operation failed'));
+            }
+
+            // 提交事务
+            Db::commit();
+
+            return json(['code' => 1, 'msg' => __lang('Submitted Successfully')]);
+
+        } catch (Exception $e) {
+            // 回滚事务
+            Db::rollback();
+
+            // 删除已上传的文件
+            if (isset($url) && file_exists(ROOT_PATH . 'public' . $url)) {
+                @unlink(ROOT_PATH . 'public' . $url);
+            }
+
+            return json(['code' => 0, 'msg' => $e->getMessage()]);
+        }
+    }
+
+    /**
+     * 客户留言
+     */
+    public function message()
+    {
+        // token验证
+        $token = $this->request->post('__token__');
+        if (!$token || !\think\Validate::is($token, "token", ['__token__' => $token])) {
+            return json(['code' => 0, 'msg' => __lang('Token verification failed')]);
+        }
+
+        // 验证码检查
+        // $verify = input("verify");
+        // if (!captcha_check($verify)) {
+        //     session('captcha', null);
+        //     return json(['code' => 0, 'msg' => __lang('Verification code error, please try again')]);
+        // }
+        // session('captcha', null);
+
+        // 数据收集与过滤
+        $data = [
+            'realname'   => htmlspecialchars(trim(input('realname', ''))),
+            'tel'        => htmlspecialchars(trim(input('tel', ''))),
+            'email'      => htmlspecialchars(trim(input('email', ''))),
+            'content'    => htmlspecialchars(trim(input('content', ''))),
+            'lang'       => $this->lang,
+            'createtime' => time()
+        ];
+
+        // 数据验证
+        $validate = new \think\Validate([
+            'realname' => 'require|max:50',
+            'tel' => 'require|regex:/^1[3-9]\d{9}$/',
+            'email' => 'require|email',
+            'content' => 'require|max:1000'
+        ]);
+
+        if (!$validate->check($data)) {
+            return json(['code' => 0, 'msg' => $validate->getError()]);
+        }
+
+        // 构建邮件内容
+        // $html = "<p><strong>".__lang('Full Name').":</strong>".htmlspecialchars($data['realname'])."</p>
+        //    <p><strong>".__lang('Email').":</strong>".htmlspecialchars($data['email'])."</p>
+        //    <p><strong>".__lang('Phone').":</strong>".htmlspecialchars($data['tel'])."</p>
+        //    <p><strong>".__lang('Content').":</strong>".htmlspecialchars($data['content'])."</p>";
+
+        // 获取配置
+        // $config = get_addon_config("wwh");
+        // $receive = $config['receive'] ?? '';
+
+        // if (empty($receive)) {
+        //     return json(['code' => 0, 'msg' => __lang('Message recipient email not configured')]);
+        // }
+
+        // 发送邮件
+        // $emailResult = \app\common\library\Email::instance()
+        //     ->to($receive)
+        //     ->subject(__lang('Customer message'))
+        //     ->message($html)
+        //     ->send();
+        $db = Db::name('wwh_message')->insert($data);
+        return json(['code' => 1, 'msg' => __lang('Submitted Successfully')]);
+        // 数据库操作
+        // if ($emailResult) {
+        //     $db = Db::name('wwh_message')->insert($data);
+        //     return json(['code' => 1, 'msg' => __lang('Submitted Successfully')]);
+        // }
+
+        return json(['code' => 0, 'msg' => __lang('Failed to send email, Please check the backend email configuration')]);
+    }
+
+    /**
+     * 验证码
+     */
+    public function verify()
+    {
+        $captcha = new \think\captcha\Captcha();
+        //验证码过期时间(s)
+        $captcha->expire =1800;
+        //验证码位数
+        $captcha->length = 4;
+        //验证成功后是否重置
+        $captcha->reset = true;
+        return $captcha->entry();
+    }
+
+    /**
+     * 设置语言
+     */
+    public function switchLang()
+    {
+        $url = (string)input('param.url');
+        $lang = (int)input('param.lang');
+
+        // 验证 lang 参数
+        if (!$lang) {
+            $this->error('lang 不能为空');
+        }
+
+        // 验证 URL 参数
+        if (empty($url)) {
+            $this->error('URL 参数不能为空');
+        }
+
+        try {
+            $decodedUrl = base64_decode($url, true);
+            if (!$decodedUrl) {
+                $this->error('URL 解码失败,请稍后重试');
+            }
+        } catch (\Exception $e) {
+            $this->error('URL 解码失败,请稍后重试');
+        }
+
+        // 设置语言 cookie
+        cookie('lang', $lang, 3600 * 24 * 30);
+
+        // 重定向到目标 URL
+        $this->redirect($decodedUrl);
+    }
+}

+ 96 - 0
addons/wwh/controller/Search.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace addons\wwh\controller;
+
+use think\Db;
+use think\Request;
+
+class Search extends Base
+{
+    public function index()
+    {
+        // 获取请求参数
+        $keywords = input('keywords', '');
+        $type = input('type', '');
+
+        // 分配基础变量到模板
+        $this->assign([
+            'keywords' => $keywords,
+            'type' => $type
+        ]);
+
+        // 类型映射
+        $typeArr = [
+            1 => 'product',
+            2 => 'cases',
+            3 => 'news'
+        ];
+        $currentType = $typeArr[$type] ?? '';
+
+        // 获取分页列表数据
+        $query = Db::name('wwh_archives')
+            ->where([
+                'status' => '1',
+                'lang' => $this->lang
+            ]);
+
+        if ($currentType) {
+            $query->where('type', $currentType);
+        }
+
+        if ($keywords) {
+            $query->where('title', 'like', "%{$keywords}%");
+        }
+
+        $list = $query->paginate(9, false, ['query' => request()->param()]);
+
+        // 获取各类别统计数
+        $countQuery = Db::name('wwh_archives')
+            ->where([
+                'status' => '1',
+                'lang' => $this->lang
+            ]);
+
+        if ($keywords) {
+            $countQuery->where('title', 'like', "%{$keywords}%");
+        }
+
+        $result = $countQuery
+            ->field(['type', 'COUNT(*) AS total'])
+            ->group('type')
+            ->select();
+
+        // 初始化统计数组
+        $countData = array_fill_keys(['product', 'cases', 'news'], 0);
+
+        // 填充统计结果
+        foreach ($result as $item) {
+            if (isset($countData[$item['type']])) {
+                $countData[$item['type']] = $item['total'];
+            }
+        }
+
+        // 确定当前导航栏目
+        $navCur = ['classify' => $currentType ?: 'none'];
+
+        // 分配变量到模板
+        $this->assign([
+            'list' => $list,
+            'searchPage' => $list->render(),
+            'productCount' => $countData['product'],
+            'casesCount' => $countData['cases'],
+            'newsCount' => $countData['news'],
+            'navCur' => $navCur
+        ]);
+
+        // AJAX请求返回JSON
+        if (Request::instance()->isAjax()) {
+            return json([
+                'list' => $list,
+                'searchPage' => $list->render()
+            ]);
+        }
+
+        return $this->view->fetch('/search');
+    }
+}

+ 541 - 0
addons/wwh/data/menu.php

@@ -0,0 +1,541 @@
+<?php
+
+$menu = [
+    [
+        "name" => "wwh",
+        "title" => "企业官网",
+        'sublist' => [
+            [
+                "name" => "wwh/config",
+                "title" => "站点配置",
+                'icon' => 'fa fa-gears',
+                "ismenu" => 1,
+                'weigh' => '100',
+                "sublist" => [
+                    [
+                        "name" => "wwh/config/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/config/ConfigCN",
+                        "title" => "中文站点设置修改"
+                    ],
+                    [
+                        "name" => "wwh/config/ConfigEN",
+                        "title" => "英文站点设置修改"
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/shouye",
+                "title" => "首页",
+                'icon' => 'fa fa-home',
+                "ismenu" => 1,
+                'weigh' => '90',
+                "sublist" => [
+                    [
+                        "name" => "wwh/home",
+                        "title" => "首页配置",
+                        'icon' => 'fa fa-cog',
+                        "ismenu" => 1,
+                        'weigh' => '10',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/home/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/home/HomeCN",
+                                "title" => "中文首页配置修改"
+                            ],
+                            [
+                                "name" => "wwh/home/HomeEN",
+                                "title" => "英文首页配置修改"
+                            ]
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/banner",
+                        "title" => "Banner图",
+                        'icon' => 'fa fa-photo',
+                        "ismenu" => 1,
+                        'weigh' => '9',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/banner/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/banner/add",
+                                "title" => "添加"
+                            ],
+                            [
+                                "name" => "wwh/banner/edit",
+                                "title" => "编辑"
+                            ],
+                            [
+                                "name" => "wwh/banner/del",
+                                "title" => "删除"
+                            ],
+                            [
+                                "name" => "wwh/banner/multi",
+                                "title" => "批量更新"
+                            ]
+                        ]
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/column",
+                "title" => "栏目管理",
+                'icon' => 'fa fa-list',
+                "ismenu" => 1,
+                'weigh' => '80',
+                "sublist" => [
+                    [
+                        "name" => "wwh/column/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/column/add",
+                        "title" => "添加"
+                    ],
+                    [
+                        "name" => "wwh/column/edit",
+                        "title" => "编辑"
+                    ],
+                    [
+                        "name" => "wwh/column/del",
+                        "title" => "删除"
+                    ],
+                    [
+                        "name" => "wwh/column/multi",
+                        "title" => "批量更新"
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/template",
+                "title" => "模板管理",
+                "ismenu" => 0,
+                'weigh' => '79',
+                "sublist" => [
+                    [
+                        "name" => "wwh/template/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/template/add",
+                        "title" => "添加"
+                    ],
+                    [
+                        "name" => "wwh/template/edit",
+                        "title" => "编辑"
+                    ],
+                    [
+                        "name" => "wwh/template/del",
+                        "title" => "删除"
+                    ],
+                    [
+                        "name" => "wwh/template/multi",
+                        "title" => "批量更新"
+                    ],
+                    [
+                        "name" => "wwh/template/get_template_list",
+                        "title" => "获取模板列表"
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/archives",
+                "title" => "内容管理",
+                'icon' => 'fa fa-file-text-o',
+                "ismenu" => 1,
+                'weigh' => '70',
+                "sublist" => [
+                    [
+                        "name" => "wwh/archives/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/archives/add",
+                        "title" => "添加"
+                    ],
+                    [
+                        "name" => "wwh/archives/edit",
+                        "title" => "编辑"
+                    ],
+                    [
+                        "name" => "wwh/archives/del",
+                        "title" => "删除"
+                    ],
+                    [
+                        "name" => "wwh/archives/multi",
+                        "title" => "批量更新"
+                    ],
+                    [
+                        "name" => "wwh/archives/audit",
+                        "title" => "审核"
+                    ],
+                    [
+                        "name" => "wwh/archives/faudit",
+                        "title" => "反审核"
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/fuwu",
+                "title" => "服务中心",
+                'icon' => 'fa fa-volume-control-phone',
+                "ismenu" => 1,
+                'weigh' => '60',
+                "sublist" => [
+                    [
+                        "name" => "wwh/service",
+                        "title" => "服务策略",
+                        'icon' => 'fa fa-street-view',
+                        "ismenu" => 1,
+                        'weigh' => '10',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/service/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/service/ServiceCN",
+                                "title" => "中文服务策略修改"
+                            ],
+                            [
+                                "name" => "wwh/service/ServiceEN",
+                                "title" => "英文服务策略修改"
+                            ]
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/faq",
+                        "title" => "常见问题",
+                        'icon' => 'fa fa-question',
+                        "ismenu" => 1,
+                        'weigh' => '8',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/faq/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/faq/add",
+                                "title" => "添加"
+                            ],
+                            [
+                                "name" => "wwh/faq/edit",
+                                "title" => "编辑"
+                            ],
+                            [
+                                "name" => "wwh/faq/del",
+                                "title" => "删除"
+                            ],
+                            [
+                                "name" => "wwh/faq/multi",
+                                "title" => "批量更新"
+                            ],
+                            [
+                                "name" => "wwh/faq/audit",
+                                "title" => "审核"
+                            ],
+                            [
+                                "name" => "wwh/faq/faudit",
+                                "title" => "反审核"
+                            ]
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/qa",
+                        "title" => "质保查询",
+                        'icon' => 'fa fa-files-o',
+                        "ismenu" => 1,
+                        'weigh' => '7',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/qa/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/qa/add",
+                                "title" => "添加"
+                            ],
+                            [
+                                "name" => "wwh/qa/edit",
+                                "title" => "编辑"
+                            ],
+                            [
+                                "name" => "wwh/qa/del",
+                                "title" => "删除"
+                            ],
+                            [
+                                "name" => "wwh/qa/multi",
+                                "title" => "批量更新"
+                            ]
+                        ]
+                    ],
+                ]
+            ],
+            [
+                "name" => "wwh/partner",
+                "title" => "合作伙伴",
+                'icon' => 'fa fa-handshake-o',
+                "ismenu" => 1,
+                'weigh' => '50',
+                "sublist" => [
+                    [
+                        "name" => "wwh/partner/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/partner/add",
+                        "title" => "添加"
+                    ],
+                    [
+                        "name" => "wwh/partner/edit",
+                        "title" => "编辑"
+                    ],
+                    [
+                        "name" => "wwh/partner/del",
+                        "title" => "删除"
+                    ],
+                    [
+                        "name" => "wwh/partner/multi",
+                        "title" => "批量更新"
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/guanyu",
+                "title" => "关于我们",
+                'icon' => 'fa fa-user-circle',
+                "ismenu" => 1,
+                'weigh' => '30',
+                "sublist" => [
+                    [
+                        "name" => "wwh/about",
+                        "title" => "公司概况",
+                        'icon' => 'fa fa-group',
+                        "ismenu" => 1,
+                        'weigh' => '10',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/about/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/about/AboutCN",
+                                "title" => "中文公司概况修改"
+                            ],
+                            [
+                                "name" => "wwh/about/AboutEN",
+                                "title" => "英文公司概况修改"
+                            ]
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/development",
+                        "title" => "发展历程",
+                        'icon' => 'fa fa-calendar-check-o',
+                        "ismenu" => 1,
+                        'weigh' => '10',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/development/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/development/add",
+                                "title" => "添加"
+                            ],
+                            [
+                                "name" => "wwh/development/edit",
+                                "title" => "编辑"
+                            ],
+                            [
+                                "name" => "wwh/development/del",
+                                "title" => "删除"
+                            ],
+                            [
+                                "name" => "wwh/development/multi",
+                                "title" => "批量更新"
+                            ]
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/honor",
+                        "title" => "荣誉资质",
+                        'icon' => 'fa fa-picture-o',
+                        "ismenu" => 1,
+                        'weigh' => '9',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/honor/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/honor/add",
+                                "title" => "添加"
+                            ],
+                            [
+                                "name" => "wwh/honor/edit",
+                                "title" => "编辑"
+                            ],
+                            [
+                                "name" => "wwh/honor/del",
+                                "title" => "删除"
+                            ],
+                            [
+                                "name" => "wwh/honor/multi",
+                                "title" => "批量更新"
+                            ]
+
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/position",
+                        "title" => "加入我们",
+                        'icon' => 'fa fa-handshake-o',
+                        "ismenu" => 1,
+                        'weigh' => '8',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/position/index",
+                                "title" => "查看"
+                            ],
+                            [
+                                "name" => "wwh/position/add",
+                                "title" => "添加"
+                            ],
+                            [
+                                "name" => "wwh/position/edit",
+                                "title" => "编辑"
+                            ],
+                            [
+                                "name" => "wwh/position/del",
+                                "title" => "删除"
+                            ],
+                            [
+                                "name" => "wwh/position/multi",
+                                "title" => "批量更新"
+                            ]
+                        ]
+                    ],
+                    [
+                        "name" => "wwh/lianxi",
+                        "title" => "联系我们",
+                        'icon' => 'fa fa-smile-o',
+                        "ismenu" => 1,
+                        'weigh' => '7',
+                        "sublist" => [
+                            [
+                                "name" => "wwh/contact",
+                                "title" => "联系信息",
+                                'icon' => 'fa fa-whatsapp',
+                                "ismenu" => 1,
+                                'weigh' => '7',
+                                "sublist" => [
+                                    [
+                                        "name" => "wwh/contact/index",
+                                        "title" => "查看"
+                                    ],
+                                    [
+                                        "name" => "wwh/contact/ContactCN",
+                                        "title" => "中文联系信息修改"
+                                    ],
+                                    [
+                                        "name" => "wwh/contact/ContactEN",
+                                        "title" => "英文联系信息修改"
+                                    ]
+                                ]
+                            ],
+                            [
+                                "name" => "wwh/market",
+                                "title" => "营销网络",
+                                'icon' => 'fa fa-map-marker',
+                                "ismenu" => 1,
+                                'weigh' => '6',
+                                "sublist" => [
+                                    [
+                                        "name" => "wwh/market/index",
+                                        "title" => "查看"
+                                    ],
+                                    [
+                                        "name" => "wwh/market/add",
+                                        "title" => "添加"
+                                    ],
+                                    [
+                                        "name" => "wwh/market/edit",
+                                        "title" => "编辑"
+                                    ],
+                                    [
+                                        "name" => "wwh/market/del",
+                                        "title" => "删除"
+                                    ],
+                                    [
+                                        "name" => "wwh/market/multi",
+                                        "title" => "批量更新"
+                                    ]
+                                ]
+                            ]
+                        ]
+                    ],
+                ]
+            ],
+            [
+                "name" => "wwh/injoin",
+                "title" => "应聘简历",
+                'icon' => 'fa fa-file-text-o',
+                "ismenu" => 1,
+                'weigh' => '20',
+                "sublist" => [
+                    [
+                        "name" => "wwh/injoin/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/injoin/edit",
+                        "title" => "编辑"
+                    ],
+                    [
+                        "name" => "wwh/injoin/del",
+                        "title" => "删除"
+                    ],
+                    [
+                        "name" => "wwh/injoin/multi",
+                        "title" => "批量更新"
+                    ]
+                ]
+            ],
+            [
+                "name" => "wwh/message",
+                "title" => "客户留言",
+                'icon' => 'fa fa-commenting-o',
+                "ismenu" => 1,
+                'weigh' => '10',
+                "sublist" => [
+                    [
+                        "name" => "wwh/message/index",
+                        "title" => "查看"
+                    ],
+                    [
+                        "name" => "wwh/message/edit",
+                        "title" => "编辑"
+                    ],
+                    [
+                        "name" => "wwh/message/del",
+                        "title" => "删除"
+                    ],
+                    [
+                        "name" => "wwh/message/multi",
+                        "title" => "批量更新"
+                    ]
+                ]
+            ]
+        ]
+    ]
+];
+return $menu;

+ 10 - 0
addons/wwh/info.ini

@@ -0,0 +1,10 @@
+name = wwh
+title = 企业官网(移动端自适应模板)
+intro = 含产品、新闻、HR等多个模块,支持作为网站首页
+author = wwh
+website = https://www.fastadmin.net
+version = 2.3.1
+state = 1
+url = /addons/wwh
+license = extended
+licenseto = 45835

+ 528 - 0
addons/wwh/install.sql

@@ -0,0 +1,528 @@
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+--
+-- 表的结构 `__PREFIX__wwh_about`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_about` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `about_title` varchar(100) DEFAULT NULL COMMENT '关于标题',
+  `about_content` text COMMENT '关于内容',
+  `about_image` varchar(100) DEFAULT NULL COMMENT '关于图片',
+  `about_video` varchar(500) DEFAULT NULL COMMENT '视频',
+  `culture_title1` varchar(100) DEFAULT NULL COMMENT '企业文化标题1',
+  `culture_slogan1` varchar(500) DEFAULT NULL COMMENT '企业文化标语1',
+  `culture_image1` varchar(100) DEFAULT NULL COMMENT '企业文化图片1',
+  `culture_title2` varchar(100) DEFAULT NULL COMMENT '企业文化标题2',
+  `culture_slogan2` varchar(500) DEFAULT NULL COMMENT '企业文化标语2',
+  `culture_image2` varchar(100) DEFAULT NULL COMMENT '企业文化图片2',
+  `culture_title3` varchar(100) DEFAULT NULL COMMENT '企业文化标题3',
+  `culture_slogan3` varchar(500) DEFAULT NULL COMMENT '企业文化标语3',
+  `culture_image3` varchar(100) DEFAULT NULL COMMENT '企业文化图片3',
+  `culture_title4` varchar(100) DEFAULT NULL COMMENT '企业文化标题4',
+  `culture_slogan4` varchar(500) DEFAULT NULL COMMENT '企业文化标语4',
+  `culture_image4` varchar(100) DEFAULT NULL COMMENT '企业文化图片4',
+  `culture_title5` varchar(100) DEFAULT NULL COMMENT '企业文化标题5',
+  `culture_slogan5` varchar(500) DEFAULT NULL COMMENT '企业文化标语5',
+  `culture_image5` varchar(100) DEFAULT NULL COMMENT '企业文化图片5',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_banner`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_banner` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `title` varchar(255) DEFAULT NULL COMMENT '标题',
+  `pc_image` varchar(255) DEFAULT NULL COMMENT 'PC图片',
+  `phone_image` varchar(255) DEFAULT NULL COMMENT '手机图片',
+  `video_image` varchar(255) DEFAULT NULL COMMENT '视频',
+  `bigfont` varchar(255) DEFAULT NULL COMMENT '大字',
+  `font` varchar(500) DEFAULT NULL COMMENT '小字',
+  `url` varchar(255) DEFAULT NULL COMMENT '链接',
+  `weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
+  `updatetime` bigint(16) NOT NULL COMMENT '更新时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_config`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_config` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `template` varchar(50) NOT NULL COMMENT '前台模板',
+  `site_name` varchar(100) DEFAULT NULL COMMENT '站点名称',
+  `keywords` varchar(500) DEFAULT NULL COMMENT '关键字',
+  `description` varchar(1000) DEFAULT NULL COMMENT '描述',
+  `logo` varchar(1000) DEFAULT NULL COMMENT 'logo',
+  `logo1` varchar(500) DEFAULT NULL COMMENT '彩色logo',
+  `footer_logo` varchar(1000) DEFAULT NULL COMMENT '底部logo',
+  `tel` varchar(100) DEFAULT NULL COMMENT '电话',
+  `email` varchar(1000) DEFAULT NULL COMMENT '邮箱',
+  `address` varchar(100) DEFAULT NULL COMMENT '底部地址',
+  `gongwang` varchar(1000) DEFAULT NULL COMMENT '公网安备号',
+  `link1` varchar(100) DEFAULT NULL COMMENT '公网安备地址',
+  `beian` varchar(1000) DEFAULT NULL COMMENT '网站备案号',
+  `link2` varchar(100) DEFAULT NULL COMMENT '备案地址',
+  `copyright` varchar(1000) DEFAULT NULL COMMENT '版权',
+  `weibo` varchar(255) DEFAULT NULL COMMENT '微博',
+  `wechat` varchar(500) DEFAULT NULL COMMENT '微信二维码',
+  `douyin` varchar(500) DEFAULT NULL COMMENT '抖音',
+  `banner1` varchar(500) DEFAULT NULL COMMENT '产品中心',
+  `ban1_t1` varchar(100) DEFAULT NULL COMMENT '产品中心中文',
+  `banner2` varchar(500) DEFAULT NULL COMMENT '解决方案',
+  `ban2_t1` varchar(100) DEFAULT NULL COMMENT '解决方案中文',
+  `banner3` varchar(500) DEFAULT NULL COMMENT '服务中心',
+  `ban3_t1` varchar(100) DEFAULT NULL COMMENT '服务中心中文',
+  `banner4` varchar(500) DEFAULT NULL COMMENT '新闻中心',
+  `ban4_t1` varchar(100) DEFAULT NULL COMMENT '新闻中心中文',
+  `banner5` varchar(500) DEFAULT NULL COMMENT '关于我们',
+  `ban5_t1` varchar(100) DEFAULT NULL COMMENT '关于我们中文',
+  `banner6` varchar(500) DEFAULT NULL COMMENT '合作伙伴',
+  `ban6_t1` varchar(100) DEFAULT NULL COMMENT '合作伙伴中文',
+  `banner7` varchar(500) DEFAULT NULL COMMENT '搜索中心',
+  `ban7_t1` varchar(100) DEFAULT NULL COMMENT '搜索中心中文',
+  `content` text COMMENT '底部链接',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_contact`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_contact` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `tel` varchar(100) DEFAULT NULL COMMENT '总机',
+  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
+  `time` varchar(100) DEFAULT NULL COMMENT '工作时间',
+  `address` varchar(500) DEFAULT NULL COMMENT '地址',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_development`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_development` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createtime` bigint(16) NOT NULL COMMENT '添加时间',
+  `year` varchar(50) NOT NULL COMMENT '发展历程年份',
+  `content` text NOT NULL COMMENT '发展历程介绍',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_home`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_home` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `about_title` varchar(100) DEFAULT NULL COMMENT '关于标题',
+  `introduction` text COMMENT '关于介绍',
+  `num1` varchar(50) DEFAULT NULL COMMENT '数字1',
+  `unit1` varchar(50) DEFAULT NULL COMMENT '单位1',
+  `introduce1` varchar(100) DEFAULT NULL COMMENT '介绍1',
+  `num2` varchar(50) DEFAULT NULL COMMENT '数字2',
+  `unit2` varchar(50) DEFAULT NULL COMMENT '单位2',
+  `introduce2` varchar(100) DEFAULT NULL COMMENT '介绍2',
+  `num3` varchar(50) DEFAULT NULL COMMENT '数字3',
+  `unit3` varchar(50) DEFAULT NULL COMMENT '单位3',
+  `introduce3` varchar(100) DEFAULT NULL COMMENT '介绍3',
+  `image` varchar(255) DEFAULT NULL COMMENT '简介图片',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_honor`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_honor` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createtime` bigint(16) NOT NULL COMMENT '创建时间',
+  `name` varchar(100) DEFAULT NULL COMMENT '证书名称',
+  `type` enum('1','2','3') DEFAULT '1' COMMENT '类型',
+  `image` varchar(255) DEFAULT NULL COMMENT '证书图片',
+  `weigh` int(11) NOT NULL DEFAULT '0' COMMENT '权重',
+  `zsdate` date DEFAULT NULL COMMENT '证书日期',
+  `updatetime` bigint(16) NOT NULL COMMENT '更新时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_injoin`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_injoin` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `realname2` varchar(255) NOT NULL COMMENT '姓名',
+  `tel2` varchar(255) NOT NULL COMMENT '联系电话',
+  `gangwei2` varchar(255) NOT NULL COMMENT '应聘岗位',
+  `url` varchar(255) DEFAULT NULL COMMENT '简历',
+  `status` enum('0','1') NOT NULL DEFAULT '0' COMMENT '状态:0=新申请,1=已处理',
+  `createtime` bigint(16) NOT NULL COMMENT '提交时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+   PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_market`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_market` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createtime` bigint(16) NOT NULL COMMENT '创建时间',
+  `citylist` varchar(50) NOT NULL COMMENT '城市',
+  `name` varchar(50) DEFAULT NULL COMMENT '联系人',
+  `address` varchar(255) DEFAULT NULL COMMENT '地址',
+  `sale` varchar(255) DEFAULT NULL COMMENT '销售咨询',
+  `tech` varchar(50) DEFAULT NULL COMMENT '技术热线',
+  `mail` varchar(50) DEFAULT NULL COMMENT '销售邮箱',
+  `fax` varchar(50) DEFAULT NULL COMMENT '传真',
+  `weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
+  `updatetime` bigint(16) NOT NULL COMMENT '更新时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_message`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_message` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `realname` varchar(50) DEFAULT NULL COMMENT '姓名',
+  `tel` varchar(50) DEFAULT NULL COMMENT '电话',
+  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
+  `content` text COMMENT '留言内容',
+  `status` enum('0','1') NOT NULL DEFAULT '0' COMMENT '状态:0=新留言,1=已处理',
+  `createtime` bigint(16) NOT NULL COMMENT '提交时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_partner`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_partner` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createtime` bigint(16) NOT NULL COMMENT '创建时间',
+  `title` varchar(255) NOT NULL COMMENT '标题',
+  `image` varchar(250) NOT NULL COMMENT '图片',
+  `is_rec` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否首页推荐',
+  `weigh` int(11) NOT NULL COMMENT '权重',
+  `updatetime` bigint(16) NOT NULL COMMENT '更新时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_position`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_position` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `name` varchar(100) NOT NULL COMMENT '职位名称',
+  `dept` varchar(100) NOT NULL COMMENT '部门',
+  `addr` varchar(100) NOT NULL COMMENT '工作地点',
+  `xueli` varchar(100) NOT NULL COMMENT '学历',
+  `num` varchar(10) NOT NULL COMMENT '招聘人数',
+  `time` date DEFAULT NULL COMMENT '发布日期',
+  `content` text NOT NULL COMMENT '内容',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_service`
+--
+
+CREATE TABLE IF NOT EXISTS `__PREFIX__wwh_service` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `content` text COMMENT '服务策略',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_column`
+--
+
+CREATE TABLE IF NOT EXISTS  `__PREFIX__wwh_column` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `type` enum('list','link') NOT NULL COMMENT '类型',
+  `template_id` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '模板ID',
+  `classify` varchar(100) DEFAULT '' COMMENT '所属分类',
+  `parent_id` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '父ID',
+  `parent_ids` varchar(255) NOT NULL DEFAULT '0' COMMENT 'ID集合',
+  `name` varchar(30) DEFAULT NULL COMMENT '名称',
+  `image` varchar(255) DEFAULT NULL COMMENT '菜单图片',
+  `seotitle` varchar(255) DEFAULT NULL COMMENT 'SEO标题',
+  `keywords` varchar(255) DEFAULT NULL COMMENT '关键字',
+  `description` varchar(255) DEFAULT NULL COMMENT '描述',
+  `e_name` varchar(255) DEFAULT NULL COMMENT '英文名称',
+  `e_seotitle` varchar(255) DEFAULT NULL COMMENT '英文SEO标题',
+  `e_keywords` varchar(255) DEFAULT NULL COMMENT '英文关键字',
+  `e_description` varchar(255) DEFAULT NULL COMMENT '英文描述',
+  `diyname` varchar(100) DEFAULT '' COMMENT '自定义URL名称',
+  `listtpl` varchar(100) DEFAULT '' COMMENT '列表模板',
+  `showtpl` varchar(100) DEFAULT '' COMMENT '内容模板 ',
+  `outlink` varchar(255) DEFAULT '' COMMENT '跳转链接',
+  `weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
+  `isnav` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否显示',
+  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
+  `updatetime` bigint(16) DEFAULT NULL COMMENT '更新时间',
+  `status` enum('normal','hidden') NOT NULL DEFAULT 'normal' COMMENT '状态',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_template`
+--
+
+CREATE TABLE IF NOT EXISTS  `__PREFIX__wwh_template` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `name` varchar(30) DEFAULT '' COMMENT '模板名称',
+  `listtpl` varchar(100) DEFAULT '' COMMENT '列表模板',
+  `showtpl` varchar(100) DEFAULT '' COMMENT '内容模板',
+  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
+  `updatetime` bigint(16) DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_archives`
+--
+
+CREATE TABLE IF NOT EXISTS  `__PREFIX__wwh_archives` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `type` enum('product','cases','download','news') NOT NULL COMMENT '类型',
+  `column_id` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '栏目ID',
+  `column_ids` varchar(100) DEFAULT '' COMMENT '栏目ID集合',
+  `classify` varchar(100) DEFAULT '' COMMENT '所属分类',
+  `tpl` varchar(100) DEFAULT '' COMMENT '模板',
+  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章标题',
+  `image` varchar(255) DEFAULT '' COMMENT '缩略图',
+  `images` varchar(1500) DEFAULT '' COMMENT '组图',
+  `rec_image` varchar(255) DEFAULT '' COMMENT '首页推荐图',
+  `seotitle` varchar(255) DEFAULT '' COMMENT 'SEO标题',
+  `keywords` varchar(255) DEFAULT '' COMMENT '关键字',
+  `description` varchar(500) DEFAULT '' COMMENT '描述',
+  `rec_data` set('0','1','10') NOT NULL DEFAULT '0' COMMENT '首页推荐:0=不推荐,1=首页推荐,10=产品大图',
+  `p_pn` varchar(200) DEFAULT '' COMMENT '产品型号',
+  `p_func_content` text COMMENT '产品功能特点',
+  `p_tech_content` text COMMENT '产品技术指标',
+  `p_shape_image` varchar(255) DEFAULT '' COMMENT '产品外形尺寸',
+  `d_type` enum('1','2','3','4') DEFAULT '1' COMMENT '资料类型',
+  `d_version` varchar(50) DEFAULT '' COMMENT '版本号',
+  `d_file` varchar(500) DEFAULT '' COMMENT '文件',
+  `content` text COMMENT '内容',
+  `weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
+  `views` int(10) UNSIGNED DEFAULT '0' COMMENT '浏览次数',
+  `time` date DEFAULT NULL COMMENT '发布日期',
+  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
+  `updatetime` bigint(16) DEFAULT NULL COMMENT '更新时间',
+  `status` enum('0','1') NOT NULL DEFAULT '0' COMMENT '审核状态:0=未审核,1=已审核',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_faq`
+--
+
+CREATE TABLE `__PREFIX__wwh_faq` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
+  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '标题',
+  `content` text COMMENT '内容',
+  `weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
+  `status` enum('0','1') NOT NULL DEFAULT '0' COMMENT '审核状态:0=未审核,1=已审核',
+  `updatetime` bigint(16) DEFAULT NULL COMMENT '更新时间',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 表的结构 `__PREFIX__wwh_qa`
+--
+
+CREATE TABLE `__PREFIX__wwh_qa` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createtime` bigint(16) DEFAULT NULL COMMENT '添加日期',
+  `image` varchar(255) DEFAULT '' COMMENT '图片',
+  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',
+  `model` varchar(50) DEFAULT '' COMMENT '型号',
+  `sn` varchar(50) NOT NULL DEFAULT '' COMMENT '序列号',
+  `custom` varchar(100) NOT NULL DEFAULT '' COMMENT '客户单位',
+  `phone` varchar(50) DEFAULT '' COMMENT '客户手机',
+  `fhdate` date NOT NULL COMMENT '保修开始日期',
+  `dqdate` date NOT NULL COMMENT '保修结束日期',
+  `lang` enum('1','2') DEFAULT '1' COMMENT '语言:1=简体中文,2=English',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
+
+--
+-- 转存表中的数据 `__PREFIX__wwh_config`
+--
+
+INSERT INTO `__PREFIX__wwh_config` (`id`, `template`, `site_name`, `keywords`, `description`, `logo`, `logo1`, `footer_logo`, `tel`, `email`, `address`, `gongwang`, `link1`, `beian`, `link2`, `copyright`, `weibo`, `wechat`, `douyin`, `banner1`, `ban1_t1`, `banner2`, `ban2_t1`, `banner3`, `ban3_t1`, `banner4`, `ban4_t1`, `banner5`, `ban5_t1`, `banner6`, `ban6_t1`, `banner7`, `ban7_t1`, `content`, `lang`) VALUES
+(1, 'default', '站点名称', '企业站点关键字', '企业站点描述', '/assets/addons/wwh/images/logo.png', '/assets/addons/wwh/images/logo1.png', '/assets/addons/wwh/images/footer_logo.png', '0571-00000000', 'sales@admin.com', '杭州市滨江区江汉路XXXX号', '浙公网安备XXXXXXXXXXXXXX号', 'http://www.beian.gov.cn/', '浙ICP备XXXXXXXX号', 'http://beian.miit.gov.cn/', 'Copyright © 2001-2025 杭州演示站点股份有限公司 All Rights Reserved', 'https://weibo.com/', '/assets/addons/wwh/images/code.jpg', '/assets/addons/wwh/images/code.jpg', '/assets/addons/wwh/images/lm-ban1.jpg', '产品中心', '/assets/addons/wwh/images/lm-ban2.jpg', '解决方案', '/assets/addons/wwh/images/lm-ban1.jpg', '服务中心', '/assets/addons/wwh/images/lm-ban1.jpg', '新闻中心', '/assets/addons/wwh/images/lm-ban2.jpg', '关于我们', '/assets/addons/wwh/images/lm-ban2.jpg', '合作伙伴', '/assets/addons/wwh/images/lm-ban2.jpg', '搜索中心', '<a href=\"#\">关于我们</a>\r\n<a href=\"#\">产品中心</a>\r\n<a href=\"#\">解决方案</a>\r\n<a href=\"#\">新闻中心</a>\r\n<a href=\"#\">资料下载</a>\r\n<a href=\"#\">常见问题</a>\r\n<a href=\"#\">加入我们</a>\r\n<a href=\"#\">联系我们</a>', '1'),
+(2, 'default', 'Site Name', 'Enterprise Website Keywords', 'Enterprise Site Description', '/assets/addons/wwh/images/logo.png', '/assets/addons/wwh/images/logo1.png', '/assets/addons/wwh/images/footer_logo.png', '0571-00000000', 'sales@admin.com', 'No. XXXX Jianghan Road, Binjiang District, Hangzhou City', 'Zhejiang Public Security Registration No. XXXXX', 'http://www.beian.gov.cn/', 'Zhejiang ICP Registration No. XXXXX', 'http://beian.miit.gov.cn/', 'Copyright © 2001-2025 Hangzhou Demonstration Site Co., Ltd', 'https://weibo.com/', '/assets/addons/wwh/images/code.jpg', '/assets/addons/wwh/images/code.jpg', '/assets/addons/wwh/images/lm-ban1.jpg', 'Product Center', '/assets/addons/wwh/images/lm-ban2.jpg', 'Solution', '/assets/addons/wwh/images/lm-ban1.jpg', 'Service Centre', '/assets/addons/wwh/images/lm-ban1.jpg', 'News Center', '/assets/addons/wwh/images/lm-ban2.jpg', 'About Us', '/assets/addons/wwh/images/lm-ban2.jpg', 'Cooperative Partner', '/assets/addons/wwh/images/lm-ban2.jpg', 'Search Center', '<a href=\"#\">About</a>\r\n<a href=\"#\">Product</a>\r\n<a href=\"#\">Solution</a>\r\n<a href=\"#\">News</a>\r\n<a href=\"#\">Download</a>\r\n<a href=\"#\">Faq</a>\r\n<a href=\"#\">Join</a>\r\n<a href=\"#\">Contact</a>', '2');
+
+--
+-- 转存表中的数据 `__PREFIX__wwh_template`
+--
+
+INSERT INTO `__PREFIX__wwh_template` (`id`, `name`, `listtpl`, `showtpl`, `createtime`, `updatetime`) VALUES
+(1, '无', '', '', 1693554950, 1693554950),
+(2, '产品中心', 'list_product.html', 'detail_product.html', 1693555048, 1693555048),
+(3, '解决方案', 'list_cases.html', 'detail_cases.html', 1693555067, 1693555067),
+(4, '服务策略', '', 'detail_service.html', 1693555083, 1693555083),
+(6, '资料下载', '', 'detail_download.html', 1693555117, 1693555117),
+(7, '合作伙伴', '', 'detail_partner.html', 1693555135, 1693555135),
+(8, '新闻中心', 'list_news.html', 'detail_news.html', 1693555148, 1693555148),
+(9, '公司概况', '', 'detail_about.html', 1693555169, 1693555169),
+(10, '荣誉资质', '', 'detail_honor.html', 1693555186, 1693555186),
+(11, '加入我们', '', 'detail_join.html', 1693555197, 1693555197),
+(12, '联系我们', '', 'detail_contact.html', 1693555206, 1693555206),
+(13, '常见问题', '', 'detail_faq.html', 1712454965, 1712481105),
+(14, '质保查询', '', 'detail_qa.html', 1723079427, 1723079427);
+
+-- 1.4.0 --
+ALTER TABLE `__PREFIX__wwh_config` ADD COLUMN `logo1` varchar(500) DEFAULT NULL COMMENT '彩色logo' AFTER `logo`;
+ALTER TABLE `__PREFIX__wwh_config` CHANGE `image` `wechat` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信二维码';
+ALTER TABLE `__PREFIX__wwh_config` CHANGE `sale` `weibo` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微博' AFTER `copyright`;
+ALTER TABLE `__PREFIX__wwh_config` CHANGE `technology` `douyin` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '抖音' AFTER `wechat`;
+UPDATE `__PREFIX__wwh_config` SET `content` = '<a href=\"#\">关于我们</a>\r\n<a href=\"#\">产品中心</a>\r\n<a href=\"#\">解决方案</a>\r\n<a href=\"#\">新闻中心</a>\r\n<a href=\"#\">资料下载</a>\r\n<a href=\"#\">常见问题</a>\r\n<a href=\"#\">加入我们</a>\r\n<a href=\"#\">联系我们</a>' WHERE `__PREFIX__wwh_config`.`id` = 1;
+
+-- 1.4.1 --
+ALTER TABLE `__PREFIX__wwh_home` ADD COLUMN `image` varchar(255) DEFAULT NULL COMMENT '简介图片' AFTER `introduction`;
+UPDATE `__PREFIX__wwh_home` SET `image` = '/assets/addons/wwh/images/960x700.png' WHERE `__PREFIX__wwh_home`.`id` = 1;
+UPDATE `__PREFIX__wwh_home` SET `title1` = '2006,年,成立于' WHERE `__PREFIX__wwh_home`.`id` = 1;
+UPDATE `__PREFIX__wwh_home` SET `title2` = '3000,+,合作伙伴' WHERE `__PREFIX__wwh_home`.`id` = 1;
+
+-- 1.5.0 --
+ALTER TABLE `__PREFIX__wwh_column` CHANGE `type` `type` ENUM('list','link') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型';
+ALTER TABLE `__PREFIX__wwh_column` ADD COLUMN `template_id` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '模板ID' AFTER `type`;
+ALTER TABLE `__PREFIX__wwh_column` CHANGE `tpl` `listtpl` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '列表模板';
+ALTER TABLE `__PREFIX__wwh_column` ADD COLUMN `showtpl` varchar(100) DEFAULT '' COMMENT '内容模板 ' AFTER `listtpl`;
+ALTER TABLE `__PREFIX__wwh_archives` CHANGE `rec_data` `rec_data` SET('0','1','10') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '首页推荐:0=不推荐,1=首页推荐,10=产品大图';
+update __PREFIX__wwh_column set listtpl="" where listtpl="index";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '2', `listtpl` = 'list_product.html', `showtpl` = 'detail_product.html' where listtpl="product";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '3', `listtpl` = 'list_cases.html', `showtpl` = 'detail_cases.html' where listtpl="cases";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '4', `listtpl` = '', `showtpl` = 'detail_service.html' where listtpl="service";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '6', `listtpl` = '', `showtpl` = 'detail_download.html' where listtpl="download";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '7', `listtpl` = '', `showtpl` = 'detail_partner.html' where listtpl="partner";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '8', `listtpl` = 'list_news.html', `showtpl` = 'detail_news.html' where listtpl="news";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '9', `listtpl` = '', `showtpl` = 'detail_about.html' where listtpl="about";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '10', `listtpl` = '', `showtpl` = 'detail_honor.html' where listtpl="honor";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '11', `listtpl` = '', `showtpl` = 'detail_join.html' where listtpl="join";
+update __PREFIX__wwh_column set `type` = 'list', `template_id` = '12', `listtpl` = '', `showtpl` = 'detail_contact.html' where listtpl="contact";
+update __PREFIX__wwh_archives set tpl="detail_product.html" where tpl="product_detail";
+update __PREFIX__wwh_archives set tpl="detail_cases.html" where tpl="cases_detail";
+update __PREFIX__wwh_archives set tpl="detail_download.html" where tpl="download";
+update __PREFIX__wwh_archives set tpl="detail_news.html" where tpl="news_detail";
+update __PREFIX__wwh_archives set rec_data="1,10" where title="产品名称演示5";
+
+-- 2.0.0 --
+ALTER TABLE `__PREFIX__wwh_banner` CHANGE `updatetime` `updatetime` BIGINT(16) NOT NULL COMMENT '更新时间';
+ALTER TABLE `__PREFIX__wwh_development` CHANGE `createtime` `createtime` BIGINT(16) NOT NULL COMMENT '添加时间';
+ALTER TABLE `__PREFIX__wwh_honor` CHANGE `createtime` `createtime` BIGINT(16) NOT NULL COMMENT '创建时间';
+ALTER TABLE `__PREFIX__wwh_honor` CHANGE `updatetime` `updatetime` BIGINT(16) NOT NULL COMMENT '更新时间';
+ALTER TABLE `__PREFIX__wwh_injoin` CHANGE `createtime` `createtime` BIGINT(16) NOT NULL COMMENT '提交时间';
+ALTER TABLE `__PREFIX__wwh_market` CHANGE `createtime` `createtime` BIGINT(16) NOT NULL COMMENT '创建时间';
+ALTER TABLE `__PREFIX__wwh_market` CHANGE `updatetime` `updatetime` BIGINT(16) NOT NULL COMMENT '更新时间';
+ALTER TABLE `__PREFIX__wwh_message` CHANGE `createtime` `createtime` BIGINT(16) NOT NULL COMMENT '提交时间';
+ALTER TABLE `__PREFIX__wwh_partner` CHANGE `createtime` `createtime` BIGINT(16) NOT NULL COMMENT '创建时间';
+ALTER TABLE `__PREFIX__wwh_partner` CHANGE `updatetime` `updatetime` BIGINT(16) NOT NULL COMMENT '更新时间';
+ALTER TABLE `__PREFIX__wwh_injoin` CHANGE `realname` `realname2` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名';
+ALTER TABLE `__PREFIX__wwh_injoin` CHANGE `tel` `tel2` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '联系电话';
+ALTER TABLE `__PREFIX__wwh_injoin` CHANGE `gangwei` `gangwei2` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '应聘岗位';
+ALTER TABLE `__PREFIX__wwh_injoin` ADD `status` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT '状态:0=新留言,1=已处理' AFTER `url`;
+ALTER TABLE `__PREFIX__wwh_message` ADD `status` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT '状态:0=新留言,1=已处理' AFTER `content`;
+ALTER TABLE `__PREFIX__wwh_partner` ADD `is_rec` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否首页推荐' AFTER `image`;
+ALTER TABLE `__PREFIX__wwh_archives` ADD `d_type` ENUM('用户手册','产品彩页','驱动程序','其他') DEFAULT '用户手册' COMMENT '资料类型' AFTER `p_shape_image`;
+ALTER TABLE `__PREFIX__wwh_archives` ADD `d_version` VARCHAR(50) NULL DEFAULT '' COMMENT '版本号' AFTER `d_type`;
+ALTER TABLE `__PREFIX__wwh_banner` CHANGE `sort` `weigh` INT(10) NOT NULL DEFAULT '0' COMMENT '权重';
+ALTER TABLE `__PREFIX__wwh_market` ADD `weigh` INT(10) NOT NULL DEFAULT '0' COMMENT '权重' AFTER `fax`;
+ALTER TABLE `__PREFIX__wwh_honor` CHANGE `sort` `weigh` INT(11) NOT NULL DEFAULT '0' COMMENT '权重';
+ALTER TABLE `__PREFIX__wwh_honor` ADD `type` ENUM('荣誉证书','资质证书','其它') NULL DEFAULT '资质证书' COMMENT '类型' AFTER `name`;
+ALTER TABLE `__PREFIX__wwh_honor` ADD `zsdate` DATE NULL DEFAULT NULL COMMENT '证书日期' AFTER `weigh`;
+ALTER TABLE `__PREFIX__wwh_config` ADD `address` VARCHAR(100) NULL DEFAULT NULL COMMENT '底部地址' AFTER `email`;
+ALTER TABLE `__PREFIX__wwh_config` ADD `banner7` VARCHAR(500) NULL DEFAULT NULL COMMENT '搜索中心' AFTER `ban6_t1`;
+ALTER TABLE `__PREFIX__wwh_config` ADD `ban7_t1` VARCHAR(100) NULL DEFAULT NULL COMMENT '搜索中心中文' AFTER `banner7`;
+ALTER TABLE `__PREFIX__wwh_about` ADD `about_video` VARCHAR(500) NULL DEFAULT NULL COMMENT '视频' AFTER `about_image`;
+UPDATE `__PREFIX__wwh_template` SET `name` = '无', `showtpl` = '' WHERE `__PREFIX__wwh_template`.`id` = 1;
+
+-- 2.0.2 --
+ALTER TABLE `__PREFIX__wwh_home` CHANGE `title1` `num1` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数字1';
+ALTER TABLE `__PREFIX__wwh_home` CHANGE `title2` `num2` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数字2';
+ALTER TABLE `__PREFIX__wwh_home` CHANGE `title3` `num3` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数字3';
+ALTER TABLE `__PREFIX__wwh_home` ADD `unit1` VARCHAR(50) NULL DEFAULT NULL COMMENT '单位1' AFTER `num1`;
+ALTER TABLE `__PREFIX__wwh_home` ADD `introduce1` VARCHAR(100) NULL DEFAULT NULL COMMENT '介绍1' AFTER `unit1`;
+ALTER TABLE `__PREFIX__wwh_home` ADD `unit2` VARCHAR(50) NULL DEFAULT NULL COMMENT '单位2' AFTER `num2`;
+ALTER TABLE `__PREFIX__wwh_home` ADD `introduce2` VARCHAR(100) NULL DEFAULT NULL COMMENT '介绍2' AFTER `unit2`;
+ALTER TABLE `__PREFIX__wwh_home` ADD `unit3` VARCHAR(50) NULL DEFAULT NULL COMMENT '单位3' AFTER `num3`;
+ALTER TABLE `__PREFIX__wwh_home` ADD `introduce3` VARCHAR(100) NULL DEFAULT NULL COMMENT '介绍3' AFTER `unit3`;
+
+-- 2.2.0 --
+UPDATE `__PREFIX__wwh_column` SET `status` = 'hidden' WHERE showtpl = "detail_market.html";
+UPDATE `__PREFIX__wwh_template` SET `name` = '【停用】', `showtpl` = '' WHERE showtpl = "detail_market.html";
+
+-- 2.3.0 --
+ALTER TABLE `__PREFIX__wwh_about` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `culture_image5`;
+ALTER TABLE `__PREFIX__wwh_about` CHANGE `culture_en1` `culture_slogan1` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业文化标语1';
+ALTER TABLE `__PREFIX__wwh_about` CHANGE `culture_en2` `culture_slogan2` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业文化标语2';
+ALTER TABLE `__PREFIX__wwh_about` CHANGE `culture_en3` `culture_slogan3` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业文化标语3';
+ALTER TABLE `__PREFIX__wwh_about` CHANGE `culture_en4` `culture_slogan4` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业文化标语4';
+ALTER TABLE `__PREFIX__wwh_about` CHANGE `culture_en5` `culture_slogan5` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业文化标语5';
+ALTER TABLE `__PREFIX__wwh_archives` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `status`;
+ALTER TABLE `__PREFIX__wwh_archives` CHANGE `description` `description` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '描述';
+ALTER TABLE `__PREFIX__wwh_archives` CHANGE `d_type` `d_type` ENUM('用户手册','产品彩页','驱动程序','其他','1','2','3','4') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '用户手册' COMMENT '资料类型';
+UPDATE `__PREFIX__wwh_archives` SET `d_type` = '1' WHERE d_type = "用户手册";
+UPDATE `__PREFIX__wwh_archives` SET `d_type` = '2' WHERE d_type = "产品彩页";
+UPDATE `__PREFIX__wwh_archives` SET `d_type` = '3' WHERE d_type = "驱动程序";
+UPDATE `__PREFIX__wwh_archives` SET `d_type` = '4' WHERE d_type = "其他";
+ALTER TABLE `__PREFIX__wwh_archives` CHANGE `d_type` `d_type` ENUM('1','2','3','4') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '资料类型';
+ALTER TABLE `__PREFIX__wwh_banner` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `updatetime`;
+ALTER TABLE `__PREFIX__wwh_column` ADD `e_name` VARCHAR(255) NULL DEFAULT NULL COMMENT '英文名称' AFTER `description`;
+ALTER TABLE `__PREFIX__wwh_column` ADD `e_seotitle` VARCHAR(255) NULL DEFAULT NULL COMMENT '英文SEO标题' AFTER `e_name`;
+ALTER TABLE `__PREFIX__wwh_column` ADD `e_keywords` VARCHAR(255) NULL DEFAULT NULL COMMENT '英文关键字' AFTER `e_seotitle`;
+ALTER TABLE `__PREFIX__wwh_column` ADD `e_description` VARCHAR(500) NULL DEFAULT NULL COMMENT '英文描述' AFTER `e_keywords`;
+ALTER TABLE `__PREFIX__wwh_config` ADD `template` VARCHAR(50) NOT NULL COMMENT '前台模板' AFTER `id`;
+ALTER TABLE `__PREFIX__wwh_config` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `content`;
+ALTER TABLE `__PREFIX__wwh_contact` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `address`;
+ALTER TABLE `__PREFIX__wwh_development` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `content`;
+ALTER TABLE `__PREFIX__wwh_faq` CHANGE `title` `title` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标题';
+ALTER TABLE `__PREFIX__wwh_faq` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `updatetime`;
+ALTER TABLE `__PREFIX__wwh_home` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `image`;
+ALTER TABLE `__PREFIX__wwh_honor` CHANGE `type` `type` ENUM('资质证书','荣誉证书','其它','1','2','3') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '资质证书' COMMENT '类型';
+UPDATE `__PREFIX__wwh_honor` SET `type` = '1' WHERE type = "资质证书";
+UPDATE `__PREFIX__wwh_honor` SET `type` = '2' WHERE type = "荣誉证书";
+UPDATE `__PREFIX__wwh_honor` SET `type` = '3' WHERE type = "其它";
+ALTER TABLE `__PREFIX__wwh_honor` CHANGE `type` `type` ENUM('1','2','3') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '类型';
+ALTER TABLE `__PREFIX__wwh_honor` CHANGE `image` `image` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '证书图片';
+ALTER TABLE `__PREFIX__wwh_honor` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `updatetime`;
+ALTER TABLE `__PREFIX__wwh_injoin` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `createtime`;
+ALTER TABLE `__PREFIX__wwh_market` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `updatetime`;
+ALTER TABLE `__PREFIX__wwh_message` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `createtime`;
+ALTER TABLE `__PREFIX__wwh_partner` CHANGE `title` `title` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题';
+ALTER TABLE `__PREFIX__wwh_partner` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `updatetime`;
+ALTER TABLE `__PREFIX__wwh_position` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `content`;
+ALTER TABLE `__PREFIX__wwh_qa` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `dqdate`;
+ALTER TABLE `__PREFIX__wwh_qa` DROP KEY `sn`;
+ALTER TABLE `__PREFIX__wwh_service` ADD `lang` ENUM('1','2') NULL DEFAULT '1' COMMENT '语言:1=简体中文,2=English' AFTER `content`;
+UPDATE `__PREFIX__wwh_config` SET `template` = 'default' WHERE id = "1";
+INSERT INTO `__PREFIX__wwh_config` (`id`, `template`, `site_name`, `keywords`, `description`, `logo`, `logo1`, `footer_logo`, `tel`, `email`, `address`, `gongwang`, `link1`, `beian`, `link2`, `copyright`, `weibo`, `wechat`, `douyin`, `banner1`, `ban1_t1`, `banner2`, `ban2_t1`, `banner3`, `ban3_t1`, `banner4`, `ban4_t1`, `banner5`, `ban5_t1`, `banner6`, `ban6_t1`, `banner7`, `ban7_t1`, `content`, `lang`) VALUES ('2', 'default', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '2');

+ 5 - 0
addons/wwh/lang/en.php

@@ -0,0 +1,5 @@
+<?php
+
+return [
+    
+];

+ 118 - 0
addons/wwh/lang/zh-cn.php

@@ -0,0 +1,118 @@
+<?php
+
+return [
+    'English' => '简体中文',
+    'Home' => '首页',
+    'Products' => '产品分类',
+    'Email' => '邮箱',
+    'Address' => '地址',
+    'Link Navigation' => '链接导航',
+    'More Media' => '更多媒体',
+    'View More' => '查看更多',
+    'Product Consultation' => '产品咨询',
+    'Function' => '功能特点',
+    'Parameters' => '规格参数',
+    'Size' => '外形尺寸',
+    'Release Time' => '发布时间',
+    'Browse' => '浏览数',
+    'Front' => '上一篇',
+    'After' => '下一篇',
+    'No More' => '没有了',
+    'Strategy' => '服务策略',
+    'Name' => '名称',
+    'Classification' => '分类',
+    'Type' => '资料类型',
+    'Version' => '版本号',
+    'Time' => '时间',
+    'Operate' => '操作',
+    'Manual' => '用户手册',
+    'Color Page' => '产品彩页',
+    'Driver' => '驱动程序',
+    'Other' => '其他',
+    'Please enter a name' => '请输入名称',
+    'Category' => '选择分类',
+    'Download' => '资料下载',
+    'Share' => '共有',
+    'Strip' => '条',
+    'Please enter the serial number' => '请输入序列号',
+    'Submit' => '提交',
+    'No relevant information found' => '没有找到相关信息',
+    'Model' => '型号',
+    'Serial Number' => '序列号',
+    'Customer Unit' => '客户单位',
+    'Customer Phone' => '客户手机',
+    'Warranty Start Date' => '保修开始日期',
+    'Warranty End Date' => '保修结束日期',
+    'Company' => '公司概况',
+    'Development History' => '发展历程',
+    'Year' => '年',
+    'Corporate Culture' => '企业文化',
+    'Qualifications' => '资质证书',
+    'Honor' => '荣誉证书',
+    'All Sectors' => '所有部门',
+    'Work Location' => '工作地点',
+    'Search for job positions' => '搜索职位',
+    'Apply Now' => '立即申请',
+    'Welcome to join us' => '欢迎加入我们',
+    'Full Name' => '姓名',
+    'Contact Number' => '联系电话',
+    'Post' => '应聘岗位',
+    'Upload Resume' => '上传简历',
+    'Upload' => '上传',
+    'Support' => '支持',
+    'Verification code' => '验证码',
+    'Tips' => '温馨提示',
+    'Phone' => '电话',
+    'Position' => '应聘岗位',
+    'Resume' => '简历',
+    'Token verification failed' => '令牌验证失败',
+    'Submitted Successfully' => '提交成功',
+    'Please fill in your name' => '请填写姓名',
+    'Please provide a valid name' => '请提供有效姓名',
+    'Please provide your phone number' => '请填写电话',
+    'Please provide a valid phone number' => '请填写有效的电话',
+    'Please select the position to apply for' => '请选择应聘岗位',
+    'Please upload your resume' => '请上传简历',
+    'Please fill in the verification code' => '请填写验证码',
+    'Please fill in all required fields' => '请填写所有必填字段',
+    'Verification code error, please try again' => '验证码错误,请重试',
+    'Upload file format not allowed or file too large' => '不允许上传文件格式或文件太大',
+    'Resume recipient email not configured' => '未配置简历收件邮箱',
+    'Message recipient email not configured' => '未配置留言收件邮箱',
+    'Job Application Resume' => '求职简历',
+    'Customer message' => '客户留言',
+    'Failed to send email, Please check the backend email configuration' => '发送电子邮件失败,请检查后台邮件配置',
+    'Operation failed, please try again' => '操作失败,请重试',
+    'Network error, please try again' => '网络错误,请重试',
+    'Fax' => '传真',
+    'Sales Consultation' => '销售咨询',
+    'Technical Hotline' => '技术热线',
+    'Sales email' => '销售邮箱',
+    'Consultation Hotline' => '咨询热线',
+    'Contact Email' => '联系邮箱',
+    'Working Hours' => '工作时间',
+    'Contact Address' => '联系地址',
+    'Weibo' => '微博',
+    'WeChat' => '微信',
+    'Tiktok' => '抖音',
+    'Top' => '返回顶部',
+    'Featured Products' => '推荐产品',
+    'Company Profile' => '公司简介',
+    'Solution' => '解决方案',
+    'Cooperative Partner' => '合作伙伴',
+    'News Center' => '新闻中心',
+    'Message Inquiry' => '留言咨询',
+    'Please enter your name' => '请输入您的姓名',
+    'Please enter your phone number' => '请输入您的电话',
+    'Please enter your email address' => '请输入您的邮箱',
+    'The information you expect to know' => '您期望了解的信息',
+    'Verification Code' => '验证码',
+    'Please fill in your email address' => '请填写邮箱',
+    'Please provide a valid email address' => '请填写有效的邮箱',
+    'Please fill in the message content' => '请填写留言内容',
+    'Search Center' => '搜索中心',
+    'Product' => '产品中心',
+    'News' => '新闻中心',
+    'Search' => '搜索',
+    'Content' => '内容',
+];

+ 63 - 0
addons/wwh/model/Column.php

@@ -0,0 +1,63 @@
+<?php
+namespace addons\wwh\model;
+
+use think\Db;
+use think\Model;
+
+class Column extends Model
+{
+    // 表名
+    protected $name = 'wwh_column';
+
+    /**
+     * 获取顶级栏目
+     */
+    public static function getTopColumn($navCur)
+    {
+        if ($navCur['parent_id'] == 0) {
+            return $navCur;
+        }
+
+        $top = self::where('id', $navCur['parent_id'])
+            ->where('parent_id', 0)
+            ->find();
+
+        if (!$top) {
+            // 如果父级不是顶级,继续向上查找
+            $parentId = $navCur['parent_id'];
+            while ($parentId != 0) {
+                $parent = self::where('id', $parentId)->find();
+                if ($parent['parent_id'] == 0) {
+                    $top = $parent;
+                    break;
+                }
+                $parentId = $parent['parent_id'];
+            }
+        }
+
+        return $top ?: $navCur;
+    }
+
+    /**
+     * 获取第二级栏目
+     */
+    public static function getSecondId($currentId)
+    {
+        $current = self::where('id', $currentId)
+            ->field('parent_ids')
+            ->find();
+
+        if (!$current || empty($current['parent_ids'])) {
+            return 0;
+        }
+
+        $parents = array_values(array_filter(
+            explode(',', $current['parent_ids']),
+            function($v) {
+                return trim($v) !== '' && $v !== '0';
+            }
+        ));
+
+        return $parents[1] ?? 0;
+    }
+}

File diff suppressed because it is too large
+ 9 - 0
addons/wwh/testdata.sql


+ 33 - 0
addons/wwh/updateConfig.php

@@ -0,0 +1,33 @@
+<?php
+
+return [
+    [
+        'name' => '__tips__',
+        'title' => '温馨提示',
+        'type' => 'string',
+        'content' => [],
+        'value' => '请先至 常规管理->系统配置->邮件配置 中配置邮件服务器并完成发送测试邮件,成功后在配置[留言收件邮箱]和[简历收件邮箱],如为空将导致前台提交页面报错!配置修改后请清除缓存。',
+        'rule' => '',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'rewrite',
+        'title' => '伪静态',
+        'type' => 'array',
+        'content' => [],
+        'value' => [
+            'index/index' => '/wwh/$',
+            'search/index' => '/wwh/search/$',
+            'column/index' => '/wwh/[:diyname]$',
+            'archives/index' => '/wwh/[:diyname]/[:id]$',
+        ],
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+];

+ 187 - 0
addons/wwh/view/default/detail_about.html

@@ -0,0 +1,187 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{if condition="($navCur.parent_id == '0')"}{:__lang('Company')}{else /}{:__lm($navCur,'name')}{/if}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 公司介绍 -->
+<div class="company-wrapper">
+    <div class="container-outer">
+        <div class="company-box clearfix">
+            <div class="left">
+                <div class="title wow fadeInUp" data-wow-delay="0.5s">{$about.about_title|default=''}<i></i></div>
+                <div class="text wow fadeInUp" data-wow-delay="0.6s">{$about.about_content|default=''}</div>
+            </div>
+            <div class="right">
+                <div class="pic wow fadeInUp" data-wow-delay="0.7s" style="background-image: url('{$about.about_image|cdnurl}');">
+                    <img src="__CDN__/assets/addons/wwh/images/company_size.png" class="img-block">
+                    {if condition="empty($about.about_video) neq true"}
+                    <a href="javascript:;" class="play-btn m-video ani" data-src="{$about.about_video|cdnurl}"><i></i></a>
+                    {/if}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 发展历程 -->
+<div class="develop-box pto">
+    <div class="container-outer">
+        <div class="top">
+            <div class="title wow fadeInUp" data-wow-delay="0.6s">{:__lang('Development History')}<i></i></div>
+        </div>
+        <div class="bottom">
+            <div class="develop-con">
+                <div class="swiper-container develop-swiper">
+                    <div class="swiper-wrapper">
+                        {volist name="development" id="v"}
+                        <div class="swiper-slide wow fadeInUp" data-wow-delay="0.7s">
+                            <div class="item-box">
+                                <div class="time">{$v.year}<span>{:__lang('Year')}</span></div>
+                                <div class="line"></div>
+                                <div class="desc">{$v.content}</div>
+                            </div>
+                        </div>
+                        {/volist}
+                    </div>
+                    <div class="swiper-pagination wow fadeInUp" data-wow-delay="0.8s"></div>
+                </div>
+            </div>
+            <div class="swiper-button clearfix">
+                <div class="arrow develop-prev wow fadeInLeft" data-wow-delay="0.8s">
+                    <img src="__CDN__/assets/addons/wwh/images/prev.svg" alt="">
+                </div>
+                <div class="arrow develop-next wow fadeInRight" data-wow-delay="0.8s">
+                    <img src="__CDN__/assets/addons/wwh/images/next.svg" alt="">
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 企业文化 -->
+<div class="culture-box">
+    <div class="container-outer">
+        <div class="top">
+            <div class="title wow fadeInUp" data-wow-delay="0.9s">{:__lang('Corporate Culture')}<i></i></div>
+        </div>
+        <div class="bottom">
+            <div class="left items pic wow fadeInLeft" data-wow-delay="1.1s" style="background-image: url('{$about.culture_image1|cdnurl}');">
+                <img src="__CDN__/assets/addons/wwh/images/culture_big.png" class="img-block">
+                <div class="text-box">
+                    <i style="background-image: url('__CDN__/assets/addons/wwh/images/culture_ico1.png');"></i>
+                    <div class="title">
+                        <p class="tit">{$about.culture_title1|default=''}</p>
+                        <p class="slogan">{$about.culture_slogan1|default=''}</p>
+                    </div>
+                </div>
+            </div>
+            <div class="right">
+                <div class="items pic wow fadeInRight" data-wow-delay="1.2s" style="background-image: url('{$about.culture_image2|cdnurl}');">
+                    <img src="__CDN__/assets/addons/wwh/images/culture_small.png" class="img-block">
+                    <div class="text-box">
+                        <i style="background-image: url('__CDN__/assets/addons/wwh/images/culture_ico2.png');"></i>
+                        <div class="title">
+                            <p class="tit">{$about.culture_title2|default=''}</p>
+                            <p class="slogan">{$about.culture_slogan2|default=''}</p>
+                        </div>
+                    </div>
+                </div>
+                <div class="items pic wow fadeInRight" data-wow-delay="1.3s" style="background-image: url('{$about.culture_image3|cdnurl}');">
+                    <img src="__CDN__/assets/addons/wwh/images/culture_small.png" class="img-block">
+                    <div class="text-box">
+                        <i style="background-image: url('__CDN__/assets/addons/wwh/images/culture_ico3.png');"></i>
+                        <div class="title">
+                            <p class="tit">{$about.culture_title3|default=''}</p>
+                            <p class="slogan">{$about.culture_slogan3|default=''}</p>
+                        </div>
+                    </div>
+                </div>
+                <div class="items pic wow fadeInRight" data-wow-delay="1.4s" style="background-image: url('{$about.culture_image4|cdnurl}');">
+                    <img src="__CDN__/assets/addons/wwh/images/culture_small.png" class="img-block">
+                    <div class="text-box">
+                        <i style="background-image: url('__CDN__/assets/addons/wwh/images/culture_ico4.png');"></i>
+                        <div class="title">
+                            <p class="tit">{$about.culture_title4|default=''}</p>
+                            <p class="slogan">{$about.culture_slogan4|default=''}</p>
+                        </div>
+                    </div>
+                </div>
+                <div class="items pic wow fadeInRight" data-wow-delay="1.5s" style="background-image: url('{$about.culture_image5|cdnurl}');">
+                    <img src="__CDN__/assets/addons/wwh/images/culture_small.png" class="img-block">
+                    <div class="text-box">
+                        <i style="background-image: url('__CDN__/assets/addons/wwh/images/culture_ico5.png');"></i>
+                        <div class="title">
+                            <p class="tit">{$about.culture_title5|default=''}</p>
+                            <p class="slogan">{$about.culture_slogan5|default=''}</p>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!--底部-->
+{include file="footer" /}
+<link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/video.css">
+<script type='text/javascript' src="__CDN__/assets/addons/wwh/js/video.js"></script>
+<script type="text/javascript">
+    var swiper = new Swiper('.swiper-container', {
+        // autoplay: true, //自动滑动
+        speed: 500,
+        slidesPerView: 'auto',
+        // centeredSlides: true,
+        pagination: {
+            el: '.swiper-pagination',
+            type: 'progressbar',
+        },
+        navigation: {
+            nextEl: '.develop-next',
+            prevEl: '.develop-prev',
+        },
+    });
+</script>
+</body>
+</html>

+ 84 - 0
addons/wwh/view/default/detail_cases.html

@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$archives.keywords}"/>
+    <meta name="description" content="{$archives.description}"/>
+    <title>{$archives.title} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban2_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner2|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{:__lm($top,'name')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a>
+                <span class="dis">/</span>
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$archives.column_id]['diyname'], ':id'=>$archives.id])}" class="cur dis">{$archives.title}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="cases-detail">
+    <div class="container-outer">
+        <div class="cases-detail-box">
+            <div class="container">
+                <div class="cases-detail-top wow fadeInUp" data-wow-delay="0.5s">
+                    <div class="news-top-tit">
+                        <h1>{$archives.title}</h1>
+                        <div class="type"><a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a></div>
+                    </div>
+                    <div class="text">
+                        <span>{:__lang('Release Time')}:{$archives.time}</span>
+                        <span>{:__lang('Browse')}:{$archives.views}</span>
+                    </div>
+                </div>
+                <div class="cases-detail-main wow fadeInUp" data-wow-delay="0.6s">{$archives.content}</div>
+                <div class="cases-detail-page">
+                    {if empty($cafter)}<a class="prev wow fadeInLeft" data-wow-delay="0.6s"><span class="bt">{:__lang('Front')}</span><span class="txt">{:__lang('No More')}</span></a>{else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$cafter.id])}" class="prev wow fadeInLeft" data-wow-delay="0.6s"><span class="bt">{:__lang('Front')}</span><span class="txt">{$cafter.title}</span></a>
+                    {/if}
+                    {if empty($cfront)}<a class="next wow fadeInRight" data-wow-delay="0.6s"><span class="bt">{:__lang('After')}</span><span class="txt">{:__lang('No More')}</span></a>{else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$cfront.id])}" class="next wow fadeInRight" data-wow-delay="0.6s"><span class="bt">{:__lang('After')}</span><span class="txt">{$cfront.title}</span></a>
+                    {/if}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 144 - 0
addons/wwh/view/default/detail_contact.html

@@ -0,0 +1,144 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<style>
+    #container{
+        height:100%;
+        width:100%;
+    }
+    .amap-icon img{
+        width: 37px;
+        height: 50px;
+    }
+</style>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="contact-detail">
+    <div class="container-outer">
+        <div class="address-items">
+            <div class="item wow fadeInUp" data-wow-delay="0.5s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/tel.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Consultation Hotline')}</div>
+                <div class="text">{$contact.tel|default=''}</div>
+            </div>
+            <div class="item wow fadeInUp" data-wow-delay="0.6s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/mail.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Contact Email')}</div>
+                <div class="text">{$contact.email|default=''}</div>
+            </div>
+            <div class="item wow fadeInUp" data-wow-delay="0.7s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/time.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Working Hours')}</div>
+                <div class="text">{$contact.time|default=''}</div>
+            </div>
+            <div class="item wow fadeInUp" data-wow-delay="0.8s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/add.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Contact Address')}</div>
+                <div class="text">{$contact.address|default=''}</div>
+            </div>
+        </div>
+        <div class="market-detail">
+        <div class="market-detail-box flexBetween">
+            <div class="market-left">
+                <ul>
+                    {volist name="market" id="v" key="k"}
+                    <li class="flexStart {eq name="k" value="1"}active{/eq} wow fadeInUp" data-wow-delay="0.9s">
+                        <span class="span1"></span>
+                        <div class="text">
+                            <span>{$v.citylist}</span>
+                        </div>
+                    </li>
+                    {/volist}
+                </ul>
+            </div>
+            <div class="market-right">
+                <div class="main wow fadeInUp" data-wow-delay="0.9s">
+                    {volist name="market" id="v" key="k"}
+                    <div class="frame {eq name="k" value="1"}active{/eq}">
+                        <div class="bot">
+                            <h6>{$v.citylist}</h6>
+                            <div>
+                                <p class="add">{:__lang('Address')}:{$v.address}</p>
+                                <p class="sale">{:__lang('Sales Consultation')}:{$v.sale}</p>
+                                {if $v.tech}<p class="tech">{:__lang('Technical Hotline')}:{$v.tech}</p>{/if}
+                                <p class="mail">{:__lang('Sales email')}:{$v.mail}</p>
+                                {if $v.fax}<p class="fax">{:__lang('Fax')}:{$v.fax}</p>{/if}
+                            </div>
+                        </div>
+                    </div>
+                    {/volist}
+                </div>
+            </div>
+        </div>
+        </div>
+    </div>
+</div>
+<!--底部-->
+{include file="footer" /}
+<script type="text/javascript">
+    $('.market-detail .market-detail-box .market-left ul li').click(function () {
+        var ind = $(this).index();
+        $('.market-detail .market-detail-box .market-right .main .frame').eq(ind).addClass('active').siblings().removeClass('active');
+        $(this).addClass('active').siblings().removeClass('active');
+    });
+</script>
+</body>
+</html>

+ 120 - 0
addons/wwh/view/default/detail_download.html

@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="download-detail">
+    <div class="container-outer">
+        <div class="download-detail-box">
+            <div class="download-top">
+                <div class="download-top-left wow fadeInUp" data-wow-delay="0.5s">{:__lang('Download')}</div>
+                <div class="download-top-right wow fadeInUp" data-wow-delay="0.6s">
+                    <form method="get" action="">
+                        <ul>
+                            <div class="download-select">
+                                <select name="category" id="category">
+                                    <option style="background-color: #ffffff;" value="" selected>&nbsp;&nbsp;&nbsp;{:__lang('Category')}</option>
+                                    {volist name="nav2" id="v"}
+                                    {if condition="($v.classify == 'service')"}
+                                    {volist name="v.childlist" id="vv"}
+                                    {volist name="vv.childlist" id="vvv"}
+                                    <option style="color: #808080;background-color: #f4f4f4;" value="{$vvv.id}">&nbsp;&nbsp;&nbsp;{:__lm($vvv,'name')}</option>
+                                    {volist name="vvv.childlist" id="vvvv"}
+                                    <option style="color:#333;background-color: #ffffff;" value="{$vvvv.id}">&nbsp;&nbsp;&nbsp; ├ {:__lm($vvvv,'name')}</option>
+                                    {volist name="vvvv.childlist" id="vvvvv"}
+                                    <option style="color:#808080;background-color: #ffffff;" value="{$vvvvv.id}">&nbsp;&nbsp;&nbsp; │├ {:__lm($vvvvv,'name')}</option>
+                                    {/volist}
+                                    {/volist}
+                                    {/volist}
+                                    {/volist}
+                                    {else /}
+                                    {/if}
+                                    {/volist}
+                                </select>
+                            </div>
+                            <li>
+                                <div class="download-search">
+                                    <input type="text" value="" name="downkeys" id="downkeys" placeholder="{:__lang('Please enter a name')}" />
+                                </div>
+                                <input type="submit" value="" class="download-button" />
+                            </li>
+                        </ul>
+                    </form>
+                </div>
+            </div>
+            <div class="download-bottom">
+                <div class="download-item title wow fadeInUp" data-wow-delay="0.7s">
+                    <li>{:__lang('Name')}</li>
+                    <li>{:__lang('Classification')}</li>
+                    <li>{:__lang('Type')}</li>
+                    <li>{:__lang('Version')}</li>
+                    <li>{:__lang('Time')}</li>
+                    <li>{:__lang('Operate')}</li>
+                </div>
+                {volist name="down" id="v"}
+                {eq name="mod" value="0"}<div class="download-item bg1 wow fadeInUp" data-wow-delay="0.8s">{/eq}
+                {eq name="mod" value="1"}<div class="download-item bg2 wow fadeInUp" data-wow-delay="0.8s">{/eq}
+                    <li>{$v.title}</li>
+                    <li>{:__lm($navId[$v.column_id],'name')}</li>
+                    <li>{$downType[$v['d_type']]??''}</li>
+                    <li>{$v.d_version}</li>
+                    <li>{$v.time}</li>
+                    <li><a href="{$v.d_file}" target="_blank" class="d"></a></li>
+                </div>
+                {/volist}
+            </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.8s">{$downPage}</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 93 - 0
addons/wwh/view/default/detail_faq.html

@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="faq-detail">
+    <div class="container-outer">
+        <div class="faq-top">
+            <div class="faq-num wow fadeInUp" data-wow-delay="0.5s">{:__lang('Share')} {$faqCount} {:__lang('Strip')}</div>
+            <form method="get" action="" class="wow fadeInUp" data-wow-delay="0.6s">
+                <div class="faq-search">
+                    <input type="text" value="" name="faqkeys" id="faqkeys" placeholder="{:__lang('Please enter a name')}" />
+                </div>
+                <input type="submit" value="" class="faq-button" />
+            </form>
+        </div>
+        <div class="faq-bottom">
+            {volist name="faq" id="v"}
+            <li class="faq-item wow fadeInUp" data-wow-delay="0.7s">
+                <div class="title">{$v.title}</div>
+                <div class="main" style="display: none;">
+                    <div class="text">{$v.content}</div>
+                </div>
+            </li>
+            {/volist}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.7s">{$faqPage}</div>
+<!--底部-->
+{include file="footer" /}
+<script type="text/javascript">
+    $('.faq-item .title').click(function() {
+        $(this).parent().parent().siblings().find('.title').removeClass('cur');
+        $(this).parent().parent().siblings().find('.main').slideUp();
+        if($(this).siblings('.main').length > 0) {
+            $(this).toggleClass('cur');
+            $(this).siblings('.main').stop(true, true).slideToggle();
+            if($(this).siblings('.main').css('display') == "block") {
+                $(this).parents('.faq-item').siblings().find('.title').removeClass('cur');
+                $(this).parents('.faq-item').siblings().find('.main').slideUp();
+            }
+        }
+    });
+</script>
+</body>
+</html>

+ 81 - 0
addons/wwh/view/default/detail_honor.html

@@ -0,0 +1,81 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="honor-detail">
+    <div class="container-outer">
+        <div class="honor-list-box">
+            {volist name="honor" id="v"}
+            <div class="honor-item wow fadeInUp" data-wow-delay="0.5s">
+                <a href="{$v.image|cdnurl}">
+                    <div class="text">
+                        <div class="type"><span>{$honorType[$v['type']]??''}</span> <span>{$v.zsdate}</span></div>
+                        <div class="title">{$v.name}</div>
+                        <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/honor_size.png" class="img-block">
+                        </div>
+                    </div>
+                </a>
+            </div>
+            {/volist}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.5s">{$honorPage}</div>
+<!--底部-->
+{include file="footer" /}
+<script type='text/javascript' src="__CDN__/assets/addons/wwh/js/touchTouch.jquery.js"></script>
+<script type="text/javascript">
+    $(".honor-list-box").each(function(){
+        $(this).find("a").touchTouch();
+    });
+</script>
+</body>
+</html>

+ 297 - 0
addons/wwh/view/default/detail_join.html

@@ -0,0 +1,297 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<style>
+    .upload .input input[type="file"]{
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        opacity: 0;
+    }
+</style>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="join-detail">
+    <div class="container-outer">
+        <div class="join-box">
+            <div class="top">
+                <form method="get" action="" class="clearfix">
+                    <div class="join-option">
+                        <div class="dept wow fadeInUp" data-wow-delay="0.5s">
+                            <select name="branch" id="branch">
+                                <option value="" selected>{:__lang('All Sectors')}</option>
+                                {volist name="deptList" id="v"}
+                                <option value="{$v.dept}">{$v.dept}</option>
+                                {/volist}
+                            </select>
+                        </div>
+                        <div class="add wow fadeInUp" data-wow-delay="0.6s">
+                            <select name="address" id="address">
+                                <option value="" selected>{:__lang('Work Location')}</option>
+                                {volist name="addrList" id="v"}
+                                <option value="{$v.addr}">{$v.addr}</option>
+                                {/volist}
+                            </select>
+                        </div>
+                    </div>
+                    <div class="join-search wow fadeInUp" data-wow-delay="0.7s">
+                        <div class="so-inp">
+                            <input type="text" value="" name="jonKeywords" id="jonKeywords" placeholder="{:__lang('Search for job positions')}" />
+                        </div>
+                        <input type="submit" value="" class="join-button" />
+                    </div>
+                </form>
+            </div>
+            <div class="bottom">
+                {volist name="join" id="v"}
+                <div class="join-item wow fadeInUp" data-wow-delay="0.8s">
+                    <div class="recruit-top">
+                        <div class="recruit-top-box clearfix">
+                            <div class="recruit-top-left">
+                                <div class="psn">
+                                    <p>{$v.name}</p>
+                                </div>
+                            </div>
+                            <div class="recruit-top-right clearfix">
+                                <div class="req">
+                                    <p>{$v.dept}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.addr}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.num}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.xueli}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.time}</p>
+                                </div>
+                            </div>
+                            <div class="drop-box">
+                                <div class="drop-img">
+                                    <img src="__CDN__/assets/addons/wwh/images/down_arrow1.svg" alt="" class="drop-ico1">
+                                    <img src="__CDN__/assets/addons/wwh/images/down_arrow2.svg" alt="" class="drop-ico2">
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="recruit-content">
+                        <p>{$v.content}</p>
+                        <a href="javascript:;" class="join-more" onclick="showForm(this.name)" name="{$v.name}">{:__lang('Apply Now')}</a>
+                    </div>
+                </div>
+                {/volist}
+            </div>
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.8s">{$joinPage}</div>
+<!--底部-->
+{include file="footer" /}
+<script>	
+    function showForm(e) {
+        // 安全转义输入值
+        var escapedE = $('<div/>').text(e).html();
+
+        // 使用数组join方式构建HTML字符串
+        var htmlParts = [
+            '<form id="resume" method="post" class="join-form">',
+            '    <div class="title">{:__lang("Welcome to join us")}</div>',
+            '    <div class="message-text"><input type="text" placeholder="{:__lang("Full Name")}" name="realname2" id="realname2" autocomplete="name" maxlength="50"></div>',
+            '    <div class="message-text"><input type="tel" placeholder="{:__lang("Contact Number")}" name="tel2" id="tel2" autocomplete="tel" maxlength="20"></div>',
+            '    <div class="message-text"><input type="text" placeholder="{:__lang("Post")}" name="gangwei2" id="gangwei2" value="' + escapedE + '" readonly style="background-color: #eeeeee;cursor: not-allowed;"></div>',
+            '    <div class="upload">',
+            '        <div class="text"><strong>{:__lang("Upload Resume")}*</strong><span>{:__lang("Support")} word、excel、pdf、ppt</span></div>',
+            '        <div class="input">',
+            '            <span id="file_name"></span>',
+            '            <div class="right">',
+            '                <span>{:__lang("Upload")}</span>',
+            '                <input type="file" name="url" id="url" onchange="changeFile(this)" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf">',
+            '            </div>',
+            '        </div>',
+            '    </div>',
+            '    <div class="validate">',
+            '        <div class="message-text"><input type="text" placeholder="{:__lang("Verification code")}" name="verify2" id="verify2" autocomplete="off"></div>',
+            '        <img id="verifyImgs2" class="verify-img" src="{:addon_url("wwh/index/verify")}" onclick="this.src=\'{:addon_url("wwh/index/verify")}?seed=\'+Math.random()">',
+            '    </div>',
+            '    <div class="resume-subbox"><button type="submit" class="resume-submit">{:__lang("Submit")}</button></div>',
+            '    {:token()}',
+            '</form>'
+        ];
+
+        var html = htmlParts.join('');
+
+        var formLayer = layer.open({
+            type: 1,
+            title: false,
+            closeBtn: 1,
+            shadeClose: false,
+            anim: 1,
+            area: ['auto', 'auto'],
+            content: html,
+        });
+
+        // 表单submit事件
+        $(document).on('submit', '#resume', function(event) {
+            event.preventDefault();
+
+            var form = this;
+            var formdata = new FormData(form);
+            var realname2 = $.trim($("#realname2").val());
+            var tel2 = $.trim($("#tel2").val());
+            var gangwei2 = $.trim($("#gangwei2").val());
+            var url = $.trim($("#url").val());
+            var verify2 = $.trim($("#verify2").val());
+
+            // 验证逻辑
+            if (!realname2) {
+                layer.alert('{:__lang(\'Please fill in your name\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!tel2) {
+                layer.alert('{:__lang(\'Please provide your phone number\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!/^1[3-9]\d{9}$/.test(tel2)) {
+                layer.alert('{:__lang(\'Please provide a valid phone number\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!gangwei2) {
+                layer.alert('{:__lang(\'Please select the position to apply for\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!url) {
+                layer.alert('{:__lang(\'Please upload your resume\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!verify2) {
+                layer.alert('{:__lang(\'Please fill in the verification code\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            // 显示加载状态
+            var submitBtn = $(form).find('.resume-submit');
+            submitBtn.prop('disabled', true).text('{:__lang("Submitting...")}');
+
+            $.ajax({
+                url: "{:addon_url('wwh/index/injoin')}",
+                type: "POST",
+                data: formdata,
+                cache: false,
+                contentType: false,
+                processData: false,
+                dataType: "json",
+                complete: function() {
+                    submitBtn.prop('disabled', false).text('{:__lang("Submit")}');
+                },
+                success: function(mes) {
+                    if (mes.code === 1) {
+                        layer.alert(mes.msg || "{:__lang(\'Submitted Successfully\')}", {
+                            skin: 'layui-layer-lan',
+                            closeBtn: 0,
+                            icon: 1,
+                            end: function() {
+                                layer.close(formLayer);
+                                window.location.reload();
+                            }
+                        });
+                    } else {
+                        layer.alert(mes.msg || '{:__lang(\'Operation failed, please try again\')}', {
+                            skin: 'layui-layer-lan',
+                            closeBtn: 0,
+                            title: "{:__lang(\'Tips\')}:",
+                            icon: 2,
+                            anim: 2
+                        });
+                        $('#verifyImgs2').attr('src', '{:addon_url("wwh/index/verify")}?seed=' + Math.random());
+                    }
+                },
+                error: function() {
+                    layer.alert('{:__lang(\'Network error, please try again\')}', {
+                        skin: 'layui-layer-lan',
+                        closeBtn: 0,
+                        title: "{:__lang(\'Tips\')}:",
+                        icon: 2,
+                        anim: 2
+                    });
+                    $('#verifyImgs2').attr('src', '{:addon_url("wwh/index/verify")}?seed=' + Math.random());
+                }
+            });
+        });
+    }
+
+    function changeFile(obj) {
+        var fileName = $(obj).val().split('\\').pop();
+        if (fileName.length > 50) {
+            fileName = fileName.substring(0, 50) + '...';
+        }
+        $("#file_name").text(fileName);
+    }
+</script>
+<script type="text/javascript">
+    $(function () {
+        $(".join-item .recruit-top").click(function(){
+            $(this).siblings(".recruit-content").slideToggle();
+            $(this).parents().siblings().find(".recruit-content").slideUp();
+            $(this).parent().toggleClass("on");
+            $(this).parent().siblings().removeClass("on");
+        })
+    });
+</script>
+</body>
+</html>

+ 84 - 0
addons/wwh/view/default/detail_news.html

@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$archives.keywords}"/>
+    <meta name="description" content="{$archives.description}"/>
+    <title>{$archives.title} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban4_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner4|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{:__lm($top,'name')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a>
+                <span class="dis">/</span>
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$archives.column_id]['diyname'], ':id'=>$archives.id])}" class="cur dis">{$archives.title}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="news-detail">
+    <div class="container-outer">
+        <div class="news-detail-box">
+            <div class="container">
+                <div class="news-detail-top wow fadeInUp" data-wow-delay="0.5s">
+                    <div class="news-top-tit">
+                        <h1>{$archives.title}</h1>
+                        <div class="type"><a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a></div>
+                    </div>
+                    <div class="text">
+                        <span>{:__lang('Release Time')}:{$archives.time}</span>
+                        <span>{:__lang('Browse')}:{$archives.views}</span>
+                    </div>
+                </div>
+                <div class="news-detail-main wow fadeInUp" data-wow-delay="0.6s">{$archives.content}</div>
+                <div class="news-detail-page">
+                    {if empty($nafter)}<a class="prev wow fadeInLeft" data-wow-delay="0.6s"><span class="bt">{:__lang('Front')}</span><span class="txt">{:__lang('No More')}</span></a>{else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$nafter.id])}" class="prev wow fadeInLeft" data-wow-delay="0.6s"><span class="bt">{:__lang('Front')}</span><span class="txt">{$nafter.title}</span></a>
+                    {/if}
+                    {if empty($nfront)}<a class="next wow fadeInRight" data-wow-delay="0.6s"><span class="bt">{:__lang('After')}</span><span class="txt">{:__lang('No More')}</span></a>{else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$nfront.id])}" class="next wow fadeInRight" data-wow-delay="0.6s"><span class="bt">{:__lang('After')}</span><span class="txt">{$nfront.title}</span></a>
+                    {/if}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 68 - 0
addons/wwh/view/default/detail_partner.html

@@ -0,0 +1,68 @@
+ <!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban6_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner6|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur" {/if}>{:__lm($top,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="partner-detail">
+    <div class="container-outer">
+        <div class="partner-detail-list">
+            {volist name="partner" id="v"}
+            <div class="partner-detail-item wow fadeInUp" data-wow-delay="0.5s">
+                <a href="javascript:;">
+                    <div class="logo"><img src="{$v.image|cdnurl}" class="img-center" alt=""></div>
+                    <div class="title">{$v.title}</div>
+                </a>
+            </div>
+            {/volist}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.5s">{$partnerPage}</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 146 - 0
addons/wwh/view/default/detail_product.html

@@ -0,0 +1,146 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$archives.keywords}"/>
+    <meta name="description" content="{$archives.description}"/>
+    <title>{$archives.title} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban1_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner1|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{:__lm($top,'name')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a>
+                <span class="dis">/</span>
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$archives.column_id]['diyname'], ':id'=>$archives.id])}" class="cur dis">{$archives.title}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="product-detail">
+    <div class="container-outer">
+        <div class="product-top">
+            <div class="product-pic swiper-container wow fadeInLeft" data-wow-delay="0.5s">
+                <div class="swiper-wrapper">
+                    {foreach name="archives['lunbo']" item="v"}
+                    <div class="swiper-slide" style="background-image:url('{$v|cdnurl}');">
+                        <a href="{$v|cdnurl}"><ul><li><img src="{$v|cdnurl}" alt=""></li></ul></a>
+                    </div>
+                    {/foreach}
+                </div>
+                <div class="swiper-pagination"></div>
+                <div class="swiper-button-next"></div>
+                <div class="swiper-button-prev"></div>
+            </div>
+            <div class="product-info wow fadeInRight" data-wow-delay="0.5s">
+                <h3>{$archives.title}</h3>
+                <h4>{$archives.p_pn}</h4>
+                <div class="product-text">{$archives.description}</div>
+                <div class="ty-more"><a href="javascript:;" class="click-message"><span>{:__lang('Product Consultation')}</span><i></i></a></div>
+            </div>
+        </div>
+        <div class="product-bottom wow fadeInUp" data-wow-delay="0.6s">
+            <div class="product-bottom-box">
+                <div class="product-bottom-nav">
+                    <li class="cur">{:__lang('Function')}
+                    <li>{:__lang('Parameters')}
+                    <li>{:__lang('Size')}
+                </div>
+                <div class="product-bottom-tab swiper-container swiper-no-swiping">
+                    <div class="swiper-wrapper">
+                        <div class="swiper-slide">
+                            <div class="zc-detail-text">
+                                <div class="text">{$archives.p_func_content}</div>
+                            </div>
+                        </div>
+                        <div class="swiper-slide">
+                            <div class="zc-detail-text">
+                                <div class="text">{$archives.p_tech_content}</div>
+                            </div>
+                        </div>
+                        <div class="swiper-slide">
+                            <div class="product-size-img">
+                                <img src="{$archives.p_shape_image|cdnurl}">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+<script type='text/javascript' src="__CDN__/assets/addons/wwh/js/touchTouch.jquery.js"></script>
+<script type="text/javascript">
+    $(".product-pic").each(function(){
+        $(this).find("a").touchTouch();
+    });
+
+    var swiper1 = new Swiper('.product-pic', {
+        spaceBetween: 0,
+        autoHeight: true,
+        // loop : true,
+        // autoplay: {
+        // 	delay: 5000,
+        // 	disableOnInteraction: false,
+        // },
+        pagination: {
+            el: '.swiper-pagination',
+            clickable: true,
+        },
+        navigation: {
+            nextEl: '.swiper-button-next',
+            prevEl: '.swiper-button-prev',
+        },
+    });
+
+    var mySwiper = new Swiper('.product-bottom-tab', {
+        autoHeight: true,
+        slidesPerView: 1,
+    });
+    $('.product-bottom-nav li').on('click', function(e) {
+        e.preventDefault();
+        $(".product-bottom-nav li").removeClass('cur');
+        $(this).addClass('cur');
+        var index = $(this).index();
+        mySwiper.slideTo(index,0,false);
+        mySwiper.updateAutoHeight();
+    });
+</script>
+</body>
+</html>

+ 93 - 0
addons/wwh/view/default/detail_qa.html

@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="qa-detail">
+    <div class="container-outer">
+<!--        <div class="title wow fadeInUp" data-wow-delay="0.5s">{:__lang('Please enter the serial number')}</div>-->
+        <form method="get" action="" class="qa-search wow fadeInUp" data-wow-delay="0.6s">
+            <input type="text" name="qakeys" id="qakeys" placeholder="{:__lang('Please enter the serial number')}" value="" class="input">
+            <input type="submit" value="{:__lang('Submit')}" class="submit">
+        </form>
+        {if isset($qa)}
+        {if !empty($qa)}
+        {volist name="qa" id="v"}
+        <div class="content wow fadeInUp" data-wow-delay="0.8s">
+            <div class="left">
+                <div class="img"><img src="{$v.image}" alt=""></div>
+                <div class="item">
+                    <li><div class="tit">{:__lang('Name')}</div><div class="text">{$v.name}</div></li>
+                    <li><div class="tit">{:__lang('Model')}</div><div class="text">{$v.model}</div></li>
+                    <li><div class="tit">{:__lang('Serial Number')}</div><div class="text">{$v.sn}</div></li>
+                </div>
+            </div>
+            <div class="right">
+                <div class="item">
+                    <li><div class="tit">{:__lang('Customer Unit')}</div><div class="text">{$v.custom}</div></li>
+                    <li><div class="tit">{:__lang('Customer Phone')}</div><div class="text">{$v.phone|substr_replace='****',3,4}</div></li>
+                    <li><div class="tit">{:__lang('Warranty Start Date')}</div><div class="text">{$v.fhdate}</div></li>
+                    <li><div class="tit">{:__lang('Warranty End Date')}</div><div class="text">{$v.dqdate}</div></li>
+                </div>
+            </div>
+        </div>
+        {/volist}
+        {elseif $showNoQa}
+        <div class="pro-img wow fadeInUp" data-wow-delay="0.8s">
+            <img src="__CDN__/assets/addons/wwh/images/none.png" alt="">
+            <div class="pro-text">{:__lang('No relevant information found')}</div>
+        </div>
+        {/if}
+        {/if}
+    </div>
+</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 62 - 0
addons/wwh/view/default/detail_service.html

@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{if condition="($navCur.parent_id == '0')"}{:__lang('Strategy')}{else /}{:__lm($navCur,'name')}{/if}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="service-detail">
+    <div class="container-outer">
+        <div class="service-detail-box wow fadeInUp" data-wow-delay="0.5s">
+            <div class="container">{$service.content|default=''}</div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 194 - 0
addons/wwh/view/default/footer.html

@@ -0,0 +1,194 @@
+<div class="footer">
+    <div class="footer-content-top container-outer">
+        <div class="footer-item">
+            <div class="footer-item-top">
+                <div class="footer-logo"><a href="{:addon_url('wwh/index/index')}"><img src="{$site.footer_logo|cdnurl}" alt=""></a></div>
+            </div>
+            <div class="footer-item-bottom">
+                <div class="footer-contact">
+                    <li>
+                        <span class="font">{$site.tel}</span>
+                    </li>
+                    <li>
+                        <span>{:__lang('Email')}:{$site.email}</span>
+                    </li>
+                    <li>
+                        <span>{:__lang('Address')}:{$site.address}</span>
+                    </li>
+                </div>
+            </div>
+        </div>
+        <div class="footer-item">
+            <div class="footer-item-top">
+                <div class="footer-link">{:__lang('Link Navigation')}</div>
+            </div>
+            <div class="footer-item-bottom">
+                <div class="footer-nav">
+                    {$site.content}
+                </div>
+            </div>
+        </div>
+        <div class="footer-item">
+            <div class="footer-item-top">
+                <div class="footer-link">{:__lang('More Media')}</div>
+            </div>
+            <div class="footer-item-bottom">
+                <div class="footer-social">
+                    <li>
+                        <a href="javascript:;" class="click-message" title="{:__lang('Customer Message')}">
+                            <img src="__CDN__/assets/addons/wwh/images/message.png" class="img-center" alt="{:__lang('Customer Message')}">
+                        </a>
+                    </li>
+                    <li>
+                        <a href="{$site.weibo}" target="_blank">
+                            <img src="__CDN__/assets/addons/wwh/images/weibo.png" class="img-center" alt="{:__lang('Weibo')}">
+                        </a>
+                    </li>
+                    <li>
+                        <a>
+                            <img src="__CDN__/assets/addons/wwh/images/wechat.png" class="img-center" alt="{:__lang('WeChat')}">
+                        </a>
+                        <div class="footer-img-show"><img src="{$site.wechat|cdnurl}" class="img-center"></div>
+                    </li>
+                    <li>
+                        <a>
+                            <img src="__CDN__/assets/addons/wwh/images/douyin.png" class="img-center" alt="{:__lang('Tiktok')}">
+                        </a>
+                        <div class="footer-img-show"><img src="{$site.douyin|cdnurl}" class="img-center"></div>
+                    </li>
+                    <li>
+                        <a href="javascript:;" class="return-top" title="{:__lang('Top')}">
+                            <img src="__CDN__/assets/addons/wwh/images/top.png" class="img-center">
+                        </a>
+                    </li>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="footer-content-bottom">
+        <div class="container-outer">
+            <div class="footer-copy">{$site.copyright}<a href="{$site.link2}" rel="nofollow" target="_blank">{$site.beian}</a></div>
+            <div class="footer-beian">
+                <a href="{$site.link1}"><i><img src="__CDN__/assets/addons/wwh/images/beian.png" class="img-center"></i><span>{$site.gongwang}</span></a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 客户留言 -->
+<div class="message-bg">
+    <div class="message-wrapper">
+        <div class="message-box">
+            <form id="message" method="post">
+                <div class="message-title">
+                    <h5>{:__lang('Message Inquiry')}</h5>
+                </div>
+                <div class="message-list">
+                    <div class="message-text">
+                        <input type="text" placeholder="{:__lang('Please enter your name')}" name="realname" id="realname" autocomplete="on">
+                    </div>
+                    <div class="message-text">
+                        <input type="text" placeholder="{:__lang('Please enter your phone number')}" name="tel" id="tel" autocomplete="on">
+                    </div>
+                    <div class="message-text">
+                        <input type="text" placeholder="{:__lang('Please enter your email address')}" name="email" id="email" autocomplete="on">
+                    </div>
+                    <div class="message-text ht">
+                        <textarea name="content" id="content" placeholder="{:__lang('The information you expect to know')}"></textarea>
+                    </div>
+                    <div class="verify-group">
+                        <div class="message-text left">
+                            <input type="text" placeholder="{:__lang('Verification Code')}" name="verify" id="verify" autocomplete="off">
+                        </div>
+                        <div class="verify-img right">
+                            <img id="verifyImgs" src="{:addon_url('wwh/index/verify')}" onclick="this.src='{:addon_url('wwh/index/verify')}?seed='+Math.random()" />
+                        </div>
+                    </div>
+                </div>
+				{:token()}
+                <div class="message-subbox clearfix">
+                    <div class="message-submit">
+                        <p>{:__lang('Submit')}</p>
+                    </div>
+                </div>
+            </form>
+        </div>
+        <div class="message-close">
+            <img src="__CDN__/assets/addons/wwh/images/guanbi1.png" alt="" class="img1">
+            <img src="__CDN__/assets/addons/wwh/images/guanbi2.png" alt="" class="img2">
+        </div>
+    </div>
+</div>
+<script src="__CDN__/assets/addons/wwh/js/layer/layer.js"></script>
+<script type="text/javascript">
+    //客户留言
+    $(".message-submit").click(function(){
+        var form = document.getElementById("message");
+        var formdata = new FormData(form);
+
+        var realname=$.trim($("#realname").val());
+        var tel=$.trim($("#tel").val());
+        var email=$.trim($("#email").val());
+        var content=$.trim($("#content").val());
+        var verify=$.trim($("#verify").val());
+
+        // 验证逻辑
+        if(!realname){showError('{:__lang(\'Please fill in your name\')}');return false;}
+        if(!tel){showError('{:__lang(\'Please provide your phone number\')}');return false;}
+        if(!/^1[3-9]\d{9}$/.test(tel)){showError('{:__lang(\'Please provide a valid phone number\')}');return false;}
+        if(!email){showError('{:__lang(\'Please fill in your email address\')}');return false;}
+        if(!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email)){showError('{:__lang(\'Please provide a valid email address\')}');return false;}
+        if(!content){showError('{:__lang(\'Please fill in the message content\')}');return false;}
+        if(!verify){showError('{:__lang(\'Please fill in the verification code\')}');return false;}
+
+        // 显示加载状态
+        $(this).prop('disabled', true);
+
+        $.ajax({
+            url: "{:addon_url('wwh/index/message')}",
+            type: "POST",
+            data: formdata,
+            cache: false,
+            contentType: false,
+            processData: false,
+            dataType: "json",
+            complete: function() {
+                $(".message-submit").prop('disabled', false);
+            },
+            success: function(response){
+                if(response.code === 1){
+                    layer.alert(response.msg, {
+                        icon: 1,
+                        end: function(){
+                            window.location.reload();
+                        }
+                    });
+                } else {
+                    showError(response.msg);
+                    fleshVerify();
+                }
+            },
+            error: function() {
+                showError('{:__lang(\'Network error, please try again\')}');
+                fleshVerify();
+            }
+        });
+
+        // 统一错误显示
+        function showError(msg) {
+            layer.alert(msg, {
+                skin: 'layui-layer-lan',
+                closeBtn: 0,
+                title: "{:__lang(\'Tips\')}:",
+                icon: 2,
+                anim: 2
+            });
+        }
+
+        //重载验证码
+        function fleshVerify(){
+            $('#verifyImgs').attr('src','{:addon_url('wwh/index/verify')}?seed='+Math.random());
+        }
+
+        return false;
+    });
+</script>

+ 86 - 0
addons/wwh/view/default/header.html

@@ -0,0 +1,86 @@
+<div class="header">
+  <div class="header-content">
+    <a class="header-logo" href="{:addon_url('wwh/index/index')}">
+      <img class="logo1" src="{$site.logo|cdnurl}" alt="">
+      <img class="logo2" src="{$site.logo1|cdnurl}" alt="">
+    </a>
+    <div class="header-right">
+      <div class="header-nav">
+        <ul>
+          {volist name="nav" id="v"}
+          <li {if $navCur.classify == $v.classify}class="cur"{/if} {if $v.childlist}class="has-sub"{/if}><a href="{if empty($v.diyname)}{$v.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$v.diyname])}{/if}">{:__lm($v,'name')}</a>
+            {if $v.childlist}
+            <ul>
+              {volist name="v.childlist" id="vv"}
+              <li class="{if $vv.childlist}has-sub{/if}"><a href="{if empty($vv.diyname)}{$vv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vv.diyname])}{/if}">{:__lm($vv,'name')}</a>
+                {if $vv.childlist}
+                <ul>
+                  {volist name="vv.childlist" id="vvv"}
+                  <li class="{if $vvv.childlist}has-sub{/if}"><a href="{if empty($vvv.diyname)}{$vvv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vvv.diyname])}{/if}">{:__lm($vvv,'name')}</a>
+                    {if $vvv.childlist}
+                    <ul>
+                      {volist name="vvv.childlist" id="vvvv"}
+                      <li><a href="{if empty($vvvv.diyname)}{$vvvv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vvvv.diyname])}{/if}">{:__lm($vvvv,'name')}</a></li>
+                      {/volist}
+                    </ul>
+                    {/if}
+                  </li>
+                  {/volist}
+                </ul>
+                {/if}
+              </li>
+              {/volist}
+            </ul>
+            {/if}
+          </li>
+          {/volist}
+        </ul>
+      </div>
+      <div class="header-search">
+        {if $switch_lang == '1'}
+        <div class="lang">
+          <a href="javascript:;"><i><img src="__CDN__/assets/addons/wwh/images/lang.png" alt=""></i><span>{:__lang('English')}</span></a>
+          <div class="lang-show">
+            <ul>
+              <a href="javascript:;" onclick="switchLang(1); return false;" target="_self">简体中文</a>
+              <a href="javascript:;" onclick="switchLang(2); return false;" target="_self">English</a>
+            </ul>
+          </div>
+        </div>
+        <div class="m-lang">
+          {if $lang == '1'}
+          <a href="javascript:;" onClick="switchLang(2); return false;" target="_self">EN</a>
+          {/if}
+          {if $lang == '2'}
+          <a href="javascript:;" onclick="switchLang(1); return false;" target="_self">CN</a>
+          {/if}
+        </div>
+        {/if}
+        <div class="search">
+          <a href="javascript:;"><i><img src="__CDN__/assets/addons/wwh/images/so.svg" alt=""></i></a>
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="search-show">
+    <div class="search-show-content">
+      <div class="search-show-top">
+        <form name="search" id="search" method="get" action="{:addon_url('wwh/search/index')}">
+          <input type="submit" class="search-submit" value="">
+          <input type="text" class="search-input" placeholder="{:__lang('Search')}" id="keywords" name="keywords">
+          <input type="hidden" value="1" name="type">
+          <input type="hidden" value="1" name="page">
+          <div class="close"></div>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
+<script>
+  function switchLang(lang) {
+    const baseUrl = "{:addon_url('wwh/index/switchLang')}";
+    const targetUrl = "{:addon_url('wwh/index/index')}";
+    const encodedUrl = btoa(targetUrl);
+    window.location.href = `${baseUrl}?lang=${lang}&url=${encodedUrl}`;
+  }
+</script>

+ 284 - 0
addons/wwh/view/default/index.html

@@ -0,0 +1,284 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$site.keywords}"/>
+    <meta name="description" content="{$site.description}"/>
+    <title>{:__lang('Home')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.counterup.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.waypoints.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- Banner -->
+<div class="index-banner-swiper swiper-container">
+    <div class="swiper-wrapper">
+        {volist name="banner" id="v" key="k"}
+        <div class="swiper-slide">
+            <div class="index-banner-item">
+                <div class="text">
+                    <div class="big ani" swiper-animate-effect="fadeInLeft" swiper-animate-duration="1s" swiper-animate-delay="0.3s"><div>{$v.bigfont}</div></div>
+                    <div class="small ani" swiper-animate-effect="fadeInLeft" swiper-animate-duration="1s" swiper-animate-delay="0.6s"><div>{$v.font}</div></div>
+                    <div class="more-group">
+                        <div class="ty-more ani" swiper-animate-effect="fadeInLeft" swiper-animate-duration="1s" swiper-animate-delay="0.9s"><a href="{$v.url}" target="_blank"><span>{:__lang('View More')}</span><i></i></a></div>
+                        {if condition="empty($v.video_image) neq true"}
+                        <div class="play ani" swiper-animate-effect="fadeInRight" swiper-animate-duration="1s" swiper-animate-delay="1.2s">
+                            <a href="javascript:;" class="m-video ani" swiper-animate-effect="flash" swiper-animate-duration="1s" swiper-animate-delay="2.2s" data-src="{$v.video_image|cdnurl}">
+                                <i></i>
+                                <span>Play Video</span>
+                            </a>
+                        </div>
+                        {/if}
+                    </div>
+                </div>
+                <div class="img">
+                    <div class="pic" style="background-image: url('{$v.pc_image|cdnurl}');">
+                        <img src="__CDN__/assets/addons/wwh/images/banner_size.png" class="img-block" alt="">
+                    </div>
+                    <div class="mpic" style="background-image: url('{$v.phone_image|cdnurl}');">
+                        <img src="__CDN__/assets/addons/wwh/images/banner_size.png" class="img-block" alt="">
+                    </div>
+                </div>
+            </div>
+        </div>
+        {/volist}
+    </div>
+    <div class="swiper-pagination banner-pagination"></div>
+    <div class="swiper-button">
+        <div class="swiper-button-prev swiper-index-prev"></div>
+        <div class="swiper-button-next swiper-index-next"></div>
+    </div>
+</div>
+{if $product_show == '1'}
+<!-- 推荐产品 -->
+<div class="index-product">
+    <div class="container-outer">
+        <div class="index-mod-top">
+            <div class="index-mod-title wow fadeInLeft" data-wow-delay="0.3s">
+                <h3>{:__lang('Featured Products')}</h3><i></i>
+            </div>
+            <div class="ty-more wow fadeInRight" data-wow-delay="0.3s">
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>'product'])}" target="_blank"><span>{:__lang('View More')}</span><i></i></a>
+            </div>
+        </div>
+        <div class="bottom">
+            {volist name="productBig" id="v"}
+            <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" target="_blank" class="left items pic wow fadeInUp" data-wow-delay="0.4s" style="background-image: url('{$v.rec_image|cdnurl}');">
+                <img src="__CDN__/assets/addons/wwh/images/index_product_big.png" class="img-block">
+                <div class="title"><h3>{$v.title}</h3></div>
+                <div class="text"><h3>{$v.title}</h3><p>{$v.p_pn}</p></div>
+            </a>
+            {/volist}
+            <div class="right">
+                {volist name="product" id="v"}
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" target="_blank" class="items pic wow fadeInUp" data-wow-delay="0.5s" style="background-image: url('{$v.rec_image|cdnurl}');">
+                    <img src="__CDN__/assets/addons/wwh/images/index_product_small.png" class="img-block">
+                     <div class="title"><h3>{$v.title}</h3></div>
+                     <div class="text"><h3>{$v.title}</h3><p>{$v.p_pn}</p></div>
+                </a>
+                {/volist}
+            </div>
+        </div>
+    </div>
+</div>
+{/if}
+{if $about_show == '1'}
+<!-- 公司简介 -->
+<div class="index-about">
+    <div class="container-outer">
+        <div class="index-about-wrapper">
+            <div class="index-about-left">
+                <div class="index-mod-top">
+                    <div class="index-mod-title wow fadeInUp" data-wow-delay="0.3s">
+                        <h3>{:__lang('Company Profile')}</h3><i></i>
+                    </div>
+                </div>
+                <div class="index-about-msg wow fadeInUp" data-wow-delay="0.4s">
+                    <p><span>{$home.about_title|htmlentities}</span>{$home.introduction|htmlentities}</p>
+                </div>
+                <ul class="index-about-number wow fadeInUp" data-wow-delay="0.5s">
+                    <li>
+                        <p><strong>{$home.num1|htmlentities}</strong><span>{$home.unit1|htmlentities}</span></p>
+                        <p>{$home.introduce1|htmlentities}</p>
+                    </li>
+                    <li><p><strong>{$home.num2|htmlentities}</strong><span>{$home.unit2|htmlentities}</span></p>
+                        <p>{$home.introduce2|htmlentities}</p>
+                    </li>
+                    <li>
+                        <p><strong>{$home.num3|htmlentities}</strong><span>{$home.unit3|htmlentities}</span></p>
+                        <p>{$home.introduce3|htmlentities}</p>
+                    </li>
+                </ul>
+                <div class="ty-more wow fadeInUp" data-wow-delay="0.6s"><a href="{:addon_url('wwh/column/index', [':diyname'=>'about'])}" target="_blank"><span>{:__lang('View More')}</span><i></i></a></div>
+            </div>
+            <div class="index-about-right wow fadeInRight" data-wow-delay="0.7s">
+                <div class="img">
+                    <div class="pic" style="background-image: url('{$home.image|cdnurl}');">
+                        <img src="__CDN__/assets/addons/wwh/images/index_about_size.png" class="img-block">
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+{/if}
+{if $cases_show == '1'}
+<!-- 解决方案 -->
+<div class="index-cases">
+    <div class="container-outer">
+        <div class="index-mod-top">
+            <div class="index-mod-title wow fadeInLeft" data-wow-delay="0.3s">
+                <h3>{:__lang('Solution')}</h3><i></i>
+            </div>
+            <div class="ty-more wow fadeInRight" data-wow-delay="0.3s">
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>'cases'])}" target="_blank"><span>{:__lang('View More')}</span><i></i></a>
+            </div>
+        </div>
+        <div class="index-cases-list">
+            {volist name="cases" id="v"}
+            <div class="index-cases-item wow fadeInUp" data-wow-delay="0.4s">
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" target="_blank">
+                    <div class="item-box">
+                        <div class="img">
+                            <div class="pic" style="background-image: url('{$v.rec_image|cdnurl}');">
+                                <img src="__CDN__/assets/addons/wwh/images/index_cases_size.png" class="img-block">
+                            </div>
+                            <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                        </div>
+                        <div class="text-box">
+                            <div class="title">
+                                <h3>{$v.title}</h3>
+                                <h5>{$v.description|strip_tags}</h5>
+                                <div class="more">{:__lang('View More')}<i></i></div>
+                            </div>
+                        </div>
+                        <div class="wl">
+                            <div class="line"></div>
+                        </div>
+                    </div>
+                </a>
+            </div>
+            {/volist}
+        </div>
+    </div>
+</div>
+{/if}
+{if $partner_show == '1'}
+<!-- 合作伙伴 -->
+<div class="index-partner">
+    <div class="container-outer">
+        <div class="index-mod-top">
+            <div class="index-mod-title wow fadeInLeft" data-wow-delay="0.3s">
+                <h3>{:__lang('Cooperative Partner')}</h3><i></i>
+            </div>
+            <div class="ty-more wow fadeInRight" data-wow-delay="0.3s">
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>'partner'])}" target="_blank"><span>{:__lang('View More')}</span><i></i></a>
+            </div>
+        </div>
+        <div class="index-partner-list">
+            {volist name="partner" id="v"}
+            <div class="index-partner-item wow fadeInUp" data-wow-delay="0.4s">
+                <a href="javascript:;">
+                    <div class="logo"><img src="{$v.image|cdnurl}" class="img-center" alt=""></div>
+                    <div class="title">{$v.title}</div>
+                </a>
+            </div>
+            {/volist}
+        </div>
+    </div>
+</div>
+{/if}
+{if $news_show == '1'}
+<!-- 新闻中心 -->
+<div class="index-news">
+    <div class="container-outer">
+        <div class="index-mod-top">
+            <div class="index-mod-title wow fadeInLeft" data-wow-delay="0.3s">
+                <h3>{:__lang('News Center')}</h3><i></i>
+            </div>
+            <div class="ty-more wow fadeInRight" data-wow-delay="0.3s">
+                <a href="{:addon_url('wwh/index/column', [':diyname'=>'news'])}" target="_blank"><span>{:__lang('View More')}</span><i></i></a>
+            </div>
+        </div>
+        <div class="index-news-list">
+            {volist name="news" id="v"}
+            <div class="index-news-item wow fadeInUp" data-wow-delay="0.4s">
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                    <div class="img">
+                        <div class="pic" style="background-image: url('{$v.rec_image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/index_news_size.png" class="img-block">
+                        </div>
+                        <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                    </div>
+                    <div class="index-news-text">
+                        <h3>{$v.title}</h3>
+                        <h5>{$v.description|strip_tags}</h5>
+                        <div class="bottom"><h5 class="left">{:__lang('View More')}<i></i></h5><h5 class="right">{$v.time}</h5></div>
+                    </div>
+                </a>
+            </div>
+            {/volist}
+        </div>
+    </div>
+</div>
+{/if}
+<!-- 底部 -->
+{include file="footer" /}
+<link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/video.css">
+<script type='text/javascript' src="__CDN__/assets/addons/wwh/js/video.js"></script>
+<script type="text/javascript">
+    //公司简介数字滚动
+    $('.index-about .index-about-number strong').counterUp({
+        delay: 10,
+        time: 2000
+    });
+
+    var full_height=$(window).height();
+    $('.index-banner-swiper').height(full_height);
+    $('.index-banner-swiper .swiper-slide .img .pic .img-block').height(full_height);
+    $('.index-banner-swiper .swiper-slide .img .mpic .img-block').height(full_height);
+
+    var swiper1 = new Swiper('.index-banner-swiper',{
+        slidesPerView: 1,
+        spaceBetween: 0,
+        effect: 'fade',
+        autoplay: {delay: 8000,stopOnLastSlide: false,disableOnInteraction: true,},
+        pagination: {
+            el: '.banner-pagination',
+            type: 'fraction',
+            renderFraction: function (currentClass, totalClass) { return '<span class="' + currentClass + '"></span>' + '<span class="' + totalClass + '"></span>';},
+            formatFractionCurrent: function (number) {switch(number){case 1:myNum='01';break;case 2:myNum='02';break;case 3:myNum='03';break;case 4:myNum='04';break;case 5:myNum='05';case 6:myNum='06';case 7:myNum='07';break;case 8:myNum='08';break;case 9:myNum='09';break;default:myNum= number}return myNum; },
+            formatFractionTotal: function (number) {switch(number){case 1:myNum='01';break;case 2:myNum='02';break;case 3:myNum='03';break;case 4:myNum='04';break;case 5:myNum='05';case 6:myNum='06';case 7:myNum='07';break;case 8:myNum='08';break;case 9:myNum='09';break;default:myNum= number}return myNum; },
+        },
+        navigation: {
+            nextEl: '.swiper-index-next',
+            prevEl: '.swiper-index-prev',
+        },
+        on:{
+            init: function(){
+                swiperAnimateCache(this); //隐藏动画元素
+                swiperAnimate(this); //初始化完成开始动画
+            },
+            slideChangeTransitionEnd: function(){
+                swiperAnimate(this); //每个slide切换结束时也运行当前slide动画
+            }
+        }
+    });
+</script>
+</body>
+</html>

+ 87 - 0
addons/wwh/view/default/list_cases.html

@@ -0,0 +1,87 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban2_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner2|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur" {/if}>{:__lm($top,'name')}</a>
+                {if $navCur.name !== $top.name}
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+                {/if}
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="cases-list">
+    <div class="container-outer">
+        {volist name="archives" id="v"}
+        <div class="cases-list-item wow fadeInUp" data-wow-delay="0.5s">
+            <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                <div class="item-box">
+                    <div class="img">
+                        <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/list_cases_size.png" class="img-block">
+                        </div>
+                        <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                    </div>
+
+                    <div class="text-box">
+                        <div class="title">
+                            <h3>{$v.title}</h3>
+                            <h5>{$v.description|strip_tags}</h5>
+                            <div class="more">{:__lang('View More')}<i></i></div>
+                        </div>
+                    </div>
+                    <div class="wl">
+                        <div class="line"></div>
+                    </div>
+                </div>
+            </a>
+        </div>
+        {/volist}
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.6s">{$lbPage}</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 82 - 0
addons/wwh/view/default/list_news.html

@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban4_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner4|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur" {/if}>{:__lm($top,'name')}</a>
+                {if $navCur.name !== $top.name}
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+                {/if}
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="news-list">
+    <div class="container-outer">
+        {volist name="archives" id="v"}
+        <div class="news-list-item wow fadeInUp" data-wow-delay="0.5s">
+            <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                <div class="img">
+                    <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                        <img src="__CDN__/assets/addons/wwh/images/list_news_size.png" class="img-block">
+                    </div>
+                    <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                </div>
+                <div class="news-list-text">
+                    <h3>{$v.title}</h3>
+                    <h5>{$v.description|strip_tags}</h5>
+                    <div class="bottom">
+                        <h5 class="left">{:__lang('View More')}<i></i></h5>
+                        <h5 class="right">{$v.time}</h5>
+                    </div>
+                </div>
+            </a>
+        </div>
+        {/volist}
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.5s">{$lbPage}</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 123 - 0
addons/wwh/view/default/list_product.html

@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban1_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner1|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur"{/if}>{:__lm($top,'name')}</a>
+                {if $navCur.name !== $top.name}
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+                {/if}
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="product-list">
+    <div class="container-outer">
+        <div class="left wow fadeInLeft" data-wow-delay="0.5s">
+            <h3>{:__lang('Products')}</h3>
+            <ul>
+                {volist name="nav" id="v"}
+                {if condition="($v.classify == 'product')"}
+                {php}
+                // 获取变量
+                $secondId = $secondId ?? null;
+                $navCurId = $navCur['id'] ?? null;
+                $hasActive = false;
+
+                // 检查是否有激活项
+                foreach ($v['childlist'] as $item) {
+                if ($item['id'] == $secondId || $item['id'] == $navCurId) {
+                $hasActive = true;
+                break;
+                }
+                }
+                {/php}
+                {volist name="v.childlist" id="vv" key="k"}
+                <li class="{if $vv.id == $secondId || $vv.id == $navCur.id}active{elseif $k == 1 && !$hasActive}active{/if}">
+                <h4><a href="{if empty($vv.diyname)}{$vv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vv.diyname])}{/if}">{:__lm($vv,'name')}</a></h4>
+                <div class="pro-second" style="{if $vv.id == $secondId || $vv.id == $navCur.id}display:block;{elseif $k == 1 && !$hasActive}display:block;{/if}">
+                    {volist name="vv.childlist" id="vvv"}
+                    <h6 class="{if $vvv.id == $navCur.id}active{/if}">
+                        <a href="{if empty($vvv.diyname)}{$vvv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vvv.diyname])}{/if}">{:__lm($vvv,'name')}</a>
+                    </h6>
+                    {volist name="vvv.childlist" id="vvvv"}
+                    <div class="pro-third {if $vvvv.id == $navCur.id}active{/if}">
+                        <a href="{if empty($vvvv.diyname)}{$vvvv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vvvv.diyname])}{/if}">{:__lm($vvvv,'name')}</a>
+                    </div>
+                    {/volist}
+                    {/volist}
+                </div>
+                </li>
+                {/volist}
+                {/if}
+                {/volist}
+            </ul>
+        </div>
+        <div class="right">
+            <div class="list">
+                {volist name="archives" id="v"}
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" class="wow fadeInUp" data-wow-delay="0.6s">
+                    <div class="title"><h3>{$v.title}</h3></div>
+                    <div class="text"><h3>{$v.title}</h3><p>{$v.p_pn}</p></div>
+                    <div class="img">
+                        <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/index_product_small.png" class="img-block">
+                        </div>
+                    </div>
+                </a>
+                {/volist}
+            </div>
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.6s">{$lbPage}</div>
+<!-- 底部 -->
+{include file="footer" /}
+<script type="text/javascript">
+    $('.product-list .left').on('click', 'li', function () {
+        $(this).toggleClass('active').siblings().removeClass('active')
+        $(this).children('.pro-second').slideToggle().parent().siblings().children('.pro-second').slideUp()
+    })
+</script>
+</body>
+</html>

+ 134 - 0
addons/wwh/view/default/search.html

@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lang('Search Center')}"/>
+    <meta name="description" content="{:__lang('Search Center')}"/>
+    <title>{:__lang('Search Center')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban7_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner7|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/search/index')}" class="cur">{:__lang('Search Center')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="search-center">
+    <div class="container-outer">
+        <div class="nav wow fadeInUp" data-wow-delay="0.5s">
+            <a href="{:addon_url('wwh/search/index')}?keywords={$keywords|htmlentities}&type=1&page=1" {if $type == 1}class="cur"{/if}>{:__lang('Product')}<strong>{$productCount}</strong></a>
+            <a href="{:addon_url('wwh/search/index')}?keywords={$keywords|htmlentities}&type=2&page=1" {if $type == 2}class="cur"{/if}>{:__lang('Solution')}<strong>{$casesCount}</strong></a>
+            <a href="{:addon_url('wwh/search/index')}?keywords={$keywords|htmlentities}&type=3&page=1" {if $type == 3}class="cur"{/if}>{:__lang('News')}<strong>{$newsCount}</strong></a>
+        </div>
+        <div class="bottom">
+            {if $type == 1}
+            <div class="product-list">
+                <div class="right">
+                    {volist name="list" id="v"}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" class="search wow fadeInUp" data-wow-delay="0.6s" target="_blank">
+                        <div class="title"><h3>{$v.title}</h3></div>
+                        <div class="text"><h3>{$v.title}</h3><p>{$v.p_pn}</p></div>
+                        <div class="img">
+                            <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                                <img src="__CDN__/assets/addons/wwh/images/index_product_small.png" class="img-block">
+                            </div>
+                        </div>
+                    </a>
+                    {/volist}
+                </div>
+            </div>
+            {/if}
+            {if $type == 2}
+            <div class="cases-list">
+                {volist name="list" id="v"}
+                <div class="cases-list-item wow fadeInUp" data-wow-delay="0.6s">
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                        <div class="item-box">
+                            <div class="img">
+                                <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                                    <img src="__CDN__/assets/addons/wwh/images/list_cases_size.png" class="img-block">
+                                </div>
+                                <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                            </div>
+                            <div class="text-box">
+                                <div class="title">
+                                    <h3>{$v.title}</h3>
+                                    <h5>{$v.description|strip_tags}</h5>
+                                    <div class="more">{:__lang('View More')}<i></i></div>
+                                </div>
+                            </div>
+                            <div class="wl">
+                                <div class="line"></div>
+                            </div>
+                        </div>
+                    </a>
+                </div>
+                {/volist}
+            </div>
+            {/if}
+            {if $type == 3}
+            <div class="news-list">
+                {volist name="list" id="v"}
+                <div class="news-list-item wow fadeInUp" data-wow-delay="0.6s">
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                        <div class="img">
+                            <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                                <img src="__CDN__/assets/addons/wwh/images/list_news_size.png" class="img-block">
+                            </div>
+                            <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                        </div>
+                        <div class="news-list-text">
+                            <h3>{$v.title}</h3>
+                            <h5>{$v.description|strip_tags}</h5>
+                            <div class="bottom">
+                                <h5 class="left">{:__lang('View More')}<i></i></h5>
+                                <h5 class="right">{$v.time}</h5>
+                            </div>
+                        </div>
+                    </a>
+                </div>
+                {/volist}
+            </div>
+            {/if}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.6s">{$searchPage}</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 315 - 0
addons/wwh/view/materials/detail_about.html

@@ -0,0 +1,315 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="shortcut icon" href="{$site.logo|cdnurl}">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/reset.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.counterup.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.waypoints.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/javascript.js"></script>
+    <style>
+        /* 公司简介样式 */
+        .company-profile {           
+          max-width: 1200px;
+          margin: 80px auto 0;
+      }
+      
+      .profile-header {
+          margin-bottom: 40px;
+      }
+      
+      .en-title {
+          font-weight: 400;
+          font-size: 30px;
+          color: #737980;
+          line-height: 44px;
+          letter-spacing: 1px;
+          margin-bottom: 5px;
+      }
+      
+      .cn-title {
+          font-size: 32px;
+          color: #333;
+          font-weight: 500;
+          margin-top: 0;
+      }
+      
+      .profile-content {
+          position: relative; /* 添加这一行 */
+          display: flex;
+          align-items: stretch;
+          margin-bottom: 80px;
+      }
+      
+      .profile-left {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: flex-start;
+      }        
+      .profile-text {
+          flex: 1;
+          padding-right: 40px;
+      }        
+      .profile-text p {
+          font-size: 16px;
+          line-height: 1.8;
+          color: #333;
+          margin-bottom: 20px;
+          text-align: justify;
+      }
+      .profile-image {
+          position: relative;
+          cursor: pointer;
+      }
+      
+      .profile-image img {
+          width: 100%;
+          height: 100%;
+          object-fit: cover;
+          display: block;
+      }
+      
+      .play-button {
+          position: absolute;
+          left: 50%;
+          top: 50%;
+          transform: translate(-50%, -50%);
+          width: 64px;
+          height: 64px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          pointer-events: none;
+      }
+      
+      .play-button img {
+          width: 64px;
+          height: 64px;
+          opacity: 0.85;
+      }
+      
+      .profile-image:hover .play-button img {
+          opacity: 1;
+      }
+      
+      /* 公司数据样式 */
+      .company-data {
+          width: 890px;
+          height: 110px;
+          background-color: #fff;
+          box-shadow: 0 0 10px rgba(0,0,0,0.05);
+          position: absolute;
+          bottom: 40px;
+      }
+      
+      .data-box {
+          display: flex;
+          justify-content: space-between;
+          align-items: stretch;
+          height: 100%;
+      }
+      
+      .data-item {
+          flex: 1 1 0;
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          position: relative;
+          height: 110px;
+      }
+      
+      .data-item:not(:last-child)::after {
+          content: '';
+          position: absolute;
+          right: 0;
+          top: 25%;
+          height: 50%;
+          width: 1px;
+          background-color: #cfd2d6;
+      }
+      
+      .data-number-unit {
+          display: flex;
+          align-items: flex-end;
+          justify-content: center;
+      }
+      
+      .data-item h3 {
+          font-weight: 500;
+          font-size: 40px;
+          color: #DF0100;
+          margin: 0;
+          line-height: 1;
+      }
+      
+      .data-unit {
+          font-weight: 400;
+          font-size: 12px;
+          color: #8A9199;
+          margin-left: 4px;
+          margin-bottom: 2px;
+      }
+      
+      .data-title {
+          font-weight: 400;
+          font-size: 12px;
+          color: #737980;
+          /* margin-top: 8px; */
+      }
+
+      .company-intro-section {
+          max-width: 1200px;
+          margin: 60px auto 0;
+          padding: 0 20px;
+      }
+
+      .intro-paragraph {
+          font-size: 16px;
+          color: #333;
+          line-height: 2;
+          text-align: justify;
+          margin-bottom: 40px;
+      }
+
+      .intro-images-row {
+          display: flex;
+          justify-content: space-between;
+          gap: 40px;
+          margin-bottom: 40px;
+      }
+
+      .intro-images-row img {
+          width: 48%;
+          height: 260px;
+          object-fit: cover;
+          border-radius: 6px;
+          box-shadow: 0 2px 12px rgba(0,0,0,0.06);
+      }
+
+      /* .video-modal {
+          position: fixed;
+          left: 0; top: 0; right: 0; bottom: 0;
+          z-index: 9999;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+      }
+      .video-modal-mask {
+          position: absolute;
+          left: 0; top: 0; right: 0; bottom: 0;
+          background: rgba(0,0,0,0.7);
+      }
+      .video-modal-content {
+          position: relative;
+          z-index: 2;
+          background: #000;
+          border-radius: 8px;
+          padding: 20px;
+          box-shadow: 0 8px 32px rgba(0,0,0,0.3);
+      }
+      .video-modal-close {
+          position: absolute;
+          right: 16px;
+          top: 8px;
+          color: #fff;
+          font-size: 32px;
+          cursor: pointer;
+          z-index: 10;
+      }
+      .video-modal video {
+          display: block;
+          background: #000;
+          border-radius: 8px;
+      } */
+  </style>
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="section-banner">
+        <img src="{$site.banner5|cdnurl}" alt="">
+    </div>
+</div>
+<div class="container">
+    <!-- 公司简介 -->
+    <div class="company-profile">
+       <div class="profile-content">
+           <div class="profile-left">
+               <div class="profile-header">
+                   <h2 class="en-title">COMPANY PROFILE</h2>
+                   <h2 class="cn-title">{$site.ban5_t1}</h2>
+               </div>
+               <div class="profile-text">
+                {$about.about_content|default=''}
+               </div>
+               
+           </div>
+           <div class="profile-image" data-video="file/dance.mp4">
+               <img src="{$about.about_image|cdnurl}" alt="公司大楼">
+               <!-- <div class="play-button">
+                   <img src="images/projects/play-icon.png" alt="播放"> -->
+               </div>
+               {if condition="empty($about.about_video) neq true"}
+               <a href="javascript:;" class="play-btn m-video ani" data-src="{$about.about_video|cdnurl}"><i></i></a>
+               {/if}
+           </div>         
+       </div>
+       <!-- 公司简介补充内容 -->
+       <div class="company-intro-section">
+           <p class="intro-paragraph">
+               公司拥有行业级绿色制造创新中心、市级企业技术中心,致力于高性能混凝土、特种混凝土、超高层泵送混凝土技术、固体废弃物及资源综合利用、砂浆开发和智能制造信息化的研究。与南京大学、河海大学、南京工业大学、盐城工学院、高性能土木工程材料国家重点试验室、江苏省建筑科学研究院、中国建筑材料科学研究院等国内外知名院校建立了良好的合作关系,开展国家重点各项课题课题研究。
+               <br>
+               作为南京混凝土协会会长单位,江苏省建筑钢结构混凝土协会副会长单位,全国混凝土协会重点成员单位,中国建材集团旗下"六星"企业,公司通过质量、能源、环境和职业健康安全管理体系认证,获得两化融合体系、三星级绿色建材产品和产品碳足迹认证,纳入首批南京市绿色建材产品采购名录。
+           </p>
+           <div class="intro-images-row">
+               <img src="__CDN__/assets/addons/material/images/about/1.png" alt="公司施工图1">
+               <img src="__CDN__/assets/addons/material/images/about/2.png" alt="公司施工图2">
+           </div>
+           <p class="intro-paragraph">
+               华东新材料致力于打造国内、亚洲优秀的全价值链建筑工程管理专家,为客户提供全寿命周期、全专业、全成本的建筑工程项目管理优质服务,已在不凡施工总承包、工程代建、机电施工总承包、精品幕墙施工等方面建立了差异化的竞争优势。公司将继续大力提升设计及全成本、建筑全寿命周期项目管理能力,实现不凡施工总承包及工程代建并举发展。公司追求精益管理,希望能为客户提供高品质的施工总承包和不凡的工程代建服务,为中国的城市化贡献更多的精品工程。
+           </p>
+       </div>
+   </div>
+</div>
+
+<!--底部-->
+{include file="footer" /}
+<link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/video.css">
+<script type='text/javascript' src="__CDN__/assets/addons/material/js/video.js"></script>
+<!-- <script type="text/javascript">
+    var swiper = new Swiper('.swiper-container', {
+        // autoplay: true, //自动滑动
+        speed: 500,
+        slidesPerView: 'auto',
+        // centeredSlides: true,
+        pagination: {
+            el: '.swiper-pagination',
+            type: 'progressbar',
+        },
+        navigation: {
+            nextEl: '.develop-next',
+            prevEl: '.develop-prev',
+        },
+    });
+</script> -->
+</body>
+</html>

+ 84 - 0
addons/wwh/view/materials/detail_cases.html

@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$archives.keywords}"/>
+    <meta name="description" content="{$archives.description}"/>
+    <title>{$archives.title} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban2_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner2|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{:__lm($top,'name')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a>
+                <span class="dis">/</span>
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$archives.column_id]['diyname'], ':id'=>$archives.id])}" class="cur dis">{$archives.title}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="cases-detail">
+    <div class="container-outer">
+        <div class="cases-detail-box">
+            <div class="container">
+                <div class="cases-detail-top wow fadeInUp" data-wow-delay="0.5s">
+                    <div class="news-top-tit">
+                        <h1>{$archives.title}</h1>
+                        <div class="type"><a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a></div>
+                    </div>
+                    <div class="text">
+                        <span>{:__lang('Release Time')}:{$archives.time}</span>
+                        <span>{:__lang('Browse')}:{$archives.views}</span>
+                    </div>
+                </div>
+                <div class="cases-detail-main wow fadeInUp" data-wow-delay="0.6s">{$archives.content}</div>
+                <div class="cases-detail-page">
+                    {if empty($cafter)}<a class="prev wow fadeInLeft" data-wow-delay="0.6s"><span class="bt">{:__lang('Front')}</span><span class="txt">{:__lang('No More')}</span></a>{else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$cafter.id])}" class="prev wow fadeInLeft" data-wow-delay="0.6s"><span class="bt">{:__lang('Front')}</span><span class="txt">{$cafter.title}</span></a>
+                    {/if}
+                    {if empty($cfront)}<a class="next wow fadeInRight" data-wow-delay="0.6s"><span class="bt">{:__lang('After')}</span><span class="txt">{:__lang('No More')}</span></a>{else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$cfront.id])}" class="next wow fadeInRight" data-wow-delay="0.6s"><span class="bt">{:__lang('After')}</span><span class="txt">{$cfront.title}</span></a>
+                    {/if}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 144 - 0
addons/wwh/view/materials/detail_contact.html

@@ -0,0 +1,144 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<style>
+    #container{
+        height:100%;
+        width:100%;
+    }
+    .amap-icon img{
+        width: 37px;
+        height: 50px;
+    }
+</style>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="contact-detail">
+    <div class="container-outer">
+        <div class="address-items">
+            <div class="item wow fadeInUp" data-wow-delay="0.5s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/tel.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Consultation Hotline')}</div>
+                <div class="text">{$contact.tel|default=''}</div>
+            </div>
+            <div class="item wow fadeInUp" data-wow-delay="0.6s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/mail.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Contact Email')}</div>
+                <div class="text">{$contact.email|default=''}</div>
+            </div>
+            <div class="item wow fadeInUp" data-wow-delay="0.7s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/time.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Working Hours')}</div>
+                <div class="text">{$contact.time|default=''}</div>
+            </div>
+            <div class="item wow fadeInUp" data-wow-delay="0.8s">
+                <div class="icon">
+                    <img src="__CDN__/assets/addons/wwh/images/add.png" class="img-center">
+                    <img src="__CDN__/assets/addons/wwh/images/yuan.png" class="img-block">
+                </div>
+                <div class="title">{:__lang('Contact Address')}</div>
+                <div class="text">{$contact.address|default=''}</div>
+            </div>
+        </div>
+        <div class="market-detail">
+        <div class="market-detail-box flexBetween">
+            <div class="market-left">
+                <ul>
+                    {volist name="market" id="v" key="k"}
+                    <li class="flexStart {eq name="k" value="1"}active{/eq} wow fadeInUp" data-wow-delay="0.9s">
+                        <span class="span1"></span>
+                        <div class="text">
+                            <span>{$v.citylist}</span>
+                        </div>
+                    </li>
+                    {/volist}
+                </ul>
+            </div>
+            <div class="market-right">
+                <div class="main wow fadeInUp" data-wow-delay="0.9s">
+                    {volist name="market" id="v" key="k"}
+                    <div class="frame {eq name="k" value="1"}active{/eq}">
+                        <div class="bot">
+                            <h6>{$v.citylist}</h6>
+                            <div>
+                                <p class="add">{:__lang('Address')}:{$v.address}</p>
+                                <p class="sale">{:__lang('Sales Consultation')}:{$v.sale}</p>
+                                {if $v.tech}<p class="tech">{:__lang('Technical Hotline')}:{$v.tech}</p>{/if}
+                                <p class="mail">{:__lang('Sales email')}:{$v.mail}</p>
+                                {if $v.fax}<p class="fax">{:__lang('Fax')}:{$v.fax}</p>{/if}
+                            </div>
+                        </div>
+                    </div>
+                    {/volist}
+                </div>
+            </div>
+        </div>
+        </div>
+    </div>
+</div>
+<!--底部-->
+{include file="footer" /}
+<script type="text/javascript">
+    $('.market-detail .market-detail-box .market-left ul li').click(function () {
+        var ind = $(this).index();
+        $('.market-detail .market-detail-box .market-right .main .frame').eq(ind).addClass('active').siblings().removeClass('active');
+        $(this).addClass('active').siblings().removeClass('active');
+    });
+</script>
+</body>
+</html>

+ 120 - 0
addons/wwh/view/materials/detail_download.html

@@ -0,0 +1,120 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="download-detail">
+    <div class="container-outer">
+        <div class="download-detail-box">
+            <div class="download-top">
+                <div class="download-top-left wow fadeInUp" data-wow-delay="0.5s">{:__lang('Download')}</div>
+                <div class="download-top-right wow fadeInUp" data-wow-delay="0.6s">
+                    <form method="get" action="">
+                        <ul>
+                            <div class="download-select">
+                                <select name="category" id="category">
+                                    <option style="background-color: #ffffff;" value="" selected>&nbsp;&nbsp;&nbsp;{:__lang('Category')}</option>
+                                    {volist name="nav2" id="v"}
+                                    {if condition="($v.classify == 'service')"}
+                                    {volist name="v.childlist" id="vv"}
+                                    {volist name="vv.childlist" id="vvv"}
+                                    <option style="color: #808080;background-color: #f4f4f4;" value="{$vvv.id}">&nbsp;&nbsp;&nbsp;{:__lm($vvv,'name')}</option>
+                                    {volist name="vvv.childlist" id="vvvv"}
+                                    <option style="color:#333;background-color: #ffffff;" value="{$vvvv.id}">&nbsp;&nbsp;&nbsp; ├ {:__lm($vvvv,'name')}</option>
+                                    {volist name="vvvv.childlist" id="vvvvv"}
+                                    <option style="color:#808080;background-color: #ffffff;" value="{$vvvvv.id}">&nbsp;&nbsp;&nbsp; │├ {:__lm($vvvvv,'name')}</option>
+                                    {/volist}
+                                    {/volist}
+                                    {/volist}
+                                    {/volist}
+                                    {else /}
+                                    {/if}
+                                    {/volist}
+                                </select>
+                            </div>
+                            <li>
+                                <div class="download-search">
+                                    <input type="text" value="" name="downkeys" id="downkeys" placeholder="{:__lang('Please enter a name')}" />
+                                </div>
+                                <input type="submit" value="" class="download-button" />
+                            </li>
+                        </ul>
+                    </form>
+                </div>
+            </div>
+            <div class="download-bottom">
+                <div class="download-item title wow fadeInUp" data-wow-delay="0.7s">
+                    <li>{:__lang('Name')}</li>
+                    <li>{:__lang('Classification')}</li>
+                    <li>{:__lang('Type')}</li>
+                    <li>{:__lang('Version')}</li>
+                    <li>{:__lang('Time')}</li>
+                    <li>{:__lang('Operate')}</li>
+                </div>
+                {volist name="down" id="v"}
+                {eq name="mod" value="0"}<div class="download-item bg1 wow fadeInUp" data-wow-delay="0.8s">{/eq}
+                {eq name="mod" value="1"}<div class="download-item bg2 wow fadeInUp" data-wow-delay="0.8s">{/eq}
+                    <li>{$v.title}</li>
+                    <li>{:__lm($navId[$v.column_id],'name')}</li>
+                    <li>{$downType[$v['d_type']]??''}</li>
+                    <li>{$v.d_version}</li>
+                    <li>{$v.time}</li>
+                    <li><a href="{$v.d_file}" target="_blank" class="d"></a></li>
+                </div>
+                {/volist}
+            </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.8s">{$downPage}</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 93 - 0
addons/wwh/view/materials/detail_faq.html

@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="faq-detail">
+    <div class="container-outer">
+        <div class="faq-top">
+            <div class="faq-num wow fadeInUp" data-wow-delay="0.5s">{:__lang('Share')} {$faqCount} {:__lang('Strip')}</div>
+            <form method="get" action="" class="wow fadeInUp" data-wow-delay="0.6s">
+                <div class="faq-search">
+                    <input type="text" value="" name="faqkeys" id="faqkeys" placeholder="{:__lang('Please enter a name')}" />
+                </div>
+                <input type="submit" value="" class="faq-button" />
+            </form>
+        </div>
+        <div class="faq-bottom">
+            {volist name="faq" id="v"}
+            <li class="faq-item wow fadeInUp" data-wow-delay="0.7s">
+                <div class="title">{$v.title}</div>
+                <div class="main" style="display: none;">
+                    <div class="text">{$v.content}</div>
+                </div>
+            </li>
+            {/volist}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.7s">{$faqPage}</div>
+<!--底部-->
+{include file="footer" /}
+<script type="text/javascript">
+    $('.faq-item .title').click(function() {
+        $(this).parent().parent().siblings().find('.title').removeClass('cur');
+        $(this).parent().parent().siblings().find('.main').slideUp();
+        if($(this).siblings('.main').length > 0) {
+            $(this).toggleClass('cur');
+            $(this).siblings('.main').stop(true, true).slideToggle();
+            if($(this).siblings('.main').css('display') == "block") {
+                $(this).parents('.faq-item').siblings().find('.title').removeClass('cur');
+                $(this).parents('.faq-item').siblings().find('.main').slideUp();
+            }
+        }
+    });
+</script>
+</body>
+</html>

+ 78 - 0
addons/wwh/view/materials/detail_honor.html

@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/material/images/favicon.ico">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/reset.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/styles.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/script.js"></script>
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="honor-detail">
+    <div class="container-outer">
+        <div class="honor-list-box">
+            {volist name="honor" id="v"}
+            <div class="honor-item wow fadeInUp" data-wow-delay="0.5s">
+                <a href="{$v.image|cdnurl}">
+                    <div class="text">
+                        <div class="type"><span>{$honorType[$v['type']]??''}</span> <span>{$v.zsdate}</span></div>
+                        <div class="title">{$v.name}</div>
+                        <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/honor_size.png" class="img-block">
+                        </div>
+                    </div>
+                </a>
+            </div>
+            {/volist}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.5s">{$honorPage}</div>
+<!--底部-->
+{include file="footer" /}
+<script type='text/javascript' src="__CDN__/assets/addons/wwh/js/touchTouch.jquery.js"></script>
+<script type="text/javascript">
+    $(".honor-list-box").each(function(){
+        $(this).find("a").touchTouch();
+    });
+</script>
+</body>
+</html>

+ 297 - 0
addons/wwh/view/materials/detail_join.html

@@ -0,0 +1,297 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<style>
+    .upload .input input[type="file"]{
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        opacity: 0;
+    }
+</style>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban5_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner5|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="join-detail">
+    <div class="container-outer">
+        <div class="join-box">
+            <div class="top">
+                <form method="get" action="" class="clearfix">
+                    <div class="join-option">
+                        <div class="dept wow fadeInUp" data-wow-delay="0.5s">
+                            <select name="branch" id="branch">
+                                <option value="" selected>{:__lang('All Sectors')}</option>
+                                {volist name="deptList" id="v"}
+                                <option value="{$v.dept}">{$v.dept}</option>
+                                {/volist}
+                            </select>
+                        </div>
+                        <div class="add wow fadeInUp" data-wow-delay="0.6s">
+                            <select name="address" id="address">
+                                <option value="" selected>{:__lang('Work Location')}</option>
+                                {volist name="addrList" id="v"}
+                                <option value="{$v.addr}">{$v.addr}</option>
+                                {/volist}
+                            </select>
+                        </div>
+                    </div>
+                    <div class="join-search wow fadeInUp" data-wow-delay="0.7s">
+                        <div class="so-inp">
+                            <input type="text" value="" name="jonKeywords" id="jonKeywords" placeholder="{:__lang('Search for job positions')}" />
+                        </div>
+                        <input type="submit" value="" class="join-button" />
+                    </div>
+                </form>
+            </div>
+            <div class="bottom">
+                {volist name="join" id="v"}
+                <div class="join-item wow fadeInUp" data-wow-delay="0.8s">
+                    <div class="recruit-top">
+                        <div class="recruit-top-box clearfix">
+                            <div class="recruit-top-left">
+                                <div class="psn">
+                                    <p>{$v.name}</p>
+                                </div>
+                            </div>
+                            <div class="recruit-top-right clearfix">
+                                <div class="req">
+                                    <p>{$v.dept}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.addr}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.num}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.xueli}</p>
+                                </div>
+                                <div class="req">
+                                    <p>{$v.time}</p>
+                                </div>
+                            </div>
+                            <div class="drop-box">
+                                <div class="drop-img">
+                                    <img src="__CDN__/assets/addons/wwh/images/down_arrow1.svg" alt="" class="drop-ico1">
+                                    <img src="__CDN__/assets/addons/wwh/images/down_arrow2.svg" alt="" class="drop-ico2">
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="recruit-content">
+                        <p>{$v.content}</p>
+                        <a href="javascript:;" class="join-more" onclick="showForm(this.name)" name="{$v.name}">{:__lang('Apply Now')}</a>
+                    </div>
+                </div>
+                {/volist}
+            </div>
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.8s">{$joinPage}</div>
+<!--底部-->
+{include file="footer" /}
+<script>	
+    function showForm(e) {
+        // 安全转义输入值
+        var escapedE = $('<div/>').text(e).html();
+
+        // 使用数组join方式构建HTML字符串
+        var htmlParts = [
+            '<form id="resume" method="post" class="join-form">',
+            '    <div class="title">{:__lang("Welcome to join us")}</div>',
+            '    <div class="message-text"><input type="text" placeholder="{:__lang("Full Name")}" name="realname2" id="realname2" autocomplete="name" maxlength="50"></div>',
+            '    <div class="message-text"><input type="tel" placeholder="{:__lang("Contact Number")}" name="tel2" id="tel2" autocomplete="tel" maxlength="20"></div>',
+            '    <div class="message-text"><input type="text" placeholder="{:__lang("Post")}" name="gangwei2" id="gangwei2" value="' + escapedE + '" readonly style="background-color: #eeeeee;cursor: not-allowed;"></div>',
+            '    <div class="upload">',
+            '        <div class="text"><strong>{:__lang("Upload Resume")}*</strong><span>{:__lang("Support")} word、excel、pdf、ppt</span></div>',
+            '        <div class="input">',
+            '            <span id="file_name"></span>',
+            '            <div class="right">',
+            '                <span>{:__lang("Upload")}</span>',
+            '                <input type="file" name="url" id="url" onchange="changeFile(this)" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf">',
+            '            </div>',
+            '        </div>',
+            '    </div>',
+            '    <div class="validate">',
+            '        <div class="message-text"><input type="text" placeholder="{:__lang("Verification code")}" name="verify2" id="verify2" autocomplete="off"></div>',
+            '        <img id="verifyImgs2" class="verify-img" src="{:addon_url("wwh/index/verify")}" onclick="this.src=\'{:addon_url("wwh/index/verify")}?seed=\'+Math.random()">',
+            '    </div>',
+            '    <div class="resume-subbox"><button type="submit" class="resume-submit">{:__lang("Submit")}</button></div>',
+            '    {:token()}',
+            '</form>'
+        ];
+
+        var html = htmlParts.join('');
+
+        var formLayer = layer.open({
+            type: 1,
+            title: false,
+            closeBtn: 1,
+            shadeClose: false,
+            anim: 1,
+            area: ['auto', 'auto'],
+            content: html,
+        });
+
+        // 表单submit事件
+        $(document).on('submit', '#resume', function(event) {
+            event.preventDefault();
+
+            var form = this;
+            var formdata = new FormData(form);
+            var realname2 = $.trim($("#realname2").val());
+            var tel2 = $.trim($("#tel2").val());
+            var gangwei2 = $.trim($("#gangwei2").val());
+            var url = $.trim($("#url").val());
+            var verify2 = $.trim($("#verify2").val());
+
+            // 验证逻辑
+            if (!realname2) {
+                layer.alert('{:__lang(\'Please fill in your name\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!tel2) {
+                layer.alert('{:__lang(\'Please provide your phone number\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!/^1[3-9]\d{9}$/.test(tel2)) {
+                layer.alert('{:__lang(\'Please provide a valid phone number\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!gangwei2) {
+                layer.alert('{:__lang(\'Please select the position to apply for\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!url) {
+                layer.alert('{:__lang(\'Please upload your resume\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            if (!verify2) {
+                layer.alert('{:__lang(\'Please fill in the verification code\')}', {skin: 'layui-layer-lan', closeBtn: 0, title: "{:__lang(\'Tips\')}:", icon: 2, anim: 2});
+                return false;
+            }
+
+            // 显示加载状态
+            var submitBtn = $(form).find('.resume-submit');
+            submitBtn.prop('disabled', true).text('{:__lang("Submitting...")}');
+
+            $.ajax({
+                url: "{:addon_url('wwh/index/injoin')}",
+                type: "POST",
+                data: formdata,
+                cache: false,
+                contentType: false,
+                processData: false,
+                dataType: "json",
+                complete: function() {
+                    submitBtn.prop('disabled', false).text('{:__lang("Submit")}');
+                },
+                success: function(mes) {
+                    if (mes.code === 1) {
+                        layer.alert(mes.msg || "{:__lang(\'Submitted Successfully\')}", {
+                            skin: 'layui-layer-lan',
+                            closeBtn: 0,
+                            icon: 1,
+                            end: function() {
+                                layer.close(formLayer);
+                                window.location.reload();
+                            }
+                        });
+                    } else {
+                        layer.alert(mes.msg || '{:__lang(\'Operation failed, please try again\')}', {
+                            skin: 'layui-layer-lan',
+                            closeBtn: 0,
+                            title: "{:__lang(\'Tips\')}:",
+                            icon: 2,
+                            anim: 2
+                        });
+                        $('#verifyImgs2').attr('src', '{:addon_url("wwh/index/verify")}?seed=' + Math.random());
+                    }
+                },
+                error: function() {
+                    layer.alert('{:__lang(\'Network error, please try again\')}', {
+                        skin: 'layui-layer-lan',
+                        closeBtn: 0,
+                        title: "{:__lang(\'Tips\')}:",
+                        icon: 2,
+                        anim: 2
+                    });
+                    $('#verifyImgs2').attr('src', '{:addon_url("wwh/index/verify")}?seed=' + Math.random());
+                }
+            });
+        });
+    }
+
+    function changeFile(obj) {
+        var fileName = $(obj).val().split('\\').pop();
+        if (fileName.length > 50) {
+            fileName = fileName.substring(0, 50) + '...';
+        }
+        $("#file_name").text(fileName);
+    }
+</script>
+<script type="text/javascript">
+    $(function () {
+        $(".join-item .recruit-top").click(function(){
+            $(this).siblings(".recruit-content").slideToggle();
+            $(this).parents().siblings().find(".recruit-content").slideUp();
+            $(this).parent().toggleClass("on");
+            $(this).parent().siblings().removeClass("on");
+        })
+    });
+</script>
+</body>
+</html>

+ 273 - 0
addons/wwh/view/materials/detail_news.html

@@ -0,0 +1,273 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$archives.keywords}" />
+    <meta name="description" content="{$archives.description}" />
+    <title>{$archives.title} - {$site.site_name}</title>
+    <link rel="shortcut icon" href="{$site.logo|cdnurl}">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/reset.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.counterup.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.waypoints.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/javascript.js"></script>
+    <style>
+        /* 新闻详情页样式 */
+        /* 容器样式 */
+        .news-detail-container {
+            max-width: 1200px;
+            margin: 0 auto;
+            padding: 30px 15px;
+        }
+
+        /* 面包屑导航 */
+        .breadcrumb {
+            display: flex;
+            align-items: center;
+            margin-bottom: 30px;
+            padding: 10px 0;
+            color: #666;
+            font-size: 14px;
+            border-bottom: 1px solid #eee;
+        }
+        .current-category {
+            position: relative;
+            padding-left: 37px;
+            font-weight: 400;
+            font-size: 14px;
+            color: #DF0100;
+            line-height: 20px;
+        }
+        
+        .current-category:before {
+            content: '';
+            position: absolute;
+            left: 0;
+            top: 50%;
+            transform: translateY(-50%);
+            width: 0;
+            height: 0;
+            border-top: 8px solid transparent;
+            border-bottom: 8px solid transparent;
+            border-left: 20px solid #DF0100;
+        }
+
+        .breadcrumb-item {
+            font-weight: 400;
+            font-size: 14px;
+            color: #DF0100;
+        }
+
+        .breadcrumb-item.current {
+            color: #333;
+        }
+
+        .breadcrumb-item:hover:not(.current) {
+            color: #DF0100;
+        }
+
+        .breadcrumb-separator {
+            margin: 0 8px;
+            color: #999;
+        }
+        
+        /* 新闻详情 */
+        .news-detail {
+            background-color: #fff;
+            padding: 0 0 40px 0;
+            margin-bottom: 30px;
+        }
+
+        .news-title {
+            font-size: 28px;
+            color: #333;
+            text-align: center;
+            margin-top: 0;
+            margin-bottom: 20px;
+            line-height: 1.4;
+            font-weight: 500;
+        }
+
+        .news-date {
+            text-align: center;
+            color: #999;
+            font-size: 14px;
+            margin-bottom: 30px; /* 日期下方间距30px */
+            position: relative;
+            padding-bottom: 30px; /* 为横线留出空间 */
+        }
+
+        /* 日期下方的横线 */
+        .news-date::after {
+            content: '';
+            position: absolute;
+            bottom: 0;
+            left: 50%;
+            transform: translateX(-50%);
+            width: 100%; /* 横线宽度 */
+            height: 1px; /* 横线高度 */
+            background-color: #ddd; /* 横线颜色 */
+        }
+
+        .news-content {
+            line-height: 1.8;
+            color: #333;
+            font-size: 16px;
+        }
+
+        .news-content p {
+            margin-bottom: 20px;
+            text-indent: 2em; /* 首行缩进 */
+        }
+
+        .news-content strong {
+            font-weight: 500;
+            color: #000;
+        }
+
+        .news-images {
+            display: flex;
+            justify-content: space-between;
+            margin: 30px 0;
+        }
+
+        .news-image {
+            width: 48%;
+        }
+
+        .news-image img {
+            width: 100%;
+            height: auto;
+            border-radius: 4px;
+            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+        }
+
+        /* 上一篇/下一篇导航 */
+        .news-navigation {
+            display: flex;
+            justify-content: space-between;
+            padding-top: 20px;
+            border-top: 1px solid #eee;
+        }
+
+        .prev-news, .next-news {
+            display: inline-flex;
+            align-items: center;
+            color: #1673FF; /* 更新为蓝色 */
+            text-decoration: none;
+            font-size: 14px; /* 更新字体大小 */
+            font-weight: 500; /* 更新字体粗细 */
+            transition: opacity 0.3s ease;
+        }
+
+        .prev-news:hover, .next-news:hover {
+            opacity: 0.8; /* 悬停时稍微透明 */
+        }
+
+        .icon-arrow-left, .icon-arrow-right {
+            display: inline-block;
+            width: 16px;
+            height: 16px;
+            background-size: contain;
+            background-repeat: no-repeat;
+            background-position: center;
+        }
+
+        .icon-arrow-left {
+            background-image: url('../images/icon-arrow-left.png');
+            margin-right: 5px;
+        }
+        .icon-arrow-right {
+            background-image: url('../images/icon-arrow-right.png');
+            margin-left: 5px;
+        }
+        /* 禁用状态的上一篇/下一篇按钮 */
+.prev-news.disabled, .next-news.disabled {
+    color: #ccc;
+    cursor: not-allowed;
+}
+
+.prev-news.disabled:hover, .next-news.disabled:hover {
+    opacity: 1; /* 禁用状态下不改变透明度 */
+    color: #ccc;
+}
+
+    </style>
+</head>
+
+<body>
+    <!-- 头部 -->
+    {include file="header" /}
+    <div class="col-banner">
+        <div class="section-banner">
+            <img src="{$site.banner7|cdnurl}" alt="">
+        </div>
+    </div>
+    <div class="container">
+        <div class="news-detail-container">
+            <!-- 面包屑导航 -->
+            <div class="breadcrumb">
+                <a href="{:addon_url('wwh/index/index')}" class="breadcrumb-item">
+                    <span class="current-category">首页</span>
+                </a>
+                <span class="breadcrumb-separator">&gt;</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="breadcrumb-item">{:__lm($navCur,'name')}</a>
+                <span class="breadcrumb-separator">&gt;</span>
+                <span class="breadcrumb-item current">{$archives.title}</span>
+            </div>
+            
+            <!-- 新闻详情 -->
+            <div class="news-detail">
+                <!-- 新闻标题 -->
+                <h1 class="news-title">{$archives.title}</h1>
+                
+                <!-- 新闻发布时间 -->
+                <div class="news-date">{$archives.time}</div>
+                
+                <!-- 新闻内容 -->
+                <div class="news-content">
+                   {$archives.content}
+                </div>
+            </div>
+            
+            <div class="news-navigation">
+                {if empty($nafter)}
+                    <a href="javascript:void(0);" class="prev-news disabled">
+                        <i class="icon-arrow-left"></i> 上一篇(没有更多)
+                    </a>
+                {else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$nafter.id])}" class="prev-news">
+                        <i class="icon-arrow-left"></i> 上一篇:{$nafter.title}
+                    </a>
+                {/if}
+            
+                {if empty($nfront)}
+                    <a href="javascript:void(0);" class="next-news disabled">
+                        下一篇(没有更多) <i class="icon-arrow-right"></i>
+                    </a>
+                {else/}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navCur.diyname, ':id'=>$nfront.id])}" class="next-news">
+                        下一篇:{$nfront.title} <i class="icon-arrow-right"></i>
+                    </a>
+                {/if}
+            </div>
+        </div>
+    </div>
+    <!-- 底部 -->
+    {include file="footer" /}
+
+</body>
+
+</html>

+ 495 - 0
addons/wwh/view/materials/detail_partner.html

@@ -0,0 +1,495 @@
+ <!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="shortcut icon" href="{$site.logo|cdnurl}">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/reset.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.counterup.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.waypoints.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/javascript.js"></script>
+    <style>
+        .culture-row {
+            display: flex;
+            flex-wrap: wrap;
+             /* 移除justify-content: space-between,改用margin来控制间距 */
+            gap: 60px 20px; /* 使用gap属性设置卡片之间的水平和垂直间距 */
+            margin-bottom: 60px;
+        }
+        
+        .culture-card {
+            width: 285px;
+            height: 520px;
+            background-color: #fff;
+            border-radius: 4px;
+            overflow: hidden;
+            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+            transition: transform 0.3s ease, box-shadow 0.3s ease;
+            display: flex;
+            flex-direction: column;
+        }
+        
+        .culture-card:hover {
+            transform: translateY(-5px);
+            box-shadow: 0 10px 20px rgba(0,0,0,0.15);
+        }
+        
+        /* 普通卡片:图片在上,内容在下 */
+        .card-normal .card-image {            
+            order: 1;
+            height: 285px;
+        }        
+        .card-normal .card-content {
+            order: 2;
+        }        
+        .card-reverse .card-content {
+            order: 1;
+        }
+        
+        .card-image {
+            height: 336px;
+            overflow: hidden;
+        }
+         
+        /* 第三个卡片图片高度 */
+        .culture-card:nth-child(2) .card-image {
+            order: 2;
+            height: 322px;
+        }
+        
+        /* 第三个卡片图片高度 */
+        .culture-card:nth-child(3) .card-image {
+            height: 264px;
+        }
+        .culture-card:nth-child(4) .card-image {
+            order: 2;
+            height: 266px;
+        }
+        .culture-card:nth-child(5) .card-image {
+            order: 2;
+            height: 285px;
+        }
+        .culture-card:nth-child(7) .card-image {
+            order: 2;
+            height: 285px;
+        }
+        
+        .card-image img {
+            width: 100%;
+            height: 100%;
+            object-fit: cover;
+            transition: transform 0.5s ease;
+        }
+        
+        .culture-card:hover .card-image img {
+            transform: scale(1.05);
+        }
+        
+        .card-content {
+            text-align: center;
+            flex-grow: 1;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+        }
+        
+        .card-title {
+            font-size: 20px;
+            font-weight: 500;
+            color: #DF0100;
+        }
+        
+        .card-subtitle {
+            font-size: 12px;
+            font-weight: 400;
+            color: #737980;
+            margin-bottom: 17px;
+            text-transform: uppercase;
+        }
+        
+        /* 单列列表 */
+        .card-list li {
+            font-size: 14px;
+            color: #2E3033;
+            font-weight: 400;
+            margin-bottom: 16px;
+        }
+        
+        /* 双列列表 */
+        .card-list.two-column {
+            display: flex;
+            flex-wrap: wrap;
+            max-width: 220px; /* 控制整体宽度 */
+            margin: 0 auto; /* 水平居中 */
+        }
+        
+        .card-list.two-column li {
+            width: 50%; /* 宽度占50% */
+            box-sizing: border-box;
+            margin-bottom: 16px;
+        }
+        
+        /* 左列文字靠右对齐 */
+        .card-list.two-column li:nth-child(odd) {
+            text-align: right;
+            padding-right: 15px; /* 控制与中间的距离 */
+        }
+        
+        /* 右列文字靠左对齐 */
+        .card-list.two-column li:nth-child(even) {
+            text-align: left;
+            padding-left: 15px; /* 控制与中间的距离 */
+        }
+        
+        /* 奇数项处理 - 与左侧项目对齐 */
+        .card-list.two-column li:last-child:nth-child(2n+1) {
+            width: 50%; /* 保持宽度为50% */
+            text-align: right; /* 与左侧项目一致,靠右对齐 */
+            padding-right: 15px; /* 与左侧项目一致的内边距 */
+        }
+        
+        /* 底部横幅模块样式 */
+        .culture-banner {
+            padding: 60px 0;
+            background-color: #f5f5f5;
+        }
+        
+        .banner-row {
+            display: flex;
+            justify-content: space-between;
+            flex-wrap: wrap;
+            gap: 20px;
+        }
+        
+        .banner-item {
+            width: 386px; /* 固定宽度为386px */
+            height: 216px; /* 固定高度为216px */
+            position: relative;
+            border-radius: 4px;
+            overflow: hidden;
+            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+        }
+        
+        .banner-item img {
+            width: 100%;
+            height: 100%;
+            object-fit: cover;
+            transition: transform 0.5s ease;
+        }
+        
+        .banner-item:hover img {
+            transform: scale(1.05);
+        }
+        
+        .banner-content {
+            position: absolute;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+            background: rgba(0,0,0,0.5);
+            color: #fff;
+            padding: 20px;
+            box-sizing: border-box;
+            text-align: center;
+        }
+        
+        .banner-title {
+            font-size: 20px;
+            font-weight: bold;
+        }
+        
+        .banner-subtitle {
+            font-size: 12px;
+            font-weight: 400;
+            margin-bottom: 20px;
+            opacity: 0.8;
+        }
+        
+        .banner-text {
+            font-size: 18px;
+            font-weight: 500;
+        }
+        
+        /* 横幅内容布局样式 */
+        
+        /* 基础网格布局 */
+        .banner-grid {
+            display: grid;
+            width: 80%;
+            max-width: 220px;
+            margin: 0 auto;
+        }
+        
+        /* 双列布局 */
+        .banner-grid.two-column {
+            grid-template-columns: repeat(2, 1fr);
+            gap: 15px 30px;
+        }
+        
+        .banner-grid.two-column span:nth-child(odd) {
+            text-align: right;
+            padding-right: 15px;
+        }
+        
+        .banner-grid.two-column span:nth-child(even) {
+            text-align: left;
+            padding-left: 15px;
+        }
+        
+        /* 单列布局 */
+        .banner-grid.one-column {
+            grid-template-columns: 1fr;
+            gap: 10px;
+            text-align: center;
+        }
+        
+        .banner-grid.one-column span {
+            text-align: center;
+        }
+        
+        /* 对角线布局(特殊的双列布局) */
+        .banner-grid.diagonal {
+            grid-template-columns: repeat(2, 1fr);
+            gap: 15px;
+        }
+        
+        .banner-grid.diagonal span:nth-child(odd) {
+            text-align: right;
+            padding-right: 15px;
+        }
+        
+        .banner-grid.diagonal span:nth-child(even) {
+            text-align: left;
+            padding-left: 15px;
+        }
+        
+        /* 当最后一个项目是奇数时的处理 */
+        .banner-grid.two-column span:last-child:nth-child(odd),
+        .banner-grid.diagonal span:last-child:nth-child(odd) {
+            grid-column: 1; /* 确保在左列 */
+            text-align: right;
+            padding-right: 15px;
+        }
+        
+        /* 横幅内容的文字样式 */
+        .banner-grid span {
+            font-size: 16px;
+            font-weight: 500;
+            color: #fff;
+            white-space: nowrap;
+        }
+    </style>
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="section-banner">
+        <img src="{$site.banner3|cdnurl}" alt="">
+    </div>
+    <div class="section-header">
+        <p>ENTERPRISE CULTURE</p>
+        <h2>{$site.ban3_t1}</h2>
+    </div>
+</div>
+
+<!-- 内容 -->
+<div class="container">
+    <!-- 企业文化模块 -->
+    <div class="culture-row">
+        <!-- 核心理念 -->
+        <div class="culture-card card-normal">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/88.png" alt="高楼大厦">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">核心理念</h3>
+                <p class="card-subtitle">CORE IDEOLOGY</p>
+                <ul class="card-list">
+                    <li>善用资源</li>
+                    <li>服务建设</li>
+                </ul>
+            </div>
+        </div>
+        <!-- 核心价值观 - 内容在上,图片在下 -->
+        <div class="culture-card card-reverse">
+            <div class="card-content">
+                <h3 class="card-title">核心价值观</h3>
+                <p class="card-subtitle">CORE VALUE</p>
+                <ul class="card-list two-column">
+                    <li>创新</li>
+                    <li>和谐</li>
+                    <li>绩效</li>
+                    <li>责任</li>
+                </ul>
+            </div>
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/image.png" alt="笔记本电脑">
+            </div>
+        </div>
+        
+        <!-- 文化理念 -->
+        <div class="culture-card card-normal">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/1.png" alt="工程图纸">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">文化理念</h3>
+                <p class="card-subtitle">CULTURE IDEA</p>
+                <ul class="card-list">
+                    <li>企业愿人</li>
+                    <li>企业育人</li>
+                    <li>企业为人</li>
+                    <li>让员工与企业共同成长</li>
+                </ul>
+            </div>
+        </div>
+        
+        <!-- 四型企业 -->
+        <div class="culture-card card-reverse">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/2.png" alt="树木风景">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">四型企业</h3>
+                <p class="card-subtitle">FOUR-TYPE ENTERPRISE</p>
+                <ul class="card-list">
+                    <li>创新驱动型</li>
+                    <li>质量效益型</li>
+                    <li>制造服务型</li>
+                    <li>社会责任型</li>
+                </ul>
+            </div>
+        </div>
+        <!-- 五有干部 -->
+        <div class="culture-card card-reverse">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/3.png" alt="公园景观">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">五有干部</h3>
+                <p class="card-subtitle">FIVE CADRES</p>
+                <ul class="card-list two-column">
+                    <li>有学习能力</li>
+                    <li>有市场意识</li>
+                    <li>有专业水平</li>
+                    <li>有敬业精神</li>
+                    <li>有思想境界</li>
+                </ul>
+            </div>
+        </div>
+        
+        <!-- 六星企业 -->
+        <div class="culture-card card-normal">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/4.png" alt="现代建筑">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">六星企业</h3>
+                <p class="card-subtitle">SIX-STAR ENTERPRISE</p>
+                <ul class="card-list two-column">
+                    <li>业绩良好</li>
+                    <li>管理精细</li>
+                    <li>品牌知名</li>
+                    <li>先进高效</li>
+                </ul>
+            </div>
+        </div>
+        
+        <!-- 企业愿景 -->
+        <div class="culture-card card-reverse">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/5.png" alt="握手">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">企业愿景</h3>
+                <p class="card-subtitle">CORPORATE VISION</p>
+                <ul class="card-list">
+                    <li>全球优秀的混凝土专业服务商</li>
+                </ul>
+            </div>
+        </div>
+        
+        <!-- 安全理念 -->
+        <div class="culture-card card-normal">
+            <div class="card-image">
+                <img src="__CDN__/assets/addons/material/images/culture/6.png" alt="工人施工">
+            </div>
+            <div class="card-content">
+                <h3 class="card-title">安全理念</h3>
+                <p class="card-subtitle">SAFETY CONCEPT</p>
+                <ul class="card-list">
+                    <li>敬畏生命</li>
+                    <li>健康为本</li>
+                </ul>
+            </div>
+        </div>
+    </div>
+    <!-- 底部模块 -->
+    <div class="banner-row">
+        <!-- 第一个横幅 -->
+        <div class="banner-item">
+            <img src="__CDN__/assets/addons/material/images/culture/515.png" alt="城市景观">
+            <div class="banner-content one-column">
+                <h3 class="banner-title">广告语</h3>
+                <p class="banner-subtitle">FIVE CADRES</p>
+                <p class="banner-text">我们生产凝聚力</p>
+            </div>
+        </div>
+        
+        <!-- 第二个横幅 -->
+        <div class="banner-item">
+            <img src="__CDN__/assets/addons/material/images/culture/15.png" alt="商务团队">
+            <div class="banner-content">
+                <h3 class="banner-title">行为准则</h3>
+                <p class="banner-subtitle">FIVE CADRES</p>
+                <div class="banner-grid two-column">
+                    <span>敬畏</span>
+                    <span>感恩</span>
+                    <span>谦虚</span>
+                    <span>得体</span>
+                </div>
+            </div>
+        </div>
+        
+        <!-- 第三个横幅 -->
+        <div class="banner-item">
+            <img src="__CDN__/assets/addons/material/images/culture/51.png" alt="会议场景">
+            <div class="banner-content">
+                <h3 class="banner-title">三宽三力</h3>
+                <p class="banner-subtitle">FIVE CADRES</p>
+                <div class="banner-grid two-column">
+                    <span>待人宽厚</span>
+                    <span>处事宽容</span>
+                    <span>环境宽松</span>
+                    <span>向心力</span>
+                    <span>亲和力</span>
+                    <span>凝聚力</span>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 146 - 0
addons/wwh/view/materials/detail_product.html

@@ -0,0 +1,146 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$archives.keywords}"/>
+    <meta name="description" content="{$archives.description}"/>
+    <title>{$archives.title} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban1_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner1|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{:__lm($top,'name')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}">{:__lm($navCur,'name')}</a>
+                <span class="dis">/</span>
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$archives.column_id]['diyname'], ':id'=>$archives.id])}" class="cur dis">{$archives.title}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="product-detail">
+    <div class="container-outer">
+        <div class="product-top">
+            <div class="product-pic swiper-container wow fadeInLeft" data-wow-delay="0.5s">
+                <div class="swiper-wrapper">
+                    {foreach name="archives['lunbo']" item="v"}
+                    <div class="swiper-slide" style="background-image:url('{$v|cdnurl}');">
+                        <a href="{$v|cdnurl}"><ul><li><img src="{$v|cdnurl}" alt=""></li></ul></a>
+                    </div>
+                    {/foreach}
+                </div>
+                <div class="swiper-pagination"></div>
+                <div class="swiper-button-next"></div>
+                <div class="swiper-button-prev"></div>
+            </div>
+            <div class="product-info wow fadeInRight" data-wow-delay="0.5s">
+                <h3>{$archives.title}</h3>
+                <h4>{$archives.p_pn}</h4>
+                <div class="product-text">{$archives.description}</div>
+                <div class="ty-more"><a href="javascript:;" class="click-message"><span>{:__lang('Product Consultation')}</span><i></i></a></div>
+            </div>
+        </div>
+        <div class="product-bottom wow fadeInUp" data-wow-delay="0.6s">
+            <div class="product-bottom-box">
+                <div class="product-bottom-nav">
+                    <li class="cur">{:__lang('Function')}
+                    <li>{:__lang('Parameters')}
+                    <li>{:__lang('Size')}
+                </div>
+                <div class="product-bottom-tab swiper-container swiper-no-swiping">
+                    <div class="swiper-wrapper">
+                        <div class="swiper-slide">
+                            <div class="zc-detail-text">
+                                <div class="text">{$archives.p_func_content}</div>
+                            </div>
+                        </div>
+                        <div class="swiper-slide">
+                            <div class="zc-detail-text">
+                                <div class="text">{$archives.p_tech_content}</div>
+                            </div>
+                        </div>
+                        <div class="swiper-slide">
+                            <div class="product-size-img">
+                                <img src="{$archives.p_shape_image|cdnurl}">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+<script type='text/javascript' src="__CDN__/assets/addons/wwh/js/touchTouch.jquery.js"></script>
+<script type="text/javascript">
+    $(".product-pic").each(function(){
+        $(this).find("a").touchTouch();
+    });
+
+    var swiper1 = new Swiper('.product-pic', {
+        spaceBetween: 0,
+        autoHeight: true,
+        // loop : true,
+        // autoplay: {
+        // 	delay: 5000,
+        // 	disableOnInteraction: false,
+        // },
+        pagination: {
+            el: '.swiper-pagination',
+            clickable: true,
+        },
+        navigation: {
+            nextEl: '.swiper-button-next',
+            prevEl: '.swiper-button-prev',
+        },
+    });
+
+    var mySwiper = new Swiper('.product-bottom-tab', {
+        autoHeight: true,
+        slidesPerView: 1,
+    });
+    $('.product-bottom-nav li').on('click', function(e) {
+        e.preventDefault();
+        $(".product-bottom-nav li").removeClass('cur');
+        $(this).addClass('cur');
+        var index = $(this).index();
+        mySwiper.slideTo(index,0,false);
+        mySwiper.updateAutoHeight();
+    });
+</script>
+</body>
+</html>

+ 93 - 0
addons/wwh/view/materials/detail_qa.html

@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="qa-detail">
+    <div class="container-outer">
+<!--        <div class="title wow fadeInUp" data-wow-delay="0.5s">{:__lang('Please enter the serial number')}</div>-->
+        <form method="get" action="" class="qa-search wow fadeInUp" data-wow-delay="0.6s">
+            <input type="text" name="qakeys" id="qakeys" placeholder="{:__lang('Please enter the serial number')}" value="" class="input">
+            <input type="submit" value="{:__lang('Submit')}" class="submit">
+        </form>
+        {if isset($qa)}
+        {if !empty($qa)}
+        {volist name="qa" id="v"}
+        <div class="content wow fadeInUp" data-wow-delay="0.8s">
+            <div class="left">
+                <div class="img"><img src="{$v.image}" alt=""></div>
+                <div class="item">
+                    <li><div class="tit">{:__lang('Name')}</div><div class="text">{$v.name}</div></li>
+                    <li><div class="tit">{:__lang('Model')}</div><div class="text">{$v.model}</div></li>
+                    <li><div class="tit">{:__lang('Serial Number')}</div><div class="text">{$v.sn}</div></li>
+                </div>
+            </div>
+            <div class="right">
+                <div class="item">
+                    <li><div class="tit">{:__lang('Customer Unit')}</div><div class="text">{$v.custom}</div></li>
+                    <li><div class="tit">{:__lang('Customer Phone')}</div><div class="text">{$v.phone|substr_replace='****',3,4}</div></li>
+                    <li><div class="tit">{:__lang('Warranty Start Date')}</div><div class="text">{$v.fhdate}</div></li>
+                    <li><div class="tit">{:__lang('Warranty End Date')}</div><div class="text">{$v.dqdate}</div></li>
+                </div>
+            </div>
+        </div>
+        {/volist}
+        {elseif $showNoQa}
+        <div class="pro-img wow fadeInUp" data-wow-delay="0.8s">
+            <img src="__CDN__/assets/addons/wwh/images/none.png" alt="">
+            <div class="pro-text">{:__lang('No relevant information found')}</div>
+        </div>
+        {/if}
+        {/if}
+    </div>
+</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

+ 62 - 0
addons/wwh/view/materials/detail_service.html

@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban3_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner3|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}">{if condition="($navCur.parent_id == '0')"} {:__lm($navCur,'name')} {else /} {:__lm($top,'name')} {/if}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{if condition="($navCur.parent_id == '0')"}{:__lang('Strategy')}{else /}{:__lm($navCur,'name')}{/if}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="service-detail">
+    <div class="container-outer">
+        <div class="service-detail-box wow fadeInUp" data-wow-delay="0.5s">
+            <div class="container">{$service.content|default=''}</div>
+        </div>
+    </div>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 46 - 0
addons/wwh/view/materials/footer.html

@@ -0,0 +1,46 @@
+<!-- 页脚 -->
+<footer>
+    <div class="footer-top">
+        <div class="footer-logo-nav">
+            <a href="{:addon_url('wwh/index/index')}" class="logo-link">
+            <div class="footer-logo">
+                <img src="{$site.logo|cdnurl}" alt="Logo">
+                <div class="footer-logo-text">
+                    <h3>{$site.site_name}</h3>
+                    <p>LLINYI HUADONG MATERIALS</p>
+                </div>
+            </div>
+            </a>
+            <ul class="footer-nav">
+                {$site.content}
+            </ul>
+        </div>
+        <div class="footer-info">
+            <div class="info-item">
+                <h4>公司名称</h4>
+                <p>{$site.site_name}</p>
+            </div>
+            <div class="info-item">
+                <h4>公司地址</h4>
+                <p>{$site.address}</p>
+            </div>
+            <div class="info-item">
+                <h4>联系我们</h4>
+                <p>{$site.tel}</p>
+            </div>
+            <div class="info-item">
+                <h4>公司邮箱</h4>
+                <p>{$site.email}</p>
+            </div>
+        </div>
+        <div class="footer-copyright">
+            <p>版权所有:临沂华东材料有限公司</p>
+            <p>{$site.copyright}</p>
+            <p>{$site.beian}</p>
+            <p class="security-info">
+                <a href="{$site.link1}"> <img src="__CDN__/assets/addons/material/images/footer/security_icon.png" alt="安全认证">
+                {$site.gongwang}</a>
+            </p>
+        </div>
+    </div>
+</footer>

+ 29 - 0
addons/wwh/view/materials/header.html

@@ -0,0 +1,29 @@
+
+<!-- 导航栏 -->
+<header>
+  <div class="container">
+    <div class="logo-container">
+      <a href="{:addon_url('wwh/index/index')}" class="logo-link">
+        <div class="logo">
+          <img src="{$site.logo|cdnurl}" alt="临沂华东材料有限公司">
+          <div class="logo-text">
+            <h1>临沂华东材料有限公司</h1>
+            <p>LINYI HUADONG MATERIALS</p>
+          </div>
+        </div>
+      </a>
+    </div>
+    <nav>
+      <ul>
+        {volist name="nav" id="v"}
+        <li {if $navCur.classify == $v.classify } class="active" {/if}>
+        <a href="{if empty($v.diyname)}{$v.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$v.diyname])}{/if}">
+          {:__lm($v,'name')}
+        </a><span class="nav-separator">/</span>
+
+        </li>
+        {/volist}
+      </ul>
+    </nav>
+  </div>
+</header>

+ 718 - 0
addons/wwh/view/materials/index.html

@@ -0,0 +1,718 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{$site.keywords}"/>
+    <meta name="description" content="{$site.description}"/>
+    <title>{:__lang('Home')} - {$site.site_name}</title>
+    <link rel="shortcut icon" href="{$site.logo|cdnurl}">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/reset.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/material/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.counterup.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/jquery.waypoints.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/material/js/javascript.js"></script>
+    <style>
+        .banner {
+            width: 100%;
+            height: 560px;
+            position: relative;
+            overflow: hidden;
+        }
+        .banner-bg {
+            width: 100%;
+            height: 100%;
+            object-fit: cover;
+            display: block;
+            filter: brightness(0.7);
+        }
+        .swiper-slide {
+            position: relative;
+            width: 100%;
+            height: 100%;
+        }
+        .banner-content {
+            position: absolute;
+            left: 50%;
+            top: 50%;
+            transform: translate(-50%, -50%);
+            color: #fff;
+            text-align: center;
+            z-index: 10;
+            width: 100%;
+            max-width: 900px;
+            padding: 0 20px;
+        }
+        .banner-content h2 {
+            font-size: 64px;
+            font-weight: bold;
+            color: #FFFFFF;
+            letter-spacing: 2px;
+            text-align: center;
+            font-style: normal;
+            margin-bottom: 30px;
+        }
+        .banner-content p {
+            font-weight: 500;
+            font-size: 30px;
+            color: #FFFFFF;
+            line-height: 44px;
+            letter-spacing: 1px;
+            margin-bottom: 10px;
+        }
+        .banner-content span {
+            font-weight: 400;
+            font-size: 16px;
+            color: #FFFFFF;
+            opacity: 0.85;
+        }
+        .banner .swiper-pagination {
+            position: absolute;
+            left: 50%;
+            bottom: 20px;
+            transform: translateX(-50%);
+            z-index: 20;
+            width: auto;
+            display: flex;
+            gap: 12px;
+            align-items: center;
+            justify-content: center;
+            pointer-events: auto;
+        }
+        .banner .swiper-pagination-bullet {
+            width: 20px;
+            height: 4px;
+            background: #FFFFFF;
+            border-radius: 5px;
+            opacity: 0.5;
+            margin: 0 4px;
+            transition: opacity 0.3s, background 0.3s;
+        }
+        .banner .swiper-pagination-bullet-active {
+            opacity: 1;
+            background: #fff;
+        }        
+           /* 公司简介样式 */
+        .company-profile {           
+            max-width: 1200px;
+            margin: 80px auto 0;
+        }
+        
+        .profile-header {
+            margin-bottom: 40px;
+        }
+        
+        .en-title {
+            font-weight: 400;
+            font-size: 30px;
+            color: #737980;
+            line-height: 44px;
+            letter-spacing: 1px;
+            margin-bottom: 5px;
+        }
+        
+        .cn-title {
+            font-size: 32px;
+            color: #333;
+            font-weight: 500;
+            margin-top: 0;
+        }
+        
+        .profile-content {
+            position: relative; /* 添加这一行 */
+            display: flex;
+            align-items: stretch;
+            margin-bottom: 80px;
+        }
+        
+        .profile-left {
+            flex: 1;
+            display: flex;
+            flex-direction: column;
+            justify-content: flex-start;
+        }
+        
+        .profile-text {
+            flex: 1;
+            padding-right: 40px;
+        }
+        
+        .profile-text p {
+            font-size: 16px;
+            line-height: 1.8;
+            color: #333;
+            margin-bottom: 20px;
+            text-align: justify;
+        }
+        .profile-more-btn {
+            display: inline-block;
+            width: 138px;
+            height: 44px;
+            background: #d32f0f;
+            font-weight: 500;
+            font-size: 14px;
+            color: #FFFFFF;
+            line-height: 20px;
+            /* text-align: justified; */
+             text-align: center;
+            /*  竖直居中 */
+            /* vertical-align: middle; */
+            padding: 12px 40px;
+            border-radius: 4px;
+            margin-top: 30px;
+            font-weight: 500;
+            transition: background 0.2s;
+            box-sizing: border-box;
+            cursor: pointer;
+        }
+        .profile-more-btn:hover {
+            background: #b71c1c;
+        }
+        
+        .profile-image {
+            width: 540px;
+            flex-shrink: 0;
+            overflow: hidden;
+            display: flex;
+            align-items: stretch;
+        }
+        
+        .profile-image img {
+            width: 100%;
+            height: 100%;
+            object-fit: cover;
+            display: block;
+        }
+        
+        /* 公司数据样式 */
+        .company-data {
+            width: 890px;
+            height: 110px;
+            background-color: #fff;
+            box-shadow: 0 0 10px rgba(0,0,0,0.05);
+            position: absolute;
+            bottom: 40px;
+        }
+        
+        .data-box {
+            display: flex;
+            justify-content: space-between;
+            align-items: stretch;
+            height: 100%;
+        }
+        
+        .data-item {
+            flex: 1 1 0;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+            position: relative;
+            height: 110px;
+        }
+        
+        .data-item:not(:last-child)::after {
+            content: '';
+            position: absolute;
+            right: 0;
+            top: 25%;
+            height: 50%;
+            width: 1px;
+            background-color: #cfd2d6;
+        }
+        
+        .data-number-unit {
+            display: flex;
+            align-items: flex-end;
+            justify-content: center;
+        }
+        
+        .data-item h3 {
+            font-weight: 500;
+            font-size: 40px;
+            color: #DF0100;
+            margin: 0;
+            line-height: 1;
+        }
+        
+        .data-unit {
+            font-weight: 400;
+            font-size: 12px;
+            color: #8A9199;
+            margin-left: 4px;
+            margin-bottom: 2px;
+        }
+        
+        .data-title {
+            font-weight: 400;
+            font-size: 12px;
+            color: #737980;
+            /* margin-top: 8px; */
+        }
+        /* 新闻中心样式 */
+        .news-center-section {
+            width: 100%;
+            height: 932px;
+            background: url('images/index/background.jpg') center center no-repeat;
+            background-size: cover;
+            position: relative;
+            padding: 0;
+            box-sizing: border-box;
+        }
+
+        .news-center-inner {
+            max-width: 1200px;
+            margin: 0 auto;
+            /* 可选:让内容垂直居中 */
+            /* height: 100%; display: flex; flex-direction: column; justify-content: center; */
+        }
+
+        .news-header {
+            display: flex;
+            justify-content: space-between;
+            align-items: flex-end;
+            padding: 80px 0 80px 0; /* 左右padding去掉,交给外层容器控制 */
+        }     
+        .news-more {
+            font-weight: 400;
+            font-size: 14px;
+            color: #737980;
+            line-height: 20px;
+            transition: color 0.2s;
+        }
+        .news-more:hover {
+            color: #ff3366;
+        }
+        .news-list {
+            display: grid;
+            grid-template-columns: repeat(3, 1fr);
+            gap: 15px 30px;
+            max-width: 1200px;
+            margin: 0 auto;
+        }
+        .news-item {
+            width: 100%;
+            min-width: 0;
+            background: #fff;
+            border-radius: 8px;
+            overflow: hidden;
+            box-shadow: 0 2px 12px rgba(0,0,0,0.06);
+            display: flex;
+            flex-direction: column;
+            transition: box-shadow 0.2s;
+        }
+        
+        .news-item:hover {
+            box-shadow: 0 6px 24px rgba(0,0,0,0.12);
+        }
+        
+        .news-item img {
+            width: 380px;
+            height: 240px;
+            object-fit: cover;
+            display: block;
+            margin: 0 auto;
+        }
+        
+         /* 新闻信息区域样式 */
+         .news-info {
+            padding: 15px;
+            display: flex;
+            align-items: center; /* 确保元素垂直居中 */
+        }
+        
+        /* 日期样式 */
+        .news-date {
+            display: flex;
+            flex-direction: column; /* 垂直排列 */
+            align-items: center; /* 水平居中 */
+            padding-right: 20px; /* 右侧间距20px */
+            position: relative; /* 为伪元素定位 */
+            min-width: 70px; /* 设置最小宽度 */
+            flex-shrink: 0; /* 防止日期区域被压缩 */
+            text-align: center; /* 文本居中 */
+        }
+        
+        /* 添加竖线 */
+        .news-date::after {
+            content: '';
+            position: absolute;
+            right: 0;
+            top: 50%;
+            transform: translateY(-50%);
+            width: 1px;
+            height: 70%; /* 竖线高度为容器高度的70% */
+            background-color: #e5e5e5;
+        }
+        
+        /* 日期数字 */
+        .date-day{
+            font-size: 16px;
+            font-weight: bold;
+            color: #333;
+            line-height: 1.2;
+            display: block; /* 确保是块级元素 */
+            margin-bottom: 5px; /* 添加底部间距 */
+        }
+        
+        /* 年份 */
+        .date-year {
+            font-size: 14px;
+            color: #999;
+            line-height: 1.2;
+            display: block; /* 确保是块级元素 */
+        }
+        
+        /* 标题样式 */
+        .news-title {
+            margin: 0;
+            padding-left: 20px; /* 左侧间距20px */
+            font-size: 16px;
+            line-height: 1.5;
+            color: #333;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            display: -webkit-box;
+            flex: 1; /* 让标题占据剩余空间 */
+        }
+       
+        .message-section {
+            max-width: 1200px;
+            margin: 80px auto 0;
+            padding-bottom: 80px;
+        }
+
+        .message-header {
+            text-align: center;
+            margin-bottom: 40px;
+        }
+
+        .message-header .en-title {
+            font-size: 32px;
+            color: #888;
+            letter-spacing: 2px;
+            margin-bottom: 8px;
+        }
+
+        .message-header .cn-title {
+            font-size: 32px;
+            font-weight: bold;
+            color: #222;
+        }
+
+        .message-form {
+            width: 100%;
+        }
+
+        .form-row {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 32px;
+        }
+
+        .form-group {
+            flex: 1;
+            display: flex;
+            flex-direction: column;
+            margin-right: 32px;
+        }
+
+        .form-group:last-child {
+            margin-right: 0;
+        }
+
+        .form-group label {
+            font-size: 16px;
+            color: #222;
+            margin-bottom: 10px;
+            font-weight: 500;
+        }
+
+        .required {
+            color: #d32f0f;
+            margin-right: 2px;
+        }
+
+        .form-group input,
+        .form-group textarea {
+            background: #f6f8f7;
+            border: none;
+            border-radius: 2px;
+            font-size: 16px;
+            padding: 16px 18px;
+            color: #333;
+            outline: none;
+            resize: none;
+            transition: border 0.2s;
+        }
+
+        .form-group input:focus,
+        .form-group textarea:focus {
+            border: 1px solid #d32f0f;
+            background: #fff;
+        }
+
+        .form-group input {
+            height: 48px;
+        }
+
+        .form-group textarea {
+            min-height: 100px;
+            max-height: 200px;
+        }
+
+        .form-group-full {
+            flex: 1 1 100%;
+            margin-right: 0;
+        }
+
+        .form-row-btn {
+            justify-content: center;
+        }
+
+        .submit-btn {
+            width: 160px;
+            height: 48px;
+            background: #d32f0f;
+            color: #fff;
+            font-size: 18px;
+            border: none;
+            border-radius: 4px;
+            cursor: pointer;
+            font-weight: 500;
+            transition: background 0.2s;
+        }
+
+        .submit-btn:hover {
+            background: #b71c1c;
+        }
+    </style>
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+ <!-- Banner区域 -->
+ <section class="banner">
+    <div class="banner swiper">
+        <div class="swiper-wrapper">
+            {volist name="banner" id="v" key="k"}
+          <div class="swiper-slide">
+            <img src="{$v.pc_image|cdnurl}" class="banner-bg" alt="banner1">
+            <div class="banner-content">
+              <h2 swiper-animate-effect="fadeInLeft" swiper-animate-duration="1s" swiper-animate-delay="0.3s">{$v.bigfont}</h2>
+              <p swiper-animate-effect="fadeInLeft" swiper-animate-duration="1s" swiper-animate-delay="0.6s">{$v.font}</p>
+              <span>IT IS A COMPREHENSIVE ENTERPRISE INTEGRATING PRODUCTION TRADE AND SALES</span>
+            </div>
+          </div>
+          {/volist}
+          <!-- 可继续添加更多slide -->
+        </div>
+        <!-- 分页器和导航按钮 -->
+        <div class="swiper-pagination"></div>
+        <!-- <div class="swiper-button-prev"></div>
+        <div class="swiper-button-next"></div> -->
+      </div>
+</section>
+{if $product_show == '1'}
+
+{/if}
+{if $about_show == '1'}
+ <!-- 公司简介 -->
+ <div class="company-profile">
+    <div class="profile-content">
+        <div class="profile-left">
+            <div class="profile-header">
+                <h2 class="en-title">COMPANY PROFILE</h2>
+                <h2 class="cn-title">公司简介</h2>
+            </div>
+            <div class="profile-text">
+                {$home.introduction}            
+            </div>
+            <a href="about.html" class="profile-more-btn">了解更多</a>
+            
+        </div>
+        <div class="profile-image">
+            <img src={$home.image|cdnurl} alt="公司大楼">
+        </div>            
+    </div>             
+</div>
+{/if}
+{if $cases_show == '1'}
+
+{/if}
+{if $partner_show == '1'}
+
+{/if}
+{if $news_show == '1'}
+<div class="news-center-section">
+    <div class="news-center-inner">
+        <div class="news-header">
+            <div>
+                <div class="en-title">PRODUCT CLASSIFICATION</div>
+                <div class="cn-title">新闻中心</div>
+            </div>
+            <a href="{:addon_url('wwh/index/column', [':diyname'=>'news'])}" target="_blank">MORE &gt;</a>
+        </div>
+        <div class="news-list">
+            <!-- 新闻卡片,循环输出 -->
+            {volist name="news" id="v"}
+            <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                <div class="news-item">
+                    <img src="{$v.rec_image|cdnurl}" alt="新闻图片">
+                    <div class="news-info">
+                        <div class="news-date">
+                            <span class="date-day">03-29</span>
+                            <span class="date-year">2025</span>
+                        </div>
+                        <div class="news-title">
+                            <h3>{$v.title}</h3>
+                        </div>
+                    </div>
+                </div>
+            </a>
+            {/volist}
+            <!-- 继续添加新闻项... -->
+        </div>
+    </div>
+</div>
+
+{/if}
+<!-- 在线留言 -->
+<div class="message-section">
+    <div class="message-header">
+        <div class="en-title">ONLINE MESSAGE</div>
+        <div class="cn-title">给我们留言</div>
+    </div>
+    <form class="message-form" id="message">
+        <div class="form-row">
+            <div class="form-group">
+                <label><span class="required">*</span>联系人:</label>
+                <input type="text" id="realname" name="realname" placeholder="请输入您的姓名">
+            </div>
+            <div class="form-group">
+                <label><span class="required">*</span>电话:</label>
+                <input type="text" id="tel" name="tel" placeholder="请输入您的电话">
+            </div>
+            <div class="form-group">
+                <label><span class="required">*</span>邮箱:</label>
+                <input type="email" id="email" name="email" placeholder="请输入您的邮箱">
+            </div>
+        </div>
+        <div class="form-row">
+            <div class="form-group form-group-full">
+                <label><span class="required">*</span>留言板:</label>
+                <textarea id="content" name="content" placeholder="请输入您的留言"></textarea>
+            </div>
+        </div>
+        {:token()}
+        <div class="form-row form-row-btn">
+            <button type="submit" class="submit-btn">确定提交</button>
+        </div>
+    </form>
+</div>
+<!-- 底部 -->
+{include file="footer" /}
+
+<script src="__CDN__/assets/addons/material/js/layer/layer.js"></script>
+<script type="text/javascript">
+    $(function () {
+        var mySwiper = new Swiper('.banner', {
+            loop: true,
+            autoplay: {
+            delay: 4000,
+            disableOnInteraction: false,
+            },
+            pagination: {
+            el: '.swiper-pagination',
+            clickable: true,
+            },
+            navigation: {
+            nextEl: '.swiper-button-next',
+            prevEl: '.swiper-button-prev',
+            },
+            effect: 'fade',
+            fadeEffect: {
+            crossFade: true,
+            },
+        });
+    });
+    // 提交留言
+    $(".message-form").on("submit", function(e){
+        e.preventDefault(); // 阻止表单默认提交
+
+        var realname = $.trim($("#realname").val());
+        var tel = $.trim($("#tel").val());
+        var email = $.trim($("#email").val());
+        var content = $.trim($("#content").val());
+        // var verify = $.trim($("#verify").val()); // 如果有验证码
+
+        // 校验
+        if(!realname){showError('请输入您的姓名');return false;}
+        if(!tel){showError('请输入您的电话');return false;}
+        if(!/^1[3-9]\d{9}$/.test(tel)){showError('请输入正确的手机号');return false;}
+        if(!email){showError('请输入您的邮箱');return false;}
+        if(!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email)){showError('请输入正确的邮箱');return false;}
+        if(!content){showError('请输入您的留言');return false;}
+        // if(!verify){showError('请输入验证码');return false;}
+
+        var form = document.getElementById("message");
+        var formdata = new FormData(form);
+
+        $(".submit-btn").prop('disabled', true);
+
+        $.ajax({
+            url: "{:addon_url('wwh/index/message')}",
+            type: "POST",
+            data: formdata,
+            cache: false,
+            contentType: false,
+            processData: false,
+            dataType: "json",
+            complete: function() {
+                $(".submit-btn").prop('disabled', false);
+            },
+            success: function(response){
+                if(response.code === 1){
+                    layer.alert(response.msg, {
+                        icon: 1,
+                        end: function(){
+                            window.location.reload();
+                        }
+                    });
+                } else {
+                    showError(response.msg);
+                    // fleshVerify(); // 如果有验证码
+                }
+            },
+            error: function() {
+                showError('网络错误,请重试');
+                // fleshVerify(); // 如果有验证码
+            }
+        });
+
+        function showError(msg) {
+            layer.alert(msg, {
+                skin: 'layui-layer-lan',
+                closeBtn: 0,
+                title: "提示:",
+                icon: 2,
+                anim: 2,
+                end: function(){
+                    window.location.reload();
+                }
+            });
+        }
+        return false;
+    });
+</script>
+</body>
+</html>

+ 87 - 0
addons/wwh/view/materials/list_cases.html

@@ -0,0 +1,87 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban2_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner2|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur" {/if}>{:__lm($top,'name')}</a>
+                {if $navCur.name !== $top.name}
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+                {/if}
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="cases-list">
+    <div class="container-outer">
+        {volist name="archives" id="v"}
+        <div class="cases-list-item wow fadeInUp" data-wow-delay="0.5s">
+            <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                <div class="item-box">
+                    <div class="img">
+                        <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/list_cases_size.png" class="img-block">
+                        </div>
+                        <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                    </div>
+
+                    <div class="text-box">
+                        <div class="title">
+                            <h3>{$v.title}</h3>
+                            <h5>{$v.description|strip_tags}</h5>
+                            <div class="more">{:__lang('View More')}<i></i></div>
+                        </div>
+                    </div>
+                    <div class="wl">
+                        <div class="line"></div>
+                    </div>
+                </div>
+            </a>
+        </div>
+        {/volist}
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.6s">{$lbPage}</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 82 - 0
addons/wwh/view/materials/list_news.html

@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban4_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner4|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur" {/if}>{:__lm($top,'name')}</a>
+                {if $navCur.name !== $top.name}
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+                {/if}
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="news-list">
+    <div class="container-outer">
+        {volist name="archives" id="v"}
+        <div class="news-list-item wow fadeInUp" data-wow-delay="0.5s">
+            <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                <div class="img">
+                    <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                        <img src="__CDN__/assets/addons/wwh/images/list_news_size.png" class="img-block">
+                    </div>
+                    <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                </div>
+                <div class="news-list-text">
+                    <h3>{$v.title}</h3>
+                    <h5>{$v.description|strip_tags}</h5>
+                    <div class="bottom">
+                        <h5 class="left">{:__lang('View More')}<i></i></h5>
+                        <h5 class="right">{$v.time}</h5>
+                    </div>
+                </div>
+            </a>
+        </div>
+        {/volist}
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.5s">{$lbPage}</div>
+<!-- 底部 -->
+{include file="footer" /}
+</body>
+</html>

+ 123 - 0
addons/wwh/view/materials/list_product.html

@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lm($navCur,'keywords')}"/>
+    <meta name="description" content="{:__lm($navCur,'description')}"/>
+    <title>{:__lm($navCur,'seotitle')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!-- 头部 -->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban1_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner1|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$top.diyname])}" {if $navCur.name == $top.name}class="cur"{/if}>{:__lm($top,'name')}</a>
+                {if $navCur.name !== $top.name}
+                <span>/</span>
+                <a href="{:addon_url('wwh/column/index', [':diyname'=>$navCur.diyname])}" class="cur">{:__lm($navCur,'name')}</a>
+                {/if}
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="product-list">
+    <div class="container-outer">
+        <div class="left wow fadeInLeft" data-wow-delay="0.5s">
+            <h3>{:__lang('Products')}</h3>
+            <ul>
+                {volist name="nav" id="v"}
+                {if condition="($v.classify == 'product')"}
+                {php}
+                // 获取变量
+                $secondId = $secondId ?? null;
+                $navCurId = $navCur['id'] ?? null;
+                $hasActive = false;
+
+                // 检查是否有激活项
+                foreach ($v['childlist'] as $item) {
+                if ($item['id'] == $secondId || $item['id'] == $navCurId) {
+                $hasActive = true;
+                break;
+                }
+                }
+                {/php}
+                {volist name="v.childlist" id="vv" key="k"}
+                <li class="{if $vv.id == $secondId || $vv.id == $navCur.id}active{elseif $k == 1 && !$hasActive}active{/if}">
+                <h4><a href="{if empty($vv.diyname)}{$vv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vv.diyname])}{/if}">{:__lm($vv,'name')}</a></h4>
+                <div class="pro-second" style="{if $vv.id == $secondId || $vv.id == $navCur.id}display:block;{elseif $k == 1 && !$hasActive}display:block;{/if}">
+                    {volist name="vv.childlist" id="vvv"}
+                    <h6 class="{if $vvv.id == $navCur.id}active{/if}">
+                        <a href="{if empty($vvv.diyname)}{$vvv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vvv.diyname])}{/if}">{:__lm($vvv,'name')}</a>
+                    </h6>
+                    {volist name="vvv.childlist" id="vvvv"}
+                    <div class="pro-third {if $vvvv.id == $navCur.id}active{/if}">
+                        <a href="{if empty($vvvv.diyname)}{$vvvv.outlink}{else}{:addon_url('wwh/column/index', [':diyname'=>$vvvv.diyname])}{/if}">{:__lm($vvvv,'name')}</a>
+                    </div>
+                    {/volist}
+                    {/volist}
+                </div>
+                </li>
+                {/volist}
+                {/if}
+                {/volist}
+            </ul>
+        </div>
+        <div class="right">
+            <div class="list">
+                {volist name="archives" id="v"}
+                <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" class="wow fadeInUp" data-wow-delay="0.6s">
+                    <div class="title"><h3>{$v.title}</h3></div>
+                    <div class="text"><h3>{$v.title}</h3><p>{$v.p_pn}</p></div>
+                    <div class="img">
+                        <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                            <img src="__CDN__/assets/addons/wwh/images/index_product_small.png" class="img-block">
+                        </div>
+                    </div>
+                </a>
+                {/volist}
+            </div>
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.6s">{$lbPage}</div>
+<!-- 底部 -->
+{include file="footer" /}
+<script type="text/javascript">
+    $('.product-list .left').on('click', 'li', function () {
+        $(this).toggleClass('active').siblings().removeClass('active')
+        $(this).children('.pro-second').slideToggle().parent().siblings().children('.pro-second').slideUp()
+    })
+</script>
+</body>
+</html>

+ 134 - 0
addons/wwh/view/materials/search.html

@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
+    <meta name="renderer" content="webkit">
+    <meta name="keywords" content="{:__lang('Search Center')}"/>
+    <meta name="description" content="{:__lang('Search Center')}"/>
+    <title>{:__lang('Search Center')} - {$site.site_name}</title>
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/swiper.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/animate.min.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/style.css">
+    <link rel="stylesheet" type="text/css" href="__CDN__/assets/addons/wwh/css/media.css">
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/jquery.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/swiper.animate1.0.3.min.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/wow.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/menu.js"></script>
+    <script type="text/javascript" src="__CDN__/assets/addons/wwh/js/javascript.js"></script>
+    <link rel="shortcut icon" href="__CDN__/assets/addons/wwh/images/favicon.ico">
+</head>
+<body>
+<!--头部-->
+{include file="header" /}
+<!-- 栏目Banner -->
+<div class="col-banner">
+    <div class="text">
+        <div class="title wow fadeInUp" data-wow-delay="0.3s">
+            <h3>{$site.ban7_t1}</h3><i></i>
+        </div>
+    </div>
+    <div class="img">
+        <div class="pic" style="background-image: url('{$site.banner7|cdnurl}');">
+            <img src="__CDN__/assets/addons/wwh/images/col_size.png" class="img-block" alt="">
+        </div>
+    </div>
+    <div class="banner-path wow fadeInLeft" data-wow-delay="0.4s">
+        <div class="container-outer">
+            <div class="icon"><img src="__CDN__/assets/addons/wwh/images/home.svg" class="img-center"></div>
+            <div class="link">
+                <a href="{:addon_url('wwh/index/index')}">{:__lang('Home')}</a>
+                <span>/</span>
+                <a href="{:addon_url('wwh/search/index')}" class="cur">{:__lang('Search Center')}</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 内容 -->
+<div class="search-center">
+    <div class="container-outer">
+        <div class="nav wow fadeInUp" data-wow-delay="0.5s">
+            <a href="{:addon_url('wwh/search/index')}?keywords={$keywords|htmlentities}&type=1&page=1" {if $type == 1}class="cur"{/if}>{:__lang('Product')}<strong>{$productCount}</strong></a>
+            <a href="{:addon_url('wwh/search/index')}?keywords={$keywords|htmlentities}&type=2&page=1" {if $type == 2}class="cur"{/if}>{:__lang('Solution')}<strong>{$casesCount}</strong></a>
+            <a href="{:addon_url('wwh/search/index')}?keywords={$keywords|htmlentities}&type=3&page=1" {if $type == 3}class="cur"{/if}>{:__lang('News')}<strong>{$newsCount}</strong></a>
+        </div>
+        <div class="bottom">
+            {if $type == 1}
+            <div class="product-list">
+                <div class="right">
+                    {volist name="list" id="v"}
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}" class="search wow fadeInUp" data-wow-delay="0.6s" target="_blank">
+                        <div class="title"><h3>{$v.title}</h3></div>
+                        <div class="text"><h3>{$v.title}</h3><p>{$v.p_pn}</p></div>
+                        <div class="img">
+                            <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                                <img src="__CDN__/assets/addons/wwh/images/index_product_small.png" class="img-block">
+                            </div>
+                        </div>
+                    </a>
+                    {/volist}
+                </div>
+            </div>
+            {/if}
+            {if $type == 2}
+            <div class="cases-list">
+                {volist name="list" id="v"}
+                <div class="cases-list-item wow fadeInUp" data-wow-delay="0.6s">
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                        <div class="item-box">
+                            <div class="img">
+                                <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                                    <img src="__CDN__/assets/addons/wwh/images/list_cases_size.png" class="img-block">
+                                </div>
+                                <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                            </div>
+                            <div class="text-box">
+                                <div class="title">
+                                    <h3>{$v.title}</h3>
+                                    <h5>{$v.description|strip_tags}</h5>
+                                    <div class="more">{:__lang('View More')}<i></i></div>
+                                </div>
+                            </div>
+                            <div class="wl">
+                                <div class="line"></div>
+                            </div>
+                        </div>
+                    </a>
+                </div>
+                {/volist}
+            </div>
+            {/if}
+            {if $type == 3}
+            <div class="news-list">
+                {volist name="list" id="v"}
+                <div class="news-list-item wow fadeInUp" data-wow-delay="0.6s">
+                    <a href="{:addon_url('wwh/archives/index', [':diyname'=>$navId[$v.column_id]['diyname'], ':id'=>$v.id])}">
+                        <div class="img">
+                            <div class="pic" style="background-image: url('{$v.image|cdnurl}');">
+                                <img src="__CDN__/assets/addons/wwh/images/list_news_size.png" class="img-block">
+                            </div>
+                            <div class="column">{:__lm($navId[$v.column_id],'name')}</div>
+                        </div>
+                        <div class="news-list-text">
+                            <h3>{$v.title}</h3>
+                            <h5>{$v.description|strip_tags}</h5>
+                            <div class="bottom">
+                                <h5 class="left">{:__lang('View More')}<i></i></h5>
+                                <h5 class="right">{$v.time}</h5>
+                            </div>
+                        </div>
+                    </a>
+                </div>
+                {/volist}
+            </div>
+            {/if}
+        </div>
+    </div>
+</div>
+<div class="fenye wow fadeInUp" data-wow-delay="0.6s">{$searchPage}</div>
+<!--底部-->
+{include file="footer" /}
+</body>
+</html>

BIN
public/assets/addons/adminlogin/login2/202111221526557.png


BIN
public/assets/addons/adminlogin/login2/square-bottom.png


BIN
public/assets/addons/adminlogin/login2/square-left.png


BIN
public/assets/addons/adminlogin/login2/square-right.png


BIN
public/assets/addons/adminlogin/login2/square-top.png


BIN
public/assets/addons/adminlogin/login3/check_icon.png


BIN
public/assets/addons/adminlogin/login3/leftBottomImg.png


BIN
public/assets/addons/adminlogin/login3/mainImg.png


BIN
public/assets/addons/adminlogin/login3/rightTopImg.png


BIN
public/assets/addons/adminlogin/login3/success_icon.png


BIN
public/assets/addons/adminlogin/login3/warn_icon.png


BIN
public/assets/addons/adminlogin/login5/bgg.jpg


BIN
public/assets/addons/adminlogin/login5/square-bottom.png


BIN
public/assets/addons/adminlogin/login5/square-left.png


BIN
public/assets/addons/adminlogin/login5/square-right.png


BIN
public/assets/addons/adminlogin/login5/square-top.png


File diff suppressed because it is too large
+ 6 - 0
public/assets/addons/material/css/animate.min.css


+ 698 - 0
public/assets/addons/material/css/media copy.css

@@ -0,0 +1,698 @@
+@charset "UTF-8";
+
+@media screen and (max-width: 1680px) {
+    .container-outer{width: 88%;}
+    .container {padding-left:80px;padding-right:80px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev,.index-banner-swiper .swiper-button .swiper-button-next,.index-banner-swiper .swiper-button .swiper-button-prev::before,.index-banner-swiper .swiper-button .swiper-button-next::before {width:50px;height:55px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev::after,.index-banner-swiper .swiper-button .swiper-button-next::after {font-size:12px;}
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 392px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -60px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -60px;}
+
+}
+
+@media screen and (max-width: 1440px) {
+    .container-outer{width: 92%;}
+    .container {padding-left:60px;padding-right:60px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev::before,.index-banner-swiper .swiper-button .swiper-button-next::before {width:100%;height:100%;}
+
+    /* 头部 */
+    .header .header-content{height: 75px;}
+    .header .header-nav > ul > li > a{line-height: 75px;font-size: 16px;}
+    .header .header-search{margin-top: 18px;}
+    .header .header-search a{line-height: 40px;}
+    .header .header-search .lang a{width: 120px;height: 40px;}
+    .header .header-search .lang a::after{width: 120px;height: 40px;}
+    .header .header-search i{width: 16px;height: 16px;}
+    .header .header-search .search {margin-left: 8px;}
+    .header .header-search .search a {width: 50px;height: 40px;}
+    .header .header-search .search a::after{width: 50px;height: 40px;}
+    .header .search-show-top .search-input{font-size: 16px;padding: 0 7%;}
+
+    /* 底部 */
+    .footer .footer-content-top{padding: 40px 0;line-height: 40px;}
+    .footer .footer-content-top .footer-item-bottom{padding-top: 20px;}
+    .footer .footer-content-top .footer-contact span.font{font-size: 26px;}
+    .footer .footer-content-top .footer-contact span{font-size: 16px;}
+    .footer .footer-content-top .footer-link{font-size: 22px;}
+    .footer .footer-content-top .footer-nav a{font-size: 16px;}
+    .footer .footer-content-top .footer-social li a{width: 43px;height: 43px;}
+    .footer .footer-content-top .footer-social a img{max-width: 43%;max-height: 43%;}
+    .footer .footer-content-bottom{padding:25px 0;}
+
+    /* 客户留言 */
+    .message-bg .message-wrapper{width: 42%;}
+    .message-bg .message-box{padding: 50px 50px 40px 50px;}
+    .message-bg .message-box .message-title h5{font-size: 18px;}
+    .message-bg .message-box .message-list{margin-top: 20px;}
+    .message-bg .message-box .message-text{height: 42px;margin-bottom: 10px;}
+    .message-bg .message-box .message-submit p{line-height: 42px;}
+    .message-bg .message-box .verify-group .message-text{width: calc(100% - 136px);}
+    .message-bg .message-box .verify-group .verify-img{width: 136px;}
+
+    /* 首页Banner */
+    .index-banner-swiper .index-banner-item .big div{font-size: 40px;padding-bottom: 10px;}
+    .index-banner-swiper .index-banner-item .text{left: 7%;}
+    .index-banner-swiper .index-banner-item .small div{font-size: 20px;}
+    .index-banner-swiper .index-banner-item .play a{padding: 10px 12px;}
+    .index-banner-swiper .index-banner-item .play i{width: 14px;height: 14px;margin-right: 6px;}
+
+    /* 首页推荐产品 */
+    .index-product {padding: 50px 0;}
+    .index-mod-top{padding-bottom: 20px;}
+    .index-mod-top .index-mod-title h3{font-size: 24px;}
+    .index-mod-top .index-mod-title i{width: 46px;margin: 8px 0;}
+    .ty-more a{padding: 10px 18px;}
+    .ty-more span{font-size: 14px;line-height: 14px;margin-right: 6px;}
+    .ty-more i{width: 8px;height: 10px;}
+    .index-product .bottom .title h3{font-size: 16px;}
+    .index-product .bottom .text h3{font-size: 16px;}
+    .index-product .bottom .text p{font-size: 14px;}
+
+    /* 首页公司简介 */
+    .index-about{padding: 50px 0;}
+    .index-about .index-about-wrapper .index-about-left{padding-right: 50px;}
+    .index-about .index-about-left .index-about-msg{margin: 20px 0 20px;}
+    .index-about .index-about-left .index-about-msg p{font-size: 14px;}
+    .index-about .index-about-left .index-about-msg p > span{font-size: 16px;}
+    .index-about .index-about-left .index-about-number{margin-bottom: 30px;}
+    .index-about .index-about-left .index-about-number p > strong{font-size: 36px;}
+    .index-about .index-about-left .index-about-number p > span{font-size: 16px;}
+
+    /* 首页解决方案 */
+    .index-cases{padding: 50px 0;}
+    .index-cases .index-cases-item{height: 340px;}
+    .column{line-height: 28px;padding: 0 2% 0 4%;}
+    .column::after {width: 26px;height: 28px;right: -25px;}
+    .index-cases .index-cases-item a .item-box .text-box .title{height: 100px;}
+    .index-cases .index-cases-item a .item-box .text-box .title h3{font-size: 16px;max-height: 24px;line-height: 24px;}
+    .index-cases .index-cases-item a .item-box .text-box .title .more{bottom: 20px;}
+    .index-cases .index-cases-item a:hover .item-box .text-box .title{height: 170px;}
+
+    /* 首页合作伙伴 */
+    .index-partner{padding: 50px 0;}
+    .index-partner .index-partner-item a{padding: 3% 0;}
+    .index-partner .index-partner-item .logo{height: 60px;}
+
+    /* 首页新闻中心 */
+    .index-news{padding: 50px 0;}
+    .index-news .index-news-item .index-news-text h3{font-size: 16px;padding-bottom: 10px;}
+    .index-news .index-news-item .index-news-text h3::before{width: 80px;}
+    .index-news .index-news-item .index-news-text h5{padding-top: 10px;}
+    .index-news .index-news-item .index-news-text .bottom .left i{width: 11px;height: 11px;margin-top: 5px;margin-left: 3px;}
+
+    /* 栏目Banner */
+    .col-banner .title h3{font-size: 32px;}
+    .col-banner .title i{width: 62px;margin: 15px 0;}
+    .banner-path{height: 55px;}
+    .banner-path .icon{width: 65px;}
+    .banner-path .link{left: 90px;}
+
+    /* 产品列表 */
+    .product-list{padding: 50px 0;}
+    .product-list .left{width:230px;padding-bottom: 40px;}
+    .product-list .left h3{height:50px;line-height:50px;font-size: 18px;}
+    .product-list .left ul li h4{height: 36px;line-height: 36px;padding: 0 20px 0 35px;}
+    .product-list .left ul li h4::before {left: 20px;}
+    .product-list .left ul li h4::after {right: 20px;}
+    .product-list .left ul li h4 a{font-size: 15px;}
+    .product-list .left ul li .pro-second{padding: 0 0 15px 15px;}
+    .product-list .left ul li .pro-second h6 {line-height: 26px;height: 26px;}
+    .product-list .left ul li .pro-second .pro-third{line-height: 26px;height: 26px;margin: 0 15px;}
+    .product-list .right{width: calc(100% - 250px);}
+    .product-list .right .title h3{font-size: 16px;}
+    .product-list .right .text h3{font-size: 16px;}
+    .product-list .right .text p{padding-top: 10px;}
+
+    /* 产品详情 */
+    .product-detail {padding: 50px 0;}
+    .product-top .product-info h3{font-size: 20px;padding-bottom: 15px;}
+    .product-top .product-info h4{font-size: 16px;padding-bottom: 15px;}
+    .product-top .product-info .product-text{padding: 15px 0;}
+    .product-detail .product-bottom{padding-top: 40px;}
+    .product-bottom .product-bottom-box{padding: 2% 3%;}
+    .product-bottom .product-bottom-nav li{font-size: 16px;margin-right: 30px;padding: 0 3px 15px 3px;}
+
+    /* 方案列表 */
+    .cases-list{padding: 50px 0;}
+    .cases-list .cases-list-item{height: 340px;}
+    .cases-list .cases-list-item a .item-box .text-box .title{height: 100px;}
+    .cases-list .cases-list-item a .item-box .text-box .title h3{font-size: 16px;max-height: 24px;line-height: 24px;}
+    .cases-list .cases-list-item a .item-box .text-box .title .more{bottom: 20px;}
+    .cases-list .cases-list-item a:hover .item-box .text-box .title{height: 170px;}
+
+    /* 方案详情 */
+    .cases-detail{padding: 50px 0;}
+    .cases-detail .cases-detail-top{padding-top: 40px;padding-bottom: 15px;}
+    .cases-detail .cases-detail-top h1{font-size: 24px;}
+    .cases-detail .cases-detail-top .type a{padding: 8px 12px;}
+    .cases-detail .cases-detail-main{padding: 30px 0 40px;}
+
+    /* 服务策略 */
+    .service-detail{padding: 50px 0;}
+    .service-detail .service-detail-box{padding: 40px 0;line-height: 36px;}
+
+    /* 营销网络 */
+    .market-detail{margin-top: 40px;}
+    .market-detail .market-detail-box{padding: 40px 0;}
+    .market-detail .market-detail-box .market-left{padding-top: 20px;padding-bottom: 20px;}
+    .market-detail .market-detail-box .market-left ul li .text{font-size: 18px;}
+    .market-detail .market-detail-box .market-right .main .frame .bot h6{font-size: 20px;}
+    .market-detail .market-detail-box .market-right .main .frame .bot div{margin-top: 30px;}
+    .market-detail .market-detail-box .market-right .main .frame .bot div p{font-size: 16px;}
+
+    /* 资料下载 */
+    .download-detail{padding: 50px 0;}
+    .download-detail .download-top{padding-bottom: 40px;}
+    .download-detail .download-top-left{font-size: 30px;line-height: 30px;}
+    .download-detail .download-top-right{width:680px;margin-top: 10px;}
+    .download-detail .download-item{padding: 15px 0;}
+    .download-detail .download-item li{padding: 15px 0;}
+    .download-detail .download-select{height: 48px;line-height: 48px;}
+    .download-detail .download-select select{height: 48px;line-height: 48px;}
+    .download-detail .download-top-right ul li{width: 350px;height: 48px;line-height: 48px;}
+    .download-detail .download-search{padding-right: 60px;}
+    .download-detail .download-search input{height: 48px;line-height: 48px;}
+    .download-detail .download-button{width: 60px;}
+
+    /* 常见问题 */
+    .faq-detail{padding: 50px 0;}
+    .faq-detail .faq-top{margin-bottom: 40px;}
+    .faq-detail .faq-top .faq-search{height: 48px;line-height: 48px;padding-right: 56px;}
+    .faq-detail .faq-top .faq-search input{height: 48px;line-height: 48px;}
+    .faq-detail .faq-top .faq-button{width: 56px;}
+    .faq-detail .faq-bottom .faq-item .main .text::before{left: -40px;}
+
+    /* 合作伙伴 */
+    .partner-detail{padding: 50px 0;}
+    .partner-detail .partner-detail-item a{padding: 3% 0;}
+    .partner-detail .partner-detail-item .logo{height: 60px;}
+
+    /* 新闻列表 */
+    .news-list{padding: 50px 0;}
+    .news-list .news-list-item .news-list-text h3{font-size: 16px;padding-bottom: 10px;}
+    .news-list .news-list-item .news-list-text h3::before{width: 80px;}
+    .news-list .news-list-item .news-list-text h5{padding-top: 10px;}
+    .news-list .news-list-item .news-list-text .bottom .left i{width: 11px;height: 11px;margin-top: 5px;margin-left: 3px;}
+
+    /* 新闻详情 */
+    .news-detail{padding: 50px 0;}
+    .news-detail .news-detail-top{padding-top: 40px;padding-bottom: 15px;}
+    .news-detail .news-detail-top h1{font-size: 24px;}
+    .news-detail .news-detail-top .type a{padding: 8px 12px;}
+    .news-detail .news-detail-main{padding: 30px 0 40px;}
+
+    /* 公司概况 */
+    .company-wrapper{padding: 50px 0;}
+    .company-box .left{padding-right: 80px;}
+    .company-box .left .title{font-size: 26px;}
+    .company-box .left .title i{margin: 5px 0;width: 51px;}
+    .company-box .left .text{margin-top: 25px;}
+    .play-btn{width: 58px;height: 58px;}
+    .play-btn i{width: 58px;height: 58px;}
+    .develop-box{padding: 50px 0;}
+    .develop-box .top .title{font-size: 26px;}
+    .develop-box .top .title i{margin: 5px 0;width: 51px;}
+    .develop-box .bottom{margin-top: 25px;}
+    .develop-box .bottom::before {width:250px;left:-136px;}
+    .develop-box .bottom::after {width:250px;right:-108px;}
+    .develop-box .bottom .swiper-container.develop-swiper{padding-bottom: 40px;}
+    .develop-box .bottom .swiper-slide .item-box{height: 320px;padding: 16px 35px;}
+    .develop-box .bottom .swiper-slide .item-box .time{font-size: 32px;}
+    .develop-box .bottom .swiper-slide .item-box .time span{font-size: 26px;}
+    .develop-box .bottom .swiper-slide .item-box .line{margin: 8% 0;}
+    .develop-box .bottom .swiper-slide .item-box .desc p{margin-bottom: 16px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -38px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -38px;}
+    .develop-box .bottom .swiper-button .arrow::after{width: 48px;height: 42px;}
+    .culture-box{padding: 50px 0;}
+    .culture-box .top .title{font-size: 26px;}
+    .culture-box .top .title i{margin: 5px 0;width: 51px;}
+    .culture-box .bottom{margin-top: 25px;}
+    .culture-box .bottom .items .text-box .title{margin-top: 15px;}
+    .culture-box .bottom .items .text-box .title .tit {font-size: 22px;line-height: 22px;}
+    .culture-box .bottom .items .text-box .title .slogan{font-size:14px;margin-top: 15px;}
+
+    /* 荣誉资质 */
+    .honor-detail{padding: 50px 0;}
+    .honor-detail .honor-item .title{font-size: 18px;}
+
+    /* 加入我们 */
+    .join-detail{padding: 50px 0;}
+    .join-detail .join-option .dept,.join-detail .join-option .add{height: 48px;line-height: 48px;max-width: 260px;}
+    .join-detail .join-option .dept{margin-right: 35px;}
+    .join-detail .join-option .dept select, .join-detail .join-option .add select {height: 48px;line-height: 48px;}
+    .join-detail .join-search{width: 350px;height: 48px;line-height: 48px;}
+    .join-detail .join-search .so-inp{padding-right: 60px;}
+    .join-detail .join-search .so-inp input{height: 48px;line-height: 48px;}
+    .join-detail .join-search .join-button{width: 60px;}
+    .join-detail .top{padding-bottom: 30px;}
+    .join-detail .join-item{margin-bottom: 15px;}
+    .join-detail .join-item .recruit-top{padding: 20px 0;padding-left: 62px;padding-right: 40px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p{font-size: 16px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p::before {height: 18px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req p{font-size: 14px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req:last-child::before {display: none;}
+    .join-detail .join-item .recruit-content{padding: 35px 40px 46px 62px;}
+    .join-detail .join-item .recruit-content .join-more{width: 136px;height: 42px;line-height: 42px;margin-top: 30px;}
+
+    /* 加入我们弹窗 */
+    .join-form{width: 560px;}
+    .join-form .title{padding-bottom:5%;font-size: 28px;}
+    .join-form .message-text{margin-bottom:10px;height: 42px;}
+    .join-form .upload{margin-bottom: 10px;}
+    .join-form .upload .text{padding-bottom: 10px;margin-top: 10px;}
+    .join-form .upload .input{height: 42px;line-height: 42px;}
+    .join-form .upload .input .right{width: 80px;}
+    .join-form .validate .message-text{height: 42px;width: calc(100% - 136px);}
+    .join-form .validate .verify-img{width: 136px;}
+
+    /* 联系我们 */
+    .contact-detail{padding: 50px 0;}
+    .contact-detail .item .icon{width: 68px;height: 68px;}
+    .contact-detail .item .title{margin: 10px 0;}
+    .contact-detail .item .text{font-size: 16px;}
+
+    /* 搜索中心 */
+    .search-center{padding: 50px 0;}
+    .search-center .nav a{margin-right: 1%;padding-bottom: 12px;font-size: 18px;}
+    .search-center .bottom{padding-top: 25px;}
+
+    /* 质保查询 */
+    .qa-detail {padding:50px 0;}
+}
+
+@media screen and (max-width: 1366px) {
+    .container {padding-left:40px;padding-right:40px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev,.index-banner-swiper .swiper-button .swiper-button-next {height:50px;}
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 333px;}
+    .develop-box .bottom .swiper-button .arrow::after {width: 42px;height: 37px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -37px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -37px;}
+}
+
+@media screen and (max-width: 1280px) {
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 319px;}
+    .develop-box .bottom .swiper-button .arrow::after {width: 40px;height: 36px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -35px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -35px;}
+}
+
+@media screen and (max-width: 960px) {
+
+    /* 通用 */
+    .container-outer {width:90%;}
+    .container {width:100%;padding-left:0;padding-right:0;}
+    .ty-more a {padding:10px 20px;}
+    .ty-more span {font-size:14px;margin-right:5px;}
+    .ty-more i {width:8px;height:10px;}
+
+    /* 头部 */
+    .header .header-content{height: 50px;}
+    .header .header-content .header-logo{width: 30%;}
+    .no-touch{overflow-y: hidden;}
+    .no-touch .header-content .header-logo img.logo1{display: none;}
+    .no-touch .header-content .header-logo img.logo2{display: block;}
+    .header .header-nav{margin-left: 0px;float: right;}
+    .header .header-nav > ul{position: fixed;right: 0;display: block;background: #fff;overflow: auto;scrollbar-gutter: stable;transform: translateX(100%);}
+    .header .header-nav ul li, .header .header-nav ul ul li, .header .header-nav ul li:hover > ul > li{width: 100%;height: auto;border-bottom: 1px solid rgba(120, 120, 120, 0.15);}
+    .header .header-nav ul ul li:last-child{border-bottom: none;border-top: none;}
+    .header .header-nav ul li a, .header .header-nav ul ul li a{width: 100%;padding-left: 20px;}
+    .header .header-nav > ul > li{float: none;display: block;margin: 0;}
+    .header .header-nav > ul > li > a{z-index: 0;}
+    .header .header-nav > ul > li > a::after{display: none;}
+    .header .header-nav ul ul li a{height: 60px;padding: 20px 20px 20px 40px;font-size: 16px;color: #333333;background: none;}
+    .header .header-nav ul ul li.has-sub > a::before{display: none;}
+    .header .header-nav ul ul li:hover > a, .header .header-nav ul ul li a:hover{color: #333333;background: #ffffff;}
+    .header .header-nav ul ul ul li a{padding-left: 60px;}
+    .header .header-nav ul ul ul ul li a{padding-left: 80px;}
+    .header .header-nav ul ul, .header .header-nav ul ul ul{position: relative;left: 0;right: auto;width: 100%;margin: 0;box-shadow: none;border-top: 1px solid rgba(120, 120, 120, 0.15);}
+    .header .header-nav > ul > li.has-sub > a::after, .header .header-nav ul ul li.has-sub > a::after{display: none;}
+    .header .header-nav > ul > li > a,.header.scroll-top .header-nav > ul > li > a,.header.scroll-top .header-nav > ul > li > a{color: rgba(0,0,0,0.6);line-height: 60px;}
+    .header .header-nav > ul > li.cur > a,.header.scroll-top .header-nav > ul > li.cur > a,.header.scroll-top .header-nav > ul > li.cur > a{color: #fdd000;font-size: 16px;}
+    .header .header-nav > ul > li::after{display: none;}
+    .header .header-nav ul ul ul{top: 0px;border-top: 1px solid rgba(120, 120, 120, 0.15);}
+    .header .header-nav .submenu-button{position: absolute;z-index: 10;right: 0;top: 0;display: block;border-left: 1px solid rgba(120, 120, 120, 0.15);height: 60px;width: 60px;cursor: pointer;}
+    .header .header-nav .submenu-button::after{content: '';position: absolute;top: 22px;left: 29px;display: block;width: 1px;height: 16px;background: #333333;z-index: 99;}
+    .header .header-nav .submenu-button::before{content: '';position: absolute;left: 22px;top: 29px;display: block;width: 16px;height: 1px;background: #333333;z-index: 99;}
+    .header .header-nav > ul > li > a.cur,.header .header-nav > ul > li > ul > li > a.cur,.header .header-nav > ul > li > ul > li > ul > li > a.cur{color: #fdd000;}
+    .header .header-nav .submenu-button.submenu-opened:after{display: none;}
+    .header .header-nav #menu-toggle{display: block;width: 40px;height: 40px;position: absolute;overflow: hidden;right: 0;top: 5px;z-index: 111;}
+    #menu-toggle .nav-open, #menu-toggle .nav-open:after, #menu-toggle .nav-open:before{content:"";display:block;width:24px;height:2px;background:#fff;position:absolute;top:50%;margin-top:-1px;left:50%;margin-left:-12px;-webkit-transition:transform 0.3s cubic-bezier(0.600,0.000,0.200,1.000);transition:transform 0.3s cubic-bezier(0.600,0.000,0.200,1.000);-webkit-transition-timing-function:cubic-bezier(0.600,0.000,0.200,1.000);transition-timing-function:cubic-bezier(0.600,0.000,0.200,1.000);transition-delay:0.15s;}
+    #menu-toggle .nav-open:after{margin-top:-7px;top:0;transition-delay:0.27s;}
+    #menu-toggle .nav-open:before{margin-top:7px;top:0;transition-delay:0.2s;}
+    #menu-toggle .nav-close:before, #menu-toggle .nav-close:after{content:"";display:block;width:24px;height:2px;background:#fff;position:absolute;top:50%;margin-top:-1.5px;left:50%;margin-left:-12px;-webkit-transform:translateY(-70px) translateX(-70px) rotate(45deg);transform:translateY(-70px) translateX(-70px) rotate(45deg);transition-delay:0.12s;}
+    #menu-toggle .nav-close:after{transition-delay:0s;-webkit-transform:translateY(70px) translateX(-70px) rotate(-45deg);transform:translateY(70px) translateX(-70px) rotate(-45deg);}
+    #menu-toggle .nav-close:after{-webkit-transform:translateY(-70px) translateX(70px) rotate(-45deg);transform:translateY(-70px) translateX(70px) rotate(-45deg);}
+    .detail .header #menu-toggle .nav-open,.detail .header #menu-toggle .nav-open:after,.detail .header #menu-toggle .nav-open:before{background: #333333;}
+    .header.scroll-top #menu-toggle .nav-open,.header.scroll-top #menu-toggle .nav-open:after,.header.scroll-top #menu-toggle .nav-open:before{background: #333333;}
+    .no-touch .header .header-nav > ul{width: 100%;height: 100%;padding-top: 50px;margin-top: 50px;border-top: 1px solid #e6e6e6;-webkit-transform: translateX(0);-moz-transform: translateX(0);-ms-transform: translateX(0);-o-transform: translateX(0);transform: translateX(0);-webkit-overflow-scrolling: touch;}
+    .no-touch #menu-toggle .nav-open, .no-touch #menu-toggle .nav-open:after, .no-touch #menu-toggle .nav-open:before{-webkit-transform:translateX(70px);transform:translateX(70px);transition-delay:0.12s;background: #333333;}
+    .no-touch #menu-toggle .nav-open:after{transition-delay:0s;}
+    .no-touch #menu-toggle .nav-open:before{transition-delay:0.07s;}
+    .no-touch #menu-toggle .nav-close:before{transition-delay:0.12s;-webkit-transform:rotate(45deg);transform:rotate(45deg);background: #333333;}
+    .no-touch #menu-toggle .nav-close:after{transition-delay:0.24s;-webkit-transform:rotate(-45deg) !important;transform:rotate(-45deg) !important;background: #333333;}
+    .header .header-search{margin: 7px 60px 7px 0;}
+    .header .header-search a{line-height: 36px;}
+    .header .header-search .search a{width: 46px;height: 36px;}
+    .header .header-search .search a::after{width: 46px;height: 36px;}
+    .header .header-search .lang{display: none;}
+    .header .header-search .m-lang{display: block;margin-right: 10px;}
+    .header .header-search .m-lang a{color: #FFF;font-size: 16px;}
+    .header.scroll-top .header-search .m-lang a{color: #333333;}
+    .header .search-show{width: 100%;background: #fff;padding: 0 5%;box-sizing: border-box;}
+    .header .search-show-top .search-input{padding: 0 10%;border-bottom: none;}
+
+    /* 首页Banner */
+    .index-banner-swiper .index-banner-item .text{width: 90%;left: 5%;}
+    .index-banner-swiper .index-banner-item .big div{font-size: 24px;}
+    .index-banner-swiper .index-banner-item .small div{font-size: 16px;line-height: 26px;}
+    .index-banner-swiper .index-banner-item .play a{padding: 10px 20px;}
+    .index-banner-swiper .index-banner-item .play i{ width: 13px;height: 13px;margin-right: 5px;}
+    .index-banner-swiper .index-banner-item .img .pic{display: none;}
+    .index-banner-swiper .index-banner-item .img .mpic{display: block;}
+    .index-banner-swiper .banner-pagination{width: 60px;bottom: 3%;}
+    .index-banner-swiper .banner-pagination span.swiper-pagination-current{font-size: 20px;}
+    .index-banner-swiper .banner-pagination span.swiper-pagination-total{font-size: 14px;}
+
+    /*底部*/
+    .footer .footer-content-top{width:90%;padding: 30px 0;line-height:normal;}
+    .footer .footer-content-top .footer-item{float:none;width:100%}
+    .footer .footer-content-top .footer-item-top{padding:10px 0}
+    .footer .footer-content-top .footer-logo{width:130px;height:auto}
+    .footer .footer-content-top .footer-logo a img{display:block;width:100%}
+    .footer .footer-content-top .footer-link{font-size: 16px;line-height: 30px;}
+    .footer .footer-content-top .footer-item-bottom{padding-top:10px}
+    .footer .footer-content-top .footer-contact span{font-size: 14px;line-height:30px}
+    .footer .footer-content-top .footer-contact span.font{font-size: 20px;}
+    .footer .footer-content-top .footer-contact i{width: 34px;height: 32px;}
+    .footer .footer-content-top .footer-social li a{width: 40px;height: 40px;}
+    .footer .footer-content-top .footer-nav a{font-size:14px;line-height:28px}
+    .footer .footer-content-bottom{padding:10px 0}
+    .footer .footer-content-bottom .footer-copy{font-size: 13px;line-height:20px}
+    .footer .footer-content-bottom .footer-beian{width:100%;position:relative;top:0;transform:none;margin-top:10px}
+    .footer .footer-content-bottom .footer-beian span{font-size: 13px;}
+
+    /* 客户留言 */
+    .message-bg .message-wrapper{width: 96%;}
+    .message-bg .message-box {padding:20px 15px;}
+    .message-bg .message-box .message-list{margin-top: 15px;}
+    .message-bg .message-box .message-submit{width: 100%;}
+
+    /* 首页推荐产品 */
+    .index-mod-top {padding-bottom:20px;}
+    .index-mod-top .index-mod-title h3 {font-size:20px;}
+    .index-mod-top .index-mod-title h5 {font-size:13px;line-height:20px;}
+    .index-mod-top .index-mod-title i {width:38px;}
+    .index-product {padding:40px 0;}
+    .index-product .bottom {display:grid;}
+    .index-product .bottom .items.left {width:100%;}
+    .index-product .bottom .right {width:100%;margin-top:10px;}
+    .index-product .bottom .right .items {width:100%;margin-left:0;}
+    .index-product .bottom .right .items:nth-of-type(3) {margin-bottom:10px;}
+    .index-product .bottom .title h3 {font-size:16px;}
+    .index-product .bottom .text {display:none;}
+    .index-product .bottom a.pic::before {display:none;}
+    .index-product .bottom a:hover .title {display:block;}
+
+    /* 首页公司简介 */
+    .index-about {padding:40px 0;}
+    .index-about .index-about-wrapper {flex-flow:column;}
+    .index-about .index-about-wrapper .index-about-left {width:100%;height:auto;padding-right:0px;}
+    .index-about .index-about-left .index-about-title {padding-bottom:5px;}
+    .index-about .index-about-left p.cn {font-size:20px;}
+    .index-about .index-about-left p.en {font-size:13px;}
+    .index-about .index-about-left .index-about-msg {margin:20px 0 20px;}
+    .index-about .index-about-left .index-about-msg p {font-size:14px;}
+    .index-about .index-about-left .index-about-msg p > span {font-size:15px;}
+    .index-about .index-about-left .index-about-number {margin-bottom:20px;}
+    .index-about .index-about-left .index-about-number li {margin-right:10%;}
+    .index-about .index-about-left .index-about-number p {font-size:14px;}
+    .index-about .index-about-left .index-about-number p > strong {font-size:30px;}
+    .index-about .index-about-left .index-about-number p > span {font-size:16px;}
+    .index-about .index-about-wrapper .index-about-right {width:100%;margin-top:40px;}
+
+    /* 首页解决方案 */
+    .index-cases {padding:40px 0;}
+    .index-cases .index-cases-item {float:none;width:100%;height:310px;margin-right:0;margin-bottom:10px;}
+    .index-cases .index-cases-item:last-child {margin-bottom:0;}
+    .index-cases .index-cases-item a .item-box .text-box .title {height:100px;}
+    .index-cases .index-cases-item a .item-box .text-box .title h3 {font-size:16px;}
+    .index-cases .index-cases-item a .item-box .text-box .title .more {left:5%;bottom:20px;}
+
+    /* 首页合作伙伴 */
+    .index-partner {padding:40px 0;}
+    .index-partner .index-partner-item {width:calc((100% - 10px) / 2);}
+    .index-partner .index-partner-item:nth-child(2n) {margin-right:0;}
+    .index-partner .index-partner-item:nth-child(-n + 6),.index-partner .index-partner-item:nth-child(-n + 5),.index-partner .index-partner-item:nth-child(-n + 4) {margin-top:10px}
+    .index-partner .index-partner-item:nth-child(-n + 2) {margin-top:0;}
+    .index-partner .index-partner-item .logo {height:50px;}
+    .index-partner .index-partner-item .title {font-size:14px;}
+
+    /* 首页新闻中心 */
+    .index-news {padding:40px 0;}
+    .index-news .index-news-item {float:none;width:100%;margin-right:0px;margin-bottom:10px;}
+    .index-news .index-news-item:last-child {margin-bottom:0px;}
+    .index-news .index-news-item .index-news-text h3 {font-size:16px;padding-bottom:10px;}
+    .index-news .index-news-item .index-news-text h5 {font-size:12px;padding-top:10px;}
+
+    /* 分页 */
+    ul.pagination{padding-bottom: 40px;}
+
+    /* 栏目Banner */
+    .col-banner .pic img {max-width:200%;width:200%;height:320px;}
+    .col-banner .title h3 {font-size:24px;}
+    .col-banner .title i {width:48px;margin:10px 0;}
+    .banner-path {left:0;right:0;height:40px;}
+    .banner-path .icon {width:45px;}
+    .banner-path .link {left:60px;overflow:hidden;}
+    .banner-path .link a {color:#FFFFFF;font-size:14px;}
+    .banner-path .link a.cur {color:#FDD000;}
+    .banner-path .link span {color:#FFFFFF;font-size:14px;}
+    .banner-path .link .dis {display:none;}
+
+    /* 产品列表 */
+    .product-list {padding:40px 0;}
+    .product-list .left {display:none;width:100%;padding-bottom:30px;margin-bottom:30px;}
+    .product-list .left h3 {height:50px;line-height:50px;font-size:18px;}
+    .product-list .left ul li .pro-second {padding:0 0 5px 15px;}
+    .product-list .right {width:100%;margin-left:0;}
+    .product-list .right a {width:100%;margin-top:0;margin-right:0;margin-bottom:10px;}
+    .product-list .right a:last-child {margin-bottom:0;}
+    .product-list .right .title h3 {font-size:16px;}
+    .product-list .right .text {display:none;}
+    .product-list .right a .img::before {display:none;}
+    .product-list .right a:hover .title {display:block;}
+
+    /* 产品详情 */
+    .product-detail {padding:40px 0;}
+    .product-top .product-pic {width:100%;float:none;margin-right:0;}
+    .product-top .product-pic .swiper-button-next::after,.product-top .product-pic .swiper-button-prev::after {font-size:20px;}
+    .product-top .product-info {width:100%;float:none;margin-right:0;}
+    .product-top .product-info h3 {font-size:20px;padding:20px 0;}
+    .product-top .product-info h4 {font-size:14px;padding-bottom:10px;}
+    .product-top .product-info .product-text {font-size:14px;padding:10px 0;}
+    .product-detail .product-bottom {padding-top:40px;}
+    .product-bottom .product-bottom-nav {overflow:hidden;padding-top:20px;}
+    .product-bottom .product-bottom-nav li {font-size:14px;margin-right:0;width:24%;text-align:center;padding:0 0 20px 0;}
+    .product-bottom .product-bottom-tab .zc-detail-text {padding:3% 0;}
+    .product-bottom .product-bottom-tab .zc-detail-text .text {font-size:14px;}
+
+    /* 新闻列表 */
+    .news-list {padding:40px 0;}
+    .news-list .news-list-item {float:none;width:100%;margin-right:0px;margin-bottom:10px;}
+    .news-list .news-list-item:last-child {margin-bottom:0px;}
+    .news-list .news-list-item .news-list-text h3 {font-size:16px;padding-bottom:10px;}
+    .news-list .news-list-item .news-list-text h5 {font-size:12px;padding-top:10px;}
+
+    /* 新闻详情 */
+    .news-detail {padding:40px 0;}
+    .news-detail .news-detail-box {box-shadow:none;}
+    .news-detail .news-detail-top {padding-top:0;}
+    .news-detail .news-detail-top .news-top-tit {display:block;justify-content:center;text-align:center;}
+    .news-detail .news-detail-top .news-top-tit .type {display:none;}
+    .news-detail .news-detail-top h1 {font-size:18px;}
+    .news-detail .news-detail-top .text {margin-top:10px;text-align:center;}
+    .news-detail .news-detail-page {margin-bottom:0;}
+    .news-detail .news-detail-page a {font-size:12px;width:100%;padding:0 5.33333% !important;}
+    .news-detail .news-detail-page a .bt {position:static;float:left;margin-top:0;}
+    .news-detail .news-detail-page a .txt {width:75%;}
+    .news-detail .news-detail-page .prev .txt {padding-left:0;padding-right:10px;overflow:hidden;}
+    .news-detail .news-detail-page .next {text-align:left;}
+    .news-detail .news-detail-page .next span {clear:both;margin-left:0;margin-right:10px;}
+    .news-detail .news-detail-page .next .txt {padding-right:0;overflow:hidden;}
+
+    /* 方案列表 */
+    .cases-list {padding:40px 0;}
+    .cases-list .cases-list-item {float:none;width:100%;height:310px;margin-right:0;margin-bottom:10px;}
+    .cases-list .cases-list-item:last-child {margin-bottom:0;}
+    .cases-list .cases-list-item a .item-box .text-box .title {height:100px;}
+    .cases-list .cases-list-item a .item-box .text-box .title h3 {font-size:16px;}
+    .cases-list .cases-list-item a .item-box .text-box .title .more {left:5%;bottom:20px;}
+
+    /* 方案详情 */
+    .cases-detail {padding:40px 0;}
+    .cases-detail .cases-detail-box {box-shadow:none;}
+    .cases-detail .cases-detail-top {padding-top:0;}
+    .cases-detail .cases-detail-top .news-top-tit {display:block;justify-content:center;text-align:center;}
+    .cases-detail .cases-detail-top .news-top-tit .type {display:none;}
+    .cases-detail .cases-detail-top h1 {font-size:18px;}
+    .cases-detail .cases-detail-top .text {margin-top:10px;text-align:center;}
+    .cases-detail .cases-detail-page {margin-bottom:0;}
+    .cases-detail .cases-detail-page a {font-size:12px;width:100%;padding:0 5.33333% !important;}
+    .cases-detail .cases-detail-page a .bt {position:static;float:left;margin-top:0;}
+    .cases-detail .cases-detail-page a .txt {width:75%;}
+    .cases-detail .cases-detail-page .prev .txt {padding-left:0;padding-right:10px;overflow:hidden;}
+    .cases-detail .cases-detail-page .next {text-align:left;}
+    .cases-detail .cases-detail-page .next span {clear:both;margin-left:0;margin-right:10px;}
+    .cases-detail .cases-detail-page .next .txt {padding-right:0;overflow:hidden;}
+
+    /* 合作伙伴 */
+    .partner-detail{padding: 40px 0;}
+    .partner-detail .partner-detail-item {width: calc((100% - 10px) / 2);}
+    .partner-detail .partner-detail-item:nth-child(2n){margin-right:0;}
+    .partner-detail .partner-detail-item:nth-child(-n + 6),.partner-detail .partner-detail-item:nth-child(-n + 5),.partner-detail .partner-detail-item:nth-child(-n + 4){margin-top:10px}
+    .partner-detail .partner-detail-item:nth-child(-n + 2){margin-top:0;}
+    .partner-detail .partner-detail-item .logo{height: 50px;}
+    .partner-detail .partner-detail-item .title{font-size: 14px;}
+
+    /* 服务策略 */
+    .service-detail {padding: 40px 0;}
+    .service-detail .service-detail-box{box-shadow: none;padding: 0;font-size: 14px;}
+    .service-detail .service-detail-box h3{font-size: 16px;}
+
+    /*营销网络*/
+    .market-detail {margin-top: 40px;}
+    .market-detail .market-detail-box{padding:0;}
+    .market-detail .market-detail-box .market-left{padding-left:5%;padding-right:5%;width:100%;border:0;border-bottom:2px solid #eee;padding-bottom:30px}
+    .market-detail .market-detail-box .market-left ul li{float:left;text-align:left;width:50%}
+    .market-detail .market-detail-box .market-left ul .active > span{display:none}
+    .market-detail .market-detail-box .market-left ul li .text{font-size:16px}
+    .market-detail .market-detail-box .market-right{width:100%;padding-left:5%;padding-right:5%;padding-top:30px}
+    .market-detail .market-detail-box .market-right .main .frame .bot h6{font-size:18px}
+    .market-detail .market-detail-box .market-right .main .frame .bot div{margin-top:30px}
+    .market-detail .market-detail-box .market-right .main .frame .bot div p{font-size:14px}
+
+    /* 资料下载 */
+    .download-detail {padding:40px 0;}
+    .download-detail .download-top {padding-bottom:15px;border-bottom:2px solid #E8E8E8;}
+    .download-detail .download-top-left {display:none;}
+    .download-detail .download-top-right {width:100%;margin-top:0;}
+    .download-detail .download-bottom {padding-top:15px;}
+    .download-detail .download-select {width:100%;}
+    .download-detail .download-select select {width:100%;font-size:14px;}
+    .download-detail .download-top-right ul li {width:100%;margin-top:10px;}
+    .download-detail .download-search input {font-size:14px;}
+    .download-detail .download-item.title {display:none;}
+    .download-detail .download-item {width:100%;padding:5%;}
+    .download-detail .download-item li:nth-child(1) {width:100%;padding-left:0;}
+    .download-detail .download-item li {width:100%!important;float:none;padding:5px 0;display:block;}
+    .download-detail .download-item li:nth-child(6) {width:20px!important;position:absolute;right:5%;top:15%;}
+    .download-detail .download-item li:nth-child(3),.download-detail .download-item li:nth-child(5) {display:none;}
+
+    /* 常见问题 */
+    .faq-detail {padding:40px 0;}
+    .faq-detail .faq-top {margin-bottom:30px;}
+    .faq-detail .faq-top .faq-search {width:230px;height:40px;line-height:40px;padding-right:46px;}
+    .faq-detail .faq-top .faq-search input {height:40px;line-height:40px;font-size:14px;}
+    .faq-detail .faq-top .faq-button {width:46px;}
+    .faq-detail .faq-bottom .faq-item .title {padding:7% 18%;}
+    .faq-detail .faq-bottom .faq-item .main {padding:4% 6%;}
+    .faq-detail .faq-bottom .faq-item .main .text::before {display:none;}
+
+    /* 公司概况 */
+    .company-wrapper {padding:40px 0;}
+    .company-box {display:block;}
+    .company-box .left {width:100%;position:static;transform:inherit;padding-right:0;}
+    .company-box .left .title {font-size:22px;}
+    .company-box .left .title i {width:45px;}
+    .company-box .left .text {margin-top:15px;}
+    .company-box .left .text p {font-size:14px;}
+    .company-box .right {width:100%;margin-top:20px;}
+    .develop-box {padding:40px 0;}
+    .develop-box .top .title {font-size:22px;}
+    .develop-box .top .title i {width:45px;}
+    .develop-box .bottom {margin-top:20px;}
+    .develop-box .bottom .swiper-container.develop-swiper {padding-bottom:35px;}
+    .develop-box .bottom .swiper-container .swiper-slide {width:calc((100% - 6px) / 2);margin-right:6px;}
+    .develop-box .bottom .swiper-slide .item-box {padding:20px 15px;height:290px;}
+    .develop-box .bottom .swiper-slide .item-box .time {font-size:30px;}
+    .develop-box .bottom .swiper-slide .item-box .time span {font-size:24px;}
+    .develop-box .bottom .swiper-slide .item-box .desc {height:175px;overflow:hidden;}
+    .develop-box .bottom .swiper-slide .item-box .desc p {font-size:14px;line-height:1.75;margin-bottom:15px;}
+    .develop-box .bottom .swiper-button .arrow::after {width:36px;height:30px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next {right:0;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev {left:0;}
+    .culture-box {padding:40px 0;}
+    .culture-box .top .title {font-size:22px;}
+    .culture-box .top .title i {width:45px;}
+    .culture-box .bottom {margin-top:20px;display:block;}
+    .culture-box .bottom .items.left {width:100%;margin-right:0;}
+    .culture-box .bottom .items .text-box .title .tit {font-size:20px;line-height:20px;}
+    .culture-box .bottom .items .text-box .title .slogan {font-size:14px;margin-top:10px;}
+    .culture-box .bottom .right {width:100%;display:block;margin-top:10px;}
+    .culture-box .bottom .right .items {width:100%;margin-left:0;}
+    .culture-box .bottom .right .items:nth-of-type(3) {margin-bottom:10px;}
+
+    /* 荣誉资质 */
+    .honor-detail {padding:40px 0;}
+    .honor-detail .honor-item {width:100%;margin-right:0;}
+    .honor-detail .honor-item {float:none;width:100%;margin-right:0px;margin-bottom:10px;}
+    .honor-detail .honor-item:last-child {margin-bottom:0px;}
+    .honor-detail .honor-item .title {font-size:18px;}
+
+    /* 加入我们 */
+    .join-detail {padding:40px 0;}
+    .join-detail .top {padding-bottom:20px;}
+    .join-detail .join-option {width:100%;}
+    .join-detail .join-option .dept,.join-detail .join-option .add {width:100%;max-width:none;margin-bottom:15px;}
+    .join-detail .join-option .dept {margin-right:0;}
+    .join-detail .join-search {width:100%;}
+    .join-detail .join-search .so-inp {padding-left:10%;}
+    .join-detail .join-item {margin-bottom:20px;}
+    .join-detail .join-item .recruit-top {padding:20px 0;padding-left:40px;padding-right:25px;}
+    .join-detail .join-item .recruit-top .recruit-top-left {width:100%;margin-bottom:5px;padding-right:15px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p {font-size:16px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p::before {left:-13px;}
+    .join-detail .join-item .recruit-top .recruit-top-right {width:100%;margin-bottom:5px;padding-right:15px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req {padding-right:20px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req p {font-size:14px;}
+    .join-detail .join-item .recruit-top .drop-box {top:8px;transform:none;}
+    .join-detail .join-item .recruit-top .drop-box .drop-img {font-size:14px;}
+    .join-detail .join-item .recruit-content {padding:18px 15px 18px 30px;}
+    .join-detail .join-item .recruit-content p {font-size:14px;line-height:1.75;}
+    .join-detail .join-item .recruit-content .join-more {width:130px;height:38px;line-height:38px;margin-top:25px;}
+	
+	/* 加入我们弹窗 */
+    .join-form{width: 320px;padding: 20px;}
+    .join-form .title{font-size: 20px;}
+
+    /* 联系我们 */
+    .contact-detail {padding:40px 0;}
+    .contact-detail .item {width:100%;margin-right:0;margin-bottom:10px;padding:30px 0;}
+    .contact-detail .item:last-child {margin-bottom:0;}
+    .contact-detail .item .icon {width:60px;height:60px;}
+    .contact-detail .item .title {margin:10px 0;font-size:14px;}
+    .contact-detail .item .text {font-size:16px;}
+
+    /* 搜索中心 */
+    .search-center {padding:40px 0;}
+    .search-center .nav a {font-size:16px;}
+    .search-center .bottom {padding-top:20px;}
+
+    /* 质保查询 */
+    .qa-detail {padding:40px 0;}
+    .qa-detail .title{font-size: 20px;}
+    .qa-detail .qa-search{padding: 30px 0;}
+    .qa-detail .qa-search .input{width:50%;height: 48px;}
+    .qa-detail .qa-search .submit{width:120px;height: 48px;}
+    .qa-detail .content{width:90%;}
+    .qa-detail .content .left{float: none;width: 100%;overflow: hidden;}
+    .qa-detail .content .left .item{padding: 5% 0;width: 100%;box-sizing: border-box;}
+    .qa-detail .content .right{float: none;width: 100%;overflow: hidden;}
+
+}
+
+@media screen and (min-width:1921px) and (max-width:2560px){
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 530px;}
+}

+ 698 - 0
public/assets/addons/material/css/media.css

@@ -0,0 +1,698 @@
+@charset "UTF-8";
+
+@media screen and (max-width: 1680px) {
+    .container-outer{width: 88%;}
+    .container {padding-left:80px;padding-right:80px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev,.index-banner-swiper .swiper-button .swiper-button-next,.index-banner-swiper .swiper-button .swiper-button-prev::before,.index-banner-swiper .swiper-button .swiper-button-next::before {width:50px;height:55px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev::after,.index-banner-swiper .swiper-button .swiper-button-next::after {font-size:12px;}
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 392px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -60px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -60px;}
+
+}
+
+@media screen and (max-width: 1440px) {
+    .container-outer{width: 92%;}
+    .container {padding-left:60px;padding-right:60px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev::before,.index-banner-swiper .swiper-button .swiper-button-next::before {width:100%;height:100%;}
+
+    /* 头部 */
+    .header .header-content{height: 75px;}
+    .header .header-nav > ul > li > a{line-height: 75px;font-size: 16px;}
+    .header .header-search{margin-top: 18px;}
+    .header .header-search a{line-height: 40px;}
+    .header .header-search .lang a{width: 120px;height: 40px;}
+    .header .header-search .lang a::after{width: 120px;height: 40px;}
+    .header .header-search i{width: 16px;height: 16px;}
+    .header .header-search .search {margin-left: 8px;}
+    .header .header-search .search a {width: 50px;height: 40px;}
+    .header .header-search .search a::after{width: 50px;height: 40px;}
+    .header .search-show-top .search-input{font-size: 16px;padding: 0 7%;}
+
+    /* 底部 */
+    .footer .footer-content-top{padding: 40px 0;line-height: 40px;}
+    .footer .footer-content-top .footer-item-bottom{padding-top: 20px;}
+    .footer .footer-content-top .footer-contact span.font{font-size: 26px;}
+    .footer .footer-content-top .footer-contact span{font-size: 16px;}
+    .footer .footer-content-top .footer-link{font-size: 22px;}
+    .footer .footer-content-top .footer-nav a{font-size: 16px;}
+    .footer .footer-content-top .footer-social li a{width: 43px;height: 43px;}
+    .footer .footer-content-top .footer-social a img{max-width: 43%;max-height: 43%;}
+    .footer .footer-content-bottom{padding:25px 0;}
+
+    /* 客户留言 */
+    .message-bg .message-wrapper{width: 42%;}
+    .message-bg .message-box{padding: 50px 50px 40px 50px;}
+    .message-bg .message-box .message-title h5{font-size: 18px;}
+    .message-bg .message-box .message-list{margin-top: 20px;}
+    .message-bg .message-box .message-text{height: 42px;margin-bottom: 10px;}
+    .message-bg .message-box .message-submit p{line-height: 42px;}
+    .message-bg .message-box .verify-group .message-text{width: calc(100% - 136px);}
+    .message-bg .message-box .verify-group .verify-img{width: 136px;}
+
+    /* 首页Banner */
+    .index-banner-swiper .index-banner-item .big div{font-size: 40px;padding-bottom: 10px;}
+    .index-banner-swiper .index-banner-item .text{left: 7%;}
+    .index-banner-swiper .index-banner-item .small div{font-size: 20px;}
+    .index-banner-swiper .index-banner-item .play a{padding: 10px 12px;}
+    .index-banner-swiper .index-banner-item .play i{width: 14px;height: 14px;margin-right: 6px;}
+
+    /* 首页推荐产品 */
+    .index-product {padding: 50px 0;}
+    .index-mod-top{padding-bottom: 20px;}
+    .index-mod-top .index-mod-title h3{font-size: 24px;}
+    .index-mod-top .index-mod-title i{width: 46px;margin: 8px 0;}
+    .ty-more a{padding: 10px 18px;}
+    .ty-more span{font-size: 14px;line-height: 14px;margin-right: 6px;}
+    .ty-more i{width: 8px;height: 10px;}
+    .index-product .bottom .title h3{font-size: 16px;}
+    .index-product .bottom .text h3{font-size: 16px;}
+    .index-product .bottom .text p{font-size: 14px;}
+
+    /* 首页公司简介 */
+    .index-about{padding: 50px 0;}
+    .index-about .index-about-wrapper .index-about-left{padding-right: 50px;}
+    .index-about .index-about-left .index-about-msg{margin: 20px 0 20px;}
+    .index-about .index-about-left .index-about-msg p{font-size: 14px;}
+    .index-about .index-about-left .index-about-msg p > span{font-size: 16px;}
+    .index-about .index-about-left .index-about-number{margin-bottom: 30px;}
+    .index-about .index-about-left .index-about-number p > strong{font-size: 36px;}
+    .index-about .index-about-left .index-about-number p > span{font-size: 16px;}
+
+    /* 首页解决方案 */
+    .index-cases{padding: 50px 0;}
+    .index-cases .index-cases-item{height: 340px;}
+    .column{line-height: 28px;padding: 0 2% 0 4%;}
+    .column::after {width: 26px;height: 28px;right: -25px;}
+    .index-cases .index-cases-item a .item-box .text-box .title{height: 100px;}
+    .index-cases .index-cases-item a .item-box .text-box .title h3{font-size: 16px;max-height: 24px;line-height: 24px;}
+    .index-cases .index-cases-item a .item-box .text-box .title .more{bottom: 20px;}
+    .index-cases .index-cases-item a:hover .item-box .text-box .title{height: 170px;}
+
+    /* 首页合作伙伴 */
+    .index-partner{padding: 50px 0;}
+    .index-partner .index-partner-item a{padding: 3% 0;}
+    .index-partner .index-partner-item .logo{height: 60px;}
+
+    /* 首页新闻中心 */
+    .index-news{padding: 50px 0;}
+    .index-news .index-news-item .index-news-text h3{font-size: 16px;padding-bottom: 10px;}
+    .index-news .index-news-item .index-news-text h3::before{width: 80px;}
+    .index-news .index-news-item .index-news-text h5{padding-top: 10px;}
+    .index-news .index-news-item .index-news-text .bottom .left i{width: 11px;height: 11px;margin-top: 5px;margin-left: 3px;}
+
+    /* 栏目Banner */
+    .col-banner .title h3{font-size: 32px;}
+    .col-banner .title i{width: 62px;margin: 15px 0;}
+    .banner-path{height: 55px;}
+    .banner-path .icon{width: 65px;}
+    .banner-path .link{left: 90px;}
+
+    /* 产品列表 */
+    .product-list{padding: 50px 0;}
+    .product-list .left{width:230px;padding-bottom: 40px;}
+    .product-list .left h3{height:50px;line-height:50px;font-size: 18px;}
+    .product-list .left ul li h4{height: 36px;line-height: 36px;padding: 0 20px 0 35px;}
+    .product-list .left ul li h4::before {left: 20px;}
+    .product-list .left ul li h4::after {right: 20px;}
+    .product-list .left ul li h4 a{font-size: 15px;}
+    .product-list .left ul li .pro-second{padding: 0 0 15px 15px;}
+    .product-list .left ul li .pro-second h6 {line-height: 26px;height: 26px;}
+    .product-list .left ul li .pro-second .pro-third{line-height: 26px;height: 26px;margin: 0 15px;}
+    .product-list .right{width: calc(100% - 250px);}
+    .product-list .right .title h3{font-size: 16px;}
+    .product-list .right .text h3{font-size: 16px;}
+    .product-list .right .text p{padding-top: 10px;}
+
+    /* 产品详情 */
+    .product-detail {padding: 50px 0;}
+    .product-top .product-info h3{font-size: 20px;padding-bottom: 15px;}
+    .product-top .product-info h4{font-size: 16px;padding-bottom: 15px;}
+    .product-top .product-info .product-text{padding: 15px 0;}
+    .product-detail .product-bottom{padding-top: 40px;}
+    .product-bottom .product-bottom-box{padding: 2% 3%;}
+    .product-bottom .product-bottom-nav li{font-size: 16px;margin-right: 30px;padding: 0 3px 15px 3px;}
+
+    /* 方案列表 */
+    .cases-list{padding: 50px 0;}
+    .cases-list .cases-list-item{height: 340px;}
+    .cases-list .cases-list-item a .item-box .text-box .title{height: 100px;}
+    .cases-list .cases-list-item a .item-box .text-box .title h3{font-size: 16px;max-height: 24px;line-height: 24px;}
+    .cases-list .cases-list-item a .item-box .text-box .title .more{bottom: 20px;}
+    .cases-list .cases-list-item a:hover .item-box .text-box .title{height: 170px;}
+
+    /* 方案详情 */
+    .cases-detail{padding: 50px 0;}
+    .cases-detail .cases-detail-top{padding-top: 40px;padding-bottom: 15px;}
+    .cases-detail .cases-detail-top h1{font-size: 24px;}
+    .cases-detail .cases-detail-top .type a{padding: 8px 12px;}
+    .cases-detail .cases-detail-main{padding: 30px 0 40px;}
+
+    /* 服务策略 */
+    .service-detail{padding: 50px 0;}
+    .service-detail .service-detail-box{padding: 40px 0;line-height: 36px;}
+
+    /* 营销网络 */
+    .market-detail{margin-top: 40px;}
+    .market-detail .market-detail-box{padding: 40px 0;}
+    .market-detail .market-detail-box .market-left{padding-top: 20px;padding-bottom: 20px;}
+    .market-detail .market-detail-box .market-left ul li .text{font-size: 18px;}
+    .market-detail .market-detail-box .market-right .main .frame .bot h6{font-size: 20px;}
+    .market-detail .market-detail-box .market-right .main .frame .bot div{margin-top: 30px;}
+    .market-detail .market-detail-box .market-right .main .frame .bot div p{font-size: 16px;}
+
+    /* 资料下载 */
+    .download-detail{padding: 50px 0;}
+    .download-detail .download-top{padding-bottom: 40px;}
+    .download-detail .download-top-left{font-size: 30px;line-height: 30px;}
+    .download-detail .download-top-right{width:680px;margin-top: 10px;}
+    .download-detail .download-item{padding: 15px 0;}
+    .download-detail .download-item li{padding: 15px 0;}
+    .download-detail .download-select{height: 48px;line-height: 48px;}
+    .download-detail .download-select select{height: 48px;line-height: 48px;}
+    .download-detail .download-top-right ul li{width: 350px;height: 48px;line-height: 48px;}
+    .download-detail .download-search{padding-right: 60px;}
+    .download-detail .download-search input{height: 48px;line-height: 48px;}
+    .download-detail .download-button{width: 60px;}
+
+    /* 常见问题 */
+    .faq-detail{padding: 50px 0;}
+    .faq-detail .faq-top{margin-bottom: 40px;}
+    .faq-detail .faq-top .faq-search{height: 48px;line-height: 48px;padding-right: 56px;}
+    .faq-detail .faq-top .faq-search input{height: 48px;line-height: 48px;}
+    .faq-detail .faq-top .faq-button{width: 56px;}
+    .faq-detail .faq-bottom .faq-item .main .text::before{left: -40px;}
+
+    /* 合作伙伴 */
+    .partner-detail{padding: 50px 0;}
+    .partner-detail .partner-detail-item a{padding: 3% 0;}
+    .partner-detail .partner-detail-item .logo{height: 60px;}
+
+    /* 新闻列表 */
+    .news-list{padding: 50px 0;}
+    .news-list .news-list-item .news-list-text h3{font-size: 16px;padding-bottom: 10px;}
+    .news-list .news-list-item .news-list-text h3::before{width: 80px;}
+    .news-list .news-list-item .news-list-text h5{padding-top: 10px;}
+    .news-list .news-list-item .news-list-text .bottom .left i{width: 11px;height: 11px;margin-top: 5px;margin-left: 3px;}
+
+    /* 新闻详情 */
+    .news-detail{padding: 50px 0;}
+    .news-detail .news-detail-top{padding-top: 40px;padding-bottom: 15px;}
+    .news-detail .news-detail-top h1{font-size: 24px;}
+    .news-detail .news-detail-top .type a{padding: 8px 12px;}
+    .news-detail .news-detail-main{padding: 30px 0 40px;}
+
+    /* 公司概况 */
+    .company-wrapper{padding: 50px 0;}
+    .company-box .left{padding-right: 80px;}
+    .company-box .left .title{font-size: 26px;}
+    .company-box .left .title i{margin: 5px 0;width: 51px;}
+    .company-box .left .text{margin-top: 25px;}
+    .play-btn{width: 58px;height: 58px;}
+    .play-btn i{width: 58px;height: 58px;}
+    .develop-box{padding: 50px 0;}
+    .develop-box .top .title{font-size: 26px;}
+    .develop-box .top .title i{margin: 5px 0;width: 51px;}
+    .develop-box .bottom{margin-top: 25px;}
+    .develop-box .bottom::before {width:250px;left:-136px;}
+    .develop-box .bottom::after {width:250px;right:-108px;}
+    .develop-box .bottom .swiper-container.develop-swiper{padding-bottom: 40px;}
+    .develop-box .bottom .swiper-slide .item-box{height: 320px;padding: 16px 35px;}
+    .develop-box .bottom .swiper-slide .item-box .time{font-size: 32px;}
+    .develop-box .bottom .swiper-slide .item-box .time span{font-size: 26px;}
+    .develop-box .bottom .swiper-slide .item-box .line{margin: 8% 0;}
+    .develop-box .bottom .swiper-slide .item-box .desc p{margin-bottom: 16px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -38px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -38px;}
+    .develop-box .bottom .swiper-button .arrow::after{width: 48px;height: 42px;}
+    .culture-box{padding: 50px 0;}
+    .culture-box .top .title{font-size: 26px;}
+    .culture-box .top .title i{margin: 5px 0;width: 51px;}
+    .culture-box .bottom{margin-top: 25px;}
+    .culture-box .bottom .items .text-box .title{margin-top: 15px;}
+    .culture-box .bottom .items .text-box .title .tit {font-size: 22px;line-height: 22px;}
+    .culture-box .bottom .items .text-box .title .slogan{font-size:14px;margin-top: 15px;}
+
+    /* 荣誉资质 */
+    .honor-detail{padding: 50px 0;}
+    .honor-detail .honor-item .title{font-size: 18px;}
+
+    /* 加入我们 */
+    .join-detail{padding: 50px 0;}
+    .join-detail .join-option .dept,.join-detail .join-option .add{height: 48px;line-height: 48px;max-width: 260px;}
+    .join-detail .join-option .dept{margin-right: 35px;}
+    .join-detail .join-option .dept select, .join-detail .join-option .add select {height: 48px;line-height: 48px;}
+    .join-detail .join-search{width: 350px;height: 48px;line-height: 48px;}
+    .join-detail .join-search .so-inp{padding-right: 60px;}
+    .join-detail .join-search .so-inp input{height: 48px;line-height: 48px;}
+    .join-detail .join-search .join-button{width: 60px;}
+    .join-detail .top{padding-bottom: 30px;}
+    .join-detail .join-item{margin-bottom: 15px;}
+    .join-detail .join-item .recruit-top{padding: 20px 0;padding-left: 62px;padding-right: 40px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p{font-size: 16px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p::before {height: 18px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req p{font-size: 14px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req:last-child::before {display: none;}
+    .join-detail .join-item .recruit-content{padding: 35px 40px 46px 62px;}
+    .join-detail .join-item .recruit-content .join-more{width: 136px;height: 42px;line-height: 42px;margin-top: 30px;}
+
+    /* 加入我们弹窗 */
+    .join-form{width: 560px;}
+    .join-form .title{padding-bottom:5%;font-size: 28px;}
+    .join-form .message-text{margin-bottom:10px;height: 42px;}
+    .join-form .upload{margin-bottom: 10px;}
+    .join-form .upload .text{padding-bottom: 10px;margin-top: 10px;}
+    .join-form .upload .input{height: 42px;line-height: 42px;}
+    .join-form .upload .input .right{width: 80px;}
+    .join-form .validate .message-text{height: 42px;width: calc(100% - 136px);}
+    .join-form .validate .verify-img{width: 136px;}
+
+    /* 联系我们 */
+    .contact-detail{padding: 50px 0;}
+    .contact-detail .item .icon{width: 68px;height: 68px;}
+    .contact-detail .item .title{margin: 10px 0;}
+    .contact-detail .item .text{font-size: 16px;}
+
+    /* 搜索中心 */
+    .search-center{padding: 50px 0;}
+    .search-center .nav a{margin-right: 1%;padding-bottom: 12px;font-size: 18px;}
+    .search-center .bottom{padding-top: 25px;}
+
+    /* 质保查询 */
+    .qa-detail {padding:50px 0;}
+}
+
+@media screen and (max-width: 1366px) {
+    .container {padding-left:40px;padding-right:40px;}
+    .index-banner-swiper .swiper-button .swiper-button-prev,.index-banner-swiper .swiper-button .swiper-button-next {height:50px;}
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 333px;}
+    .develop-box .bottom .swiper-button .arrow::after {width: 42px;height: 37px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -37px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -37px;}
+}
+
+@media screen and (max-width: 1280px) {
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 319px;}
+    .develop-box .bottom .swiper-button .arrow::after {width: 40px;height: 36px;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev{left: -35px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next{right: -35px;}
+}
+
+@media screen and (max-width: 960px) {
+
+    /* 通用 */
+    .container-outer {width:90%;}
+    .container {width:100%;padding-left:0;padding-right:0;}
+    .ty-more a {padding:10px 20px;}
+    .ty-more span {font-size:14px;margin-right:5px;}
+    .ty-more i {width:8px;height:10px;}
+
+    /* 头部 */
+    .header .header-content{height: 50px;}
+    .header .header-content .header-logo{width: 30%;}
+    .no-touch{overflow-y: hidden;}
+    .no-touch .header-content .header-logo img.logo1{display: none;}
+    .no-touch .header-content .header-logo img.logo2{display: block;}
+    .header .header-nav{margin-left: 0px;float: right;}
+    .header .header-nav > ul{position: fixed;right: 0;display: block;background: #fff;overflow: auto;scrollbar-gutter: stable;transform: translateX(100%);}
+    .header .header-nav ul li, .header .header-nav ul ul li, .header .header-nav ul li:hover > ul > li{width: 100%;height: auto;border-bottom: 1px solid rgba(120, 120, 120, 0.15);}
+    .header .header-nav ul ul li:last-child{border-bottom: none;border-top: none;}
+    .header .header-nav ul li a, .header .header-nav ul ul li a{width: 100%;padding-left: 20px;}
+    .header .header-nav > ul > li{float: none;display: block;margin: 0;}
+    .header .header-nav > ul > li > a{z-index: 0;}
+    .header .header-nav > ul > li > a::after{display: none;}
+    .header .header-nav ul ul li a{height: 60px;padding: 20px 20px 20px 40px;font-size: 16px;color: #333333;background: none;}
+    .header .header-nav ul ul li.has-sub > a::before{display: none;}
+    .header .header-nav ul ul li:hover > a, .header .header-nav ul ul li a:hover{color: #333333;background: #ffffff;}
+    .header .header-nav ul ul ul li a{padding-left: 60px;}
+    .header .header-nav ul ul ul ul li a{padding-left: 80px;}
+    .header .header-nav ul ul, .header .header-nav ul ul ul{position: relative;left: 0;right: auto;width: 100%;margin: 0;box-shadow: none;border-top: 1px solid rgba(120, 120, 120, 0.15);}
+    .header .header-nav > ul > li.has-sub > a::after, .header .header-nav ul ul li.has-sub > a::after{display: none;}
+    .header .header-nav > ul > li > a,.header.scroll-top .header-nav > ul > li > a,.header.scroll-top .header-nav > ul > li > a{color: rgba(0,0,0,0.6);line-height: 60px;}
+    .header .header-nav > ul > li.cur > a,.header.scroll-top .header-nav > ul > li.cur > a,.header.scroll-top .header-nav > ul > li.cur > a{color: #fdd000;font-size: 16px;}
+    .header .header-nav > ul > li::after{display: none;}
+    .header .header-nav ul ul ul{top: 0px;border-top: 1px solid rgba(120, 120, 120, 0.15);}
+    .header .header-nav .submenu-button{position: absolute;z-index: 10;right: 0;top: 0;display: block;border-left: 1px solid rgba(120, 120, 120, 0.15);height: 60px;width: 60px;cursor: pointer;}
+    .header .header-nav .submenu-button::after{content: '';position: absolute;top: 22px;left: 29px;display: block;width: 1px;height: 16px;background: #333333;z-index: 99;}
+    .header .header-nav .submenu-button::before{content: '';position: absolute;left: 22px;top: 29px;display: block;width: 16px;height: 1px;background: #333333;z-index: 99;}
+    .header .header-nav > ul > li > a.cur,.header .header-nav > ul > li > ul > li > a.cur,.header .header-nav > ul > li > ul > li > ul > li > a.cur{color: #fdd000;}
+    .header .header-nav .submenu-button.submenu-opened:after{display: none;}
+    .header .header-nav #menu-toggle{display: block;width: 40px;height: 40px;position: absolute;overflow: hidden;right: 0;top: 5px;z-index: 111;}
+    #menu-toggle .nav-open, #menu-toggle .nav-open:after, #menu-toggle .nav-open:before{content:"";display:block;width:24px;height:2px;background:#fff;position:absolute;top:50%;margin-top:-1px;left:50%;margin-left:-12px;-webkit-transition:transform 0.3s cubic-bezier(0.600,0.000,0.200,1.000);transition:transform 0.3s cubic-bezier(0.600,0.000,0.200,1.000);-webkit-transition-timing-function:cubic-bezier(0.600,0.000,0.200,1.000);transition-timing-function:cubic-bezier(0.600,0.000,0.200,1.000);transition-delay:0.15s;}
+    #menu-toggle .nav-open:after{margin-top:-7px;top:0;transition-delay:0.27s;}
+    #menu-toggle .nav-open:before{margin-top:7px;top:0;transition-delay:0.2s;}
+    #menu-toggle .nav-close:before, #menu-toggle .nav-close:after{content:"";display:block;width:24px;height:2px;background:#fff;position:absolute;top:50%;margin-top:-1.5px;left:50%;margin-left:-12px;-webkit-transform:translateY(-70px) translateX(-70px) rotate(45deg);transform:translateY(-70px) translateX(-70px) rotate(45deg);transition-delay:0.12s;}
+    #menu-toggle .nav-close:after{transition-delay:0s;-webkit-transform:translateY(70px) translateX(-70px) rotate(-45deg);transform:translateY(70px) translateX(-70px) rotate(-45deg);}
+    #menu-toggle .nav-close:after{-webkit-transform:translateY(-70px) translateX(70px) rotate(-45deg);transform:translateY(-70px) translateX(70px) rotate(-45deg);}
+    .detail .header #menu-toggle .nav-open,.detail .header #menu-toggle .nav-open:after,.detail .header #menu-toggle .nav-open:before{background: #333333;}
+    .header.scroll-top #menu-toggle .nav-open,.header.scroll-top #menu-toggle .nav-open:after,.header.scroll-top #menu-toggle .nav-open:before{background: #333333;}
+    .no-touch .header .header-nav > ul{width: 100%;height: 100%;padding-top: 50px;margin-top: 50px;border-top: 1px solid #e6e6e6;-webkit-transform: translateX(0);-moz-transform: translateX(0);-ms-transform: translateX(0);-o-transform: translateX(0);transform: translateX(0);-webkit-overflow-scrolling: touch;}
+    .no-touch #menu-toggle .nav-open, .no-touch #menu-toggle .nav-open:after, .no-touch #menu-toggle .nav-open:before{-webkit-transform:translateX(70px);transform:translateX(70px);transition-delay:0.12s;background: #333333;}
+    .no-touch #menu-toggle .nav-open:after{transition-delay:0s;}
+    .no-touch #menu-toggle .nav-open:before{transition-delay:0.07s;}
+    .no-touch #menu-toggle .nav-close:before{transition-delay:0.12s;-webkit-transform:rotate(45deg);transform:rotate(45deg);background: #333333;}
+    .no-touch #menu-toggle .nav-close:after{transition-delay:0.24s;-webkit-transform:rotate(-45deg) !important;transform:rotate(-45deg) !important;background: #333333;}
+    .header .header-search{margin: 7px 60px 7px 0;}
+    .header .header-search a{line-height: 36px;}
+    .header .header-search .search a{width: 46px;height: 36px;}
+    .header .header-search .search a::after{width: 46px;height: 36px;}
+    .header .header-search .lang{display: none;}
+    .header .header-search .m-lang{display: block;margin-right: 10px;}
+    .header .header-search .m-lang a{color: #FFF;font-size: 16px;}
+    .header.scroll-top .header-search .m-lang a{color: #333333;}
+    .header .search-show{width: 100%;background: #fff;padding: 0 5%;box-sizing: border-box;}
+    .header .search-show-top .search-input{padding: 0 10%;border-bottom: none;}
+
+    /* 首页Banner */
+    .index-banner-swiper .index-banner-item .text{width: 90%;left: 5%;}
+    .index-banner-swiper .index-banner-item .big div{font-size: 24px;}
+    .index-banner-swiper .index-banner-item .small div{font-size: 16px;line-height: 26px;}
+    .index-banner-swiper .index-banner-item .play a{padding: 10px 20px;}
+    .index-banner-swiper .index-banner-item .play i{ width: 13px;height: 13px;margin-right: 5px;}
+    .index-banner-swiper .index-banner-item .img .pic{display: none;}
+    .index-banner-swiper .index-banner-item .img .mpic{display: block;}
+    .index-banner-swiper .banner-pagination{width: 60px;bottom: 3%;}
+    .index-banner-swiper .banner-pagination span.swiper-pagination-current{font-size: 20px;}
+    .index-banner-swiper .banner-pagination span.swiper-pagination-total{font-size: 14px;}
+
+    /*底部*/
+    .footer .footer-content-top{width:90%;padding: 30px 0;line-height:normal;}
+    .footer .footer-content-top .footer-item{float:none;width:100%}
+    .footer .footer-content-top .footer-item-top{padding:10px 0}
+    .footer .footer-content-top .footer-logo{width:130px;height:auto}
+    .footer .footer-content-top .footer-logo a img{display:block;width:100%}
+    .footer .footer-content-top .footer-link{font-size: 16px;line-height: 30px;}
+    .footer .footer-content-top .footer-item-bottom{padding-top:10px}
+    .footer .footer-content-top .footer-contact span{font-size: 14px;line-height:30px}
+    .footer .footer-content-top .footer-contact span.font{font-size: 20px;}
+    .footer .footer-content-top .footer-contact i{width: 34px;height: 32px;}
+    .footer .footer-content-top .footer-social li a{width: 40px;height: 40px;}
+    .footer .footer-content-top .footer-nav a{font-size:14px;line-height:28px}
+    .footer .footer-content-bottom{padding:10px 0}
+    .footer .footer-content-bottom .footer-copy{font-size: 13px;line-height:20px}
+    .footer .footer-content-bottom .footer-beian{width:100%;position:relative;top:0;transform:none;margin-top:10px}
+    .footer .footer-content-bottom .footer-beian span{font-size: 13px;}
+
+    /* 客户留言 */
+    .message-bg .message-wrapper{width: 96%;}
+    .message-bg .message-box {padding:20px 15px;}
+    .message-bg .message-box .message-list{margin-top: 15px;}
+    .message-bg .message-box .message-submit{width: 100%;}
+
+    /* 首页推荐产品 */
+    .index-mod-top {padding-bottom:20px;}
+    .index-mod-top .index-mod-title h3 {font-size:20px;}
+    .index-mod-top .index-mod-title h5 {font-size:13px;line-height:20px;}
+    .index-mod-top .index-mod-title i {width:38px;}
+    .index-product {padding:40px 0;}
+    .index-product .bottom {display:grid;}
+    .index-product .bottom .items.left {width:100%;}
+    .index-product .bottom .right {width:100%;margin-top:10px;}
+    .index-product .bottom .right .items {width:100%;margin-left:0;}
+    .index-product .bottom .right .items:nth-of-type(3) {margin-bottom:10px;}
+    .index-product .bottom .title h3 {font-size:16px;}
+    .index-product .bottom .text {display:none;}
+    .index-product .bottom a.pic::before {display:none;}
+    .index-product .bottom a:hover .title {display:block;}
+
+    /* 首页公司简介 */
+    .index-about {padding:40px 0;}
+    .index-about .index-about-wrapper {flex-flow:column;}
+    .index-about .index-about-wrapper .index-about-left {width:100%;height:auto;padding-right:0px;}
+    .index-about .index-about-left .index-about-title {padding-bottom:5px;}
+    .index-about .index-about-left p.cn {font-size:20px;}
+    .index-about .index-about-left p.en {font-size:13px;}
+    .index-about .index-about-left .index-about-msg {margin:20px 0 20px;}
+    .index-about .index-about-left .index-about-msg p {font-size:14px;}
+    .index-about .index-about-left .index-about-msg p > span {font-size:15px;}
+    .index-about .index-about-left .index-about-number {margin-bottom:20px;}
+    .index-about .index-about-left .index-about-number li {margin-right:10%;}
+    .index-about .index-about-left .index-about-number p {font-size:14px;}
+    .index-about .index-about-left .index-about-number p > strong {font-size:30px;}
+    .index-about .index-about-left .index-about-number p > span {font-size:16px;}
+    .index-about .index-about-wrapper .index-about-right {width:100%;margin-top:40px;}
+
+    /* 首页解决方案 */
+    .index-cases {padding:40px 0;}
+    .index-cases .index-cases-item {float:none;width:100%;height:310px;margin-right:0;margin-bottom:10px;}
+    .index-cases .index-cases-item:last-child {margin-bottom:0;}
+    .index-cases .index-cases-item a .item-box .text-box .title {height:100px;}
+    .index-cases .index-cases-item a .item-box .text-box .title h3 {font-size:16px;}
+    .index-cases .index-cases-item a .item-box .text-box .title .more {left:5%;bottom:20px;}
+
+    /* 首页合作伙伴 */
+    .index-partner {padding:40px 0;}
+    .index-partner .index-partner-item {width:calc((100% - 10px) / 2);}
+    .index-partner .index-partner-item:nth-child(2n) {margin-right:0;}
+    .index-partner .index-partner-item:nth-child(-n + 6),.index-partner .index-partner-item:nth-child(-n + 5),.index-partner .index-partner-item:nth-child(-n + 4) {margin-top:10px}
+    .index-partner .index-partner-item:nth-child(-n + 2) {margin-top:0;}
+    .index-partner .index-partner-item .logo {height:50px;}
+    .index-partner .index-partner-item .title {font-size:14px;}
+
+    /* 首页新闻中心 */
+    .index-news {padding:40px 0;}
+    .index-news .index-news-item {float:none;width:100%;margin-right:0px;margin-bottom:10px;}
+    .index-news .index-news-item:last-child {margin-bottom:0px;}
+    .index-news .index-news-item .index-news-text h3 {font-size:16px;padding-bottom:10px;}
+    .index-news .index-news-item .index-news-text h5 {font-size:12px;padding-top:10px;}
+
+    /* 分页 */
+    ul.pagination{padding-bottom: 40px;}
+
+    /* 栏目Banner */
+    .col-banner .pic img {max-width:200%;width:200%;height:320px;}
+    .col-banner .title h3 {font-size:24px;}
+    .col-banner .title i {width:48px;margin:10px 0;}
+    .banner-path {left:0;right:0;height:40px;}
+    .banner-path .icon {width:45px;}
+    .banner-path .link {left:60px;overflow:hidden;}
+    .banner-path .link a {color:#FFFFFF;font-size:14px;}
+    .banner-path .link a.cur {color:#FDD000;}
+    .banner-path .link span {color:#FFFFFF;font-size:14px;}
+    .banner-path .link .dis {display:none;}
+
+    /* 产品列表 */
+    .product-list {padding:40px 0;}
+    .product-list .left {display:none;width:100%;padding-bottom:30px;margin-bottom:30px;}
+    .product-list .left h3 {height:50px;line-height:50px;font-size:18px;}
+    .product-list .left ul li .pro-second {padding:0 0 5px 15px;}
+    .product-list .right {width:100%;margin-left:0;}
+    .product-list .right a {width:100%;margin-top:0;margin-right:0;margin-bottom:10px;}
+    .product-list .right a:last-child {margin-bottom:0;}
+    .product-list .right .title h3 {font-size:16px;}
+    .product-list .right .text {display:none;}
+    .product-list .right a .img::before {display:none;}
+    .product-list .right a:hover .title {display:block;}
+
+    /* 产品详情 */
+    .product-detail {padding:40px 0;}
+    .product-top .product-pic {width:100%;float:none;margin-right:0;}
+    .product-top .product-pic .swiper-button-next::after,.product-top .product-pic .swiper-button-prev::after {font-size:20px;}
+    .product-top .product-info {width:100%;float:none;margin-right:0;}
+    .product-top .product-info h3 {font-size:20px;padding:20px 0;}
+    .product-top .product-info h4 {font-size:14px;padding-bottom:10px;}
+    .product-top .product-info .product-text {font-size:14px;padding:10px 0;}
+    .product-detail .product-bottom {padding-top:40px;}
+    .product-bottom .product-bottom-nav {overflow:hidden;padding-top:20px;}
+    .product-bottom .product-bottom-nav li {font-size:14px;margin-right:0;width:24%;text-align:center;padding:0 0 20px 0;}
+    .product-bottom .product-bottom-tab .zc-detail-text {padding:3% 0;}
+    .product-bottom .product-bottom-tab .zc-detail-text .text {font-size:14px;}
+
+    /* 新闻列表 */
+    .news-list {padding:40px 0;}
+    .news-list .news-list-item {float:none;width:100%;margin-right:0px;margin-bottom:10px;}
+    .news-list .news-list-item:last-child {margin-bottom:0px;}
+    .news-list .news-list-item .news-list-text h3 {font-size:16px;padding-bottom:10px;}
+    .news-list .news-list-item .news-list-text h5 {font-size:12px;padding-top:10px;}
+
+    /* 新闻详情 */
+    .news-detail {padding:40px 0;}
+    .news-detail .news-detail-box {box-shadow:none;}
+    .news-detail .news-detail-top {padding-top:0;}
+    .news-detail .news-detail-top .news-top-tit {display:block;justify-content:center;text-align:center;}
+    .news-detail .news-detail-top .news-top-tit .type {display:none;}
+    .news-detail .news-detail-top h1 {font-size:18px;}
+    .news-detail .news-detail-top .text {margin-top:10px;text-align:center;}
+    .news-detail .news-detail-page {margin-bottom:0;}
+    .news-detail .news-detail-page a {font-size:12px;width:100%;padding:0 5.33333% !important;}
+    .news-detail .news-detail-page a .bt {position:static;float:left;margin-top:0;}
+    .news-detail .news-detail-page a .txt {width:75%;}
+    .news-detail .news-detail-page .prev .txt {padding-left:0;padding-right:10px;overflow:hidden;}
+    .news-detail .news-detail-page .next {text-align:left;}
+    .news-detail .news-detail-page .next span {clear:both;margin-left:0;margin-right:10px;}
+    .news-detail .news-detail-page .next .txt {padding-right:0;overflow:hidden;}
+
+    /* 方案列表 */
+    .cases-list {padding:40px 0;}
+    .cases-list .cases-list-item {float:none;width:100%;height:310px;margin-right:0;margin-bottom:10px;}
+    .cases-list .cases-list-item:last-child {margin-bottom:0;}
+    .cases-list .cases-list-item a .item-box .text-box .title {height:100px;}
+    .cases-list .cases-list-item a .item-box .text-box .title h3 {font-size:16px;}
+    .cases-list .cases-list-item a .item-box .text-box .title .more {left:5%;bottom:20px;}
+
+    /* 方案详情 */
+    .cases-detail {padding:40px 0;}
+    .cases-detail .cases-detail-box {box-shadow:none;}
+    .cases-detail .cases-detail-top {padding-top:0;}
+    .cases-detail .cases-detail-top .news-top-tit {display:block;justify-content:center;text-align:center;}
+    .cases-detail .cases-detail-top .news-top-tit .type {display:none;}
+    .cases-detail .cases-detail-top h1 {font-size:18px;}
+    .cases-detail .cases-detail-top .text {margin-top:10px;text-align:center;}
+    .cases-detail .cases-detail-page {margin-bottom:0;}
+    .cases-detail .cases-detail-page a {font-size:12px;width:100%;padding:0 5.33333% !important;}
+    .cases-detail .cases-detail-page a .bt {position:static;float:left;margin-top:0;}
+    .cases-detail .cases-detail-page a .txt {width:75%;}
+    .cases-detail .cases-detail-page .prev .txt {padding-left:0;padding-right:10px;overflow:hidden;}
+    .cases-detail .cases-detail-page .next {text-align:left;}
+    .cases-detail .cases-detail-page .next span {clear:both;margin-left:0;margin-right:10px;}
+    .cases-detail .cases-detail-page .next .txt {padding-right:0;overflow:hidden;}
+
+    /* 合作伙伴 */
+    .partner-detail{padding: 40px 0;}
+    .partner-detail .partner-detail-item {width: calc((100% - 10px) / 2);}
+    .partner-detail .partner-detail-item:nth-child(2n){margin-right:0;}
+    .partner-detail .partner-detail-item:nth-child(-n + 6),.partner-detail .partner-detail-item:nth-child(-n + 5),.partner-detail .partner-detail-item:nth-child(-n + 4){margin-top:10px}
+    .partner-detail .partner-detail-item:nth-child(-n + 2){margin-top:0;}
+    .partner-detail .partner-detail-item .logo{height: 50px;}
+    .partner-detail .partner-detail-item .title{font-size: 14px;}
+
+    /* 服务策略 */
+    .service-detail {padding: 40px 0;}
+    .service-detail .service-detail-box{box-shadow: none;padding: 0;font-size: 14px;}
+    .service-detail .service-detail-box h3{font-size: 16px;}
+
+    /*营销网络*/
+    .market-detail {margin-top: 40px;}
+    .market-detail .market-detail-box{padding:0;}
+    .market-detail .market-detail-box .market-left{padding-left:5%;padding-right:5%;width:100%;border:0;border-bottom:2px solid #eee;padding-bottom:30px}
+    .market-detail .market-detail-box .market-left ul li{float:left;text-align:left;width:50%}
+    .market-detail .market-detail-box .market-left ul .active > span{display:none}
+    .market-detail .market-detail-box .market-left ul li .text{font-size:16px}
+    .market-detail .market-detail-box .market-right{width:100%;padding-left:5%;padding-right:5%;padding-top:30px}
+    .market-detail .market-detail-box .market-right .main .frame .bot h6{font-size:18px}
+    .market-detail .market-detail-box .market-right .main .frame .bot div{margin-top:30px}
+    .market-detail .market-detail-box .market-right .main .frame .bot div p{font-size:14px}
+
+    /* 资料下载 */
+    .download-detail {padding:40px 0;}
+    .download-detail .download-top {padding-bottom:15px;border-bottom:2px solid #E8E8E8;}
+    .download-detail .download-top-left {display:none;}
+    .download-detail .download-top-right {width:100%;margin-top:0;}
+    .download-detail .download-bottom {padding-top:15px;}
+    .download-detail .download-select {width:100%;}
+    .download-detail .download-select select {width:100%;font-size:14px;}
+    .download-detail .download-top-right ul li {width:100%;margin-top:10px;}
+    .download-detail .download-search input {font-size:14px;}
+    .download-detail .download-item.title {display:none;}
+    .download-detail .download-item {width:100%;padding:5%;}
+    .download-detail .download-item li:nth-child(1) {width:100%;padding-left:0;}
+    .download-detail .download-item li {width:100%!important;float:none;padding:5px 0;display:block;}
+    .download-detail .download-item li:nth-child(6) {width:20px!important;position:absolute;right:5%;top:15%;}
+    .download-detail .download-item li:nth-child(3),.download-detail .download-item li:nth-child(5) {display:none;}
+
+    /* 常见问题 */
+    .faq-detail {padding:40px 0;}
+    .faq-detail .faq-top {margin-bottom:30px;}
+    .faq-detail .faq-top .faq-search {width:230px;height:40px;line-height:40px;padding-right:46px;}
+    .faq-detail .faq-top .faq-search input {height:40px;line-height:40px;font-size:14px;}
+    .faq-detail .faq-top .faq-button {width:46px;}
+    .faq-detail .faq-bottom .faq-item .title {padding:7% 18%;}
+    .faq-detail .faq-bottom .faq-item .main {padding:4% 6%;}
+    .faq-detail .faq-bottom .faq-item .main .text::before {display:none;}
+
+    /* 公司概况 */
+    .company-wrapper {padding:40px 0;}
+    .company-box {display:block;}
+    .company-box .left {width:100%;position:static;transform:inherit;padding-right:0;}
+    .company-box .left .title {font-size:22px;}
+    .company-box .left .title i {width:45px;}
+    .company-box .left .text {margin-top:15px;}
+    .company-box .left .text p {font-size:14px;}
+    .company-box .right {width:100%;margin-top:20px;}
+    .develop-box {padding:40px 0;}
+    .develop-box .top .title {font-size:22px;}
+    .develop-box .top .title i {width:45px;}
+    .develop-box .bottom {margin-top:20px;}
+    .develop-box .bottom .swiper-container.develop-swiper {padding-bottom:35px;}
+    .develop-box .bottom .swiper-container .swiper-slide {width:calc((100% - 6px) / 2);margin-right:6px;}
+    .develop-box .bottom .swiper-slide .item-box {padding:20px 15px;height:290px;}
+    .develop-box .bottom .swiper-slide .item-box .time {font-size:30px;}
+    .develop-box .bottom .swiper-slide .item-box .time span {font-size:24px;}
+    .develop-box .bottom .swiper-slide .item-box .desc {height:175px;overflow:hidden;}
+    .develop-box .bottom .swiper-slide .item-box .desc p {font-size:14px;line-height:1.75;margin-bottom:15px;}
+    .develop-box .bottom .swiper-button .arrow::after {width:36px;height:30px;}
+    .develop-box .bottom .swiper-button .arrow.develop-next {right:0;}
+    .develop-box .bottom .swiper-button .arrow.develop-prev {left:0;}
+    .culture-box {padding:40px 0;}
+    .culture-box .top .title {font-size:22px;}
+    .culture-box .top .title i {width:45px;}
+    .culture-box .bottom {margin-top:20px;display:block;}
+    .culture-box .bottom .items.left {width:100%;margin-right:0;}
+    .culture-box .bottom .items .text-box .title .tit {font-size:20px;line-height:20px;}
+    .culture-box .bottom .items .text-box .title .slogan {font-size:14px;margin-top:10px;}
+    .culture-box .bottom .right {width:100%;display:block;margin-top:10px;}
+    .culture-box .bottom .right .items {width:100%;margin-left:0;}
+    .culture-box .bottom .right .items:nth-of-type(3) {margin-bottom:10px;}
+
+    /* 荣誉资质 */
+    .honor-detail {padding:40px 0;}
+    .honor-detail .honor-item {width:100%;margin-right:0;}
+    .honor-detail .honor-item {float:none;width:100%;margin-right:0px;margin-bottom:10px;}
+    .honor-detail .honor-item:last-child {margin-bottom:0px;}
+    .honor-detail .honor-item .title {font-size:18px;}
+
+    /* 加入我们 */
+    .join-detail {padding:40px 0;}
+    .join-detail .top {padding-bottom:20px;}
+    .join-detail .join-option {width:100%;}
+    .join-detail .join-option .dept,.join-detail .join-option .add {width:100%;max-width:none;margin-bottom:15px;}
+    .join-detail .join-option .dept {margin-right:0;}
+    .join-detail .join-search {width:100%;}
+    .join-detail .join-search .so-inp {padding-left:10%;}
+    .join-detail .join-item {margin-bottom:20px;}
+    .join-detail .join-item .recruit-top {padding:20px 0;padding-left:40px;padding-right:25px;}
+    .join-detail .join-item .recruit-top .recruit-top-left {width:100%;margin-bottom:5px;padding-right:15px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p {font-size:16px;}
+    .join-detail .join-item .recruit-top .recruit-top-left p::before {left:-13px;}
+    .join-detail .join-item .recruit-top .recruit-top-right {width:100%;margin-bottom:5px;padding-right:15px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req {padding-right:20px;}
+    .join-detail .join-item .recruit-top .recruit-top-right .req p {font-size:14px;}
+    .join-detail .join-item .recruit-top .drop-box {top:8px;transform:none;}
+    .join-detail .join-item .recruit-top .drop-box .drop-img {font-size:14px;}
+    .join-detail .join-item .recruit-content {padding:18px 15px 18px 30px;}
+    .join-detail .join-item .recruit-content p {font-size:14px;line-height:1.75;}
+    .join-detail .join-item .recruit-content .join-more {width:130px;height:38px;line-height:38px;margin-top:25px;}
+	
+	/* 加入我们弹窗 */
+    .join-form{width: 320px;padding: 20px;}
+    .join-form .title{font-size: 20px;}
+
+    /* 联系我们 */
+    .contact-detail {padding:40px 0;}
+    .contact-detail .item {width:100%;margin-right:0;margin-bottom:10px;padding:30px 0;}
+    .contact-detail .item:last-child {margin-bottom:0;}
+    .contact-detail .item .icon {width:60px;height:60px;}
+    .contact-detail .item .title {margin:10px 0;font-size:14px;}
+    .contact-detail .item .text {font-size:16px;}
+
+    /* 搜索中心 */
+    .search-center {padding:40px 0;}
+    .search-center .nav a {font-size:16px;}
+    .search-center .bottom {padding-top:20px;}
+
+    /* 质保查询 */
+    .qa-detail {padding:40px 0;}
+    .qa-detail .title{font-size: 20px;}
+    .qa-detail .qa-search{padding: 30px 0;}
+    .qa-detail .qa-search .input{width:50%;height: 48px;}
+    .qa-detail .qa-search .submit{width:120px;height: 48px;}
+    .qa-detail .content{width:90%;}
+    .qa-detail .content .left{float: none;width: 100%;overflow: hidden;}
+    .qa-detail .content .left .item{padding: 5% 0;width: 100%;box-sizing: border-box;}
+    .qa-detail .content .right{float: none;width: 100%;overflow: hidden;}
+
+}
+
+@media screen and (min-width:1921px) and (max-width:2560px){
+    .index-cases .index-cases-item,.cases-list .cases-list-item{height: 530px;}
+}

+ 84 - 0
public/assets/addons/material/css/reset.css

@@ -0,0 +1,84 @@
+@charset "UTF-8";
+/* reset.css - 重置所有浏览器默认样式 */
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed, 
+figure, figcaption, footer, header, hgroup, 
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    font-size: 100%;
+    font: inherit;
+    vertical-align: baseline;
+}
+
+/* HTML5 元素显示为块级元素 */
+article, aside, details, figcaption, figure, 
+footer, header, hgroup, menu, nav, section {
+    display: block;
+}
+
+/* 设置基本行高 */
+body {
+    line-height: 1;
+}
+
+/* 去除列表样式 */
+ol, ul {
+    list-style: none;
+}
+
+/* 引用块样式重置 */
+blockquote, q {
+    quotes: none;
+}
+
+blockquote:before, blockquote:after,
+q:before, q:after {
+    content: '';
+    content: none;
+}
+
+/* 表格边框合并 */
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+/* 盒模型设置 */
+* {
+    box-sizing: border-box;
+}
+
+/* 图片最大宽度限制 */
+img {
+    max-width: 100%;
+    height: auto;
+}
+
+/* 去除链接下划线 */
+a {
+    text-decoration: none;
+    color: inherit;
+}
+
+/* 去除输入框焦点时的轮廓 */
+input, textarea, button, select {
+    outline: none;
+}
+
+/* 修正按钮在Firefox中的内边距异常问题 */
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+} 

+ 384 - 0
public/assets/addons/material/css/style.css

@@ -0,0 +1,384 @@
+@charset "UTF-8";
+/* 主样式文件 */
+body {
+    font-family: "Source Han Sans CN", "PingFang SC", "Microsoft YaHei", sans-serif;
+    font-size: 14px;
+    line-height: 1.5;
+    color: #2E3033;
+    background-color: #fff;
+}
+/* 导航栏样式 */
+header {
+    height: 100px;
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    z-index: 1000;
+    background-color: #fff;
+    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+    transition: background-color 0.3s, box-shadow 0.3s;
+}
+
+header.scrolled {
+    background-color: rgba(255, 255, 255, 0.95);
+    box-shadow: 0 2px 15px rgba(0, 0, 0, 0.15);
+}
+
+header .container {
+    max-width: 1920px;
+    width: 100%;
+    margin: 0 auto;
+    position: relative;
+    height: 100px;
+}
+/* 导航栏样式 LOGO */
+.logo-container {
+    position: absolute;
+    top: 26px;
+    left: 266px;
+    display: flex;
+    align-items: center;
+}
+
+.logo, .footer-logo {
+    display: flex;
+    align-items: center;
+    gap: 12px; /* 图片和文字间距 */
+}
+
+.logo img {
+    width: 48px;
+    height: 48px;
+    object-fit: contain;
+}
+
+.logo-text, .footer-logo-text {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+}
+
+.logo-text h1 {
+    font-weight: bold;
+    font-size: 24px;
+    line-height: 28px;
+    color: #2E3033;
+}
+
+.logo-text p {
+    font-weight: 500;
+    font-size: 12px;
+    color: #2E3033;
+    text-align: left;
+    font-style: normal;
+}
+
+ /* 导航栏 导航名称 */
+nav {
+    position: absolute;
+    top: 38px;
+    left: 711px;
+}
+
+nav ul {
+    display: flex;
+    height: 24px;
+    align-items: center;
+}
+
+nav ul li {
+    display: flex;
+    align-items: center;
+    height: 24px;
+}
+
+nav ul li a {
+    font-size: 16px;
+    line-height: 24px;
+    font-weight: 500;
+    color: #2E3033;
+    transition: color 0.3s;
+    position: relative;
+    padding: 8px 0;
+}
+
+nav ul li a:hover, 
+nav ul li.active a {
+    color: #DF0100;
+}
+
+nav ul li a:after {
+    content: '';
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 0;
+    height: 2px;
+    background-color: #DF0100;
+    transition: width 0.3s;
+}
+
+nav ul li a:hover:after,
+nav ul li.active a:after {
+    width: 100%;
+}
+ /* 导航栏分隔符样式 */
+.nav-separator {
+    color: #CDCDCD;
+    margin: 0 24px;
+    font-weight: normal;
+}
+nav ul li:last-child .nav-separator {
+    display: none;
+}
+
+
+/* 通用标题与横幅组合结构 */
+.col-banner {
+    width: 100%;
+    position: relative;
+}
+.col-banner .section-banner {
+    width: 100%;
+    height: 400px;
+    overflow: hidden;
+    position: relative;     
+}
+
+.col-banner .section-header {
+    max-width: 1200px;
+    margin: 80px auto 60px;
+}
+
+
+.col-banner .section-banner img {
+    width: 100%;
+    height: 400px;
+    object-fit: cover;
+    object-position: center;
+    display: block;
+}
+.col-banner .section-header h2 {
+    font-size: 30px;
+    font-weight: 700;
+    color: #2E3033;
+    letter-spacing: 1.2px;
+    line-height: 44px;
+}
+.col-banner .section-header p {
+    font-size: 30px;
+    font-weight: 400;
+    color: #737980;
+    letter-spacing: 1.2px;
+    line-height: 44px;
+}
+/* 内容样式 */
+.container {
+    width: 100%;
+    max-width: 1200px;
+    margin: 0 auto 80px;
+}
+
+/* 页脚 */
+footer {
+    width: 100%;
+    max-width: 1920px;
+    height: 336px;
+    background: #0E1B33;
+    margin: 0 auto;
+    overflow: hidden;
+}
+
+/* 确保.footer-top是flex容器,但不设置整体垂直居中 */
+.footer-top {
+    display: flex;
+    flex-direction: row;
+    align-items: flex-start; /* 恢复为顶部对齐 */
+    height: 336px;
+    width: 100%;
+    box-sizing: border-box;
+}
+
+/* logo导航区域保持顶部对齐 */
+.footer-logo-nav {
+    display: flex;
+    flex-direction: column;
+    margin-left: 360px;
+    margin-top: 63px;
+}
+
+.footer-logo {
+    display: flex;
+    align-items: center;
+    margin-bottom: 24px;
+    gap: 12px;
+}
+
+.footer-logo img {
+    width: 40px;
+    height: 40px;
+}
+
+.footer-logo-text h3 {
+    font-size: 20px;
+    font-weight: bold;
+    color: #fff;
+}
+
+.footer-logo-text p {
+    font-size: 12px;
+    color: #fff;
+}
+
+.footer-nav {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+    display: flex;
+    flex-wrap: wrap;
+    width: 330px; /* 控制总宽度 */
+    margin-left: 30px;
+}
+
+.footer-nav li {
+    width: calc(50% - 30px); /* 50%宽度减去间距的一半 */
+    margin-bottom: 12px;
+}
+
+/* 左列项目(偶数项) */
+.footer-nav li:nth-child(odd) {
+    margin-right: 60px; /* 设置列间距为60px */
+}
+
+.footer-nav li a {
+    color: #fff;
+    text-decoration: none;
+    font-size: 16px;
+    white-space: nowrap;
+    display: block;
+}
+
+/* 只将公司信息部分垂直居中 */
+.footer-info {
+    position: relative;
+    margin-top: 0; /* 移除顶部边距 */
+    margin-left: 80px;
+    padding-left: 80px;
+    align-self: center; /* 仅此元素在父容器中竖直居中 */
+    
+    /* 内部排列为两列 */
+    display: flex;
+    flex-wrap: wrap;
+    width: 460px;
+}
+
+.footer-info::before {
+    content: "";
+    position: absolute;
+    left: 0;
+    top: 50%; /* 竖线居中 */
+    transform: translateY(-50%); /* 竖线居中调整 */
+    width: 1px;
+    height: 200px;
+    background-color: #2A3956;
+}
+
+.info-item {
+    width: 50%;
+    margin-bottom: 16px;
+    box-sizing: border-box;
+}
+
+.info-item h4 {
+    font-size: 14px;
+    color: #B9C3CD;
+    margin: 0 0 4px 0;
+    font-weight: normal;
+}
+
+.info-item p {
+    font-size: 14px;
+    color: #fff;
+    margin: 0;
+}
+
+/* 版权区域也垂直居中 */
+.footer-copyright {
+    position: relative;
+    margin-left: 80px;
+    padding-left: 80px;
+    align-self: center; /* 实现垂直居中 */
+}
+
+.footer-copyright::before {
+    content: "";
+    position: absolute;
+    left: 0;
+    top: 50%; /* 竖线居中 */
+    transform: translateY(-50%); /* 竖线调整 */
+    width: 1px;
+    height: 200px;
+    background-color: #2A3956;
+}
+
+/* 调整行间距 */
+.footer-copyright p {
+    font-size: 14px;
+    color: #fff;
+    margin: 0 0 8px 0; /* 默认行间距 */
+}
+
+/* 第一行下方增加间距 */
+.footer-copyright p:first-child {
+    margin-bottom: 20px;
+}
+
+/* 中间两行紧凑排列 */
+.footer-copyright p:nth-child(2),
+.footer-copyright p:nth-child(3) {
+    margin-bottom: 4px; /* 减小行间距 */
+}
+
+/* 第三行与安全信息之间增加间距 */
+.footer-copyright p:nth-child(3) {
+    margin-bottom: 20px;
+}
+
+.footer-copyright .security-info {
+    display: flex;
+    align-items: center;
+}
+
+.footer-copyright .security-info img {
+    height: 16px;
+    margin-right: 8px;
+}
+
+/* 回到顶部按钮 */
+#back-to-top {
+    position: fixed;
+    bottom: 20px;
+    right: 20px;
+    width: 40px;
+    height: 40px;
+    background-color: #DF0100;
+    color: #fff;
+    border-radius: 4px;
+    text-align: center;
+    line-height: 40px;
+    display: none;
+    cursor: pointer;
+    z-index: 999;
+    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+    transition: background-color 0.3s;
+}
+
+#back-to-top:hover {
+    background-color: #c50100;
+}
+
+.icon-up:before {
+    content: "↑";
+    font-size: 20px;
+}

File diff suppressed because it is too large
+ 12 - 0
public/assets/addons/material/css/swiper.min.css


+ 592 - 0
public/assets/addons/material/css/video.css

@@ -0,0 +1,592 @@
+/*
+ *  视频播放器
+ * */
+.video-box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  width: 100%;
+  height: 100%;
+  font-size: 0;
+  z-index: 99999999999;
+}
+.video-box button {
+  display: inline-block;
+  padding: 0;
+  border: 0 none;
+  background: none;
+  text-align: center;
+  outline: none;
+  cursor: pointer;
+}
+.video-box .video-button {
+  display: inline-block;
+  width: 36px;
+  height: 36px;
+  color: #fff;
+  position: relative;
+  overflow: hidden;
+}
+.video-box .video-button i {
+  font-size: 56px;
+}
+.video-box .video-button.video-btn-volume i {
+  font-size: 20px;
+}
+.video-box .video-button.video-tooltip-toggle i {
+  font-size: 20px;
+}
+.video-box .video-video {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+.video-box .video-video video {
+  position: relative;
+  display: block;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: #000;
+}
+.video-box .video-container {
+  width: 80%;
+  min-height: 80%;
+  max-height: 90vh;
+  background: #000000;
+  overflow: hidden;
+  opacity: 0;
+}
+.video-box .video-container.video-ready {
+  opacity: 1;
+}
+.video-box.quanping .video-container {
+  width: 100%;
+  height: 100%;
+  max-height: 100%;
+  position: relative;
+  left: 0;
+  top: 0;
+  transform: none;
+}
+.video-box.video-playing .video-div.video-hide-ui .video-ui {
+  -webkit-transform: translateY(39px);
+  -ms-transform: translateY(39px);
+  transform: translateY(39px);
+}
+.video-box.heibian .video-container {
+  padding: 40px 0;
+}
+.video-box.heibian .video-div.video-hide-ui .video-ui {
+  -webkit-transform: translateY(0px);
+  -ms-transform: translateY(0px);
+  transform: translateY(0px);
+}
+.video-box.heibian.quanping .video-container {
+  padding: 0;
+}
+.video-box.hideui .video-div .video-ui {
+  -webkit-transform: translateY(39px);
+  -ms-transform: translateY(39px);
+  transform: translateY(39px);
+}
+.video-box .i {
+  font-family: none;
+  height: 100%;
+  width: 100%;
+  background-size: 80%;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+.video-box .i:before,
+.video-box i:after {
+  display: none !important;
+}
+.video-box .i-voice-on {
+  background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%20%20%3E%3Cg%20%20stroke%3D'%23fff'%20stroke-width%3D'1'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M2%2C10L2%2C20L5%2C20L13%2C25L13%2C5L5%2C10L5%2C10Z'%2F%3E%3Cpath%20d%3D'M18%2C10C%2022%2C12%2022%2C18%2018%2C20'%20%2F%3E%3Cpath%20d%3D'M22%2C6C%2028%2C10%2028%2C20%2022%2C24'%20%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+.video-box .i-voice-off {
+  background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%20%20%3E%3Cg%20%20stroke%3D'%23fff'%20stroke-width%3D'1'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%20%3E%3Cpath%20d%3D'M2%2C10L2%2C20L5%2C20L13%2C25L13%2C5L5%2C10L5%2C10Z'%2F%3E%3Cpath%20d%3D'M18%2C11L27%2C20'%20%2F%3E%3Cpath%20d%3D'M18%2C20L27%2C11'%20%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+.video-box .i-bofang {
+  background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%3E%3Cg%20fill%3D'%23fff'%20stroke%3D'%23fff'%20stroke-width%3D'1'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M10%2C7L10%2C23L24%2C15z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+.video-box .i-zhanting {
+  background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%3E%3Cg%20fill%3D'%23fff'%20stroke%3D'%23fff'%20stroke-width%3D'1'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M7%2C7L7%2C23L11%2C23L11%2C7z'%2F%3E%3Cpath%20d%3D'M20%2C7L20%2C23L24%2C23L24%2C7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+.video-box .i-quanping {
+  background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%20%20%3E%3Cg%20%20stroke%3D'%23fff'%20stroke-width%3D'1'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%20%3E%3Cpath%20d%3D'M6%2C10L6%2C6L10%2C6'%2F%3E%3Cpath%20d%3D'M6%2C21L6%2C25L10%2C25'%2F%3E%3Cpath%20d%3D'M20%2C6L24%2C6L24%2C10'%2F%3E%3Cpath%20d%3D'M20%2C25L24%2C25L24%2C21'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+.video-box .i-suoxiao {
+  background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%20%20%3E%3Cg%20%20stroke%3D'%23fff'%20stroke-width%3D'1'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%20%3E%3Cpath%20d%3D'M6%2C10L10%2C10L10%2C6'%2F%3E%3Cpath%20d%3D'M6%2C21L10%2C21L10%2C25'%2F%3E%3Cpath%20d%3D'M20%2C6L20%2C10L24%2C10'%2F%3E%3Cpath%20d%3D'M20%2C25L20%2C21L24%2C21'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+.video-bg {
+  position: absolute;
+  height: 100%;
+  width: 100%;
+  background: #000;
+  opacity: .9;
+}
+.video-div {
+  background: #000;
+  font-size: 0;
+  letter-spacing: -1px;
+  position: absolute;
+  height: 100%;
+  width: 100%;
+  top: 0;
+  left: 0;
+}
+.video-ui {
+  position: absolute;
+  width: 100%;
+  height: 41px;
+  background-color: rgba(0, 0, 0, 0.8);
+  left: 0;
+  bottom: 0;
+  z-index: 6;
+  letter-spacing: .25px;
+  -webkit-transition: transform 0.3s ease;
+  -o-transition: transform 0.3s ease;
+  -ms-transition: transform 0.3s ease;
+  -moz-transition: transform 0.3s ease;
+  transition: transform 0.3s ease;
+  -webkit-transform: translateY(0px);
+  -o-transform: translateY(0px);
+  -ms-transform: translateY(0px);
+  -moz-transform: translateY(0px);
+  transform: translateY(0px);
+}
+.video-loading-pulse {
+  position: absolute;
+  width: 6px;
+  height: 24px;
+  top: 50%;
+  left: 50%;
+  background-color: rgba(255, 255, 255, 0.2);
+  -webkit-animation: pulse 750ms infinite;
+  animation: pulse 750ms infinite;
+  -webkit-animation-delay: 250ms;
+  animation-delay: 250ms;
+}
+.video-loading-pulse:before,
+.video-loading-pulse:after {
+  content: '';
+  position: absolute;
+  display: block;
+  height: 16px;
+  width: 6px;
+  background: rgba(255, 255, 255, 0.2);
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+  -webkit-animation: pulse 750ms infinite;
+  animation: pulse 750ms infinite;
+}
+.video-loading-pulse:before {
+  left: -12px;
+}
+.video-loading-pulse:after {
+  left: 12px;
+  -webkit-animation-delay: 500ms;
+  animation-delay: 500ms;
+}
+@keyframes pulse {
+  50% {
+    background: white;
+  }
+}
+.video-loading {
+  opacity: 1;
+  color: #2c97f6;
+  font-size: 0;
+  overflow: hidden;
+  box-shadow: 0px 0px 0px 3600px #000;
+  background: #000;
+  width: 30px;
+  height: 30px;
+  -webkit-transition: all 0.5s;
+  -o-transition: all 0.5s;
+  -ms-transition: all 0.5s;
+  -moz-transition: all 0.5s;
+  transition: all 0.5s;
+}
+.video-loading i {
+  border-radius: 50%;
+  width: 24px;
+  height: 24px;
+  display: block;
+  border: 0.25rem solid rgba(255, 255, 255, 0.2);
+  border-top-color: white;
+  -webkit-animation: adeg 1s infinite linear;
+  -o-animation: adeg 1s infinite linear;
+  -ms-animation: adeg 1s infinite linear;
+  -moz-animation: adeg 1s infinite linear;
+  animation: adeg 1s infinite linear;
+}
+.video-loading .i-loading:before {
+  display: none;
+  opacity: 0;
+  visibility: hidden;
+}
+.video-loading.yihuanchun {
+  opacity: 0;
+}
+@keyframes adeg {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+.video-close {
+  position: absolute;
+  top: calc(52px + 2%);
+  right: 5%;
+  width: 30px;
+  height: 30px;
+  cursor: pointer;
+  background: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2030%2030'%3E%3Cg%20fill%3D'%23fff'%3E%3Cpath%20d%3D'M0%2C1L1%2C0L30%2C29L29%2C30z'%2F%3E%3Cpath%20d%3D'M29%2C0L29%2C0L30%2C1L1%2C30L0%2C29z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-repeat: no-repeat;
+}
+.video-bofang.f-czspjuzhong {
+  z-index: 2;
+  font-size: 0;
+}
+.video-bofang.f-czspjuzhong i {
+  display: block;
+  border-radius: 50%;
+  text-align: center;
+  background-color: rgba(0, 0, 0, 0.8);
+  color: #fff;
+  width: 60px;
+  height: 60px;
+  cursor: pointer;
+  line-height: 62px;
+  font-size: 66px;
+  -webkit-transition: transform 1s;
+  -o-transition: transform 1s;
+  -ms-transition: transform 1s;
+  -moz-transition: transform 1s;
+  transition: transform 1s;
+}
+.video-hide {
+  z-index: 0 !important;
+}
+.video-hide i {
+  opacity: 0;
+  -webkit-transform: scale(3);
+  -o-transform: scale(3);
+  -ms-transform: scale(3);
+  -moz-transform: scale(3);
+  transform: scale(3);
+  will-change: transform, opacity;
+  z-index: 0;
+}
+.video-progress {
+  display: block;
+  position: absolute;
+  width: 100%;
+  bottom: 36px;
+  height: 5px;
+  cursor: pointer;
+  -webkit-transition: all 0.3s ease;
+  -o-transition: all 0.3s ease;
+  -ms-transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  transition: all 0.3s ease;
+  z-index: 2;
+}
+.video-progress:hover .video-progress-hover,
+.video-progress:hover .video-tooltip-time {
+  opacity: 1;
+}
+.video-tooltip-time {
+  width: 46px;
+  position: absolute;
+  height: 20px;
+  z-index: 5;
+  left: 0;
+  right: 0;
+  bottom: 8px;
+  opacity: 0;
+  -webkit-transition: opacity 0.5s;
+  -o-transition: opacity 0.5s;
+  -ms-transition: opacity 0.5s;
+  -moz-transition: opacity 0.5s;
+  transition: opacity 0.5s;
+}
+.video-tooltip-time .video-tinytip-content {
+  margin-left: -23px;
+}
+.video-tooltip-time .video-text {
+  background: rgba(0, 0, 0, 0.5);
+  padding: 2px;
+  border-radius: 2px;
+}
+.video-tinytip .video-tooltip-content {
+  display: inline-block;
+  padding: 0 4px;
+  color: rgba(255, 255, 255, 0.5);
+  font-size: 10px;
+  line-height: 20px;
+  text-align: center;
+}
+.video-progress-padding {
+  position: absolute;
+  width: 100%;
+  height: 16px;
+  bottom: 0;
+  z-index: 40;
+  cursor: pointer;
+}
+.video-progress-list {
+  position: relative;
+  top: -1px;
+  z-index: 39;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(255, 255, 255, 0.2);
+  -webkit-transform: scaleY(0.6);
+  -ms-transform: scaleY(0.6);
+  transform: scaleY(0.6);
+  transition: -webkit-transform 0.1s cubic-bezier(0.4, 0, 1, 1);
+  transition: transform 0.1s cubic-bezier(0.4, 0, 1, 1);
+  transition: transform 0.1s cubic-bezier(0.4, 0, 1, 1), -webkit-transform 0.1s cubic-bezier(0.4, 0, 1, 1);
+}
+.video-progress-play,
+.video-progress-buffer,
+.video-progress-hover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 0;
+  height: 100%;
+}
+.video-progress-buffer {
+  z-index: 33;
+  background-color: rgba(255, 255, 255, 0.4);
+  -webkit-transition: all 0.3s ease;
+  -o-transition: all 0.3s ease;
+  -ms-transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  transition: all 0.3s ease;
+}
+.video-progress-hover {
+  z-index: 34;
+  background-color: rgba(255, 255, 255, 0.5);
+  opacity: 0;
+  -webkit-transition: opacity 0.25s cubic-bezier(0, 0, 0.2, 1);
+  -o-transition: opacity 0.25s cubic-bezier(0, 0, 0.2, 1);
+  -ms-transition: opacity 0.25s cubic-bezier(0, 0, 0.2, 1);
+  -moz-transition: opacity 0.25s cubic-bezier(0, 0, 0.2, 1);
+  transition: opacity 0.25s cubic-bezier(0, 0, 0.2, 1);
+}
+.video-progress-play {
+  z-index: 35;
+  background-color: #2c97f6;
+}
+.video-progress-handle {
+  width: 13px;
+  height: 13px;
+  position: absolute;
+  top: 50%;
+  right: -6.5px;
+  margin-top: -6.5px;
+  border-radius: 50%;
+  background-color: #2c97f6;
+  -webkit-transform: scale(0);
+  -ms-transform: scale(0);
+  transform: scale(0);
+  transition: -webkit-transform 0.1s cubic-bezier(0.4, 0, 1, 1);
+  transition: transform 0.1s cubic-bezier(0.4, 0, 1, 1);
+  transition: transform 0.1s cubic-bezier(0.4, 0, 1, 1), -webkit-transform 0.1s cubic-bezier(0.4, 0, 1, 1);
+}
+.video-progress-padding:hover + .video-progress-list {
+  -webkit-transform: scaleY(1);
+  -ms-transform: scaleY(1);
+  transform: scaleY(1);
+}
+.video-progress-padding:hover + .video-progress-list .video-progress-handle {
+  -webkit-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
+}
+.video-controls-buttons {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  height: 36px;
+  width: 100%;
+  padding: 0 10px;
+  z-index: 3;
+  box-sizing: border-box;
+}
+.video-time-panel {
+  font-size: 12px;
+  color: #777;
+  display: inline-block;
+  vertical-align: top;
+  height: 36px;
+  padding: 0 5px;
+  line-height: 36px;
+  letter-spacing: .25px;
+}
+.video-time-panel-current {
+  color: #DEDEDF;
+}
+.video-fullscreen {
+  float: right;
+}
+.video-definition {
+  float: right;
+  width: 55px;
+  height: 36px;
+  position: relative;
+}
+.video-definition .video-button {
+  width: 100%;
+}
+.video-definition .video-button span {
+  background: #fff;
+  color: #333;
+  font-size: 14px;
+  padding: 2px 5px;
+}
+.video-definition .video-tooltip-content {
+  width: 80px;
+  left: 50%;
+  margin-left: -40px;
+  display: none;
+  background: rgba(0, 0, 0, 0.5);
+}
+.video-definition:hover .video-tooltip-content {
+  position: absolute;
+  bottom: 35px;
+  color: #aaa;
+  display: block;
+  z-index: 6;
+}
+.video-menu .video-menu-item {
+  display: block;
+  width: 100%;
+  line-height: 36px;
+  font-size: 14px;
+  text-align: center;
+  white-space: nowrap;
+  padding: 0 12px;
+  cursor: pointer;
+  position: relative;
+  height: 38px;
+  background: -webkit-linear-gradient(top, transparent 0, transparent 50%, rgba(255, 255, 255, 0.1) 50%) center bottom no-repeat;
+  background-size: 80% 1px;
+}
+.video-menu .video-menu-item:hover {
+  color: #fff;
+  background: rgba(255, 255, 255, 0.12);
+}
+.video-menu .video-menu-item.video-active {
+  color: #FF8F00;
+}
+.video-volume {
+  float: right;
+  position: relative;
+}
+.video-popup .video-popup-content {
+  transform: scaleY(0);
+  bottom: 41px;
+  position: absolute;
+}
+.video-popup .video-popup-content:after {
+  content: '';
+  position: absolute;
+  bottom: -10px;
+  left: 50%;
+  margin-left: -5px;
+  border: 5px solid transparent;
+  border-top-color: rgba(0, 0, 0, 0.5);
+}
+.video-popup:hover .video-popup-content {
+  -webkit-transform: scaleY(1);
+  -o-transform: scaleY(1);
+  -ms-transform: scaleY(1);
+  -moz-transform: scaleY(1);
+  transform: scaleY(1);
+}
+.video-volume-slider {
+  left: 0;
+  width: 36px;
+  height: 100px;
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.8);
+}
+.video-tinytip-tiao {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+.video-volume-range {
+  position: absolute;
+  left: 16px;
+  top: 10px;
+  width: 4px;
+  height: 80px;
+  background-color: rgba(0, 0, 0, 0.2);
+}
+.video-volume-range-current {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  width: 100%;
+  height: 50%;
+  background-color: #2c97f6;
+}
+.video-volume-handle {
+  position: absolute;
+  top: 0;
+  left: -4px;
+  width: 12px;
+  height: 3px;
+  background-color: #fff;
+}
+@media (max-width: 998px) {
+  .video-box .video-container {
+    width: 80vw;
+    max-height: 80vh;
+    min-height: 44.9vw;
+  }
+}
+@media (max-width: 468px) {
+  .video-box .video-container {
+    width: 100vw;
+    min-height: 54.9vw;
+  }
+  .video-loading i {
+    font-size: 26px;
+  }
+  .video-definition {
+    display: none;
+  }
+}
+/*
+ * 视频结尾
+ * */
+.f-czspjuzhong {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -o-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  -moz-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}

BIN
public/assets/addons/material/images/about/1.png


BIN
public/assets/addons/material/images/about/2.png


Some files were not shown because too many files changed in this diff