Bladeren bron

落地页

zhangweicheng 5 jaren geleden
bovenliggende
commit
28fe562dbb

+ 288 - 0
lib/jquery/jquery.sticky.js

@@ -0,0 +1,288 @@
+// Sticky Plugin v1.0.4 for jQuery
+// =============
+// Author: Anthony Garand
+// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
+// Improvements by Leonardo C. Daronco (daronco)
+// Created: 02/14/2011
+// Date: 07/20/2015
+// Website: http://stickyjs.com/
+// Description: Makes an element on the page stick on the screen as you scroll
+//              It will only set the 'top' and 'position' of your element, you
+//              might need to adjust the width in some cases.
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['jquery'], factory);
+    } else if (typeof module === 'object' && module.exports) {
+        // Node/CommonJS
+        module.exports = factory(require('jquery'));
+    } else {
+        // Browser globals
+        factory(jQuery);
+    }
+}(function ($) {
+    var slice = Array.prototype.slice; // save ref to original slice()
+    var splice = Array.prototype.splice; // save ref to original slice()
+
+  var defaults = {
+      topSpacing: 0,
+      bottomSpacing: 0,
+      className: 'is-sticky',
+      wrapperClassName: 'sticky-wrapper',
+      center: false,
+      getWidthFrom: '',
+      widthFromWrapper: true, // works only when .getWidthFrom is empty
+      responsiveWidth: false,
+      zIndex: 'inherit'
+    },
+    $window = $(window),
+    $document = $(document),
+    sticked = [],
+    windowHeight = $window.height(),
+    scroller = function() {
+      var scrollTop = $window.scrollTop(),
+        documentHeight = $document.height(),
+        dwh = documentHeight - windowHeight,
+        extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
+
+      for (var i = 0, l = sticked.length; i < l; i++) {
+        var s = sticked[i],
+          elementTop = s.stickyWrapper.offset().top,
+          etse = elementTop - s.topSpacing - extra;
+
+        //update height in case of dynamic content
+        s.stickyWrapper.css('height', s.stickyElement.outerHeight());
+
+        if (scrollTop <= etse) {
+          if (s.currentTop !== null) {
+            s.stickyElement
+              .css({
+                'width': '',
+                'position': '',
+                'top': '',
+                'z-index': ''
+              });
+            s.stickyElement.parent().removeClass(s.className);
+            s.stickyElement.trigger('sticky-end', [s]);
+            s.currentTop = null;
+          }
+        }
+        else {
+          var newTop = documentHeight - s.stickyElement.outerHeight()
+            - s.topSpacing - s.bottomSpacing - scrollTop - extra;
+          if (newTop < 0) {
+            newTop = newTop + s.topSpacing;
+          } else {
+            newTop = s.topSpacing;
+          }
+          if (s.currentTop !== newTop) {
+            var newWidth;
+            if (s.getWidthFrom) {
+                padding =  s.stickyElement.innerWidth() - s.stickyElement.width();
+                newWidth = $(s.getWidthFrom).width() - padding || null;
+            } else if (s.widthFromWrapper) {
+                newWidth = s.stickyWrapper.width();
+            }
+            if (newWidth == null) {
+                newWidth = s.stickyElement.width();
+            }
+            s.stickyElement
+              .css('width', newWidth)
+              .css('position', 'fixed')
+              .css('top', newTop)
+              .css('z-index', s.zIndex);
+
+            s.stickyElement.parent().addClass(s.className);
+
+            if (s.currentTop === null) {
+              s.stickyElement.trigger('sticky-start', [s]);
+            } else {
+              // sticky is started but it have to be repositioned
+              s.stickyElement.trigger('sticky-update', [s]);
+            }
+
+            if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
+              // just reached bottom || just started to stick but bottom is already reached
+              s.stickyElement.trigger('sticky-bottom-reached', [s]);
+            } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
+              // sticky is started && sticked at topSpacing && overflowing from top just finished
+              s.stickyElement.trigger('sticky-bottom-unreached', [s]);
+            }
+
+            s.currentTop = newTop;
+          }
+
+          // Check if sticky has reached end of container and stop sticking
+          var stickyWrapperContainer = s.stickyWrapper.parent();
+          var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);
+
+          if( unstick ) {
+            s.stickyElement
+              .css('position', 'absolute')
+              .css('top', '')
+              .css('bottom', 0)
+              .css('z-index', '');
+          } else {
+            s.stickyElement
+              .css('position', 'fixed')
+              .css('top', newTop)
+              .css('bottom', '')
+              .css('z-index', s.zIndex);
+          }
+        }
+      }
+    },
+    resizer = function() {
+      windowHeight = $window.height();
+
+      for (var i = 0, l = sticked.length; i < l; i++) {
+        var s = sticked[i];
+        var newWidth = null;
+        if (s.getWidthFrom) {
+            if (s.responsiveWidth) {
+                newWidth = $(s.getWidthFrom).width();
+            }
+        } else if(s.widthFromWrapper) {
+            newWidth = s.stickyWrapper.width();
+        }
+        if (newWidth != null) {
+            s.stickyElement.css('width', newWidth);
+        }
+      }
+    },
+    methods = {
+      init: function(options) {
+        return this.each(function() {
+          var o = $.extend({}, defaults, options);
+          var stickyElement = $(this);
+
+          var stickyId = stickyElement.attr('id');
+          var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
+          var wrapper = $('<div></div>')
+            .attr('id', wrapperId)
+            .addClass(o.wrapperClassName);
+
+          stickyElement.wrapAll(function() {
+            if ($(this).parent("#" + wrapperId).length == 0) {
+                    return wrapper;
+            }
+});
+
+          var stickyWrapper = stickyElement.parent();
+
+          if (o.center) {
+            stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
+          }
+
+          if (stickyElement.css("float") === "right") {
+            stickyElement.css({"float":"none"}).parent().css({"float":"right"});
+          }
+
+          o.stickyElement = stickyElement;
+          o.stickyWrapper = stickyWrapper;
+          o.currentTop    = null;
+
+          sticked.push(o);
+
+          methods.setWrapperHeight(this);
+          methods.setupChangeListeners(this);
+        });
+      },
+
+      setWrapperHeight: function(stickyElement) {
+        var element = $(stickyElement);
+        var stickyWrapper = element.parent();
+        if (stickyWrapper) {
+          stickyWrapper.css('height', element.outerHeight());
+        }
+      },
+
+      setupChangeListeners: function(stickyElement) {
+        if (window.MutationObserver) {
+          var mutationObserver = new window.MutationObserver(function(mutations) {
+            if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
+              methods.setWrapperHeight(stickyElement);
+            }
+          });
+          mutationObserver.observe(stickyElement, {subtree: true, childList: true});
+        } else {
+          if (window.addEventListener) {
+            stickyElement.addEventListener('DOMNodeInserted', function() {
+              methods.setWrapperHeight(stickyElement);
+            }, false);
+            stickyElement.addEventListener('DOMNodeRemoved', function() {
+              methods.setWrapperHeight(stickyElement);
+            }, false);
+          } else if (window.attachEvent) {
+            stickyElement.attachEvent('onDOMNodeInserted', function() {
+              methods.setWrapperHeight(stickyElement);
+            });
+            stickyElement.attachEvent('onDOMNodeRemoved', function() {
+              methods.setWrapperHeight(stickyElement);
+            });
+          }
+        }
+      },
+      update: scroller,
+      unstick: function(options) {
+        return this.each(function() {
+          var that = this;
+          var unstickyElement = $(that);
+
+          var removeIdx = -1;
+          var i = sticked.length;
+          while (i-- > 0) {
+            if (sticked[i].stickyElement.get(0) === that) {
+                splice.call(sticked,i,1);
+                removeIdx = i;
+            }
+          }
+          if(removeIdx !== -1) {
+            unstickyElement.unwrap();
+            unstickyElement
+              .css({
+                'width': '',
+                'position': '',
+                'top': '',
+                'float': '',
+                'z-index': ''
+              })
+            ;
+          }
+        });
+      }
+    };
+
+  // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
+  if (window.addEventListener) {
+    window.addEventListener('scroll', scroller, false);
+    window.addEventListener('resize', resizer, false);
+  } else if (window.attachEvent) {
+    window.attachEvent('onscroll', scroller);
+    window.attachEvent('onresize', resizer);
+  }
+
+  $.fn.sticky = function(method) {
+    if (methods[method]) {
+      return methods[method].apply(this, slice.call(arguments, 1));
+    } else if (typeof method === 'object' || !method ) {
+      return methods.init.apply( this, arguments );
+    } else {
+      $.error('Method ' + method + ' does not exist on jQuery.sticky');
+    }
+  };
+
+  $.fn.unstick = function(method) {
+    if (methods[method]) {
+      return methods[method].apply(this, slice.call(arguments, 1));
+    } else if (typeof method === 'object' || !method ) {
+      return methods.unstick.apply( this, arguments );
+    } else {
+      $.error('Method ' + method + ' does not exist on jQuery.sticky');
+    }
+  };
+  $(function() {
+    setTimeout(scroller, 0);
+  });
+}));

+ 5 - 0
modules/users/controllers/login_controller.js

@@ -21,6 +21,11 @@ let systemSettingModel = mongoose.model("system_setting");
 
 class LoginController {
 
+
+    async firstPage(request,response){
+        response.render('users/html/index', {});
+    }
+
     /**
      * 登录页面
      *

+ 1 - 1
modules/users/routes/login_route.js

@@ -14,7 +14,7 @@ module.exports = function (app) {
     let loginController = new LoginController();
     // 登录页面action
     router.get('/login', loginController.index);
-    router.get('/', loginController.index);
+    router.get('/', loginController.firstPage);
 
 // 登录操作
     router.post('/login', loginController.login);

+ 1 - 1
server.js

@@ -59,7 +59,7 @@ app.use(session({
 app.use(async function (req, res, next) {
     let url = req.originalUrl;
     // if (/^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)  || /^\/accountIsPro/.test(url)) {
-    if (/^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)) {
+    if (url=="\/"|| /^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)) {
         // 如果是登录页面或短信接口或cld接口则忽略判断数据
         next();
     } else {

+ 581 - 0
web/building_saas/css/style.css

@@ -0,0 +1,581 @@
+/***** Google fonts import ************/
+@import url("https://fonts.googleapis.com/css?family=Gothic+A1:300,400,500,600,700,900");
+/*------------------------------------------------------------------
+[Layout]
+* body
++ Global styles
++ Header / .header
++ hero / benner
++ Start Call Action
++ What people say
++ price
++ Our Team
++ newsletter
++ Form
++ Footer / #footer
++ Responsive
+/*
+============================================
+Global styles
+============================================
+*/
+/*
+01 -  Global styles
+*/
+html,
+body {
+height: 100%;
+}
+body {
+font-family: Helvetica Neue,Hiragino Sans GB,stheiti,Microsoft Yahei,微软雅黑,tahoma,sans-serif;
+background: #fff;
+font-weight: 400;
+font-size: 15px;
+line-height: 1.8;
+-webkit-text-size-adjust: 100%;
+-moz-osx-font-smoothing: grayscale;
+-webkit-font-smoothing: antialiased;
+color: #333;
+}
+a,
+button {
+-moz-transition: all 0.3s;
+-o-transition: all 0.3s;
+-webkit-transition: all 0.3s;
+transition: all 0.3s;
+text-decoration: none;
+}
+a,
+a:hover,
+a:focus,
+button:hover,
+button:focus {
+outline: 0 !important;
+text-decoration: none;
+}
+.font-weight-900{
+font-weight: 900;
+}
+.f-50{
+font-size: 50px;
+}
+.btn {
+border-radius: 0px;
+text-transform: uppercase;
+padding: 12px 30px;
+font-size: 12px;
+}
+.section {
+padding: 100px 0px;
+position: relative;
+}
+.pb-70 {
+padding-bottom: 70px;
+}
+.pb-50 {
+padding-bottom: 50px;
+}
+.mb-100{
+margin-bottom: 100px;
+}
+.mb-50{
+margin-bottom: 50px;
+}
+.mb-30{
+margin-bottom: 30px;
+}
+.mt-30{
+margin-top: 30px;
+}
+.space-40 {
+height: 40px;
+width: 100%
+}
+.space-50 {
+height: 50px;
+width: 100%
+}
+.text-primary {
+color: #627aec !important;
+}
+.btn-primary {
+color: #fff;
+background-color: #627aec;
+border-color: #627aec;
+}
+.btn-dark:hover {
+color: #fff;
+background-color: #627aec;
+border-color: #627aec;
+}
+.btn.btn-round{ border-radius: 50px; }
+.bg-dark {
+background-color: #22232f !important;
+}
+.btn-outline-primary {
+color: #627aec;
+border-color: #627aec;
+}
+.bg-section {
+background-color: #f5f5f5;
+}
+.srction_title p {
+color: #000000;
+font-size: 18px;
+}
+/*02 Header*/
+div#header-sticky-wrapper {
+position: absolute;
+width: 100%;
+left: 0px;
+top: 0px;
+z-index: 999;
+}
+.navbar{
+padding: 0px 15px;
+}
+.is-sticky header {
+background-color: #22232f;
+}
+.bg-light.navbar-transparent {
+background-color: transparent !important;
+}
+.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {
+color: #627aec;
+}
+.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover {
+color: rgb(98, 122, 236);
+}
+.navbar-light .navbar-nav .nav-link {
+color: #fff;
+padding: 0 20px;
+text-transform: uppercase;
+}
+header .navbar-nav  > li > a:not(.btn){ position: relative; line-height: 75px; }
+header .navbar-nav  > li >  a:not(.btn):before {
+content: "";
+position: absolute;
+right: 0;
+bottom: 0;
+width: 0px;
+height: 2px;
+background-color: #627aec;
+transition: 0.3s;
+}
+header .navbar-nav  > li >  a:not(.btn):hover:before,header .navbar-nav  > li > a.active:not(.btn-round ):before {
+width: 100%;
+left: 0;
+right: auto;
+}
+.navbar-light .navbar-toggler {
+color: rgba(0,0,0,.5);
+border-color: rgba(0,0,0,.1);
+background-color: #fff;
+}
+
+
+/*hero*/
+
+
+.hero.section {
+padding-top: 200px;
+max-height: 800px; min-height: 800px;
+margin-bottom: 100px;
+}
+.home-desk {
+margin-bottom: -200px;
+}
+/*Box card*/
+.bos.bg-bos { padding: 30px 30px; }
+.bos h2{
+font-weight: 450;
+color: #000000; margin-bottom: 20px;
+}
+.bos.bg-bos img {
+height:207px;
+margin: 0 auto;
+display: block;
+text-align: center;
+margin-bottom:20px;
+}
+.bos .media h3 {
+margin-bottom: 10px;
+}
+/*Box card*/
+.bg-box {
+background-color: #f5f5f5;
+}
+.box.bg-box { padding: 30px 30px; }
+.box h3{
+font-size: 24px;
+font-weight: bold;
+color: #000000; margin-bottom: 20px;
+}
+.box.bg-box .icon {
+font-size: 36px;
+width: 80px;
+height: 80px;
+margin: 0 auto;
+border: 1px solid;
+display: block;
+line-height: 80px;
+margin-bottom: 20px;
+border-radius: 100%;
+text-align: center;
+}
+.box .media h3 {
+margin-bottom: 10px;
+}
+.box.bg-box:hover{
+background-color: #627aec;
+}
+.box.bg-box:hover .icon{
+background-color: #fff;
+color: #fff;
+}
+.box.bg-box:hover h3,.box.bg-box:hover p{
+color: #fff;
+}
+/*-- ==== Start Call Action  ==== */
+.call_action .icon {
+width: 120px;
+height: 120px;
+background-color: #fff;
+border-radius: 100%;
+line-height: 125px;
+font-size: 40px;
+text-align: center;
+color: #627aec;
+margin: 0 auto 40px;
+}
+/*What people say*/
+span.blockquote_icon {
+position: absolute;
+right: 0;
+font-size: 150px;
+display: block;
+bottom: 84px;
+line-height: 0;
+color: #f0f0f0;
+transform: rotate(-180deg);
+pointer-events: none;
+}
+.what_say_sldier .media {
+position: relative;
+}
+.owl-dots .owl-dot {
+width: 10px;
+height: 10px;
+background: #ddd;
+border-radius: 100%;
+margin: 0 5px;
+}
+.owl-dots {
+display: flex;
+justify-content: center; margin-top: 30px;
+}
+.owl-dots .owl-dot.active {
+background-color: #000;
+}
+/*price*/
+section.section.pricing {
+position: relative;
+}
+section.section.pricing .bg_box {
+position: absolute;
+width: 100%;
+height: 450px;
+top: 0;
+background-repeat: no-repeat;
+background-size: cover;
+}
+section.section.pricing .container {
+position: relative;
+z-index: 10;
+}
+.card.price_box {
+box-shadow: 2.5px 4.33px 20px rgba(0,0,0,0.2);
+background-color: transparent;
+text-align: center;
+padding: 30px;
+}
+.card.price_box h2 {
+font-size: 15px;
+line-height: 40px;
+font-weight: 700;
+}
+.card.price_box h3 {
+font-size: 48px;
+line-height: 40px;
+font-weight: 900;
+text-align: center;
+}
+.card.price_box h3 sub{
+font-size: 24px; bottom: 0px; margin: 0 5px;
+}
+.card.price_box ul li{
+font-size: 16px;
+line-height: 45px;
+color: #939499;
+font-weight: 400;
+text-align: center;
+}
+.card.price_box.active {
+border: 2px solid rgba(255,255,255,0.04);
+}
+.pricing_slider .item {
+padding: 20px;
+}
+/*Our Team */
+.team_img {
+width: 255px;
+height: 256px;
+border-radius: 128px;
+background-color: #ffffff;
+border: 6px solid #a9aaae;
+text-align: center;
+padding: 30px; margin: 0 auto;
+}
+.team_img img{
+border-radius: 100%;
+}
+.social li a {
+background-color: transparent;
+border-radius: 100%;
+color: #828282; border:1px solid #828282;
+float: left;
+font-size: 14px;
+height: 36px;
+line-height: 36px;
+margin: 0;
+padding: 0;
+text-align: center;
+width: 36px;
+position: relative;
+}
+.social li a:hover {
+background-color: #627aec;
+color: #fff; border:1px solid #627aec;
+}
+.team-box:hover .team_img{  border: 6px solid #627aec;  }
+/*newsletter*/
+.newsletter_input input.form-control {
+height: 60px;
+border-radius: 60px;
+}
+.newsletter_input {
+position: relative;
+}
+.newsletter_input .btn {
+position: absolute;
+right: 12px;
+top: 7px;
+min-width: 140px;
+}
+.newsletter_input .btn i{
+margin-left: 5px;
+}
+/*Form*/
+.form-control {
+border: 1px solid #ebebeb;
+width: 100%;
+max-width: 100%;
+color: #989ca2;
+background: 0 0;
+min-height: 60px;
+padding: 10px 15px;
+box-shadow: none;
+outline: none;
+}
+.form-control:focus{
+box-shadow: none;
+outline: none;
+}
+/*Footer*/
+.footer_menu a {
+font-weight: 300;
+padding: 0 15px;
+border-right: 1px solid #757575; color: #000; text-transform: uppercase; }
+.footer_menu a:hover{
+color: #627aec;
+}
+.footer_menu ul li {
+display: inline-block; }
+.footer_menu ul li:last-child a {
+border-right: none; }
+.footer_copywrite_area {
+display: block;
+padding: 30px 0 100px 0; }
+.footer_social_area {
+margin-bottom: 30px; }
+.footer_social_area a {
+border-radius: 50%;
+height: 40px;
+text-align: center;
+width: 40px; color: #000;
+display: inline-block;
+background-color: #ffffff;
+line-height: 40px;
+box-shadow: none;
+margin: 0 5px; }
+.footer_social_area a i {
+line-height: 36px; }
+.footer_social_area a:hover, .footer_social_area a:focus {
+color: #ffffff;    background-color: #627aec;
+border-color: #627aec; }
+.footer_bottom_area {
+display: block;
+position: relative;
+text-align: center; }
+.footer_bottom_area .item {
+margin-bottom: 50px; }
+.footer_bottom p {
+margin: 0;
+font-size: 14px; }
+.contact_location h3 {
+font-size: 26px;
+font-weight: 900;
+padding-bottom: 10px;
+}
+.contact_location p {
+line-height: 40px;
+font-size: 20px;
+color: #677294;
+}
+.contact_location ul{
+margin-bottom: 0px;
+}
+.contact_location .location_info li {
+font-size: 20px;
+color: #677294;
+margin-bottom: 15px;
+}
+.contact_location .location_info li:last-child{
+margin-bottom: 0px;
+}
+.contact_location .location_info li a{
+font-size: 20px;
+color: #677294;
+
+}
+.contact_location a:hover,.contact_location .location_info li a:hover{
+color: #627aec;
+}
+.contact_location .location_info li i {
+margin-right: 15px; color: #627aec;
+}
+p.help-block ul {
+font-size: 13px;
+margin: 0px;
+padding: 0px;
+list-style: none;
+}
+p.help-block {
+margin: 0px;
+position: absolute;
+left: 0;
+}
+.form-group {
+position: relative;
+margin-bottom: 23px;
+}
+/*Responsive */
+@media(max-width: 991px){
+header#header{
+padding: 15px 0px;
+}
+.f-50 {
+font-size: 36px;
+}
+.lead {
+font-size: 1rem;}
+.home-desk,.hero.section {
+margin-bottom: 0;
+}
+.box.bg-box .icon {
+font-size: 20px;
+width: 50px;
+height: 50px;
+line-height: 50px;
+
+}
+.h1, h1 {
+font-size: 1.7rem;
+}
+.box.bg-box {
+padding: 30px 15px;
+}
+.box h3 {
+font-size: 20px;}
+.call_action .icon {
+width: 70px;
+height: 70px;
+
+border-radius: 100%;
+line-height: 70px;
+
+}
+.srction_title p {
+color: #000000;
+font-size: 14px;
+}
+.card.price_box h3 {
+font-size: 32px;}
+section.section.pricing .bg_box {
+position: absolute;
+width: 100%;
+height: 490px;}
+.team_img {
+width: 206px;
+height: 206px;
+border-radius: 128px;
+border-width: 4px;
+padding: 10px;
+margin: 0 auto;
+}
+header .navbar-nav > li > a:not(.btn) {
+    position: relative;
+    line-height: 45px;
+}
+.btn {
+  
+    padding: 12px 20px;
+    
+}
+}
+@media(max-width: 640px){
+.f-50 {
+font-size:30px;
+}
+}
+
+
+
+/*loader*/
+
+.loader_pre{
+    position: fixed;width: 100%;left: 0px; height: 100%; top: 0; background-color: #000; z-index: 100000;
+}
+#loader {
+  position: absolute;
+  left: 50%;
+  margin-left: -50px;
+  top: 50%;
+  margin-top: -50px;
+  border: 20px #ddd double;
+  border-top: 20px double #627aec;
+  border-radius: 100%;
+  box-shadow: 0px 0px 5px inset #ccc;
+  width: 100px;
+  height: 100px;
+  animation: spin 2s linear infinite;
+}
+
+@keyframes spin {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(360deg);
+  }
+}

+ 368 - 0
web/users/html/index.html

@@ -0,0 +1,368 @@
+<!doctype html>
+<html lang="en">
+   <head>
+      <!-- Required meta tags -->
+      <meta charset="utf-8">
+      <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+      <!-- Bootstrap CSS -->
+      <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
+      <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
+      <link href="assets/lity/lity.css" rel="stylesheet">
+      <link rel="stylesheet" href="/web/building_saas/css/style.css">
+      <title>大司空云计价 - 远程办公,用免费正版市政计价软件</title>
+      <link rel="shortcut icon" href="/web/building_saas/css/favicon.ico" />
+   </head>
+   <body>
+
+      <header id="header">
+         <nav class="navbar navbar-expand-lg navbar-light bg-light  navbar-transparent">
+            <div class="container">
+               <a class="navbar-brand" href="#home"><img src="/web/users/images/logo.png" alt="" class="img-fluid"></a>
+               <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarLexar" aria-controls="navbarLexar" aria-expanded="false" aria-label="Toggle navigation">
+               <span class="navbar-toggler-icon"></span>
+               </button>
+               <div class="collapse navbar-collapse" id="navbarLexar">      
+               <ul class="navbar-nav ml-auto">
+                     <li class="nav-item active">
+                        <a class="btn btn-primary my-3" href="/login">登录软件</a>
+                     </li>
+                  </ul>
+               </div>
+            </div>
+         </nav>
+      </header>
+      <!--banner-->
+      <div class="hero bg-dark section " style="background-image: url(/web/users/images/bg_01.png);" id="home">
+         <div class="container text-center">
+            <h1 class="text-white mb-4 f-50 ">远程办公,用免费正版市政计价软件</h1>
+            <p class="lead text-white mb-5">跨平台,打开浏览器即可使用,全新在线计价体验。
+            <!-- <div class="btn_hero mb-5">
+               <a href="#" class="btn btn-primary btn-round mr-2">GET THIS APP</a>
+               <a href="#" class="btn btn-outline-primary btn-round ml-2">TRY IT FOR FREE</a>
+            </div> -->
+            <div class="home-desk mt-5">
+               <div class="container pt-5">
+                  <img src="/web/users/images/home-desk.png" alt="" class="img-fluid mx-auto  d-block">
+               </div>
+            </div>
+         </div>
+      </div>
+      <!--简介-->
+      <section class="section">
+         <div class="container">
+            <div class="row">
+               <div class="col-md-10 offset-md-1">
+                  <div class="srction_title text-center">
+                     <img src="/web/users/images/line.png" alt="" class="img-fluid mx-auto my-3 d-block">
+                  </div>
+               </div>
+            </div>
+            <div class="row">
+               <div class="col-12 col-md-6 col-lg-4 mt-30">
+                  <!-- Box -->
+                  <div class="bos bg-bos text-center">
+                     <!-- Icon -->
+                     <div class="text-primary">
+                        <img src="/web/users/images/undraw_gift.svg">
+                     </div>
+                     <!-- Heading -->
+                     <h2>
+                     正版永久免费
+                     </h2>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-6 col-lg-4 mt-30">
+                  <!-- Box -->
+                  <div class="bos bg-bos text-center">
+                     <!-- Icon -->
+                     <div class="text-primary">
+                        <img src="/web/users/images/undraw_browse.svg">
+                     </div>
+                     <!-- Heading -->
+                     <h2>
+                     真云版免安装
+                     </h2>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-6 col-lg-4 mt-30">
+                  <!-- Box -->
+                  <div class="bos bg-bos text-center">
+                     <!-- Icon -->
+                     <div class="text-primary">
+                        <img src="/web/users/images/undraw_work.svg">
+                     </div>
+                     <!-- Heading -->
+                     <h2>
+                     高效协同工作
+                     </h2>
+                  </div>
+                  <!--End Box -->
+               </div>
+            </div>
+         </div>
+      </section>
+      <!--大司空-->
+      <section class="section bg-section py-5">
+         <div class="container">
+            <p class="text-center mb-0 lead">大司空,是中国古代官名,掌土木、营建之事,古人云</p>
+            <h2 class="h1 font-weight-900 mb-0 text-center">伯禹为<span class="text-primary">司空</span>,可成美尧之功</h2>
+         </div>
+      </section>
+      <!-- 详细简介 -->
+      <section class="section ">
+         <div class="container">
+            <div class="row align-items-center mb-100">
+               <div class="col-lg-8 mt-30">
+                  <img src="/web/users/images/softview/1.png" alt="" class="img-fluid d-block mx-auto" style="border:1px solid #ccc">
+               </div>
+               <div class="col-lg-4 mt-30">
+                  <!-- Box -->
+                  <div class="bos text-left mb-30">
+                     <div class="media align-items-lg-center">
+                        <div class="media-body pl-4">
+                           <!-- Heading -->
+                           <h3 class="mb-5">
+                           真云版、免安装
+                           </h3>
+                           <!-- Text -->
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>数据实时云端存储
+                           </p>
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>随时随地自由编辑
+                           </p>
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>支持苹果macOS系统
+                           </p>
+                        </div>
+                     </div>
+                  </div>
+                  <!--End Box -->
+               </div>
+            </div>
+            <div class="row align-items-center mb-100">
+               <div class="col-lg-4 mt-30">
+                  <!-- Box -->
+                  <div class="bos text-left mb-30">
+                     <div class="media align-items-lg-center">
+                        <div class="media-body pl-4">
+                           <!-- Heading -->
+                           <h3 class="mb-5">
+                           正版软件,永久免费
+                           </h3>
+                           <!-- Text -->
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>官方正版
+                           </p>
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>功能齐全
+                           </p>
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>各省定额完全免费
+                           </p>
+                        </div>
+                     </div>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-lg-8 mt-30">
+                  <img src="/web/users/images/softview/2.png" alt="" class="img-fluid d-block mx-auto" style="border:1px solid #ccc">
+               </div>
+            </div>
+            <div class="row align-items-center">
+               <div class="col-lg-8 mt-30">
+                  <img src="/web/users/images/softview/3.png" alt="" class="img-fluid d-block mx-auto" style="border:1px solid #ccc">
+               </div>
+               <div class="col-lg-4 mt-30">
+                  <!-- Box -->
+                  <div class="bos text-left mb-30">
+                     <div class="media align-items-lg-center">
+                        <div class="media-body pl-4">
+                           <!-- Heading -->
+                           <h3 class="mb-5">
+                           高效协同工作
+                           </h3>
+                           <!-- Text -->
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>云端实时安全分享
+                           </p>
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>同步协作快速编辑
+                           </p>
+                           <p class="mb-5 lead">
+                              <i class="fas fa-circle mr-2 text-primary"></i>私有交互随心设置
+                           </p>
+                        </div>
+                     </div>
+                  </div>
+                  <!--End Box -->
+               </div>
+            </div>
+         </div>
+      </section>
+      <!--产品-->
+      <section class="section">
+         <div class="container">
+            <div class="row mb-30">
+               <div class="col-md-10 offset-md-1">
+                  <div class="srction_title text-center">
+                     <h2 class="h1 font-weight-900 mb-0">产品分类</h2>
+                     <img src="/web/users/images/line.png" alt="" class="img-fluid mx-auto my-3 d-block">
+                  </div>
+               </div>
+            </div>
+            <div class="row">
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fas fa-building"></i>
+                     </div>
+                     <h3>
+                     房建
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fas fa-equals"></i>
+                     </div>
+                     <h3>
+                     轨道
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fas fa-compress"></i>
+                     </div>
+                     <h3>
+                     综合管廊
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fas fa-tree"></i>
+                     </div>
+                     <h3>
+                     园林绿化
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fab fa-houzz"></i>
+                     </div>
+                     <h3>
+                     装配式建筑
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fas fa-screwdriver"></i>
+                     </div>
+                     <h3>
+                     通用安装
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fab fa-codepen"></i>
+                     </div>
+                     <h3>
+                     构筑物
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+               <div class="col-12 col-md-4 col-lg-3 mt-30">
+                  <!-- Box -->
+                  <div class="box bg-box text-center">
+                     <div class="icon text-primary">
+                        <i class="fas fa-tools"></i>
+                     </div>
+                     <h3>
+                     房屋修缮
+                     </h3>
+                  </div>
+                  <!--End Box -->
+               </div>
+            </div>
+         </div>
+      </section>
+      <!--底部-->
+      <footer class="footer_area bg-light">
+         <div class="footer_bottom_area section pb-0">
+            <div class="container">
+               <div class="row">
+                  <div class="col-6">
+                     <h3><img src="/web/users/images/laohuicon.png" class="mr-3">加班少一点,胜算多一点</h3>
+                  </div>
+                  <div class="col-6">
+                     <div class="footer_menu">
+                        <ul class="list-unstyled">
+                           <li>
+                              <a  href="https://smartcost.com.cn" target="_blank">首页</a>
+                           </li>
+                           <li>
+                              <a  href="https://smartcost.com.cn/product/24" target="_blank">产品下载</a>
+                           </li>
+                           <li>
+                              <a  href="https://ol.smartcost.com.cn" target="_blank">纵横造价网络版</a>
+                           </li>
+                           <li>
+                              <a  href="https://smartcost.com.cn/train" target="_blank">纵横专业培训</a>
+                           </li>
+                           <li>
+                              <a  href="https://smartcost.com.cn/contact2" target="_blank">联系我们</a>
+                           </li>
+                        </ul>
+                     </div>
+                  </div>
+               </div>
+            </div>
+         </div>
+         <div class="footer_copywrite_area">
+            <div class="container">
+               <div class="row">
+                  <div class="col-12">
+                     <div class="footer_bottom text-center">
+                        Copyright@珠海纵横创新软件有限公司 all rights reserved <a href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备14032472号</a>
+                     </div>
+                     <div style="position:fixed;right:-100px"><script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1278513319'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "v1.cnzz.com/stat.php%3Fid%3D1278513319%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));</script></div>
+                  </div>
+               </div>
+            </div>
+         </div>
+      </footer>
+      <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+      <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
+      <script src="/lib/popper/popper.min.js"></script>
+      <script src="/lib/bootstrap/bootstrap.min.js"></script>
+      <script src="/lib/jquery/jquery.sticky.js"></script>
+      <script src="/web/users/js/index.js"></script>
+   </body>
+</html>

BIN
web/users/images/bg_01.png


BIN
web/users/images/bg_02.jpg


BIN
web/users/images/favicon.ico


BIN
web/users/images/home-desk.png


BIN
web/users/images/laohuicon.png


BIN
web/users/images/line.png


BIN
web/users/images/logo.png


BIN
web/users/images/softview/1.png


BIN
web/users/images/softview/2.png


BIN
web/users/images/softview/3.png


File diff suppressed because it is too large
+ 1 - 0
web/users/images/undraw_browse.svg


File diff suppressed because it is too large
+ 1 - 0
web/users/images/undraw_gift.svg


File diff suppressed because it is too large
+ 1 - 0
web/users/images/undraw_work.svg


+ 73 - 0
web/users/js/index.js

@@ -0,0 +1,73 @@
+/* 
+lexar
+Author - bootstrapdevelop
+Project Version - v1.0
+ */
+(function ($) {
+    "use strict";
+    /**sticky*/
+  $("#header").sticky({topSpacing:0}); 
+    //auto close navbar-collapse on click a
+    $('.nav-item>[data-scroll]').on('click', function () {
+        $('.navbar-toggler:visible').click();
+    });
+
+
+
+
+// Select all links with hashes
+/* 
+lexar - Software HTML5 Landing Page
+Author - nilssatasiya
+Project Version - v1.0
+ */
+
+(function ($) {
+    "use strict";
+
+
+//auto close navbar-collapse on click a
+    $('.nav-item').on('click', function () {
+        $('.navbar-toggler:visible').click();
+    });
+
+
+
+$('a[href*="#"]')
+    // Remove links that don't actually link to anything
+    .not('[href="#"]')
+    .not('[href="#0"]')
+    .click(function(event) {
+        // On-page links
+        if (
+            location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') &&
+            location.hostname == this.hostname
+        ) {
+            // Figure out element to scroll to
+            var target = $(this.hash);
+            target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
+            // Does a scroll target exist?
+            if (target.length) {
+                // Only prevent default if animation is actually gonna happen
+                event.preventDefault();
+                $('html, body').animate({
+                    scrollTop: target.offset().top 
+                }, 1000, function() {
+                    // Callback after animation
+                   
+                });
+            }
+        }
+    });
+
+})(jQuery);
+
+
+$(document).ready(function(){
+  $('[data-toggle="tooltip"]').tooltip();
+});
+
+
+$(".loader_pre").fadeTo(1,1).fadeOut(1);
+
+})(jQuery);