Browse Source

Merge branch 'master' into olym

caiaolin 8 năm trước cách đây
mục cha
commit
29013baf96

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

@@ -1,7 +1,7 @@
 let mongoose = require('mongoose');
 
 let stdBillsLibSchema =mongoose.Schema({
-    userId: Number,
+    userId: String,
     billsLibId: Number,
     billsLibName: String,
     createDate: Date,

+ 10 - 0
modules/ration_repository/controllers/repository_glj_controller.js

@@ -2,11 +2,21 @@
  * Created by Tony on 2017/5/5.
  */
 var gljRepository = require("../models/glj_repository");
+let stdgljutil = require("../../../public/cache/std_glj_type_util");
 
 var callback = function(req,res,err,message, data){
     res.json({error: err, message: message, data: data});
 }
 module.exports ={
+    getGljDistType: function (req, res) {
+        let gljDistTypeCache = stdgljutil.getStdGljTypeCacheObj().toArray();
+        if(gljDistTypeCache.length >0 ){
+            callback(req, res, null, '', gljDistTypeCache);
+        }
+        else {
+            callback(req, res, 1, 'Error', null);
+        }
+    },
     getGljTree: function(req,res){
         var rationLibId = req.body.rationLibId;
         gljRepository.getGljTypes(rationLibId,function(err,data){

+ 4 - 4
modules/ration_repository/models/glj_repository.js

@@ -9,7 +9,7 @@ var db = dbm.getCfgConnection("scConstruct");
 var async = require("async");
 var Schema = mongoose.Schema;
 
-var gljTypeSchema = mongoose.Schema({
+var gljClassSchema = mongoose.Schema({
     repositoryId: Number,
     ID: Number,
     ParentID: Number,
@@ -27,10 +27,10 @@ var gljSchema = mongoose.Schema({
     specs: String,
     unit: String,
     basePrice: Number,
-    gljType: Number, //这个是UI显示上的详细分类,对应gljTypeSchema
-    gljDistType: String  //人工,材料,机械
+    gljClass: Number, //这个是UI显示上的详细分类,对应gljTypeSchema
+    gljType: Number  //人工,材料,机械
 });
-var gljTypeModel = db.model("std_ration_lib_glj_type",gljTypeSchema, "std_ration_lib_glj_type");
+var gljTypeModel = db.model("std_ration_lib_glj_type",gljClassSchema, "std_ration_lib_glj_type");
 var gljItemModel = db.model("std_ration_lib_glj_list",gljSchema, "std_ration_lib_glj_list");
 var repositoryMap = require('./repository_map');
 var counter = require('../../../public/counter/counter');

+ 1 - 0
modules/ration_repository/routes/ration_rep_routes.js

@@ -63,6 +63,7 @@ module.exports =  function (app) {
     apiRouter.post("/createNewGljTypeNode",repositoryGljController.createNewGljTypeNode);
     apiRouter.post("/updateGljNodes",repositoryGljController.updateGljNodes);
     apiRouter.post("/deleteGljNodes",repositoryGljController.deleteGljNodes);
+    apiRouter.post("/getGljDistType",repositoryGljController.getGljDistType);
     apiRouter.post("/getGljTree",repositoryGljController.getGljTree);
     apiRouter.post("/getGljItems",repositoryGljController.getGljItems);
     apiRouter.post("/mixUpdateGljItems",repositoryGljController.mixUpdateGljItems);

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

@@ -87,10 +87,11 @@ var sheetCommonObj = {
             area.vAlign(GC.Spread.Sheets.VerticalAlign.center);
         }
     },
-    showData: function(sheet, setting, data) {
+    showData: function(sheet, setting, data, distTypeTree) {
         var me = this, ch = GC.Spread.Sheets.SheetArea.viewport;
         sheet.suspendPaint();
         sheet.suspendEvent();
+        sheet.setRowCount(data.length + 5);
         for (var col = 0; col < setting.header.length; col++) {
             var hAlign = "left", vAlign = "center";
             if (setting.header[col].hAlign) {
@@ -108,7 +109,13 @@ var sheetCommonObj = {
             }
             for (var row = 0; row < data.length; row++) {
                 //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);
-                sheet.setValue(row, col, data[row][setting.header[col].dataCode], ch);
+                if(setting.header[col].dataCode === 'gljType' && data[row].gljType){
+                    let distTypeVal =  distTypeTree.distTypes[distTypeTree.prefix + data[row].gljType].data.fullName;
+                    sheet.setValue(row, col, distTypeVal, ch);
+                }
+                else {
+                    sheet.setValue(row, col, data[row][setting.header[col].dataCode], ch);
+                }
             }
         }
         sheet.resumeEvent();
@@ -141,7 +148,57 @@ var sheetCommonObj = {
         }
         return rst;
     },
-    combineRowData: function(sheet, setting, row) {
+    combineRowData: function(sheet, setting, row, repositoryGljObj) {
+        var rst = {};
+        let comboBoxCellType = sheet.getCellType(row, 5);
+        let items = comboBoxCellType.items();
+        for (var col = 0; col < setting.header.length; col++) {
+            if(setting.header[col].dataCode === 'gljType'){
+                items.forEach(function(item){
+                    if(sheet.getValue(row, col) === item.text){
+                        rst[setting.header[col].dataCode] = item.value;
+                    }
+                });
+            }
+           else if (setting.header[col].dataCode === 'code'){
+                if(repositoryGljObj){
+                    let gljList = repositoryGljObj.gljList,
+                        orgCode = repositoryGljObj.orgCode,
+                        isExist = false;
+                    for(let i=0; i< gljList.length; i++){
+                        if(gljList[i].code === sheet.getValue(row, col) && sheet.getValue(row, col)!== orgCode){
+                            $('#codeAlertBtn').click();
+                            sheet.getSheet(0).options.isProtected = true;
+                            $('#codAleConfBtn').click(function () {
+                                sheet.options.isProtected = false;
+                                sheet.setValue(row, 0, orgCode);
+                                sheet.setActiveCell(row, 0);
+                            });
+                            $('#codAleClose').click(function () {
+                                sheet.options.isProtected = false;
+                                sheet.setValue(row, 0, orgCode);
+                                sheet.setActiveCell(row, 0);
+                            });
+                            // sheet.setValue(row, col, orgCode);
+                            isExist = true
+                        }
+
+                    }
+                    if(!isExist){
+                        rst[setting.header[col].dataCode] = sheet.getValue(row, col);
+                    }
+                }
+                else{
+                    rst[setting.header[col].dataCode] = sheet.getValue(row, col);
+                }
+            }
+            else{
+                rst[setting.header[col].dataCode] = sheet.getValue(row, col);
+            }
+        }
+        return rst;
+    },
+    combineRationRowData: function(sheet, setting, row) {
         var rst = {};
         for (var col = 0; col < setting.header.length; col++) {
             rst[setting.header[col].dataCode] = sheet.getValue(row, col);

+ 2 - 1
web/maintain/bills_lib/html/main.html

@@ -130,7 +130,8 @@
 </script>
 <script>
     let userId = '<%= userID %>';
-    let userAccount = '<%= userAccount %>';
+    console.log(`userID: ${userId}`);
+    //let userAccount = '<%= userAccount %>';
     mainAjax.getStdBillsLib(userId);
     $(document).ready(function(){
         //main 增删改

+ 32 - 8
web/maintain/bills_lib/html/qingdan.html

@@ -265,32 +265,42 @@
         let btnDownMove = $('#downMove');
         dbController.editData(controller);
         btnInsert.click(function(){
-            if(btnInsert.attr('doing')){
-            }
-            else {
+            if(!btnInsert.attr('focusOnBills')){
                 dbController.insert(controller, btnInsert);
                 tools.clearData(jobsSpread.getActiveSheet());
                 tools.clearData(itemsSpread.getActiveSheet());
             }
         });
         btnDelete.click(function(){
-            dbController.delete(controller, btnDelete, totalJobs, totalItems);
+            if(!btnDelete.attr('focusOnBills')){
+                dbController.delete(controller, btnDelete, totalJobs, totalItems);
+            }
             //controller.delete();
         });
         btnUpLevel.click(function(){
-            dbController.upLevel(controller, btnUpLevel);
+            if(!btnUpLevel.attr('focusOnBills')){
+                dbController.upLevel(controller, btnUpLevel);
+            }
             //controller.upLevel();
         });
         btnDownLevel.click(function(){
-            dbController.downLevel(controller, btnDownLevel);
+            if(!btnDownLevel.attr('focusOnBills')){
+                dbController.downLevel(controller, btnDownLevel);
+            }
             //controller.downLevel();
         });
         btnUpMove.click(function(){
-            dbController.upMove(controller, btnUpMove);
+            if(!btnUpMove.attr('focusOnBills')){
+                dbController.upMove(controller, btnUpMove);
+            }
+            if(btnUpMove.attr('focusOnJobs')){
+            }
             //controller.upMove();
         });
         btnDownMove.click(function(){
-            dbController.downMove(controller, btnDownMove);
+            if(!btnDownMove.attr('focusOnBills')){
+                dbController.downMove(controller, btnDownMove);
+            }
             //controller.downMove();
         });
     }
@@ -345,6 +355,7 @@
     function refreshBtn(controller){
         controller.bind('refreshBaseActn', function (tree) {
             let showButton = function (show, btn) {
+                tools.btnAction($('#insert'), 'focusOnBills');
                 if (show) {
                     //btn.show();
                     btn.css("opacity", "");
@@ -373,6 +384,13 @@
     }
 
     function jobOperation(controller, jobsSheet, callback){
+        //add
+        /*jobsSheet.bind(GC.Spread.Sheets.Events.CellClick, function (sender, args) {
+            controller.setTreeSelected(null);
+            tools.btnClose($('#insert'), 'focusOnBills');
+            tools.btnAction($('#upMove'), 'focusOnJobs');
+        });*/
+        //add
         mainAjax.getMaxNumber(billsLibId, 'jobs', function(result){
             if(result.length === 0){
                 maxJobsNumber = 0;
@@ -395,6 +413,12 @@
     }
 
     function itemOperation(controller, itemsSheet, callback){
+        //add
+        /*itemsSheet.bind(GC.Spread.Sheets.Events.CellClick, function(sender, args){
+            controller.setTreeSelected(null);
+            tools.btnClose($('#insert'), 'focusOnBills');
+        });*/
+        //add
         mainAjax.getMaxNumber(billsLibId, 'items', function(result){
             if(result.length === 0){
                 maxItemsNumber = 0;

+ 62 - 61
web/maintain/bills_lib/scripts/db_controller.js

@@ -3,7 +3,7 @@
  */
 var dbController = {
     insert: function(controller, btn){
-        tools.btnClose(btn);
+        tools.btnClose(btn, 'focusOnBills');
         if(controller.tree.items.length === 0){
             controller.tree.maxNodeID(0);
             let newNodeId = controller.tree.newNodeID();
@@ -12,7 +12,7 @@ var dbController = {
                 controller.tree.selected.jobs = new Array();
                 controller.tree.selected.items = new Array();
                 controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
-                tools.btnAction(btn);
+                tools.btnAction(btn, 'focusOnBills');
             });
         }
         else {
@@ -27,7 +27,7 @@ var dbController = {
                     controller.tree.selected.items = new Array();
                     controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn);
+                    tools.btnAction(btn, 'focusOnBills');
                 });
             }
             else {
@@ -41,14 +41,14 @@ var dbController = {
                     controller.tree.selected.items = new Array();
                     controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn);
+                    tools.btnAction(btn, 'focusOnBills');
                 });
             }
         }
     },
 
     upLevel: function(controller, btn){
-        tools.btnClose(btn);
+        tools.btnClose(btn, 'focusOnBills');
         var node = controller.tree.selected;
         var ids = [];
         var updateData = [];
@@ -96,7 +96,7 @@ var dbController = {
                     console.log(`enter upL`);
                     controller.upLevel();
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn);
+                    tools.btnAction(btn, 'focusOnBills');
                 });
                 //rechargeController.createRecharge(controller.tree.selected);
             }
@@ -104,7 +104,7 @@ var dbController = {
     },
 
     downLevel: function(controller, btn){
-        tools.btnClose(btn);
+        tools.btnClose(btn, 'focusOnBills');
         var node = controller.tree.selected;
         var updateData = [];
         if(node){
@@ -133,7 +133,7 @@ var dbController = {
                 billsAjax.downLevel(billsLibId, updateData, function(){
                     controller.downLevel();
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn);
+                    tools.btnAction(btn, 'focusOnBills');
                 });
                 //rechargeController.createRecharge(controller.tree.selected);
             }
@@ -141,59 +141,60 @@ var dbController = {
     },
 
     delete: function(controller, btn, totalJobs, totalItems){
-        tools.btnClose(btn);
+        tools.btnClose(btn, 'focusOnBills');
         var node = controller.tree.selected;
-        var deleteIds = [];
-        var getDeleteIds = function(node){
-            if(node){
-                deleteIds.push(node.getID());
-                var length = node.children.length;
-                if(length > 0){
-                    for(var i=0; i<length; i++){
-                        getDeleteIds(node.children[i]);
+        if(node){
+            var deleteIds = [];
+            var getDeleteIds = function(node){
+                if(node){
+                    deleteIds.push(node.getID());
+                    var length = node.children.length;
+                    if(length > 0){
+                        for(var i=0; i<length; i++){
+                            getDeleteIds(node.children[i]);
+                        }
                     }
                 }
-            }
-        };
-        getDeleteIds(node);
-        let updateNode = node.preSibling ? {ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()} : null;
-        billsAjax.deleteBills(billsLibId, deleteIds, updateNode, function(){
-            console.log(`entetcb`);
-            controller.delete();
-            //to solve refresh after deleted
-            let jobsSheet = jobsSpread.getActiveSheet();
-            let itemsSheet = itemsSpread.getActiveSheet();
-            let nowNode = controller.tree.selected ;
-            if(nowNode){
-                let jobs = controller.tree.selected.jobs;
-                $('#exampleTextarea').val(controller.tree.selected.data.recharge);
-                setSheet.setMaxRowCount(jobsSheet, jobs);
-                if(jobs.length > 0){
-                    tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false);
-                    orgJobData = jobsSheet.getValue(0, 0);
-                }
-                let items = controller.tree.selected.items;
-                setSheet.setMaxRowCount(itemsSheet, items);
-                if(items.length > 0){
-                    tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false);
-                    orgItemData = itemsSheet.getValue(0, 0);
+            };
+            getDeleteIds(node);
+            let updateNode = node.preSibling ? {ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()} : null;
+            billsAjax.deleteBills(billsLibId, deleteIds, updateNode, function(){
+                controller.delete();
+                //to solve refresh after deleted
+                let jobsSheet = jobsSpread.getActiveSheet();
+                let itemsSheet = itemsSpread.getActiveSheet();
+                let nowNode = controller.tree.selected ;
+                if(nowNode){
+                    let jobs = controller.tree.selected.jobs;
+                    $('#exampleTextarea').val(controller.tree.selected.data.recharge);
+                    setSheet.setMaxRowCount(jobsSheet, jobs);
+                    if(jobs.length > 0){
+                        tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false);
+                        orgJobData = jobsSheet.getValue(0, 0);
+                    }
+                    let items = controller.tree.selected.items;
+                    setSheet.setMaxRowCount(itemsSheet, items);
+                    if(items.length > 0){
+                        tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false);
+                        orgItemData = itemsSheet.getValue(0, 0);
+                    }
                 }
-            }
-            else {
-                tools.clearData(jobsSheet);
-                tools.clearData(itemsSheet);
-                $('#exampleTextarea').val("");
-            }
-            sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
-            sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
-            sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-            tools.btnAction(btn);
-            //to solve refresh after deleted
-        });
+                else {
+                    tools.clearData(jobsSheet);
+                    tools.clearData(itemsSheet);
+                    $('#exampleTextarea').val("");
+                }
+                sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
+                sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
+                sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
+                tools.btnAction(btn, 'focusOnBills');
+                //to solve refresh after deleted
+            });
+        }
     },
 
     upMove: function(controller, btn){
-        tools.btnClose(btn);
+        tools.btnClose(btn, 'focusOnBills');
         var node = controller.tree.selected;
         var updateData = [];
         if(node){
@@ -218,14 +219,14 @@ var dbController = {
                 billsAjax.upMove(billsLibId, updateData, function(){
                     controller.upMove();
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn);
+                    tools.btnAction(btn, 'focusOnBills');
                 });
             }
         }
     },
 
     downMove: function(controller, btn){
-        tools.btnClose(btn);
+        tools.btnClose(btn, 'focusOnBills');
         var node = controller.tree.selected;
         var updateData = [];
         if(node){
@@ -253,7 +254,7 @@ var dbController = {
                 billsAjax.downMove(billsLibId, updateData);
                 controller.downMove();
                 sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                tools.btnAction(btn);
+                tools.btnAction(btn, 'focusOnBills');
             }
         }
     },
@@ -417,15 +418,15 @@ var createObj = {
 };
 
 var tools = {
-    btnClose: function (btn) {
+    btnClose: function (btn, attr) {
         btn.css("opacity", "0.2");
         btn.addClass("disabled");
-        btn.attr('doing', true);
+        btn.attr(attr, true);
     },
-    btnAction: function (btn) {
+    btnAction: function (btn, attr) {
         btn.css("opacity", "");
         btn.removeClass("disabled");
-        btn.removeAttr('doing');
+        btn.removeAttr(attr);
     },
     isExist: function (totalArr, field, newData, orgData){
         var isExist = false;

+ 1 - 1
web/maintain/ration_repository/dinge.html

@@ -12,7 +12,7 @@
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <!--zTree-->
   	<link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
 
 </head>
 

+ 43 - 2
web/maintain/ration_repository/gongliao.html

@@ -9,7 +9,7 @@
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/maintain/ration_repository/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
     <!--zTree-->
   	<link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
 </head>
@@ -41,7 +41,7 @@
         <div class="content">
             <div class="container-fluid">
                 <div class="row">
-                    <div class="main-side col-lg-3 p-0">
+                    <div class="main-side col-lg-3 p-0" style="width: 100%; height: 100%; overflow-y: auto">
                         <ul id="repositoryTree" class="ztree"></ul>
                     </div>
                     <div class="main-content col-lg-9 p-0">
@@ -167,6 +167,47 @@
             </div>
         </div>
     </div>
+    <button id="gljAlertBtn" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#gljAlert" style="display: none"></button>
+    <button id="codeAlertBtn" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#codeAlert" style="display: none"></button>
+    <div class="modal fade" id="gljAlert" data-backdrop="static" style="display: none;" aria-hidden="true">
+        <input type="hidden" id="gdid" value="123">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">取消确认</h5>
+                    <button type="button" id="gljAleClose" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <h5 class="text-danger">还有值未输入,确认是否取消新增工料机?</h5>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" id="aleCanceBtn" data-dismiss="modal">取消</button>
+                    <a href="javascript: void(0);" id="aleConfBtn" class="btn btn-danger" data-dismiss="modal">确认</a>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="modal fade" id="codeAlert" data-backdrop="static" style="display: none;" aria-hidden="true">
+        <input type="hidden" id="codedid" value="123">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">警告</h5>
+                    <button type="button" id="codAleClose" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <h5 class="text-danger">输入的编号已存在,请重新输入!</h5>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-danger" id="codAleConfBtn" data-dismiss="modal">确认</button>
+                </div>
+            </div>
+        </div>
+    </div>
     <!-- JS. -->
     <script src="/lib/jquery/jquery.min.js"></script>
     <script src="/lib/tether/tether.min.js"></script>

+ 6 - 3
web/maintain/ration_repository/js/ration.js

@@ -119,7 +119,8 @@ var rationOprObj = {
             var cacheSection = me.getCache();
             if (cacheSection) {
                 for (var i = 0; i < args.rowCount; i++) {
-                    var hasUpdate = false, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row + i),
+                    //var hasUpdate = false, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row + i),
+                    var hasUpdate = false, rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row + i),
                         isEmpty = sheetCommonObj.chkIfEmpty(rObj, me.setting);
                     for (var j = 0; j < cacheSection.length; j++) {
                         if (cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
@@ -146,7 +147,8 @@ var rationOprObj = {
     },
     onCellEditStart: function(sender, args) {
         var me = rationOprObj;
-        var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
+        //var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
+        var rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row);
         me.currentEditingRation = rObj;
         var cacheSection = me.getCache();
         if (cacheSection) {
@@ -159,7 +161,8 @@ var rationOprObj = {
         }
     },
     onCellEditEnd: function(sender, args) {
-        var me = rationOprObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row),
+        //var me = rationOprObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row),
+        var me = rationOprObj, rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row),
             updateArr = [], addArr = [];
         if (me.currentEditingRation["ID"]) {
             rObj["ID"] = me.currentEditingRation["ID"];

+ 2 - 1
web/maintain/ration_repository/js/ration_assist.js

@@ -65,7 +65,8 @@ var rationAssistOprObj = {
         var me = rationAssistOprObj;
         if (!me.ration) {return;};
         var assList = me.ration.rationAssList;
-        var assObj = sheetCommonObj.combineRowData(me.sheet, me.setting, args.row);
+        //var assObj = sheetCommonObj.combineRowData(me.sheet, me.setting, args.row);
+        var assObj = sheetCommonObj.combineRationRowData(me.sheet, me.setting, args.row);
         // 新增
         if ((assList == undefined) || (assList && args.row >= assList.length)) {
             if (assObj.decimal == undefined || assObj.decimal == null){assObj.decimal = '0';};

+ 64 - 9
web/maintain/ration_repository/js/ration_glj.js

@@ -4,6 +4,7 @@
 var rationGLJOprObj = {
     sheet: null,
     currentRationItem: null,
+    distTypeTree: null,
     cache: {},
     setting: {
         header:[
@@ -12,22 +13,76 @@ var rationGLJOprObj = {
             {headerName:"单位",headerWidth:160,dataCode:"unit", dataType: "String"},
             {headerName:"基价单位",headerWidth:160, dataCode:"basePrice", dataType: "Number", formatter:"0.00",  precision: 2},
             {headerName:"定额消耗",headerWidth:160, dataCode:"consumeAmt", dataType: "Number", precision: 3},
-            {headerName:"类型",headerWidth:160,dataCode:"gljDistType", dataType: "String"}
+            {headerName:"类型",headerWidth:160,dataCode:"gljType", dataType: "String"}
         ],
         view:{
             comboBox:[],
             lockColumns:[1,2,3,5,6]
         }
     },
+    getDistTypeTree: function (gljDistType) {
+        let me = this;
+        let distType;
+        let distTypeTree = {
+            prefix : 'gljDistType',
+            distTypes: {},
+            comboDatas: [],
+            distTypesArr: []
+        };
+        gljDistType.forEach(function (typeData) {
+            let typeObj = {
+                data: typeData,
+                children: [],
+                parent: null
+            }
+            distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj;
+            distTypeTree.distTypesArr.push(typeObj);
+        });
+        gljDistType.forEach(function (typeData) {
+            distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID];
+            let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID];
+            if(parent){
+                distType.parent = parent;
+                parent.children.push(distType);
+            }
+        });
+        distTypeTree.distTypesArr.forEach(function (distTypeObj) {
+            if(distTypeObj.children.length === 0 && distTypeObj.data.fullName !== '普通机械' &&distTypeObj.data.fullName !== '机械组成物'
+                && distTypeObj.data.fullName !== '机上人工'){
+                distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
+            }
+            if(distTypeObj.data.fullName === '机械'){
+                distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
+            }
+        });
+        //me.distTypeTree = distTypeTree;
+        return distTypeTree;
+        //return distTypeTree.comboDatas;
+    },
+    getGljDistType: function (callback) {
+        let me = this;
+        $.ajax({
+            type: 'post',
+            url: "api/getGljDistType",
+            dataType: 'json',
+            success: function (result) {
+                if(!result.error && callback){
+                    me.distTypeTree = me.getDistTypeTree(result.data);
+                    callback();
+                }
+            }
+        })
+    },
     buildSheet: function(sheet) {
         var me = this;
         me.sheet = sheet;
-        sheetCommonObj.initSheet(me.sheet, me.setting, 30);
-
-        me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
-        me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
-        me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
-        me.sheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
+        me.getGljDistType(function () {
+            sheetCommonObj.initSheet(me.sheet, me.setting, 30);
+            me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
+            me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
+            me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
+            me.sheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
+        });
     },
     onRangeChanged: function(sender, args) {
         if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
@@ -185,7 +240,7 @@ var rationGLJOprObj = {
         rst.specs = repGlj.specs;
         rst.unit = repGlj.unit;
         rst.basePrice = repGlj.basePrice;
-        rst.gljDistType = repGlj.gljDistType;
+        rst.gljType = repGlj.gljType;
         return rst;
     },
     getGljItems: function(rationItem) {
@@ -232,7 +287,7 @@ var rationGLJOprObj = {
     showGljItems: function(rationID) {
         var me = this;
         if (me.cache["_GLJ_" + rationID]) {
-            sheetCommonObj.showData(me.sheet, me.setting, me.cache["_GLJ_" + rationID]);
+            sheetCommonObj.showData(me.sheet, me.setting, me.cache["_GLJ_" + rationID], me.distTypeTree);
         }
     }
 }

+ 166 - 16
web/maintain/ration_repository/js/repository_glj.js

@@ -20,15 +20,17 @@ var pageOprObj = {
             html = html.replace("XXX定额库", rationLibName);
             $("#rationname")[0].outerHTML = html;
             me.rationLibName = rationLibName;
-            repositoryGljObj.currentRepositoryId = parseInt(rationLibId);
-            repositoryGljObj.getGljTree(rationLibId);
             repositoryGljObj.buildSheet(container);
-            repositoryGljObj.getGljItems(rationLibId);
-            sheetCommonObj.shieldAllCells(repositoryGljObj.workBook.getSheet(0), repositoryGljObj.setting);
+            repositoryGljObj.getGljDistType(function () {
+                repositoryGljObj.currentRepositoryId = parseInt(rationLibId);
+                repositoryGljObj.getGljTree(rationLibId);
+                repositoryGljObj.getGljItems(rationLibId);
+                sheetCommonObj.shieldAllCells(repositoryGljObj.workBook.getSheet(0), repositoryGljObj.setting);
+            });
         }
     }
 }
-repositoryGljObj = {
+ repositoryGljObj = {
     treeObj : null,
     workBook: null,
     gljCurTypeId: -1,
@@ -36,6 +38,7 @@ repositoryGljObj = {
     currentCache: null,
     parentNodeIds: {},
     gljList: [],
+    distTypeTree: null,//add
     setting: {
         header:[
             {headerName:"编码",headerWidth:120,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
@@ -43,7 +46,7 @@ repositoryGljObj = {
             {headerName:"规格",headerWidth:260,dataCode:"specs", dataType: "String", hAlign: "left", vAlign: "center"},
             {headerName:"单位",headerWidth:120,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
             {headerName:"基价单价",headerWidth:120,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
-            {headerName:"类型",headerWidth:120,dataCode:"gljDistType", dataType: "String", hAlign: "center", vAlign: "center"}
+            {headerName:"类型",headerWidth:120,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"}
         ],
         view:{
             comboBox:[
@@ -53,6 +56,62 @@ repositoryGljObj = {
             ]
         }
     },
+    getComboData: function (gljDistType) {
+        let me = this;
+        let distType;
+        let distTypeTree = {
+            prefix : 'gljType',
+            distTypes: {},
+            comboDatas: [],
+            distTypesArr: []
+        };
+        gljDistType.forEach(function (typeData) {
+            let typeObj = {
+                data: typeData,
+                children: [],
+                parent: null
+            }
+            distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj;
+            distTypeTree.distTypesArr.push(typeObj);
+        });
+        gljDistType.forEach(function (typeData) {
+            distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID];
+            let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID];
+            if(parent){
+                distType.parent = parent;
+                parent.children.push(distType);
+            }
+        });
+        distTypeTree.distTypesArr.forEach(function (distTypeObj) {
+            if(distTypeObj.children.length === 0 && distTypeObj.data.fullName !== '普通机械' &&distTypeObj.data.fullName !== '机械组成物'
+            && distTypeObj.data.fullName !== '机上人工'){
+                distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
+            }
+            if(distTypeObj.data.fullName === '机械'){
+                distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
+            }
+        });
+        //me.distTypeTree = distTypeTree;
+        return distTypeTree;
+        //return distTypeTree.comboDatas;
+    },
+    getGljDistType: function (callback) {
+        let me = this;
+        $.ajax({
+            type: 'post',
+            url: "api/getGljDistType",
+            dataType: 'json',
+            success: function (result) {
+                if(!result.error && callback){
+                    me.distTypeTree = me.getComboData(result.data);
+                    let combo = new GC.Spread.Sheets.CellTypes.ComboBox();
+                    combo.items(me.distTypeTree.comboDatas).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.text);
+                    me.workBook.getSheet(0).getCell(-1, 5, GC.Spread.Sheets.SheetArea.viewport).cellType(combo).value(me.distTypeTree.comboDatas[0].text);
+                    callback();
+                }
+            }
+        })
+    },
     getGljTree: function(rationLibId) {
         var me = this;
         $.ajax({
@@ -89,6 +148,7 @@ repositoryGljObj = {
             success:function(result){
                 if(!result.error) {
                     me.gljList = result.data;
+                    me.workBook.getSheet(0).setRowCount(result.data.length);
                     me.sortGlj();
                     me.showGljItems(result.data, me.gljCurTypeId);
                 }
@@ -100,38 +160,104 @@ repositoryGljObj = {
     },
     showGljItems: function(data, type) {
         var me = repositoryGljObj;
+        console.log(`data`)
+        console.log(data);
+        console.log(`distype`);
+        console.log(me.distTypeTree);
         if (me.workBook) {
             var cacheSection = [];
             var pArr = me.parentNodeIds["_pNodeId_" + type];
             for (var i = 0; i < data.length; i++) {
-                if (pArr && pArr.indexOf(data[i].gljType) >= 0) {
+                if (pArr && pArr.indexOf(data[i].gljClass) >= 0) {
                     cacheSection.push(data[i]);
-                } else if (type == data[i].gljType) {
+                } else if (type == data[i].gljClass) {
+                    //data[i].gljDistType = me.distTypeTree.distTypes[me.distTypeTree.prefix + data[i].gljDistType].data.fullName;
                     cacheSection.push(data[i]);
                 }
             }
             sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
-            sheetCommonObj.showData(me.workBook.getSheet(0), me.setting, cacheSection);
+            sheetCommonObj.showData(me.workBook.getSheet(0), me.setting, cacheSection, me.distTypeTree);
             cacheSection = null;
         }
     },
     buildSheet: function(container) {
         var me = repositoryGljObj;
-        me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+        me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30, me);
         me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
         me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);
     },
+     onEnterCell: function (sender, args) {
+         let me = repositoryGljObj;
+         me.cellRowIdx = args.row;
+         let isHasData = false;
+         if(me.addGljObj){
+             for(let i=0; i<me.setting.header.length; i++){
+                 if(me.addGljObj[me.setting.header[i].dataCode]){
+                     isHasData = true;
+                     break;
+                 }
+             }
+         }
+         if(isHasData){
+             console.log(`enterHasData`);
+             if(me.editingRowIdx !== me.cellRowIdx) {
+                 let isComple = true;
+                 let focusToCol;
+                 function getFocusToCol (me){
+                     for(let i=0; i< me.setting.header.length; i++){
+                         if(!me.addGljObj[me.setting.header[i].dataCode]){
+                             return i;
+                         }
+                     }
+                 }
+                 focusToCol = getFocusToCol(me);
+                 console.log(`focusTocol: ${focusToCol}`);
+                 for(let i=0; i< me.setting.header.length; i++){
+                     if(!me.addGljObj[me.setting.header[i].dataCode]){
+                         isComple = false
+                     }
+                 }
+                 if(isComple){
+
+                 }
+                 else {
+                    $('#gljAlertBtn').click();
+                     me.workBook.getSheet(0).options.isProtected = true;
+                     $('#aleCanceBtn').click(function () {
+                         me.workBook.getSheet(0).options.isProtected = false;
+                         me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, focusToCol);
+                     });
+                     $('#gljAleClose').click(function () {
+                         me.workBook.getSheet(0).options.isProtected = false;
+                         me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, focusToCol);
+                     });
+                     $('#aleConfBtn').click(function () {
+                         me.workBook.getSheet(0).options.isProtected = false;
+                         me.addGljObj = null;
+                         for(let col=0; col<me.setting.header.length; col++){
+                             me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value('');
+                         }
+                         me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, 0);
+                     });
+                 }
+             }
+         }
+     },
     onCellEditStart: function(sender, args) {
         var me = repositoryGljObj;
         var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
         me.currentEditingGlj = rObj;
+        console.log(`currentEditingGlj`);
+        console.log(me.currentEditingGlj);
+        me.orgCode = me.workBook.getSheet(0).getValue(args.row, 0);
         var cacheSection = me.gljList;
         if (cacheSection) {
             for (var j = 0; j < cacheSection.length; j++) {
-                if (cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
+                if (cacheSection[j][me.setting.header[0].dataCode] && cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
                     rObj["ID"] = cacheSection[j]["ID"];
                     break;
                 }
@@ -139,17 +265,32 @@ repositoryGljObj = {
         }
     },
     onCellEditEnd: function(sender, args) {
-        var me = repositoryGljObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row),
+        var me = repositoryGljObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row, me),
             updateArr = [], addArr = [];
+        me.editingRowIdx = args.row;
         if (me.currentEditingGlj["ID"]) {
             rObj["ID"] = me.currentEditingGlj["ID"];
             updateArr.push(rObj);
         } else {
-            addArr.push(rObj);
+            //add
+            me.addGljObj = rObj;
+            let isCanSav = true;
+            for(let i=0; i<me.setting.header.length; i++){
+                if(!rObj[me.setting.header[i].dataCode]){
+                    isCanSav = false;
+                    break;
+                }
+            }
+            if(isCanSav){
+                me.addGljObj = null;
+                addArr.push(rObj);
+            }
         }
-        rObj.gljType = me.gljCurTypeId;
+        rObj.gljClass = me.gljCurTypeId;
         me.currentEditingGlj = null;
-        me.mixUpdateRequest(updateArr, addArr, []);
+        if(updateArr.length >0 || addArr.length >0){
+           me.mixUpdateRequest(updateArr, addArr, []);
+        }
     },
     onRangeChanged: function(sender, args) {
         if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
@@ -183,6 +324,8 @@ repositoryGljObj = {
     },
     onClipboardPasting: function(sender, args) {
         var me = repositoryGljObj;
+        console.log(`me.parentNodeIds`);
+        console.log(me.parentNodeIds);
         if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) {
             args.cancel = true;
         }
@@ -229,6 +372,8 @@ repositoryGljObj = {
                     me.sortGlj();
                     me.currentCache = me.getCache();
                     me.showGljItems(me.gljList, me.gljCurTypeId);
+                    console.log(`me.cC`);
+                    console.log(me.currentCache);
                 }
             },
             error:function(err){
@@ -239,7 +384,7 @@ repositoryGljObj = {
     getCache: function() {
         var me = this, rst = [];
         for (var i = 0; i < me.gljList.length; i++) {
-            if (me.gljList[i].gljType == me.gljCurTypeId) {
+            if (me.gljList[i].gljClass == me.gljCurTypeId) {
                 rst.push(me.gljList[i]);
             }
         }
@@ -297,7 +442,12 @@ var gljTypeTreeOprObj = {
         var me = repositoryGljObj,
             gljTypeId = treeNode.ID;
         me.gljCurTypeId = treeNode.ID;
+        console.log(`gljcurtypeId: ${me.gljCurTypeId}`);
         me.currentCache = me.getCache();
+        console.log(`gljList`);
+        console.log(me.gljList);
+        console.log(`nowCache`);
+        console.log(me.currentCache);
         me.showGljItems(me.gljList, gljTypeId);
         if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
             sheetCommonObj.shieldAllCells(me.workBook.getSheet(0), me.setting);