Bläddra i källkod

复制粘贴兼容Unix、Mac 等系统回车换行符

chenshilong 6 år sedan
förälder
incheckning
c85aa8b00c

+ 1 - 0
config/gulpConfig.js

@@ -124,6 +124,7 @@ module.exports = {
         'web/building_saas/main/js/views/std_billsGuidance_lib.js',
         'web/building_saas/main/js/views/std_bills_lib.js',
         'web/building_saas/main/js/views/std_ration_lib.js',
+        'web/building_saas/main/js/views/block_lib.js',
         'web/building_saas/main/js/models/quantity_detail.js',
         'web/building_saas/main/js/views/glj_view_contextMenu.js',
         'web/building_saas/main/js/views/calc_program_view.js',

+ 24 - 0
web/building_saas/main/html/main.html

@@ -112,6 +112,9 @@
                           <li class="nav-item">
                               <a class="nav-link px-3" href="javascript:void(0)" id="stdRationTab" relaPanel="#de">定额库</a>
                           </li>
+<!--                          <li class="nav-item">
+                              <a class="nav-link px-3" href="javascript:void(0)" id="blockLibTab" relaPanel="#kmbk">块模板库</a>
+                          </li>-->
                       </ul>
                   </div>
               </div>
@@ -455,6 +458,26 @@
                                       <div class="main-data-bottom" id="stdSectionRations"></div>
                                   </div>
                               </div>
+                              <!--块模板库-->
+                              <div class="tab-pane" id="kmbk">
+                                  <div class="tools-bar-height-d container-fluid">
+                                      <div class="p-1 row">
+                                          <button id="btn_block_collapse" class="btn btn-primary btn-sm" type="button">展开/折叠</button>
+                                          <button id="btn_block_newFolder" class="btn btn-primary btn-sm" type="button">新建分类</button>
+                                          <button id="btn_block_newSubFolder" class="btn btn-warning btn-sm" type="button">新建子类</button>
+                                      </div>
+                                  </div>
+                                  <div class="top-content" style="background-color:#ff7e0e;overflow: hidden">
+                                      <div class="main-data-side-d" id="div_block_tree">
+                                      </div>
+                                  </div>
+                                  <div class="resize" id="kmbkResize" style="background: #F1F1F1"></div>
+                                  <div class="bottom-content" style="background-color:#50df89;">
+                                      <div class="main-data-bottom" id="div_block_detail">
+
+                                      </div>
+                                  </div>
+                              </div>
                           </div>
                       </div>
                   </div>
@@ -1550,6 +1573,7 @@
     <script type="text/javascript" src="/web/building_saas/main/js/views/std_billsGuidance_lib.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/std_bills_lib.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/std_ration_lib.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/block_lib.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/quantity_detail.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/glj_view_contextMenu.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_view.js"></script>

+ 186 - 0
web/building_saas/main/js/views/block_lib.js

@@ -0,0 +1,186 @@
+/**
+ * Created by CSL on 2018-09-19.
+ */
+var blockLibObj = {
+    datas: [],
+    mainSpread: null,
+    mainSheet: null,
+    mainSetting: {
+        header:[
+            {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String"}
+        ],
+        view:{
+            comboBox:[],
+            lockColumns:[],
+            colHeaderHeight: CP_Col_Width.colHeader,
+            rowHeaderWidth: CP_Col_Width.rowHeader
+        }
+    },
+    buildSheet: function (){
+        let me = this;
+        me.datas = [];
+        if (me.mainSpread) {
+            me.mainSpread.destroy();
+            me.mainSpread = null;
+        };
+
+        me.mainSpread = sheetCommonObj.buildSheet($('#div_block_tree')[0], me.mainSetting, me.datas.length);
+        sheetCommonObj.spreadDefaultStyle(me.mainSpread);
+        me.mainSheet = me.mainSpread.getSheet(0);
+        // sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
+    },
+    showData: function () {
+        let me = this;
+        let sheet =me.mainSheet;
+        let cols = me.mainSetting.header;
+        let datas = me.datas;
+        let fuc = function () {
+            sheet.setRowCount(datas.length);
+            me.initTree(true);
+            // sheet.setFormatter(-1, 1, '@');
+            for(let col = 0, cLen = cols.length; col < cLen; col++){
+                // sheet.getRange(-1, col, -1, 1).hAlign(GC.Spread.Sheets.HorizontalAlign[cols[col]['hAlign']]);
+                // sheet.getRange(-1, col, -1, 1).vAlign(GC.Spread.Sheets.VerticalAlign[cols[col]['vAlign']]);
+                for(let row = 0, rLen = datas.length; row < rLen; row++){
+                    sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
+                }
+            }
+        };
+        sheet.suspendPaint();
+        sheet.suspendEvent();
+        fuc();
+        sheet.resumePaint();
+        sheet.resumeEvent();
+    },
+    initTree: function (collapse) {
+        let me = this;
+        me.mainSheet.getRange(-1, 0, -1, 1).cellType(me.getTreeNodeCellType(me.datas));
+        for(let i =0, len = me.datas.length; i < len; i++){
+            if(me.datas[i].hasOwnProperty('items')){
+                let collapsed = false;
+                if(collapse){
+                    me.datas[i].collapsed = false;
+                    collapsed = true;
+                }else {
+                    collapsed = me.datas[i].collapsed == undefined ? true : me.datas[i].collapsed;
+                }
+            }
+        }
+    },
+    getTreeNodeCellType: function (data) {
+        var ns = GC.Spread.Sheets;
+        var rectW = 10;
+        var rectH = 10;
+        var margin = 3;
+        function TreeNodeCellType() {
+        }
+
+        function drowRect(ctx,x,y,w,h) {///
+            ctx.save();
+            ctx.strokeStyle = "gray";
+            ctx.translate(0.5,0.5);
+            ctx.beginPath();
+            var rectX = x+margin;
+            var rectY =  y+ Math.round(h/2)-rectH/2;
+            ctx.moveTo(rectX, rectY);
+            ctx.lineTo(rectX, rectY+rectH);
+            ctx.lineTo(rectX+rectW, rectY+rectH);
+            ctx.lineTo(rectX+rectW, rectY);
+            ctx.lineTo(rectX, rectY);
+            ctx.moveTo(rectX+rectW, y+Math.round(h/2));
+            ctx.lineTo(rectX+rectW+5, y+Math.round(h/2));
+            ctx.stroke();
+            ctx.restore();
+        }
+
+        function drowSymbol(ctx,x,y,w,h,collapsed) {
+            ctx.save();
+            ctx.strokeStyle = "#000000";
+            ctx.translate(0.5, 0.5);
+            ctx.beginPath();
+            ctx.moveTo(x+margin+2, y+Math.round(h/2));
+            ctx.lineTo(x+margin+8, y+Math.round(h/2));
+            var rectY =  y+ Math.round(h/2)-rectH/2;
+            if(collapsed){
+                ctx.moveTo(x+margin+rectW/2,rectY+2);
+                ctx.lineTo(x+margin+rectW/2,rectY+2+6);
+            }
+            ctx.stroke();
+            ctx.restore();
+        }
+
+        function drowSubItem(ctx,x,y,w,h,offset,nextItem) {
+            offset+=6;
+            ctx.save();
+            ctx.strokeStyle = "gray";
+            ctx.translate(0.5, 0.5);
+            ctx.beginPath();
+            ctx.moveTo(x+offset, y);
+            ctx.lineTo(x+offset, y+Math.round(h/2));
+            offset+=9;
+            ctx.lineTo(x+offset, y+Math.round(h/2));
+            if(nextItem&&!nextItem.hasOwnProperty('items')){
+                ctx.moveTo(x+offset-9, y+Math.round(h/2));
+                ctx.lineTo(x+offset-9, y+h);
+            }
+            ctx.stroke();
+            ctx.restore();
+            return offset;
+        }
+
+        TreeNodeCellType.prototype = new ns.CellTypes.Text();
+        TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
+            if(value!=null){
+                var offset = margin+rectW+6;
+                var recode = data[options.row];
+                if(recode&&recode.hasOwnProperty('items')){
+                    drowRect(ctx,x,y,w,h);
+                    var collapsed = recode.collapsed==undefined?true:recode.collapsed;//options.sheet.getTag(options.row,options.col);
+                    drowSymbol(ctx,x,y,w,h,collapsed);
+                }else if(recode&&!recode.hasOwnProperty('items')){
+                    offset= drowSubItem(ctx,x,y,w,h,offset,data[options.row+1]);
+                    offset+=1;
+                }
+                arguments[2] = x + offset;
+                arguments[4] = w - offset;
+                GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
+
+            }
+        };
+        TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
+            return {
+                x: x,
+                y: y,
+                row: context.row,
+                col: context.col,
+                cellStyle: cellStyle,
+                cellRect: cellRect,
+                sheetArea: context.sheetArea
+            };
+        }
+        TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
+            var recode = data[hitinfo.row];
+            if(recode&&recode.hasOwnProperty('items')){
+                var hoffset= hitinfo.cellRect.x+3;
+                if (hitinfo.x > hoffset && hitinfo.x < hoffset + 10){
+                    var collapsed = recode.collapsed==undefined?true:recode.collapsed;
+                    collapsed = !collapsed
+                    recode.collapsed=collapsed;
+                    //hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,collapsed);
+                    hitinfo.sheet.getRange(hitinfo.row+1, -1, recode.items.length, -1).visible(!collapsed);
+                    hitinfo.sheet.invalidateLayout();
+                    hitinfo.sheet.repaint();
+                }
+            }
+        };
+        return new TreeNodeCellType();
+    }
+};
+
+$(document).ready(function(){
+/*    if (!blockLibObj.mainSpread){
+        blockLibObj.buildSheet();
+        blockLibObj.showData();
+    }*/
+
+});

+ 11 - 1
web/building_saas/main/js/views/project_view.js

@@ -642,7 +642,17 @@ var projectObj = {
             function getPasteTextArr(info) {
                 let copyText = info.pasteData.text.trim();
                 if (!copyText) return null;
-                let rows = copyText.split('\r\n');
+                let spliter = '';
+                if (copyText.includes('\r\n')){
+                    spliter = '\r\n'
+                }
+                else if (copyText.includes('\n')){      // 兼容Unix、Mac 等系统回车换行符
+                    spliter = '\n'
+                }
+                else{
+                    spliter = '\r'
+                };
+                let rows = copyText.split(spliter);
                 let rstArr = [];
                 for (let row of rows) {
                     row = row.trim();