sub_view.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. /**
  2. * Created by CSL on 2017-07-04.
  3. */
  4. //modified by zhong on 2017-08-30
  5. // Tab panes 下有多个Spread时,相互之间不能正确显示。改成一个Spread下多个Sheet。
  6. //特征及内容spread,解决不能正确显示spread
  7. //zhang 5-31 删除附注条件、辅助定额tab,增加子目换算tab
  8. let subSpread = null;
  9. let subObj = {
  10. TZJNRrePercent:null,
  11. showGljSubTab:false,
  12. initSubSpread:function () {
  13. //清单精灵
  14. BillsElf.buildSheet();
  15. contentOprObj.buildSheet($("#jobSpread")[0]);
  16. //sheetCommonObj.bindEscKey(contentOprObj.workBook, [{sheet: contentOprObj.workBook.getSheet(0), editStarting: contentOprObj.onEditStart, editEnded: contentOprObj.onEditEnded}]);
  17. sheetCommonObj.spreadDefaultStyle(contentOprObj.workBook);
  18. characterOprObj.buildSheet($("#itemSpread")[0]);
  19. //sheetCommonObj.bindEscKey(characterOprObj.workBook, [{sheet: characterOprObj.workBook.getSheet(0), editStarting: characterOprObj.onEditStart, editEnded: characterOprObj.onEditEnded}]);
  20. sheetCommonObj.spreadDefaultStyle(characterOprObj.workBook);
  21. $("#tzjnrCon").hide();
  22. $("#subSpread").show();
  23. subSpread = sheetCommonObj.createSpread($("#subSpread")[0], 4);
  24. sheetCommonObj.spreadDefaultStyle(subSpread);
  25. subSpread.options.allowUserDragDrop = false;
  26. subSpread.options.allowUserDragFill = false;
  27. subSpread.getSheet(2).name('JSCX');
  28. pageCCOprObj.active = false;
  29. // 工料机
  30. gljOprObj.initSheet(subSpread.getSheet(0));
  31. //sheetCommonObj.shieldAllCells(subSpread.getSheet(0), gljOprObj.setting);
  32. SheetDataHelper.protectdSheet(subSpread.getSheet(0));
  33. // assistOprObj.initSheet(subSpread.getSheet(1));
  34. // sheetCommonObj.shieldAllCells(subSpread.getSheet(1), assistOprObj.setting);
  35. if(!projectReadOnly){
  36. gljContextMenu.loadGLJSpreadContextMenu();
  37. }
  38. //工程量明细
  39. gljOprObj.initDetailSheet(subSpread.getSheet(1));
  40. SheetDataHelper.protectdSheet(subSpread.getSheet(1));
  41. //安装增加费
  42. installationFeeObj.initRationInstallSheet(subSpread.getSheet(3));
  43. SheetDataHelper.protectdSheet(subSpread.getSheet(3));
  44. //绑定esc
  45. let subEscSheets = [];
  46. subEscSheets.push({sheet: subSpread.getSheet(0), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//定额工料机
  47. subEscSheets.push({sheet: subSpread.getSheet(1), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//工程量明细
  48. subEscSheets.push({sheet: subSpread.getSheet(3), editStarting: installationFeeObj.rationInstSheeteditChecking, editEnded: null});//定额安装增加费
  49. sheetCommonObj.bindEscKey(subSpread, subEscSheets);
  50. if(projectReadOnly){
  51. disableSpread(subSpread);
  52. disableSpread(contentOprObj.workBook);
  53. disableSpread(characterOprObj.workBook);
  54. }
  55. },
  56. initNavItem:function (node) {
  57. /* 1、造价书选中行类别是“大项费用”、“分部”、“分项”、“清单”时,显示按钮“工程量明细”、“计算程序”、“特征及内容”,默认打开“计算程序”。
  58. 2、选中行类别是“定额”、“量价”、“人材机”时,显示按钮“人材机”、“子目换算”、“工程量明细”、“计算程序”、“安装增加费”、"模板子目",默认打开“人材机”。
  59. */
  60. if (!node) {
  61. return;
  62. }
  63. $('.sub-item').removeClass('active');
  64. if(node.sourceType == ModuleNames.ration){
  65. //GLJ_div //ZMHS_div
  66. $("#GLJ_div").show();
  67. $("#ZMHS_div").show();
  68. $("#MBZM_div").show();
  69. installationFeeObj.engineeringTypeChecking();//检查是否安装工程
  70. $("#TZJNR_div").hide();
  71. $('#QDJL_div').hide();
  72. $("#linkGLJ").addClass();
  73. $(gljOprObj.rationTab).click();
  74. }else {
  75. $("#GLJ_div").hide();
  76. $("#ZMHS_div").hide();
  77. $("#MBZM_div").hide();
  78. $("#AZZJF_div").hide();
  79. $("#TZJNR_div").show();
  80. $('#QDJL_div').show();
  81. $(gljOprObj.billsTab).click();
  82. }
  83. projectObj.mainSpread.focus();
  84. },
  85. //初始化人材机和项目特征文本两个区域的宽度,改变窗口大小时调用此方法,实时刷新
  86. initItemWidth:function (){
  87. //总宽度
  88. let totalWidth = $('#subItems').width();
  89. //人材机和项目特征文本比例
  90. const openWidth = 30;//打开项目特征工具条
  91. let textVisible = $('#replaceText').is(':visible'),
  92. //默认比例
  93. textPercent = '15%',
  94. rcjPercent = '85%';
  95. //文本没显示,则打开工具条固定30px转换百分比
  96. if (!subObj.showGljSubTab) {
  97. textPercent = openWidth / totalWidth;
  98. rcjPercent = 1 - textPercent;
  99. textPercent = textPercent * 100 + '%';
  100. rcjPercent = rcjPercent * 100 + '%';
  101. }
  102. //设置特征及内容与排版规则的比例
  103. $('#subSpread').css('width', rcjPercent);
  104. $('#itemTextDiv').css('width', textPercent);
  105. //打开了项目特征,则继续加载人材机表和项目特征文本具体比例
  106. if (subObj.showGljSubTab === true) {
  107. let rg_sideResizeEles = MaterialController.getSideResize();
  108. SlideResize.loadHorizonWidth(rg_sideResizeEles.eleObj.module,
  109. [rg_sideResizeEles.eleObj.resize], [rg_sideResizeEles.eleObj.left, rg_sideResizeEles.eleObj.right]);
  110. $("#gljSubDiv").width( $('#itemTextDiv').width() - rg_sideResizeEles.eleObj.resize.width() - 30)
  111. }
  112. },
  113. initGljSubTab:function() {
  114. if(!($('#linkGLJ').hasClass('active'))){
  115. return;
  116. }
  117. if(this.showGljSubTab == true){
  118. $("#gljSubDiv").show();
  119. $("#rgResize").show();
  120. } else {
  121. $("#gljSubDiv").hide();
  122. $("#rgResize").hide();
  123. }
  124. $("#subSpread").addClass("ration_glj_spread");
  125. this.initItemWidth();
  126. },
  127. showGljSubTabData:function () {
  128. this.initGljSubTab();
  129. if($('#rnc-zm').is(':visible')) zmhs_obj.showCoeData();
  130. if($('#rnc-fz').is(':visible')) zmhs_obj.showAssData();
  131. refreshSubSpread();
  132. }
  133. };
  134. $("#linkGLJ").click(function(){
  135. $("#subItems").children().hide();//控制显示subSpread,隐藏特征及内容spread
  136. //show
  137. //MaterialController.showReplaceDiv();
  138. subObj.showGljSubTabData();
  139. $("#subSpread").show();
  140. $("#itemTextDiv").show();
  141. $("#gljItemTab").show();
  142. pageCCOprObj.active = false;
  143. subSpread.options.allowUserDragFill = false;
  144. refreshSubSpread();
  145. subSpread.setActiveSheetIndex(0);
  146. gljOprObj.activeTab='#linkGLJ';
  147. gljOprObj.setNodeShowTab();
  148. });
  149. $("#linkAZZJF").click(function(){
  150. $("#subItems").children().hide();
  151. MaterialController.hideReplaceDiv();
  152. $("#subSpread").show();
  153. pageCCOprObj.active = false;
  154. refreshSubSpread();
  155. subSpread.setActiveSheetIndex(3);
  156. gljOprObj.activeTab='#linkAZZJF';
  157. gljOprObj.setNodeShowTab();
  158. });
  159. $("#linkGCLMX").click(function(){
  160. $("#subItems").children().hide();
  161. MaterialController.hideReplaceDiv();
  162. $("#subSpread").show();
  163. subSpread.options.allowUserDragFill = true;
  164. pageCCOprObj.active = false;
  165. refreshSubSpread();
  166. subSpread.setActiveSheetIndex(1);
  167. gljOprObj.activeTab='#linkGCLMX';
  168. gljOprObj.setNodeShowTab();
  169. });
  170. $("#linkJSCX").click(function(){ // 计算程序
  171. $("#subItems").children().hide();
  172. MaterialController.hideReplaceDiv();
  173. $("#subSpread").show();
  174. pageCCOprObj.active = false;
  175. refreshSubSpread();
  176. subSpread.setActiveSheetIndex(2);
  177. calcProgramObj.initSheet(subSpread.getSheet(2));
  178. if (!projectObj.mainController.tree.selected)
  179. projectObj.mainController.tree.selected = projectObj.mainController.tree.firstNode();
  180. let sel = projectObj.mainController.tree.selected;
  181. calcProgramObj.refreshCalcProgram(sel, 3);
  182. gljOprObj.activeTab='#linkJSCX';
  183. gljOprObj.setNodeShowTab();
  184. });
  185. $("#linkZMHS").click(function(){ // 子目换算
  186. $("#subItems").children().hide();
  187. $("#tabZMHS").show();
  188. zmhs_obj.loadSideResize();
  189. pageCCOprObj.active = false;
  190. refreshSubSpread();
  191. gljOprObj.activeTab='#linkZMHS';
  192. gljOprObj.setNodeShowTab();
  193. });
  194. $("#linkMBZM").click(function(){ // 模板子目
  195. $("#subItems").children().hide();
  196. $("#tabMBZM").show();
  197. pageCCOprObj.active = false;
  198. refreshSubSpread();
  199. gljOprObj.activeTab='#linkMBZM';
  200. gljOprObj.setNodeShowTab();
  201. });
  202. //特征及内容、工作内容与项目特征左右拖动
  203. let TZJNR_sideResizeEles = {};
  204. TZJNR_sideResizeEles.eleObj = {
  205. module: 'tzjnr',
  206. resize: $('#TZJNRResize'),
  207. parent: $('#contentDiv'),
  208. left: $('#jobDiv'),
  209. right: $('#itemDiv')
  210. };
  211. TZJNR_sideResizeEles.limit = {
  212. min: 100,
  213. max: `$('#contentDiv').width()-100`
  214. };
  215. SlideResize.horizontalSlide(TZJNR_sideResizeEles.eleObj, TZJNR_sideResizeEles.limit, function () {
  216. pageCCOprObj.resizeWidth();
  217. refreshSubSpread();
  218. });
  219. //刷新特征内容与添加规则宽度
  220. function initTznrWidth(){
  221. //特征及内容总宽度
  222. let totalWidth = $('#tzjnrCon').width();
  223. //特征及内容和排版规则比例
  224. const typeSettingWidth = 30;//排版规则工具条
  225. let addRuleVisible = $('#add-rule').is(':visible'),
  226. addRulePercent = '33.3%',
  227. contentPercent = '66.7%';
  228. //排版规则没显示,则排版规则工具条固定30px转换百分比
  229. if (!addRuleVisible) {
  230. addRulePercent = typeSettingWidth / totalWidth;
  231. contentPercent = 1 - addRulePercent;
  232. addRulePercent = addRulePercent * 100 + '%';
  233. contentPercent = contentPercent * 100 + '%';
  234. }
  235. //设置特征及内容与排版规则的比例
  236. $('#contentDiv').css('width', contentPercent);
  237. $('#ruleDiv').css('width', addRulePercent);
  238. }
  239. //特征及内容各模块宽度自适应
  240. function adaptiveTzjnrWidth() {
  241. if(gljOprObj.activeTab !== '#linkTZJNR'){
  242. return;
  243. }
  244. initTznrWidth();
  245. //加载特征及内容里,工作内容和项目特征的比例
  246. SlideResize.loadHorizonWidth(TZJNR_sideResizeEles.eleObj.module, [TZJNR_sideResizeEles.eleObj.resize],
  247. [TZJNR_sideResizeEles.eleObj.left, TZJNR_sideResizeEles.eleObj.right]);
  248. pageCCOprObj.resizeWidth();
  249. refreshSubSpread();
  250. }
  251. //清单精灵
  252. $('#linkQDJL').click(function () {
  253. gljOprObj.activeTab='#linkQDJL';
  254. $("#subItems").children().hide();
  255. $('#qdjl').show();
  256. let selectedNode = projectObj.mainController.tree.selected;
  257. BillsElf.billsSelElf(selectedNode.data.code);
  258. refreshSubSpread();
  259. gljOprObj.setNodeShowTab();
  260. BillsElf.refreshWorkBook();
  261. });
  262. //特征及内容
  263. $("#linkTZJNR").click(function () {
  264. gljOprObj.activeTab='#linkTZJNR';
  265. $("#subItems").children().hide();
  266. $("#tzjnrCon").show();
  267. $("#add-rule p").not(":first").css('margin-bottom', 4);
  268. pageCCOprObj.active = true;
  269. adaptiveTzjnrWidth();
  270. contentOprObj.workBook.getActiveSheet().showColumn(0, GC.Spread.Sheets.HorizontalPosition.left);
  271. characterOprObj.workBook.getActiveSheet().showColumn(0, GC.Spread.Sheets.HorizontalPosition.left);
  272. let selectedNode = projectObj.mainController.tree.selected;
  273. if (projectObj.project.property.addRule !== undefined) {
  274. setRule(projectObj.project.property.addRule);
  275. }
  276. pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
  277. pageCCOprObj.setCacheAndShow(selectedNode);
  278. gljOprObj.setNodeShowTab();
  279. });
  280. //打开排版规则
  281. $('#openTypeSetting').click(function () {
  282. $('#add-rule').show();
  283. $(this).hide();
  284. adaptiveTzjnrWidth();
  285. });
  286. //关闭排版规则
  287. $('#closeTypeSetting').click(function () {
  288. $('#add-rule').hide();
  289. $('#openTypeSetting').show();
  290. adaptiveTzjnrWidth();
  291. });
  292. //应用到选中清单、应用到所有,添加位置列如果隐藏了,则重新显示
  293. function colSettingAddPosition(addPosition){
  294. let settingMapping = {1: 'itemCharacterText', 2: 'name', 3: 'jobContentText', 4: 'both'};
  295. let settingInfo = settingMapping[addPosition];
  296. if(!settingInfo){
  297. return;
  298. }
  299. let fields = [];
  300. if(settingInfo === 'both'){
  301. fields = [settingMapping['1'], settingMapping['3']];
  302. }
  303. else{
  304. fields = [settingInfo];
  305. }
  306. let needToUpdate = false;
  307. let showItemCharacter = false;
  308. for(let field of fields){
  309. let colVisible = colSettingObj.getVisible(field);
  310. if(field === settingMapping['1'] && !colVisible){
  311. showItemCharacter = true;
  312. }
  313. if(!colVisible){
  314. colSettingObj.setVisible(field, true);
  315. needToUpdate = true;
  316. }
  317. }
  318. if(showItemCharacter){
  319. switchTznrHtml(false);
  320. }
  321. if(needToUpdate){
  322. colSettingObj.updateColSetting(true);
  323. }
  324. }
  325. //如果,添加内容为定额子目时进行定额的增删改,更新相关其清单
  326. function updateBillsOprRation() {
  327. const setting = getAddRuleSetting();
  328. if(setting && setting.addContent && setting.addContent === '5'){
  329. $('#use-to-current').click();
  330. }
  331. }
  332. // 应用到选中清单
  333. let isSaving = false;
  334. $("#use-to-current").click(function() {
  335. if($(this).hasClass('disabled')){
  336. return false;
  337. }
  338. if(projectReadOnly){
  339. return false;
  340. }
  341. if (isSaving) {
  342. return false;
  343. }
  344. const setting = getAddRuleSetting();
  345. colSettingAddPosition(setting.position);
  346. isSaving = true;
  347. const self = $(this);
  348. self.attr('disabled', 'disabled');
  349. let selectedNode = projectObj.mainController.tree.selected;
  350. function findBill(node){
  351. while(node && node.sourceType !== projectObj.project.Bills.getSourceType()){
  352. node = node.parent;
  353. }
  354. return node;
  355. }
  356. let billsNode = findBill(selectedNode);
  357. // 操作内容
  358. pageCCOprObj.setCharacterBySetting(billsNode, setting);
  359. // 防止连续点击1秒后才能再次发起请求
  360. setTimeout(function() {
  361. isSaving = false;
  362. self.removeAttr('disabled');
  363. }, 1000);
  364. });
  365. //todo: 优化成批量
  366. function addRuleUseToBills(setting, nodes) {
  367. pageCCOprObj.bulkSetCharacterBySetting(nodes, setting);
  368. }
  369. // 应用到所有的清单
  370. $("#use-to-all").click(function() {
  371. if($(this).hasClass('disabled')){
  372. return false;
  373. }
  374. if(projectReadOnly){
  375. return false;
  376. }
  377. let treeNode = projectObj.mainController.tree;
  378. const setting = getAddRuleSetting();
  379. colSettingAddPosition(setting.position);
  380. if (treeNode.items === undefined || treeNode.items.length <= 0) {
  381. return false;
  382. }
  383. // 处理
  384. addRuleUseToBills(setting, treeNode.items);
  385. });
  386. function saveAddRule(){
  387. let setting = getAddRuleSetting();
  388. let toUpdate = false;
  389. if(!projectObj.project.property.addRule){
  390. toUpdate = true;
  391. }
  392. else {
  393. for(let attr in setting){
  394. if(setting[attr] !== projectObj.project.property.addRule[attr]){
  395. toUpdate = true;
  396. break;
  397. }
  398. }
  399. }
  400. if(toUpdate){
  401. projectObj.project.property.addRule = setting;
  402. projectObj.project.saveProperty('addRule', setting);
  403. }
  404. }
  405. // 添加位置选择
  406. function changeAddPosition(save = false) {
  407. const selected = $('#add-position').children(":selected").val();
  408. const addContentEle = $("#add-content");
  409. const displayFormatEle = $("#display-format");
  410. const characterFormatEle = $("#character-format");
  411. const serialTypeEle = $("#serial-type");
  412. switch (selected) {
  413. case '4':
  414. // 分别添加到对应列
  415. // 当“添加位置”是“分别添加到对应列”,则“添加内容”恢复默认“无”,且灰显;“显示格式”恢复默认“换行分隔”,且灰显。
  416. addContentEle.val('');
  417. addContentEle.attr('disabled', 'disabled');
  418. displayFormatEle.val(1);
  419. characterFormatEle.val(2);
  420. serialTypeEle.val(1);
  421. break;
  422. default:
  423. addContentEle.removeAttr('disabled');
  424. displayFormatEle.removeAttr('disabled');
  425. characterFormatEle.removeAttr('disabled');
  426. addContentEle.val(1);
  427. break;
  428. }
  429. if (save) {
  430. saveAddRule();
  431. }
  432. }
  433. $("#add-position").change(function() {
  434. changeAddPosition(true);
  435. });
  436. // 添加内容选择
  437. function changeAddContent(save = false) {
  438. const selected = $('#add-content').children(":selected").val();
  439. const characterFormatEle = $("#character-format");
  440. const childDisplayFormatEle = $("#child-display-format");
  441. const serialTypeEle = $("#serial-type");
  442. switch (selected) {
  443. case '5':
  444. // 当“添加内容”是“定额子目”或“工作内容”,则“特征生成方式”灰显,不需选择;否则有效可选。
  445. characterFormatEle.attr('disabled', 'disabled');
  446. characterFormatEle.val(2);
  447. // 当“添加内容”是“定额子目”,则“子目生成方式”有效可选;否则灰显,不需选择。
  448. childDisplayFormatEle.removeAttr('disabled');
  449. serialTypeEle.val('');
  450. serialTypeEle.attr('disabled', 'disabled');
  451. break;
  452. case '':
  453. characterFormatEle.attr('disabled', 'disabled');
  454. break;
  455. case '1':
  456. case '2':
  457. case '3':
  458. characterFormatEle.removeAttr('disabled');
  459. if (serialTypeEle.val() === '') {
  460. serialTypeEle.val(1);
  461. }
  462. serialTypeEle.removeAttr('disabled');
  463. childDisplayFormatEle.attr('disabled', 'disabled');
  464. break;
  465. case '4':
  466. // 当“添加内容”是“定额子目”或“工作内容”,则“特征生成方式”灰显,不需选择;否则有效可选。
  467. characterFormatEle.attr('disabled', 'disabled');
  468. characterFormatEle.val(2);
  469. default:
  470. serialTypeEle.removeAttr('disabled');
  471. if (serialTypeEle.val() === '') {
  472. serialTypeEle.val(1);
  473. }
  474. childDisplayFormatEle.attr('disabled', 'disabled');
  475. break;
  476. }
  477. if (save) {
  478. saveAddRule();
  479. }
  480. }
  481. $("#add-content").change(function() {
  482. changeAddContent(true);
  483. });
  484. //显示格式
  485. $('#display-format').change(function () {
  486. saveAddRule();
  487. });
  488. //特征生成方式
  489. $('#character-format').change(function () {
  490. saveAddRule();
  491. });
  492. // 子目生成方式选择事件
  493. function changeChildDisplay(save = false) {
  494. const selected = $('#child-display-format').children(":selected").val();
  495. const serialTypeEle = $("#serial-type");
  496. const addContent = $('#add-content').val();
  497. // 如果添加内容是定额子目且子目生成方式是编号+定额名称则序号格式不能选择
  498. if (addContent === '5' && selected === '1') {
  499. // 默认选中数字显示模式
  500. serialTypeEle.val("");
  501. serialTypeEle.attr('disabled', 'disabled');
  502. } else {
  503. serialTypeEle.val(1);
  504. serialTypeEle.removeAttr('disabled');
  505. }
  506. if (save) {
  507. saveAddRule();
  508. }
  509. }
  510. $("#child-display-format").change(function() {
  511. changeChildDisplay(true);
  512. });
  513. //序号格式
  514. $('#serial-type').change(function () {
  515. saveAddRule();
  516. });
  517. /**
  518. * 获取添加规则的设置
  519. *
  520. * @return {Object} - 返回设置内容
  521. */
  522. function getAddRuleSetting() {
  523. // 添加位置
  524. const position = $("#add-position").val();
  525. // 添加内容
  526. const addContent = $("#add-content").val();
  527. // 显示格式
  528. const displayFormat = $("#display-format").val();
  529. // 特征生成方式
  530. const characterFormat = $("#character-format").val();
  531. // 子目生成方式
  532. const childDisplayFormat = $("#child-display-format").val();
  533. // 序号格式
  534. const serialType = $("#serial-type").val();
  535. const setting = {
  536. serialType,
  537. characterFormat,
  538. addContent,
  539. position,
  540. displayFormat,
  541. childDisplayFormat,
  542. };
  543. return setting;
  544. }
  545. /**
  546. * 根据配置设置规则
  547. *
  548. * @param {Object} setting - 数据库中读取的数据
  549. * @return {void}
  550. */
  551. function setRule(setting) {
  552. if (Object.keys(setting).length <= 0) {
  553. return;
  554. }
  555. $("#add-position").val(setting.position);
  556. changeAddPosition(false);
  557. $("#add-content").val(setting.addContent);
  558. changeAddContent(false);
  559. $("#display-format").val(setting.displayFormat);
  560. $("#character-format").val(setting.characterFormat);
  561. $("#child-display-format").val(setting.childDisplayFormat);
  562. changeChildDisplay(false);
  563. $("#serial-type").val(setting.serialType);
  564. if(projectReadOnly){
  565. disableTools();
  566. }
  567. }
  568. function activeSubSheetIs(idx){
  569. let rst = subSpread.getActiveSheetIndex() == idx;
  570. return rst;
  571. }
  572. function activeSubSheetIsCalcProgram(){
  573. return subSpread.getActiveSheetIndex() == subSheetIndex.ssiCalcProgram;
  574. }
  575. //弹出清单规则或定额库后导致subSpread和特征及内容spread显示出问题
  576. function refreshSubSpread(){
  577. if(pageCCOprObj.active){
  578. contentOprObj.workBook.refresh();
  579. characterOprObj.workBook.refresh();
  580. } else{
  581. if(subSpread) subSpread.refresh();
  582. if(MaterialController.spread) MaterialController.spread.refresh();
  583. }
  584. BillsElf.refreshWorkBook();
  585. //if($('#linkZMHS').hasClass('active')) zmhs_obj.refresh();
  586. if($('#rnc-zm').is(':visible')|| $('#rnc-fz').is(':visible')) zmhs_obj.refresh();
  587. if($('#linkMBZM').hasClass('active')) mbzm_obj.refresh();
  588. }
  589. let subViewObj = {
  590. linkTabClick: function () {
  591. $("#subItems").children().hide();
  592. $($(this).attr('href')).show();
  593. },
  594. loadComments: function (node) {
  595. let comments = [];
  596. let commentText = '';
  597. if (node) {
  598. if (node.sourceType === projectObj.project.Bills.getSourceType() &&
  599. (node.data.type === billType.FX || node.data.type === billType.BX || node.data.type === billType.BILL)) {
  600. if(node.data.ruleText && node.data.ruleText !== ''){
  601. comments.push('工程量计算规则:');
  602. comments.push(node.data.ruleText);
  603. }
  604. if(node.data.comments && node.data.comments !== ''){
  605. comments.push('清单注释:');
  606. comments.push(node.data.comments);
  607. }
  608. } else if (node.sourceType === projectObj.project.Ration.getSourceType()) {
  609. if(node.data.content && node.data.content !== ''){
  610. comments.push('工作内容:');
  611. comments.push(node.data.content);
  612. }
  613. if(node.data.annotation && node.data.annotation !== ''){
  614. comments.push('附注:');
  615. comments.push(node.data.annotation);
  616. }
  617. }
  618. commentText = comments.join('\n');
  619. }
  620. $('#comments>textarea').val(commentText);
  621. },
  622. saveComments: function (node) {
  623. let text = $('#comments>textarea').val();
  624. if (node && node.sourceType === projectObj.project.Bills.getSourceType()) {
  625. if (node.data.comments !== text) {
  626. projectObj.project.Bills.updateField(node.source, "comments", text);
  627. }
  628. } else if (node && node.sourceType === projectObj.project.Ration.getSourceType()) {
  629. if (node.data.comments !== text) {
  630. projectObj.project.Ration.updateField(node.source, "comments", text);
  631. }
  632. }
  633. }
  634. }
  635. $("#linkComments").click(subViewObj.linkTabClick);
  636. $('#linkGLJ').on('shown.bs.tab', function () {
  637. gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
  638. });
  639. $('#linkZMHS').on('shown.bs.tab', function (e) {
  640. if(zmhs_obj.coeSpread == null || zmhs_obj.assSpread == null){
  641. zmhs_obj.initSpread();
  642. }
  643. zmhs_obj.refresh();
  644. zmhs_obj.showZMHSData();
  645. });
  646. $('#linkMBZM').on('shown.bs.tab', function (e) {
  647. mbzm_obj.refresh();
  648. mbzm_obj.showMBZMData();
  649. });
  650. $('#linkComments').on('shown.bs.tab', function () {
  651. subViewObj.loadComments(projectObj.project.mainTree.selected);
  652. });
  653. $('#linkGCLMX').on('shown.bs.tab', function () {
  654. gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
  655. });
  656. $('#linkAZZJF').on('shown.bs.tab', function () {
  657. gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
  658. });
  659. $('.gljSubTab ul li a').bind('click',function () {
  660. if($(this).hasClass("active")){//点击展开了后又点击了自身,这时要隐藏tab和修改本身class
  661. subObj.showGljSubTab = false;
  662. closeTab(this);
  663. subSpread.focus();//要加上这个,不然右边侧栏的选中状态的border线不会消换
  664. }else {
  665. subObj.showGljSubTab = true;
  666. }
  667. subObj.initGljSubTab();
  668. refreshSubSpread();
  669. });
  670. $('.gljSubTab ul li a').on('shown.bs.tab', function () {
  671. if(this.hash == "#rnc-xm"){
  672. MaterialController.showItemCharacterText();
  673. }else if(this.hash == "#rnc-zm"){
  674. zmhs_obj.initCoeSpread();
  675. zmhs_obj.refresh();
  676. zmhs_obj.showCoeData();
  677. }else if(this.hash == "#rnc-fz"){
  678. zmhs_obj.initAssSpread();
  679. zmhs_obj.refresh();
  680. zmhs_obj.showAssData();
  681. }
  682. });
  683. function closeTab(elem) {
  684. setTimeout(function () {
  685. $(elem).removeClass("show");
  686. $(elem).removeClass("active");
  687. $(elem).attr("aria-selected",false);
  688. $(elem.hash).removeClass("show");
  689. $(elem.hash).removeClass("active");
  690. },50);
  691. }