sub_view.js 14 KB

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