repository_glj.js 43 KB

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