|
|
@@ -179,6 +179,60 @@ let contentOprObj = {
|
|
|
const setting = projectObj.project.property.addRule !== undefined ? projectObj.project.property.addRule : getAddRuleSetting();
|
|
|
pageCCOprObj.setCharacterBySetting(selectedNode, setting, callback, contentOprObj);
|
|
|
},
|
|
|
+ // 获取默认清单工作内容文本
|
|
|
+ getDefaultContent: function (billsNode) {
|
|
|
+ if (!billsNode || !Array.isArray(billsNode.data.jobContent)) {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ return billsNode.data.jobContent[0].content;
|
|
|
+ },
|
|
|
+ // 从清单节点获取工作内容文本数据
|
|
|
+ getContentTexts: function (billsNode) {
|
|
|
+ if (!billsNode || !Array.isArray(billsNode.data.jobContent)) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ let contents = billsNode.data.jobContent.map(data => data.content);
|
|
|
+ // 去重
|
|
|
+ return [...new Set(contents)];
|
|
|
+ },
|
|
|
+ // 对于定额工作内容与清单工作内容相关联的费用定额来说
|
|
|
+ // 操作工作内容后,需要处理定额的工作内容
|
|
|
+ // 若清单的工作内容修改后,定额的工作内容在清单工作内容中找不到,则把定额的工作内容设置为''
|
|
|
+ getUpdateRations: function (billsNode) {
|
|
|
+ // 获取清单工作内容文本数组
|
|
|
+ let contents = this.getContentTexts(billsNode);
|
|
|
+ // 查看清单下的定额,哪些定额需要更新(工作内容无法匹配)
|
|
|
+ let projectID = projectObj.project.ID(),
|
|
|
+ updates = [];
|
|
|
+ for (let rNode of billsNode.children) {
|
|
|
+ if (!rNode.data.jobContentText) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 匹配不到,定额工作内容置空
|
|
|
+ if (!contents.includes(rNode.data.jobContentText)) {
|
|
|
+ updates.push({
|
|
|
+ updateType: 'ut_update',
|
|
|
+ updateData: {
|
|
|
+ ID: rNode.data.ID,
|
|
|
+ projectID,
|
|
|
+ jobContentText: ''
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return updates.length
|
|
|
+ ? {
|
|
|
+ project_id: projectID,
|
|
|
+ user_id: userID,
|
|
|
+ date: new Date(),
|
|
|
+ operation: 'updateBills',
|
|
|
+ update_data: [{
|
|
|
+ moduleName: 'ration',
|
|
|
+ data: updates
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ : null;
|
|
|
+ },
|
|
|
onEditStart(sender, args){
|
|
|
if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
|
|
|
args.cancel = true;
|
|
|
@@ -911,6 +965,9 @@ let characterOprObj = {
|
|
|
};
|
|
|
|
|
|
let pageCCOprObj = {
|
|
|
+ // 记录清单节点-工作内容文本数组的映射关系
|
|
|
+ // 定额-动态工作内容下拉项需要
|
|
|
+ contentCache: {},
|
|
|
currentFindSet: null,
|
|
|
mainActiveCell: null,//mainSpread焦点单元格
|
|
|
nameCache: '',
|
|
|
@@ -1210,6 +1267,31 @@ let pageCCOprObj = {
|
|
|
if(callback){
|
|
|
callback();
|
|
|
}
|
|
|
+ // 操作工作内容时更新定额显示(工作内容下拉)
|
|
|
+ if (_compilationConfig.dynamicRationWorkContent &&
|
|
|
+ oprObj === contentOprObj) {
|
|
|
+ let updateData = contentOprObj.getUpdateRations(node);
|
|
|
+ if (updateData) {
|
|
|
+ ajaxPost('/project/save', updateData).then(() => {
|
|
|
+ updateData.update_data[0].data.forEach(rData => {
|
|
|
+ let thisUpdate = rData.updateData;
|
|
|
+ let rationNode = projectObj.project.mainTree.nodes['id_' + thisUpdate.ID];
|
|
|
+ if (rationNode) {
|
|
|
+ rationNode.data.jobContentText = thisUpdate.jobContentText;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ TREE_SHEET_HELPER.massOperationSheet(projectObj.mainController.sheet, function () {
|
|
|
+ TREE_SHEET_HELPER.refreshTreeNodeData(projectObj.mainController.setting,
|
|
|
+ projectObj.mainController.sheet, node.children, false);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ TREE_SHEET_HELPER.massOperationSheet(projectObj.mainController.sheet, function () {
|
|
|
+ TREE_SHEET_HELPER.refreshTreeNodeData(projectObj.mainController.setting,
|
|
|
+ projectObj.mainController.sheet, node.children, false);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
},
|