dbController.js 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130
  1. /**
  2. * Created by vian on 2017/4/12.
  3. */
  4. var dbController = {
  5. insert: function(controller){
  6. if(controller.tree.items.length === 0){
  7. controller.tree.maxNodeID(0);
  8. controller.insert();
  9. controller.tree.selected.jobs = new Array();
  10. controller.tree.selected.items = new Array();
  11. billsAjax.createBills(billsLibId, controller.tree.selected.getID(), -1 , -1);
  12. }
  13. else {
  14. var node = controller.tree.selected;
  15. if(node){
  16. var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID();
  17. controller.insert();
  18. controller.tree.selected.jobs = new Array();
  19. controller.tree.selected.items = new Array();
  20. billsAjax.createBills(billsLibId, node.getNextSiblingID(), createpid, createnid, function(){
  21. billsAjax.updatePNId(billsLibId, [{ID: updateId, NextSiblingID: node.getNextSiblingID()}]);
  22. rechargeController.createRecharge(controller.tree.selected);
  23. });
  24. }
  25. else {
  26. var updateNode = controller.tree.roots[controller.tree.roots.length - 1];
  27. var updateId = updateNode.getID();
  28. controller.insert();
  29. controller.tree.selected.jobs = new Array();
  30. controller.tree.selected.items = new Array();
  31. billsAjax.createBills(billsLibId, updateNode.getNextSiblingID(), -1, -1, function(){
  32. billsAjax.updatePNId(billsLibId, [{ID: updateId, NextSiblingID: updateNode.getNextSiblingID()}]);
  33. rechargeController.createRecharge(controller.tree.selected);
  34. });
  35. }
  36. }
  37. },
  38. delete: function(controller, totalJobs, totalItems){
  39. var node = controller.tree.selected;
  40. var deleteIds = [];
  41. var getDeleteIds = function(node){
  42. if(node){
  43. deleteIds.push(node.getID());
  44. var length = node.children.length;
  45. if(length > 0){
  46. for(var i=0; i<length; i++){
  47. getDeleteIds(node.children[i]);
  48. }
  49. }
  50. }
  51. };
  52. getDeleteIds(node);
  53. billsAjax.deleteBills(billsLibId, deleteIds, function(){
  54. if(node.preSibling){
  55. billsAjax.updatePNId(billsLibId, [{ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()}]);
  56. }
  57. });
  58. //controller.delete();
  59. tools.delteSheets(controller, totalJobs, totalItems, jobsSpread.getActiveSheet(), itemsSpread.getActiveSheet());
  60. },
  61. upLevel: function(controller){
  62. var node = controller.tree.selected;
  63. var ids = [];
  64. var updateData = [];
  65. var getNextSibling = function(node){
  66. if(node.nextSibling){
  67. ids.push(node.getNextSiblingID());
  68. getNextSibling(node.nextSibling);
  69. }
  70. }
  71. //node
  72. if(node){
  73. if(node.parent){
  74. var updateA = {
  75. ID: node.getID(),
  76. ParentID: node.parent.getParentID(),
  77. NextSiblingID: node.parent.getNextSiblingID()
  78. };
  79. updateData.push(updateA);
  80. //parent
  81. var updateB = {
  82. ID: node.getParentID(),
  83. NextSiblingID: node.getID()
  84. }
  85. updateData.push(updateB);
  86. if(node.nextSibling){
  87. getNextSibling(node);
  88. var updateC = {
  89. ID: ids,
  90. ParentID: node.getID()
  91. }
  92. updateData.push(updateC);
  93. }
  94. if(node.preSibling){
  95. var updateD = {
  96. ID: node.preSibling.getID(),
  97. NextSibingID: -1
  98. }
  99. updateData.push(updateD);
  100. }
  101. billsAjax.updatePNId(billsLibId, updateData);
  102. controller.upLevel();
  103. rechargeController.createRecharge(controller.tree.selected);
  104. }
  105. }
  106. },
  107. downLevel: function(controller){
  108. var node = controller.tree.selected;
  109. var updateData = [];
  110. if(node){
  111. if(node.preSibling){
  112. var updateA = {
  113. ID: node.preSibling.getID(),
  114. NextSiblingID: node.getNextSiblingID()
  115. };
  116. var updateB = {
  117. ID: node.getID(),
  118. ParentID: node.preSibling.getID(),
  119. NextSiblingID: -1
  120. };
  121. updateData.push(updateA);
  122. updateData.push(updateB);
  123. if(node.preSibling.children.length > 0){
  124. var updateC = {
  125. ID: node.preSibling.children[node.preSibling.children.length -1].getID(),
  126. NextSiblingID: node.getID()
  127. }
  128. updateData.push(updateC);
  129. }
  130. billsAjax.updatePNId(billsLibId, updateData);
  131. controller.downLevel();
  132. rechargeController.createRecharge(controller.tree.selected);
  133. }
  134. }
  135. },
  136. upMove: function(controller){
  137. var node = controller.tree.selected;
  138. var updateData = [];
  139. if(node){
  140. if(node.preSibling){
  141. var updateA = {
  142. ID: node.preSibling.getID(),
  143. NextSiblingID: node.getNextSiblingID()
  144. };
  145. var updateB = {
  146. ID: node.getID(),
  147. NextSiblingID: node.preSibling.getID()
  148. };
  149. updateData.push(updateA);
  150. updateData.push(updateB);
  151. if(node.preSibling.preSibling){
  152. var updateC = {
  153. ID: node.preSibling.preSibling.getID(),
  154. NextSiblingID: node.getID()
  155. }
  156. updateData.push(updateC);
  157. }
  158. billsAjax.updatePNId(billsLibId, updateData);
  159. controller.upMove();
  160. }
  161. }
  162. },
  163. downMove: function(controller){
  164. var node = controller.tree.selected;
  165. var updateData = [];
  166. if(node){
  167. if(node.nextSibling){
  168. var updateA = {
  169. ID: node.getNextSiblingID(),
  170. NextSiblingID: node.getID()
  171. };
  172. var updateB = {
  173. ID: node.getID(),
  174. NextSiblingID: node.nextSibling.getNextSiblingID()
  175. };
  176. updateData.push(updateA);
  177. updateData.push(updateB);
  178. if(node.preSibling){
  179. var updateC = {
  180. ID: node.preSibling.getID(),
  181. NextSiblingID: node.getNextSiblingID()
  182. };
  183. updateData.push(updateC);
  184. }
  185. billsAjax.updatePNId(billsLibId, updateData);
  186. controller.downMove();
  187. }
  188. }
  189. },
  190. editData: function(controller){
  191. controller.sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  192. var node = controller.tree.selected, updateId, field;
  193. if(node){
  194. updateId = node.getID();
  195. billsLibSetting.cols.forEach(function(col, idx){
  196. if(args.col === idx){
  197. field = col.data.field;
  198. node.data[field] = args.editingText;
  199. }
  200. });
  201. billsAjax.updateBills(billsLibId, updateId, field, args.editingText);
  202. }
  203. else {
  204. args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  205. }
  206. });
  207. }
  208. };
  209. var createObj = {
  210. newJob: function(data){
  211. var Job = function(data){
  212. this.data = data;
  213. //count = 0则没有被引用了
  214. this.count = 0;
  215. };
  216. return new Job(data);
  217. },
  218. newJobs: function(){
  219. var TotalJobs = function(){
  220. this.jobs = {};
  221. this.jobsArr = [];
  222. this.prefix = '_id';
  223. };
  224. TotalJobs.prototype.findJob = function(id){
  225. return this.jobs[this.prefix + id] ? this.jobs[this.prefix + id] : null;
  226. }
  227. TotalJobs.prototype.loadJobs = function (nodes, datas){
  228. var me = this;
  229. datas.forEach(function(jobData){
  230. var job = createObj.newJob(jobData);
  231. me.jobs[me.prefix + jobData.id] = job;
  232. me.jobsArr.push(job);
  233. });
  234. if(nodes){
  235. nodes.forEach(function(node){
  236. node.jobs = new Array();
  237. node.data.jobs.forEach(function(jobId){
  238. if(me.jobs[me.prefix + jobId]){
  239. node.jobs.push(me.jobs[me.prefix + jobId]);
  240. me.jobs[me.prefix + jobId].count ++;
  241. }
  242. else {
  243. node.data.jobs.splice(node.data.jobs.indexOf(jobId), 1);
  244. }
  245. });
  246. });
  247. }
  248. };
  249. TotalJobs.prototype.getUpdateIds = function(nodes, repeatId){
  250. var ids = [];
  251. nodes.forEach(function(node){
  252. node.jobs.forEach(function(job){
  253. if(job.data.id === repeatId){
  254. ids.push(node.getID());
  255. }
  256. });
  257. });
  258. return ids;
  259. };
  260. return new TotalJobs();
  261. },
  262. newItem: function(data){
  263. var Item = function(data){
  264. this.data = data;
  265. this.count = 0;
  266. };
  267. return new Item(data);
  268. },
  269. newItems: function(){
  270. var TotalItems = function(){
  271. this.items = {};
  272. this.itemsArr = [];
  273. this.prefix = '_id';
  274. };
  275. TotalItems.prototype.findItem = function(id){
  276. return this.items[this.prefix + id] ? this.items[this.prefix + id] : null;
  277. }
  278. TotalItems.prototype.loadItems = function (nodes, datas){
  279. var me = this;
  280. datas.forEach(function(itemData){
  281. var item = createObj.newItem(itemData);
  282. me.items[me.prefix + itemData.id] = item;
  283. me.itemsArr.push(item);
  284. });
  285. if(nodes){
  286. nodes.forEach(function(node){
  287. node.items = new Array();
  288. node.data.items.forEach(function(itemID){
  289. if(me.items[me.prefix + itemID]){
  290. node.items.push(me.items[me.prefix + itemID]);
  291. me.items[me.prefix + itemID].count ++;
  292. }
  293. else {
  294. node.data.items.splice(node.data.items.indexOf(itemID), 1);
  295. }
  296. });
  297. });
  298. }
  299. };
  300. TotalItems.prototype.getUpdateIds = function(nodes, repeatId){
  301. var ids = [];
  302. nodes.forEach(function(node){
  303. node.items.forEach(function(item){
  304. if(item.data.id === repeatId){
  305. ids.push(node.getID());
  306. }
  307. });
  308. });
  309. return ids;
  310. };
  311. return new TotalItems();
  312. }
  313. };
  314. var tools = {
  315. isExist: function (totalArr, field, newData, orgData){
  316. var isExist = false;
  317. if(totalArr.length > 0){
  318. totalArr.forEach(function(item){
  319. if(item.data[field] == newData && newData !== orgData){
  320. isExist = true;
  321. }
  322. });
  323. }
  324. return isExist;
  325. },
  326. isRepeat: function(arr, field, newData, ref){
  327. var isRepeat = false;
  328. if(arr){
  329. arr.forEach(function(item){
  330. if(ref === 'reference' && item.data[field] == newData){
  331. isRepeat = true;
  332. }
  333. else if(ref === 'document' && item[field] === newData){
  334. isRepeat = true;
  335. }
  336. });
  337. }
  338. return isRepeat;
  339. },
  340. addAttr: function(attr){
  341. if(!attr){
  342. attr = new Array();
  343. }
  344. },
  345. reSetCell: function(sheet, rowIdx, colIdx, value, id){
  346. if(value && colIdx){
  347. sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value);
  348. }
  349. sheet.setTag(rowIdx, 0, id);
  350. sheet.setTag(rowIdx, 1, id);
  351. },
  352. getIndex: function(arr, id){
  353. var index;
  354. arr.forEach(function(item){
  355. if(item.data.id === id){
  356. index = arr.indexOf(item);
  357. }
  358. });
  359. return index;
  360. },
  361. delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){
  362. var delJobs = controller.tree.selected.jobs;
  363. var delItems = controller.tree.selected.items;
  364. var delJobsIds = [];
  365. var delItemsIds = [];
  366. if(delJobs.length > 0){
  367. delJobs.forEach(function(job){
  368. job.count --;
  369. if(job.count <=0){
  370. totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(job), 1);
  371. delJobsIds.push(job.data.id)
  372. }
  373. });
  374. jobsAjax.deleteJobContent(delJobsIds);
  375. tools.clearData(jobsSheet);
  376. tools.reshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, true);
  377. }
  378. if(delItems.length > 0){
  379. delItems.forEach(function(item){
  380. item.count --;
  381. if(item.count <=0){
  382. totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(item), 1);
  383. delItemsIds.push(item.data.id)
  384. }
  385. });
  386. itemsAjax.deleteItemCharacter(delItemsIds);
  387. tools.clearData(itemsSheet);
  388. tools.reshowData(itemsSheet, controller.tree.selected.items, itemsSetting, true);
  389. }
  390. controller.delete();
  391. },
  392. deleteELes: function (arr, delIds, callback){
  393. var ids = [];
  394. delIds.forEach(function(delId){
  395. arr.forEach(function(ele){
  396. if(ele.data.id === delId){
  397. arr.splice(arr.indexOf(ele), 1);
  398. ele.count--;
  399. if(ele.count <= 0){
  400. ids.push(ele.data.id);
  401. }
  402. }
  403. });
  404. });
  405. if(callback){
  406. callback(ids);
  407. }
  408. },
  409. resort: function(arr, attr, isValue){
  410. //var arr = node.jobs;
  411. function compare(attr){
  412. return function (a, b){
  413. var valA, valB;
  414. if(isValue){
  415. valA = a[attr];
  416. valB = a[attr];
  417. }
  418. else {
  419. valA = a.data[attr];
  420. valB = b.data[attr];
  421. }
  422. return valA - valB;
  423. }
  424. }
  425. arr.sort(compare(attr));
  426. },
  427. reshowData: function(sheet, arr, setting, isResort){
  428. tools.clearData(sheet);
  429. if(isResort){
  430. tools.resort(arr, 'code', false);
  431. }
  432. if(arr.length > 0){
  433. var length = arr.length;
  434. for(var i=0; i<length; i++){
  435. setting.cols.forEach(function(col, colIdx){
  436. sheet.setTag(i, colIdx, arr[i].data.id);
  437. if(arr[i].data[col.data.field]){
  438. sheet.getCell(i, colIdx).value(arr[i].data[col.data.field]);
  439. }
  440. else {
  441. sheet.getCell(i, colIdx).value('');
  442. }
  443. });
  444. }
  445. }
  446. },
  447. reshowValue: function(sheet, arr, setting, isResort){
  448. tools.clearData(sheet);
  449. if(isResort){
  450. tools.resort(arr, 'code', true);
  451. }
  452. if(arr.length > 0){
  453. var length = arr.length;
  454. for(var i=0; i<length; i++){
  455. setting.cols.forEach(function(col, colIdx){
  456. sheet.setTag(i, colIdx, arr[i].code);
  457. if(arr[i][col.data.field]){
  458. sheet.getCell(i, colIdx).value(arr[i][col.data.field]);
  459. }
  460. else {
  461. sheet.getCell(i, colIdx).value('');
  462. }
  463. });
  464. }
  465. }
  466. },
  467. clearData: function(sheet){
  468. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
  469. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.tag);
  470. },
  471. getRoot: function(node){
  472. return node.parent ? tools.getRoot(node.parent) : node;
  473. },
  474. getBillsIds: function(callback){
  475. billsAjax.getBills(billsLibId, function(datas){
  476. var ids = [];
  477. datas.forEach(function(data){
  478. ids.push(data.ID);
  479. });
  480. if(callback){
  481. callback(ids);
  482. }
  483. });
  484. },
  485. delIds: function(sheet){
  486. var ids = [];
  487. var sels = sheet.getSelections();
  488. sels.forEach(function(sel){
  489. var orgRow = sel.row, rowCount = sel.rowCount, colCount = sel.colCount;
  490. var orgCol = sel.col === -1 ? 0 : sel.col;
  491. var maxRow = orgRow + rowCount - 1;
  492. for(var i=orgRow; i<= maxRow; i++){
  493. if(sheet.getTag(i, orgCol)){
  494. ids.push(sheet.getTag(i, orgCol));
  495. }
  496. }
  497. });
  498. return ids;
  499. },
  500. redirect: function(billsLibId, newHref){
  501. mainAjax.getABillsLib(billsLibId, function(result){
  502. if(result.length === 0){
  503. window.location.href = newHref;
  504. }
  505. });
  506. }
  507. }
  508. var jobsController = {
  509. editData: function(controller, sheet, totalJobs, setting){
  510. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  511. orgJobData = sheet.getCell(args.row, args.col).value();
  512. });
  513. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  514. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  515. setting.cols.forEach(function (col, idx) {
  516. if (args.col === idx) {
  517. field = col.data.field;
  518. }
  519. });
  520. if (controller.tree.selected) {
  521. var isExist = tools.isExist(totalJobs.jobsArr, field, newData, orgJobData);
  522. var isRepeat = tools.isRepeat(controller.tree.selected.jobs, field ,newData, 'reference');
  523. //create
  524. if(!id && newData && !isRepeat){
  525. if(isExist){
  526. jobsController.createExist(sheet, controller, totalJobs, field, newData, args, setting);
  527. }
  528. else {
  529. jobsController.createNew(sheet, controller, totalJobs, field, newData, args, setting);
  530. }
  531. }
  532. //update
  533. else if(id && newData !== orgJobData && !isRepeat){
  534. jobsController.update(sheet, controller, totalJobs, field, newData, id, isExist, args, setting);
  535. }
  536. //处理重复
  537. if(isRepeat){
  538. if(id && newData){
  539. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgJobData);
  540. }
  541. else {
  542. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  543. }
  544. }
  545. }
  546. else {
  547. sheet.getCell(args.row, args.col).value('');
  548. }
  549. });
  550. },
  551. createNew: function(sheet, controller, totalJobs, field, newData, args, setting){
  552. if(field === 'content'){
  553. maxJobsNumber++;
  554. jobsAjax.createJobContent(billsLibId, field, newData, maxJobsNumber, function(id){
  555. var newJobData, newJob;
  556. newJobData = {id: id, content: newData, code: maxJobsNumber};
  557. newJob = createObj.newJob(newJobData);
  558. newJob.count = 1;
  559. totalJobs.jobs[totalJobs.prefix + id] = newJob;
  560. totalJobs.jobsArr.push(newJob);
  561. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', id);
  562. controller.tree.selected.jobs.push(newJob);
  563. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  564. });
  565. }
  566. else {
  567. sheet.getCell(args.row, args.col).value('');
  568. }
  569. },
  570. createExist: function(sheet, controller, totalJobs, field, newData, args, setting){
  571. totalJobs.jobsArr.forEach(function(job){
  572. if(field === 'content'&& newData === job.data.content){
  573. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data.id);
  574. job.count++;
  575. controller.tree.selected.jobs.push(job);
  576. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  577. }
  578. else if(field == 'code' && newData == job.data.code){
  579. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data.id);
  580. job.count++;
  581. controller.tree.selected.jobs.push(job);
  582. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  583. }
  584. });
  585. },
  586. update: function(sheet, controller, totalJobs, field, newData, id, isExist, args, setting){
  587. if(isExist){
  588. totalJobs.jobsArr.forEach(function(job){
  589. if(field == 'code' && job.data[field] == newData){
  590. var index = tools.getIndex(controller.tree.selected.jobs, id);
  591. job.count++;
  592. controller.tree.selected.jobs.splice(index, 1);
  593. controller.tree.selected.jobs.splice(index, 0, job);
  594. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  595. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  596. }
  597. if(field === 'content' && job.data[field] === newData){
  598. var index = tools.getIndex(controller.tree.selected.jobs, id);
  599. job.count++;
  600. controller.tree.selected.jobs.splice(index, 1);
  601. controller.tree.selected.jobs.splice(index, 0, job);
  602. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  603. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  604. }
  605. });
  606. }
  607. else{
  608. if(field === 'content'){
  609. maxJobsNumber++;
  610. jobsAjax.createJobContent(billsLibId, field, newData, maxJobsNumber, function(newId){
  611. var newJobData, newJob;
  612. newJobData = {id: newId, content: newData, code: maxJobsNumber};
  613. newJob = createObj.newJob(newJobData);
  614. newJob.count = 1;
  615. totalJobs.jobs[totalJobs.prefix + newId] = newJob;
  616. totalJobs.jobsArr.push(newJob);
  617. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newId, 'update', 'jobs');
  618. var index = tools.getIndex(controller.tree.selected.jobs, id);
  619. controller.tree.selected.jobs.splice(index, 1);
  620. controller.tree.selected.jobs.splice(index, 0, newJob);
  621. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  622. });
  623. }
  624. else {
  625. //todo: 提示窗口
  626. if(typeof newData === 'number'){
  627. sheet.getCell(args.row, args.col).value(orgJobData);
  628. }
  629. else {
  630. //编号只能是数字
  631. }
  632. }
  633. }
  634. },
  635. };
  636. var itemsController = {
  637. editData: function(controller, sheet, totalItems, setting){
  638. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  639. orgItemData = sheet.getCell(args.row, args.col).value();
  640. });
  641. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  642. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  643. setting.cols.forEach(function (col, idx) {
  644. if (args.col === idx) {
  645. field = col.data.field;
  646. }
  647. });
  648. if (controller.tree.selected) {
  649. var isExist = tools.isExist(totalItems.itemsArr, field, newData, orgItemData);
  650. var isRepeat = tools.isRepeat(controller.tree.selected.items, field ,newData, 'reference');
  651. //create
  652. if(!id && newData && !isRepeat){
  653. if(isExist){
  654. itemsController.createExist(sheet, controller, totalItems, field, newData, args, setting);
  655. }
  656. else {
  657. itemsController.createNew(sheet, controller, totalItems, field, newData, args, setting);
  658. }
  659. }
  660. //update
  661. else if(id && newData !== orgItemData && !isRepeat){
  662. itemsController.update(sheet, controller, totalItems, field, newData, id, isExist, args, setting);
  663. }
  664. //处理重复
  665. if(isRepeat){
  666. //todo:redirect focus
  667. if(id && newData){
  668. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgItemData);
  669. }
  670. else {
  671. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  672. }
  673. }
  674. }
  675. else {
  676. sheet.getCell(args.row, args.col).value('');
  677. }
  678. });
  679. },
  680. createNew: function(sheet, controller, totalItems, field, newData, args, setting){
  681. if(field === 'content'){
  682. maxItemsNumber++;
  683. itemsAjax.createItemCharacter(billsLibId, field, newData, maxItemsNumber, function(id){
  684. var newItemData, newItem;
  685. newItemData = {id: id, content: newData, code: maxItemsNumber};
  686. newItem = createObj.newItem(newItemData);
  687. newItem.count = 1;
  688. totalItems.items[totalItems.prefix + id] = newItem;
  689. totalItems.itemsArr.push(newItem);
  690. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', id);
  691. controller.tree.selected.items.push(newItem);
  692. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  693. });
  694. }
  695. else {
  696. if(typeof newData === 'number'){
  697. sheet.getCell(args.row, args.col).value('');
  698. }
  699. else {
  700. //编号只能为数字
  701. }
  702. }
  703. },
  704. createExist: function(sheet, controller, totalItems, field, newData, args, setting){
  705. totalItems.itemsArr.forEach(function(item){
  706. //todo:整合代码
  707. if(field === 'content'&& newData === item.data.content){
  708. //isExist = true;
  709. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data.id);
  710. //整合
  711. //tools.addAttr(controller.tree.selected.items);
  712. item.count++;
  713. controller.tree.selected.items.push(item);
  714. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  715. }
  716. else if(field == 'code' && newData == item.data.code){
  717. //isExist = true;
  718. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data.id);
  719. // tools.addAttr(controller.tree.selected.items);
  720. item.count++;
  721. controller.tree.selected.items.push(item);
  722. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  723. }
  724. });
  725. },
  726. update: function(sheet, controller, totalItems, field, newData, id, isExist, args, setting){
  727. if(isExist){
  728. totalItems.itemsArr.forEach(function(item){
  729. if(field == 'code' && item.data[field] == newData){
  730. var index = tools.getIndex(controller.tree.selected.items, id);
  731. item.count++;
  732. controller.tree.selected.items.splice(index, 1);
  733. controller.tree.selected.items.splice(index, 0, item);
  734. //var newItemData = {id: item.data.id, code: newData, content: item.data.content}
  735. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  736. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  737. }
  738. if(field === 'content' && item.data[field] === newData){
  739. var index = tools.getIndex(controller.tree.selected.items, id);
  740. item.count++;
  741. controller.tree.selected.items.splice(index, 1);
  742. controller.tree.selected.items.splice(index, 0, item);
  743. //var newItemData = {id: item.data.id, code: item.data.code, content: newData}
  744. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  745. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  746. }
  747. });
  748. }
  749. else{
  750. if(field === 'content'){
  751. maxItemsNumber++;
  752. itemsAjax.createItemCharacter(billsLibId, field, newData, maxItemsNumber, function(newId){
  753. var newItemData, newItem;
  754. newItemData = {id: newId, content: newData, code: maxItemsNumber};
  755. newItem = createObj.newItem(newItemData);
  756. newItem.count = 1;
  757. totalItems.items[totalItems.prefix + newId] = newItem;
  758. totalItems.itemsArr.push(newItem);
  759. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newId, 'update', 'items');
  760. // tools.addAttr(controller.tree.selected.items);
  761. var index = tools.getIndex(controller.tree.selected.items, id);
  762. controller.tree.selected.items.splice(index, 1);
  763. controller.tree.selected.items.splice(index, 0, newItem);
  764. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  765. });
  766. }
  767. else {
  768. if(typeof newData === 'number'){
  769. sheet.getCell(args.row, args.col).value(orgItemData);
  770. }
  771. else {
  772. //编号只能为数字
  773. }
  774. }
  775. }
  776. },
  777. };
  778. var valueController = {
  779. editData: function(totalItems, sheet, setting){
  780. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  781. orgValue = sheet.getValue(args.row, args.col);
  782. });
  783. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  784. var newValue = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  785. setting.cols.forEach(function(col, colIdx){
  786. if(args.col === colIdx){
  787. field = col.data.field;
  788. }
  789. });
  790. if(selectedId){
  791. isRepeat = tools.isRepeat(valueController.getValues(totalItems, selectedId), field, newValue, 'document');
  792. if(!tagId && !isRepeat && newValue){//create
  793. valueController.createValue(sheet, totalItems, selectedId, field, newValue);
  794. }
  795. else if(tagId && !isRepeat && newValue !== orgValue){//update
  796. valueController.updateValue(totalItems, tagId, newValue, field);
  797. }
  798. if(isRepeat){
  799. if(tagId && newValue){
  800. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgValue);
  801. }
  802. else {
  803. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  804. }
  805. }
  806. }
  807. });
  808. },
  809. createValue: function(sheet, totalItems, id, field, newValue){
  810. var newData;
  811. if(field === 'value'){
  812. var newCode = valueController.getCode(totalItems, id);
  813. newData = {code: newCode, value: newValue};
  814. tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode);
  815. }
  816. else {
  817. if(typeof newValue === 'number'){
  818. newData = {code: newValue, value: ''};
  819. tools.reSetCell(sheet, sheet.getActiveRowIndex(), null, null, newValue);
  820. }
  821. else {
  822. //编号只能为数字!
  823. }
  824. }
  825. totalItems.findItem(id).data.itemValue.push(newData);
  826. itemsAjax.updateValue(id, newData, null, 'create');
  827. },
  828. updateValue: function(totalItems, tagId, newData, field){
  829. var updateData = {code: tagId, newData: newData, field: field};
  830. var itemVals = totalItems.findItem(selectedId).data.itemValue;
  831. if(field === 'value'){
  832. var updateEle = {code: tagId, value: newData};
  833. if(itemVals){
  834. var index;
  835. itemVals.forEach(function(val){
  836. if(val.code === tagId){
  837. index = itemVals.indexOf(val);
  838. itemVals.splice(index, 1);
  839. }
  840. });
  841. itemVals.splice(index, 0, updateEle);
  842. }
  843. itemsAjax.updateValue(selectedId, updateData, null, 'update');
  844. }
  845. else {
  846. if(typeof newData === 'number'){
  847. if(itemVals){
  848. var updateEle;
  849. var index;
  850. itemVals.forEach(function(val){
  851. if(val.code === tagId){
  852. updateEle = {code: newData, value: val.value};
  853. index = itemVals.indexOf(val);
  854. itemVals.splice(index, 1);
  855. }
  856. });
  857. itemVals.splice(index, 0, updateEle);
  858. }
  859. itemsAjax.updateValue(selectedId, updateData, null, 'update');
  860. }
  861. else {
  862. //编号只能为数字!
  863. }
  864. }
  865. },
  866. getValues: function(totalItems, id){
  867. return totalItems.findItem(id).data.itemValue;
  868. },
  869. getTopItem: function(totalItems){
  870. tools.resort(totalItems.itemsArr, 'code', false);
  871. return totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0] : null
  872. },
  873. getCode: function(totalItems, id){
  874. var valArr = totalItems.findItem(id).data.itemValue;
  875. tools.resort(valArr, 'code', true);
  876. return valArr.length > 0 ? valArr[valArr.length - 1].code + 1 : 1;
  877. },
  878. isRepeat: function(arr, newValue){
  879. var isRepeat = false;
  880. arr.forEach(function(itemValue){
  881. if(itemValue.value === newValue){
  882. isRepeat = true;
  883. }
  884. });
  885. return isRepeat;
  886. }
  887. };
  888. var totalJobsController = {
  889. eiditData: function(totalJobs, sheet, setting){
  890. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  891. orgJobData = sheet.getCell(args.row, args.col).value();
  892. });
  893. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  894. var newData = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  895. setting.cols.forEach(function(col, colIdx){
  896. if(args.col === colIdx){
  897. field = col.data.field;
  898. }
  899. });
  900. isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference');
  901. if(!tagId && !isRepeat && newData){//create
  902. totalJobsController.createJob(sheet, totalJobs, field, newData, args);
  903. }
  904. else if(tagId && !isRepeat && newData !== orgJobData){//update
  905. totalJobsController.updateJob(totalJobs, tagId, field, newData);
  906. }
  907. if(isRepeat){
  908. if(tagId && newData){
  909. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgJobData);
  910. }
  911. else {
  912. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  913. }
  914. }
  915. });
  916. },
  917. createJob: function(sheet, totalJobs, field, newData, args){
  918. if(field === 'content'){
  919. maxJobsNumber++;
  920. jobsAjax.createJobContent(billsLibId, field, newData, maxJobsNumber, function(id){
  921. var newJobData, newJob;
  922. newJobData = {id: id, content: newData, code: maxJobsNumber};
  923. newJob = createObj.newJob(newJobData);
  924. totalJobs.jobsArr.push(newJob);
  925. tools.reSetCell(sheet, args.row, 0, maxJobsNumber, id);
  926. });
  927. }
  928. else {
  929. if(typeof newData === 'number'){
  930. maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
  931. jobsAjax.createJobContent(billsLibId, field, '', newData, function(id){
  932. var newJobData, newJob;
  933. newJobData = {id: id, content: '', code: newData};
  934. newJob = createObj.newJob(newJobData);
  935. totalJobs.jobsArr.push(newJob);
  936. tools.reSetCell(sheet, args.row, 0, null, id);
  937. });
  938. }
  939. else {
  940. //编号只能为数字!
  941. }
  942. }
  943. },
  944. updateJob: function(totalJobs, id, field, newData){
  945. if(field === 'code' && typeof newData !== 'number'){
  946. //编号只能为数字
  947. }
  948. else {
  949. totalJobs.jobsArr.forEach(function(job){
  950. if(job.data[field] === newData){
  951. job.data[field] = newData;
  952. }
  953. });
  954. jobsAjax.updateJobContent(id, field, newData);
  955. }
  956. }
  957. };
  958. var totalItemsController = {
  959. eiditData: function(totalItems, sheet, setting){
  960. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  961. orgItemData = sheet.getCell(args.row, args.col).value();
  962. });
  963. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  964. var newData = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  965. setting.cols.forEach(function(col, colIdx){
  966. if(args.col === colIdx){
  967. field = col.data.field;
  968. console.log('colIdx' + colIdx);
  969. }
  970. });
  971. isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference');
  972. if(!tagId && !isRepeat && newData){//create
  973. totalItemsController.createItem(sheet, totalItems, field, newData, args);
  974. }
  975. else if(tagId && !isRepeat && newData !== orgItemData){//update
  976. totalItemsController.updateItem(totalItems, tagId, field, newData);
  977. }
  978. if(isRepeat){
  979. if(tagId && newData){
  980. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgItemData);
  981. }
  982. else {
  983. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  984. }
  985. }
  986. });
  987. },
  988. createItem: function(sheet, totalItems, field, newData, args){
  989. if(field === 'content'){
  990. maxItemsNumber++;
  991. itemsAjax.createItemCharacter(billsLibId, field, newData, maxItemsNumber, function(id){
  992. var newItemData, newItem;
  993. newItemData = {id: id, content: newData, code: maxItemsNumber};
  994. newItem = createObj.newItem(newItemData);
  995. totalItems.itemsArr.push(newItem);
  996. tools.reSetCell(sheet, args.row, 0, maxItemsNumber, id);
  997. });
  998. }
  999. else {
  1000. if(typeof newData === 'number'){
  1001. maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
  1002. itemsAjax.createItemCharacter(billsLibId, field, '', newData, function(id){
  1003. var newItemData, newItem;
  1004. newItemData = {id: id, content: '', code: newData};
  1005. newItem = createObj.newItem(newItemData);
  1006. totalItems.itemsArr.push(newItem);
  1007. tools.reSetCell(sheet, args.row, 0, null, id);
  1008. });
  1009. }
  1010. else {
  1011. //编号只能为数字
  1012. }
  1013. }
  1014. },
  1015. updateItem: function(totalItems, id, field, newData){
  1016. if(field === 'code' && typeof newData !== 'number'){
  1017. //编号只能为数字
  1018. }
  1019. else {
  1020. totalItems.itemsArr.forEach(function(item){
  1021. if(item.data[field] === newData){
  1022. item.data[field] = newData;
  1023. }
  1024. });
  1025. itemsAjax.updateItemCharacter(id, field, newData);
  1026. }
  1027. }
  1028. };
  1029. var rechargeController = {
  1030. updateRechar: function(selectedNode, newData){
  1031. if(selectedNode){
  1032. var updateIds = [];
  1033. var getupdateIds = function(node){
  1034. updateIds.push(node.getID());
  1035. node.data.recharge = newData;
  1036. if(node.children.length > 0){
  1037. node.children.forEach(function(node){
  1038. getupdateIds(node);
  1039. });
  1040. }
  1041. }
  1042. getupdateIds(tools.getRoot(selectedNode));
  1043. billsAjax.updateRecharge(billsLibId, updateIds, newData);
  1044. }
  1045. else {
  1046. $('exampleTextarea').val('');
  1047. }
  1048. },
  1049. createRecharge: function(node){
  1050. if(node){
  1051. var tempId = [];
  1052. tempId.push(node.getID());
  1053. var rootNode = tools.getRoot(node);
  1054. if(rootNode.data.recharge && rootNode !== node){
  1055. billsAjax.updateRecharge(billsLibId, tempId, rootNode.data.recharge);
  1056. node.data.recharge = rootNode.data.recharge;
  1057. $('#exampleTextarea').val(node.data.recharge);
  1058. }
  1059. else {
  1060. node.data.recharge = '';
  1061. $('#exampleTextarea').val('');
  1062. }
  1063. }
  1064. else {
  1065. $('exampleTextarea').val('');
  1066. }
  1067. }
  1068. };