repository_glj.js 41 KB

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