repository_glj.js 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015
  1. /**
  2. * Created by Tony on 2017/5/5.
  3. */
  4. $("#drirect-dinge").click(function(){
  5. $(this).attr('href', "/complementaryRation/ration" + "?repository=" + getQueryString("repository"))
  6. });
  7. $("#fuzhu").click(function(){
  8. $(this).attr('href', "/complementaryRation/coe" + "?repository=" + getQueryString("repository"))
  9. });
  10. $("#anzhuang").click(function(){
  11. $(this).attr('href', "/complementaryRation/installation" + "?repository=" + getQueryString("repository"))
  12. });
  13. var pageOprObj = {
  14. rationLibName : null,
  15. rationLibId: null,
  16. initPage : function(container) {
  17. var me = this, rationLibId = getQueryString("repository"),//获取定额库参数
  18. rationLibName = storageUtil.getSessionCache("RationGrp","repositoryID_" + rationLibId);
  19. me.rationLibId = rationLibId;
  20. if (rationLibName) {
  21. me.rationLibName = rationLibName;
  22. let $rationName = $(`<div id='rationname' class='navbar-text'>${me.rationLibName}</div>`);
  23. $('.header-logo').after($rationName);
  24. repositoryGljObj.buildSheet(container);
  25. //repositoryGljObj.getRationGljIds(rationLibId);
  26. repositoryGljObj.getGljDistType(function () {
  27. repositoryGljObj.currentRepositoryId = parseInt(rationLibId);
  28. //引用的工料机库
  29. let gljLibID = storageUtil.getSessionCache("gljLib", "repositoryID_" + rationLibId);
  30. if(gljLibID && typeof gljLibID !== 'undefined'){
  31. repositoryGljObj.getGljTree(gljLibID, function () {
  32. repositoryGljObj.getGljItems(gljLibID);
  33. });
  34. }
  35. sheetCommonObj.shieldAllCells(repositoryGljObj.workBook.getSheet(0), repositoryGljObj.setting);
  36. });
  37. }
  38. }
  39. }
  40. repositoryGljObj = {
  41. treeObj : null,
  42. workBook: null,
  43. gljCurTypeId: -1,
  44. currentRepositoryId: -1,
  45. currentCache: null,
  46. parentNodeIds: {},
  47. gljList: [],
  48. distTypeTree: null,//add
  49. setting: {
  50. header:[
  51. {headerName:"编码",headerWidth:120,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
  52. {headerName:"名称",headerWidth:260,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"},
  53. {headerName:"规格型号",headerWidth:260,dataCode:"specs", dataType: "String", hAlign: "left", vAlign: "center"},
  54. {headerName:"单位",headerWidth:120,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
  55. {headerName:"定额价",headerWidth:120,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
  56. {headerName:"类型",headerWidth:120,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"}
  57. ],
  58. view:{
  59. comboBox:[
  60. {row:-1,col:3,rowCount:-1,colCount:1}
  61. ],
  62. lockedCells:[
  63. ]
  64. }
  65. },
  66. getComboData: function (gljDistType) {
  67. let me = this;
  68. let distType;
  69. let distTypeTree = {
  70. prefix : 'gljType',
  71. distTypes: {},
  72. comboDatas: [],
  73. distTypesArr: []
  74. };
  75. gljDistType.forEach(function (typeData) {
  76. let typeObj = {
  77. data: typeData,
  78. children: [],
  79. parent: null
  80. }
  81. distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj;
  82. distTypeTree.distTypesArr.push(typeObj);
  83. });
  84. gljDistType.forEach(function (typeData) {
  85. distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID];
  86. let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID];
  87. if(parent){
  88. distType.parent = parent;
  89. parent.children.push(distType);
  90. }
  91. });
  92. distTypeTree.distTypesArr.forEach(function (distTypeObj) {
  93. if(distTypeObj.data.fullName !== '材料'){
  94. distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
  95. }
  96. });
  97. return distTypeTree;
  98. },
  99. getGljDistType: function (callback) {
  100. let me = this;
  101. CommonAjax.post('api/getGljDistType', {}, function (rstData) {
  102. me.distTypeTree = me.getComboData(rstData);
  103. me.workBook.getSheet(0).getCell(-1, 5, GC.Spread.Sheets.SheetArea.viewport).value(me.distTypeTree.comboDatas[0].text);
  104. if(callback){
  105. callback();
  106. }
  107. });
  108. /* $.ajax({
  109. type: 'post',
  110. url: "api/getGljDistType",
  111. dataType: 'json',
  112. success: function (result) {
  113. if(!result.error && callback){
  114. me.distTypeTree = me.getComboData(result.data);
  115. /!*let combo = new GC.Spread.Sheets.CellTypes.ComboBox();
  116. combo.items(me.distTypeTree.comboDatas).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.text);*!/
  117. me.workBook.getSheet(0).getCell(-1, 5, GC.Spread.Sheets.SheetArea.viewport).value(me.distTypeTree.comboDatas[0].text);
  118. callback();
  119. }
  120. }
  121. })*/
  122. },
  123. getGljTree: function(gljLibId, callback) {
  124. var me = this;
  125. CommonAjax.post('api/getGljTree', {gljLibId: gljLibId}, function (rstData) {
  126. zTreeHelper.createTree(rstData, gljSetting, "repositoryTree", me);
  127. if (rstData && rstData.length > 0) {
  128. me.gljCurTypeId = rstData[0].ID;
  129. } else {
  130. gljTypeTreeOprObj.addRootNode();
  131. }
  132. callback();
  133. });
  134. /*
  135. $.ajax({
  136. type:"POST",
  137. url:"api/getGljTree",
  138. data:{"gljLibID": gljLibID},
  139. dataType:"json",
  140. cache:false,
  141. timeout:20000,
  142. success:function(result,textStatus,status){
  143. if(status.status == 200) {
  144. zTreeHelper.createTree(result.data, gljSetting, "repositoryTree", me);
  145. if (result.data && result.data.length > 0) {
  146. me.gljCurTypeId = result.data[0].ID;
  147. } else {
  148. gljTypeTreeOprObj.addRootNode();
  149. }
  150. callback();
  151. }
  152. },
  153. error:function(err){
  154. alert(err.responseJSON.error);
  155. }
  156. })*/
  157. },
  158. getGljItems: function(gljLibId) {
  159. var me = this;
  160. CommonAjax.post('api/getGljItems', {gljLibId: gljLibId}, function (rstData) {
  161. me.gljList = rstData;
  162. me.workBook.getSheet(0).setRowCount(rstData.length);
  163. me.sortGlj();
  164. let rootNode = me.treeObj.getNodes()[0];
  165. if(rootNode && rootNode.isParent && rootNode.isFirstNode){
  166. me.treeObj.selectNode(rootNode);
  167. gljTypeTreeOprObj.onClick(null, 'repositoryTree', rootNode);
  168. }
  169. });
  170. /* $.ajax({
  171. type:"POST",
  172. url:"api/getGljItems",
  173. data:{"repositoryId": gljLibID},
  174. dataType:"json",
  175. cache:false,
  176. timeout:5000,
  177. success:function(result){
  178. if(!result.error) {
  179. me.gljList = result.data;
  180. me.workBook.getSheet(0).setRowCount(result.data.length);
  181. me.sortGlj();
  182. let rootNode = me.treeObj.getNodes()[0];
  183. if(rootNode && rootNode.isParent && rootNode.isFirstNode){
  184. me.treeObj.selectNode(rootNode);
  185. gljTypeTreeOprObj.onClick(null, 'repositoryTree', rootNode);
  186. }
  187. //me.showGljItems(result.data, me.gljCurTypeId);
  188. }
  189. },
  190. error:function(err){
  191. alert(err.responseJSON.error);
  192. }
  193. })*/
  194. },
  195. showGljItems: function(data, type) {
  196. var me = repositoryGljObj;
  197. if (me.workBook) {
  198. var cacheSection = [];
  199. var pArr = me.parentNodeIds["_pNodeId_" + type];
  200. for (var i = 0; i < data.length; i++) {
  201. if (pArr && pArr.indexOf(data[i].gljClass) >= 0) {
  202. cacheSection.push(data[i]);
  203. } else if (type == data[i].gljClass) {
  204. //data[i].gljDistType = me.distTypeTree.distTypes[me.distTypeTree.prefix + data[i].gljDistType].data.fullName;
  205. cacheSection.push(data[i]);
  206. }
  207. }
  208. sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
  209. sheetsOprObj.showData(me.workBook.getSheet(0), me.setting, cacheSection, me.distTypeTree);
  210. cacheSection = null;
  211. }
  212. },
  213. buildSheet: function(container) {
  214. var me = repositoryGljObj;
  215. me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30, me);
  216. me.workBook.getSheet(0).options.isProtected = true;
  217. /* me.repositoryGljDelOpr();
  218. me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
  219. me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
  220. me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
  221. me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
  222. //me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
  223. me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);*/
  224. },
  225. onEnterCell: function (sender, args) {
  226. let me = repositoryGljObj;
  227. me.cellRowIdx = args.row;
  228. let isHasData = false;
  229. if(me.addGljObj){
  230. for(let i=0; i<me.setting.header.length; i++){
  231. if(me.addGljObj[me.setting.header[i].dataCode]){
  232. isHasData = true;
  233. break;
  234. }
  235. }
  236. }
  237. if(isHasData){
  238. if(me.editingRowIdx !== me.cellRowIdx) {
  239. let isComple = true;
  240. let focusToCol;
  241. function getFocusToCol (me){
  242. if(!me.addGljObj[me.setting.header[0].dataCode]){
  243. $('#alertGljTxt').text('编号不能为空,是否取消增加工料机?');
  244. return 0;
  245. }
  246. else if(!me.addGljObj[me.setting.header[1].dataCode]){
  247. $('#alertGljTxt').text('名称不能为空,是否取消增加工料机?');
  248. return 1;
  249. }
  250. else if(!me.addGljObj[me.setting.header[5].dataCode]){
  251. $('#alertGljTxt').text('类型不能为空,是否取消增加工料机?');
  252. return 5;
  253. }
  254. else {
  255. return -1;
  256. }
  257. }
  258. focusToCol = getFocusToCol(me);
  259. if(focusToCol === -1){
  260. }
  261. else {
  262. $('#gljAlertBtn').click();
  263. //me.workBook.getSheet(0).options.isProtected = true;
  264. sheetCommonObj.lockAllCells(args.sheet);
  265. $('#aleCanceBtn').click(function () {
  266. // me.workBook.getSheet(0).options.isProtected = false;
  267. sheetCommonObj.unLockAllCells(args.sheet);
  268. sheetsOprObj.reLockSomeCodes(args.sheet, 0, repositoryGljObj.currentCache.length);
  269. me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, focusToCol);
  270. });
  271. $('#gljAleClose').click(function () {
  272. // me.workBook.getSheet(0).options.isProtected = false;
  273. sheetCommonObj.unLockAllCells(args.sheet);
  274. sheetsOprObj.reLockSomeCodes(args.sheet, 0, repositoryGljObj.currentCache.length);
  275. me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, focusToCol);
  276. });
  277. $('#aleConfBtn').click(function () {
  278. // me.workBook.getSheet(0).options.isProtected = false;
  279. sheetCommonObj.unLockAllCells(args.sheet);
  280. sheetsOprObj.reLockSomeCodes(args.sheet, 0, repositoryGljObj.currentCache.length);
  281. me.addGljObj = null;
  282. for(let col=0; col<me.setting.header.length; col++){
  283. let field = me.setting.header[col].dataCode;
  284. if(field === 'gljType'){
  285. me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value(
  286. me.distTypeTree.distTypes[me.distTypeTree.prefix + me.currentEditingGlj[field]].data.fullName);
  287. }
  288. else{
  289. me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value(me.currentEditingGlj[me.setting.header[col].dataCode]);
  290. }
  291. }
  292. me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, 0);
  293. });
  294. }
  295. }
  296. }
  297. },
  298. onCellEditStart: function(sender, args) {
  299. var me = repositoryGljObj;
  300. var rObj = sheetsOprObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
  301. me.currentEditingGlj = rObj;
  302. me.orgCode = me.workBook.getSheet(0).getValue(args.row, 0);
  303. var cacheSection = me.gljList;
  304. if (cacheSection) {
  305. for (var j = 0; j < cacheSection.length; j++) {
  306. if (cacheSection[j][me.setting.header[0].dataCode] && cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
  307. rObj["ID"] = cacheSection[j]["ID"];
  308. rObj.gljClass = cacheSection[j].gljClass;
  309. break;
  310. }
  311. }
  312. }
  313. },
  314. onCellEditEnd: function(sender, args) {
  315. var me = repositoryGljObj, rObj = sheetsOprObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row, me),
  316. updateArr = [], addArr = [], updateBasePrcArr = [];
  317. me.editingRowIdx = args.row;
  318. rObj.basePrice = rObj.basePrice ? rObj.basePrice : 0;
  319. if (me.currentEditingGlj["ID"]) {
  320. rObj["ID"] = me.currentEditingGlj["ID"];
  321. rObj.gljClass = me.currentEditingGlj.gljClass;
  322. for(let col =0; col< me.setting.header.length; col++){
  323. if(me.currentEditingGlj[me.setting.header[col].dataCode] !== rObj[me.setting.header[col].dataCode]){
  324. me.addGljObj = rObj;
  325. if(rObj[me.setting.header[0].dataCode] && rObj[me.setting.header[1].dataCode] && rObj[me.setting.header[5].dataCode]){
  326. updateArr.push(rObj);
  327. break;
  328. }
  329. }
  330. }
  331. if(me.currentEditingGlj.basePrice !== rObj.basePrice){
  332. //update basePrice of ration when editting basePrice of glj
  333. let gljType = -1;
  334. let gljTypeParent = me.distTypeTree.distTypes[me.distTypeTree.prefix + me.currentEditingGlj.gljType].parent;
  335. if(gljTypeParent && gljTypeParent.data.ID <=3){
  336. gljType = gljTypeParent.data.ID;
  337. }
  338. if(!gljTypeParent && me.currentEditingGlj.gljType <= 3){
  339. gljType = me.currentEditingGlj.gljType;
  340. }
  341. let gljBasePrcObj = {gljId: me.currentEditingGlj.ID, gljType: gljType, basePrice: rObj.basePrice};
  342. if(gljBasePrcObj.gljType !== -1){
  343. updateBasePrcArr.push(gljBasePrcObj);
  344. me.updateRationBasePrcRq(updateBasePrcArr);
  345. }
  346. }
  347. //update basePrice of ration when editting gljType of glj
  348. if(me.currentEditingGlj.gljType !== rObj.gljType){
  349. let gljTypeObj = {gljId: me.currentEditingGlj.ID, gljType: rObj.gljType, basePrice: rObj.basePrice};
  350. updateBasePrcArr.push(gljTypeObj);
  351. me.updateRationBasePrcRq(updateBasePrcArr);
  352. }
  353. } else {
  354. me.addGljObj = rObj;
  355. let isCanSav = true;
  356. if(!rObj[me.setting.header[0].dataCode] || !rObj[me.setting.header[1].dataCode] || !rObj[me.setting.header[5].dataCode]){
  357. isCanSav = false;
  358. }
  359. if(isCanSav){
  360. me.addGljObj = null;
  361. addArr.push(rObj);
  362. }
  363. }
  364. if(me.gljCurTypeId !== 1){
  365. rObj.gljClass = me.gljCurTypeId;
  366. }
  367. if(updateArr.length >0 || addArr.length >0){
  368. me.currentEditingGlj = null;
  369. //me.workBook.getSheet(0).setValue(11, 5, "人工");
  370. me.mixUpdateRequest(updateArr, addArr, []);
  371. }
  372. },
  373. repositoryGljDelOpr: function () {
  374. let me = repositoryGljObj;
  375. me.workBook.commandManager().register('repositoryGljDel', function () {
  376. let sheet = me.workBook.getSheet(0),
  377. updateArr = [], removeArr = [],
  378. tempRemoveArr= [],
  379. refGljCodes = [], //已被引用的工料机
  380. updateBasePrcArr = [],//删除基价单位后重新计算
  381. sels = sheet.getSelections(),
  382. cacheSection = me.currentCache;
  383. if(sels.length > 0 && cacheSection.length > 0){
  384. for(let i = 0; i < sels.length; i++){
  385. if(sels[i].colCount === me.setting.header.length){
  386. for(let j = 0; j < sels[i].rowCount; j++){
  387. if(sels[i].row + j < cacheSection.length){
  388. tempRemoveArr.push({ID: cacheSection[sels[i].row + j].ID, code: cacheSection[sels[i].row + j].code});
  389. }
  390. }
  391. }
  392. else{
  393. let maxCol = sels[i].col + sels[i].colCount - 1;
  394. if(sels[i].col >= 2 && maxCol <= 4){
  395. for(let j = 0; j < sels[i].rowCount; j++){
  396. if(sels[i].row + j < cacheSection.length){
  397. let updateObj = cacheSection[sels[i].row + j];
  398. for(let col = sels[i].col; col <= maxCol; col++){
  399. if(me.setting.header[col].dataCode === 'basePrice'){
  400. updateObj[me.setting.header[col].dataCode] = 0;
  401. updateBasePrcArr.push({gljId: updateObj.ID, gljType: updateObj.gljType, basePrice: 0});
  402. }
  403. else{
  404. updateObj[me.setting.header[col].dataCode] = '';
  405. }
  406. }
  407. updateArr.push(updateObj);
  408. }
  409. }
  410. }
  411. //编号、名称、类型不可为空
  412. else{
  413. if(sels[i].row < cacheSection.length){
  414. let text = '', cantNullStr =['编码', '名称', '类型'];
  415. for(let col = sels[i].col; col <= sels[i].col + sels[i].colCount -1; col++){
  416. if(cantNullStr.indexOf(me.setting.header[col].headerName) !== -1){
  417. text += me.setting.header[col].headerName + " ";
  418. }
  419. }
  420. $('#alertText').text(text + "不可为空!");
  421. $('#codeAlertBtn').click();
  422. sheet.options.isProtected = true;
  423. $('#codAleConfBtn').click(function () {
  424. sheetsOprObj.lockSomeCodes(sheet, 0, cacheSection.length);
  425. });
  426. $('#codAleClose').click(function () {
  427. sheetsOprObj.lockSomeCodes(sheet, 0, cacheSection.length);
  428. });
  429. }
  430. }
  431. }
  432. }
  433. //提取已被引用工料机
  434. if(tempRemoveArr.length > 0){
  435. for(let i = 0; i < tempRemoveArr.length; i++){
  436. if(me.rationGljIds.indexOf(tempRemoveArr[i].ID) !== -1){
  437. refGljCodes.push(tempRemoveArr[i].code);
  438. tempRemoveArr.splice(i--, 1);
  439. }
  440. else{
  441. removeArr.push(tempRemoveArr[i].ID);
  442. }
  443. }
  444. }
  445. //提示
  446. if(refGljCodes.length > 0){
  447. let alertText;
  448. if(refGljCodes.length > 3){
  449. alertText = "编号: " + refGljCodes[0]+" 、" + refGljCodes[1] + " 、" + refGljCodes[2] + "...等工料机已有定额引用,删除失败!";
  450. }
  451. else {
  452. let alertCode = " ";
  453. for(let i=0; i< refGljCodes.length; i++){
  454. alertCode += refGljCodes[i] + " 、";
  455. }
  456. alertText = "编号:" + alertCode + "工料机已有定额引用,删除失败!"
  457. }
  458. $('#alertText').text(alertText);
  459. $('#codeAlertBtn').click();
  460. sheet.options.isProtected = true;
  461. $('#codAleConfBtn').click(function () {
  462. sheetsOprObj.lockSomeCodes(sheet, 0, cacheSection.length);
  463. if(removeArr.length > 0){
  464. me.mixUpdateRequest(updateArr, [], removeArr);
  465. }
  466. });
  467. $('#codAleClose').click(function () {
  468. sheetsOprObj.lockSomeCodes(sheet, 0, cacheSection.length);
  469. me.mixUpdateRequest(updateArr, [], removeArr);
  470. });
  471. }
  472. else if(removeArr.length > 0 || updateArr.length > 0){
  473. me.mixUpdateRequest(updateArr, [], removeArr);
  474. if(updateBasePrcArr.length > 0){
  475. me.updateRationBasePrcRq(updateBasePrcArr);
  476. }
  477. }
  478. }
  479. });
  480. me.workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
  481. me.workBook.commandManager().setShortcutKey('repositoryGljDel', GC.Spread.Commands.Key.del, false, false, false, false);
  482. },
  483. validUpdateObj: function (pasteObj, rowIdx) {
  484. let rst = {}, backUpObj = {},
  485. me = repositoryGljObj,
  486. tempObj = me.currentCache[rowIdx],
  487. reCalBasePrc = false, isValid = true;
  488. //备份原始数据
  489. for(let atr in tempObj){
  490. backUpObj[atr] = tempObj[atr];
  491. }
  492. if(typeof pasteObj.code !== 'undefined'){
  493. if(pasteObj.code.trim().length !== 0){
  494. let isExist = false;
  495. for(let i = 0; i < me.gljList.length; i++){
  496. if(me.gljList[i].code === pasteObj.code){
  497. isExist = true;
  498. break;
  499. }
  500. }
  501. if(!isExist){
  502. tempObj.code = pasteObj.code;
  503. }
  504. else isValid = false;
  505. }
  506. else isValid = false;
  507. }
  508. if(typeof pasteObj.name !== 'undefined'){
  509. if(pasteObj.name.trim().length === 0) isValid = false;
  510. else tempObj.name = pasteObj.name;
  511. }
  512. if(typeof pasteObj.specs !== 'undefined'){
  513. tempObj.specs = pasteObj.specs;
  514. }
  515. if(typeof pasteObj.unit !== 'undefined'){
  516. tempObj.unit = pasteObj.unit;
  517. }
  518. if(typeof pasteObj.gljType !== 'undefined'){
  519. let isExsit = false;
  520. for(let i = 0; i < me.distTypeTree.comboDatas.length; i++){
  521. if(pasteObj.gljType === me.distTypeTree.comboDatas[i].text){
  522. isExsit = true;
  523. reCalBasePrc = true;
  524. tempObj.gljType = me.distTypeTree.comboDatas[i].value;
  525. tempObj.shortName = me.distTypeTree.distTypes[me.distTypeTree.prefix + tempObj.gljType].data.shortName;
  526. }
  527. }
  528. if(!isExsit) isValid = false;
  529. }
  530. //
  531. pasteObj.basePrice = !isNaN(parseFloat(pasteObj.basePrice)) && (pasteObj.basePrice && typeof pasteObj.basePrice !== 'undefined') ? parseFloat(pasteObj.basePrice) :
  532. me.currentCache[rowIdx].basePrice;
  533. if(pasteObj.basePrice !== me.currentCache[rowIdx].basePrice){
  534. reCalBasePrc = true;
  535. tempObj.basePrice = pasteObj.basePrice;
  536. }
  537. if(isValid){
  538. rst.updateGlj = tempObj;
  539. if(reCalBasePrc){
  540. //重新计算定额基价对象
  541. rst.updateBasePrc = {gljId: tempObj.ID, gljType: tempObj.gljType, basePrice: tempObj.basePrice};
  542. }
  543. }
  544. else {
  545. for(let attr in backUpObj){
  546. tempObj[attr] = backUpObj[attr];
  547. }
  548. }
  549. return rst;
  550. },
  551. //粘贴的数据是否是可添加的数据,只有含有编号,名称,类型才可添加
  552. isValidObj: function(pasteObj) {
  553. let me = repositoryGljObj;
  554. if(!(pasteObj.code && typeof pasteObj.code !== 'undefined') || !(pasteObj.name && typeof pasteObj.name !== 'undefined') ||
  555. !(pasteObj.gljType && typeof pasteObj.gljType !== 'undefined')){
  556. return false;
  557. }
  558. if(pasteObj.gljType && typeof pasteObj.gljType !== 'undefined'){
  559. let isExist = false;
  560. for(let i = 0; i < me.distTypeTree.comboDatas.length; i++){
  561. if(me.distTypeTree.comboDatas[i].text === pasteObj.gljType){
  562. isExist = true;
  563. pasteObj.gljType = me.distTypeTree.comboDatas[i].value;
  564. pasteObj.shortName = me.distTypeTree.distTypes[me.distTypeTree.prefix + pasteObj.gljType].data.shortName;
  565. break;
  566. }
  567. }
  568. if(!isExist){
  569. return false;
  570. }
  571. }
  572. if(pasteObj.code && typeof pasteObj.code !== 'undefined'){
  573. for(let i = 0; i < me.gljList.length; i++){
  574. if(me.gljList[i].code === pasteObj.code){
  575. return false;
  576. }
  577. }
  578. }
  579. pasteObj.basePrice = !isNaN(parseFloat(pasteObj.basePrice)) && (pasteObj.basePrice && typeof pasteObj.basePrice !== 'undefined') ? parseFloat(pasteObj.basePrice) : 0;
  580. pasteObj.gljClass = me.gljCurTypeId;
  581. return true;
  582. },
  583. onClipboardPasting: function(sender, args) {
  584. var me = repositoryGljObj;
  585. /*if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) {
  586. args.cancel = true;
  587. }*/
  588. if (me.gljCurTypeId < 0 ) {
  589. args.cancel = true;
  590. }
  591. },
  592. onClipboardPasted: function(e, info) {
  593. var me = repositoryGljObj;
  594. var updateArr = [], addArr = [];
  595. var items = sheetCommonObj.analyzePasteData(me.setting, info);
  596. let beginRow = info.cellRange.row, endRow = info.cellRange.row + info.cellRange.rowCount - 1,
  597. maxRow = me.currentCache.length - 1, updateItems = [], addItems = [], updateBasePrcArr = [] , updateCount, resumeArr = [];
  598. if(endRow <= maxRow){
  599. //updateItems = items;
  600. for(let i = 0; i < items.length; i++){
  601. let updateObj = me.validUpdateObj(items[i], info.cellRange.row + i);
  602. if(updateObj && typeof updateObj.updateGlj !== 'undefined'){
  603. updateArr.push(updateObj.updateGlj);
  604. if(typeof updateObj.updateBasePrc !== 'undefined'){
  605. updateBasePrcArr.push(updateObj.updateBasePrc);
  606. }
  607. }
  608. else{
  609. resumeArr.push(info.cellRange.row + i);
  610. }
  611. }
  612. }
  613. else if(beginRow <= maxRow && endRow > maxRow){
  614. updateCount = maxRow - beginRow + 1;
  615. for(let i = 0; i < updateCount; i++){
  616. let updateObj = me.validUpdateObj(items[i], info.cellRange.row + i);
  617. if(updateObj && typeof updateObj.updateGlj !== 'undefined'){
  618. updateArr.push(updateObj.updateGlj);
  619. if(typeof updateObj.updateBasePrc !== 'undefined'){
  620. updateBasePrcArr.push(updateObj.updateBasePrc);
  621. }
  622. }
  623. else{
  624. resumeArr.push(info.cellRange.row + i);
  625. }
  626. }
  627. if(info.cellRange.colCount === me.setting.header.length){
  628. for(let i = updateCount ; i < items.length; i++){
  629. if(me.isValidObj(items[i])){
  630. addItems.push(items[i]);
  631. addArr.push(items[i]);
  632. }
  633. else{
  634. resumeArr.push(info.cellRange.row + i);
  635. }
  636. }
  637. }
  638. else{
  639. for(let i = updateCount ; i < items.length; i++){
  640. resumeArr.push(info.cellRange.row + i);
  641. }
  642. }
  643. }
  644. else{
  645. if(info.cellRange.colCount === me.setting.header.length){
  646. for(let i = 0; i < items.length; i++){
  647. if(me.isValidObj(items[i])){
  648. addArr.push(items[i]);
  649. }
  650. else{
  651. resumeArr.push(info.cellRange.row + i);
  652. }
  653. }
  654. }
  655. else{
  656. for(let i = 0; i < items.length; i++){
  657. resumeArr.push(info.cellRange.row + i);
  658. }
  659. }
  660. }
  661. //repaint
  662. if(resumeArr.length > 0){
  663. info.sheet.suspendPaint();
  664. for(let i = 0; i < resumeArr.length ; i++){
  665. if(resumeArr[i] < me.currentCache.length){
  666. for(let col = 0; col < me.setting.header.length; col++){
  667. if(me.setting.header[col].dataCode === 'gljType'){
  668. let gljType = me.currentCache[resumeArr[i]][me.setting.header[col].dataCode];
  669. info.sheet.setValue(resumeArr[i], col, me.distTypeTree.distTypes["gljType" + gljType].data.fullName);
  670. }
  671. else{
  672. info.sheet.setValue(resumeArr[i], col, me.currentCache[resumeArr[i]][me.setting.header[col].dataCode]);
  673. }
  674. }
  675. }
  676. else{
  677. for(let col = 0; col < me.setting.header.length; col++){
  678. info.sheet.setValue(resumeArr[i], col, '');
  679. }
  680. }
  681. }
  682. info.sheet.resumePaint();
  683. }
  684. if (updateArr.length > 0 || addArr.length > 0) {
  685. me.mixUpdateRequest(updateArr, addArr, []);
  686. }
  687. if(updateBasePrcArr.length > 0){
  688. me.updateRationBasePrcRq(updateBasePrcArr);
  689. }
  690. },
  691. updateRationBasePrcRq: function (basePrcArr) {
  692. $.ajax({
  693. type: 'post',
  694. url: 'api/updateRationBasePrc',
  695. data:{data: JSON.stringify({repId: pageOprObj.rationLibId, lastOpr: userAccount, basePrcArr: basePrcArr})},
  696. dataType: 'json',
  697. success: function (result) {
  698. if(result.error){
  699. alert("计算定额基价失败");
  700. }
  701. }
  702. });
  703. },
  704. getRationGljIds: function (repId) {
  705. let me = repositoryGljObj;
  706. $.ajax({
  707. type: 'post',
  708. url: 'api/getRationGljIds',
  709. data: {data: JSON.stringify({repId: repId})},
  710. dataType: 'json',
  711. success: function(result){
  712. if(!result.error){
  713. me.rationGljIds = result.data;
  714. }
  715. }
  716. });
  717. },
  718. mixUpdateRequest: function(updateArr, addArr, removeIds) {
  719. var me = repositoryGljObj;
  720. $.ajax({
  721. type:"POST",
  722. url:"api/mixUpdateGljItems",
  723. data:{"repositoryId": me.currentRepositoryId, "lastOpr": userAccount, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr), "removeIds": JSON.stringify(removeIds)},
  724. dataType:"json",
  725. cache:false,
  726. timeout:5000,
  727. success:function(result){
  728. if (result.error) {
  729. alert(result.message);
  730. me.getRationItems(me.currentRepositoryId);
  731. } else {
  732. me.updateCache(addArr, updateArr, removeIds, result);
  733. me.sortGlj();
  734. if(me.currentOprParent === 1){
  735. me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
  736. }
  737. else{
  738. me.currentCache = me.getCache();
  739. //sheetCommonObj.unLockAllCells(me.workBook.getSheet(0));
  740. sheetsOprObj.reLockSomeCodes(me.workBook.getSheet(0), 0, me.currentCache.length);
  741. //sheetCommonObj.lockSomeCodes(me.workBook.getSheet(0), 0, me.currentCache.length);
  742. }
  743. me.showGljItems(me.gljList, me.gljCurTypeId);
  744. }
  745. },
  746. error:function(err){
  747. alert("保存失败");
  748. }
  749. })
  750. },
  751. getParentCache: function (nodes) {
  752. let me = repositoryGljObj, rst = [];
  753. for(let i = 0; i < me.gljList.length; i++){
  754. if(nodes.indexOf(me.gljList[i].gljClass) !== -1){
  755. rst.push(me.gljList[i]);
  756. }
  757. }
  758. rst.sort(function (a, b) {
  759. let rst = 0;
  760. if(a.code > b.code) rst = 1;
  761. else if(a.code < b.code)rst = -1;
  762. return rst;
  763. });
  764. return rst;
  765. },
  766. getCache: function() {
  767. var me = this, rst = [];
  768. for (var i = 0; i < me.gljList.length; i++) {
  769. if (me.gljList[i].gljClass == me.gljCurTypeId) {
  770. rst.push(me.gljList[i]);
  771. }
  772. }
  773. return rst;
  774. },
  775. updateCache: function(addArr, updateArr, removeIds, result) {
  776. var me = this, cacheSection = me.gljList;
  777. if (addArr.length > 0) {
  778. me.gljList = me.gljList.concat(addArr);
  779. cacheSection = me.gljList;
  780. }
  781. for (var i = removeIds.length - 1; i >= 0; i--) {
  782. for (var j = cacheSection.length - 1; j >= 0 ; j--) {
  783. if (cacheSection[j]["ID"] == removeIds[i]) {
  784. cacheSection.splice(j,1);
  785. }
  786. }
  787. }
  788. if (result && result.data.ops && result.data.ops.length > 0) {
  789. for (var i = 0; i < result.data.ops.length; i++) {
  790. for (var j = 0; j < cacheSection.length; j++) {
  791. if (cacheSection[j][me.setting.header[0].dataCode] == result.data.ops[i][me.setting.header[0].dataCode]) {
  792. cacheSection[j]["ID"] = result.data.ops[i]["ID"];
  793. }
  794. }
  795. }
  796. }
  797. for (var i = 0; i < updateArr.length; i++) {
  798. for (var j = 0; j < cacheSection.length; j++) {
  799. if (updateArr[i]["ID"] && cacheSection[j]["ID"]) {
  800. if (cacheSection[j]["ID"] == updateArr[i]["ID"]) {
  801. cacheSection[j] = updateArr[i];
  802. }
  803. } else {
  804. if (cacheSection[j][me.setting.header[0].dataCode] == updateArr[i][me.setting.header[0].dataCode]) {
  805. cacheSection[j] = updateArr[i];
  806. }
  807. }
  808. }
  809. }
  810. },
  811. sortGlj: function() {
  812. var me = this;
  813. me.gljList.sort(function(a, b){
  814. var rst = 0;
  815. if (a.code > b.code) rst = 1
  816. else if (a.code < b.code) rst = -1;
  817. return rst;
  818. });
  819. }
  820. }
  821. var gljTypeTreeOprObj = {
  822. onClick: function(event,treeId,treeNode) {
  823. var me = repositoryGljObj,
  824. gljTypeId = treeNode.ID;
  825. me.gljCurTypeId = treeNode.ID;
  826. if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
  827. me.currentOprParent = 1;
  828. me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + treeNode.ID]);
  829. // sheetCommonObj.lockCodeCells(me.workBook.getSheet(0), me.currentCache.length);
  830. me.workBook.getSheet(0).setRowCount(me.currentCache.length);
  831. } else {
  832. me.currentOprParent = 0;
  833. me.currentCache = me.getCache();
  834. me.workBook.getSheet(0).setRowCount(me.currentCache.length);
  835. /*sheetCommonObj.unLockAllCells(me.workBook.getSheet(0));
  836. sheetCommonObj.reLockSomeCodes(me.workBook.getSheet(0), 0, me.currentCache.length);*/
  837. }
  838. me.showGljItems(me.gljList, gljTypeId);
  839. me.workBook.getSheet(0).setRowCount(me.currentCache.length);
  840. },
  841. beforeRename: function(treeId, treeNode, newName, isCancel) {
  842. if (newName.length == 0) {
  843. return false;
  844. }
  845. return true;
  846. },
  847. onRename : function(e, treeId, treeNode, isCancel) {
  848. var nodes = [];
  849. nodes.push(treeNode);
  850. gljTypeTreeOprObj.updateNodes(nodes);
  851. },
  852. onBeforeRemove: function(treeId, treeNode){
  853. let me = this;
  854. if (treeNode.ParentID == -1 && treeNode.isFirstNode) {
  855. alert("不允许删除全部!");
  856. return false;
  857. }
  858. if (!confirm("您确定要删除此节点及所有子节点的数据?删除后不可恢复!")) {
  859. return false;
  860. }
  861. var nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1;
  862. if (preNode) {
  863. preNodeId = preNode.ID;
  864. }
  865. private_fetchAllSubItems = function(pItem){
  866. nodeIds.push(pItem.ID);
  867. if (pItem.items && pItem.items.length > 0) {
  868. for (var i = 0; i < pItem.items.length; i++) {
  869. private_fetchAllSubItems(pItem.items[i]);
  870. }
  871. }
  872. };
  873. nodeIds.push(treeNode.ID);
  874. for (var i = 0; i < treeNode.items.length; i++) {
  875. private_fetchAllSubItems(treeNode.items[i]);
  876. }
  877. $.ajax({
  878. type:"POST",
  879. url:"api/deleteGljNodes",
  880. data:{"repId": pageOprObj.rationLibId, "lastOpr": userAccount, "nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
  881. dataType:"json",
  882. cache:false,
  883. timeout:5000,
  884. success:function(result,textStatus,status){
  885. var pNode = treeNode.getParentNode();
  886. if (pNode && pNode.items && pNode.items.length == 1) {
  887. pNode.isParent = false;
  888. }
  889. },
  890. error:function(){
  891. }
  892. });
  893. return true;
  894. },
  895. onRemove: function(e, treeId, treeNode){
  896. var me = repositoryGljObj, pNode = me.treeObj.getNodeByTId(treeNode.parentTId);
  897. if (pNode && pNode.items && pNode.items.length == 0) {
  898. pNode.isParent = false;
  899. me.treeObj.refresh();
  900. }
  901. },
  902. updateNodes: function(nodes){
  903. if (nodes && nodes.length > 0) {
  904. var reqData = []
  905. for (var i = 0; i < nodes.length; i++) {
  906. var node = {};
  907. node.repositoryId = nodes[i].repositoryId;
  908. node.ID = nodes[i].ID;
  909. node.ParentID = nodes[i].ParentID;
  910. node.NextSiblingID = nodes[i].NextSiblingID;
  911. node.Name = nodes[i].Name;
  912. if (nodes[i].__v != null) node.__v = nodes[i].__v + 1
  913. else node.__v = 0;
  914. reqData.push(node);
  915. }
  916. $.ajax({
  917. type:"POST",
  918. url:"api/updateGljNodes",
  919. data:{"repId": pageOprObj.rationLibId, "lastOpr": userAccount, "nodes": JSON.stringify(reqData)},
  920. dataType:"json",
  921. cache:false,
  922. timeout:5000,
  923. success:function(result,textStatus,status){
  924. console.log(status + ' : ' + result);
  925. },
  926. error:function(){
  927. }
  928. })
  929. }
  930. },
  931. addRootNode: function() {
  932. var me = repositoryGljObj, rawNode = {ParentID: -1, NextSiblingID: -1, Name: "所有"}, lastNodeId = -1;
  933. if (me.treeObj) {
  934. var rootNodes = me.treeObj.getNodes();
  935. if (rootNodes.length == 0) {
  936. gljTypeTreeOprObj.addNewNode(rawNode, lastNodeId, function(err, rst){
  937. if (!(err)) {
  938. var newNodes = [], isSilent = false;
  939. newNodes.push({ repositoryId: rst.data.repositoryId, ID: rst.data.ID, ParentID: rst.data.ParentID, NextSiblingID:-1, Name:"所有",isParent:false, items:[]});
  940. me.treeObj.addNodes(null, -1, newNodes, isSilent);
  941. }
  942. });
  943. }
  944. }
  945. },
  946. addNewNode : function(rawNode, lastNodeId, callback){
  947. $.ajax({
  948. type:"POST",
  949. url:"api/createNewGljTypeNode",
  950. data:{"lastOpr": userAccount, "repositoryId": repositoryGljObj.currentRepositoryId,"lastNodeId": lastNodeId, "rawNodeData": JSON.stringify(rawNode)},
  951. dataType:"json",
  952. cache:false,
  953. timeout:1000,
  954. success: function(result,textStatus,status){
  955. callback(false, result);
  956. },
  957. error:function(err){
  958. callback(err);
  959. }
  960. })
  961. },
  962. addHoverDom: function(treeId, treeNode) {
  963. if(typeof treeNode.doing !== 'undefined' && treeNode.doing){
  964. return false;
  965. }
  966. hoverOpr();
  967. function hoverOpr(){
  968. //console.log(treeNode);
  969. var me = repositoryGljObj, sObj = $("#" + treeNode.tId + "_span");
  970. if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
  971. var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
  972. sObj.after(addStr);
  973. var btn = $("#addBtn_"+treeNode.tId);
  974. if (btn) btn.bind("click", function(){
  975. treeNode.doing = true;
  976. var rawNode = {ParentID: treeNode.ID, NextSiblingID: -1, Name: "新增子节点"}, lastNodeId = -1;
  977. if (treeNode.items.length > 0) {
  978. lastNodeId = treeNode.items[treeNode.items.length - 1].ID;
  979. }
  980. gljTypeTreeOprObj.addNewNode(rawNode, lastNodeId, function(err, rst){
  981. if (!(err)) {
  982. var newNodes = [], isSilent = false;
  983. if(treeNode.items.length > 0){
  984. treeNode.items[treeNode.items.length - 1].NextSiblingID = rst.data.ID;
  985. }
  986. newNodes.push({ repositoryId: rst.data.repositoryId, ID: rst.data.ID, ParentID: rst.data.ParentID, NextSiblingID:-1, Name:"新增子节点",isParent:false, items:[]});
  987. treeNode.isParent = true;
  988. if (me.treeObj) {
  989. me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
  990. } else {
  991. me.treeObj = $.fn.zTree.init($("#rationChapterTree"), gljSetting, newNodes);
  992. }
  993. treeNode.doing = false;
  994. hoverOpr();
  995. }
  996. });
  997. });
  998. }
  999. },
  1000. removeHoverDom: function(treeId, treeNode) {
  1001. $("#addBtn_"+treeNode.tId).unbind().remove();
  1002. }
  1003. }