repository_glj.js 44 KB

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