فهرست منبع

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

TonyKang 8 سال پیش
والد
کامیت
4759b62444
34فایلهای تغییر یافته به همراه1081 افزوده شده و 424 حذف شده
  1. 10 4
      modules/bills/controllers/billsControllers.js
  2. 70 57
      modules/bills/model/interfaces.js
  3. 2 2
      modules/bills/model/billsModel.js
  4. 1 1
      modules/bills/model/schemas.js
  5. 8 7
      modules/bills/routes/billsRoutes.js
  6. 55 0
      modules/main/controllers/bills_controller.js
  7. 55 0
      modules/main/controllers/rations_controller.js
  8. 8 0
      modules/main/db/project_db.js
  9. 102 0
      modules/main/models/bills.js
  10. 3 0
      modules/main/models/billsExprs.js
  11. 22 0
      modules/main/models/billsSubSchemas.js
  12. 3 0
      modules/main/models/expressions.js
  13. 24 0
      modules/main/models/gljs.js
  14. 21 0
      modules/main/models/projectGLJ.js
  15. 25 0
      modules/main/models/rationPrograms.js
  16. 89 0
      modules/main/models/rations.js
  17. 13 0
      modules/main/routes/bills_route.js
  18. 13 0
      modules/main/routes/rations_route.js
  19. 9 4
      server.js
  20. 0 59
      web/bills/html/testCanvas.html
  21. 0 94
      web/bills/scripts/billsAjax.js
  22. 0 84
      web/bills/scripts/buildTreeData.js
  23. 0 25
      web/bills/scripts/testTreeData.js
  24. 2 5
      web/bills/html/main.html
  25. 2 2
      web/bills/html/neirong.html
  26. 154 44
      web/bills/html/qingdan.html
  27. 19 0
      web/billsLib/html/test.html
  28. 2 2
      web/bills/html/tezheng.html
  29. 147 0
      web/billsLib/scripts/billsLibAjax.js
  30. 165 0
      web/billsLib/scripts/billsLibSetting.js
  31. 38 0
      web/billsLib/scripts/billsLibTree.js
  32. 0 0
      web/billsLib/scripts/dateFormat.js
  33. 0 0
      web/billsLib/scripts/global.js
  34. 19 34
      web/bills/scripts/setSheets.js

+ 10 - 4
modules/bills/controllers/billsControllers.js

@@ -2,9 +2,9 @@
  * Created by vian on 2017/3/22.
  */
 
-var billsDao = require("../model/interfaces");
+var billsDao = require("../billsLibModel/billsLibInterfaces");
 //----
-var model = require("../model/billsModel");
+var model = require("../billsLibModel/billsLibModel");
 var counter = require("../../../public/counter/counter");
 var StdBillsLib = model.stdBillsLibMod;
 var Bills = model.billsMod;
@@ -42,6 +42,12 @@ module.exports = {
             callback(req, res, err ,message, null);
         });
     },
+    getStdBillsLibName: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsDao.getStdBillsLibName(data.billsLibId, function(err, message, info){
+            callback(req, res, err, message, info);
+        });
+    },
     getBills: function(req, res){
         var data = JSON.parse(req.body.data);
         billsDao.getBills(data.billsLibId, function(err, message, bills){
@@ -54,9 +60,9 @@ module.exports = {
             callback(req, res, err, message, null);
         });
     },
-    updateNextSiblingId: function (req, res) {
+    updatePNId: function (req, res) {
         var data = JSON.parse(req.body.data);
-        billsDao.updateNextSiblingId(data, function(err, message){
+        billsDao.updatePNId(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },

+ 70 - 57
modules/bills/model/interfaces.js

@@ -1,7 +1,7 @@
 /**
  * Created by vian on 2017/3/20.
  */
-var model = require("./billsModel");
+var model = require("./billsLibModel");
 var counter = require("../../../public/counter/counter");
 var StdBillsLib = model.stdBillsLibMod;
 var Bills = model.billsMod;
@@ -75,9 +75,19 @@ billsDao.prototype.renameStdBillsLib = function(renameData, callback){
     });
 }
 
+billsDao.prototype.getStdBillsLibName = function(billsLibId, callback){
+    StdBillsLib.find({billsLibId: billsLibId}, "-_id", function(err,  data){
+        if(err){
+            callback(1, "Error", null);
+        }
+        else {
+            callback(0, "", data);
+        }
+    });
+}
 //----------------------------Bills---------------------
 billsDao.prototype.getBills = function (billsLibId, callback) {
-    Bills.find({billsLibId: billsLibId},"-_id",  function(err, billsData){
+    Bills.find({billsLibId: billsLibId}, "-_id",  function(err, billsData){
         if(err){
             callback(1, "Error", null);
         }
@@ -88,70 +98,73 @@ billsDao.prototype.getBills = function (billsLibId, callback) {
 }
 
 billsDao.prototype.createBills = function(cbillsData, callback){
-    var field = cbillsData.field;
-    var data = cbillsData.data;
-    var newId = cbillsData.id;//ǰ��ͨ�� counter.getIDAfterCount("bills", 1);���
-    var billsLibId = cbillsData.billsLibId;
-    var newBills;
-    if(field == "code"){
-        newBills = {
+    counter.getIDAfterCount('bills', 1, function(err, result){
+        var newId = result.value.sequence_value;
+        var pid = cbillsData.ParentID;
+        var nid = cbillsData.NextSiblingID;
+        var billsLibId = cbillsData.billsLibId;
+        var newBills = {
             ID: newId,
-            ParentID: cbillsData.parentId,
-            NextSiblingID: cbillsData.nextSiblingId,
-            billsLibId: billsLibId,
-            code: data
-        }
-    }
-    else if(field == "name"){
-        newBills = {
-            ID: newId,
-            ParentID: cbillsData.parentId,
-            NextSiblingID: cbillsData.nextSiblingId,
-            billsLibId: billsLibId,
-            name: data
-        }
+            ParentID: pid,
+            NextSiblingID: nid,
+            billsLibId: billsLibId
+        };
+        Bills.create(newBills, function(err){
+            if(err){
+                callback(1, "Error");
+            }
+            else{
+                callback(0, "");
+            }
+        });
+
+    })
+
+}
+
+billsDao.prototype.updatePNId= function(updateData, callback){
+    var updateId = updateData.updateId;
+    var updatepid= updateData.ParentID;
+    var updatenid = updateData.NextSiblingID;
+    if(!updatepid){
+        Bills.update({ID: updateId}, {$set: {NextSiblingID: updatenid}}, function(err){
+            if(err){
+                callback(1, "Error")
+            }
+            else{
+                callback(0, "");
+            }
+        });
     }
-    else if(field == "unit"){
-        newBills = {
-            ID: newId,
-            ParentID: cbillsData.parentId,
-            NextSiblingID: cbillsData.nextSiblingId,
-            billsLibId: billsLibId,
-            unit: data
-        }
+    else if(!updatenid){
+        Bills.update({ID: updateId}, {$set: {ParentID: updatepid}}, function(err){
+            if(err){
+                callback(1, "Error")
+            }
+            else{
+                callback(0, "");
+            }
+        });
     }
-    else if(field == "ruleText"){
-        newBills = {
-            ID: newId,
-            ParentID: cbillsData.parentId,
-            NextSiblingID: cbillsData.nextSiblingId,
-            billsLibId: billsLibId,
-            ruleText: data
-        }
+    else {
+        Bills.update({ID: updateId}, {$set: {ParentID: updatepid, NextSiblingID: updatenid}}, function(err){
+            if(err){
+                callback(1, "Error")
+            }
+            else{
+                callback(0, "");
+            }
+        });
     }
-    Bills.create(newBills, function(err){
-        if(err){
-            callback(1, "Error");
-        }
-        else{
-            callback(0, "");
-        }
-    });
-
 }
-//������ɾ������¸ı��˵�nextSiblingId
-billsDao.prototype.updateNextSiblingId = function(uNextData, callback){
-    var updateId = uNextData.id;
-    var updateData = uNextData.data;
-    Bills.update({ID: updateId}, {$set: {NextSiblingID: updateData}}, function(err){
+   /* Bills.update({nodeId: updateNode, billsLibId: billsLibId}, {$set: {ParentID: updatepid, NextSiblingID: updatenid}}, function(err){
         if(err){
             callback(1, "Error")
         }
         else{
             callback(0, "");
         }
-    });
-}
+    });*/
 
 billsDao.prototype.updateBills = function(ubillsData, callback){
     var updateId = ubillsData.id;
@@ -230,7 +243,7 @@ billsDao.prototype.getJobContent = function(billsLibId, callback){
 billsDao.prototype.createJobContent = function(cJobData, callback){
     var field = cJobData.field;
     var data = cJobData.data;
-    var id = counter.getIDAfterCount("bills", 1);
+    var id = counter.getIDAfterCount("billsLib", 1);
     var billsLibId = cJobData.billsLibId;
     var newJobContent;
     if(field == "code"){
@@ -310,7 +323,7 @@ billsDao.prototype.getItemCharacter = function(billsLibId, callback){
 billsDao.prototype.createItemCharacter = function(cItemData, callback){
     var field = cItemData.field;
     var data = cItemData.data;
-    var id = counter.getIDAfterCount("bills", 1);
+    var id = counter.getIDAfterCount("billsLib", 1);
     var billsLibId = cItemData.billsLibId;
     var newItemCharacter;
     if(field == "code"){

+ 2 - 2
modules/bills/model/billsModel.js

@@ -2,11 +2,11 @@
  * Created by vian on 2017/3/17.
  */
 var dbm = require("../../../config/db/db_manager");
-var schemas = require("./schemas.js");
+var schemas = require("./billsLibSchemas.js");
 //var db = dbm.getLocalConnection("stdBillsLibData");
 var db = dbm.getCfgConnection("stdBillsEditor");
 var stdBillsLibMod = db.model("stdBillsLib", schemas.stdBillsLibSchema);
-var billsMod = db.model("bills", schemas.billsSchema);
+var billsMod = db.model("billsLib", schemas.billsSchema);
 var jobContentMod = db.model("jobContent", schemas.jobContentSchema);
 var itemCharacterMod = db.model("itemCharacter", schemas.itemCharacterSchema);
 

+ 1 - 1
modules/bills/model/schemas.js

@@ -9,7 +9,6 @@ var stdBillsLibSchema =mongoose.Schema({
 );
 
 var billsSchema = mongoose.Schema({
-    //serialNo: Number,
     ID: Number,
     ParentID: Number,
     NextSiblingID: Number,
@@ -21,6 +20,7 @@ var billsSchema = mongoose.Schema({
     jobs: Array,
     items: Array,
     recharge:String,
+    //nodeId: Number,
     billsLibId: Number
 },
     {versionKey: false}

+ 8 - 7
modules/bills/routes/billsRoutes.js

@@ -2,7 +2,7 @@
  * Created by vian on 2017/3/17.
  */
 var express = require("express");
-var billsController = require("../controllers/billsControllers");
+var billsController = require("../billsLibControllers/billsLibControllers");
 var billsRouter =express.Router();
 
 
@@ -13,28 +13,29 @@ var billsRouter =express.Router();
 });*/
 
 /*billsRouter.get("/main", function(req, res){
-    res.render("bills/html/main.html");
+    res.render("billsLib/html/main.html");
 });
 
-billsRouter.get("/bills", function(req, res){
-    res.render("bills/html/qingdan.html");
+billsRouter.get("/billsLib", function(req, res){
+    res.render("billsLib/html/qingdan.html");
 });
 
 billsRouter.get("/jobs", function(req, res){
-    res.render("bills/html/neirong.html");
+    res.render("billsLib/html/neirong.html");
 });
 
 billsRouter.get("/items", function(req, res){
-    res.render("bills/html/tezheng.html");
+    res.render("billsLib/html/tezheng.html");
 });*/
 
 billsRouter.post("/getStdBillsLib", billsController.getStdBillsLib);
 billsRouter.post("/createStdBillsLib", billsController.createStdBillsLib);
 billsRouter.post("/deleteStdBillsLib", billsController.deleteStdBillsLib);
 billsRouter.post("/renameStdBillsLib", billsController.renameStdBillsLib);
+billsRouter.post("/getStdBillsLibName", billsController.getStdBillsLibName);
 billsRouter.post("/getBills", billsController.getBills);
 billsRouter.post("/createBills", billsController.createBills);
-billsRouter.post("/updateNextSiblingId", billsController.updateNextSiblingId);
+billsRouter.post("/updatePNId", billsController.updatePNId);
 billsRouter.post("/updateBills", billsController.updateBills);
 billsRouter.post("/deleteBills", billsController.deleteBills);
 billsRouter.post("/getJobContent", billsController.getJobContent);

+ 55 - 0
modules/main/controllers/bills_controller.js

@@ -0,0 +1,55 @@
+/**
+ * Created by jimiz on 2017/4/7.
+ */
+var billsData = require('../models/bills');
+
+//统一回调函数
+var callback = function(req, res, err, message, data){
+    res.json({error: err, message: message, data: data});
+};
+
+module.exports = {
+    getBills: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsData.getBills(data.projectId, function(err, message, billsList){
+            if (err === 0) {
+                callback(req, res, err, message, billsList);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+
+    updateBills: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsData.updateBills(data, function(err, message, errList){
+            if (err) {
+                callback(req, res, err, message, errList);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+
+    getBillsItemTemplate: function(req, res){
+        //var data = JSON.parse(req.body.data);
+        billsData.getBillsItemTemplate(function(err, message, billsItem){
+            if (billsItem) {
+                callback(req, res, err, message, billsItem);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+
+    allocIDs: function(req, res){
+        billsData.allocIDs(function(err, message, data){
+            if (err) {
+                callback(req, res, err, message, data);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    }
+
+};

+ 55 - 0
modules/main/controllers/rations_controller.js

@@ -0,0 +1,55 @@
+/**
+ * Created by jimiz on 2017/4/9.
+ */
+var rationsData = require('../models/rations');
+
+//统一回调函数
+var callback = function(req, res, err, message, data){
+    res.json({error: err, message: message, data: data});
+};
+
+module.exports = {
+    getRations: function(req, res){
+        var data = JSON.parse(req.body.data);
+        rationsData.getRations(data.projectId, function(err, message, rationList){
+            if (err === 0) {
+                callback(req, res, err, message, rationList);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+
+    updateRations: function(req, res){
+        var data = JSON.parse(req.body.data);
+        rationsData.updateRations(data, function(err, message, errList){
+            if (err) {
+                callback(req, res, err, message, errList);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+
+    getRationItemTemplate: function(req, res){
+        //var data = JSON.parse(req.body.data);
+        rationsData.getRationItemTemplate(function(err, message, rationItem){
+            if (billsItem) {
+                callback(req, res, err, message, rationItem);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+
+    allocIDs: function(req, res){
+        rationsData.allocIDs(function(err, message, data){
+            if (err) {
+                callback(req, res, err, message, data);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    }
+
+};

+ 8 - 0
modules/main/db/project_db.js

@@ -0,0 +1,8 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var dbm = require("../../../config/db/db_manager");
+var db = dbm.getCfgConnection("scConstruct");
+
+module.exports = db;

+ 102 - 0
modules/main/models/bills.js

@@ -0,0 +1,102 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var db = require("../db/project_db");
+var subSchema = require("./billsSubSchemas");
+var Schema = mongoose.Schema;
+var counter = require("../../../public/counter/counter.js");
+
+var billsSchema = new Schema({
+    id: Number,
+    parentId: Number,
+    nextSiblingId: Number,
+    projectId: Number,
+    serialNo: Number,
+    chapterId: Number,
+    code: String,
+    fullCode: String,
+    name: String,
+    unit: String,
+    quantity: String, // Decimal
+    programId: Number,
+    comments: String,
+    // 调价
+    xs_Labour: String, // Decimal
+    xs_Material: String, // Decimal
+    xs_Machine: String, // Decimal
+    xs_FeeRate: String, // Decimal
+    xs_LabourPrice: String, // Decimal
+    xs_MaterialPrice: String, // Decimal
+    xs_MachinePrice: String, // Decimal
+    isTender_Labour: Boolean,
+    isTender_Material: Boolean,
+    isTender_Machine: Boolean,
+    tenderTargetPrice: String, // Decimal
+    tenderTargetUnitPrice: String, // Decimal
+    // 费用字段
+    fees: [subSchema.feesSchema],
+    // 标记字段
+    flags: [subSchema.flagsSchema]
+});
+
+var bills = db.model("bills", billsSchema);
+
+var billsDAO = function(){};
+
+billsDAO.prototype.getBills = function(projectId, callback){
+    Projects.find({projectId: projectId}, function(err, datas){
+        if (!err) {
+            callback(0, '', datas);
+        } else {
+            callback(1, '', null);
+        };
+    });
+};
+
+billsDAO.prototype.updateBills = function(datas, callback){
+    var data, errList = [], updateLength = 0;
+    var updateFunc = function (err, errData) {
+        if (err){
+            errList.push(errData);
+        };
+    };
+    if (datas){
+        for (var i = 0; i < datas.length; i++){
+            data = datas[i];
+            if (data.updateType === 'update') {
+                delete data.updateType;
+                data.save(updateFunc);
+            } else if (data.updateType === 'create') {
+                delete data.updateType;
+                data.save(updateFunc);
+            } else if (data.updateType === 'delete') {
+                delete data.updateType;
+                data.remove(updateFunc);
+            };
+        };
+        if (errList.length > 0){
+            callback(1, 'update error.', errList);
+        } else {
+            callback(0, '', null);
+        };
+    };
+};
+
+billsDAO.prototype.getBillsItemTemplate = function(callback){
+    var data = new bills;
+    /* to do: 需要根据标准配置库填充fees和flags字段,是否需要更多的参数? */
+    callback(0, '', data);
+};
+
+const
+    IDStep = 50, IDModule = 'bills';
+
+billsDAO.prototype.allocIDs = function(callback){
+    var lowID, highID;
+    counter.getIDAfterCount(IDModule, IDStep, function(highID, err){});
+    lowID = highID - IDStep + 1;
+    callback(0, '', {lowID, highID});
+};
+
+module.exports = new billsDAO();

+ 3 - 0
modules/main/models/billsExprs.js

@@ -0,0 +1,3 @@
+/**
+ * Created by jimiz on 2017/4/10.
+ */

+ 22 - 0
modules/main/models/billsSubSchemas.js

@@ -0,0 +1,22 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var Schema = mongoose.Schema;
+
+// 费用字段
+var feesSchema = new Schema({
+    fieldName: String,
+    unitFee: String, // Decimal. 单价
+    totalFee: String, // Decimal. 合价
+    tenderUnitFee: String, // Decimal. 调价后单价
+    tenderTotalFee: String // Decimal. 调价后合价
+});
+
+// 标记字段
+var flagsSchema = new Schema({
+    fieldName: String,
+    flag: Boolean
+});
+
+module.exports = {feesSchema, flagsSchema};

+ 3 - 0
modules/main/models/expressions.js

@@ -0,0 +1,3 @@
+/**
+ * Created by jimiz on 2017/4/10.
+ */

+ 24 - 0
modules/main/models/gljs.js

@@ -0,0 +1,24 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var db = require("../db/project_db");
+var Schema = mongoose.Schema;
+
+var gljSchema = new Schema({
+    id: Number,
+    projectID: Number,
+    orgRQuantity: String, //Decimal
+    rQuantity: String, //Decimal
+    customQuantity: String, //Decimal
+    quantity: String, //Decimal
+    rationItemQuantity: String, //Decimal
+    rationPrice: String, //Decimal
+    adjustPrice: String, //Decimal
+    price: String, //Decimal
+    tenderQuantity: String, //Decimal
+    tenderPrice: String, //Decimal
+    type: Number
+    // to do
+
+});

+ 21 - 0
modules/main/models/projectGLJ.js

@@ -0,0 +1,21 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var db = require("../db/project_db");
+var Schema = mongoose.Schema;
+
+var projectGLJSchema = new Schema({
+    id: Number,
+    projectId: Number,
+    code: Number,
+    name: String,
+    specs: String,
+    unit: String,
+    type: String,
+    amount: String, // Decimal
+    rationPrice: String, //Decimal
+    adjustPrice: String, //Decimal
+    price: String //Decimal
+    // to do
+});

+ 25 - 0
modules/main/models/rationPrograms.js

@@ -0,0 +1,25 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var db = require("../db/project_db");
+var Schema = mongoose.Schema;
+
+var rationProgramSchema = new Schema({
+    id: Number,
+    projectId: Number,
+    name: String,
+    programs: [{
+        id: Number,
+        serialNo: Number,
+        code: String,
+        name: String,
+        expression: String, // 表达式
+        displayExprs: String, // 显示用表达式/基数说明
+        feeRate: String, // Decimal
+        tenderFeeRate: String, // Decimal
+        feeRateID: Number, // 费率细目ID
+        mapField: String, // 对应定额表字段
+        comments: String // 备注
+    }]
+});

+ 89 - 0
modules/main/models/rations.js

@@ -0,0 +1,89 @@
+/**
+ * Created by jimiz on 2017/4/1.
+ */
+var mongoose = require("mongoose");
+var db = require("../db/project_db");
+var subSchema = require("./billsSubSchemas");
+var Schema = mongoose.Schema;
+
+var rationsSchema = new Schema({
+    id: Number,
+    projectId: Number,
+    billsItemId: Number,
+    serialNo: Number,
+    libID: Number,
+    code: String,
+    name: String,
+    maskName: String,
+    unit: String,
+    quantity: String, // Decimal
+    programId: Number,
+    content: String,
+    rationProjName: String,
+    comments: String,
+    // 费用字段
+    fees: [subSchema.feesSchema],
+    // 标记字段
+    flags: [subSchema.flagsSchema]
+});
+
+var rations = db.model("rations", rationsSchema);
+
+var rationsDAO = function(){};
+
+rationsDAO.prototype.getRations = function(projectId, callback){
+    Projects.find({projectID: projectId}, function(err, datas){
+        if (!err) {
+            callback(0, '', datas);
+        } else {
+            callback(1, '', null);
+        }
+    });
+};
+
+rationsDAO.prototype.updateRations = function(projectId, datas, callback){
+    var data, errList = [], updateLength = 0;
+    var updateFunc = function (err, errData) {
+        if (err){
+            errList.push(errData);
+        };
+    };
+    if (datas){
+        for (var i = 0; i < datas.length; i++){
+            data = datas[i];
+            if (data.updateType === 'update') {
+                delete data.updateType;
+                data.save(updateFunc);
+            } else if (data.updateType === 'create') {
+                delete data.updateType;
+                data.save(updateFunc);
+            } else if (data.updateType === 'delete') {
+                delete data.updateType;
+                data.remove(updateFunc);
+            };
+        };
+        if (errList.length > 0){
+            callback(1, 'update error.', errList);
+        } else {
+            callback(0, '', null);
+        };
+    };
+};
+
+rationsDAO.prototype.getRationItemTemplate = function(callback){
+    var data = new rations;
+    /* to do: 需要根据标准配置库填充fees和flags字段,是否需要更多的参数? */
+    callback(0, '', data);
+};
+
+const
+    IDStep = 50, IDModule = 'rations';
+
+rationsDAO.prototype.allocIDs = function(callback){
+    var lowID, highID;
+    counter.getIDAfterCount(IDModule, IDStep, function(highID, err){});
+    lowID = highID - IDStep + 1;
+    callback(0, '', {lowID, highID});
+};
+
+module.exports = new rationsDAO();

+ 13 - 0
modules/main/routes/bills_route.js

@@ -0,0 +1,13 @@
+/**
+ * Created by jimiz on 2017/4/7.
+ */
+var express = require('express');
+var billsRouter = express.Router();
+var billsController = require('../controllers/bills_controller');
+
+billsRouter.post('/getBills', billsController.getBills);
+billsRouter.post('/updateBills', billsController.updateBills);
+billsRouter.post('/getBillsItemTemplate', billsController.getBillsItemTemplate);
+billsRouter.post('/allocIDs', billsController.allocIDs);
+
+module.exports = billsRouter;

+ 13 - 0
modules/main/routes/rations_route.js

@@ -0,0 +1,13 @@
+/**
+ * Created by jimiz on 2017/4/7.
+ */
+var express = require('express');
+var rationsRouter = express.Router();
+var rationsController = require('../controllers/rations_controller');
+
+rationsRouter.post('/getRations', rationsController.getRations);
+rationsRouter.post('/updateRations', rationsController.updateRations);
+rationsRouter.post('/getRationsItemTemplate', rationsController.getRationItemTemplate);
+rationsRouter.post('/allocIDs', rationsController.allocIDs);
+
+module.exports = rationsRouter;

+ 9 - 4
server.js

@@ -66,6 +66,11 @@ app.get('/main',  function(req, res) {
     }
 });
 
+var bills_Router = require('./modules/main/routes/bills_route');
+var rations_Router = require('./modules/main/routes/rations_route');
+app.use('/bills', bills_Router);
+app.use('/rations', rations_Router);
+
 var rpt_Router = require("./modules/reports/routes/report_router");
 app.get('/report',  function(req, res) {
     if (!req.session.userAccount) {
@@ -89,13 +94,13 @@ app.use("/rationLibEditor",rations_Router);
 
 
 app.get("/stdBillsmain", function(req, res){
-    res.render("bills/html/main.html");
+    res.render("billsLib/html/main.html");
 });
 app.get("/stdBills", function(req, res){
-    res.render("bills/html/qingdan.html");
+    res.render("billsLib/html/qingdan.html");
 });
-var billsRouter = require("./modules/bills/routes/billsRoutes");
-app.use("/stdBillsEditor", billsRouter);
+var billsLibRouter = require("./modules/billsLib/billsLibRoutes/billsLibRoutes");
+app.use("/stdBillsEditor", billsLibRouter);
 //-----------------
 
 app.use(function(req, res, next) {

+ 0 - 59
web/bills/html/testCanvas.html

@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head lang="en">
-    <meta charset="UTF-8">
-    <title>Canvas Demo</title>
-    <script src="../../../lib/jquery/jquery.min.js"></script>
-    <script>
-        var test = "test";
-        function setId(){
-            return "testSetId";
-        }
-    </script>
-</head>
-<body>
-<canvas id="cv"></canvas>
-<input type="hidden" id="">
-<div id="di">sss</div>
-</body>
-<script>
-window.onload = function(){
-    var canvas = document.getElementById("cv");
-    var ctx = canvas.getContext("2d");
-    //ctx.setLineDash([1,1]);
-    ctx.beginPath();
-    ctx.moveTo(100, 100);
-    //ctx.lineWidth = 0.5;
-    ctx.strokeStyle = "gray";
-    ctx.lineTo(100, 120);
-    ctx.lineTo(120, 120);
-    ctx.lineTo(120, 100);
-    ctx.lineTo(100, 100);
-    ctx.stroke();
-    ctx.beginPath();
-    ctx.strokeStyle = "black";
-    ctx.moveTo(105, 110);
-    ctx.lineTo(115, 110);
-    ctx.stroke();
-
-    ctx.beginPath();
-    ctx.moveTo(100, 50);
-    ctx.strokeStyle = "gray";
-    ctx.lineTo(100, 70);
-    ctx.lineTo(120, 70);
-    ctx.lineTo(120, 50);
-    ctx.lineTo(100, 50);
-    ctx.stroke();
-    ctx.beginPath();
-    ctx.strokeStyle = "black";
-    ctx.moveTo(105, 60);
-    ctx.lineTo(115, 60);
-    ctx.moveTo(110, 55);
-    ctx.lineTo(110, 65);
-    ctx.stroke();
-
-$("#di").remove();
-
-}
-</script>
-</html>

+ 0 - 94
web/bills/scripts/billsAjax.js

@@ -1,94 +0,0 @@
-/**
- * Created by vian on 2017/3/27.
- */
-var mainAjax = {
-    getStdBillsLib: function(userId){
-        $.ajax({
-            type: "post",
-            url: "/stdBillsEditor/getStdBillsLib",
-            data: {"data": JSON.stringify({"userId": userId})},
-            dataType: "json",
-            success: function(result){
-                if(result.data){
-                    for(var i=0; i<result.data.length; i++){
-                        var id = result.data[i].billsLibId;
-                        var billsLibName = result.data[i].billsLibName;
-                        var createDate = result.data[i].createDate;
-                        var createDateFmt = new Date(createDate).format("yyyy-MM-dd");
-                        $("#showArea").append(
-                            "<tr id='tempId'>" +
-                            "<td><a href='stdBills'>"+billsLibName+"</a></td>" +
-                            "<td>"+createDateFmt+" </td>" +
-                            "<td><a href='javascript:void(0);' data-toggle='modal' data-target='#edit' title='编辑'>" +
-                            "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
-                            "<i class='fa fa-remove'></i></a></td></tr>");
-                        var newHref = "stdBills?billsLibId="+id;
-                        $("#tempId td:first a").attr("href", newHref);
-                        $("#tempId").attr("id", id);
-                    }
-                }
-
-            }
-        });
-    },
-    createStdBillsLib: function(billsLibName){
-        $.ajax({
-            type: "POST",
-            url: "/stdBillsEditor/createStdBillsLib",
-            data: {data: JSON.stringify({name: billsLibName}) },
-            dataType: "json",
-            success: function(result){
-                var id = result.data[0].billsLibId;
-                var createDate = result.data[0].createDate;
-                var createDateFmt = new Date(createDate).format("yyyy-MM-dd");
-                $("#showArea").append(
-                    "<tr id='tempId'><td><a href='stdBills'>"+billsLibName+"</a></td><td>"+createDateFmt+" </td><td><a href='javascript:void(0);' data-toggle='modal' data-target='#edit' title='编辑'>" +
-                    "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
-                    "<i class='fa fa-remove'></i></a></td></tr>"
-                );
-                var newHref = "stdBills?billsLibId="+id;
-                $("#tempId td:first a").attr("href", newHref);
-                $("#tempId").attr("id", id);
-            }
-        });
-    },
-    deleteStdBillsLib: function(billsLibId){
-        $.ajax({
-            type: "POST",
-            url: "/stdBillsEditor/deleteStdBillsLib",
-            data: {"data": JSON.stringify({"billsLibId": billsLibId})},
-            dataType: "json",
-            success: function(result){
-                if(!result.error){
-                    var jqSel = "#"+billsLibId;
-                    $(jqSel).remove();
-                }
-            }
-        });
-    },
-    renameStdBillsLib: function(billsLibId, newName){
-        $.ajax({
-            type: "post",
-            url: "/stdBillsEditor/renameStdbillsLib",
-            data: {"data": JSON.stringify({"id": billsLibId, "value": newName})},
-            dataType: "json",
-            success: function(result){
-                var jqSel = "#" + billsLibId + " td:first" + " a";
-                $(jqSel).text(newName);
-            }
-        });
-    }
-}
-
-var billsAjax = {
-    getBills: function(billsLibId){
-        $.ajax({
-            type: "post",
-            url: "/stdBillsEditor/getBills",
-            data: {"data": JSON.stringify({"billsLibId": billsLibId})},
-            dataType: "json",
-            success: function(result){
-            }
-        });
-    }
-}

+ 0 - 84
web/bills/scripts/buildTreeData.js

@@ -1,84 +0,0 @@
-/**
- * Created by vian on 2017/3/24.
- */
-var myTree = {
-    getTop: function(data, topId){
-        var top = [];
-        for(var i=0; i<data.length; i++){
-            if(data[i].ParentID == -1 ||data[i].ParentID == topId){
-                top.push(data[i]);
-            }
-        }
-        return top;
-    },
-
-    sortNodes: function(nodes){
-        for(var i=0; i<nodes.length; i++){
-            for(var j=i+1; j<nodes.length; j++){
-                var temp;
-                if(nodes[i].NextSiblingID == nodes[j].ID){
-                    temp = nodes[i+1];
-                    nodes[i+1] = nodes[j];
-                    nodes[j] = temp;
-                }
-            }
-            if(nodes[i].NextSiblingID == nodes[0].ID){
-                var topNode = nodes[i];
-                for(var j=nodes.length-2; j>=0; j-- ){
-                    nodes[j+1] = nodes[j];
-                }
-                nodes[0] = topNode;
-            }
-        }
-        return nodes;
-    },
-
-    getNodes: function(data ,ids){
-        var idsNodes = [];
-        for(var i =0; i<ids.length; i++){
-            for(var j=0 ; j<data.length; j++){
-                if(ids[i] == data[j].ID){
-                    idsNodes.push({ID: data[j].ID, ParentID: data[j].ParentID, NextSiblingID: data[j].NextSiblingID, children: data[j].children});
-                }
-            }
-        }
-        return idsNodes;
-    },
-
-    getNodeChildren: function(node, children){
-        for(var i=0; i<billsData.length; i++){
-            if(billsData[i].ParentID == node.ID){
-                children.push(billsData[i].ID);
-                myTree.getNodeChildren(billsData[i], children);
-            }
-        }
-        return children;
-    },
-
-    buildChildren: function(billsData){
-        var tempTree = [];
-        for(var i=0; i<billsData.length; i++){
-            var children = [];
-            myTree.getNodeChildren(billsData[i], children);
-            tempTree.push({"ID": billsData[i].ID, "ParentID": billsData[i].ParentID, "NextSiblingID": billsData[i].NextSiblingID, "children": children});
-        }
-        return tempTree;
-    },
-
-    buildTree: function(treeContainer, billsData, tempTree, topId){
-        var sortTempTree = myTree.sortNodes(getTop(tempTree, topId));
-        for(var i=0; i<sortTempTree.length; i++){
-            if(sortTempTree[i].children.length > 0){
-                treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children});
-                var childrenTree = myTree.getNodes(myTree.buildChildren(billsData), sortTempTree[i].children);
-                myTree.buildTree(treeContainer, billsData, childrenTree, sortTempTree[i].ID);
-            }
-            else {
-                treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children});
-            }
-        }
-        return treeContainer;
-
-    }
-
-}

+ 0 - 25
web/bills/scripts/testTreeData.js

@@ -1,25 +0,0 @@
-/**
- * Created by vian on 2017/3/27.
- */
-var billsData = [
-    {ID: "1", ParentID: "-1", NextSiblingID: 2},
-    {ID: "2", ParentID: "-1", NextSiblingID: 3},
-    {ID: "3", ParentID: "-1", NextSiblingID: 9},
-    {ID: "4", ParentID: "3", NextSiblingID: 5},
-    {ID: "5", ParentID: "3", NextSiblingID: -1},
-    {ID: "6", ParentID: "4", NextSiblingID: 7},
-    {ID: "7", ParentID: "4", NextSiblingID: -1},
-    {ID: "8", ParentID: "6", NextSiblingID: -1},
-    {ID: "9", ParentID: "-1", NextSiblingID: 10},
-    {ID: "10", ParentID: "-1", NextSiblingID: -1},
-    {ID: "11", ParentID: "10", NextSiblingID: -1},
-    {ID: "12", ParentID: "11", NextSiblingID: -1},
-    {ID: "13", ParentID: "12", NextSiblingID: -1},
-    {ID: "14", ParentID: "13", NextSiblingID: -1},
-    {ID: "15", ParentID: "14", NextSiblingID: 16},
-    {ID: "16", ParentID: "14", NextSiblingID: 17},
-    {ID: "17", ParentID: "14", NextSiblingID: -1},
-    {ID: "18", ParentID: "17", NextSiblingID: 19},
-    {ID: "19", ParentID: "17", NextSiblingID: -1},
-    {ID: "20", ParentID: "1", NextSiblingID: -1},
-]

+ 2 - 5
web/bills/html/main.html

@@ -124,11 +124,8 @@
     <script src="lib/tether/tether.min.js"></script>
     <script src="lib/bootstrap/bootstrap.min.js"></script>
     <script src="lib/global.js"></script>
-    <!-- zTree -->
-    <script type="text/javascript" src="lib/ztree/jquery.ztree.core.js"></script>
-    <script type="text/javascript" src="lib/ztree/jquery.ztree.excheck.js"></script>
-    <script src="web/bills/scripts/billsAjax.js"></script>
-    <script src="web/bills/scripts/dateFormat.js"></script>
+    <script src="web/billsLib/scripts/billsLibAjax.js"></script>
+    <script src="web/billsLib/scripts/dateFormat.js"></script>
 
 </body>
 <script type="text/javascript">

+ 2 - 2
web/bills/html/neirong.html

@@ -169,8 +169,8 @@
     <script src="../../../lib/jquery/jquery.min.js"></script>
     <script src="../../../lib/tether/tether.min.js"></script>
     <script src="../../../lib/bootstrap/bootstrap.min.js"></script>
-    <script src="../../../web/bills/scripts/global.js"></script>
-    <script src="../../../web/bills/scripts/setSheets.js"></script>
+    <script src="..//scripts/global.js"></script>
+    <script src="..//scripts/setSheets.js"></script>
     <SCRIPT type="text/javascript">
         $(document).ready(function(){
             buildAllJobs();

+ 154 - 44
web/bills/html/qingdan.html

@@ -20,7 +20,7 @@
     <div class="header">
         <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
             <span class="header-logo px-2">清单规则编辑器</span>
-            <div class="navbar-text"><a href="main.html">清单规则</a><i class="fa fa-angle-right fa-fw"></i>XXX清单规则</div>
+            <div class="navbar-text"></div>
         </nav>
         <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
 
@@ -46,22 +46,22 @@
                   <div class="collapse navbar-collapse" id="navbarNav">
                       <ul class="navbar-nav">
                           <li class="nav-item">
-                              <a class="nav-link text-primary" href="#"><i class="fa fa-share" aria-hidden="true"></i>插入</a>
+                              <a class="nav-link text-primary" id="insert" href="javascript: void(0);"><i class="fa fa-share" aria-hidden="true"></i>插入</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id ="aDelete" href="javascript:void (0)"><i class="fa fa-remove" aria-hidden="true"></i>删除</a>
+                              <a class="nav-link text-primary" id ="delete" href="javascript:void (0)"><i class="fa fa-remove" aria-hidden="true"></i>删除</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" href="#"><i class="fa fa-arrow-left" aria-hidden="true"></i>升级</a>
+                              <a class="nav-link text-primary" id="upLevel"  href="javascript: void(0);"><i class="fa fa-arrow-left" aria-hidden="true"></i>升级</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" href="#"><i class="fa fa-arrow-right" aria-hidden="true"></i>降级</a>
+                              <a class="nav-link text-primary" id="downLevl" href="javascript: void(0);"><i class="fa fa-arrow-right" aria-hidden="true"></i>降级</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link disabled" href="#"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
+                              <a class="nav-link text-primary" id="upMove" href="javascript: void(0);"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link disabled" href="#"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
+                              <a class="nav-link text-primary" id="downMove" href="javascript: void(0);"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
                           </li>
                       </ul>
                   </div>
@@ -207,63 +207,173 @@
         </div>
     </div>
     <!-- JS. -->
-    <script src="lib/spreadjs/gc.spread.sheets.all.10.0.1.min.js"></script>
+    <script src="lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
     <script src="lib/jquery/jquery.min.js"></script>
     <script src="lib/tether/tether.min.js"></script>
     <script src="lib/bootstrap/bootstrap.min.js"></script>
-    <script src="web/bills/scripts/global.js"></script>
-    <script src="web/bills/scripts/setSheets.js"></script>
-    <script src="web/bills/scripts/billsAjax.js"></script>
+    <script src="web/billsLib/scripts/global.js"></script>
+    <script src="web/billsLib/scripts/setSheets.js"></script>
+    <script src="web/billsLib/scripts/billsLibAjax.js"></script>
+    <!--idTree-->
+    <script src="public/web/idTree.js"></script>
+    <script src="public/web/tree_sheet_controller.js"></script>
+    <script src="public/web/tree_sheet_helper.js"></script>
+    <script src="web/billsLib/scripts/billsLibSetting.js"></script>
+    <script src="web/billsLib/scripts/billsLibTree.js"></script>
+    <!--<script src="test/tmp_data/data_15690.js"></script>-->
+    <script src="test/tmp_data/bills_grid_setting.js"></script>
 </body>
 <script type="text/javascript">
     autoFlashHeight();
+    var billsTree = billsLibTree.createBillsTree();
     var billsLibId = getQueryString("billsLibId");
     $(document).ready(function(){
-        if(billsLibId&&billsLibId.toString().length>0){
-            billsAjax.getBills(billsLibId);
-        }
-        buildBills();
+        billsAjax.getStdBillsLibName(billsLibId);
+        billsAjax.getBills(billsLibId);
         buildJobs();
         buildItems();
-        testSortA();
     });
     //test
-    function testSortA(){
-        var arr = [5,1,2,8,0,10];
-        arr.sort(function(a1, a2){
-            if(a1>a2){
-                return 1;
+    //test
+
+    var dbOperation = {
+        insert: function(controller){
+            if(controller.tree.items.length === 0){
+                billsAjax.createBills(billsLibId, -1 , -1);
+                controller.insert();
             }
-            else{
-                return -1;
+            else {
+                var node = controller.tree.selected;
+                if(node){
+                    var updateId = tagId, createpid = node.getParentID(), createnid = node.getNextSiblingID();
+                    controller.insert();
+                    billsAjax.createBills(billsLibId, createpid, createnid);
+                    billsAjax.updatePNId(updateId, -1, node.getNextSiblingID());
+                }
+                else {
+                    var updateNode = controller.tree.roots[controller.tree.roots.length - 1];
+                    var updateId = updateNode.getID();
+                    controller.insert();
+                    billsAjax.createBills(billsLibId, -1, -1);
+                    billsAjax.updatePNId(updateId, -1, updateNode.getNextSiblingID());
+                }
             }
-        });
-        console.log(arr);
-    }
+        },
+
+        delete: function(controller){
+            var node = controller.tree.selected;
+            var deleteIds = [];
+            var getDeleteIds = function(node){
+                if(node){
+                    deleteIds.push(node.getID());
+                    if(node.children.length > 0){
+                        for(var i=0; i<node.children.length; i++){
+                            getDeleteIds(node.children[i]);
+                        }
+                    }
+                }
+            };
+            getDeleteIds(node);
+            billsAjax.deleteBills(deleteIds);
+            controller.delete;
+        },
 
-    function testSortB(){
-        var testDataArr = [
-            {ID: "1", NextSiblingID: "3", ParentID: "-1"},
-            {ID: "2", NextSiblingID: "6", ParentID: "-1"},
-            {ID: "3", NextSiblingID: "2", ParentID: "-1"},
-            {ID: "6", NextSiblingID: "4", ParentID: "-1"},
-            {ID: "4", NextSiblingID: "-1", ParentID: "-1"}
-        ];
+        upLevel: function(controller){
+            var node = controller.tree.selected;
+            if(node){
+                if(node.parent){
+                    //node
+                    billsAjax.updatePNId(node.getID(), node.parent.getParentID(), node.parent.getNextSiblingID());
+                    //parent
+                    billsAjax.updatePNId(node.getParentID(), null, node.getID());
+                    if(node.nextSibling){
+                        //node.nextSibling
+                        billsAjax.updatePNId(node.getNextSiblingID(), node.getID(), null);
+                    }
+                    if(node.preSibling){
+                        billsAjax.updatePNId(node.preSibling.getID(), null, -1);
+                    }
+                }
+                //controllerOp
+                controller.upLevel();
+            }
+
+        },
+
+        downLevel: function(controller){
+            var node = controller.tree.selected;
+            if(node){
+                if(node.preSibling){
+                    billsAjax.updatePNId(node.preSibling.getID(), null, node.getNextSiblingID());
+                    billsAjax.updatePNId(node.getID(), node.preSibling.getID(), -1);
+                    if(node.preSibling.children.length > 0){
+                        billsAjax.updatePNId(node.preSibling.children[node.preSibling.children.length -1].getID(), null, node.getID());
+                    }
+                    controller.downLevel();
+                }
+            }
+        },
 
-        testDataArr.sort(function(a, b){
-            if(a.NextSiblingID == b.ID){
-                return -1;
+        upMove: function(controller){
+            var node = controller.tree.selected;
+            if(node){
+                if(node.preSibling){
+                    billsAjax.updatePNId(node.preSibling.getID(), null, node.getNextSiblingID());
+                    billsAjax.updatePNId(node.getID(), null, node.preSibling.getID());
+                    if(node.preSibling.preSibling){
+                        billsAjax.updatePNId(node.preSibling.preSibling.getID(), null, node.getID());
+                    }
+                    controller.upMove();
+                }
             }
-            else{
-                return 1;
+        },
+
+        downMove: function(controller){
+            var node = controller.tree.selected;
+            if(node){
+                if(node.nextSibling){
+                    billsAjax.updatePNId(node.getNextSiblingID(), null, node.getID());
+                    billsAjax.updatePNId(node.getID(), null, node.nextSibling.getNextSiblingID());
+                    if(node.preSibling){
+                        billsAjax.updatePNId(node.preSibling.getID(), null, node.getNextSiblingID());
+                    }
+                    controller.downMove();
+                }
             }
+        }
+    }
+
+    function nodeOpration(controller,sheet){
+        $('#insert').click(function(){
+            //dbOperation.insert(controller, sheet);
+            controller.insert();
+        });
+        $('#delete').click(function(){
+            controller.delete();
+        });
+        $('#upLevel').click(function(){
+            controller.upLevel();
+        });
+        $('#downLevl').click(function(){
+            controller.downLevel();
+        });
+        $('#upMove').click(function(){
+            controller.upMove();
+        });
+        $('#downMove').click(function(){
+            controller.downMove();
         });
-        //expect: 1 3 2 6 4
-        //fact:   2 6 4 1 3
-        console.log(testDataArr);
     }
 
-    //test
+    function showBillsSheet(datas){
+        var billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
+        initSheet(billsSpread);
+        billsTree.loadDatas(datas);
+        var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), billsLibSetting);
+        controller.showTreeData();
+        nodeOpration(controller, billsSpread.getActiveSheet());
+    }
+
 
     function buildBills(){
         var spread = new GC.Spread.Sheets.Workbook($("#spreadBills")[0], {sheetCount: 1});
@@ -316,7 +426,7 @@
         var vpColCount = 2;
         sheet.suspendPaint();
         sheet.suspendEvent();
-        initSheet(spread, sheet, chRowCount, vpRowCount, vpColCount);
+        initSheet(spread);
         setupJobsColHeader(sheet);
         //initRowHeight(sheet);
         setCell(sheet);

+ 19 - 0
web/billsLib/html/test.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>test</title>
+    <script src="../../../lib/jquery/jquery.min.js"></script>
+</head>
+<body>
+    <div id="di">ss</div>
+</body>
+<script>
+    $(document).ready(function(){
+       var test = {a: 1}
+        if(!test.b){
+            alert(1);
+        }
+    });
+</script>
+</html>

+ 2 - 2
web/bills/html/tezheng.html

@@ -170,8 +170,8 @@
     <script src="../../../lib/jquery/jquery.min.js"></script>
     <script src="../../../lib/tether/tether.min.js"></script>
     <script src="../../../lib/bootstrap/bootstrap.min.js"></script>
-    <script src="../../../web/bills/scripts/global.js"></script>
-    <script src="../../../web/bills/scripts/setSheets.js"></script>
+    <script src="..//scripts/global.js"></script>
+    <script src="..//scripts/setSheets.js"></script>
     <SCRIPT type="text/javascript">
   		$(document).ready(function(){
             buildAllItems();

+ 147 - 0
web/billsLib/scripts/billsLibAjax.js

@@ -0,0 +1,147 @@
+/**
+ * Created by vian on 2017/3/27.
+ */
+var mainAjax = {
+    getStdBillsLib: function(userId){
+        $.ajax({
+            type: "post",
+            url: "/stdBillsEditor/getStdBillsLib",
+            data: {data: JSON.stringify({userId: userId})},
+            dataType: "json",
+            success: function(result){
+                if(result.data){
+                    for(var i=0; i<result.data.length; i++){
+                        var id = result.data[i].billsLibId;
+                        var billsLibName = result.data[i].billsLibName;
+                        var createDate = result.data[i].createDate;
+                        var createDateFmt = new Date(createDate).format("yyyy-MM-dd");
+                        $("#showArea").append(
+                            "<tr id='tempId'>" +
+                            "<td><a href='stdBills'>"+billsLibName+"</a></td>" +
+                            "<td>"+createDateFmt+" </td>" +
+                            "<td><a href='javascript:void(0);' data-toggle='modal' data-target='#edit' title='编辑'>" +
+                            "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
+                            "<i class='fa fa-remove'></i></a></td></tr>");
+                        var newHref = "stdBills?billsLibId="+id;
+                        $("#tempId td:first a").attr("href", newHref);
+                        $("#tempId").attr("id", id);
+                    }
+                }
+
+            }
+        });
+    },
+    createStdBillsLib: function(billsLibName){
+        $.ajax({
+            type: "POST",
+            url: "/stdBillsEditor/createStdBillsLib",
+            data: {data: JSON.stringify({name: billsLibName}) },
+            dataType: "json",
+            success: function(result){
+                if(!result.error){
+                    var id = result.data[0].billsLibId;
+                    var createDate = result.data[0].createDate;
+                    var createDateFmt = new Date(createDate).format("yyyy-MM-dd");
+                    $("#showArea").append(
+                        "<tr id='tempId'><td><a href='stdBills'>"+billsLibName+"</a></td><td>"+createDateFmt+" </td><td><a href='javascript:void(0);' data-toggle='modal' data-target='#edit' title='编辑'>" +
+                        "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
+                        "<i class='fa fa-remove'></i></a></td></tr>"
+                    );
+                    var newHref = "stdBills?billsLibId="+id;
+                    $("#tempId td:first a").attr("href", newHref);
+                    $("#tempId").attr("id", id);
+                }
+            }
+        });
+    },
+    deleteStdBillsLib: function(billsLibId){
+        $.ajax({
+            type: "POST",
+            url: "/stdBillsEditor/deleteStdBillsLib",
+            data: {data: JSON.stringify({billsLibId: billsLibId})},
+            dataType: "json",
+            success: function(result){
+                if(!result.error){
+                    var jqSel = "#"+billsLibId;
+                    $(jqSel).remove();
+                }
+            }
+        });
+    },
+    renameStdBillsLib: function(billsLibId, newName){
+        $.ajax({
+            type: "post",
+            url: "/stdBillsEditor/renameStdbillsLib",
+            data: {data: JSON.stringify({id: billsLibId, value: newName})},
+            dataType: "json",
+            success: function(result){
+                if(!result.error){
+                    var jqSel = "#" + billsLibId + " td:first" + " a";
+                    $(jqSel).text(newName);
+                }
+            }
+        });
+    }
+}
+
+var billsAjax = {
+    getStdBillsLibName: function(billsLibId) {
+        $.ajax({
+            type: "post",
+            url: "/stdBillsEditor/getStdBillsLibName",
+            data: {data: JSON.stringify({billsLibId: billsLibId})},
+            success: function(result){
+                if(!result.error){
+                    $(".navbar-text").append(
+                    "<a href='stdBillsmain'>清单规则</a><i class='fa fa-angle-right fa-fw'></i>"+result.data[0].billsLibName
+                    );
+                }
+            }
+        });
+    },
+    getBills: function(billsLibId){
+        $.ajax({
+            type: "post",
+            url: "/stdBillsEditor/getBills",
+            data: {data: JSON.stringify({billsLibId: billsLibId})},
+            dataType: "json",
+            success: function(result){
+                if(!result.error){
+                    showBillsSheet(result.data);
+                }
+            }
+        });
+    },
+    createBills: function(billsLibId, pid, nid){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/createBills',
+            data: {data: JSON.stringify({billsLibId: billsLibId, ParentID: pid, NextSiblingID: nid})},
+            dataType: 'json',
+            success: function(result){
+            }
+        });
+    },
+    updatePNId: function(updateId, pid, nid){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/updatePNId',
+            data: {data: JSON.stringify({updateId: updateId, ParentID: pid, NextSiblingID: nid})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
+    },
+    deleteBills: function(deleteIds){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/deleteBills',
+            data: {data: JSON.stringify({deleteIds: deleteIds})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
+    }
+}

+ 165 - 0
web/billsLib/scripts/billsLibSetting.js

@@ -0,0 +1,165 @@
+/**
+ * Created by vian on 2017/4/10.
+ */
+var billsLibSetting = {
+    cols:[
+        {
+            head: {
+                titleNames: ['编码'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'code',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 160
+        },
+        {
+            head: {
+                titleNames: ['名称'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'name',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 300
+        },
+        {
+            head: {
+                titleNames: ['计量单位'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'unit',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 160
+        },
+        {
+            head: {
+                titleNames: ['工程量计算规则'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'ruleText',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 420
+        }
+    ],
+    headRows: 2,
+    headRowHeight: [20, 30, 30],
+    emptyRows: 3,
+    treeCol: 0
+};
+
+var jobsSetting = {
+    cols:[
+        {
+            head: {
+                titleNames: ['编号'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'code',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 100
+        },
+        {
+            head: {
+                titleNames: ['工作内容'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'content',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 215
+        },
+    ],
+    headRows: 2,
+    headRowHeight: [20, 30, 30],
+    emptyRows: 3,
+    treeCol: 0
+};
+
+var itemsSetting = {
+    cols:[
+        {
+            head: {
+                titleNames: ['编号'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'code',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 100
+        },
+        {
+            head: {
+                titleNames: ['项目 特征'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'character',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 215
+        },
+    ],
+    headRows: 2,
+    headRowHeight: [20, 30, 30],
+    emptyRows: 3,
+    treeCol: 0
+}

+ 38 - 0
web/billsLib/scripts/billsLibTree.js

@@ -0,0 +1,38 @@
+/**
+ * Created by vian on 2017/4/10.
+ */
+var billsLibTree = {
+    setting: {
+        id: 'ID',
+        pid: 'ParentID',
+        nid: 'NextSiblingID',
+        rootId: -1
+    },
+    virtualRoot: [{
+        ID: 1,
+        ParentID: -1,
+        NextSiblingID: -1,
+        code: '开始编辑',
+    }],
+    createBillsTree: function(){
+        var billsTree = function(){
+            this.datas = null;
+            this.tree = null;
+        };
+
+        billsTree.prototype.loadDatas = function(datas){
+            if(datas){
+                this.datas = datas;
+                this.tree = idTree.createNew(billsLibTree.setting);
+                this.tree.loadDatas(this.datas);
+           }
+           else {
+                this.datas = [];
+                this.tree = idTree.createNew(billsLibTree.setting);
+                this.tree.loadDatas(this.datas);
+            }
+        };
+
+        return new billsTree();
+    }
+}

web/bills/scripts/dateFormat.js → web/billsLib/scripts/dateFormat.js


web/bills/scripts/global.js → web/billsLib/scripts/global.js


+ 19 - 34
web/bills/scripts/setSheets.js

@@ -1,29 +1,23 @@
 /**
  * Created by vian on 2017/3/16.
  */
-//初始表单
-function initSheet(spread, sheet, chRowCount, vpRowCount, vpColCount){
-    var spreadNS = GC.Spread.Sheets;
+
+function initSheet(spread){
+    var spreadNS = GC.Spread.Sheets, sheet = spread.getActiveSheet();
     spread.options.showHorizontalScrollbar = false;
     spread.options.showVerticalScrollbar =false;
     spread.options.tabStripVisible = false;
     spread.options.scrollbarMaxAlign = true;
     sheet.showRowOutline(false);
     sheet.defaults.rowHeight = 30;
-    sheet.setRowCount(chRowCount, spreadNS.SheetArea.colHeader);
-    sheet.setRowCount(vpRowCount, spreadNS.SheetArea.viewport);
-    sheet.setColumnCount(vpColCount, spreadNS.SheetArea.viewport);
-
 }
-//设置初始行高
-function initRowHeight(sheet){
-    /*var rowCount = sheet.getRowCount();
-    for(var i=0; i<rowCount; i++){
-        sheet.setRowHeight(i, 30);
-    }*/
+
+function initHeader(spread, setting){
+    var sheet = spread.getActiveSheet();
+    sheet.setColumnCount(setting.cols.length);
+    sheet.setRowCount();
 }
 
-//单元格设置
 function setCell(sheet){
     var colCount = sheet.getColumnCount();
     var vp = GC.Spread.Sheets.SheetArea.viewport;
@@ -32,39 +26,31 @@ function setCell(sheet){
     for(var i= 0; i<colCount; i++){
         sheet.getRange(-1, i, -1, 1, vp).vAlign(center);
         sheet.getRange(-1, i, -1, 1, vp).hAlign(left);
-        sheet.getRange(-1, i, -1, 1, vp).font("12pt 宋体");
+        sheet.getRange(-1, i, -1, 1, vp).font("12pt 锟斤拷锟斤拷");
     }
 }
 
-//绑定事件,统一事件
 function setupEvents(spread, sheet){
     var events = GC.Spread.Sheets.Events;
     $("#aDelete").click(function(){
         var rowIdx = sheet.getActiveRowIndex();
         sheet.deleteRows(rowIdx, 1);
     });
-    //EditChange
-   /* sheet.bind(events.EditChange, function(e, args){
-        console.log("EditChange!");
-    });*/
-    //EditEnded
+
    sheet.bind(events.EditEnded, function(e, args){
        var editRow = args.row;
        var editCol = args.col;
        var eiditVal = sheet.getValue(editRow, editCol);
         console.log("EE: row: "+editRow+"  col: "+editCol +"val: "+eiditVal);
     });
-    //EditEnding
-    /*sheet.bind(events.EditEnding, function(e, args){
-        console.log("EEing");
-    });*/
+
 }
-//滚动条
+
 function setScrollBar(spread, sheet, initRow){
     var events = GC.Spread.Sheets.Events;
     sheet.bind(events.EnterCell, function(e, data){
         var rowCount = sheet.getRowCount();
-        //当前行数大于初始行数
+        //锟斤拷前锟斤拷锟斤拷锟斤拷锟节筹拷始锟斤拷锟斤拷
         if(rowCount >initRow){
             spread.options.showVerticalScrollbar = true;
         }
@@ -74,31 +60,30 @@ function setScrollBar(spread, sheet, initRow){
     });
 }
 
-//自定义按钮
+
 function myCommand(spread, sheet){
     var keys = GC.Spread.Commands.Key;
-    //enter,最后一行回车键添加新行
+    //enter,锟斤拷锟揭伙拷谢爻锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
     spread.commandManager().register("myEnter", function(){
         var idxRow = sheet.getActiveRowIndex();
         var rowCount = sheet.getRowCount();
         if(idxRow+1 == rowCount){
             sheet.addRows(rowCount, 1);
-            sheet.setRowHeight(rowCount, 30);//设置行高
+            sheet.setRowHeight(rowCount, 30);//锟斤拷锟斤拷锟叫革拷
             sheet.getRange(rowCount, -1, 1, -1).vAlign(GC.Spread.Sheets.VerticalAlign.center);
-            sheet.getRange(rowCount, -1, 1, -1).font("10pt 微软雅黑");
+            sheet.getRange(rowCount, -1, 1, -1).font("10pt 微锟斤拷锟脚猴拷");
         }
     });
     spread.commandManager().setShortcutKey("myEnter", keys.enter, false, false, false, false);
-    //down,最后一行down添加新行
     spread.commandManager().register("myDown", function(){
         var idxRow = sheet.getActiveRowIndex();
         var rowCount = sheet.getRowCount();
         if(idxRow+1 == rowCount){
             sheet.suspendPaint();
             sheet.addRows(rowCount, 1);
-            sheet.setRowHeight(rowCount, 30);//设置行高
+            sheet.setRowHeight(rowCount, 30);//锟斤拷锟斤拷锟叫革拷
             sheet.getRange(rowCount, -1, 1, -1).vAlign(GC.Spread.Sheets.VerticalAlign.center);
-            sheet.getRange(rowCount, -1, 1, -1).font("10pt 微软雅黑");
+            sheet.getRange(rowCount, -1, 1, -1).font("10pt 微锟斤拷锟脚猴拷");
             sheet.resumePaint();
         }
     });