瀏覽代碼

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/YangHuCost

zhongzewei 7 年之前
父節點
當前提交
674206818b

+ 2 - 0
config/gulpConfig.js

@@ -9,6 +9,7 @@ module.exports = {
         'lib/jquery-ui/jquery-ui.min.js',
         'lib/popper/popper.min.js',
         'lib/bootstrap/bootstrap.min.js',
+        'lib/bootstrap/bootstrap-submenu.js',
         'web/building_saas/js/*.js',
         'public/web/scMathUtil.js',
         'public/web/gljUtil.js',
@@ -21,6 +22,7 @@ module.exports = {
     common_css:[
         'lib/jquery-ui/jquery-ui.css',
         'lib/bootstrap/css/bootstrap.min.css',
+        'lib/bootstrap/css/bootstrap-submenu.js',
         'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
         'web/building_saas/css/main.css',
         'web/building_saas/css/custom.css',

+ 132 - 0
lib/bootstrap/bootstrap-submenu.js

@@ -0,0 +1,132 @@
+(function(factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module
+    define(['jquery'], factory);
+  } else if (typeof exports === 'object') {
+    // Node/CommonJS
+    module.exports = factory(require('jquery'));
+  } else {
+    // Browser globals
+    factory(jQuery);
+  }
+})(function($) {
+  class DropdownSubmenu {
+    constructor(element) {
+      this.element = element.parentElement;
+      this.menuElement = this.element.querySelector('.dropdown-menu');
+
+      this.init();
+    }
+
+    init() {
+      $(this.element).off('keydown.bs.dropdown.data-api');
+
+      this.menuElement.addEventListener('keydown', this.itemKeydown.bind(this));
+
+      const dropdownItemNodeList = this.menuElement.querySelectorAll('.dropdown-item');
+
+      for (const element of dropdownItemNodeList) {
+        element.addEventListener('keydown', this.handleKeydownDropdownItem.bind(this));
+      }
+
+      $(this.menuElement).on('keydown', '.dropdown-submenu > .dropdown-item', this.handleKeydownSubmenuDropdownItem.bind(this));
+      $(this.menuElement).on('click', '.dropdown-submenu > .dropdown-item', this.handleClickSubmenuDropdownItem.bind(this));
+      $(this.element).on('hidden.bs.dropdown', () => {
+        this.close(this.menuElement);
+      });
+    }
+
+    handleKeydownDropdownItem(event) {
+      // 27: Esc
+      if (event.keyCode !== 27) {
+        return;
+      }
+
+      event.target.closest('.dropdown-menu').previousElementSibling.focus();
+      event.target.closest('.dropdown-menu').classList.remove('show');
+    }
+
+    handleKeydownSubmenuDropdownItem(event) {
+      // 32: Spacebar
+      if (event.keyCode !== 32) {
+        return;
+      }
+
+      // NOTE: Off vertical scrolling
+      event.preventDefault();
+
+      this.toggle(event.target);
+    }
+
+    handleClickSubmenuDropdownItem(event) {
+      event.stopPropagation();
+
+      this.toggle(event.target);
+    }
+
+    itemKeydown(event) {
+      // 38: Arrow up, 40: Arrow down
+      if (![38, 40].includes(event.keyCode)) {
+        return;
+      }
+
+      // NOTE: Off vertical scrolling
+      event.preventDefault();
+
+      event.stopPropagation();
+
+      const itemNodeList = this.element.querySelectorAll('.show > .dropdown-item:not(:disabled):not(.disabled), .show > .dropdown > .dropdown-item');
+
+      let index = Array.from(itemNodeList).findIndex((element) => {
+        return element === event.target;
+      });
+
+      if (event.keyCode === 38 && index !== 0) {
+        index--;
+      } else if (event.keyCode === 40 && index !== itemNodeList.length - 1) {
+        index++;
+      } else {
+        return;
+      }
+
+      itemNodeList[index].focus();
+    }
+
+    toggle(element) {
+      const dropdownElement = element.closest('.dropdown');
+      const parentMenuElement = dropdownElement.closest('.dropdown-menu');
+      const menuElement = dropdownElement.querySelector('.dropdown-menu');
+      const isOpen = menuElement.classList.contains('show');
+
+      this.close(parentMenuElement);
+
+      menuElement.classList.toggle('show', !isOpen);
+    }
+
+    close(menuElement) {
+      const menuNodeList = menuElement.querySelectorAll('.dropdown-menu.show');
+
+      for (const element of menuNodeList) {
+        element.classList.remove('show');
+      }
+    }
+  }
+
+  // For AMD/Node/CommonJS used elements (optional)
+  // http://learn.jquery.com/jquery-ui/environments/amd/
+  $.fn.submenupicker = function(elements) {
+    const $elements = this instanceof $ ? this : $(elements);
+
+    return $elements.each(function() {
+      let data = $.data(this, 'bs.submenu');
+
+      if (!data) {
+        data = new DropdownSubmenu(this);
+
+        $.data(this, 'bs.submenu', data);
+      }
+    });
+  };
+
+  return DropdownSubmenu;
+});

+ 29 - 0
lib/bootstrap/css/bootstrap-submenu.css

@@ -0,0 +1,29 @@
+.dropdown-submenu.dropright .dropdown-menu {
+  margin-left: 1px;
+}
+
+.dropdown-submenu .dropleft .dropdown-menu {
+  margin-right: 1px;
+}
+
+[x-placement^="bottom-"] .dropdown-submenu .dropdown-menu,
+.navbar .dropdown-submenu .dropdown-menu {
+  bottom: auto;
+  margin-top: calc(-0.5rem - 1px);
+}
+
+[x-placement^="top-"] .dropdown-submenu .dropdown-menu {
+  top: auto;
+  bottom: 0;
+  margin-bottom: calc(-0.5rem - 1px);
+}
+
+.dropdown-submenu.dropright > .dropdown-toggle {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.dropdown-submenu.dropright > .dropdown-toggle::after {
+  margin-right: -12px;
+}

文件差異過大導致無法顯示
+ 2 - 2
lib/bootstrap/css/bootstrap.min.css


+ 35 - 1
web/building_saas/css/main.css

@@ -348,7 +348,7 @@ a{
     margin-top:2px;
 }
 .rn-nav .nav-tabs .nav-link{
-    padding:0.8em 0.4em;
+    padding:0.4em 0.4em;
     line-height: 16px
 }
 .rn-nav .nav-tabs .nav-link.active {
@@ -357,6 +357,7 @@ a{
     border-left:1px solid #fff;
     margin-left:-1px;
     border-top:1px solid #ccc;
+    border-right:1px solid #ccc;
     border-bottom:1px solid #ccc;
 }
 .rn-nav .nav-tabs .nav-link span{
@@ -553,4 +554,37 @@ a{
 }
 .annotate-color-7{
     background: #ECE0F5
+}
+/*宽屏菜单*/
+@media screen and (min-width: 900px) {
+    #fluid-menu{
+    }
+    #min-menu{
+        display: none
+    }
+}
+@media screen and (min-width: 912px) {
+    #share-info{
+        overflow: auto;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        max-width:inherit;
+    }
+}
+/*窄屏菜单*/
+@media screen and (max-width: 900px) {
+    #fluid-menu{
+        display: none
+    }
+    #min-menu{
+
+    }
+}
+@media screen and (max-width: 1018px) {
+    #share-info{
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        max-width:80px;
+    }
 }

+ 1 - 0
web/building_saas/js/global.js

@@ -64,6 +64,7 @@ $(function () {
     /*工具提示*/
     $(function () {
         $('[data-toggle="tooltip"]').tooltip();
+        $('[data-submenu]').submenupicker();
         $('[data-toggle="tooltip"]').click(function () {
             $(this).tooltip('hide');
         })

+ 2 - 1
web/building_saas/main/html/main.html

@@ -10,6 +10,7 @@
 
     <link rel="stylesheet" href="/lib/jquery-ui/jquery-ui.css" type="text/css">
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap-submenu.css">
     <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/web/building_saas/css/custom.css">
@@ -68,7 +69,7 @@
         <div class="main-nav">
             <ul class="nav nav-tabs flex-column" role="tablist">
                 <li class="nav-item"><a class="active" data-toggle="tab" href="#zaojiashu" id="tab_zaojiashu" role="tab">造价书</a></li>
-                <li class="nav-item"><a data-toggle="tab" href="#project_glj" id="tab_project_glj" data-name="tab_project_glj" role="tab">人材机汇总</a></li>
+                <li class="nav-item"><a data-toggle="tab" href="#project_glj" id="tab_project_glj" data-name="tab_project_glj" role="tab">工料机汇总</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#fee_rates" id="tab_fee_rate" role="tab" >费率</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab" style="display:none">总计算程序</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#tender_price" id="tab_tender_price" role="tab">调价</a></li>

+ 3 - 3
web/building_saas/main/js/models/main_consts.js

@@ -280,12 +280,12 @@ const billText = {
 let cpFeeTypes = [
     {type: 'marketLabour', name: '人工费'},
     {type: 'marketMaterial', name: '材料费'},
-    {type: 'marketMachine', name: '施工机使用费'},
+    {type: 'marketMachine', name: '施工机使用费'},
     {type: 'marketEquipment', name: '设备费'},
     {type: 'marketDirect', name: '直接费'},
     {type: 'labour', name: '定额人工费'},
     {type: 'material', name: '定额材料费'},
-    {type: 'machine', name: '定额施工机使用费'},
+    {type: 'machine', name: '定额施工机使用费'},
     {type: 'equipment', name: '定额设备费'},
     {type: 'direct', name: '定额直接费'},
     {type: 'measure', name: '措施费'},
@@ -295,10 +295,10 @@ let cpFeeTypes = [
     {type: 'force', name: '规费'},
     {type: 'profit', name: '利润'},
     {type: 'tax', name: '税金'},
+    {type: 'rationCommon', name: '定额建安费'},
     {type: 'common', name: '建安费'}
     // {type: 'fee1', name: '费用1'},
     // {type: 'fee2', name: '费用2'}
-
 ];
 //8-27 zhang 这个已经不能用来判断工程类型了
 /*const engineeringType = {

+ 1 - 1
web/building_saas/main/js/views/block_lib.js

@@ -73,7 +73,7 @@ var blockLibObj = {
         $.bootstrapLoading.start();
         let me = this;
         let namesAndLib = await ajaxPost('/blockLib/getLibNamesAndFirstLib',
-            {userID: userID, userName: userName, compilationID: projectInfoObj.projectInfo.compilation});
+            {userID: userID, userName: $("#link_userName").text(), compilationID: projectInfoObj.projectInfo.compilation});
         function getLibNamesHtml(libsArr) {
             let result = '';
             for (let lib of libsArr) {

+ 2 - 2
web/building_saas/main/js/views/project_view.js

@@ -3238,8 +3238,8 @@ function disableTools(){
     $('#generalOpts1').prop('disabled', 'disabled');
     $('#generalOpts2').prop('disabled', 'disabled');
     //补充库编辑器
-    $('#compleRationLib').addClass('disabled');
-    $('#compleGljLib').addClass('disabled')
+    $('.compleRationLib').addClass('disabled');
+    $('.compleGljLib').addClass('disabled')
     //库
     //$('#stdBillsGuidanceTab').addClass('disabled');
     $('#stdBillsTab').addClass('disabled');

+ 50 - 33
web/common/html/header.html

@@ -10,33 +10,14 @@
         <div class="p-title"><%= versionName %></div>
     </div>
     <!--</a>-->
-    <div  class="navbar-text navbar-crumb px-1" id="fullpath">
+    <div  class="navbar-text navbar-crumb px-1 mr-auto" id="fullpath">
 
     </div>
-   <!-- <ul class="nav navbar-nav px-1">
-        <li class="nav-item">
-            <a class="nav-link" href="#" aria-expanded="false" data-toggle="modal" data-target="#poj-set"><i class="fa fa-cog"></i> 项目属性</a>
-        </li>
-        <li class="nav-item">
-                        <span class="dropdown">
-                            <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"><i class="fa  fa-cloud-upload"></i> 导入</a>
-                                <div class="dropdown-menu">
-                                    <a class="dropdown-item" href="#import" data-toggle="modal" data-target="#import">导入09表Excel清单</a>
-                                    <a class="dropdown-item" href="#">导入广联达算量Excel清单</a>
-                                </div>
-                        </span>
-        </li>
-    </ul>-->
-    <div id="testDisplay" style="color:#ff7e0e;">&nbsp;&nbsp;</div>
-    <div class="ml-auto navbar-text p-0">
-        <ul class="nav navbar-nav">
+    <div class="navbar-text p-0 navbar-expand-sm">
+        <!--大屏菜单-->
+        <ul class="nav navbar-nav" id="fluid-menu">
             <li class="nav-item dropdown">
-                <!--<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"><%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %></a>-->
-                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" id="link_userName"></a>
-                <script>
-                    let userName = "<%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %>";
-                    document.getElementById('link_userName').innerHTML = userName;
-                </script>
+                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" id="link_userName"><%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %></a>
                 <div class="dropdown-menu dropdown-menu-right">
                     <a class="dropdown-item" href="/user/info" target="_blank">账号资料</a>
                     <a class="dropdown-item" href="/user/buy" target="_blank">产品激活</a>
@@ -49,9 +30,8 @@
             <li class="nav-item dropdown">
                 <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench" data-placement="bottom"></i> 工具</a>
                 <div class="dropdown-menu dropdown-menu-right">
-                    <!--<a id="compleRationLib" class="dropdown-item" href="javascript:void(0);" data-toggle="modal" data-target="#comple-ration">定额库编辑器</a> -->
-                    <a id="compleRationLib" class="dropdown-item" href="/complementaryRation/ration" target="_blank">定额库编辑器</a>
-                    <a id="compleGljLib" class="dropdown-item" href="/complementaryGlj" target="_">人材机库编辑器</a>
+                    <a id="compleRationLib" class="dropdown-item compleRationLib" href="/complementaryRation/ration" target="_blank">定额库编辑器</a>
+                    <a id="compleGljLib" class="dropdown-item compleGljLib" href="/complementaryGlj" target="_">人材机库编辑器</a>
                 </div>
             </li>
             <% } %>
@@ -62,16 +42,52 @@
                     <a class="dropdown-item" href="#">升级说明</a>
                     <a class="dropdown-item" href="#">重庆市2008定额说明</a>-->
                     <a class="dropdown-item" href="https://smartcost.com.cn/" target="_blank">纵横官网</a>
-                  <!--  <a class="dropdown-item" href="#">动画教程</a>-->
+                    <!--  <a class="dropdown-item" href="#">动画教程</a>-->
                     <a id="customerService" class="dropdown-item" href="javascript:void(0);">联系客服</a>
-                  <!--  <a class="dropdown-item" href="#">关于</a>-->
+                    <!--  <a class="dropdown-item" href="#">关于</a>-->
                 </div>
             </li>
-          <!--  <li class="nav-item">
-                <a class="nav-link <% if (unreadCount > 0) { %>new-msg<% } %>" id="notify-info" data-toggle="modal" data-target="#msg" href="javacript:void(0);">
-                    <i class="fa fa-envelope-o" aria-hidden="true"></i>&nbsp;<span id="unread-num"><%= unreadCount %></span>
+            <!-- <li class="nav-item">
+                 <a class="nav-link new-msg" data-toggle="modal" data-target="#msg" href="javacript:void(0);">
+                     <i class="fa fa-envelope-o" aria-hidden="true"></i>&nbsp;2
+                 </a>
+             </li>-->
+        </ul>
+        <!--小屏菜单-->
+        <ul class="nav navbar-nav" id="min-menu">
+            <li class="nav-item dropdown">
+                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" data-submenu="" aria-expanded="false">
+                    <i class="fa fa-bars"></i>
                 </a>
-            </li>-->
+                <div class="dropdown-menu dropdown-menu-right">
+                    <div class="dropdown dropleft dropdown-submenu">
+                        <button class="dropdown-item dropdown-toggle" type="button" data-toggle="dropdown"><%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %></button>
+                        <div class="dropdown-menu">
+                            <a class="dropdown-item" href="/user/info" target="_blank">账号资料</a>
+                            <a class="dropdown-item" href="/user/buy" target="_blank">产品激活</a>
+                            <a class="dropdown-item" href="/user/preferences" target="_blank">登录设置</a>
+                            <div class="dropdown-divider"></div>
+                            <a class="dropdown-item" href="/logout">退出登录</a>
+                        </div>
+                    </div>
+                    <% if (action === 'index' && controller === 'main') {%>
+                    <div class="dropdown dropleft dropdown-submenu">
+                        <button class="dropdown-item dropdown-toggle" type="button" data-toggle="dropdown">工具</button>
+                        <div class="dropdown-menu">
+                            <a  class="dropdown-item compleRationLib" href="/complementaryRation/ration" target="_blank">定额库编辑器</a>
+                            <a  class="dropdown-item compleGljLib" href="/complementaryGlj" target="_">人材机库编辑器</a>
+                        </div>
+                    </div>
+                    <% } %>
+                    <div class="dropdown dropleft dropdown-submenu">
+                        <button class="dropdown-item dropdown-toggle" type="button" data-toggle="dropdown">帮助</button>
+                        <div class="dropdown-menu">
+                            <a class="dropdown-item" href="https://smartcost.com.cn/" target="_blank">纵横官网</a>
+                            <a id="customerService" class="dropdown-item" href="javascript:void(0);">联系客服</a>
+                        </div>
+                    </div>
+                </div>
+            </li>
         </ul>
     </div>
 </nav>
@@ -250,6 +266,7 @@
 <script type="text/javascript" src="/lib/jquery-ui/jquery-ui.min.js"></script>
 <script src="/lib/popper/popper.min.js"></script>
 <script src="/lib/bootstrap/bootstrap.min.js"></script>
+<script src="/lib/bootstrap/bootstrap-submenu.js"></script>
 <script type="text/javascript" src="/web/building_saas/js/moment.min.js"></script>
 <script type="text/javascript" src="/web/building_saas/js/message.js"></script>
 <script type="text/javascript" src="/public/web/scMathUtil.js"></script>