فهرست منبع

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuOperation

TonyKang 6 سال پیش
والد
کامیت
777a4f7397

+ 1 - 1
modules/bills_lib/models/bills_lib_interfaces.js

@@ -219,7 +219,7 @@ billsLibDao.prototype.getCurrentUniqId = function(callback){
 }
 //----------------------------Bills---------------------
 billsLibDao.prototype.getBills = function (billsLibId, callback) {
-    Bills.find({billsLibId: billsLibId, deleted: false}, "-_id",  function(err, billsData){
+    Bills.find({billsLibId: billsLibId, deleted: false}, "-_id", {lean: true}, function(err, billsData){
         if(err){
             callback(1, "Error", null);
         }

+ 2 - 0
modules/ration_repository/controllers/ration_repository_controller.js

@@ -193,7 +193,9 @@ class RationRepositoryController extends baseController {
                     throw 'excel没有对应数据';
                 }
                 const result = type === 'source_file' ?
+                    // 导入原始数据
                     await rationItem.batchAddFromExcel(rationRepId, sheet[0].data) :
+                    // 导入内部数据
                     await rationItem.batchUpdateSectionIdFromExcel(sheet[0].data);
                 if (rationItem.failGLJList && rationItem.failGLJList.length > 0) {
                     responseData.msg = rationItem.failGLJList.join("\r\n");

+ 38 - 13
modules/ration_repository/models/ration_item.js

@@ -10,6 +10,7 @@ let rationRepositoryDao = require('./repository_map');
 const scMathUtil = require('../../../public/scMathUtil').getUtil();
 const rationItemModel = mongoose.model('std_ration_lib_ration_items');
 const stdRationLibModel = mongoose.model('std_ration_lib_map');
+const stdRationSectionModel = mongoose.model('std_ration_lib_ration_chapter_trees');
 const compleRationModel = mongoose.model('complementary_ration_items');
 import STDGLJListModel from '../../std_glj_lib/models/gljModel';
 
@@ -808,14 +809,14 @@ rationItemDAO.prototype.exportExcelData = async function(rationRepId) {
         rationRepId: rationRepId
     };
     // @todo 限制导出的数量以防内存溢出
-    const rationDataList = await this.getRationItemByCondition(condition, ['name', 'code', 'ID', 'sectionId', 'feeType', 'caption', 'basePrice']);
+    const rationDataList = await this.getRationItemByCondition(condition, ['name', 'code', 'ID', 'sectionId', 'feeType', 'caption', 'basePrice', 'jobContent', 'annotation']);
 
     // 整理数据
     let rationData = [];
     for (const tmp of rationDataList) {
         const sectionId = tmp.sectionId <= 0 || tmp.sectionId === undefined ? null : tmp.sectionId;
         const feeType = tmp.feeType === '' || tmp.feeType === undefined ? null : tmp.feeType;
-        const ration = [sectionId, feeType, tmp.ID, tmp.code, tmp.name, tmp.caption, tmp.basePrice];
+        const ration = [sectionId, feeType, tmp.ID, tmp.code, tmp.name, tmp.caption, tmp.basePrice, tmp.jobContent, tmp.annotation];
         rationData.push(ration);
     }
     //根据编号排序,优先级:number-number-..., number, Anumber....
@@ -881,7 +882,7 @@ rationItemDAO.prototype.exportExcelData = async function(rationRepId) {
         }
         return rst;
     });*/
-    const excelData = [['树ID', '取费专业', '定额ID', '定额编码', '定额名', '定额显示名称', '基价']];
+    const excelData = [['树ID', '取费专业', '定额ID', '定额编码', '定额名', '定额显示名称', '基价', '工作内容', '附注']];
     excelData.push.apply(excelData, rationData);
 
     return excelData;
@@ -898,12 +899,17 @@ rationItemDAO.prototype.batchUpdateSectionIdFromExcel = async function(data) {
         return false;
     }
     // 批量执行update
-    let bulkOprs = [];
+    let rationTasks = [],
+        sectionIDs = [];
     for (const tmp of data) {
         let rationId = parseInt(tmp[2]);
         rationId = isNaN(rationId) || rationId <= 0 ? 0 : rationId;
         let sectionId = parseInt(tmp[0]);
         sectionId = isNaN(sectionId) || sectionId <= 0 ? 0 : sectionId;
+        if (sectionId <= 0 || rationId <= 0) {
+            continue;
+        }
+        sectionIDs.push(sectionId);
         // 取费专业
         let feeType = tmp[1] ? parseInt(tmp[1]) : null;
         feeType = isNaN(feeType) || feeType <= 0 ? null : feeType;
@@ -911,16 +917,35 @@ rationItemDAO.prototype.batchUpdateSectionIdFromExcel = async function(data) {
         name = name ? name : '';
         let caption = tmp[5];
         caption = caption ? caption : '';
-        if (sectionId <= 0 || rationId <= 0) {
-            continue;
-        }
-        bulkOprs.push({updateOne: {filter: {ID: rationId}, update: {$set: {sectionId: sectionId, feeType: feeType, name: name, caption: caption}}}});
-    }
-    if(bulkOprs.length <= 0){
+        let jobContent = tmp[7] ? tmp[7] : '';
+        let annotation = tmp[8] ? tmp[8] : '';
+        rationTasks.push({updateOne: {
+            filter: {ID: rationId},
+            update: {$set: {
+                sectionId,
+                feeType,
+                name,
+                caption,
+                jobContent,
+                annotation
+            }}}});
+    }
+    if(rationTasks.length <= 0){
         throw '无有效数据(树ID、定额ID不为空、且为数值)';
     }
-    await rationItemModel.bulkWrite(bulkOprs);
+    // 更新定额数据
+    await rationItemModel.bulkWrite(rationTasks);
+    // 更新章节树工作内容、附注节点选项(全设置为ALL)
+    sectionIDs = Array.from(new Set(sectionIDs));
+    if (sectionIDs.length) {
+        await stdRationSectionModel.updateMany(
+            {ID: {$in: sectionIDs}},
+            {$set: {
+                jobContentSituation: 'ALL',
+                annotationSituation: 'ALL'
+            }}
+        )
+    }
 };
 
-module.exports = new rationItemDAO();
-
+module.exports = new rationItemDAO();

+ 3 - 2
modules/std_glj_lib/models/gljModel.js

@@ -58,7 +58,8 @@ class GljDao  extends OprDao{
     }
     //test
     getGljTypes (gljLibId, callback){
-        gljClassModel.find({"repositoryId": gljLibId, "$or": [{"isDeleted": null}, {"isDeleted": false}, {deleted: false} ]},function(err,data){
+        gljClassModel.find({"repositoryId": gljLibId, "$or": [{"isDeleted": null}, {"isDeleted": false}, {deleted: false} ]},
+            '-_id', {lean: true}, function(err,data){
             if(err) callback("获取工料机类型错误!",false)
             else {
                 callback(0, data);
@@ -110,7 +111,7 @@ class GljDao  extends OprDao{
         for(let i = 0, len = findCount; i < len; i++){
             functions.push((function(flag) {
                 return function (cb) {
-                    gljModel.find({repositoryId: repositoryId, deleted: null}, cb).skip(flag).sort({ID: 1}).limit(500);
+                    gljModel.find({repositoryId: repositoryId, deleted: null}, '-_id', {lean: true}, cb).skip(flag).sort({ID: 1}).limit(500);
                 }
             })(i*500));
         }

+ 5 - 3
public/web/sheet/sheet_common.js

@@ -239,15 +239,17 @@ var sheetCommonObj = {
                     itemObj = {};
                 }
             } else if (pastedInfo.pasteData.text[i] === "\t" || pastedInfo.pasteData.text[i] === "\r") {
-                itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx, i);
+                if (setting.header[propId]) {
+                    itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx, i);
+                }
                 propId++;
                 preStrIdx = i + 1;
                 //if the last copied-cell were empty, should check whether the end of text
-                if (i == pastedInfo.pasteData.text.length - 1) {
+                if (i == pastedInfo.pasteData.text.length - 1 && setting.header[propId]) {
                     itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx);
                     rst.push(itemObj);
                 }
-            } else if (i == pastedInfo.pasteData.text.length - 1) {
+            } else if (i == pastedInfo.pasteData.text.length - 1 && setting.header[propId]) {
                 itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx);
                 rst.push(itemObj);
             }

+ 12 - 3
web/common/js/slideResize.js

@@ -15,6 +15,8 @@
  * */
 
 const SlideResize = (function() {
+    // 水平拖动条的宽度
+    const resizeWidth = 10;
     //函数防抖
     let timer = null;
     function deBounce(fn, wait) {
@@ -26,14 +28,13 @@ const SlideResize = (function() {
     //设置水平拖动条的宽度
     //@param {Object dom}resize滚动条
     function setResizeWidth (resize) {
-        const fixedWidth = 10;
         //滚动条节点 及 同层非滚动条节点的索引
         let bros = resize.parent().children();
         let index = bros.index(resize),
             otherIndex = index ? 0 : 1;
         const other = resize.parent().children(`:eq(${otherIndex})`);
         let resizeParentWidth = resize.parent().width();
-        let resizeDecimalWidth = fixedWidth / resizeParentWidth,
+        let resizeDecimalWidth = resizeWidth / resizeParentWidth,
             otherDecimalWidth = 1 - resizeDecimalWidth;
         let resizePercentWidth = resizeDecimalWidth * 100 + '%',
             otherPercentWidth = otherDecimalWidth * 100 + '%';
@@ -259,5 +260,13 @@ const SlideResize = (function() {
         }
     }
 
-    return {setResizeWidth, horizontalSlide, loadHorizonWidth, verticalSlide, loadVerticalHeight, loadMultiVerticalHeight}
+    return {
+        resizeWidth,
+        setResizeWidth,
+        horizontalSlide,
+        loadHorizonWidth,
+        verticalSlide,
+        loadVerticalHeight,
+        loadMultiVerticalHeight
+    }
 })();

+ 11 - 4
web/maintain/billsGuidance_lib/html/zhiyin.html

@@ -68,18 +68,25 @@
                         <div style="width: 99%; float: left" id="de">
                             <div class="sidebar-tools-bar container-fluid tools-bar-height-q">
                                 <div class="p-1 row">
-                                    <div class="col-5 p-0">
+                                    <div class="col-4 p-0">
                                         <select class="form-control form-control-sm" id="rationLibSel">
                                         </select>
                                     </div>
-                                    <div class=" input-group col-5">
+                                    <div class=" input-group col-5 pl-0">
                                         <input id="searchText" type="text" class="form-control form-control-sm" placeholder="搜索定额">
                                         <span class="input-group-btn">
                                         <button id="searchBtn" class="btn btn-secondary btn-sm" type="button"><i class="fa fa-search" aria-hidden="true"></i></button>
                                     </span>
                                     </div>
-                                    <div class="col-2">
-                                        <button id="insertRation" class="btn btn-primary btn-sm" type="button">插入定额</button>
+                                    <div class="col-3">
+                                        <div class="row">
+                                            <div class="col-5 pl-0">
+                                                <button id="insertRation" class="btn btn-primary btn-sm" type="button">插入定额</button>
+                                            </div>
+                                            <div class="col-5">
+                                                <button id="insertAll" class="btn btn-primary btn-sm" type="button">插入全部</button>
+                                            </div>
+                                        </div>
                                     </div>
                                 </div>
                                 <!--搜索结果窗体-->

+ 17 - 1
web/maintain/billsGuidance_lib/js/billsGuidance.js

@@ -443,6 +443,7 @@ const billsGuidance = (function () {
         //全部设为无效
         $('.tools-btn').children().addClass('disabled');
         $('#insertRation').addClass('disabled');
+        $('#insertAll').addClass('disabled');
         $('.main-bottom-content').find('textarea').attr('readonly', true);
         //插入
         if(bills.tree.selected && bills.tree.selected.guidance.tree){
@@ -484,6 +485,7 @@ const billsGuidance = (function () {
         //插入定额
         if(node && (node.children.length === 0 || allRationChildren(node))){
             $('#insertRation').removeClass('disabled');
+            $('#insertAll').removeClass('disabled');
         }
         //备注,奇数节点可用
         if(node && (node.depth() + 1) % 2 === 1 && node.data.type !== itemType.ration){
@@ -1135,10 +1137,15 @@ const billsGuidance = (function () {
     }
     //获取选中的定额表行
     //@return {Array}
-    function getCheckedRationRows(){
+    function getCheckedRationRows(all){
         let rst = [];
         let sheet = ration.workBook.getActiveSheet();
         for(let i = 0; i < sheet.getRowCount(); i++){
+            // 全选
+            if (all) {
+                rst.push(i);
+                continue;
+            }
             let checked = sheet.getValue(i, 0);
             if(checked){
                 rst.push(i);
@@ -1485,6 +1492,15 @@ const billsGuidance = (function () {
                 clearCheckedRation(checkedRows);
             }
         });
+        // 插入全部定额
+        $('#insertAll').click(function () {
+            let isAll = true;
+            let checkedRows = getCheckedRationRows(isAll);
+            let insertDatas = getInsertRations(checkedRows);
+            if(insertDatas.length > 0){
+                insert(insertDatas, false);
+            }
+        });
         //搜索定额
         $('#searchBtn').click(function () {
             let searchStr = $('#searchText').val();

+ 99 - 87
web/maintain/ration_repository/js/coe.js

@@ -1,7 +1,6 @@
 /**
  * Created by CSL on 2017-05-18.
  */
-//modiyied by zhong on 2017/9/21
 
 $(document).ready(function () {
     function refreshALlWorkBook() {
@@ -530,15 +529,18 @@ let gljAdjOprObj = {
     workSheet: null,
     currentGljAdjList: [],
     gljList: [],//只含编号和名称的总工料机列表
+
     setting: {
         header: [
             {headerName:"调整类型", headerWidth:80, dataCode:"coeType", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
             {headerName:"人材机编码", headerWidth:80, dataCode:"gljCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"名称", headerWidth:100, dataCode:"gljName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: true},
+            // readOnly: true --> false,需要兼容粘贴列包含只读项
+            {headerName:"名称", headerWidth:100, dataCode:"gljName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
             {headerName:"操作符", headerWidth:60, dataCode:"operator", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
             {headerName:"数量", headerWidth:80, dataCode:"amount", dataType: "String", hAlign: "center", vAlign: "center" , readOnly: false},
             {headerName:"替换为编码", headerWidth:80, dataCode:"replaceCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"替换为名称", headerWidth:100, dataCode:"replaceName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: true}
+            // readOnly: true --> false
+            {headerName:"替换为名称", headerWidth:100, dataCode:"replaceName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false}
         ],
         comboItems: {
             //调整类型下拉菜单
@@ -558,7 +560,6 @@ let gljAdjOprObj = {
         me.workSheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
         me.workSheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
         me.workSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);
-        me.workSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
         me.workSheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
     },
     buildBaseCell: function (sheet) {
@@ -590,16 +591,37 @@ let gljAdjOprObj = {
     onEditStart: function (sender, args) {
         let me = gljAdjOprObj;
         let dataCode = me.setting.header[args.col].dataCode;
-        if(!coeOprObj.currentCoe || args.row >= me.currentGljAdjList.length  ){//超出编辑范围
-            if(dataCode=== 'gljCode' || dataCode=== 'replaceCode') args.cancel = true;
+        // 超出范围-没有选中的调整主项
+        if (!coeOprObj.currentCoe) {
+            args.cancel = true;
             return;
         }
-        if(dataCode=== 'gljCode' && me.currentGljAdjList[args.row].coeType !== '单个工料机'&& me.currentGljAdjList[args.row].coeType !== '替换人材机'){ //单个人才机和替换人材机,编码才能编辑
+        // 名称、替换为名称总是不可编辑(表头设置readOnly没有设置为true,因为需要粘贴)
+        let alwaysNotEditable = ['gljName', 'replaceName'];
+        if (alwaysNotEditable.includes(dataCode)) {
             args.cancel = true;
             return;
         }
-        if(dataCode=== 'replaceCode' && me.currentGljAdjList[args.row].coeType !== '替换人材机'){//替换人材机类型 替换编码才能编辑
+        // 新一行编辑时,除了总是可编辑的单元格:调整类型、操作符、数量,其他不可编辑
+        let alwaysEditable = ['coeType', 'operator', 'amount'];
+        if (args.row > me.currentGljAdjList.length - 1 &&
+            !alwaysEditable.includes(dataCode)) {
             args.cancel = true;
+            return;
+        }
+        let curSubCoe = me.currentGljAdjList[args.row];
+        if (!curSubCoe) {
+            return;
+        }
+        // 调整类型不为“单个工料机”和“替换人材机”时,人材机编码不可编辑
+        if (!['单个工料机', '替换人材机'].includes(curSubCoe.coeType) && dataCode === 'gljCode') {
+            args.cancel = true;
+            return;
+        }
+        // 调整类型不为“替换人材机”时,替换为编码不可编辑
+        if (curSubCoe.coeType !== '替换人材机' && dataCode === 'replaceCode') {
+            args.cancel = true;
+            return;
         }
     },
     onEditEnded: function (sender, args) {
@@ -667,85 +689,77 @@ let gljAdjOprObj = {
             }
         }
     },
-    onClipboardPasting: function (sender, info) {
-
-    },
-    getValidPasteDatas: function (pasteItems, info) {//2018-12-21  这里的if else 太多了,不好维护
+    getValidPasteData: function (pasteItems, info) {
         let me = gljAdjOprObj;
-        let rst = [];
-        for(let i = 0, len = pasteItems.length; i < len; i++){
-            let row = i + info.cellRange.row;
-            let validObj = {};
-            //update
-            if(row < me.currentGljAdjList.length){
-                let updateObj = me.currentGljAdjList[row];
-                validObj.index = row;//要有下标做为匹配的依据,不然在复制多行并且某个单元格是只读的情况下,这里返回的updateList个数会比选中的行数少,造成更新行和实际不匹配的情况
-                if(typeof pasteItems[i].coeType !== 'undefined' && typeof pasteItems[i].gljCode !== 'undefined'){
-                    let gljName = me.getGljName(pasteItems[i].gljCode, me.gljList);
-                    if((updateObj.coeType === '单个工料机'||updateObj.coeType === '替换人材机') && gljName){
-                        validObj.coeType = pasteItems[i].coeType;
-                        validObj.gljCode = pasteItems[i].gljCode;
-                        validObj.gljName = gljName;
-                    }
-                    else if((pasteItems[i].coeType !== '单个工料机'||pasteItems[i].coeType !== '替换人材机') && me.setting.comboItems.coeType.indexOf(pasteItems[i].coeType) !== -1){
-                        validObj.coeType = pasteItems[i].coeType;
-                    }
+        function isDef(v) {
+            return v !== undefined && v !== null;
+        }
+        // 粘贴项匹配处理
+        let rules = {
+            coeType: function (v, cur, tar) {
+                if (v === '') {
+                    tar.coeType = v;
+                    tar.gljCode = v;
+                    tar.gljName = v;
+                    tar.replaceCode = v;
+                    tar.replaceName = v;
+                } else if (me.setting.comboItems.coeType.includes(v)) {
+                    tar.coeType = v;
                 }
-                else if(typeof pasteItems[i].coeType === 'undefined' && typeof pasteItems[i].gljCode !== 'undefined'){
-                    let gljName = me.getGljName(pasteItems[i].gljCode, me.gljList);
-                    if(typeof updateObj.coeType !== 'undefined' && (updateObj.coeType === '单个工料机'||updateObj.coeType === '替换人材机') && gljName){
-                        validObj.gljCode = pasteItems[i].gljCode;
-                        validObj.gljName = gljName;
+            },
+            gljCode: function (v, cur, tar) {
+                if (v === '') {
+                    tar.gljCode = v;
+                    tar.gljName = v;
+                } else if (['单个工料机', '替换人材机'].includes(tar.coeType) ||
+                    (!isDef(tar.coeType) && isDef(cur) && ['单个工料机', '替换人材机'].includes(cur.coeType))) {
+                    let gljName = me.getGljName(v, me.gljList);
+                    if (gljName) {
+                        tar.gljCode = v;
+                        tar.gljName = gljName;
                     }
                 }
-                else if(typeof pasteItems[i].coeType !== 'undefined' && typeof pasteItems[i].gljCode === 'undefined'){
-                    if(me.setting.comboItems.coeType.indexOf(pasteItems[i].coeType) !== -1){
-                        validObj.coeType = pasteItems[i].coeType;
-                        if(validObj.coeType !== '单个工料机' && typeof updateObj.coeType !== '单个工料机' && updateObj.gljCode.toString().trim().length > 0){
-                            validObj.gljCode = '';
-                            validObj.gljName = '';
-                        }
-                    }
-                } else {
-                    if(typeof pasteItems[i].operator !== 'undefined' && me.setting.comboItems.operator.indexOf(pasteItems[i].operator) !== -1){
-                        validObj.operator = pasteItems[i].operator;
-                    }
-                    if(typeof pasteItems[i].amount !== 'undefined' && !isNaN(pasteItems[i].amount)){
-                        validObj.amount = pasteItems[i].amount;
-                    }
+            },
+            amount: function (v, cur, tar) {
+                if (!isNaN(v)) {
+                    tar.amount = v;
                 }
-                if(typeof pasteItems[i].replaceCode !== 'undefined' && updateObj.coeType === '替换人材机'){
-                    let gljName = me.getGljName(pasteItems[i].replaceCode, me.gljList);
-                    validObj.replaceCode = pasteItems[i].replaceCode;
-                    validObj.replaceName = gljName;
+            },
+            operator: function (v, cur, tar) {
+                if (v === '' || me.setting.comboItems.operator.includes(v)) {
+                    tar.operator = v;
                 }
-            }
-            else {
-                if(typeof pasteItems[i].coeType !== 'undefined' && typeof pasteItems[i].gljCode !== 'undefined'){
-                    let gljName = me.getGljName(pasteItems[i].gljCode, me.gljList);
-                    if((pasteItems[i].coeType === '单个工料机'||pasteItems[i].coeType === '替换人材机') && gljName){
-                        validObj.coeType = pasteItems[i].coeType;
-                        validObj.gljCode = pasteItems[i].gljCode;
-                        validObj.gljName = gljName;
-                    }
-                    else if((pasteItems[i].coeType !== '单个工料机'||pasteItems[i].coeType !== '替换人材机') && me.setting.comboItems.coeType.indexOf(pasteItems[i].coeType) !== -1){
-                        validObj.coeType = pasteItems[i].coeType;
+            },
+            replaceCode: function (v, cur, tar) {
+                if (v === '') {
+                    tar.replaceCode = v;
+                    tar.replaceName = v;
+                } else if (tar.coeType === '替换人材机' ||
+                    (!isDef(tar.coeType) && isDef(cur) && cur.coeType === '替换人材机')) {
+                    let replaceName = me.getGljName(v, me.gljList);
+                    if (replaceName) {
+                        tar.replaceCode = v;
+                        tar.replaceName = replaceName;
                     }
                 }
-                else if(typeof pasteItems[i].gljCode === 'undefined') {
-                    if(typeof pasteItems[i].coeType !== 'undefined' && me.setting.comboItems.coeType.indexOf(pasteItems[i].coeType) !== -1){
-                        validObj.coeType = pasteItems[i].coeType;
-                    }
-                    if(typeof pasteItems[i].operator !== 'undefined' && me.setting.comboItems.operator.indexOf(pasteItems[i].operator) !== -1){
-                        validObj.operator = pasteItems[i].operator;
-                    }
-                    if(typeof pasteItems[i].amount !== 'undefined' && !isNaN(pasteItems[i].amount)){
-                        validObj.amount = pasteItems[i].amount;
-                    }
+            }
+        };
+        let rst = [];
+        for(let i = 0, len = pasteItems.length; i < len; i++){
+            let row = i + info.cellRange.row;
+            let target = {},
+                curObj = me.currentGljAdjList[row],
+                pasteItem = pasteItems[i];
+            if(row < me.currentGljAdjList.length){
+                target.index = row;//要有下标做为匹配的依据,不然在复制多行并且某个单元格是只读的情况下,这里返回的updateList个数会比选中的行数少,造成更新行和实际不匹配的情况
+            }
+            for (let pasteKey in pasteItem) {
+                if (rules[pasteKey]) {
+                    rules[pasteKey](pasteItem[pasteKey], curObj, target);
                 }
             }
-            if(Object.keys(validObj).length > 0){
-                rst.push(validObj);
+            if(Object.keys(target).length > 0){
+                rst.push(target);
             }
         }
         return rst;
@@ -753,23 +767,21 @@ let gljAdjOprObj = {
     onClipboardPasted: function (sender, info) {
         let me = gljAdjOprObj, row;
         let items = sheetCommonObj.analyzePasteData(me.setting, info);
-        let validDatas = me.getValidPasteDatas(items, info);
-        for(let i = 0, len = validDatas.length; i < len; i++){
+        let validData = me.getValidPasteData(items, info);
+        for(let i = 0, len = validData.length; i < len; i++){
             row = i + info.cellRange.row;
             //update
-            if(row < me.currentGljAdjList.length && typeof validDatas[i].index !=='undefined'){
-                let updateObj = me.currentGljAdjList[validDatas[i].index];//这里改成读取下标
-                delete  validDatas[i].index; //清除下标
-                for(let attr in validDatas[i]){
-                    updateObj[attr] = validDatas[i][attr];
-                }
+            if(row < me.currentGljAdjList.length && typeof validData[i].index !=='undefined'){
+                let updateObj = me.currentGljAdjList[validData[i].index];//这里改成读取下标
+                delete  validData[i].index; //清除下标
+                Object.assign(updateObj, validData[i])
             }
             //insert
             else{
-                me.currentGljAdjList.push(validDatas[i]);
+                me.currentGljAdjList.push(validData[i]);
             }
         }
-        if(validDatas.length > 0){
+        if(validData.length > 0){
             coeOprObj.save([], [coeOprObj.currentCoe], [], false, function () {
                 me.show(me.currentGljAdjList);
             });

+ 30 - 56
web/maintain/ration_repository/js/ration.js

@@ -650,16 +650,8 @@ let rationOprObj = {
                 } else {
                     let cacheSection = me.updateCache(addArr, updateArr, removeIds, result);
                     me.sortByCode(cacheSection);
-                    /*cacheSection.sort(function(a, b){
-                        let rst = 0;
-                        if (a.code > b.code) rst = 1
-                        else if (a.code < b.code) rst = -1;
-                        return rst;
-                    });*/
-                    //add
                     let curRow = me.workBook.getActiveSheet().getActiveRowIndex();
                     me.rationSelInit(curRow);
-                    //add
                     //jobContent
                     if(jobContentOprObj ){
                         jobContentOprObj.currentRationItems = cacheSection;
@@ -699,47 +691,34 @@ let rationOprObj = {
             let me = rationOprObj;
             me.mixUpdate = 0;
             me.currentSectionId = sectionID;
-            /*if (me.currentRations["_SEC_ID_" + sectionID]) {
-                //jobContent--
-                jobContentOprObj.currentRationItems = me.currentRations["_SEC_ID_" + sectionID];
-                jobContentOprObj.rationJobContentOpr(me.currentRations["_SEC_ID_" + sectionID]);
-                //annotation
-                annotationOprObj.rationAnnotationOpr(me.currentRations["_SEC_ID_" + sectionID]);
-                me.showRationItems(sectionID);
-                sectionTreeObj.removeBtn.removeClass('disabled');
-                if(callback){
-                    callback();
-                }
-            } else */{
-                $.ajax({
-                    type:"POST",
-                    url:"api/getRationItems",
-                    data:{"rationRepId": pageOprObj.rationLibId, "sectionID": sectionID},
-                    dataType:"json",
-                    cache:false,
-                    timeout:10000,
-                    success:function(result){
-                        if (result) {
-                            me.currentRations["_SEC_ID_" + sectionID] = result.data;
-                            me.sortByCode(me.currentRations["_SEC_ID_" + sectionID]);
-                            //job--
-                            jobContentOprObj.currentRationItems = me.currentRations["_SEC_ID_" + sectionID];
-                            jobContentOprObj.rationJobContentOpr(me.currentRations["_SEC_ID_" + sectionID]);
-                            //annotation
-                            annotationOprObj.rationAnnotationOpr(me.currentRations["_SEC_ID_" + sectionID]);
-                            me.showRationItems(sectionID);
-                        }
-                        sectionTreeObj.removeBtn.removeClass('disabled');
-                        if(callback) {
-                            callback(result.data);
-                        }
-                    },
-                    error:function(err){
-                        sectionTreeObj.removeBtn.removeClass('disabled');
-                        alert(err);
+            $.ajax({
+                type:"POST",
+                url:"api/getRationItems",
+                data:{"rationRepId": pageOprObj.rationLibId, "sectionID": sectionID},
+                dataType:"json",
+                cache:false,
+                timeout:10000,
+                success:function(result){
+                    if (result) {
+                        me.currentRations["_SEC_ID_" + sectionID] = result.data;
+                        me.sortByCode(me.currentRations["_SEC_ID_" + sectionID]);
+                        //job--
+                        jobContentOprObj.currentRationItems = me.currentRations["_SEC_ID_" + sectionID];
+                        jobContentOprObj.rationJobContentOpr(me.currentRations["_SEC_ID_" + sectionID]);
+                        //annotation
+                        annotationOprObj.rationAnnotationOpr(me.currentRations["_SEC_ID_" + sectionID]);
+                        me.showRationItems(sectionID);
                     }
-                })
-            }
+                    sectionTreeObj.removeBtn.removeClass('disabled');
+                    if(callback) {
+                        callback(result.data);
+                    }
+                },
+                error:function(err){
+                    sectionTreeObj.removeBtn.removeClass('disabled');
+                    alert(err);
+                }
+            })
         }
     },
     showRationItems: function(sectionID){
@@ -749,13 +728,10 @@ let rationOprObj = {
             sheetAss = rationAssistOprObj.sheet, settingAss = rationAssistOprObj.setting,
             sheetInst = rationInstObj.sheet, settingInst = rationInstObj.setting;
         if (me.workBook) {
-            if (me.currentRations && me.currentRations["_SEC_ID_" + sectionID] && me.currentRations["_SEC_ID_" + sectionID].length > 0) {
+            sheetCommonObj.cleanData(me.workBook.getSheet(0), me.setting, -1);
+            if (me.currentRations && me.currentRations["_SEC_ID_" + sectionID]) {
                 let cacheSection = me.currentRations["_SEC_ID_" + sectionID];
-                sheetCommonObj.cleanData(me.workBook.getSheet(0), me.setting, -1);
                 sheetsOprObj.showData(me.workBook.getSheet(0), me.setting, cacheSection);
-                //combo
-                //sheetCommonObj.setStaticCombo(me.workBook.getActiveSheet(), 0, 2, cacheSection.length, rationUnits, 10, false);
-                //--sheetCommonObj.setDynamicCombo(me.workBook.getActiveSheet(), 0, 2, me.workBook.getActiveSheet().getRowCount(), rationUnits, 10, false);
                 if(me.mixDel === 1){
                     let row = me.workBook.getSheet(0).getSelections()[0].row;
                     if (cacheSection && row < cacheSection.length) {
@@ -780,16 +756,14 @@ let rationOprObj = {
 
             } else {
                 sheetCommonObj.setDynamicCombo(sheetAss, 0, 5, sheetAss.getRowCount(), rationAssistOprObj.setting.comboItems, false, false);
-                //--sheetCommonObj.setDynamicCombo(me.workBook.getActiveSheet(), 0, 2, me.workBook.getActiveSheet().getRowCount(), rationUnits, 10, false);
                 //清除ration数据及工料机数据
                 rationGLJOprObj.currentRationItem = null;
-                sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
+                //sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
                 sheetCommonObj.cleanSheet(sheetGLJ, settingGLJ, -1);
                 sheetCommonObj.cleanSheet(sheetCoe, settingCoe, -1);
                 sheetCommonObj.cleanSheet(sheetAss, settingAss, -1);
                 sheetCommonObj.cleanSheet(sheetInst, settingInst, -1);
             }
-           //--- me.workBook.focus(true);
         }
         sectionTreeObj.workBook.focus(true);
     },

+ 0 - 1
web/maintain/ration_repository/js/ration_coe.js

@@ -410,7 +410,6 @@ var rationCoeOprObj = {
 
                         me.showCoeItems(ration.ID);
                     }
-                    //sheetCommonObj.lockCells(me.sheet, me.setting);
                     if(callback) callback();
                 },
                 error:function(err){

+ 3 - 1
web/maintain/ration_repository/js/section_tree.js

@@ -692,7 +692,9 @@ let sectionTreeObj = {
             if (!sectionNode) {
                 return;
             }
-            me.sheet.setActiveCell(sectionNode.serialNo(), 1);
+            let sectionRow = sectionNode.serialNo();
+            me.sheet.setActiveCell(sectionRow, 1);
+            me.sheet.showRow(sectionRow, GC.Spread.Sheets.VerticalPosition.top);
             let doAfterGetRation = function (rations) {
                 let findRation = _.find(rations, {code: rationCode}),
                     rIdx = rations.indexOf(findRation),

+ 0 - 22
web/maintain/ration_repository/js/sheetsOpr.js

@@ -32,11 +32,6 @@ let sheetsOprObj = {
         else{
             sheet.setRowCount(typeof repositoryGljObj !== 'undefined' && repositoryGljObj.currentOprParent === 1 ? data.length : data.length + 10);
         }
-        /*if(data.length === 0){
-            for(let i = 0; i < sheet.getRowCount(); i++){
-                sheet.getCell(i, 4, GC.Spread.Sheets.SheetArea.viewport).locked(false);
-            }
-        }*/
         for (var col = 0; col < setting.header.length; col++) {
             var hAlign = "left", vAlign = "center";
             if (setting.header[col].hAlign) {
@@ -47,20 +42,10 @@ let sheetsOprObj = {
             vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;
             me.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);
             if (setting.header[col].formatter) {
-                //var style = new GC.Spread.Sheets.Style();
-                //style.formatter = setting.header[col].formatter;
-                //sheet.setStyle(row,col,style,GC.Spread.Sheets.SheetArea.viewport);
                 sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
             }
             for (var row = 0; row < data.length; row++) {
-                //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);
                 if(setting.header[col].dataCode === 'gljType' && data[row].gljType){
-                   /* if(typeof repositoryGljObj !== 'undefined' && typeof repositoryGljObj.allowComponent !== 'undefined' && repositoryGljObj.allowComponent.indexOf(data[row].gljType) !== -1){
-                        sheet.getCell(row, 4, GC.Spread.Sheets.SheetArea.viewport).locked(true);
-                    }
-                    else if(typeof repositoryGljObj !== 'undefined' && typeof repositoryGljObj.allowComponent !== 'undefined' && repositoryGljObj.allowComponent.indexOf(data[row].gljType) === -1){
-                        sheet.getCell(row, 4, GC.Spread.Sheets.SheetArea.viewport).locked(false);
-                    }*/
                     let distTypeVal =  distTypeTree.distTypes[distTypeTree.prefix + data[row].gljType].data.fullName;
                     sheet.setValue(row, col, distTypeVal, ch);
                 }
@@ -68,18 +53,11 @@ let sheetsOprObj = {
                     sheet.setValue(row, col, data[row][setting.header[col].dataCode] !== undefined && data[row][setting.header[col].dataCode] !== null
                         ? data[row][setting.header[col].dataCode] : '', ch);
                     sheet.setTag(row, 0, data[row].ID, ch);
-                    /*if(typeof setting.owner !== 'undefined' && setting.owner !== 'gljComponent'){
-                        sheet.getCell(row, 0, GC.Spread.Sheets.SheetArea.viewport).locked(true);
-                    }*/
                 }
             }
-          /*  for(let i = data.length; i < sheet.getRowCount(); i++){
-                sheet.getCell(i, 4, GC.Spread.Sheets.SheetArea.viewport).locked(false);
-            }*/
         }
         sheet.resumeEvent();
         sheet.resumePaint();
-        //me.shieldAllCells(sheet);
     },
     showDataForGljSel: function(sheet, setting, data, distTypeTree) {
         var me = this, ch = GC.Spread.Sheets.SheetArea.viewport;

+ 1 - 1
web/maintain/std_glj_lib/js/glj.js

@@ -36,7 +36,7 @@ $(document).ready(function () {
     rightElesObj.left = $('#midContent');
     rightElesObj.right = $('#rightContent');
     SlideResize.horizontalSlide(rightElesObj, {min: 200, max: `$('#dataRow').width() - $('#leftContent').width() - 200`}, function () {
-        let resizeRate = 500 / $('#midContent').width(),
+        let resizeRate = SlideResize.resizeWidth * 100 / $('#midContent').width(),
             sheetRate = 100 - resizeRate;
         $('#leftResize').css('width', `${resizeRate}%`);
         $('#GLJListSheet').css('width', `${sheetRate}%`);