<!DOCTYPE html>
<!--[if IE 8]>          <html class="ie ie8"> <![endif]-->
<!--[if IE 9]>          <html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->  <html> <!--<![endif]-->
    <head>
        <meta charset="utf-8" />
        <title>SaaS的“最后一公里”魔咒 - 行业动态 - 新闻中心 - 销售,SaaS,成交,难度,成本,问题,公司,收入</title>
        <meta name="keywords" content="销售,SaaS,成交,难度,成本,问题,公司,收入" />
        <meta name="description" content="国内SaaS公司的创业过程有一个特点，即开局和中局都比较顺利，但大部分创业公司却很难穿越SaaS的“最后一公里”。所谓的SaaS的最后一公里，就是目前收入与目标收入之间的增长距离。因为一家SaaS公司" />
        <meta name="Author" content="戴珂" />
        <!-- <meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0" /> -->
        <link rel="canonical" href="/col_hydt/202111/98FEB22A22756E8E76B74104EBB0C963.htm"/>
        <!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
        <link href="../../hdui/app/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
        <link href="../../hdui/app/css/hdcore.min.css" rel="stylesheet" type="text/css" />
        <!-- SWIPER SLIDER -->
        <link href="../../hdui/app/plugins/slider.swiper/dist/css/swiper.min.css" rel="stylesheet" type="text/css" />
        <link href="../../hdimg/bas/css/hdcss.css" rel="stylesheet" type="text/css" />
        <link href="../../hdimg/bas/css/hdcss2.css" rel="stylesheet" type="text/css" />
        <link href="../../hdimg/bas/images_col/mycss.css" rel="stylesheet" type="text/css" />
        <link href="../../hdimg/bas/images_col/mycssmbi.css" rel="stylesheet" type="text/css" />
        <script>
                    checkBrowser("/hdmbi/bas/col_detail.php?id=161");
            function checkBrowser(url) {
                var ua = navigator.userAgent;
                if (ua.match(/(iphone|Android|midp-2|opera mini|ucweb|windows ce|symbianos|blackberry|nokia|palm|cellphone)/i)) {
                    window.location.href = url;
                    }
            }
                    </script>
    </head>
    <body class="smoothscroll enable-animation" style="background: #f8f8f8;">
<div style="width: 100%; position: absolute; left: 0; top: 0; z-index: 2; padding: 0 50px;">
    
<div class="Headertop">
    <h1 class="logo"><a href="/"><img alt="甘肃柏隆电子商务科技有限责任公司" src="../../hdupf/gimg/202001/20200107175335_758355.png" title="" style="border:0; width:180px; height:60px"></a></h1>
    <div class="naver">
        <div class="search">
            <a href="../../s/all/"><img src="../../hdimg/bas/images_col/sch.png"/></a>
        </div>
        <ul>
            <li><a href="/">首页</a></li>
            <li class="navMenu-item navMenu-item-1"><a class="navMenu-title " href="/col_gsgk/index" target="_blank">关于柏隆</a></li><li class="navMenu-item navMenu-item-2"><a class="navMenu-title selected" href="/col_qydt/index" target="_blank">新闻中心</a><ul><li><a href="/col_qydt/index/">企业动态</a></li><li><a href="/col_hydt/index/">行业动态</a></li></ul></li><li class="navMenu-item navMenu-item-3"><a class="navMenu-title " href="/hdapp/bas/col_up.php?sn=ywfw" target="_blank">业务领域</a><ul><li><a href="/col_kjcsmf/index/">鲲迹超数魔方</a></li><li><a href="/col_kjzspt/index/">鲲迹智算平台</a></li><li><a href="/col_idctgyw/index/">IDC托管业务</a></li><li><a href="/col_swcyld/index/">算网产业落地</a></li><li><a href="/col_qklyw/index/">云服务</a></li><li><a href="/col_qghlwjrfw/index/">全国互联网接入服务</a></li><li><a href="/col_cdnznccyw/index/">CDN智能存储业务</a></li><li><a href="/col_ywstxz/index/">业务生态协作</a></li></ul></li><li class="navMenu-item navMenu-item-4"><a class="navMenu-title " href="/col_hxjzg/index" target="_blank">企业文化</a></li><li class="navMenu-item navMenu-item-5"><a class="navMenu-title " href="/col_zpxx/index" target="_blank">人才招聘</a><ul><li><a href="/col_zpxx/index/">招聘信息</a></li><li><a href="/col_rcln/index/">人才理念</a></li></ul></li><li class="navMenu-item navMenu-item-6"><a class="navMenu-title " href="/col_lxfs1/index" target="_blank">联系方式</a></li>
        </ul>
        
    </div>
</div>
</div>
<div style="position: fixed; width: 100%; height: 1065px; top:0; z-index: 0;">
    <div style="height: 1065px; width: 100%; position: relative; overflow: hidden; background: #121212;" id="img_wrapper">
        <div style="height: 1065px;margin-left: -960px; left: 50%; width: 1920px;z-index: 1; position: absolute;">
            
        </div>
        <div style="height: 1065px;margin-left: -960px; left: 50%; width: 1920px;z-index: 2; position: absolute;">
            <div class="controls">
                <div class="functions"></div>
                <div class="rotate"></div>
            </div>
            <canvas width="2560" height="1000" style="min-width: 1000px; width: 100%; position: fixed; left: 50%; top: 15%; transform: translate(-50%, -50%);z-index: 1;"></canvas>
        </div>
    </div>
</div>
<div style="width: 100%; height: 180px; margin-top: 440px; position: relative; z-index: 2; background: url(../../hdimg/bas/images_col/dot.png) no-repeat center;">
</div>
        <div class="column" style=" position: relative; z-index: 3;">
    <ul>
        <li class=""><a href="/col_qydt/index/">企业动态</a></li><li class=" on"><a href="/col_hydt/index/">行业动态</a></li>    </ul>
</div>
        <div style="background: #fff; position: relative; z-index: 2;">
        <div class="container" style="background: #fff;">
            <div class="detail">
                <h2><span style="color:#000">SaaS的“最后一公里”魔咒</span> </h2>
                <div class="infos"><span>编辑：戴珂</span> <span>来源：ToBeSaaS</span> <span>更新于：2021-11-09</span><span>阅读：<span id="visitcount">0</span></span></div>
                <div class="contain"><p style="text-indent: 2em;">国内SaaS公司的创业过程有一个特点，即开局和中局都比较顺利，但大部分创业公司却很难穿越SaaS的“最后一公里”。</p><p style="text-indent: 2em;">所谓的SaaS的最后一公里，就是目前收入与目标收入之间的增长距离。</p><p style="text-indent: 2em;">因为一家SaaS公司无论技术有多牛、产品有多好、拿到了多少钱... ...，最终的成功，也只能用收入的增长来兑现。讲其它的，都是扯。</p><p style="text-indent: 2em;">不幸的是，很多SaaS创业公司很早就遭遇了收入的天花板，而增长不得。</p><p style="text-indent: 2em;">从收入曲线看，在初始阶段可能会有一个跃升；但不久上升趋势就消失，曲线维持在水平状态。</p><p style="text-indent: 2em;">虽然每家公司的天花板高度不同，但天花板终究是天花板。它们使很多SaaS创业公司被困在最后一公里，连证明自己的机会都没有。</p><p style="text-indent: 2em;">啥啥都安排好了，收入增长咋就停了呢？SaaS理想的可衡量和可预测的收入增长模式，不是这样的。</p><h2><span style="color: rgb(31, 73, 125);">为什么烧钱获客方式不靠谱？</span></h2><p style="text-indent: 2em;">为了应对各方的压力，很多SaaS公司采取大幅增加对市场和销售投入的方法，想让收入曲线再次抬升。</p><p style="text-indent: 2em;">这虽然可以提升销售额，但不计获客成本地换取收入的做法，很快会消耗掉现有资金，同时这种干法难以持续。如果减少销售投入，销售额立马就下滑。</p><p style="text-indent: 2em;">这无异于饮鸩止渴。</p><p style="text-indent: 2em;">实际上，能否靠烧钱获客，来打通SaaS的最后一公里。这种争议一直就没有停止过，历史上几次“著名”的烧钱获客大战，都以一地鸡毛告终。</p><p style="text-indent: 2em;">每遇到这种争论，我都会给大家一个衡量公式，来平衡销售投入和有效产出。这就是获客成本回报周期的计算（CAC Payback）。</p><p style="text-indent: 2em;">所谓获客成本回报周期，即抵消掉获客成本，开始赚钱之前所需的时间。国外通常以月为单位，而国内用年则比较合适。</p><h3 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">获客成本回报周期=（销售和市场费用）/（新增ARR*次年NDR*毛利率）</span></h3><p style="text-indent: 2em;">在继续讨论之前，请先计算一下你的CAC Payback周期是几年？</p><p style="text-indent: 2em;">我跟几位CEO计算过，按照之前的数据，其中一家公司的CAC Payback周期计算结果是15年，这着实把大家吓了一跳。</p><p style="text-indent: 2em;">说好的SaaS“躺赚”，原来是有条件的。</p><p style="text-indent: 2em;">烧钱获客为什么不可行？从公式可以看出，即使无限投入销售费用，新的ARR也未必能同步增加。反而使CAC Payback周期无限放大，实现盈利变得遥遥无期。</p><p style="text-indent: 2em;">就算是有钱可烧，SaaS的故事也很难讲下去。一个生意连本都回不来，还谈何赚钱？</p><p style="text-indent: 2em;">国内SaaS为什么会有最后一公里魔咒呢？有人说是产品的问题，也有人说是销售的问题。</p><p style="text-indent: 2em;">我倾向于后者才是主因。</p><p style="text-indent: 2em;">所以，破解SaaS最后一公里这个魔咒，只能从SaaS的销售入手解决；那为什么没有解决呢？</p><p style="text-indent: 2em;">只能说SaaS的销售方式不对。</p><p style="text-indent: 2em;">遗憾的是，很少有人把SaaS的销售模式拿出来单独研究，而是把它与ToB销售混在一起说事。</p><p style="text-indent: 2em;">以至于在SaaS销售人员的招聘、培训、组织、薪酬等方面，都沿用了ToB销售模式。由此导致的直接结果就是，把SaaS这样一个好模式，活活做成了一个鸡肋生意。而间接的后果是，耽误了整整一届的SaaS销售。</p><p style="text-indent: 2em;">要想彻底解决SaaS的销售方式问题，就必须找到SaaS销售的本质。</p><h2 style="text-indent: 0em;"><span style="text-indent: 2em; color: rgb(31, 73, 125);">发现SaaS销售的本质</span></h2><p style="text-indent: 2em;">所谓本质，即事物背后的基本逻辑。SaaS销售的本质，就是SaaS销售究竟要解决什么问题？</p><p style="text-indent: 2em;">这个问题听起来有点弱智，所有ToB销售，难道不都是解决成交的问题吗？</p><p style="text-indent: 2em;">但对于SaaS销售来说，还真不是这样。</p><p style="text-indent: 2em;">根据CAC Payback，我们把SaaS销售拆解为三个必须要解决的问题：</p><h4 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">1. 销售的效率问题</span></h4><h4 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">2. 成交的难度问题</span></h4><h4 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">3. 成交的质量问题</span></h4><p style="text-indent: 2em;">为什么是这三个问题？这跟我们平时接触到的销售理论不太一样，所以有必要逐条解释一下。</p><h3 style="text-indent: 0em;"><span style="color: rgb(79, 129, 189);">（1）为什么SaaS销售首先要解决的，是效率问题？</span></h3><p style="text-indent: 2em;">所谓销售效率，简单理解为单位时间内的成交数量。很显然，低效率的销售，将大幅增加整体获客的成本；如果不提高客单价，则会降低新增ARR总量。</p><p style="text-indent: 2em;">为快速冲高销售额，需要大量的地面销售。而获客成本主要取决于随人数增加的人工成本，以及随时间消耗的资源成本。</p><p style="text-indent: 2em;">表面上看，低销售效率受损失的是公司，其实现实中受损失的还有销售员。为什么？</p><p style="text-indent: 2em;">因为销售员收入的很大一部分，是销售提成；而提成的基础，是销售的合同额。因为SaaS的订阅收入模式，首年的年度合同额（ACV）并不会很高。即使公司愿意给出较高的提成比例（其实很少有公司愿意），每客户所获得的提成也并不多。</p><p style="text-indent: 2em;">这跟销售软件不同，提成的基础是合同总额。即使提成比例降低，提成收入也很可观。</p><p style="text-indent: 2em;">虽然有些SaaS公司销冠的收入也比较高，但一般他们并不是靠销售效率取得的；而靠的是大客户的“多年期”合同。但随着SaaS企业的收入核算规范化或IPO的要求，靠多年期合同毕竟不是常事。</p><p style="text-indent: 2em;">由此看出，SaaS销售员要获得更多的提成，除了提高销售效率多做单，别无他法。</p><p style="text-indent: 2em;">所以，提高销售效率，无论是对于公司，还是对于销售员个人，都是SaaS销售的第一要务。</p><h3 style="text-indent: 0em;"><span style="color: rgb(79, 129, 189);">（2）降低成交难度，为什么那么重要？</span></h3><p style="text-indent: 2em;">所谓成交难度，代表了销售眼中成交的复杂性。降低成交难度之所以重要，是因为它制约了销售的效率。</p><p style="text-indent: 2em;">成交难度与销售难度不是一个概念。销售难度是针对不同SaaS的销售而言；而成交难度是针对同一个SaaS销售而言。销售难度是所销售产品所固有的，很难降低的；而成交难度是可以通过改进销售方法而降低的。</p><p style="text-indent: 2em;">比如，SaaS的一次成交，即可以通过漫长而复杂的验证过程；也可以省却低效耗时的冗余过程，在客户的服务价值认知点上直接成交。</p><p style="text-indent: 2em;">这取决于你的销售方法，能把成交难度降得有多低。</p><p style="text-indent: 2em;">目前无论是什么SaaS，在销售看来成交难度都很高。一个根本原因，是把SaaS当作软件来销售，所以成交难度降不下来。</p><p style="text-indent: 2em;">我们知道，软件行业的销售套路，主要是利用交易双方的信息不对称性，抬高软件的价值（实为价格）。所以用户对于软件的推销，始终怀有很高的戒备和谨慎心理。</p><p style="text-indent: 2em;">因为采购软件是一项高风险的交易，一旦买错，后果就很严重。因此，在成交之前，用户会千方百计地对厂商宣称的价值或方案进行验证，这就大大提高了软件的成交难度。</p><p style="text-indent: 2em;">验证过程也增加了厂商的时间成本和工作量投入成本。这些成本统称为验证成本，都会计入获客成本中。</p><p style="text-indent: 2em;">在软件厂商看来，这些成本花得是非常值得的。没有这个过程，就无法传递软件的高价值。但是作为服务交易的SaaS，验证成本对于买卖双方完全是多余的，是实打实的成本。</p><p style="text-indent: 2em;">SaaS销售要想降低成交难度，显然不能用软件的销售方法。</p><p style="text-indent: 2em;">那么除了软件的卖法，SaaS还有降低成交难度的其它销售方法吗？</p><p style="text-indent: 2em;">答案是肯定的，如果采用服务的交易原理和销售模式，SaaS的成交难度将会大大降低。</p><h3 style="text-indent: 0em;"><span style="color: rgb(79, 129, 189);">（3）SaaS销售为什么强调成交质量？</span></h3><p style="text-indent: 2em;">对于B2B销售来说，并不存在什么成交质量的问题。只要交易达成，无论用户用得怎样，公司都会产生收入，销售都能得到提成。</p><p style="text-indent: 2em;">不过，对于SaaS销售来说，情况完全不是这样。如果客户成交质量低，也就是服务的适用匹配度差，或者用户体验效果不好；那么用户就有可能弃用，也就是用户流失了。</p><p style="text-indent: 2em;">注意CAC Payback公式中NDR一项，它反映留存的指标。如果NDR变低，则收回获客成本的周期就会变长。</p><p style="text-indent: 2em;">再说得直白一些，这种客户就不如不做。虽然销售能拿到提成，但是公司却为此产生损失。</p><p style="text-indent: 2em;">所以，在SaaS的销售管理中，客户成交质量，是一项更重要的管理内容。经验告诉我们，大面积的地推销售，成交质量都不高。</p><p style="text-indent: 2em;">成交质量管理，在绝大多数SaaS公司还是空白。它们缺少的是一套基于数据分析的评价方法，为每个新签客户做一个质量评级。</p><p style="text-indent: 2em;">但是，也有的SaaS企业已经建立相关管理方法。比如，它们可以做到按照成交质量等级，奖励或打折销售提成比例。<span style="text-indent: 0em;">重构SaaS销售，才是解决之道</span></p><h2 style="text-indent: 0em;"><span style="color: rgb(31, 73, 125);">发现SaaS销售的本质，还要有解决方案才行</span></h2><p style="text-indent: 2em;">不幸的是，关于SaaS销售模式，原本就是一件探索性工作，并没有成熟的方法可参考。</p><p style="text-indent: 2em;">因为SaaS的销售方式，与ToB不同、与软件也有差别，更不同于ToC。甚至，国内SaaS与国外SaaS的销售方式也有很大差异。</p><p style="text-indent: 2em;">尽管如此，我们仍然可以根据SaaS销售的本质，重新建立SaaS的销售结构。</p><p style="text-indent: 2em;">重构的方法和路径，采用自底向上逐层搭建方式，如图所示。</p><p style="text-align: center"><img src="../../hdupf/img/202111/202111091636441267580154.jpg" title="202111091636441267580154.jpg" alt="1630291813735.jpg"/></p><h3 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">（1）成交原理</span></h3><p style="text-indent: 2em;">所谓成交原理，也就是交易的逻辑，它说明一个交易发生的理由。</p><p style="text-indent: 2em;">成交原理是整个销售体系结构的理论基础，如果选错，从方法论到销售组织，也都跟着跑偏了。</p><p style="text-indent: 2em;">我们说SaaS公司的产品是服务，而不是软件。就是因为二者最突出的差别，是成交原理的不同，如图所示。</p><p style="text-align: center"><img src="../../hdupf/img/202111/202111091636441326620733.jpg" title="202111091636441326620733.jpg" alt="1630291825582.jpg"/></p><p style="text-indent: 2em;">可以看出，对于不同的成交原理，有一点是相同的。即为了成交，它们都试图缩小现实与预期目标之间的差距。</p><p style="text-indent: 2em;">比如，软件成交取决于所提供的功能，与承诺满足用户需求功能之间的差距。而服务成交，取决于客户感知，与服务期望之间的差距。</p><p style="text-indent: 2em;">无论是哪种成交原理，都是成交概率与差距成反比。这样，销售问题就变为如何缩小差距的问题。</p><p style="text-indent: 2em;">但是，不同的成交原理，缩小差距的难度不一样，也就是成交难度不同。因此SaaS销售选择服务成交原理。</p><h3 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">（2）销售方法论</span></h3><p style="text-indent: 2em;">选择不同的成交原理，解决问题的方法论也不同。</p><p style="text-indent: 2em;">如果选择软件成交原理作为基础，整个方法论都是围绕验证所提供的功能，就是用户所需要的功能。</p><p style="text-indent: 2em;">因为“用户所需功能”这个参考点并不是固定的（用户对于这些功能有效性不确定），所以验证过程会非常复杂。既要验证功能的符合性，还要证明功能是否与期望相一致。</p><p style="text-indent: 2em;">这也就是软件成交难度难以降低的原因。</p><p style="text-indent: 2em;">反之，如果选择服务成交原理。因为“客户服务期望”这个参考点是确定的，即用户对自己要达到的目的和期望，是非常确定而不受影响的（比如，每天至少生成100个销售线索）。</p><p style="text-indent: 2em;">那么，整个方法论都是围绕如何帮助用户提升体验和感知，使其接近服务期望。</p><p style="text-indent: 2em;">只需做好这一件事就够了。</p><p style="text-indent: 2em;">从验证成本角度，显然后者更低。相应地，销售效率也更高。</p><h3 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">（3）销售系统</span></h3><p style="text-indent: 2em;">方法论只是一个框架，要想为销售组织所用，就必须实现为一个销售系统。它包括了流程、要素、工具、数据、技术、管理等等。</p><p style="text-indent: 2em;">一个有效的销售系统，应该是所有销售都能理解和掌握的。</p><p style="text-indent: 2em;">依靠销售系统，确保能解决SaaS销售的三个核心问题。</p><h3 style="text-indent: 2em;"><span style="color: rgb(79, 129, 189);">（4）销售组织</span></h3><p style="text-indent: 2em;">建立一个高绩效的SaaS销售组织，是重新定义SaaS销售的终极目的。</p><p style="text-indent: 2em;">有了销售底层逻辑的支撑，建立销售组织是一件水到渠成的事。比如，怎样招聘、如何培训、薪酬设计、激励机制和销售管理等组织问题，都有一套规则、要素和逻辑的支持。</p><h2 style="text-indent: 2em;"><span style="color: rgb(31, 73, 125);">写在最后</span></h2><p style="text-indent: 2em;">最后一公里，应该是SaaS创业阶段最后、也是最大的一个鸿沟，更是SaaS创业最容易失败的地方。</p><p style="text-indent: 2em;">很多创业者都试图通过产品的改善跨过这个鸿沟。实际上，到了这个阶段，起决定作用的并不是产品，而是经过重新定义的SaaS销售结构。</p><p style="text-indent: 2em;">它能够以SaaS的收入增长模式，帮助销售组织跨越“最后一公里”这条鸿沟。</p><p><br/></p></div>
                <div class="pre_next">
                    <ul class="pager" id="prevnext"></ul>
                </div>
            </div>
        </div>
        </div>
          <div style="width: 100%; height: 53px; border-bottom: 1px solid #414141; background: #121212; position: relative; z-index: 10;">
      <div class="body wow fadeInUp">
          <div id="foot_menu">
            <ul class="yiji">
                <!-- <li><a href="/">网站首页</a></li> -->
                <li class="li1 "><a href="/col_gsgk/index">关于柏隆</a></li><li class="li2 "><a href="/col_qydt/index">新闻中心</a></li><li class="li3 "><a href="/col_qghlwjrfw/index">业务领域</a></li><li class="li4 "><a href="/col_hxjzg/index">企业文化</a></li><li class="li5 "><a href="/col_zpxx/index">人才招聘</a></li><li class="li6 "><a href="/col_lxfs1/index">联系方式</a></li>            </ul>
          </div>
          <div id="foot_lx">
            <ul>
              <li>
                <a href="#"><img src="../../hdimg/bas/images_col/wb.png"/></a>
                <div class="hover"><a href="https://mp.weixin.qq.com/s/qXhQXdxl_jefdGRLzEfFvQ"><img alt="柏隆科技" src="../../hdupf/gimg/202107/20210719175707_293057.jpg" title="" style="border:0; width:100px; height:100px"></a></div>
              </li>
              <li>
                <a href="#"><img src="../../hdimg/bas/images_col/qq.png"/></a>
                <div class="hover"><a href="https://mp.weixin.qq.com/s/qXhQXdxl_jefdGRLzEfFvQ"><img alt="柏隆科技" src="../../hdupf/gimg/202107/20210719175707_293057.jpg" title="" style="border:0; width:100px; height:100px"></a></div>
              </li>
              <li>
                <a href="#"><img src="../../hdimg/bas/images_col/wx.png"/></a>
                <div class="hover"><a href="https://mp.weixin.qq.com/s/qXhQXdxl_jefdGRLzEfFvQ"><img alt="柏隆科技" src="../../hdupf/gimg/202107/20210719175707_293057.jpg" title="" style="border:0; width:100px; height:100px"></a></div>
              </li>
            </ul>
          </div>
      </div>
  </div>
  <div style="width: 100%; height: 210px;background: #121212; position: relative; z-index: 9;">
      <div class="body wow fadeInUp">
        <div id="foot_erweima">
          <p class="pic"><a href="https://mp.weixin.qq.com/s/qXhQXdxl_jefdGRLzEfFvQ"><img alt="柏隆科技" src="../../hdupf/gimg/202107/20210719175707_293057.jpg" title="" style="border:0; width:100px; height:100px"></a></p>
          <p class="text1">服务热线：</p>
          <p class="text2">0931-2338333</p>
          <p class="text1">传真：0931-2338333</p>
        </div>
        <div id="foot_yx">
          <ul>
            <li><span class="fa fa-envelope"></span>  邮箱：bolongkeji@bolong0931.com</li>
            <li><span class="fa fa-location-arrow"></span>  地址：中国甘肃省兰州市城关区庆阳路42号</li>
          </ul>
        </div>
        <div id="foot_form">
          <p class="text1">告诉我您的电话，我们联系您</p>
          <form>
            <input class="sch_input" type="text" name="k"/>
            <a href="/f/add/?sn=guestbook&burl=aHR0cDovL3d3dy5ibDA5MzEuY29tL2hkYXBwL2Jhcy9jb2xfZGV0YWlsLnBocD9pZD0xNjE=" data-target="#modal" data-toggle="modal" data-backdrop="static" class="sch_btn block">提交</a>
          </form>
        </div>
      </div>
  </div>
<div style="width: 100%; height: 50px;background: #050505; position: relative; z-index: 9;">
  <div class="body" style="height: 50px;">
      <div id="foot_info">
          Copyrights©2025 All Rights Reserved 版权所有 甘肃柏隆电子商务科技有限责任公司 <a href="http://beian.miit.gov.cn/" target="_blank">陇ICP备19004564号</a>
          <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=62010202002842" ><img src="../../hdimg/bas/images/ga.png" alt="甘公网安备62010202002842号"/> 甘公网安备 62010202002842号</a>
      </div>
  </div>
 </div>




<a href="#" id="toTop"></a>



<!--[if lte IE 9]>
    <div class="tc_cont_w  tc_show" >
      <div class="tc_bg"></div>
      <div class="tc_cont">
        <dl class="tc_main">
          <dd class="tc_head">温馨提醒</dd>
          <dd class="tc_gantan"> <img src="../../hdimg/bas/images/gantan.png" /> </dd>
          <dd class="tc_txt">尊敬的用户，为了获得更好的用户体验，建议您使用高版本浏览器来对网站进行查看。</dd>
          <dd class="tc_btn"> <a href="../../browser.htm" target="_blank">一键下载放心安装</a></dd>
        </dl>
      </div>
    </div>
<![endif]-->
<div class="mload modal fade" id="modal" role="basic" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content"><div class="text-center padding-30 margin-top-20"><img src="/hdui/app/images/loaders/10.gif" alt="loading" /><p class="margin-top-20">正在加载，请稍后...</p></div></div>
    </div>
</div>
<div class="mload modal fade" id="modal-sm" role="basic" aria-hidden="true">
    <div class="modal-dialog modal-sm">
        <div class="modal-content"><div class="text-center padding-30 margin-top-20"><img src="/hdui/app/images/loaders/10.gif" alt="loading" /><p class="margin-top-20">正在加载，请稍后...</p></div></div>
    </div>
</div>
<div class="mload modal fade" id="modal-lg" role="basic" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content" style="text-align: center;"><div class="text-center padding-30 margin-top-20"><img src="/hdui/app/images/loaders/10.gif" alt="loading" /><p class="margin-top-20">正在加载，请稍后...</p></div></div>
    </div>
</div>
<div class="mload modal fade" id="modal-full" role="basic" aria-hidden="true">
    <div class="modal-dialog modal-full">
        <div class="modal-content"><div class="text-center padding-30 margin-top-20"><img src="/hdui/app/images/loaders/10.gif" alt="loading" /><p class="margin-top-20">正在加载，请稍后...</p></div></div>
    </div>
</div>
<script type="text/javascript">var plugin_path = '../../hdui/app/plugins/';</script>
<script type="text/javascript" src="../../hdui/app/js/j.min.js"></script>
<script type="text/javascript" src="../../hdui/app/js/b.min.js"></script>
<script type="text/javascript" src="../../hdimg/bas/js/jquery.SuperSlide.2.1.1.js"></script>
<script type="text/javascript" src="../../hdimg/bas/js/jquery.parallax-1.1.3.js"></script>
<script type="text/javascript" src="../../hdui/app/js/hdjs.min.js"></script>
<script type="text/javascript" src="../../hdimg/bas/js/myjs.js"></script>
<!-- SWIPER SLIDER -->
<script type="text/javascript" src="../../hdui/app/plugins/slider.swiper/dist/js/swiper.min.js"></script>
<script type="text/javascript" src="../../hdui/app/js/view/demo.swiper_slider.js"></script>

<script src="../../hdui/app/plugins/validate/jquery.validate.min.js"></script>
<script src="../../hdui/app/plugins/validate/jquery.validate.add.js"></script>
<script src="../../hdui/app/plugins/validate/jquery.validate.cn.min.js"></script>

<script>
$(document).ready(function() {
  $('.nav-menu-content-box').hover(function() {
          $(this).addClass('dow-hover');
          $(".nav-menu-content").show('slow');
      }, function() {
          $(this).removeClass('dow-hover');
      });
    $.get('/hdapp/bas/d.php?ac=all',function(all){
        var reobj = eval('(' + all + ')');
        var ttip = reobj.sysvisit.ttip;
        var ttvp = reobj.sysvisit.ttvp
        $("#umenu").html(reobj.umenu);
        $("#sys_count_ttip").html('UV/'+ttip);
        $("#sys_count_ttvp").html('PV/'+ttvp);
    })
    jQuery(".sideMenu").slide({
        titCell:"h3", //鼠标触发对象
        targetCell:"ul", //与titCell一一对应，第n个titCell控制第n个targetCell的显示隐藏
        effect:"left", //targetCell下拉效果
        delayTime:300 , //效果时间
        triggerTime:150, //鼠标延迟触发时间（默认150）
        defaultPlay:true,//默认是否执行效果（默认true）
        returnDefault:true, //鼠标从.sideMen移走后返回默认状态（默认false）
        trigger:"mouseover"
    });
    jQuery(".txtMarquee-left").slide({mainCell:".bd ul",autoPlay:true,effect:"leftMarquee",vis:5,interTime:50});

    $(".detail img").each(function(){
      $(this).attr("title","");
    });
});
var maxHeight = 400;

$(function(){
    $(".nav-menu-content-box > li").hover(function() {
        var $container = $(this),
        $list = $container.find("ul"),
        $anchor = $container.find("a"),
        height = $list.height() * 1.1,
        multiplier = height / maxHeight;
        $container.data("origHeight", $container.height());
        $anchor.addClass("hover");
        $list
            .show()
            .css({
                paddingTop: $container.data("origHeight")
            });
        if (multiplier > 1) {
            $container
                .css({
                    height: maxHeight,
                    overflow: "hidden"
                })
                .mousemove(function(e) {
                    var offset = $container.offset();
                    var relativeY = ((e.pageY - offset.top) * multiplier) - ($container.data("origHeight") * multiplier);
                    if (relativeY > $container.data("origHeight")) {
                        $list.css("top", -relativeY + $container.data("origHeight"));
                    };
                });
        }

    }, function() {

        var $el = $(this);

        $el
            .height($(this).data("origHeight"))
            .find("ul")
            .css({ top: 0 })
            .hide()
            .end()
            .find("a")
            .removeClass("hover");

    });

});

  var dom = $('.page .box').offset();
  if(dom){
    var right = dom.left;
    $('.page .right').css('right',right+'px');
  }
  $(window).resize(function(){
    var dom = $('.page .box').offset();
    if(dom){
      var right = dom.left;
      $('.page .right').css('right',right+'px');
    }
  });
  resizeWindow();
  $(document).on('scroll',function(){
    resizeWindow();
  });
  function resizeWindow(){
      if($(document).scrollTop() > 220){
        $('.page .right').css('top','150px');
      }else{
        $('.page .right').css('top','431px');
      }
    }
</script>
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"slide":{"type":"slide","bdImg":"3","bdPos":"right","bdTop":"100"}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script><script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"slide":{"type":"slide","bdImg":"3","bdPos":"right","bdTop":"100"}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>        <script src="../../hdui/app/plugins/validate/jquery.validate.min.js"></script>
        <script src="../../hdui/app/plugins/validate/jquery.validate.add.js"></script>
        <script src="../../hdui/app/plugins/validate/jquery.validate.cn.min.js"></script>
                <script type="text/javascript" charset="utf-8" src="../../hdudt/ueditor.parse.min.js"> </script>
        <script type="text/javascript" src="../../hdimg/bas/js/jquery.SuperSlide.2.1.1.js"></script>
        <script>
        uParse('#dtl_detail', {
            rootPath: '../../hdudt/'
        })
        </script>
                <script>
        $(document).ready(function() {
             var  timestr = getDateDiff('2021-11-09 14:54:00');
            $('#addtime').html(timestr);
            // 将编辑器里的图片改为响应式
            $('#dtl_detail img').each(function() {
                $(this).addClass("img-responsive");
            });
            $.get("/hdapp/bas/d.php?ac=col_detail&id=161",function(col){
                var reobj = eval('('+col+')');
                $('#prevnext').html(reobj.prevnext);
                $('#visitcount').html(reobj.colvisit);
            });
            $.get('../../hdapp/bas/col_fdb.php?id=161&burl=aHR0cDovL3d3dy5ibDA5MzEuY29tL2hkYXBwL2Jhcy9jb2xfZGV0YWlsLnBocD9pZD0xNjE=',function(fdb){
                 $('#comments').html(fdb);
            });
            $('#col_sch_bt').click(function(){
                sch(1);
            });
            jQuery(".slideTxtBox").slide();
        })
            function sch_col(page=1){
                sch(page);
            }
            function sch(page){
                $(document).scrollTop(0);
                $('#col_list').html('<div class="text-center padding-30 margin-top-20"><img src="/hdui/app/images/loaders/10.gif" alt="loading" /><p class="margin-top-20">正在加载，请稍后...</p></div>')
                var q = $('#col_q').val();
                var sn = "hydt";
                $.get(encodeURI('/s/col/?q='+q+'&sn='+sn+'&page='+page),function(data){
                    var schtitle = '<div class="heading-title heading-line-single margin-bottom-0"><h3>在 行业动态 下 搜索 <span>'+q+'</span> 的结果</h3></div>'
                    $('#col_list').html(schtitle+data);
                });
            }
            function sch_hkw(k){
                $('#col_q').val(k);
                sch_col();
            }
            function getscol(ssn,sname){
            $('#col_ssn').attr('data-sign',ssn);
            $('#col_ssn').attr('data-name',sname);
            scol();
            }
            function scol(page){
                $(document).scrollTop(0);
                $('#col_list').html('<div class="text-center padding-30 margin-top-20"><img src="/hdui/app/images/loaders/10.gif" alt="loading" /><p class="margin-top-20">正在加载，请稍后...</p></div>');
                let ssn = $('#col_ssn').attr('data-sign');
                let sname = $('#col_ssn').attr('data-name');
                $.get(encodeURI('/hdapp/bas/col_sub.php?&ssn='+ssn+'&page='+page),function(data){
                    var schtitle = '<div class="heading-title heading-line-single margin-bottom-0"><h3>子类 <span>'+sname+'</span> 下的内容</h3></div>'
                    $('#col_list').html(schtitle+data);
                });
            }
            
            function getDateDiff(dateStr){
                dateTimeStamp = Date.parse(dateStr.replace(/-/gi,"/"));
                var minute = 1000 * 60;
                var hour = minute * 60;
                var day = hour * 24;
                var halfamonth = day * 15;
                var month = day * 30;
                var now = new Date().getTime();
                var diffValue = now - dateTimeStamp;
                if(diffValue < 0){return;}
                var monthC =diffValue/month;
                var weekC =diffValue/(7*day);
                var dayC =diffValue/day;
                var hourC =diffValue/hour;
                var minC =diffValue/minute;
                if(monthC>=1){
                 result="" + parseInt(monthC) + "月前";
                }
                else if(weekC>=1){
                 result="" + parseInt(weekC) + "周前";
                }
                else if(dayC>=1){
                 result=""+ parseInt(dayC) +"天前";
                }
                else if(hourC>=1){
                 result=""+ parseInt(hourC) +"小时前";
                }
                else if(minC>=1){
                 result=""+ parseInt(minC) +"分钟前";
                }else
                result="刚刚";
                return result;
            }
      </script>
      <script src="../../hdimg/bas/js/jwmeyy.js" type="text/javascript" charset="utf-8"></script>
      <script>
      var _createClass = function() {
          function defineProperties(target, props) {
              for (var i = 0; i < props.length; i++) {
                  var descriptor = props[i];
                  descriptor.enumerable = descriptor.enumerable || false;
                  descriptor.configurable = true;
                  if ("value" in descriptor) descriptor.writable = true;
                  Object.defineProperty(target, descriptor.key, descriptor);
              }
          }
          return function(Constructor, protoProps, staticProps) {
              if (protoProps) defineProperties(Constructor.prototype, protoProps);
              if (staticProps) defineProperties(Constructor, staticProps);
              return Constructor;
          };
      } ();

      function _classCallCheck(instance, Constructor) {
          if (! (instance instanceof Constructor)) {
              throw new TypeError("Cannot call a class as a function");
          }
      }

      function _possibleConstructorReturn(self, call) {
          if (!self) {
              throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
          }
          return call && (typeof call === "object" || typeof call === "function") ? call: self;
      }

      function _inherits(subClass, superClass) {
          if (typeof superClass !== "function" && superClass !== null) {
              throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
          }
          subClass.prototype = Object.create(superClass && superClass.prototype, {
              constructor: {
                  value: subClass,
                  enumerable: false,
                  writable: true,
                  configurable: true
              }
          });
          if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
      }

      var Point = function(_F3$Obj) {
          _inherits(Point, _F3$Obj);

          function Point() {
              var radius = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;

              _classCallCheck(this, Point);

              var _this = _possibleConstructorReturn(this, (Point.__proto__ || Object.getPrototypeOf(Point)).call(this));

              _this.radius = radius;
              _this.color = 'rgba(' + [Math.random() * 255 | 0, Math.random() * 255 | 0, Math.random() * 255 | 0, Math.random()].join(',') + ')';
              _this.prevCrood = null;
              return _this;
          }

          _createClass(Point, [{
              key: 'render',
              value: function render(ctx) {

                  ctx.fillStyle = '#fff';
                  ctx.fillRect(this.croods2D.position.x, this.croods2D.position.y, this.radius * this.croods2D.scale * this.yScale, this.radius * this.croods2D.scale * this.yScale);
              }
          }]);

          return Point;
      } (F3.Obj);

      var planeFunctions = {
          'sin(sqrt(x^2+z^2))': function sinSqrtX2Z2(x, z, offset) {
              return Math.sin(Math.sqrt(Math.pow(x / 2, 2) + Math.pow(z / 2, 2)) - offset);
          },
          'cos(x)*sin(z)': function cosXSinZ(x, z, offset) {
              return Math.cos(x / 4 + offset) * Math.sin(z / 4 + offset) * 1;
          }
      };

      var Effect = function(_F3$Time) {
          _inherits(Effect, _F3$Time);

          function Effect(renderer, scene, camera, cvs) {
              _classCallCheck(this, Effect);

              var _this2 = _possibleConstructorReturn(this, (Effect.__proto__ || Object.getPrototypeOf(Effect)).call(this));

              _this2.renderer = renderer;
              _this2.scene = scene;
              _this2.camera = camera;
              _this2.cvs = cvs;

              _this2.xOffset = 0;
              _this2.waveHeight = 0.4; // 波高
              _this2.waveWidth = 8; // 波长
              _this2.col = 33;
              _this2.colPointNum = 33;

              _this2.flyTime = 2000;
              _this2.timePass = 0;

              _this2.scale = 1;
              _this2.scaleStep = 0.01;

              _this2.planeFunction = function() {
                  return 0;
              };
              _this2.rotate = {
                  x: false,
                  y: false,
                  z: false
              };

              _this2.pointGroup = new F3.Obj();
              _this2.scene.add(_this2.pointGroup);

              _this2.resize(cvs.width, cvs.height);
              _this2.init();
              return _this2;
          }

          _createClass(Effect, [{
              key: 'resize',
              value: function resize(width, height) {
                  this.cvs.width = width;
                  this.cvs.height = height;
                  // this.pointGroup.position.set(this.cvs.width/2, this.cvs.height, 0);
                  this.stepWidth = width * 1.8 / this.col;
                  this.pointGroup.setPosition(this.cvs.width / 2, this.cvs.height * 1.2, -this.col * this.stepWidth / 2);
                  this.pointGroup.setRotation(0.1, 0, 0);
                  // this.waveHeight = height/2;
                  // this.waveWidth = this.waveHeight * 4;
                  // console.log(this.stepWidth);
              }
          },
          {
              key: 'init',
              value: function init() {
                  // create point
                  var point;
                  for (var x = -(this.col - 1) / 2, count = 0; x <= (this.col - 1) / 2; x++) {
                      for (var z = -(this.colPointNum - 1) / 2; z <= (this.colPointNum - 1) / 2; z++) {
                          point = new Point(10);
                          this.pointGroup.add(point);
                          /*point.initPos = new F3.Vector3(
                               x + Math.random() * -2 + 1,
                               -30 + -10 * Math.random(),
                               z + Math.random() * -2 + 1
                          );*/
                          point.initPos = new F3.Vector3(0, 0, 0);
                          point.flyDelay = 0; //Math.random() * 1000 | 0;
                      }
                  }
              }
          },
          {
              key: 'update',
              value: function update(delta) {
                  this.timePass += delta;
                  this.xOffset = this.timePass / 500;

                  var point = void 0;
                  var flyPecent = void 0;
                  var x = void 0,
                  y = void 0,
                  z = void 0;
                  var count = 0;

                  // if (this.timePass < 100)
                  for (x = -(this.col - 1) / 2; x <= (this.col - 1) / 2; x++) {
                      for (z = -(this.colPointNum - 1) / 2; z <= (this.colPointNum - 1) / 2; z++) {

                          // let y = Math.cos(x*Math.PI/this.waveWidth + this.xOffset)*Math.sin(z*Math.PI/this.waveWidth + this.xOffset) * this.waveHeight;
                          y = this.planeFunction(x, z, this.xOffset);
                          // let y = Math.sin(Math.sqrt(Math.pow(x/v, 2)+Math.pow(z/v, 2)) - this.xOffset) * 1
                          // console.log(y);
                          point = this.pointGroup.children[count];
                          point.yScale = 1; //(-y + 0.6)/(this.waveHeight) * 1.5;
                          flyPecent = (this.timePass - point.flyDelay) / this.flyTime;
                          flyPecent = flyPecent > 1 ? 1 : flyPecent < 0 ? 0 : flyPecent;

                          point.setPosition(x * this.stepWidth, y * this.stepWidth, z * this.stepWidth);
                          count++;
                      }
                  }
                  if (this.rotate.x || this.rotate.y || this.rotate.z) {
                      this.pointGroup.setRotation(this.rotate.x ? this.pointGroup.rotation.x + 0.001 : 0, this.rotate.y ? this.pointGroup.rotation.y + 0.001 : 0, this.rotate.z ? this.pointGroup.rotation.z + 0.001 : 0);
                  }
              }
          },
          {
              key: 'setFunction',
              value: function setFunction(fun) {
                  this.planeFunction = fun;
              }
          },
          {
              key: 'toggleRotate',
              value: function toggleRotate(r) {
                  this.rotate[r] = !this.rotate[r];
                  if (!this.rotate[r]) {
                      this.pointGroup.rotation[r] = 0;
                  }
              }
          },
          {
              key: 'animate',
              value: function animate() {
                  var _this3 = this;

                  this.addTick(function(delta) {
                      _this3.update(delta);
                      _this3.renderer.render(_this3.scene, _this3.camera);
                  });
              }
          }]);

          return Effect;
      } (F3.Time);

      function init(cvs) {
          var ctx = cvs.getContext('2d');

          var scene = new F3.Scene();
          var camera = new F3.Camera();
          camera.origin = new F3.Vector3(cvs.width / 2, cvs.height / 3);
          camera.p = 1200;

          var renderer = new F3.Renderer(ctx, cvs);
          var effect = new Effect(renderer, scene, camera, cvs);
          effect.animate();

          var functions = document.querySelector('.functions');
          var btnHTML = '';
          for (var name in planeFunctions) {
              btnHTML += '<div class="btn" data-function="' + name + '">' + name + '</div>';
          }
          functions.innerHTML = btnHTML;

          var btns = functions.querySelectorAll('.btn');
          function selectFunction(funName) {
              btns.forEach(function(btn) {
                  var dataFunction = btn.dataset.
                  function;
                  if (dataFunction === funName) {
                      btn.classList.add('active');
                      effect.setFunction(planeFunctions[funName]);
                  } else {
                      btn.classList.remove('active');
                  }
              });
          }
          selectFunction(btns[0].dataset.
          function);
          functions.addEventListener('click',
          function(e) {
              if (e.target.dataset.
              function) {
                  selectFunction(e.target.dataset.
                  function);
              }
          });

          var rotate = document.querySelector('.rotate');
          var rotateBtns = rotate.querySelectorAll('.btn');
          function toggleRotate(_r) {
              rotateBtns.forEach(function(rotateBtn) {
                  var r = rotateBtn.dataset.rotate;
                  if (r === _r) {
                      rotateBtn.classList.toggle('active');
                      effect.toggleRotate(r);
                  }
              });
          }
          toggleRotate('y');
          rotate.addEventListener('click',
          function(e) {
              if (e.target.dataset.rotate) {
                  toggleRotate(e.target.dataset.rotate);
              }
          });

          F3.TIME.start();
      }
      init(document.querySelector('canvas'));
      </script>
    </body>
</html>