소스 검색

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost into 1.0.0_online

zhangweicheng 6 년 전
부모
커밋
5976427cb1

+ 9 - 2
modules/fee_rates/facade/fee_rates_facade.js

@@ -325,11 +325,18 @@ async function checkFeeRateName(jdata) {
 async function getChangeInfo(jdata,compilation){
     let data = JSON.parse(jdata);
     //{ rootProjectID: 99, user_id: '76075' }
+    const notDeleted = [{deleteInfo: null}, {'deleteInfo.deleted':false}];
     let result={};
     let treeData = [];
     let currentProject = await projectsModel.findOne({'ID':data.rootProjectID},['ID','NextSiblingID','ParentID','name']); //{projectID:99,name:'建设项目1'};//dummy 数据
+    let currentTender = await projectsModel.findOne({ID: data.projectID, $or: notDeleted});
     if(currentProject){
-        currentProject._doc.currentOptions=await getFeeRatesByProject(data.rootProjectID);
+        //剔除自身
+        let currentFeeFile = await getFeeRatesByProject(data.rootProjectID);
+        let currentUsedFF = currentTender.property.feeFile.id;
+        currentProject._doc.currentOptions = _.filter(currentFeeFile, function (ff) {
+            return ff.ID !== currentUsedFF;
+        });
     }
     //根据用户ID 找除了当前项目的其它建设项目;
     let others =await projectsModel.find({'$and': [
@@ -340,7 +347,7 @@ async function getChangeInfo(jdata,compilation){
         o._doc.optionList = await getFeeRatesByProject(o.ID);
     }
     //获取对应用户所有文件夹
-    let folders = await projectsModel.find({userID: data.user_id, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], projType: 'Folder'}, ['ID','NextSiblingID','ParentID','name']);
+    let folders = await projectsModel.find({userID: data.user_id, $or: notDeleted, projType: 'Folder'}, ['ID','NextSiblingID','ParentID','name']);
     treeData = treeData.concat(currentProject);
     treeData = treeData.concat(others);
     treeData = treeData.concat(folders);

+ 13 - 3
modules/glj/controllers/glj_controller.js

@@ -17,6 +17,7 @@ let glj_type_util = require('../../../public/cache/std_glj_type_util');
 let mongoose = require('mongoose');
 let ration = mongoose.model('ration');
 let projectModel = mongoose.model('projects');
+let _ = require('lodash');
 
 
 const ProjectModel = require('../../pm/models/project_model').project;
@@ -280,16 +281,22 @@ class GLJController extends BaseController {
         let projectId = request.body.project_id;
         let rootProjectID = request.body.rootProjectID;
         projectId = parseInt(projectId);
+        const notDeleted = [{deleteInfo: null}, {'deleteInfo.deleted': false}];
         let responseData = {
             err: 0,
             data: null
         };
         try {
             let sessionUserData = request.session.sessionUser;
+            //获取当前单位工程
+            let currentTender = await projectModel.findOne({ID: projectId, $or: notDeleted});
             // 获取对应用户所有的建设项目数据
             let projectList = await ProjectModel.getUserProjectData(sessionUserData.id,request.session.sessionCompilation._id);
             //获取对应用户所有文件夹
-            let folders = await projectModel.find({userID: sessionUserData.id, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], projType: 'Folder'}, {_id: 0, name: 1, ID: 1, NextSiblingID: 1, ParentID: 1});
+            let folders = await projectModel.find({userID: sessionUserData.id, $or: notDeleted, projType: 'Folder'}, {_id: 0, name: 1, ID: 1, NextSiblingID: 1, ParentID: 1});
+            if(currentTender === null){
+                throw '当前单位工程不存在';
+            }
             if (projectList === null) {
                 throw '没有找到对应的项目数据';
             }
@@ -310,9 +317,12 @@ class GLJController extends BaseController {
 
                 // 归类
                 if (rootProjectID == projectList[index].ID) {
-                    result.self = unitPriceFileData;
+                    //剔除自身
+                    let currentUsedUF = currentTender.property.unitPriceFile.id;
+                    result.self = _.filter(unitPriceFileData, function (uf) {
+                        return uf.id !== currentUsedUF;
+                    });
                     result.currentProjectName =  projectList[index].name;
-
                 } else {
                     result.other.push(projectList[index]);
                 }

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

@@ -86,7 +86,7 @@ module.exports = {
         });
     },
     // CSL, 2017-12-14 该方法用于项目属性:提交保存混合型数据,这些数据来自不同的表,包括projects.property、ration、bills、labour_coes.
-    updateMixDatas: function(req, res){
+    updateMixDatas: async function(req, res){
         let datas = JSON.parse(req.body.data).mixDataArr;
         let functions = [];
 
@@ -105,6 +105,14 @@ module.exports = {
 
         // 项目属性
         if (Object.keys(datas.properties).length > 0){
+            //基本信息特殊处理,更新建设项目
+            if(datas.properties['property.basicInformation']){
+                let constructionProject = await pm_facade.getConstructionProject(datas.projectID);
+                if(constructionProject){
+                    functions.push(updateFunc(projectModel, {ID: constructionProject.ID}, {'property.basicInformation': datas.properties['property.basicInformation']}));
+                }
+                delete datas.properties['property.basicInformation'];
+            }
             functions.push(updateFunc(projectModel, {ID: datas.projectID}, datas.properties));
         };
 
@@ -162,6 +170,7 @@ module.exports = {
     },
     getProject: function(req, res){
         let data = JSON.parse(req.body.data);
+        let projectID = data.proj_id;
         ProjectsData.getUserProject(req.session.sessionUser.id, data.proj_id, async function(err, message, data){
             if (err === 0) {
                 let engineeringLibModel = new EngineeringLibModel();
@@ -172,6 +181,11 @@ module.exports = {
                 if (engineeringInfo !== null) {
                     projInfo.engineeringInfo = engineeringInfo;
                 }
+                //读取建设项目的基本信息
+                let basicInfo = await ProjectsData.getBasicInfo(projectID);
+                if(basicInfo !== null){
+                    projInfo.property.basicInformation = basicInfo;
+                }
                 callback(req, res, err, message, projInfo);
             } else {
                 callback(req, res, err, message, null);

+ 54 - 5
modules/pm/facade/pm_facade.js

@@ -38,7 +38,8 @@ const projectType = {
 module.exports={
     moveProject:moveProject,
     copyProject:copyProject,
-    getSummaryInfo: getSummaryInfo
+    getSummaryInfo: getSummaryInfo,
+    getConstructionProject: getConstructionProject
 };
 
 async function copyProject(userID, compilationID,data) {
@@ -512,10 +513,27 @@ async function getSummaryInfo(projectIDs){
     flagFieldMapping[billsFlags.OTHER] = 'other';
     flagFieldMapping[billsFlags.CHARGE] = 'charge';
     flagFieldMapping[billsFlags.TAX] = 'tax';
-    for(let projectID of projectIDs){
+   /* for(let projectID of projectIDs){
         IDMapping[projectID] = {engineeringCost: 0, subEngineering: 0, measure: 0, safetyConstruction: 0, other: 0, charge: 0, tax: 0, rate: 0, buildingArea: '', perCost: ''};
+    }*/
+    let projects = await projectModel.find({ID: {$in : projectIDs}, projType: projectType.project, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
+    //设置建设项目的总建筑面积
+    for(let project of projects){
+        let grossArea = '';
+        if(project.property && project.property.basicInformation){
+            for(let basicInfo of project.property.basicInformation){
+                if(basicInfo.key === 'basicInfo'){
+                    for(let k of basicInfo.items){
+                        if(k.key === 'grossArea'){
+                            grossArea = k.value;
+                        }
+                    }
+                }
+            }
+        }
+        IDMapping[project.ID] = {engineeringCost: 0, subEngineering: 0, measure: 0, safetyConstruction: 0, other: 0, charge: 0, tax: 0, rate: 0, buildingArea: grossArea, perCost: ''};
     }
-    //let projects = await projectModel.find({ID: {$in : projectIDs}, projType: projectType.project, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
+
     //单项工程
     let engineerings = await projectModel.find({ParentID: {$in : projectIDs}, projType: projectType.engineering, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
     //单位工程
@@ -574,10 +592,41 @@ async function getSummaryInfo(projectIDs){
             let projInfo = IDMapping[eng.ParentID];
             engInfo.rate = !isDef(projInfo) || projInfo.engineeringCost == 0 ? 0 : scMathUtil.roundTo(engInfo.engineeringCost * 100 / projInfo.engineeringCost, rateDecimal);
         }
-        for(let projectID of projectIDs){
-            IDMapping[projectID].rate = 100;
+        //建设项目占造价比例及单方造价
+        for(let project of projects){
+            let projectInfo = IDMapping[project.ID];
+            projectInfo.rate = 100;
+            projectInfo.perCost = projectInfo.buildingArea.toString().trim() === '' || projectInfo.buildingArea == 0 ?
+                                  projectInfo.buildingArea.toString().trim() : scMathUtil.roundTo(projectInfo.engineeringCost / projectInfo.buildingArea, perCostDecimal);
         }
     }
     console.log(IDMapping);
     return IDMapping;
+}
+
+//根据项目ID获取所属建设项目
+//@param {Number}projectID @return {Object}
+async function getConstructionProject(projectID){
+    const notDeleted = [{deleteInfo: null}, {'deleteInfo.deleted': false}];
+    function returnProject(project){
+        if(!project || project.projType === projectType.folder){
+            return null;
+        }
+        if(project.projType === projectType.project){
+            return project;
+        }
+    }
+    let project = await projectModel.findOne({ID: projectID, $or: notDeleted});
+    let returnV = returnProject(project);
+    if(returnV !== undefined){
+        return returnV;
+    }
+    let parent = await projectModel.findOne({ID: project.ParentID, $or: notDeleted});
+    returnV = returnProject(parent);
+    if(returnV !== undefined){
+        return returnV;
+    }
+    let grandParent = await projectModel.findOne({ID: parent.ParentID, $or: notDeleted});
+    returnV = returnProject(grandParent);
+    return returnV !== undefined ? returnV : null;
 }

+ 18 - 3
modules/pm/models/project_model.js

@@ -130,6 +130,10 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                 data.updateData['compilation'] = compilationId;
                 data.updateData['createDateTime'] = new Date();
                 data.updateData['fileVer'] = G_FILE_VER;
+                if(data.updateData.projType === projectType.project){
+                    //设置建设项目基本信息,多个单位工程共用
+                    data.updateData.property = {basicInformation: basicInformation};
+                }
                 // 如果没有选中单价文件则新增单价文件
                 if (data.updateData.projType === projectType.tender && data.updateData.property !== null &&
                     Object.keys(data.updateData.property.unitPriceFile).length > 0 &&
@@ -156,11 +160,13 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                     data.updateData.property.decimal = defaultDecimal;
                     //清单工程量精度
                     data.updateData.property.billsQuantityDecimal = billsQuantityDecimal;
-                    //基本信息
-                    basicInformation[0]['items'][1]['value'] = data.updateData.property.engineeringName || '';
-                    data.updateData.property.basicInformation = basicInformation;
+                    //基本信息-挪到建设项目下,多个单位工程共用
+                    //basicInformation[0]['items'][1]['value'] = data.updateData.property.engineeringName || '';
+                    //data.updateData.property.basicInformation = basicInformation;
                     //工程特征
+                    projectFeature[0]['value'] = data.updateData.property.engineeringName || '';
                     data.updateData.property.projectFeature = projectFeature;
+
                     //呈现选项
                     data.updateData.property.displaySetting = displaySetting;
 
@@ -760,6 +766,15 @@ ProjectsDAO.prototype.updateUnitFileToProject=async function(projectID,unitFile)
     return await Projects.findOneAndUpdate({'ID':projectID},{'property.unitPriceFile':unitFile});
 }
 
+ProjectsDAO.prototype.getBasicInfo = async function (projectID) {
+    //获取建设项目
+    let constructionProject = await pmFacade.getConstructionProject(projectID);
+    if(!constructionProject || !constructionProject.property || !constructionProject.property.basicInformation){
+        return null;
+    }
+    return constructionProject.property.basicInformation;
+};
+
 
 
 module.exports ={    project: new ProjectsDAO(),

+ 3 - 1
modules/pm/models/project_property_template.js

@@ -80,12 +80,13 @@ const billsQuantityDecimal = [
 const basicInformation = [
     {dispName: '基本信息', key: 'basicInfo', items: [
         {dispName: '合同号', key: 'contractNum', value: ''},
-        {dispName: '工程专业', key: 'engineering', value: ''},//只读,用户新建单位工程时选择的值
+       // {dispName: '工程专业', key: 'engineering', value: ''},//只读,用户新建单位工程时选择的值
         {dispName: '建设地点', key: 'constructionPlace', value: ''},
         {dispName: '质量标准', key: 'qualityStandard', value: ''},
         {dispName: '工程类别', key: 'projectCategory', value: ''},
         {dispName: '建设日期', key: 'constructionDate', value: ''},
         {dispName: '工程规模', key: 'projectScale', value: ''},
+        {dispName: '总建筑面积(m2)', key: 'grossArea', value: ''},
         {dispName: '建设单位', key: 'constructionUnit', value: ''},
         {dispName: '设计单位', key: 'designUnit', value: ''},
         {dispName: '施工单位', key: 'buildingUnit', value: ''},
@@ -116,6 +117,7 @@ const basicInformation = [
 ];
 
 const projectFeature = [
+    {dispName: '工程专业', key: 'engineering', value: ''},//只读,用户新建单位工程时选择的值
     {dispName: '工程类型', key: 'projType', value: ''},
     {dispName: '结构类型', key: 'structureType', value: ''},
     {dispName: '基础类型', key: 'baseType', value: ''},

+ 0 - 2
public/web/sheet/sheet_common.js

@@ -614,8 +614,6 @@ var sheetCommonObj = {
                     let col = sheet.getActiveColumnIndex();
                     let orgV = sheet.getValue(row, col);
                     let orgText = sheet.getText(row, col);
-                    console.log(`orgV: ${orgV}`);
-                    console.log(`orgText: ${orgText}`);
                     if(!isDef(orgV)){
                         orgV = '';
                     }

+ 0 - 1
web/building_saas/main/html/main.html

@@ -1485,7 +1485,6 @@
                 $("#checkCount").text(checkCount);
 
             }
-
             /*$(document).ready(function(){
                 document.addEventListener('visibilitychange', function() {
                     if(document.hidden){ //页面不可见状态

+ 1 - 0
web/building_saas/main/js/models/fee_rate.js

@@ -359,6 +359,7 @@ var FeeRate = {
             }
             var data={
                 "user_id":userID,
+                "projectID":projectObj.project.ID(),
                 "rootProjectID":rootProjectID
             };
             CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {

+ 1 - 1
web/building_saas/main/js/views/fee_rate_view.js

@@ -774,7 +774,7 @@ var feeRateObject={
             var option =  $("<option>").val(s.ID).text(s.name);
             $('#currentOptions').append(option);
         })
-        $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateFileID());
+        //$('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateFileID());
         $('#otherProject').empty();
         _.forEach(data.others,function (p) {
             var option =  $("<option>").val(p.ID).text(p.name);

+ 2 - 0
web/building_saas/main/js/views/project_info.js

@@ -39,6 +39,8 @@ var projectInfoObj = {
                 setDecimal(decimalObj, data.property.decimal);
                 billsQuanDecimal.datas = data.property.billsQuantityDecimal || [billsDecimalView.angleDecimal];
                 basicInfoView.orgDatas = data.property.basicInformation ? basicInfoView.toViewDatas(data.property.basicInformation) : [];
+                console.log(data.property.basicInformation);
+                console.log(basicInfoView.orgDatas);
                 projFeatureView.orgDatas = data.property.projectFeature ? projFeatureView.toViewDatas(data.property.projectFeature) : [];
                 $('#fullpath').html(that.getFullPathHtml(that.projectInfo));
             }

+ 32 - 5
web/building_saas/main/js/views/project_property_basicInfo.js

@@ -19,9 +19,10 @@ let basicInfoView = {
             allowUserDragFill: false,
             scrollbarMaxAlign : true
         },
-        dateRows: [6, 18],
+        dateRows: [5, 18],
+        numRows: [7],
         locked: {
-            rows: [0, 2, 19, 23, 27],
+            rows: [0, 19, 23, 27],
             cols: [0]
         }
     },
@@ -40,6 +41,17 @@ let basicInfoView = {
         }
     },
 
+    getRowByField: function (field) {
+        let me = basicInfoView;
+        for(let i = 0; i < me.orgDatas.length; i++){
+            let data = me.orgDatas[i];
+            if(data.key === field){
+                return i;
+            }
+        }
+        return null;
+    },
+
     setDatePicker: function (sheet, dateRows) {
         let me = this;
         this.renderSheetFuc(sheet, function () {
@@ -66,6 +78,7 @@ let basicInfoView = {
     buildSheet: function () {
         if(!this.workBook){
             this.workBook = new GC.Spread.Sheets.Workbook($('#basicInfoSpread')[0], {sheetCount: 1});
+            sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: this.onEditStarting, editEnded: this.onEditEnded}]);
             this.setOptions(this.workBook, this.setting.options);
             this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
             this.bindEvent(this.workBook);
@@ -103,7 +116,7 @@ let basicInfoView = {
 
     onEditStarting: function (sender, args) {
         let me = basicInfoView;
-        if(me.setting.locked.cols.indexOf(args.col) !== -1){
+        if(args.col === 0){
             args.cancel = true;
         }
         //工程专业
@@ -119,7 +132,7 @@ let basicInfoView = {
             //date
             if(me.setting.dateRows.indexOf(args.row) !== -1){
                 if(v.length > 0){
-                    v = formatDate(new Date(v), 'yyyy-MM-dd')
+                    v = formatDate(new Date(v), 'yyyy-MM-dd');
                     v = me.filtDate(v);
                     if(!v){
                         alert('请输入正确的日期格式yyyy-mm-dd');
@@ -128,13 +141,20 @@ let basicInfoView = {
                     }
                 }
             }
+            else if(me.setting.numRows.indexOf(args.row) !== -1){//控制数值
+                if(!me.isNum(v)){
+                    alert('只能输入数值');
+                    v = me.datas[args.row].value && me.isNum(me.datas[args.row].value) ? me.datas[args.row].value : '';
+                    args.sheet.setValue(args.row, args.col, v);
+                }
+            }
             me.datas[args.row].value = v;
         }
     },
 
     onClipboardPasting: function (sender, args) {
         let me = basicInfoView;
-        if(me.setting.locked.cols.indexOf(args.cellRange.col) !== -1){
+        if(args.cellRange.col === 0){
             args.cancel = true;
         }
     },
@@ -157,6 +177,9 @@ let basicInfoView = {
                     me.datas[row].value = items[i].value;
                 }
             }
+            else if(me.setting.numRows.indexOf(row) !== -1 && !me.isNum(items[i].value)){
+                recRows.push(row);
+            }
             else {
                 me.datas[row].value = items[i].value;
             }
@@ -175,6 +198,10 @@ let basicInfoView = {
         return v !== undefined && v !== null;
     },
 
+    isNum: function(v){
+        return this.isDef(v) && !isNaN(v);
+    },
+
     filtDate: function (v) {
         let re = /([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))/
         let reDate = re.exec(v);

+ 7 - 6
web/building_saas/main/js/views/project_property_projFeature.js

@@ -21,15 +21,15 @@ let projFeatureView = {
             scrollbarMaxAlign : true
         },
         combos: [
-            {row: 1, key: 'projType', items: ['住宅', '公共建筑', '厂房', '办公楼']},
-            {row: 2, key: 'structureType', items: ['排架结构', '框架结构', '现浇、框架结构', '预制、砖混结构', '外砖内模', '内浇外挂', '钢结构']},
-            {row: 3, key: 'baseType', items: ['带基', '框排架柱距6m以内', '框排架柱距6m以外', '满基筏式', '满基板式', '满基箱式', '独立基础']},
-            {row: 4, key: 'buildingFeature', items: ['点式', '凹式', '凸式', 'Y式', '其他']}
+            {row: 2, key: 'projType', items: ['住宅', '公共建筑', '厂房', '办公楼']},
+            {row: 3, key: 'structureType', items: ['排架结构', '框架结构', '现浇、框架结构', '预制、砖混结构', '外砖内模', '内浇外挂', '钢结构']},
+            {row: 4, key: 'baseType', items: ['带基', '框排架柱距6m以内', '框排架柱距6m以外', '满基筏式', '满基板式', '满基箱式', '独立基础']},
+            {row: 5, key: 'buildingFeature', items: ['点式', '凹式', '凸式', 'Y式', '其他']}
         ],
-        numRows: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
+        numRows: [6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
         dateRows: [],
         locked: {
-            rows: [0],
+            rows: [0, 1],
             cols: [0]
         }
     },
@@ -81,6 +81,7 @@ let projFeatureView = {
     buildSheet: function () {
         if(!this.workBook){
             this.workBook = new GC.Spread.Sheets.Workbook($('#projFeatureSpread')[0], {sheetCount: 1});
+            sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: this.onEditStarting, editEnded: this.onEditEnded}]);
             this.setOptions(this.workBook, this.setting.options);
             this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
             this.bindEvent(this.workBook);

+ 1 - 0
web/building_saas/main/js/views/project_view.js

@@ -1124,6 +1124,7 @@ var projectObj = {
                 },
                 "calculateAll_RationContent": {
                     name: '造价计算',
+                    icon: 'fa-calculator',
                     callback: function () {
                         project.calcProgram.calcAllNodesAndSave();
                     }

+ 4 - 4
web/building_saas/pm/js/pm_share.js

@@ -695,7 +695,7 @@ const pmShare = (function () {
             return;
         }
         let copyMap = {copy: null, update: null};
-        let newName = `${selected.data.name} (${selected.data.userInfo.name}共享)`;
+        let newName = `${selected.data.name} (${selected.data.userInfo.name}分享拷贝)`;
         //获取单项工程的单位工程
         let tenderQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], userID: userID, ParentID: engID};
         CommonAjax.post('/pm/api/getProjectsByQuery', {user_id: userID, query: tenderQuery, options: '-_id -property'}, function (rstData) {
@@ -771,14 +771,14 @@ const pmShare = (function () {
         $('#copyShare').on('shown.bs.modal', function () {
             setCopyModal();
             //更改显示名称
-            let newName = `${shareSeleted.data.name} (${shareSeleted.data.userInfo.name}共享)`;
+            let newName = `${shareSeleted.data.name} (${shareSeleted.data.userInfo.name}分享拷贝)`;
             $('#copyShare_name').html(`拷贝后,工程将重命名为 "<b>${newName}</b>"`);
             $('#copyShare_name').removeClass('text-danger');
         });
         //拷贝工程改变选择建设项目
         $('#copyShare_selectProj').change(function () {
             //更改显示名称
-            let newName = `${shareSeleted.data.name} (${shareSeleted.data.userInfo.name}共享)`;
+            let newName = `${shareSeleted.data.name} (${shareSeleted.data.userInfo.name}分享拷贝)`;
             $('#copyShare_name').html(`拷贝后,工程将重命名为 "<b>${newName}</b>"`);
             $('#copyShare_name').removeClass('text-danger');
             $('#copyShareProj-info').hide();
@@ -789,7 +789,7 @@ const pmShare = (function () {
         //拷贝工程改变选择单项工程
         $('#copyShare_selectEng').change(function () {
             //更改显示名称
-            let newName = `${shareSeleted.data.name} (${shareSeleted.data.userInfo.name}共享)`;
+            let newName = `${shareSeleted.data.name} (${shareSeleted.data.userInfo.name}分享拷贝)`;
             $('#copyShare_name').html(`拷贝后,工程将重命名为 "<b>${newName}</b>"`);
             $('#copyShare_name').removeClass('text-danger');
         });