Procházet zdrojové kódy

清单库复制库

zhongzewei před 6 roky
rodič
revize
dd743ab247

+ 12 - 0
modules/bills_lib/controllers/bills_lib_controllers.js

@@ -9,6 +9,18 @@ let callback = function(req, res, err, message, data){
 let logger = require('../../../logs/log_helper').logger;
 
 module.exports = {
+    copyStdBillsLib: async function (req, res) {
+        try {
+            const data = JSON.parse(req.body.data);
+            const userName = req.session.managerData.username;
+            const libName = data.libName;
+            const libId = data.libId;
+            const newLibData = await billsLibDao.copyLib(userName, libName, libId);
+            callback(req, res, 0, 'copyLib success', [newLibData]);
+        } catch (err) {
+            callback(req, res, 1, 'copyLib fail', null);
+        }
+    },
     getMaxNumber: function(req, res){
         let data = JSON.parse(req.body.data);
         billsLibDao.getMaxNumber(data, function(err, message, maxNumber){

+ 3 - 0
modules/bills_lib/controllers/stdBillsLib_permissionController.js

@@ -40,6 +40,9 @@ class billsLibPermContr extends baseController{
     createStdBillsLib(req, res){
         billsController.createStdBillsLib(req, res);
     }
+    copyStdBillsLib(req, res) {
+        billsController.copyStdBillsLib(req, res);
+    }
     deleteStdBillsLib(req, res){
         billsController.deleteStdBillsLib(req, res);
     }

+ 36 - 12
modules/bills_lib/models/bills_lib_interfaces.js

@@ -14,40 +14,40 @@ const engLibModel = mongoose.model('engineering_lib');
 let uuid = require('uuid');
 let billsLibDao = function(){};
 
-billsLibDao.prototype.copyLib = async function (fromLib, toLib) {
-    console.log('entner---------------------');
+billsLibDao.prototype.copyLib = async function (userName, libName, fromLibId) {
+    const libData = await this.createStdBillsLibSync(userName, libName);
+    const newLibId = libData.billsLibId;
     //插入工作内容
-    let orgJobs = await JobContent.find({billsLibId: fromLib});
-    console.log(fromLib);
+    let orgJobs = await JobContent.find({billsLibId: fromLibId}).lean();
     let jobCounter = await counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, orgJobs.length);
     let maxJobId = jobCounter.sequence_value;
     let jobTask = [],
         orgNewJobMapping = {};
     for (let i = 0; i < orgJobs.length; i++) {
-        let jobData = orgJobs[i]._doc;
+        let jobData = orgJobs[i];
         delete jobData._id;
         let newID = (maxJobId - (orgJobs.length - 1) + i);
         orgNewJobMapping[jobData.id] = newID;
         jobData.id = newID;
-        jobData.billsLibId = toLib;
+        jobData.billsLibId = newLibId;
         jobTask.push({insertOne: {document: jobData}});
     }
     if (jobTask.length > 0) {
         await JobContent.bulkWrite(jobTask);
     }
     //插入项目特征
-    let orgItems = await ItemCharacter.find({billsLibId: fromLib});
+    let orgItems = await ItemCharacter.find({billsLibId: fromLibId}).lean();
     let itemCounter = await counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, orgItems.length);
     let maxItemId = itemCounter.sequence_value;
     let itemTask = [],
         orgNewItemMapping = {};
     for (let i = 0; i < orgItems.length; i++) {
-        let itemData = orgItems[i]._doc;
+        let itemData = orgItems[i];
         delete itemData._id;
         let newID = (maxItemId - (orgItems.length - 1) + i);
         orgNewItemMapping[itemData.id] = newID;
         itemData.id = newID;
-        itemData.billsLibId = toLib;
+        itemData.billsLibId = newLibId;
         itemTask.push({insertOne: {document: itemData}});
     }
     if (itemTask.length > 0) {
@@ -55,13 +55,13 @@ billsLibDao.prototype.copyLib = async function (fromLib, toLib) {
     }
     //插入清单
     let billsTask = [];
-    let bills = await Bills.find({billsLibId: fromLib});
+    let bills = await Bills.find({billsLibId: fromLibId}).lean();
     let IDMapping = {},
         billsDatas = [];
     for (let b of bills) {
-        let bData = b._doc;
+        let bData = b;
         delete bData._id;
-        bData.billsLibId = toLib;
+        bData.billsLibId = newLibId;
         billsDatas.push(bData);
         IDMapping[bData.ID] = uuid.v1();
     }
@@ -73,6 +73,15 @@ billsLibDao.prototype.copyLib = async function (fromLib, toLib) {
         if (IDMapping[bD.ParentID]) {
             bD.ParentID = IDMapping[bD.ParentID];
         }
+        // 更新sectionInfo数据
+        if (bD.sectionInfo) {
+            const first = IDMapping[bD.sectionInfo.first];
+            const second = IDMapping[bD.sectionInfo.second];
+            const third = IDMapping[bD.sectionInfo.third];
+            bD.sectionInfo.first = first || null;
+            bD.sectionInfo.second = second || null;
+            bD.sectionInfo.third = third || null;
+        }
         for (let subJob of bD.jobs) {
             if (orgNewJobMapping[subJob.id]) {
                 subJob.id = orgNewJobMapping[subJob.id];
@@ -88,6 +97,7 @@ billsLibDao.prototype.copyLib = async function (fromLib, toLib) {
     if (billsTask.length > 0) {
         await Bills.bulkWrite(billsTask);
     }
+    return libData;
 };
 
 billsLibDao.prototype.getMaxNumber = function(gData, callback){
@@ -140,6 +150,20 @@ billsLibDao.prototype.getStdBillsLib = function(callback){
     });
 };
 
+billsLibDao.prototype.createStdBillsLibSync = async function (userName, libName) {
+    const counterRst = await counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1);
+    const dateStr = moment().format('YYYY-MM-DD HH:mm:ss');
+    const libData = {
+        creator: userName,
+        createDate: dateStr,
+        recentOpr: [{operator: userName, operateDate: dateStr}],
+        billsLibId: counterRst.sequence_value,
+        billsLibName: libName,
+        deleted: false
+    };
+    await StdBillsLib.create(libData);
+    return libData;
+};
 
 billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
     counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){

+ 1 - 0
modules/bills_lib/routes/bills_lib_routes.js

@@ -26,6 +26,7 @@ module.exports =function (app) {
     billsRouter.post('/getABillsLib', billsLibContr.auth, billsLibContr.init, billsLibContr.getABillsLib);
     billsRouter.post("/getStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.getStdBillsLib);
     billsRouter.post("/createStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.createStdBillsLib);
+    billsRouter.post("/copyStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.copyStdBillsLib);
     billsRouter.post("/deleteStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.deleteStdBillsLib);
     billsRouter.post("/renameStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.renameStdBillsLib);
     billsRouter.post("/getStdBillsLibName", billsLibContr.auth, billsLibContr.init, billsLibContr.getStdBillsLibName);

+ 49 - 4
web/maintain/bills_lib/html/main.html

@@ -32,11 +32,16 @@
                   <div class="col-md-8">
                     <div class="warp-p2 mt-3">
                       <table class="table table-hover table-bordered">
-                        <thead><tr><th>清单规则名称</th><th width="160">添加时间</th><th width="90">操作</th><th width="90">导入</th></tr></thead>
+                        <thead>
+                            <tr>
+                                <th>清单规则名称</th>
+                                <th width="160">添加时间</th>
+                                <th width="60">操作</th>
+                                <th width="90">导入</th>
+                                <th width="90">复制</th>
+                            </tr>
+                        </thead>
                         <tbody id="showArea">
-                          <!--<tr><td><a href="qingdan.html">XX清单规则</a></td><td>2017-01-01 </td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td></tr>
-                          <tr><td><a href="qingdan.html">XX清单规则</a></td><td>2017-01-01 </td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td></tr>
-                          <tr><td><a href="qingdan.html">XX清单规则</a></td><td>2017-01-01 </td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td></tr>-->
                         </tbody>
                       </table>
                     </div>
@@ -144,6 +149,31 @@
             </div>
         </div>
     </div>
+    <!--弹出复制库-->
+    <div class="modal fade" id="copy" data-backdrop="static" aria-hidden="true">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">复制清单规则</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <form>
+                        <div class="form-group">
+                            <label>清单规则名称</label>
+                            <input id="copyName" class="form-control" autofocus placeholder="输入清单规则名称" type="text">
+                        </div>
+                    </form>
+                </div>
+                <div class="modal-footer">
+                    <a id="copyA"  href="javascript:void(0);" class="btn btn-primary">确定</a>
+                    <button type="button" class="btn btn-secondary" 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>
@@ -318,6 +348,21 @@
                 $.bootstrapLoading.end();
             }
         });
+        // 复制库
+        $("#showArea").on("click", ".copy-data", function () {
+            let id = $(this).data("id");
+            id = parseInt(id);
+            if (isNaN(id) || id <= 0) {
+                return false;
+            }
+            selLibId = id;
+            $("#copy").modal("show");
+        });
+        $('#copyA').click(function () {
+            const libId = selLibId;
+            const libName = $('#copyName').val();
+            mainAjax.copyBillsLib(libId, libName);
+        });
     });
 </script>
 

+ 57 - 27
web/maintain/bills_lib/scripts/bills_lib_ajax.js

@@ -50,34 +50,45 @@ var mainAjax = {
             }
         });
     },
+    getLibsHtml: function (data) {
+        const libHtml = data.reduce((acc, libData) => {
+            const id = libData.billsLibId;
+            const billsLibName = libData.billsLibName;
+            const createDateFmt = new Date(libData.createDate).format("yyyy-MM-dd");
+            const html = 
+                `<tr id="${id}">
+                    <td><a href="/stdBills?billsLibId=${id}">${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);" class="text-danger" data-toggle="modal" data-target="#del" title="删除"><i class="fa fa-remove"></i></a>
+                    </td>
+                    <td>
+                        <a href="javascript:void(0);" class="btn btn-secondary btn-sm import-data" data-id="${id}" title="导入数据"><i class="fa fa-sign-in fa-rotate-90"></i>导入</a>
+                    </td>
+                    <td>
+                        <a href="javascript:void(0);" class="btn btn-secondary btn-sm copy-data" data-id="${id}" title="复制数据"><i class="fa fa-clone"></i>复制</a>
+                    </td>
+                 </tr>`;
+            return acc += html;
+        }, '');
+        return libHtml;
+    },
     getStdBillsLib: function(){
+        const me = this;
         $.ajax({
             type: "post",
             url: "/stdBillsEditor/getStdBillsLib",
             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='"+id+"'>" +
-                            "<td><a href='stdBills?billsLibId="+id+"'>"+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>" +
-                            "<td><a class='btn btn-secondary btn-sm import-data' href='javacript:void(0);' data-id='"+ id +"' title='导入数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>"+
-                            "</tr>");
-                    }
+                    $('#showArea').append(me.getLibsHtml(result.data));
                 }
-
             }
         });
     },
     createStdBillsLib: function(userAccount, billsLibName){
+        const me = this;
         $.ajax({
             type: "POST",
             url: "/stdBillsEditor/createStdBillsLib",
@@ -85,18 +96,31 @@ var mainAjax = {
             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='"+id+"'><td><a href='stdBills?billsLibId="+id+"'>"+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>" +
-                        "<td><a class='btn btn-secondary btn-sm import-data' href='javacript:void(0);' data-id='"+ id +"' title='导入数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
-                        "</tr>"
-                    );
-                    $('#cancelBtn').click();
+                    $('#showArea').append(me.getLibsHtml(result.data));
+                    $('#add').modal('hide');
+                }
+            }
+        });
+    },
+    copyBillsLib: function (libId, libName) {
+        const me = this;
+        $.ajax({
+            type: 'post',
+            url: '/stdBillsEditor/copyStdBillsLib',
+            data: {data: JSON.stringify({libId, libName})},
+            dataType: 'json',
+            timeout: 150000,
+            beforeSend: function () {
+                $('#copy').modal('hide');
+                $.bootstrapLoading.start();
+            },
+            success: function (result) {
+                if (!result.error) {
+                    $('#showArea').append(me.getLibsHtml(result.data));
                 }
+            },
+            complete: function () {
+                $.bootstrapLoading.end();
             }
         });
     },
@@ -164,12 +188,18 @@ var billsAjax = {
             url: "/stdBillsEditor/getBills",
             data: {data: JSON.stringify({billsLibId: billsLibId})},
             dataType: "json",
+            beforeSend: function () {
+                $.bootstrapLoading.start();
+            },
             success: function(result){
                 if(!result.error){
                     if(callback) {
                         callback(result.data);
                     }
                 }
+            },
+            complete: function () {
+                $.bootstrapLoading.end();
             }
         });
     },