Explorar el Código

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost into 1.0.0_online

zhongzewei hace 6 años
padre
commit
93f655ec19

+ 9 - 3
public/web/tree_sheet/tree_sheet_helper.js

@@ -529,7 +529,10 @@ var TREE_SHEET_HELPER = {
 
         if(isRationNode){
             TreeNodeCellType.prototype.createEditorElement = function (context) {
-                return document.createElement("div");
+                let div = document.createElement("div");
+                div.setAttribute("gcUIElement", "gcEditingInput");
+                $(div).attr("id", 'rationCheckBox');
+                return div;
             };
 
             TreeNodeCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) {
@@ -551,6 +554,10 @@ var TREE_SHEET_HELPER = {
                 return $editor;
             };
 
+            TreeNodeCellType.prototype.deactivateEditor = function (editorContext, context) {
+                    console.log("hehe")
+            };
+
             TreeNodeCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect, context) {
                 let me = this;
                 $(editorContext).append(`<div><ul class="es-list" style="display: block;"></ul></div>`);//<li class="" data-value="" style=""> <br></li> //background-color:${cellStyle.backColor}
@@ -584,7 +591,7 @@ var TREE_SHEET_HELPER = {
                     });
                     if( $('#esInput').val()) setCursor( $("#esInput")[0], $('#esInput').val().length)
                 });
-
+                console.log("update")
             };
 
             TreeNodeCellType.prototype.processKeyDown = function (e, context){ //当用isReservedKey 不拦截编辑模式时的input框ctrl + c时,在非编辑模式的ctrl + c事件也需要自已处理,所以在这里再调用一下复制命令
@@ -599,7 +606,6 @@ var TREE_SHEET_HELPER = {
                  $('#esInput').val(value);
             };
             TreeNodeCellType.prototype.getEditorValue = function (editor, context) {
-                console.log($('#esInput').val());
                 return  $('#esInput').val()!==''? $('#esInput').val():null;
             };
 

+ 160 - 98
web/building_saas/main/html/main.html

@@ -1671,121 +1671,183 @@
             </div>
         </div>
     </div>
-<!--清单问号弹出 补注弹窗-->
-<div class="modal fade" id="billsQuestionModal" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title">补注</h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
-            </div>
-            <div class="modal-body">
-                <div class="modal-auto-height" id="billsQuestionContent">
-                    <h3>标题1</h3>
-                    <h4>标题2</h4>
-                    <h5>标题3</h5>
-                    <p>这是一行文本</p>
-                    <p>这是一行<b>文本</b></p>
-                    <p class="text-indent">这是一行带缩进的文本</p>
-                    <table class="table table-sm table-bordered">
-                        <tr><th>表头1</th><th>表头2</th><th>表头3</th></tr>
-                        <tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
-                        <tr><td>内容4</td><td>内容5</td><td>内容6</td></tr>
-                    </table>
+    <!--清单问号弹出 补注弹窗-->
+    <div class="modal fade" id="billsQuestionModal" data-backdrop="static">
+        <div class="modal-dialog modal-lg" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">补注</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <div class="modal-auto-height" id="billsQuestionContent">
+                        <h3>标题1</h3>
+                        <h4>标题2</h4>
+                        <h5>标题3</h5>
+                        <p>这是一行文本</p>
+                        <p>这是一行<b>文本</b></p>
+                        <p class="text-indent">这是一行带缩进的文本</p>
+                        <table class="table table-sm table-bordered">
+                            <tr><th>表头1</th><th>表头2</th><th>表头3</th></tr>
+                            <tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
+                            <tr><td>内容4</td><td>内容5</td><td>内容6</td></tr>
+                        </table>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
                 </div>
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
-</div>
-<!--定额弹出 说明 和 工程量计算规则-->
-<div class="modal fade" id="questionModal" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
-        <div class="modal-content">
-            <div class="modal-body">
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                </button>
-                <ul class="nav nav-tabs mb-3" role="tablist">
-                    <li class="nav-item">
-                        <a class="nav-link active px-3" data-toggle="tab" href="#m-explanation" id="questionTab1" role="tab">说明</a>
-                    </li>
-                    <li class="nav-item">
-                        <a class="nav-link px-3" data-toggle="tab" href="#m-ruleText" id="questionTab2" role="tab">工程量计算规则</a>
-                    </li>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="m-explanation" role="tabpanel">
-                        <div class="modal-auto-height" id="questionContent1">
-                            <h3>标题1</h3>
-                            <h4>标题2</h4>
-                            <h5>标题3</h5>
-                            <p>这是一行文本</p>
-                            <p>这是一行<b>文本</b></p>
-                            <p class="text-indent">这是一行带缩进的文本</p>
-                            <table class="table table-sm table-bordered">
-                                <tr><th>表头1</th><th>表头2</th><th>表头3</th></tr>
-                                <tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
-                                <tr><td>内容4</td><td>内容5</td><td>内容6</td></tr>
-                            </table>
+    <!--定额弹出 说明 和 工程量计算规则-->
+    <div class="modal fade" id="questionModal" data-backdrop="static">
+        <div class="modal-dialog modal-lg" role="document">
+            <div class="modal-content">
+                <div class="modal-body">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                    <ul class="nav nav-tabs mb-3" role="tablist">
+                        <li class="nav-item">
+                            <a class="nav-link active px-3" data-toggle="tab" href="#m-explanation" id="questionTab1" role="tab">说明</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link px-3" data-toggle="tab" href="#m-ruleText" id="questionTab2" role="tab">工程量计算规则</a>
+                        </li>
+                    </ul>
+                    <div class="tab-content">
+                        <div class="tab-pane active" id="m-explanation" role="tabpanel">
+                            <div class="modal-auto-height" id="questionContent1">
+                                <h3>标题1</h3>
+                                <h4>标题2</h4>
+                                <h5>标题3</h5>
+                                <p>这是一行文本</p>
+                                <p>这是一行<b>文本</b></p>
+                                <p class="text-indent">这是一行带缩进的文本</p>
+                                <table class="table table-sm table-bordered">
+                                    <tr><th>表头1</th><th>表头2</th><th>表头3</th></tr>
+                                    <tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
+                                    <tr><td>内容4</td><td>内容5</td><td>内容6</td></tr>
+                                </table>
+                            </div>
                         </div>
-                    </div>
-                    <div class="tab-pane" id="m-ruleText" role="tabpanel">
-                        <div class="modal-auto-height" id="questionContent2">
-                            <h3>标题x1</h3>
-                            <h4>标题2</h4>
-                            <h5>标题3</h5>
-                            <p>这是一行文本</p>
-                            <p>这是一行<b>文本</b></p>
-                            <p class="text-indent">这是一行带缩进的文本</p>
-                            <table class="table table-sm table-bordered">
-                                <tr><th>表头1</th><th>表头2</th><th>表头3</th></tr>
-                                <tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
-                                <tr><td>内容4</td><td>内容5</td><td>内容6</td></tr>
-                            </table>
+                        <div class="tab-pane" id="m-ruleText" role="tabpanel">
+                            <div class="modal-auto-height" id="questionContent2">
+                                <h3>标题x1</h3>
+                                <h4>标题2</h4>
+                                <h5>标题3</h5>
+                                <p>这是一行文本</p>
+                                <p>这是一行<b>文本</b></p>
+                                <p class="text-indent">这是一行带缩进的文本</p>
+                                <table class="table table-sm table-bordered">
+                                    <tr><th>表头1</th><th>表头2</th><th>表头3</th></tr>
+                                    <tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
+                                    <tr><td>内容4</td><td>内容5</td><td>内容6</td></tr>
+                                </table>
+                            </div>
                         </div>
                     </div>
                 </div>
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                </div>
             </div>
         </div>
     </div>
-</div>
-<!--弹出 生成组价模板-->
-<div class="modal fade" id="zujiamb" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title">选择模板存储位置</h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
-            </div>
-            <div class="modal-body">
-                <div class="form-group">
-                    <label>模板分类</label>
-                    <select class="form-control" id="select_block_category"><option>1.分类1</option><option>2.分类2</option></select>
-                </div>
-                <div class="form-group">
-                    <div class="form-check form-check-inline">
-                        <input class="form-check-input" type="checkbox" name="inlineRadioOptions" id="inlinecheckbox1" value="option1">
-                        <label class="form-check-label" for="inlinecheckbox1">当存在同名模板时,提示是否覆盖</label>
+    <!--弹出 生成组价模板-->
+    <div class="modal fade" id="zujiamb" data-backdrop="static">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">选择模板存储位置</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <div class="form-group">
+                        <label>模板分类</label>
+                        <select class="form-control" id="select_block_category"><option>1.分类1</option><option>2.分类2</option></select>
+                    </div>
+                    <div class="form-group">
+                        <div class="form-check form-check-inline">
+                            <input class="form-check-input" type="checkbox" name="inlineRadioOptions" id="ckb_block_exist_cover" value="option1">
+                            <label class="form-check-label" for="ckb_block_exist_cover">当存在同名模板时,提示是否覆盖</label>
+                        </div>
                     </div>
                 </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-primary" data-dismiss="modal" id="btn_block_createBlocks">确定生成</button>
+                </div>
             </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" data-dismiss="modal" id="btn_block_createBlocks">确定生成</button>
+        </div>
+    </div>
+    <!--弹出 匹配原则-->
+    <div class="modal fade" id="blockAdjustOptions" data-backdrop="static">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">快速组价</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <div class="form-group">
+                        <label>选择匹配模式:</label>
+                        <div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="checkbox" name="inlineRadioOptions" id="inlinecheckbox1" value="option1" checked>
+                                <label class="form-check-label" for="inlinecheckbox1">项目编码(前9位)</label>
+                            </div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="checkbox" name="inlineRadioOptions" id="inlinecheckbox2" value="option2">
+                                <label class="form-check-label" for="inlinecheckbox2">项目名称</label>
+                            </div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="checkbox" name="inlineRadioOptions" id="inlinecheckbox3" value="option3" checked>
+                                <label class="form-check-label" for="inlinecheckbox3">单位</label>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="exampleInputPassword1">插入为选定节点的:</label>
+                        <div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="radio" name="rationQuantity" id="inlineRadio21" value="option1" checked>
+                                <label class="form-check-label" for="inlineRadio21">根据含量计算定额工程量</label>
+                            </div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="radio" name="rationQuantity" id="inlineRadio22" value="option2">
+                                <label class="form-check-label" for="inlineRadio22">含量和定额工程量为零</label>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="exampleInputPassword1">清单下有定额时:</label>
+                        <div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="radio" name="rationCover" id="inlineRadio33" value="option3" checked>
+                                <label class="form-check-label" for="inlineRadio33">跳过不覆盖</label>
+                            </div>
+                            <div class="form-check form-check-inline">
+                                <input class="form-check-input" type="radio" name="rationCover" id="inlineRadio32" value="option2">
+                                <label class="form-check-label" for="inlineRadio32">直接覆盖</label>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-primary" data-dismiss="modal" id="btn_block_clone_ok">确定</button>
+                </div>
             </div>
         </div>
     </div>
-</div>
 
     <img src="/web/dest/css/img/folder_open.png" id="folder_open_pic" style="display: none">
     <img src="/web/dest/css/img/folder_close.png" id="folder_close_pic" style="display: none">

+ 15 - 4
web/building_saas/main/js/models/bills.js

@@ -722,9 +722,9 @@ var Bills = {
             let updateRation = false;
             for(let m_node of mainNodes){
                 if(m_node.sourceType == project.Bills.getSourceType()){
-                    if(m_node.preSibling){
+                    if(m_node.preSibling && !gljUtil.isDef(mainTreeMap[m_node.preSibling.data.ID])){ //有前一节点,并且前一节点不在删除的列表中
                         billsUpdate[m_node.preSibling.data.ID] = {
-                            NextSiblingID:m_node.nextSibling?m_node.nextSibling.data.ID:-1
+                            NextSiblingID:getNotDeleteNextID(m_node.nextSibling,mainTreeMap)
                         };
                         updateBill=true;
                     }
@@ -738,9 +738,7 @@ var Bills = {
                 updateNodes.push(m_node);
                 controller.tree.getAllSubNode(m_node,updateNodes);
             }
-            console.log(mainNodes);
             let refNodes = mbzm_obj.deleteReferenceRation(mainNodes,updateNodes);//删除子目关联定额节点
-            console.log(mainNodes);
             for(let u_node of updateNodes){
                 if(u_node.sourceType == project.Bills.getSourceType()){
                     billsUpdate[u_node.data.ID] = true;
@@ -804,6 +802,19 @@ var Bills = {
             }, function () {
                 $.bootstrapLoading.end();
             });
+
+            function getNotDeleteNextID(nextNode,map) {
+                if(nextNode){
+                    if(gljUtil.isDef(map[nextNode.data.ID])){
+                        return getNotDeleteNextID(nextNode.nextSibling,map)
+                    } else {
+                        return nextNode.data.ID
+                    }
+                }else {
+                    return -1
+                }
+            }
+
         };
         bills.prototype.setNodeToMapAndArray=function (node,map,array) {
             let nodeID = node.getID();

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

@@ -423,6 +423,7 @@ var Ration = {
                    }
                 }
                 project.projectGLJ.loadData(function () {
+                    mbzm_obj.nodeChanged = true;//子目模板关联刷新
                     gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected,"-111111111");//这里第二个参数是为了使改前和改后selectedID不一样,删除了的话下方的定额工料机不会刷新
                     project.calcProgram.calcNodesAndSave(refershNodes);
                     projectObj.mainController.refreshTreeNode(refershNodes, true);
@@ -439,7 +440,7 @@ var Ration = {
             let me = this;
             let project = projectObj.project, sheetController = projectObj.mainController;
             let engineering = projectInfoObj.projectInfo.property.engineering;
-            let selected = project.mainTree.selected, newSource = null, newNode = null,pre=null,br=null;
+            let selected = project.mainTree.selected, newSource = null, newNode = null,pre = null,br = null;
             let billItemID = null,serialNo=1,nextID=null;
             let needInstall = false;
             let newDatas = [];

+ 17 - 13
web/building_saas/main/js/views/block_lib.js

@@ -131,6 +131,7 @@ var blockLibObj = {
     },
     loadDetailDatas: function (node){
         let me = this;
+        if (!node) return;
         if (node.data.type == 2){
             let bill = node.data;
             let rations = bill.children;
@@ -412,6 +413,12 @@ var blockLibObj = {
         let idx = blockLibObj.mainTree.items.indexOf(node);
         blockLibObj.mainSheet.setValue(idx, 0, newName);
     },
+    moveBlock: function (parentID) {
+        // this.mainTreeController.moveTo(parentID);
+    },
+    delete: function () {
+        this.mainTreeController.delete();
+    },
     getCategories: function () {
         let nodes = [], node = blockLibObj.mainTree.items[0];
         nodes.push(node);
@@ -454,7 +461,7 @@ var blockLibObj = {
                         return me.curIsBlock();
                     },
                     callback: function (key, opt) {
-                        me.oneToOneClone();
+                        me.onCellDoubleClick();
                     }
                 },
                 "oneToMoreClone": {
@@ -493,14 +500,14 @@ var blockLibObj = {
                         return true;
                     },
                     callback: function (key, opt) {
-
+                        me.delete();
                     }
                 },
                 "moveBlock": {
                     name: '移动模板',
                     icon: "cut",
                     disabled: function () {
-
+                        return true;
                     },
                     visible: function(key, opt){
                         return me.curIsBlock();
@@ -517,23 +524,20 @@ var blockLibObj = {
         me.mainTree.selected = me.mainTree.items[me.mainSheet.getActiveRowIndex()];
     },
     onCellDoubleClick: function (sender, args) {
-        blockLibObj.oneToOneClone();
-    },
-    oneToOneClone: function () {
-        let me = blockLibObj;
         let projectNode = projectObj.project.mainTree.selected;
         if (!calcTools.isLeafBill(projectNode)) return;
-
+        $("#blockAdjustOptions").modal({show: true});
+    },
+    oneToOneClone: function (projectNode, block) {
         // 这里再次封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
         // 这里结构作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
         // 该操作前提:当前块文件的全部数据已从后台取到前台。
-        let block = me.mainTree.selected.data;
         let vBlock_WC = {
-            compilationID: block.compilationID,
-            copyTime: block.copyTime,
+            compilationID: block.data.compilationID,
+            copyTime: block.data.copyTime,
             firstNodeType: 1,           // 强制改成1 (因为是从清单下的定额开始。清单自身的还是保留,暂不使用使用)。
-            isFBFX: block.isFBFX,
-            datas: block.children       // rations
+            isFBFX: block.data.isFBFX,
+            datas: block.data.children       // rations
         };
         BlockController.confirmPaste(vBlock_WC, projectNode, 'sub');
     },

+ 4 - 0
web/building_saas/main/js/views/mbzm_view.js

@@ -57,6 +57,9 @@ let mbzm_obj={
         this.sheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
         this.spread.bind(GC.Spread.Sheets.Events.ButtonClicked, installationFeeObj.onPositionButtonClick);//共用一个位置选择器
         this.sheet.name('ration_template');
+        if(projectReadOnly){
+            disableSpread(this.spread);
+        }
     },
     refresh:function () {
         let total = $('#mbzmSpread').parent().height();
@@ -494,5 +497,6 @@ $('#next_mbzm').click(function () {
 });
 
 $('#apply_mbzm').click(function () {
+    if(projectReadOnly) return;
     mbzm_obj.applyTemplate();
 });

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

@@ -973,7 +973,6 @@ var projectObj = {
                 that.mainSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, that.onCellDoubleClick);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, that.onColumnWidthChanged);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ClipboardPasting, that.onClipboardPasting);
-
                 //let loadOtherStartTime = +new Date();
                 if(!projectReadOnly){
                     that.loadMainSpreadContextMenu();
@@ -1157,6 +1156,7 @@ var projectObj = {
             selector: '#billsSpread',
             selectableSubMenu: true,
             build: function ($trigger, e) {
+                projectObj.cusRationCombCheck(spread.getActiveSheet());
                 var target = SheetDataHelper.safeRightClickSelection($trigger, e, spread);
                 controller.setTreeSelected(controller.tree.items[target.row]);
                 return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
@@ -1512,7 +1512,6 @@ var projectObj = {
                         if (!$("#kmbk").is(":visible")){
                             $('#blockLibTab').click()
                         };
-
                         $("#zujiamb").modal({show: true});
                     },
                     visible: function(key, opt){
@@ -1993,6 +1992,12 @@ var projectObj = {
             if(field != null) projectObj.mainController.sheet.setSelection(newNode.serialNo(), colSettingObj.getColByField(field), 1, 1);  //自动定位到编号单元格
             projectObj.mainSpread.focus();
         }
+    },
+    cusRationCombCheck:function (sheet) {//检查自定义定额编号下拉框,右键的时候不自动消失,现手动结束编辑,并删除元素
+        if(sheet.isEditing()){
+            sheet.endEdit()
+        }
+        if($("#rationCheckBox").is(':visible'))  $("#rationCheckBox").parent().parent().remove();
     }
 
 
@@ -2944,6 +2949,10 @@ $(function () {
         $("#select_block_category")[0].selectedIndex = 0;
     });
 
+    $("#blockAdjustOptions").on('show.bs.modal', function(){
+
+    });
+
     $("#btn_block_createBlocks").click(function () {
         if ($("#select_block_category")[0].options.length < 1) return;
         let cID = $("#select_block_category").val();
@@ -2990,6 +2999,12 @@ $(function () {
         $("#zujiamb").modal("hide");
     });
 
+    $("#btn_block_clone_ok").click(function () {
+        let projectNode = projectObj.project.mainTree.selected;
+        let block = blockLibObj.mainTree.selected;
+        blockLibObj.oneToOneClone(projectNode, block);
+    });
+
 
     function spreadAutoFocus(spread,relateSpread) {
         if(relateSpread&&relateSpread.getActiveSheet().isEditing()){//关联的spread不在编辑状态的情况下,才自动获得焦点;