Переглянути джерело

Merge branch '1.0.0_online' of http://192.168.1.41:3000/SmartCost/ConstructionCost into 1.0.0_online

zhangweicheng 6 роки тому
батько
коміт
bc7a65d296

+ 239 - 231
web/building_saas/css/main.css

@@ -3,87 +3,88 @@
 body {
 body {
     font-size: 0.9rem;
     font-size: 0.9rem;
     overflow: hidden;
     overflow: hidden;
+    font-family: "Helvetica Neue","Hiragino Sans GB",stheiti,"Microsoft Yahei","微软雅黑",tahoma,sans-serif
 }
 }
 a{
 a{
-    outline: none
+  outline: none
 }
 }
 .dropdown-menu {
 .dropdown-menu {
     font-size: 0.9rem
     font-size: 0.9rem
 }
 }
 .btn.disabled, .btn:disabled {
 .btn.disabled, .btn:disabled {
-    color:#999
+  color:#999
 }
 }
 .btn-link:focus, .btn-link:hover{
 .btn-link:focus, .btn-link:hover{
-    text-decoration: none
+  text-decoration: none
 }
 }
 .dropdown-menu {
 .dropdown-menu {
-    padding:.2rem 0;
+  padding:.2rem 0;
 }
 }
 .dropdown-item:focus, .dropdown-item:hover{
 .dropdown-item:focus, .dropdown-item:hover{
-    background-color: #f7f7f9
+  background-color: #f7f7f9
 }
 }
 .text-indent {
 .text-indent {
-    text-indent:26px;
+  text-indent:26px;
 }
 }
 .modal-header{
 .modal-header{
-    background:#f2f2f2;
-    border-bottom:1px solid #ccc;
-    padding:.8rem 1rem;
+  background:#f2f2f2;
+  border-bottom:1px solid #ccc;
+  padding:.8rem 1rem;
 }
 }
 .modal-title{
 .modal-title{
-    font-size:1rem;
+  font-size:1rem;
 }
 }
 .modal-footer{
 .modal-footer{
-    padding:.8rem 1rem;
+  padding:.8rem 1rem;
 }
 }
 .form-check .form-check-label,.form-radio .form-check-label{
 .form-check .form-check-label,.form-radio .form-check-label{
-    cursor: pointer;
+  cursor: pointer;
 }
 }
 .custom-file-sm,.custom-file-sm .custom-file-label{
 .custom-file-sm,.custom-file-sm .custom-file-label{
-    height: calc(1.5em + .5rem + 2px);
-    padding-top: .25rem;
-    padding-bottom: .25rem;
-    padding-left: .5rem;
+  height: calc(1.5em + .5rem + 2px);
+  padding-top: .25rem;
+  padding-bottom: .25rem;
+  padding-left: .5rem;
 }
 }
 .custom-file-sm .custom-file-label:after{
 .custom-file-sm .custom-file-label:after{
-    height: calc(1.4em + .5rem + 2px);
-    padding-top: .25rem;
-    padding-bottom: .25rem;
-    font-size: .875rem;
+  height: calc(1.4em + .5rem + 2px);
+padding-top: .25rem;
+padding-bottom: .25rem;
+font-size: .875rem;
 }
 }
 .custom-file-sm input{
 .custom-file-sm input{
-    height: calc(1.5em + .5rem + 2px);
-    font-size: .875rem;
+  height: calc(1.5em + .5rem + 2px);
+font-size: .875rem;
 }
 }
 /*自定义css*/
 /*自定义css*/
 .login-body,.login-html{
 .login-body,.login-html{
-    height:100%;
+  height:100%;
 }
 }
 .login-bg{
 .login-bg{
-    width: 100%;
-    height: 100%;
-    background: #f2f6f5 url("login-bg.jpg") bottom center no-repeat;
-    background-size: 100% auto;
-    display: inline-block;
-    position: absolute;
+  width: 100%;
+  height: 100%;
+  background: #f2f6f5 url("login-bg.jpg") bottom center no-repeat;
+  background-size: 100% auto;
+  display: inline-block;
+  position: absolute;
 }
 }
 .login-panel {
 .login-panel {
-    width: 500px;
-    margin: 0 auto;
-    position: absolute;
-    left: 0;
-    right: 0;
-    top: 20%;
-    padding:30px;
-    background:#fff;
-    box-shadow:#333 1px 1px 5px
+  width: 500px;
+  margin: 0 auto;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 20%;
+  padding:30px;
+  background:#fff;
+  box-shadow:#333 1px 1px 5px
 }
 }
 .ver-panel {
 .ver-panel {
-    width:100%;
-    top:10%;
+  width:100%;
+  top:10%;
 }
 }
 .header {
 .header {
-    border-bottom: 1px solid #ccc
+  border-bottom: 1px solid #ccc
 }
 }
 .header .header-logo {
 .header .header-logo {
     background: #ff6501;
     background: #ff6501;
@@ -95,26 +96,26 @@ a{
     padding-left:50px;
     padding-left:50px;
 }
 }
 .header-logo div.v-title{
 .header-logo div.v-title{
-    font-size:11px;
-    color:#aeaeae;
-    line-height: 12px;
-    margin-top:3px;
+  font-size:11px;
+  color:#aeaeae;
+  line-height: 12px;
+  margin-top:3px;
 }
 }
 .header-logo div.p-title{
 .header-logo div.p-title{
-    font-size:16px;
-    color:#ff6501;
+  font-size:16px;
+  color:#ff6501;
 }
 }
 .header-logo div.b-title{
 .header-logo div.b-title{
-    font-size:24px;
-    color:#ff6501;
+  font-size:24px;
+  color:#ff6501;
 }
 }
 .top-msg{
 .top-msg{
-    position: fixed;
-    top:10px;
-    width:900px;
-    z-index: 9999;
-    left:50%;
-    margin-left:-450px;
+  position: fixed;
+  top:10px;
+  width:900px;
+  z-index: 9999;
+  left:50%;
+  margin-left:-450px;
 }
 }
 .main {
 .main {
     position: relative;
     position: relative;
@@ -146,55 +147,55 @@ a{
     color: #333
     color: #333
 }
 }
 .main-nav .nav-tabs{
 .main-nav .nav-tabs{
-    border-bottom: none
+  border-bottom: none
 }
 }
 .poj-manage .col-auto{
 .poj-manage .col-auto{
-    background:#f7f7f9
+  background:#f7f7f9
 }
 }
 .poj-cate {
 .poj-cate {
-    width:58px;
-    margin-right:-1px;
-    margin-top:2px;
+  width:58px;
+  margin-right:-1px;
+  margin-top:2px;
 }
 }
 .poj-cate .nav-pills .nav-link{
 .poj-cate .nav-pills .nav-link{
-    border-radius: 0;
-    font-size: 24px;
-    color: #007bff
+  border-radius: 0;
+  font-size: 24px;
+  color: #007bff
 }
 }
 .poj-cate .nav-item{
 .poj-cate .nav-item{
-    position: relative;
+  position: relative;
 }
 }
 .poj-cate .nav-pills .badge{
 .poj-cate .nav-pills .badge{
-    position: absolute;
-    right:5px;
-    top:5px;
+  position: absolute;
+  right:5px;
+  top:5px;
 }
 }
 .poj-cate .nav-pills .nav-link:hover{
 .poj-cate .nav-pills .nav-link:hover{
-    color:#0056b3
+  color:#0056b3
 }
 }
 .poj-cate .nav-pills .nav-link.active, .nav-pills .show > .nav-link{
 .poj-cate .nav-pills .nav-link.active, .nav-pills .show > .nav-link{
-    background-color: #6c757d;
-    color:#fff
+  background-color: #6c757d;
+  color:#fff
 }
 }
 .gl-side.gl-side-lg{
 .gl-side.gl-side-lg{
-    width:200px;
+  width:200px;
 }
 }
 .nav-side .nav-link{
 .nav-side .nav-link{
-    padding:.5rem;
+  padding:.5rem;
 }
 }
 .nav-side .nav-link.active{
 .nav-side .nav-link.active{
-    background:#ddd;
-    color:#333;
+  background:#ddd;
+  color:#333;
 }
 }
 .pm-side{
 .pm-side{
-    position: fixed;
-    left:0;
-    height:100%;
-    border-right:1px solid #ccc;
-    background: #f7f7f9
+  position: fixed;
+  left:0;
+  height:100%;
+  border-right:1px solid #ccc;
+  background: #f7f7f9
 }
 }
 .pm-content{
 .pm-content{
-    padding-left:58px
+  padding-left:58px
 }
 }
 .content {
 .content {
     border-left: 1px solid #ccc;
     border-left: 1px solid #ccc;
@@ -202,8 +203,8 @@ a{
     background: #fff
     background: #fff
 }
 }
 .toolsbar,.toolsbar-f {
 .toolsbar,.toolsbar-f {
-    background: #f7f7f9;
-    border-bottom: 1px solid #ccc
+  background: #f7f7f9;
+  border-bottom: 1px solid #ccc
 }
 }
 .tools-btn {
 .tools-btn {
     height: 30px;
     height: 30px;
@@ -213,40 +214,40 @@ a{
     background: #f7f7f9;
     background: #f7f7f9;
 }
 }
 .toolsbar .btn-light {
 .toolsbar .btn-light {
-    color:#007bff;
-    min-width: 34px;
+  color:#007bff;
+  min-width: 34px;
 }
 }
 .toolsbar .btn-light.disabled {
 .toolsbar .btn-light.disabled {
-    color:#999;
+  color:#999;
 }
 }
 .main-side {
 .main-side {
     border-left: 1px solid #ccc;
     border-left: 1px solid #ccc;
     overflow-y: hidden;
     overflow-y: hidden;
 }
 }
 .main-data-top,.main-data-full{
 .main-data-top,.main-data-full{
-    overflow: hidden;
-    width:100%
+  overflow: hidden;
+  width:100%
 }
 }
 .main-data-top-side{
 .main-data-top-side{
-    overflow: hidden
+  overflow: hidden
 }
 }
 .main-content.col-lg-8{
 .main-content.col-lg-8{
-    width:66.666667%
+  width:66.666667%
 }
 }
 .main-content.col-lg-12{
 .main-content.col-lg-12{
-    width:100%
+  width:100%
 }
 }
 .main-side.col-lg-4{
 .main-side.col-lg-4{
-    width: 33.333333%;
+  width: 33.333333%;
 }
 }
 .main-side.col-lg-0{
 .main-side.col-lg-0{
-    width:0%;
+  width:0%;
 }
 }
 .sidebar-middle{
 .sidebar-middle{
-    height:80px;
+  height:80px;
 }
 }
 .sidebar-bottom,.sidebar-bottom .col-lg-6,.sidebar-bottom .col-lg-12 {
 .sidebar-bottom,.sidebar-bottom .col-lg-6,.sidebar-bottom .col-lg-12 {
-    height:300px
+  height:300px
 }
 }
 .top-content, .fluid-content {
 .top-content, .fluid-content {
     overflow: auto;
     overflow: auto;
@@ -270,7 +271,7 @@ a{
     z-index: 999
     z-index: 999
 }
 }
 .side-tabs .nav-tabs .nav-item {
 .side-tabs .nav-tabs .nav-item {
-    z-index: 999
+  z-index: 999
 }
 }
 .side-tabs .nav-tabs {
 .side-tabs .nav-tabs {
     border-bottom: none;
     border-bottom: none;
@@ -384,8 +385,8 @@ a{
     }
     }
 }
 }
 .gl-side{
 .gl-side{
-    border-right:1px solid #ccc;
-    width:120px
+  border-right:1px solid #ccc;
+  width:120px
 }
 }
 .bottom-content .tab-content .main-data-bottom{
 .bottom-content .tab-content .main-data-bottom{
     height: 300px;
     height: 300px;
@@ -399,141 +400,141 @@ a{
     overflow: hidden;
     overflow: hidden;
 }
 }
 .tn-nav,.rn-nav{
 .tn-nav,.rn-nav{
-    width:30px;
-    height: 100%;
-    border-left:1px solid #dee2e6 ;
+  width:30px;
+  height: 100%;
+  border-left:1px solid #dee2e6 ;
 }
 }
 .tn-nav,.cn-nav{
 .tn-nav,.cn-nav{
-    border-right:1px solid #dee2e6 ;
-    border-left:none;
+  border-right:1px solid #dee2e6 ;
+  border-left:none;
 }
 }
 .tn-nav > span{
 .tn-nav > span{
-    width:20px;
+  width:20px;
 }
 }
 .tn-nav:hover{
 .tn-nav:hover{
-    background:#f7f7f9;
-    cursor: pointer;
+  background:#f7f7f9;
+  cursor: pointer;
 }
 }
 .rn-nav {
 .rn-nav {
-    background: #f7f7f9
+  background: #f7f7f9
 }
 }
 .rn-nav .nav{
 .rn-nav .nav{
-    padding: 0
+  padding: 0
 }
 }
 .rn-nav .nav-tabs {
 .rn-nav .nav-tabs {
-    border:none;
-    margin-top:2px;
+  border:none;
+  margin-top:2px;
 }
 }
 .rn-nav .nav-tabs .nav-link{
 .rn-nav .nav-tabs .nav-link{
-    padding:0.4em 0.4em;
-    line-height: 16px
+  padding:0.4em 0.4em;
+  line-height: 16px
 }
 }
 .rn-nav .nav-tabs .nav-link.active {
 .rn-nav .nav-tabs .nav-link.active {
-    border:none;
-    background-color: #fff;
-    border-left:1px solid #fff;
-    margin-left:-1px;
-    border-top:1px solid #ccc;
-    border-right:1px solid #ccc;
-    border-bottom:1px solid #ccc;
+  border:none;
+  background-color: #fff;
+  border-left:1px solid #fff;
+  margin-left:-1px;
+  border-top:1px solid #ccc;
+  border-right:1px solid #ccc;
+  border-bottom:1px solid #ccc;
 }
 }
 .cn-nav .nav-tabs .nav-link.active {
 .cn-nav .nav-tabs .nav-link.active {
-    border:none;
-    background-color: #fff;
-    border-right:1px solid #fff;
-    margin-right:-1px;
-    border-top:1px solid #ccc;
-    border-left:1px solid #ccc;
-    border-bottom:1px solid #ccc;
+  border:none;
+  background-color: #fff;
+  border-right:1px solid #fff;
+  margin-right:-1px;
+  border-top:1px solid #ccc;
+  border-left:1px solid #ccc;
+  border-bottom:1px solid #ccc;
 }
 }
 .rn-nav .nav-tabs .nav-link span{
 .rn-nav .nav-tabs .nav-link span{
-    display:none;
+  display:none;
 }
 }
 .rn-nav .nav-tabs .nav-link.active span{
 .rn-nav .nav-tabs .nav-link.active span{
-    display: inline-block;
+  display: inline-block;
 }
 }
 .poj-list, .side-content ,.form-view{
 .poj-list, .side-content ,.form-view{
     overflow: auto;
     overflow: auto;
 }
 }
 .print-toolsbar{
 .print-toolsbar{
-    padding:5px
+  padding:5px
 }
 }
 .print-toolsbar .panel {
 .print-toolsbar .panel {
-    display:inline-block;
-    vertical-align:top
+  display:inline-block;
+  vertical-align:top
 }
 }
 .print-toolsbar .panel .panel-foot{
 .print-toolsbar .panel .panel-foot{
-    text-align: center;
-    font-size: 12px;
-    padding-bottom:3px;
-    background:#F2F2F2
+  text-align: center;
+  font-size: 12px;
+  padding-bottom:3px;
+  background:#F2F2F2
 }
 }
 .print-list {
 .print-list {
-    border-right:1px solid #ccc
+  border-right:1px solid #ccc
 }
 }
 .print-list .form-list {
 .print-list .form-list {
-    overflow: auto
+  overflow: auto
 }
 }
 .print-list .list-tools{
 .print-list .list-tools{
-    height:50px;
-    padding:10px 0;
-    border-bottom:1px solid #f2f2f2
+  height:50px;
+  padding:10px 0;
+  border-bottom:1px solid #f2f2f2
 }
 }
 .pageContainer {
 .pageContainer {
-    text-align: center
+  text-align: center
 }
 }
 .pageContainer .page{
 .pageContainer .page{
-    border:9px solid transparent;
-    display: inline-block;
+  border:9px solid transparent;
+  display: inline-block;
 }
 }
 .pageContainer .page img{
 .pageContainer .page img{
-    width:inherit;
-    height: inherit;
+  width:inherit;
+  height: inherit;
 }
 }
 .modal-auto-height {
 .modal-auto-height {
-    height: 400px;
-    overflow-y: auto;
+  height: 400px;
+  overflow-y: auto;
 }
 }
 .modal-toolbar + .modal-auto-height{
 .modal-toolbar + .modal-auto-height{
-    height:369px
+  height:369px
 }
 }
 .modal-fixed-height {
 .modal-fixed-height {
-    height: 400px;
-    overflow-y: hidden;
+  height: 400px;
+  overflow-y: hidden;
 }
 }
 .sidebar-tools-bar {
 .sidebar-tools-bar {
-    background:#fff
+  background:#fff
 }
 }
 .side-search-box{
 .side-search-box{
-    background:#fff;
-    border-bottom:1px solid #ddd
+  background:#fff;
+  border-bottom:1px solid #ddd
 }
 }
 .navbar-crumb span{
 .navbar-crumb span{
-    float:left;
+  float:left;
 }
 }
 .navbar-crumb span.text-truncate{
 .navbar-crumb span.text-truncate{
-    max-width: 200px;
+  max-width: 200px;
 }
 }
 .dropdown-item{
 .dropdown-item{
-    color:#007bff
+  color:#007bff
 }
 }
 .dropdown-item:hover{
 .dropdown-item:hover{
-    color:#0056b3
+  color:#0056b3
 }
 }
 .dropdown-item.disabled, .dropdown-item:disabled{
 .dropdown-item.disabled, .dropdown-item:disabled{
-    pointer-events:none
+  pointer-events:none
 }
 }
 .tools-symbol{
 .tools-symbol{
-    width:450px
+  width:450px
 }
 }
 .tools-symbol p{
 .tools-symbol p{
-    margin: 0
+  margin: 0
 }
 }
 .tools-symbol a.btn{
 .tools-symbol a.btn{
-    font-size: .95rem;
-    width:26px;
-    padding: 0;
-    height:26px;
+  font-size: .95rem;
+  width:26px;
+  padding: 0;
+  height:26px;
 }
 }
 .custom-file-input:lang(zh) ~ .custom-file-label::after {
 .custom-file-input:lang(zh) ~ .custom-file-label::after {
     content: "浏览";
     content: "浏览";
@@ -566,142 +567,149 @@ a{
     border-color:#000 transparent transparent transparent;
     border-color:#000 transparent transparent transparent;
 }
 }
 .box-text-style {
 .box-text-style {
-    font-size: 12px;
-    font-family:"Microsoft YaHei"
+  font-size: 12px;
+  font-family:"Microsoft YaHei"
 }
 }
 .box-text-style p{
 .box-text-style p{
-    margin:0 0 2px 0;
+  margin:0 0 2px 0;
 }
 }
 .box-text-style table{
 .box-text-style table{
-    width: 100%;
-    text-align: center;
+  width: 100%;
+  text-align: center;
 }
 }
 .box-text-style table th,.box-text-style table td{
 .box-text-style table th,.box-text-style table td{
-    border:1px solid #fff;
+  border:1px solid #fff;
 }
 }
 
 
 .box-text-style table p{
 .box-text-style table p{
-    text-align: left;
+  text-align: left;
 }
 }
 .sys-setting-nav .nav-link{
 .sys-setting-nav .nav-link{
-    padding:.3rem 1rem;
+  padding:.3rem 1rem;
 }
 }
 /*快捷切换单位工程*/
 /*快捷切换单位工程*/
 .navbar-crumb{
 .navbar-crumb{
-    position: relative;
+  position: relative;
 }
 }
 .navbar-crumb .f-nav,.navbar-crumb .s-nav{
 .navbar-crumb .f-nav,.navbar-crumb .s-nav{
-    position: absolute;
-    z-index: 999;
-    width: 200px;
-    background:#fff;
-    border: 1px solid rgba(0,0,0,.15);
-    padding: .5rem 0;
+  position: absolute;
+  z-index: 999;
+  width: 200px;
+  background:#fff;
+  border: 1px solid rgba(0,0,0,.15);
+  padding: .5rem 0;
 }
 }
 .navbar-crumb .f-nav{
 .navbar-crumb .f-nav{
-    right:50px;
-    top:35px;
+  right:50px;
+  top:35px;
 }
 }
 .navbar-crumb .s-nav{
 .navbar-crumb .s-nav{
-    left:200px
+  left:200px
 }
 }
 .navbar-crumb .f-nav li{
 .navbar-crumb .f-nav li{
-    padding: .25rem 1rem;
-    cursor: default;
+  padding: .25rem 1rem;
+  cursor: default;
 }
 }
 .navbar-crumb .f-nav li.focus{
 .navbar-crumb .f-nav li.focus{
-    color: #16181b;
-    background-color: #f7f7f9;
+color: #16181b;
+background-color: #f7f7f9;
 }
 }
 .navbar-crumb .f-nav li .s-nav{
 .navbar-crumb .f-nav li .s-nav{
-    display: none
+  display: none
 }
 }
 .navbar-crumb .f-nav li.focus .s-nav{
 .navbar-crumb .f-nav li.focus .s-nav{
-    display: block
+  display: block
 }
 }
 /*书签颜色*/
 /*书签颜色*/
 .annotate-color-1{
 .annotate-color-1{
-    background: #E2F2C5;
-    color: #E2F2C5
+  background: #E2F2C5;
+  color: #E2F2C5;
 }
 }
 .annotate-color-1::before{
 .annotate-color-1::before{
-    color: #E2F2C5!important;
+  color: #E2F2C5;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .annotate-color-2{
 .annotate-color-2{
-    background: #F9E2CF;
-    color:#F9E2CF
+  background: #F9E2CF;
+  color:#F9E2CF
 }
 }
 .annotate-color-2::before{
 .annotate-color-2::before{
-    color: #F9E2CF
+  color: #F9E2CF;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .annotate-color-3{
 .annotate-color-3{
-    background: #F2EFD9;
-    color:#F2EFD9
+  background: #F2EFD9;
+  color:#F2EFD9
 }
 }
 .annotate-color-3::before{
 .annotate-color-3::before{
-    color:#F2EFD9
+  color:#F2EFD9;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .annotate-color-4{
 .annotate-color-4{
-    background: #F5D1DA;
-    color:#F5D1DA
+  background: #F5D1DA;
+  color:#F5D1DA
 }
 }
 .annotate-color-4::before{
 .annotate-color-4::before{
-    color:#F5D1DA
+  color:#F5D1DA;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .annotate-color-5{
 .annotate-color-5{
-    background: #E3E3E3;
-    color:#E3E3E3
+  background: #E3E3E3;
+  color:#E3E3E3
 }
 }
 .annotate-color-5::before{
 .annotate-color-5::before{
-    color:#E3E3E3
+  color:#E3E3E3;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .annotate-color-6{
 .annotate-color-6{
-    background: #B6F3F2;
-    color:#B6F3F2
+  background: #B6F3F2;
+  color:#B6F3F2
 }
 }
 .annotate-color-6::before{
 .annotate-color-6::before{
-    color:#B6F3F2
+  color:#B6F3F2;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .annotate-color-7{
 .annotate-color-7{
-    background: #ECE0F5;
-    color:#ECE0F5
+  background: #ECE0F5;
+  color:#ECE0F5
 }
 }
 .annotate-color-7::before{
 .annotate-color-7::before{
-    color:#ECE0F5
+  color:#ECE0F5;
+  -webkit-text-stroke:.5px #ced4da;
 }
 }
 .input-group-text.active{
 .input-group-text.active{
-    color:#666;
+  color:#666;
 }
 }
 /*宽屏菜单*/
 /*宽屏菜单*/
 @media screen and (min-width: 900px) {
 @media screen and (min-width: 900px) {
-    #fluid-menu{
-    }
-    #min-menu{
-        display: none
-    }
+#fluid-menu{
+}
+#min-menu{
+  display: none
+}
 }
 }
 @media screen and (min-width: 912px) {
 @media screen and (min-width: 912px) {
-    #share-info{
-        overflow: auto;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-        max-width:inherit;
-    }
+#share-info{
+  overflow: auto;
+text-overflow: ellipsis;
+white-space: nowrap;
+max-width:inherit;
+}
 }
 }
 /*窄屏菜单*/
 /*窄屏菜单*/
 @media screen and (max-width: 900px) {
 @media screen and (max-width: 900px) {
-    #fluid-menu{
-        display: none
-    }
-    #min-menu{
+#fluid-menu{
+  display: none
+}
+#min-menu{
 
 
-    }
+}
 }
 }
 @media screen and (max-width: 1018px) {
 @media screen and (max-width: 1018px) {
-    #share-info{
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-        max-width:80px;
-    }
+#share-info{
+  overflow: hidden;
+text-overflow: ellipsis;
+white-space: nowrap;
+max-width:80px;
+}
 }
 }

+ 58 - 11
web/building_saas/main/js/controllers/block_controller.js

@@ -54,6 +54,28 @@ let BlockController = {
         }
         }
         return false;
         return false;
     },
     },
+    // 恢复删除节点有效性
+    recoverBlockDisabled: function () {
+        if (projectReadOnly) {
+            return true;
+        }
+        const recycle = getLocalCache('project_recycle');
+        if (!recycle) {
+            return true;
+        }
+        const recycleObj = JSON.parse(recycle);
+        const firstData = recycleObj.datas.length ? recycleObj.datas[0] : null;
+        if (!firstData || firstData.projectID !== projectObj.project.ID()) {
+            return true;
+        }
+        const parentID = firstData.sourceType === projectObj.project.Bills.getSourceType() ? firstData.ParentID : firstData.billsItemID;
+        const parent = projectObj.project.mainTree.findNode(parentID);
+        // parentID为-1时,为大项费用
+        if (parentID !== -1 && !parent) {
+            return true;
+        }
+        return false;
+    },
     haveCalcBase : function (node) {
     haveCalcBase : function (node) {
         if(node.data.calcBase ==null||node.data.calcBase ==undefined|| node.data.calcBase == ""){
         if(node.data.calcBase ==null||node.data.calcBase ==undefined|| node.data.calcBase == ""){
             return false;
             return false;
@@ -77,10 +99,9 @@ let BlockController = {
         }
         }
         return null;
         return null;
     },
     },
-
-    copyBlock:function (selection) {
+    extractBlockData: function (selection) {
         let startTime = +new Date();
         let startTime = +new Date();
-        let blockOjb = {
+        let blockObj = {
             compilationID:projectObj.project.projectInfo.compilation,
             compilationID:projectObj.project.projectInfo.compilation,
             datas:[]
             datas:[]
         };
         };
@@ -95,21 +116,31 @@ let BlockController = {
             }
             }
         }
         }
         if(firstNode.sourceType == projectObj.project.Bills.getSourceType()){
         if(firstNode.sourceType == projectObj.project.Bills.getSourceType()){
-            blockOjb.firstNodeType = firstNode.data.type;
+            // 特殊处理大项费用,因为DXFY在billType中为1,与blockType中的RATION冲突了
+            blockObj.firstNodeType = firstNode.data.type === billType.DXFY ? blockType.DXFY : firstNode.data.type;
         }else if(firstNode.sourceType == projectObj.project.Ration.getSourceType()){
         }else if(firstNode.sourceType == projectObj.project.Ration.getSourceType()){
-            blockOjb.firstNodeType = blockType.RATION;
+            blockObj.firstNodeType = blockType.RATION;
         }
         }
-        blockOjb.isFBFX = projectObj.project.Bills.isFBFX(firstNode);
+        blockObj.isFBFX = projectObj.project.Bills.isFBFX(firstNode);
         let ration_glj_Map = _.groupBy(projectObj.project.ration_glj.datas, 'rationID');
         let ration_glj_Map = _.groupBy(projectObj.project.ration_glj.datas, 'rationID');
         for(let cNode of copyNodes){
         for(let cNode of copyNodes){
-            blockOjb.datas.push(this.getNodeDatas(cNode,ration_glj_Map));
+            blockObj.datas.push(this.getNodeDatas(cNode,ration_glj_Map));
         }
         }
         let getDataTime = +new Date();
         let getDataTime = +new Date();
         console.log(`复制所用时间——${getDataTime - startTime}`);
         console.log(`复制所用时间——${getDataTime - startTime}`);
-        blockOjb.copyTime = +new Date();//设置复制时间,可以用来做过期处理
-        setLocalCache('project_block',JSON.stringify(blockOjb));
+        blockObj.copyTime = +new Date();//设置复制时间,可以用来做过期处理
+        setLocalCache('project_block',JSON.stringify(blockObj));
         let endTime = +new Date();
         let endTime = +new Date();
         console.log(`复制所用时间——${endTime - startTime}`);
         console.log(`复制所用时间——${endTime - startTime}`);
+        return blockObj;
+    },
+    copyBlock:function (selection) {
+        const block = this.extractBlockData(selection);
+        setLocalCache('project_block', JSON.stringify(block));
+    },
+    recycleBlock: function (selection) {
+        const block = this.extractBlockData(selection);
+        setLocalCache('project_recycle', JSON.stringify(block));
     },
     },
     getNodeDatas : function (node,ration_glj_Map) {
     getNodeDatas : function (node,ration_glj_Map) {
         let data = node.data;
         let data = node.data;
@@ -147,7 +178,21 @@ let BlockController = {
         this.confirmPaste(blockData,selected,position);
         this.confirmPaste(blockData,selected,position);
         //do paste
         //do paste
     },
     },
-
+    // 恢复删除节点
+    recoverBlock: function () {
+        const recycle = JSON.parse(getLocalCache('project_recycle'));
+        const firstData = recycle.datas[0];
+        const parentID = firstData.sourceType === projectObj.project.Bills.getSourceType() ? firstData.ParentID : firstData.billsItemID;
+        // 恢复到父节点最末子项
+        if (parentID !== -1) {
+            const parent = projectObj.project.mainTree.findNode(parentID);
+            this.confirmPaste(recycle, parent, 'sub');
+        } else {
+            // 恢复到最末根节点后项
+            const lastRoot = projectObj.project.mainTree.roots[projectObj.project.mainTree.roots.length - 1];
+            this.confirmPaste(recycle, lastRoot, 'next');
+        }
+    },
     initOptionDiv:function (selected,blockData) {
     initOptionDiv:function (selected,blockData) {
         let Bills = projectObj.project.Bills;
         let Bills = projectObj.project.Bills;
         if( blockData.firstNodeType == blockType.RATION){//如果剪切板中是复制的定额块
         if( blockData.firstNodeType == blockType.RATION){//如果剪切板中是复制的定额块
@@ -344,7 +389,9 @@ let BlockController = {
         let sels = projectObj.mainController.sheet.getSelections();
         let sels = projectObj.mainController.sheet.getSelections();
         //设置选中并更新下方显示
         //设置选中并更新下方显示
         projectObj.mainController.setTreeSelected(firstNode);
         projectObj.mainController.setTreeSelected(firstNode);
-        projectObj.mainController.sheet.setSelection(firstNode.serialNo(), sels[0].col, 1, 1);
+        const serialNo = firstNode.serialNo();
+        projectObj.mainController.sheet.setSelection(serialNo, sels[0].col, 1, 1);
+        projectObj.mainController.sheet.showRow(serialNo, GC.Spread.Sheets.VerticalPosition.center);
         return rationNodes;
         return rationNodes;
 
 
         function loadTreeNode(parentID,nextID,data,type) {
         function loadTreeNode(parentID,nextID,data,type) {

+ 2 - 0
web/building_saas/main/js/models/bills.js

@@ -787,6 +787,8 @@ var Bills = {
             updateData.user_id = userID;
             updateData.user_id = userID;
             $.bootstrapLoading.start();
             $.bootstrapLoading.start();
             CommonAjax.post("/bills/multiDelete", updateData, function () {
             CommonAjax.post("/bills/multiDelete", updateData, function () {
+                // 回收删除节点
+                BlockController.recycleBlock(selection);
                 let quantity_detail_datas = project.quantity_detail.datas;
                 let quantity_detail_datas = project.quantity_detail.datas;
                 let ration_datas = project.Ration.datas;
                 let ration_datas = project.Ration.datas;
                 let nodes = controller.tree.nodes;
                 let nodes = controller.tree.nodes;

+ 0 - 1
web/building_saas/main/js/models/exportStdInterfaceBase.js

@@ -402,7 +402,6 @@ const XML_EXPORT_BASE = (() => {
         window.localStorage.setItem('hardwareId', hardwareId);
         window.localStorage.setItem('hardwareId', hardwareId);
         return hardwareId;
         return hardwareId;
     }
     }
-
     // 数组打平成对象
     // 数组打平成对象
     function arrayToObj(arr) {
     function arrayToObj(arr) {
         let rst = {};
         let rst = {};

+ 2 - 1
web/building_saas/main/js/models/main_consts.js

@@ -389,7 +389,8 @@ const blockType ={
     FB:2,//分部
     FB:2,//分部
     FX:3,//分项
     FX:3,//分项
     BILL:4,//清单
     BILL:4,//清单
-    BX:5//补项
+    BX:5,//补项
+    DXFY:6//大项费用
 };
 };
 
 
 const filterType = {
 const filterType = {

+ 10 - 0
web/building_saas/main/js/views/project_view.js

@@ -1553,6 +1553,16 @@ var projectObj = {
                         BlockController.pasteBlock(project.mainTree.selected);
                         BlockController.pasteBlock(project.mainTree.selected);
                     }
                     }
                 },
                 },
+                "recoverDeletedNodes": {
+                    name: '恢复删除节点',
+                    icon: 'fa-undo',
+                    disabled: function (){
+                        return BlockController.recoverBlockDisabled();
+                    },
+                    callback: function () {
+                        BlockController.recoverBlock();
+                    }
+                },
                 "editEngineer": {
                 "editEngineer": {
                     name: '编辑工程内容',
                     name: '编辑工程内容',
                     icon: 'fa-edit',
                     icon: 'fa-edit',