sub_view.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  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. fisrtLinked: true, //提升焦点变换性能 2019年4月15日
  11. TZJNRrePercent:null,
  12. showGljSubTab:false,
  13. initSubSpread:function () {
  14. //清单精灵
  15. BillsElf.buildSheet();
  16. $("#subSpread").show();
  17. subSpread = sheetCommonObj.createSpread($("#subSpread")[0], 4);
  18. sheetCommonObj.spreadDefaultStyle(subSpread);
  19. subSpread.options.allowUserDragDrop = false;
  20. subSpread.options.allowUserDragFill = false;
  21. subSpread.getSheet(2).name('JSCX');
  22. // 工料机
  23. gljOprObj.initSheet(subSpread.getSheet(0));
  24. //sheetCommonObj.shieldAllCells(subSpread.getSheet(0), gljOprObj.setting);
  25. SheetDataHelper.protectdSheet(subSpread.getSheet(0));
  26. // assistOprObj.initSheet(subSpread.getSheet(1));
  27. // sheetCommonObj.shieldAllCells(subSpread.getSheet(1), assistOprObj.setting);
  28. if(!projectReadOnly){
  29. gljContextMenu.loadGLJSpreadContextMenu();
  30. }
  31. //工程量明细
  32. gljOprObj.initDetailSheet(subSpread.getSheet(1));
  33. SheetDataHelper.protectdSheet(subSpread.getSheet(1));
  34. //安装增加费
  35. installationFeeObj.initRationInstallSheet(subSpread.getSheet(3));
  36. SheetDataHelper.protectdSheet(subSpread.getSheet(3));
  37. //绑定esc
  38. let subEscSheets = [];
  39. subEscSheets.push({sheet: subSpread.getSheet(0), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//定额工料机
  40. subEscSheets.push({sheet: subSpread.getSheet(1), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//工程量明细
  41. subEscSheets.push({sheet: subSpread.getSheet(3), editStarting: installationFeeObj.rationInstSheeteditChecking, editEnded: null});//定额安装增加费
  42. sheetCommonObj.bindEscKey(subSpread, subEscSheets);
  43. if(projectReadOnly){
  44. disableSpread(subSpread);
  45. }
  46. },
  47. initNavItem:function (node) {
  48. /* 1、造价书选中行类别是“大项费用”、“分部”、“分项”、“清单”时,显示按钮“工程量明细”、“计算程序”、“特征及内容”,默认打开“计算程序”。
  49. 2、选中行类别是“定额”、“量价”、“人材机”时,显示按钮“人材机”、“子目换算”、“工程量明细”、“计算程序”、“安装增加费”、"模板子目",默认打开“人材机”。
  50. */
  51. if (!node) {
  52. return;
  53. }
  54. $('.sub-item').removeClass('active');
  55. if(node.sourceType == ModuleNames.ration){
  56. //GLJ_div //ZMHS_div
  57. $("#GLJ_div").show();
  58. $("#ZMHS_div").show();
  59. $("#MBZM_div").show();
  60. installationFeeObj.engineeringTypeChecking();//检查是否安装工程
  61. $('#QDJL_div').hide();
  62. $("#linkGLJ").addClass();
  63. $(gljOprObj.rationTab).click();
  64. }else {
  65. $("#GLJ_div").hide();
  66. $("#ZMHS_div").hide();
  67. $("#MBZM_div").hide();
  68. $("#AZZJF_div").hide();
  69. $('#QDJL_div').hide();//暂时隐藏
  70. $(gljOprObj.billsTab).click();
  71. }
  72. projectObj.mainSpread.focus();
  73. },
  74. //初始化人材机和项目特征文本两个区域的宽度,改变窗口大小时调用此方法,实时刷新
  75. initItemWidth:function (){
  76. //总宽度
  77. let totalWidth = $('#subItems').width();
  78. //人材机和项目特征文本比例
  79. const openWidth = 30;//打开项目特征工具条
  80. const tab_tem = (305+openWidth+10)/totalWidth;//tab显示框默认宽度:305(表格宽度) + 30(工具条宽度)+10(resize div 宽度)
  81. let textVisible = $('#replaceText').is(':visible'),
  82. //默认比例
  83. textPercent = tab_tem * 100 + '%',//'15%',
  84. rcjPercent = (1 - tab_tem)* 100 + '%';//85
  85. //文本没显示,则打开工具条固定30px转换百分比
  86. if (!subObj.showGljSubTab) {
  87. textPercent = openWidth / totalWidth;
  88. rcjPercent = 1 - textPercent;
  89. textPercent = textPercent * 100 + '%';
  90. rcjPercent = rcjPercent * 100 + '%';
  91. }
  92. //设置特征及内容与排版规则的比例
  93. $('#subSpread').css('width', rcjPercent);
  94. $('#itemTextDiv').css('width', textPercent);
  95. //打开了项目特征,则继续加载人材机表和项目特征文本具体比例
  96. if (subObj.showGljSubTab === true) {
  97. let rg_sideResizeEles = MaterialController.getSideResize();
  98. SlideResize.loadHorizonWidth(rg_sideResizeEles.eleObj.module,
  99. [rg_sideResizeEles.eleObj.resize], [rg_sideResizeEles.eleObj.left, rg_sideResizeEles.eleObj.right]);
  100. $("#gljSubDiv").width( $('#itemTextDiv').width() - rg_sideResizeEles.eleObj.resize.width() - 30)
  101. }
  102. },
  103. initGljSubTab:function() {
  104. if(!($('#linkGLJ').hasClass('active'))){
  105. return;
  106. }
  107. if(this.showGljSubTab == true){
  108. $("#gljSubDiv").show();
  109. $("#rgResize").show();
  110. } else {
  111. $("#gljSubDiv").hide();
  112. $("#rgResize").hide();
  113. }
  114. $("#subSpread").addClass("ration_glj_spread");
  115. this.initItemWidth();
  116. },
  117. showGljSubTabData:function () {
  118. this.initGljSubTab();
  119. zmhs_obj.showDatas();
  120. if (gljOprObj.activeTab !== gljOprObj.preActiveTab) { //提高焦点变换性能 2019年4月15日
  121. refreshSubSpread();
  122. }
  123. }
  124. };
  125. $("#linkGLJ").click(function(){
  126. $("#subItems").children().hide();//控制显示subSpread,隐藏特征及内容spread
  127. //show
  128. //MaterialController.showReplaceDiv();
  129. //subObj.showGljSubTabData(); //提升焦点变换性能 2019年4月15日
  130. $("#subSpread").show();
  131. $("#itemTextDiv").show();
  132. $("#gljItemTab").show();
  133. subSpread.options.allowUserDragFill = false;
  134. //refreshSubSpread(); //提升焦点变换性能 2019年4月15日
  135. subSpread.setActiveSheetIndex(0);
  136. //提高焦点变换性能 2019年4月15日--
  137. if (!subObj.fisrtLinked) {
  138. gljOprObj.preActiveTab = gljOprObj.activeTab;
  139. }
  140. subObj.fisrtLinked = false;
  141. //--
  142. gljOprObj.activeTab='#linkGLJ';
  143. gljOprObj.setNodeShowTab();
  144. });
  145. $("#linkAZZJF").click(function(){
  146. $("#subItems").children().hide();
  147. MaterialController.hideReplaceDiv();
  148. $("#subSpread").show();
  149. refreshSubSpread();
  150. subSpread.setActiveSheetIndex(3);
  151. gljOprObj.activeTab='#linkAZZJF';
  152. gljOprObj.setNodeShowTab();
  153. });
  154. $("#linkGCLMX").click(function(){
  155. $("#subItems").children().hide();
  156. MaterialController.hideReplaceDiv();
  157. $("#subSpread").show();
  158. subSpread.options.allowUserDragFill = true;
  159. //refreshSubSpread(); //提升焦点变换性能 2019年4月15日
  160. subSpread.setActiveSheetIndex(1);
  161. gljOprObj.preActiveTab = gljOprObj.activeTab; //提升焦点变换性能 2019年4月15日
  162. gljOprObj.activeTab='#linkGCLMX';
  163. gljOprObj.setNodeShowTab();
  164. });
  165. $("#linkJSCX").click(function(){ // 计算程序
  166. $("#subItems").children().hide();
  167. MaterialController.hideReplaceDiv();
  168. $("#subSpread").show();
  169. refreshSubSpread();
  170. subSpread.setActiveSheetIndex(2);
  171. calcProgramObj.initSheet(subSpread.getSheet(2));
  172. if (!projectObj.mainController.tree.selected)
  173. projectObj.mainController.tree.selected = projectObj.mainController.tree.firstNode();
  174. let sel = projectObj.mainController.tree.selected;
  175. calcProgramObj.refreshCalcProgram(sel, 3);
  176. gljOprObj.preActiveTab = gljOprObj.activeTab; //提升焦点变换性能 2019年4月15日
  177. gljOprObj.activeTab='#linkJSCX';
  178. gljOprObj.setNodeShowTab();
  179. });
  180. $("#linkZMHS").click(function(){ // 子目换算
  181. $("#subItems").children().hide();
  182. $("#tabZMHS").show();
  183. zmhs_obj.loadSideResize();
  184. refreshSubSpread();
  185. gljOprObj.preActiveTab = gljOprObj.activeTab; //提升焦点变换性能 2019年4月15日
  186. gljOprObj.activeTab='#linkZMHS';
  187. gljOprObj.setNodeShowTab();
  188. });
  189. $("#linkMBZM").click(function(){ // 模板子目
  190. $("#subItems").children().hide();
  191. $("#tabMBZM").show();
  192. refreshSubSpread();
  193. gljOprObj.preActiveTab = gljOprObj.activeTab; //提升焦点变换性能 2019年4月15日
  194. gljOprObj.activeTab='#linkMBZM';
  195. gljOprObj.setNodeShowTab();
  196. });
  197. //清单精灵
  198. $('#linkQDJL').click(function () {
  199. gljOprObj.preActiveTab = gljOprObj.activeTab; //提升焦点变换性能 2019年4月15日
  200. gljOprObj.activeTab='#linkQDJL';
  201. $("#subItems").children().hide();
  202. $('#qdjl').show();
  203. let selectedNode = projectObj.mainController.tree.selected;
  204. BillsElf.billsSelElf(selectedNode.data.code);
  205. refreshSubSpread();
  206. gljOprObj.setNodeShowTab();
  207. BillsElf.refreshWorkBook();
  208. });
  209. //应用到选中清单、应用到所有,添加位置列如果隐藏了,则重新显示
  210. function colSettingAddPosition(addPosition){
  211. let settingMapping = {1: 'itemCharacterText', 2: 'name', 3: 'jobContentText', 4: 'both'};
  212. let settingInfo = settingMapping[addPosition];
  213. if(!settingInfo){
  214. return;
  215. }
  216. let fields = [];
  217. if(settingInfo === 'both'){
  218. fields = [settingMapping['1'], settingMapping['3']];
  219. }
  220. else{
  221. fields = [settingInfo];
  222. }
  223. let needToUpdate = false;
  224. let showItemCharacter = false;
  225. for(let field of fields){
  226. let colVisible = colSettingObj.getVisible(field);
  227. if(field === settingMapping['1'] && !colVisible){
  228. showItemCharacter = true;
  229. }
  230. if(!colVisible){
  231. colSettingObj.setVisible(field, true);
  232. needToUpdate = true;
  233. }
  234. }
  235. if(showItemCharacter){
  236. switchTznrHtml(false);
  237. }
  238. if(needToUpdate){
  239. colSettingObj.updateColSetting(true);
  240. }
  241. }
  242. function activeSubSheetIs(idx){
  243. let rst = subSpread.getActiveSheetIndex() == idx;
  244. return rst;
  245. }
  246. function activeSubSheetIsCalcProgram(){
  247. return subSpread.getActiveSheetIndex() == subSheetIndex.ssiCalcProgram;
  248. }
  249. //弹出清单规则或定额库后导致subSpread和特征及内容spread显示出问题
  250. function refreshSubSpread(){
  251. if(subSpread) subSpread.refresh();
  252. if(MaterialController.spread) MaterialController.spread.refresh();
  253. BillsElf.refreshWorkBook();
  254. //if($('#linkZMHS').hasClass('active')) zmhs_obj.refresh();
  255. if($('#rnc-zm').is(':visible')|| $('#rnc-fz').is(':visible') || $('#rnc-cus')) zmhs_obj.refresh();
  256. if($('#linkMBZM').hasClass('active')) mbzm_obj.refresh();
  257. }
  258. let subViewObj = {
  259. linkTabClick: function () {
  260. $("#subItems").children().hide();
  261. $($(this).attr('href')).show();
  262. },
  263. loadComments: function (node) {
  264. let comments = [];
  265. let commentText = '';
  266. if (node) {
  267. if (node.sourceType === projectObj.project.Bills.getSourceType() &&
  268. (node.data.type === billType.FX || node.data.type === billType.BX || node.data.type === billType.BILL)) {
  269. if(node.data.ruleText && node.data.ruleText !== ''){
  270. comments.push('工程量计算规则:');
  271. comments.push(node.data.ruleText);
  272. }
  273. if(node.data.comments && node.data.comments !== ''){
  274. comments.push('清单注释:');
  275. comments.push(node.data.comments);
  276. }
  277. } else if (node.sourceType === projectObj.project.Ration.getSourceType()) {
  278. if(node.data.content && node.data.content !== ''){
  279. comments.push('工作内容:');
  280. comments.push(node.data.content);
  281. }
  282. if(node.data.annotation && node.data.annotation !== ''){
  283. comments.push('附注:');
  284. comments.push(node.data.annotation);
  285. }
  286. }
  287. commentText = comments.join('\n');
  288. }
  289. $('#comments>textarea').val(commentText);
  290. },
  291. saveComments: function (node) {
  292. let text = $('#comments>textarea').val();
  293. if (node && node.sourceType === projectObj.project.Bills.getSourceType()) {
  294. if (node.data.comments !== text) {
  295. projectObj.project.Bills.updateField(node.source, "comments", text);
  296. }
  297. } else if (node && node.sourceType === projectObj.project.Ration.getSourceType()) {
  298. if (node.data.comments !== text) {
  299. projectObj.project.Ration.updateField(node.source, "comments", text);
  300. }
  301. }
  302. }
  303. }
  304. $("#linkComments").click(subViewObj.linkTabClick);
  305. $('#linkGLJ').on('shown.bs.tab', function () {
  306. gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
  307. });
  308. $('#linkZMHS').on('shown.bs.tab', function (e) {
  309. if(zmhs_obj.coeSpread == null || zmhs_obj.assSpread == null){
  310. zmhs_obj.initSpread();
  311. }
  312. zmhs_obj.refresh();
  313. zmhs_obj.showZMHSData();
  314. });
  315. $('#linkMBZM').on('shown.bs.tab', function (e) {
  316. mbzm_obj.refresh();
  317. mbzm_obj.showMBZMData();
  318. });
  319. $('#linkComments').on('shown.bs.tab', function () {
  320. subViewObj.loadComments(projectObj.project.mainTree.selected);
  321. });
  322. $('#linkGCLMX').on('shown.bs.tab', function () {
  323. gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
  324. });
  325. $('#linkAZZJF').on('shown.bs.tab', function () {
  326. gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
  327. });
  328. $('#zmhs_toogle').bind('click',function (){
  329. $("#zmhs_nav").show();
  330. if(subObj.showGljSubTab == false){
  331. subObj.activeTab?$(subObj.activeTab).click():$("#hs-nav").click();
  332. }
  333. $("#zmhs_toogle").hide();
  334. });
  335. $('.gljSubTab ul li a').bind('click',function () {
  336. if(this.hash =="#rnc-close"){
  337. $("#zmhs_nav").hide();
  338. $("#zmhs_toogle").show();
  339. closeTab(this);
  340. subObj.showGljSubTab = false;
  341. } else {
  342. subObj.showGljSubTab = true;
  343. subObj.activeTab =this;
  344. }
  345. subObj.initGljSubTab();
  346. refreshSubSpread();
  347. /* if($(this).hasClass("active")){//点击展开了后又点击了自身,这时要隐藏tab和修改本身class
  348. subObj.showGljSubTab = false;
  349. closeTab(this);
  350. subSpread.focus();//要加上这个,不然右边侧栏的选中状态的border线不会消换
  351. }*/
  352. });
  353. $('.gljSubTab ul li a').on('shown.bs.tab', function () {
  354. if(this.hash == "#rnc-xm"){
  355. //初始化项目特征表格位置,如果以后需要的话,showdata 统一移动至zmhs_obj中
  356. //todo
  357. }else if(this.hash == "#rnc-zm"){
  358. zmhs_obj.initCoeSpread();
  359. }else if(this.hash == "#rnc-fz"){
  360. zmhs_obj.initAssSpread();
  361. }else if(this.hash == "#rnc-cus"){
  362. zmhs_obj.initCusSpread();
  363. }
  364. zmhs_obj.refresh();
  365. zmhs_obj.showDatas();
  366. });
  367. function closeTab(elem) {
  368. setTimeout(function () {
  369. $(elem).removeClass("show");
  370. $(elem).removeClass("active");
  371. $(elem).attr("aria-selected",false);
  372. $(elem.hash).removeClass("show");
  373. $(elem.hash).removeClass("active");
  374. },50);
  375. }