Przeglądaj źródła

修复项目管理页面bug

olym 7 lat temu
rodzic
commit
97ce3b009c

+ 21 - 1
modules/pm/controllers/pm_controller.js

@@ -122,5 +122,25 @@ module.exports = {
         };
 
         response.render('building_saas/pm/html/project-management.html', renderData);
+    },
+    // 获取项目的属性
+    getProjectProperty: async function(request, response) {
+        let data = request.body.data;
+        try {
+            data = JSON.parse(data);
+            let id = data.id !== undefined ? data.id : 0;
+            if (isNaN(id) && id <= 0) {
+                throw 'id数据有误!';
+            }
+            let property = await ProjectsData.getProjectProperty(id);
+
+            if (Object.keys(property).length <= 0) {
+                throw '操作失败';
+            }
+            callback(request, response, 0, '', property);
+        } catch (error) {
+            callback(request, response, 1, error, null);
+        }
+
     }
-}
+};

+ 36 - 1
modules/pm/models/project_model.js

@@ -53,12 +53,20 @@ ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
     if (datas){
         for (i = 0; i < datas.length && !hasError; i++){
             data = datas[i];
+            data.updateData.name = data.updateData.name !== undefined ? data.updateData.name.trim() : null;
             if (data.updateType === 'update') {
                 Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll)
             } else if (data.updateType === 'new') {
                 data.updateData['userID'] = userId;
                 data.updateData['createDateTime'] = new Date();
                 newProject = new Projects(data.updateData);
+                // 查找同级是否存在同名数据
+                let exist = this.isExist(data.updateData.name, data.updateData.ParentID);
+                if (exist) {
+                    callback(1, '同级目录已存在相同名称数据.', null);
+                    return;
+                }
+
                 newProject.save(function (err, result) {
                     if (!err && result._doc.projType === projectType.tender) {
                         newProjController.copyTemplateData(data.updateData.property, newProject.ID, updateAll);
@@ -93,7 +101,6 @@ ProjectsDAO.prototype.copyUserProjects = function (userId, datas, callback) {
             callback(1, '提交数据出错.', null);
         }
     };
-    console.log(datas);
     if (datas) {
         for (i = 0; i < datas.length && !hasError; i++) {
             data = datas[i];
@@ -165,6 +172,34 @@ ProjectsDAO.prototype.getProject = function (key, callback) {
     }
 };
 
+/**
+ * 获取项目属性
+ *
+ * @param {Number} id
+ * @return {Promise}
+ */
+ProjectsDAO.prototype.getProjectProperty = async function(id) {
+    let projectData = await Projects.findOne({ID: id});
+    return projectData !== null && projectData.property !== undefined ? projectData.property : {};
+};
+
+/**
+ * 整理工程专业对应标准库数据
+ *
+ * @param {Object} data
+ * @return {Boolean}
+ */
+ProjectsDAO.prototype.isExist = async function(name, parentID) {
+    parentID = parseInt(parentID);
+    if (name === '' || isNaN(parentID) || parentID <= 0) {
+        return true;
+    }
+
+    let count = await Projects.count({ParentID: parentID, name: name});
+
+    return count > 0;
+};
+
 module.exports ={
     project: new ProjectsDAO(),
     projType: projectType

+ 1 - 0
modules/pm/routes/pm_route.js

@@ -40,6 +40,7 @@ module.exports = function (app) {
     pmRouter.post('/beforeOpenProject', pmController.beforeOpenProject);
     pmRouter.post('/getProject', pmController.getProject);
     pmRouter.post('/getNewProjectID', pmController.getNewProjectID);
+    pmRouter.post('/getProjectProperty', pmController.getProjectProperty);
 
     app.use('/pm/api', pmRouter);
 };

+ 6 - 6
web/building_saas/pm/html/project-management.html

@@ -120,9 +120,9 @@
                 <div class="col-lg-10">
                 <div class="toolsbar">
                     <div class="tools-btn btn-group align-top">
-                        <a href="javascript:void(0);" class="btn btn-sm" id="add-project-btn">新建 <i class="fa fa-cubes"></i> 建设项目</a>
-                        <a href="javascript:void(0);" class="btn btn-sm" id="add-engineering-btn">新建 <i class="fa fa-cube"></i> 单项工程</a>
-                        <a href="javascript:void(0);" class="btn btn-sm" id="add-tender-btn">新建 <i class="fa fa-sticky-note-o"></i> 单位工程</a>
+                        <a href="javascript:void(0);" class="btn btn-sm" id="add-project-btn"><i class="fa fa-cubes"></i>&nbsp;新建建设项目</a>
+                        <a href="javascript:void(0);" class="btn btn-sm" id="add-engineering-btn"><i class="fa fa-cube"></i>&nbsp;新建单项工程</a>
+                        <a href="javascript:void(0);" class="btn btn-sm" id="add-tender-btn"><i class="fa fa-sticky-note-o"></i>&nbsp;新建单位工程</a>
                         <a href="javascript:void(0);" class="btn btn-sm" id="add-folder-btn"><i class="fa fa-folder-o"></i>&nbsp;新建文件夹</a>
                         <a href="javascript:void(0);" class="btn btn-sm" id="rename-btn">重命名</a>
                         <a href="javascript:void(0);" class="btn btn-sm" id="del-btn">删除</a>
@@ -247,7 +247,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">新建 <i class="fa fa-cubes"></i> 建设项目</h5>
+                <h5 class="modal-title"><i class="fa fa-cubes"></i>&nbsp;新建建设项目</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -292,7 +292,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">新建 <i class="fa fa-cube"></i> 单项工程</h5>
+                <h5 class="modal-title"><i class="fa fa-cube"></i>&nbsp;新建单项工程</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -318,7 +318,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">新建 <i class="fa fa-sticky-note-o"></i> 单位工程</h5>
+                <h5 class="modal-title"><i class="fa fa-sticky-note-o"></i>&nbsp;新建单位工程</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>

+ 94 - 27
web/building_saas/pm/js/pm_main.js

@@ -10,6 +10,8 @@ let movetoZTree = null;
 let copytoZTree = null;
 let engineering = [];
 let feeRateData = [];
+let isSaving = false;
+let projectProperty = [];
 let projectType = {
     folder: 'Folder',
     tender: 'Tender',
@@ -166,7 +168,6 @@ $(document).ready(function() {
     $("input[name='valuation_type']").click(function() {
         let type = $(this).val();
         let targetData = type === 'bill' ? JSON.parse(billValuation) : JSON.parse(rationValuation);
-
         let html = '<option value="">请选择计划规则</option>';
 
         for(let valuation of targetData) {
@@ -229,27 +230,9 @@ $(document).ready(function() {
             projectInfo = selectedItem !== null && selectedItem.parent !== undefined ? selectedItem.parent : null;
         }
         if (projectInfo !== null) {
-            let savedProjectData = localStorage.getItem(projectInfo.data.name);
-            console.log(savedProjectData);
-            savedProjectData = JSON.parse(savedProjectData);
-            // 填入计价规则
-            let valuationHtml = '<option value="'+ savedProjectData.valuation +'">'+ savedProjectData.valuationName +'</option>';
-            $("#tender-valuation").html(valuationHtml);
-
-            // 填入工程专业
-            let engineeringHtml = getEngineeringHtml(savedProjectData.engineeringList);
-            $("#tender-engineering").html(engineeringHtml);
-
-            $("input[name='tender_valuation_type']").attr('disabled', 'disabled').removeAttr('checked', 'checked');
-            $("input[name='tender_valuation_type'][value='"+ savedProjectData.valuationType +"']")
-                .attr("checked", "checked").removeAttr('disabled', 'disabled');
-
-            // 填入费率文件
-            let feeHtml = '<option>请选择费率文件</option>';
-            // for (let fee of savedProjectData.feeLib) {
-            //     feeHtml += '<option value="'+ fee.id +'">'+ fee.name +'</option>';
-            // }
-            $("#tender-fee-rate").html(feeHtml);
+            let parentID = projectInfo.data.ID;
+            // 获取当前的数据属性
+            getProperty(parentID);
         }
 
     });
@@ -490,6 +473,34 @@ $(document).ready(function() {
             });
         }
     });
+
+    // 选择工程专业后动态更改费率文件等数据
+    $("#tender-engineering").change(function() {
+        if (projectProperty.engineeringList === undefined || projectProperty.engineeringList.length <= 0) {
+            return false;
+        }
+        let selectedEngineering = $(this).val();
+        selectedEngineering = parseInt(selectedEngineering);
+        let currentLib = {};
+        for(let engineering of projectProperty.engineeringList) {
+            if (engineering.engineering === selectedEngineering) {
+                currentLib = engineering.lib;
+            }
+        }
+
+        if (Object.keys(currentLib).length <= 0) {
+            return false;
+        }
+        // 输出数据到页面
+        let feeHtml = '<option>请选择费率文件</option>';
+        if (currentLib.fee_lib !== undefined && currentLib.fee_lib.length > 0) {
+            for (let fee of currentLib.fee_lib) {
+                feeHtml += '<option value="'+ fee.id +'">'+ fee.name +'</option>';
+            }
+        }
+        $("#tender-fee-rate").html(feeHtml);
+
+    });
 });
 
 /**
@@ -549,8 +560,9 @@ function AddProject() {
 
     let callback = function() {
         $("#add-project-dialog").modal("hide");
-        // 记录选择后的信息
-        localStorage.setItem(name, JSON.stringify(projectInfo));
+        $("#project-name").val('');
+        $("input[name='valuation_type']").removeAttr('checked');
+        $("#valuation").children("option").not(":eq(0)").remove();
     };
     let selectedItem = Tree.selected();
 
@@ -634,6 +646,7 @@ function AddEngineering() {
     }
     let callback = function() {
         $("#add-engineering-dialog").modal("hide");
+        $("#engineering-name").val('');
     };
     let selectedItem = Tree.selected();
     // 如果选择的是单项工程则新增同级数据
@@ -660,10 +673,13 @@ function AddTender() {
     let valuationName = $("#tender-valuation").children("option:selected").text();
     let valuationType = $("input[name='tender_valuation_type']:checked").val();
     let engineering = $("#tender-engineering").val();
-    let enginerringName = $('#tender-engineering').children("option:selected").text();
+    let engineeringName = $('#tender-engineering').children("option:selected").text();
 
     let callback = function() {
         $("#add-tender-dialog").modal("hide");
+        $('#tender-name').val('');
+        $("#tender-fee-rate").children("option").removeAttr("selected");
+        $("#tender-engineering").children("option").removeAttr("selected");
     };
     let selectedItem = Tree.selected();
     let tenderInfo = {
@@ -671,7 +687,7 @@ function AddTender() {
         valuationType: valuationType,
         valuationName: valuationName,
         engineering: engineering,
-        engineeringName: enginerringName
+        engineeringName: engineeringName
     };
     // 如果选择的是单项工程则新增同级数据
     if (selectedItem !== null && selectedItem.data.projType === projectType.tender) {
@@ -915,7 +931,7 @@ function GetTargetTreeNode(zTreeObj) {
  */
 function getEngineeringHtml(engineeringList) {
     let result = '<option>请选择对应的工程专业</option>';
-    if (engineeringList.length <= 0) {
+    if (Object.keys(engineeringList).length <= 0) {
         return result;
     }
     let engineeringObject = {};
@@ -931,3 +947,54 @@ function getEngineeringHtml(engineeringList) {
 
     return result;
 }
+
+/**
+ * 远程获取项目属性数据
+ *
+ * @param {Number} id
+ * @return {Object}
+ */
+function getProperty(id) {
+    if (isSaving) {
+        return false;
+    }
+    id = parseInt(id);
+    if (isNaN(id) || id <= 0) {
+        return {};
+    }
+
+    $.ajax({
+        url: '/pm/api/getProjectProperty',
+        type: 'post',
+        data: {data: JSON.stringify({user_id: userID, id: id})},
+        dataType: 'json',
+        timeout: 5000,
+        error: function() {
+            isSaving = false;
+            alert('操作失败!');
+        },
+        beforeSend: function() {
+            isSaving = true;
+        },
+        success: function(response) {
+            if (response.error === 0) {
+                projectProperty = response.data;
+                // 写入专业工程相关
+                let engineeringHtml = getEngineeringHtml(projectProperty.engineeringList);
+                $("#tender-engineering").html(engineeringHtml);
+
+                // 填入计价规则
+                let valuationHtml = '<option value="'+ projectProperty.valuation +'">'+ projectProperty.valuationName +'</option>';
+                $("#tender-valuation").html(valuationHtml);
+
+                // 选中计价方式
+                $("input[name='tender_valuation_type']").attr('disabled', 'disabled').removeAttr('checked', 'checked');
+                $("input[name='tender_valuation_type'][value='"+ projectProperty.valuationType +"']")
+                    .attr("checked", "checked").removeAttr('disabled', 'disabled');
+
+            } else {
+                alert(response.message);
+            }
+        }
+    });
+}