repository_glj.js 42 KB

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