components.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /**
  2. * Created by Zhong on 2017/8/25.
  3. */
  4. /*
  5. 弹出组成物窗口 组成物表
  6. * */
  7. let componentOprObj = {
  8. treeObj:null,
  9. rootNode: null,//分类树根节点
  10. radiosSelected: null,//allGljs, stdGljs, complementaryGljs
  11. workBook: null,
  12. setting: {
  13. owner: "components",
  14. header: [
  15. {headerName:"选择", headerWidth: 40, dataCode: "select", hAlign: "center", vAlign: "center"},
  16. {headerName:"编码",headerWidth:80,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
  17. {headerName:"名称",headerWidth:120,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"},
  18. {headerName:"规格型号",headerWidth:80,dataCode:"specs", dataType: "String", hAlign: "center", vAlign: "center"},
  19. {headerName:"计量单位",headerWidth:80,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
  20. {headerName:"单价",headerWidth:80,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
  21. {headerName:"类型",headerWidth:80,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"}
  22. ],
  23. view: {
  24. lockedCells: [1, 2, 3]
  25. }
  26. },
  27. buildSheet: function (container) {
  28. let me = componentOprObj;
  29. me.workBook = sheetOpr.buildSheet(container, me.setting, 30);
  30. me.workBook.getSheet(0).setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
  31. me.workBook.getSheet(0).setFormatter(-1, 1, "@", GC.Spread.Sheets.SheetArea.viewport);
  32. me.workBook.getSheet(0).options.isProtected = true;
  33. sheetOpr.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
  34. me.radiosChange();
  35. },
  36. setShowGljList: function (gljList) {
  37. //初始为所有工料机,机械类型可添加机械组成物,混凝土,砂浆、配合比可添加普通材料
  38. let materialArr = [202, 203, 204];//混凝土、砂浆、配合比, 201普通材料
  39. let that = repositoryGljObj, me = componentOprObj;
  40. for(let i = 0; i < gljList.length; i++){
  41. if(that.currentGlj.gljType === 3 && gljList[i].gljType === 302 ||
  42. materialArr.indexOf(that.currentGlj.gljType) !== -1 && gljList[i].gljType === 201){
  43. //去除与已添加的组成物重复的条目
  44. let isExist = false;
  45. for(let j = 0; j < that.currentComponent.length; j++){
  46. if(that.currentComponent[j].ID === gljList[i].ID){
  47. isExist = true;
  48. break;
  49. }
  50. }
  51. if(!isExist){
  52. gljList[i].isChecked = false;
  53. me.showGljList.push(gljList[i]);
  54. }
  55. }
  56. }
  57. },
  58. //初始默认radio
  59. initRadio: function () {
  60. let that = repositoryGljObj, me = componentOprObj;
  61. //默认radio所有工料机
  62. if(typeof $("input[name='glj']:checked")[0] !== 'undefined'){
  63. $("input[name='glj']:checked")[0].checked = false;
  64. }
  65. $("input[value = 'allGljs']")[0].checked = true;
  66. me.radiosSelected = 'allGljs';
  67. //初始为所有工料机,机械类型可添加机械组成物,混凝土,砂浆、配合比可添加普通材料
  68. me.showGljList = [];
  69. if(me.radiosSelected === 'allGljs'){
  70. me.setShowGljList(that.stdGljList);
  71. me.setShowGljList(that.complementaryGljList);
  72. that.sortGlj(me.showGljList);
  73. }
  74. },
  75. //监听radios选择事件
  76. radiosChange: function () {
  77. let me = componentOprObj, re = repositoryGljObj;
  78. let materialArr = [202, 203, 204];//混凝土、砂浆、配合比, 201普通材料
  79. $('.glj-radio').change(function () {
  80. let val = $("input[name='glj']:checked").val();
  81. me.radiosSelected = val;
  82. //选择改变,数据重新筛选显示
  83. me.showGljList = [];
  84. if(me.radiosSelected === 'allGljs'){
  85. me.setShowGljList(re.stdGljList);
  86. me.setShowGljList(re.complementaryGljList);
  87. }
  88. else if(me.radiosSelected === 'stdGljs'){
  89. me.setShowGljList(re.stdGljList);
  90. }
  91. else if(me.radiosSelected === 'complementaryGljs'){
  92. me.setShowGljList(re.complementaryGljList);
  93. }
  94. re.sortGlj(me.showGljList);
  95. //重新显示
  96. me.showGljItems(me.showGljList, me.gljCurTypeId);
  97. //切换radio后更新cache
  98. if (me.currentOprParent = 1) {
  99. if(re.parentNodeIds["_pNodeId_" + me.gljCurTypeId]){
  100. me.currentCache = me.getParentCache(re.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
  101. }
  102. else{
  103. me.currentCache = [];
  104. }
  105. } else {
  106. me.currentCache = me.getCache();
  107. }
  108. });
  109. },
  110. //切换分类树时,记住当前分类的选择, value = true、false、null
  111. setComponentChecked: function (sheet) {
  112. let me = componentOprObj;
  113. for(let i = 0; i < sheet.getRowCount(); i ++){
  114. if(sheet.getValue(i, 0) === true){//选择了
  115. me.preCache[i].isChecked = true;
  116. }
  117. else if(sheet.getValue(i, 0) === false){//避免value为null
  118. me.preCache[i].isChecked = false;
  119. }
  120. }
  121. },
  122. //获得选择的组成物
  123. getComponents: function () {
  124. let rst = [];
  125. let me = componentOprObj;
  126. for(let i = 0; i < me.showGljList.length; i++){
  127. }
  128. },
  129. getParentCache: function (nodes) {
  130. let me = componentOprObj, rst = [];
  131. for(let i = 0; i < me.showGljList.length; i++){
  132. if(nodes.indexOf(me.showGljList[i].gljClass) !== -1){
  133. rst.push(me.showGljList[i]);
  134. }
  135. }
  136. rst.sort(function (a, b) {
  137. let rst = 0;
  138. if(a.code > b.code) rst = 1;
  139. else if(a.code < b.code)rst = -1;
  140. return rst;
  141. });
  142. return rst;
  143. },
  144. getCache: function() {
  145. let me = componentOprObj, rst = [];
  146. for (let i = 0; i < me.showGljList.length; i++) {
  147. if (me.showGljList[i].gljClass == me.gljCurTypeId) {
  148. rst.push(me.showGljList[i]);
  149. }
  150. }
  151. return rst;
  152. },
  153. showGljItems: function(data, type) {
  154. let me = componentOprObj, re = repositoryGljObj;
  155. if (me.workBook) {
  156. let cacheSection = [];
  157. let pArr = re.parentNodeIds["_pNodeId_" + type];
  158. for (let i = 0; i < data.length; i++) {
  159. if (pArr && pArr.indexOf(data[i].gljClass) >= 0) {
  160. cacheSection.push(data[i]);
  161. } else if (type == data[i].gljClass) {
  162. cacheSection.push(data[i]);
  163. }
  164. }
  165. sheetOpr.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
  166. sheetOpr.showData(me.workBook.getSheet(0), me.setting, cacheSection, re.distTypeTree);
  167. cacheSection = null;
  168. }
  169. }
  170. };
  171. let componentTypeTreeOprObj = {
  172. //todo: 当关闭后,将gljcurTypeId置0
  173. onClick: function(event,treeId,treeNode) {
  174. let me = componentOprObj, re = repositoryGljObj, that = gljComponentOprObj, gljTypeId = treeNode.ID;
  175. if(me.gljCurTypeId !== treeNode.ID){
  176. me.gljCurTypeId = treeNode.ID;
  177. if(typeof me.currentCache === 'undefined'){
  178. if (re.parentNodeIds["_pNodeId_" + treeNode.ID]) {
  179. me.currentOprParent = 1;
  180. me.currentCache = me.getParentCache(re.parentNodeIds["_pNodeId_" + treeNode.ID]);
  181. } else {
  182. me.currentCache = me.getCache();
  183. }
  184. me.preCache = me.currentCache;
  185. }
  186. else{
  187. me.preCache = me.currentCache;
  188. if (re.parentNodeIds["_pNodeId_" + treeNode.ID]) {
  189. me.currentOprParent = 1;
  190. me.currentCache = me.getParentCache(re.parentNodeIds["_pNodeId_" + treeNode.ID]);
  191. } else {
  192. me.currentCache = me.getCache();
  193. }
  194. }
  195. //切换分类树时,记住当前分类的选择
  196. me.setComponentChecked(me.workBook.getSheet(0));
  197. me.showGljItems(me.showGljList, gljTypeId);
  198. }
  199. /*sheetOpr.cleanSheet(that.workBook.getSheet(0), that.setting, 5);
  200. that.workBook.getSheet(0).getRange(-1, 0 , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);
  201. that.workBook.getSheet(0).getRange(-1, 4 , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);
  202. re.workBook.getSheet(0).getRange(-1, 6 , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);*/
  203. //that.workBook.getSheet(0).options.isProtected = true;
  204. //sheetOpr.lockCodeCells(re.workBook.getSheet(0), re.currentCache.length);
  205. //re.workBook.getSheet(0).setRowCount(re.currentCache.length);
  206. }
  207. }