Browse Source

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

TonyKang 8 years ago
parent
commit
11bd9e3856

modules/feeLibs/models/feeLibs_db.js → modules/feeRateLibs/models/feeRateLibs_db.js


+ 2 - 2
modules/fees/controllers/fees_controller.js

@@ -2,8 +2,8 @@
  * Created by CSL on 2017-03-23.
  */
 
-var stdFeeRateLibs = require('../../feeLibs/models/feeLibs_db');
-var projectFeeRateFile = require('../models/fees_db');
+var stdFeeRateLibs = require('../../feeRateLibs/models/feeRateLibs_db');
+var projectFeeRateFile = require('../models/feeRates_db');
 
 module.exports = {
     libNames: function (req, res) {

modules/fees/models/fees_db.js → modules/feeRates/models/feeRates_db.js


+ 19 - 0
modules/feeRates/routes/feeRates_router.js

@@ -0,0 +1,19 @@
+/**
+ * Created by CSL on 2017-03-22.
+ */
+
+var express = require('express');
+var frRouter = express.Router();
+var frController = require('../controllers/feeRates_controller');
+
+frRouter.get('/', function(req, res) {
+    res.render('feeRate/feeRate', {});
+});
+
+frRouter.post('/getLibNames', frController.libNames);
+frRouter.post('/getLibFeeRates', frController.libFeeRates);
+frRouter.post('/getProjectFeeRates', frController.projectFeeRates);
+frRouter.post('/updateProjectFeeRate', frController.projectFeeUpdateRate);
+
+
+module.exports = frRouter;

+ 0 - 19
modules/fees/routes/fees_router.js

@@ -1,19 +0,0 @@
-/**
- * Created by CSL on 2017-03-22.
- */
-
-var express = require('express');
-var feesRouter = express.Router();
-var feesController = require('../controllers/fees_controller');
-
-feesRouter.get('/', function(req, res) {
-    res.render('fees/feeRate', {});
-});
-
-feesRouter.post('/getLibNames', feesController.libNames);
-feesRouter.post('/getLibFeeRates', feesController.libFeeRates);
-feesRouter.post('/getProjectFeeRates', feesController.projectFeeRates);
-feesRouter.post('/updateProjectFeeRate', feesController.projectFeeUpdateRate);
-
-
-module.exports = feesRouter;

+ 83 - 0
modules/rationRepository/controllers/coeListController.js

@@ -0,0 +1,83 @@
+/**
+ * Created by CSL on 2017/5/19.
+ */
+var coeList = require("../models/coeList");
+
+var callback = function(req,res,err,message, data){
+    res.json({error: err, message: message, data: data});
+}
+
+module.exports ={
+    getCoeList: function(req,res){
+        coeList.getCoesByLibID(req.body.libID, function(err,data){
+            callback(req, res, err, 'Get coes', data);
+        });
+    },
+    createNewGljTypeNode: function(req, res) {
+        var repId = req.body.repositoryId;
+        var lastNodeId = req.body.lastNodeId;
+        var nodeData = JSON.parse(req.body.rawNodeData);
+        gljRepository.createNewNode(repId, lastNodeId, nodeData, function(err, msg, data){
+            callback(req,res,err,msg, data)
+        });
+    },
+    updateGljNodes: function(req, res) {
+        var nodes = JSON.parse(req.body.nodes);
+        gljRepository.updateNodes(nodes, function(err,results){
+            callback(req,res, err, results)
+        });
+    },
+    deleteGljNodes: function(req, res) {
+        var nodes = JSON.parse(req.body.nodes);
+        var preNodeId = req.body.preNodeId;
+        var preNodeNextId = req.body.preNodeNextId;
+        gljRepository.removeNodes(nodes, preNodeId, preNodeNextId, function(err,results){
+            callback(req,res, err, results)
+        });
+    },
+    getGljItems: function(req, res) {
+        var repId = req.body.repositoryId,
+            gljType = req.body.type,
+            gljCode = req.body.code;
+        if (gljCode) {
+            gljRepository.getGljItem(repId, gljCode, function(err, data){
+                callback(req,res,err,'Get Items', data)
+            });
+        } else if (gljType) {
+            gljRepository.getGljItemByType(repId, gljType, function(err, data){
+                callback(req,res,err,'Get Types', data)
+            });
+        } else {
+            gljRepository.getGljItemsByRep(repId, function(err, data){
+                callback(req,res,err,'Get Items',data)
+            });
+        }
+    },
+    getGljItemsByIds: function(req, res) {
+        var gljIds = JSON.parse(req.body.gljIds);
+        gljRepository.getGljItems(gljIds, function(err, data){
+            callback(req,res,err,'Get Items',data)
+        });
+    },
+    getGljItemsByCodes: function(req, res) {
+        var gljCodes = JSON.parse(req.body.gljCodes),
+            repId = req.body.repId;
+        gljRepository.getGljItemsByCode(repId, gljCodes, function(err, data){
+            callback(req,res,err,'Get Items',data)
+        });
+    },
+    mixUpdateGljItems: function(req, res){
+        var repId = req.body.repositoryId,
+            updateItems = JSON.parse(req.body.updateItems),
+            addItems = JSON.parse(req.body.addItems),
+            removeIds = JSON.parse(req.body.removeIds);
+        gljRepository.mixUpdateGljItems(repId, updateItems, addItems, removeIds, function(err, message, rst){
+            if (err) {
+                callback(req, res, err, message, null);
+            } else {
+                callback(req, res, err, message, rst);
+            }
+        });
+    }
+
+}

+ 9 - 0
modules/rationRepository/controllers/rationRepositoryController.js

@@ -37,6 +37,15 @@ module.exports = {
             }
         })
     },
+    getLibIDByName:function(req,res){
+        rationRepository.getLibIDByName(req.body.libName, function(err,data){
+            if (data) {
+                callback(req, res, err, "has ID", data);
+            } else {
+                callback(req, res, err, "no ID", null);
+            }
+        })
+    },
     deleteRationLib:function(req,res){
         var rationName = req.body.rationName;
         rationRepository.deleteRationLib(rationName,function(err,data){

+ 8 - 0
modules/rationRepository/models/coeList.js

@@ -42,4 +42,12 @@ coeListDAO.prototype.getCoe = function (data, callback) {
         })
 };
 
+coeListDAO.prototype.getCoesByLibID = function (libID, callback) {
+    coeListModel.find({ "libID": libID },
+        function (err, doc) {
+            if (err) callback("获取定额库系数表错误", null)
+            else callback(null, doc);
+        })
+};
+
 module.exports = new coeListDAO();

+ 10 - 0
modules/rationRepository/models/repositoryMap.js

@@ -46,6 +46,16 @@ rationRepositoryDao.prototype.getRealLibName = function(dispName,callback){
     }
 };
 
+rationRepositoryDao.prototype.getLibIDByName = function(dispName, callback){
+    rationRepository.findOne({"dispName": dispName}, function(err,data){
+        if (err) {
+            callback('Error', null);
+        } else {
+            callback(false, data.ID);
+        }
+    });
+};
+
 rationRepositoryDao.prototype.getRepositoryById = function(repId,callback){
     if (callback) {
         rationRepository.find({"ID": repId}, function(err,data){

+ 4 - 0
modules/rationRepository/routes/rationRepRoutes.js

@@ -9,12 +9,14 @@ var rationRepositoryController = require("../controllers/rationRepositoryControl
 var rationChapterTreeController = require("../controllers/rationChapterTreeController");
 var rationController = require("../controllers/rationController");
 var repositoryGljController = require("../controllers/repositoryGljController");
+var coeListController = require("../controllers/coeListController");
 
 apiRouter.post("/getRationDisplayNames",rationRepositoryController.getDisPlayRationLibs);
 apiRouter.post("/editRationLibs",rationRepositoryController.updateRationRepositoryName);
 apiRouter.post("/addRationRepository",rationRepositoryController.addRationRepository);
 apiRouter.post("/deleteRationLibs",rationRepositoryController.deleteRationLib);
 apiRouter.post("/getRealLibName",rationRepositoryController.getRealLibName);
+apiRouter.post("/getLibIDByName",rationRepositoryController.getLibIDByName);
 
 apiRouter.post("/getRationTree",rationChapterTreeController.getRationChapterTree);
 apiRouter.post("/createNewNode",rationChapterTreeController.createNewNode);
@@ -33,5 +35,7 @@ apiRouter.post("/mixUpdateGljItems",repositoryGljController.mixUpdateGljItems);
 apiRouter.post("/getGljItemsByIds",repositoryGljController.getGljItemsByIds);
 apiRouter.post("/getGljItemsByCodes",repositoryGljController.getGljItemsByCodes);
 
+apiRouter.post("/getCoeList",coeListController.getCoeList);
+
 
 module.exports = apiRouter;

+ 28 - 0
public/debug.js

@@ -0,0 +1,28 @@
+/**
+ * Created by CSL on 2017-05-19.
+ * 用于展示未知对象的内容。如:debug.m(GC.Spread.Sheets.Events);
+ */
+
+debug = {
+    m: function (obj) {
+        alert(this.objStr(obj));
+    },
+
+    d: function (obj) {
+        alert(JSON.stringify(obj));
+    },
+
+    objStr: function (obj) {
+        var str = "";
+        var spr = "";
+        for (var x in obj) {
+            if (obj.hasOwnProperty(x)) {
+                if (str == '') {
+                    spr = ''
+                } else { spr = ', ' } ;
+                str += spr + x + ':' + obj[x];
+            }
+        }
+        return str;
+    }
+}

+ 68 - 0
public/web/sheet.js

@@ -0,0 +1,68 @@
+/**
+ * Created by CSL on 2017-05-19.
+ * 通用的SpreadSheet创建显示接口,应用数据源绑定列、脏数据等。
+ * var colDef = [{name: "coeType", displayName: "类型", size: 100, hAlign: "center"},..,{} ];
+ * var datas = [{},..,{}];
+ */
+
+sheetObj = {
+    spread: null,
+
+    create: function (container, colDef, datas){
+        var me = this;
+        me.spread = new GC.Spread.Sheets.Workbook(container, {sheetCount:1});
+        me.spread.suspendPaint();
+
+        me.spread.options.tabStripVisible = false;
+        me.spread.options.showHorizontalScrollbar = false;
+
+        var sheet = me.spread.getSheet(0);
+        var sheetArea = GC.Spread.Sheets.SheetArea;
+        sheet.setRowCount(20, sheetArea.viewport);
+        sheet.setRowHeight(0, 30, sheetArea.colHeader);
+        sheet.autoGenerateColumns = false;
+        sheet.setDataSource(datas);
+        sheet.bindColumns(colDef);
+        me.setColAlign(colDef);
+        me.setRowHeight(datas, 28);
+
+        me.spread.resumePaint();
+        return me.spread;
+    },
+
+    setColAlign: function(colDef){
+        var me = this;
+        var sheet = me.spread.getSheet(0);
+
+        for (var col = 0; col < colDef.length; col++) {
+            var ha = colDef[col].hAlign;
+            var va = colDef[col].vAlign;
+            var area = sheet.getRange(-1, col, -1, GC.Spread.Sheets.SheetArea.viewport);
+
+            if (ha === "right") {
+                area.hAlign(GC.Spread.Sheets.HorizontalAlign.right);
+            } else if (ha === "center") {
+                area.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
+            } else {
+                area.hAlign(GC.Spread.Sheets.HorizontalAlign.left);
+            };
+
+            if (va === "top") {
+                area.vAlign(GC.Spread.Sheets.VerticalAlign.top);
+            } else if (va === "bottom") {
+                area.vAlign(GC.Spread.Sheets.VerticalAlign.bottom);
+            } else {
+                area.vAlign(GC.Spread.Sheets.VerticalAlign.center);
+            };
+        };
+
+    },
+
+    setRowHeight: function(datas, hValue){
+        var me = this;
+        var sheet = me.spread.getSheet(0);
+        for (var row = 0; row < datas.length; row++) {
+            sheet.setRowHeight(row, hValue, GC.Spread.Sheets.SheetArea.viewport);
+        }
+    }
+};

+ 1 - 1
server.js

@@ -52,7 +52,7 @@ app.use(function (req, res, next) {
 });
 
 app.use('/', require('./modules/users/routes/users_route'));
-app.use('/fees', require('./modules/fees/routes/fees_router'));
+app.use('/feeRates', require('./modules/feeRates/routes/feeRates_router'));
 
 app.get('/template/bills', function (req, res) {
     var checkAdmin = function (userAccount) {

+ 1 - 1
web/fees/feeRate.html

@@ -117,7 +117,7 @@
     <script src="/lib/tether/tether.min.js"></script>
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script src="/lib/global.js"></script>
-    <script src="/web/fees/feeRate.js"></script>
+    <script src="/web/feeRate/feeRate.js"></script>
 </body>
 <script type="text/javascript">
     autoFlashHeight();

+ 4 - 4
web/fees/feeRate.js

@@ -24,7 +24,7 @@ $(document).ready(function () {
 function loadProjectFeeRates(fileID) {
     $.ajax({
         type: "POST",
-        url: '/fees/getProjectFeeRates',
+        url: '/feeRates/getProjectFeeRates',
         data: {"fileID": fileID},
         success: function (result) {
             if (result.data) {
@@ -43,7 +43,7 @@ function loadStdFeeRateLibNames(region) {
 
     $.ajax({
         type: "POST",
-        url: '/fees/getLibNames',
+        url: '/feeRates/getLibNames',
         data: {"region": region},
         success: function (result) {
             if (result.data) {
@@ -63,7 +63,7 @@ function loadStdFeeRateLibNames(region) {
 function loadLibFeeRates(libID) {
     $.ajax({
         type: "POST",
-        url: '/fees/getLibFeeRates',
+        url: '/feeRates/getLibFeeRates',
         data: {"libID": libID},
         success: function (result) {
             if (result.data) {
@@ -153,7 +153,7 @@ function createSpreadView(canEdit) {
         update: function(params) {
             $.ajax({
                 type: 'POST',
-                url: '/fees/updateProjectFeeRate',
+                url: '/feeRates/updateProjectFeeRate',
                 data: {"fileID": feeRateFileID, "rateID": params.dataItem.ID, "rateValue": params.dataItem.rate},
                 success: function(data) {
                     var iCode = data.data;

+ 3 - 1
web/rationRepository/fuzhu.html

@@ -100,7 +100,7 @@
                     </div>
                   </div>
                   <div class="main-content col-lg-5 p-0">
-                      <div id="contentSpread" style="height: 400px;">
+                      <div id="contentSpread" style="height: 400px; margin-left:4px;" />
                     <!--<div class="m-2">
                       <p><div class="form-check"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios1" value="option1" checked> 工料机整体调整</label>&nbsp;&nbsp;<label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios1" value="option1"> 单个工料机调整</label></div></p>
                     </div>
@@ -193,6 +193,8 @@
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
     <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
     <script type="text/javascript" src="/public/web/QueryParam.js"></script>
+    <script src="/public/web/sheet.js"></script>
+    <script src="/public/debug.js"></script>
     <script type="text/javascript" src="/web/rationRepository/js/coeList.js"></script>
     <!--<script type="text/javascript" src="/web/rationRepository/js/zTreeCommon.js"></script>-->
     <!--<script type="text/javascript" src="/web/rationRepository/js/sheetCommon.js"></script>-->

+ 106 - 43
web/rationRepository/js/coeList.js

@@ -10,45 +10,117 @@ $("#gongliao").click(function(){
     $(this).attr('href', "/rationRepository/lmm" + "?repository=" + getQueryString("repository"))
 });
 
-pObj = {
-    spread: null,
 
-    createSheet: function (container, colDef, datas){
+var coeList = {
+    libID: -1,
+    datas: [],
+    colDefMain: [
+        {name: "ID", displayName: "编号",formatter: "000000", size: 100},
+        {name: "name", displayName: "名称", size: 280},
+        {name: "content", displayName: "内容", size: 250}
+    ],
+    colDefContent: [
+        {name: "coeType", displayName: "类型", size: 100, hAlign: "center"},
+        {name: "gljID", displayName: "工料机ID", size: 100, hAlign: "center",formatter: "000000"},
+        {name: "operator", displayName: "操作符", size: 60, hAlign: "center"},
+        {name: "amount", displayName: "数量", size: 80, hAlign: "right"}
+    ],
+    mainSpread: null,
+    detailSpread: null,
+
+    getLibID: function(libName){
         var me = this;
-        me.spread = new GC.Spread.Sheets.Workbook(container, {sheetCount:1});
-        me.spread.suspendPaint();
+        $.ajax({
+            type:"POST",
+            url:"/rationRepository/api/getLibIDByName",
+            data:{"libName": libName},
+            dataType:"json",
+            cache:false,
+            async: false,
+            timeout:20000,
+            success: function (result) {
+                if (result.data) {
+                    me.libID = result.data;
+                }
+            },
+            error: function (result) {
+                alert('内部程序错误!');
+            }
+        })
+    },
 
-        me.spread.options.tabStripVisible = false;
-        me.spread.options.showHorizontalScrollbar = false;
+    getDatas: function (libName) {
+        var me = this;
+        me.getLibID(libName);
 
-        var sheet = me.spread.getSheet(0);
-        var sheetArea = GC.Spread.Sheets.SheetArea;
-        sheet.setRowHeight(0, 30, sheetArea.colHeader);
-        sheet.autoGenerateColumns = false;
-        sheet.setDataSource(datas);
-        sheet.bindColumns(colDef);
-        sheet.getRange(-1, 2, -1, 1).hAlign(GC.Spread.Sheets.HorizontalAlign.center);
+        if (me.libID == -1){
+            return false;
+        };
 
-        me.spread.resumePaint();
-    }
-};
+        $.ajax({
+            type:"POST",
+            url:"/rationRepository/api/getCoeList",
+            data:{"libID": me.libID},
+            dataType:"json",
+            cache:false,
+            async: false,
+            timeout:20000,
+            success: function (result) {
+                if (result.data) {
+                    me.datas = result.data;
+                };
+            },
+            error: function (result) {
+                alert('内部程序错误!');
+            }
+        })
+    },
 
+    show: function (){
+        var me = this;
+        var libName = getQueryString("repository");
 
-var colDefMain = [
-    {name: "ID", displayName: "编号", size: 100},
-    {name: "name", displayName: "名称", size: 200},
-    {name: "content", displayName: "内容", size: 250}
-];
+        // datas from server.
+        me.getDatas(libName);
+        me.mainSpread = sheetObj.create($('#mainSpread')[0], me.colDefMain, me.datas);
+        me.detailSpread = sheetObj.create($('#contentSpread')[0], me.colDefContent, me.datas[0].coes);
 
-var colDefContent = [
-    {name: "coeType", displayName: "类型", size: 100},
-    {name: "gljID", displayName: "工料机ID", size: 100},
-    {name: "operator", displayName: "操作符", size: 60},
-    {name: "amount", displayName: "数量", size: 80}
-];
+        me.mainSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell);
+        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.CellChanged, me.onDetailCellChanged);
 
-pObj.createSheet($('#mainSpread')[0], colDefMain, createDatas(50));
-pObj.createSheet($('#contentSpread')[0], colDefContent, createContents(10));
+        var coeType = new GC.Spread.Sheets.CellTypes.ComboBox();
+        coeType.items(["单个","全部","人工类","材料类","机械类"]);
+        me.detailSpread.getSheet(0).getRange(-1, 0, -1, 1).cellType(coeType);
+
+
+        // datas for test.
+        //sheetObj.create($('#mainSpread')[0], me.colDefMain, createDatas(50));
+        //sheetObj.create($('#contentSpread')[0], me.colDefContent, createContents(10));
+    },
+
+    onMainEnterCell: function(sender, args) {
+        var me = coeList;
+        var row = args.sheet.getActiveRowIndex();
+        me.detailSpread.suspendPaint();
+        me.detailSpread.getSheet(0).setDataSource(me.datas[row].coes);
+        me.detailSpread.resumePaint();
+    },
+
+    onDetailCellChanged:  function(sender, args) {
+        var me = coeList;
+        var row = args.sheet.getActiveRowIndex();
+        var curType = args.sheet.getValue(row,0);
+        if (!(curType == '单个')){
+            args.sheet.setValue(row, 1, null);
+            //args.sheet.getCell(row, 1).backColor("red");
+        }
+        else{
+            //args.sheet.getCell(row, 1).backColor("Blue");
+        };
+    }
+};
+
+coeList.show();
 
 
 function createDatas(counts){
@@ -63,7 +135,6 @@ function createDatas(counts){
     };
     return datas;
 }
-
 function createContents(counts){
     var datas = [];
     var types = ['人工类', '材料类', '机械类','单GLJ','全部'];
@@ -71,22 +142,14 @@ function createContents(counts){
     for (var i = 0; i < counts; i++) {
         var data = new Object();
         data.coeType = types[i % types.length];
-        data.gljID = (data.coeType == '单GLJ') ? Math.floor(Math.random() * 1000) : 0;
+        data.gljID = (data.coeType == '单GLJ') ? Math.floor(Math.random() * 1000) : '';
         data.operator = operators[i % operators.length];
         data.amount = Math.floor(Math.random() * 1000) / 100;
+        data.amount2 = Math.floor(Math.random() * 1000) / 100;
+        data.amount3 = Math.floor(Math.random() * 1000) / 100;
+        data.amount4 = Math.floor(Math.random() * 1000) / 100;
         datas.push(data);
     };
     return datas;
 }
 
-function testObj2(obj) {
-    var str = "";
-    var spr = "";
-    for (var x in obj) {
-        if (obj.hasOwnProperty(x)) {
-            if(str == ''){ spr = '' } else { spr = ', '};
-            str += spr + x + ':' + obj[x];
-        }
-    }
-    return str;
-};