db_controller.js 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863
  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. console.log(`enterIsR`);
  329. if(arr){
  330. console.log(`enter ifArr`);
  331. arr.forEach(function(item){
  332. if(ref === 'reference' && item.data[field] == newData){
  333. isRepeat = true;
  334. }
  335. else if(ref === 'document' && item[field] === newData){
  336. isRepeat = true;
  337. }
  338. });
  339. }
  340. return isRepeat;
  341. },
  342. addAttr: function(attr){
  343. if(!attr){
  344. attr = new Array();
  345. }
  346. },
  347. reSetCell: function(sheet, rowIdx, colIdx, value, id){
  348. if(value && colIdx!== null){
  349. console.log(`enterResetCell`);
  350. sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value);
  351. }
  352. sheet.setTag(rowIdx, 0, id);
  353. sheet.setTag(rowIdx, 1, id);
  354. },
  355. getIndex: function(arr, id){
  356. var index;
  357. arr.forEach(function(item){
  358. if(item.data.id === id){
  359. index = arr.indexOf(item);
  360. }
  361. });
  362. return index;
  363. },
  364. getNewCode: function(totalObj, classify){
  365. let arr;
  366. if(classify === 'jobs'){
  367. arr = totalObj.jobsArr;
  368. }
  369. else {
  370. arr = totalObj.itemsArr;
  371. }
  372. tools.resort(arr, 'code', false);
  373. return arr.length > 0 ? arr[arr.length - 1].data.code : 0;
  374. },
  375. delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){
  376. var delJobs = controller.tree.selected.jobs;
  377. var delItems = controller.tree.selected.items;
  378. var delJobsIds = [];
  379. var delItemsIds = [];
  380. if(delJobs.length > 0){
  381. delJobs.forEach(function(job){
  382. job.count --;
  383. if(job.count <=0){
  384. totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(job), 1);
  385. delJobsIds.push(job.data.id)
  386. }
  387. });
  388. jobsAjax.deleteJobContent(delJobsIds);
  389. tools.clearData(jobsSheet);
  390. tools.reshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, true);
  391. }
  392. if(delItems.length > 0){
  393. delItems.forEach(function(item){
  394. item.count --;
  395. if(item.count <=0){
  396. totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(item), 1);
  397. delItemsIds.push(item.data.id)
  398. }
  399. });
  400. itemsAjax.deleteItemCharacter(delItemsIds);
  401. tools.clearData(itemsSheet);
  402. tools.reshowData(itemsSheet, controller.tree.selected.items, itemsSetting, true);
  403. }
  404. controller.delete();
  405. },
  406. deleteELes: function (arr, delIds, callback){
  407. var ids = [];
  408. delIds.forEach(function(delId){
  409. arr.forEach(function(ele){
  410. if(ele.data.id === delId){
  411. arr.splice(arr.indexOf(ele), 1);
  412. ele.count--;
  413. if(ele.count <= 0){
  414. ids.push(ele.data.id);
  415. }
  416. }
  417. });
  418. });
  419. if(callback){
  420. callback(ids);
  421. }
  422. },
  423. resort: function(arr, attr, isValue){
  424. function compare(attr){
  425. return function (a, b){
  426. var valA, valB;
  427. if(isValue){
  428. valA = a[attr];
  429. valB = a[attr];
  430. }
  431. else {
  432. valA = a.data[attr];
  433. valB = b.data[attr];
  434. }
  435. return valA - valB;
  436. }
  437. }
  438. arr.sort(compare(attr));
  439. },
  440. reshowData: function(sheet, arr, setting, isResort){
  441. let time = new Date().getTime();
  442. console.log(`enterreshowData ${time}`);
  443. tools.clearData(sheet);
  444. if(isResort){
  445. tools.resort(arr, 'code', false);
  446. }
  447. if(arr.length > 0){
  448. var length = arr.length;
  449. for(var i=0; i<length; i++){
  450. setting.cols.forEach(function(col, colIdx){
  451. sheet.setTag(i, colIdx, arr[i].data.id);
  452. if(arr[i].data[col.data.field]){
  453. sheet.getCell(i, colIdx).value(arr[i].data[col.data.field]);
  454. }
  455. else {
  456. sheet.getCell(i, colIdx).value('');
  457. }
  458. });
  459. }
  460. }
  461. },
  462. reshowValue: function(sheet, arr, setting, isResort){
  463. tools.clearData(sheet);
  464. if(isResort){
  465. tools.resort(arr, 'code', true);
  466. }
  467. if(arr.length > 0){
  468. var length = arr.length;
  469. for(var i=0; i<length; i++){
  470. setting.cols.forEach(function(col, colIdx){
  471. sheet.setTag(i, colIdx, arr[i].code);
  472. if(arr[i][col.data.field]){
  473. sheet.getCell(i, colIdx).value(arr[i][col.data.field]);
  474. }
  475. else {
  476. sheet.getCell(i, colIdx).value('');
  477. }
  478. });
  479. }
  480. }
  481. },
  482. clearData: function(sheet){
  483. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
  484. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.tag);
  485. },
  486. getRoot: function(node){
  487. return node.parent ? tools.getRoot(node.parent) : node;
  488. },
  489. getBillsIds: function(callback){
  490. billsAjax.getBills(billsLibId, function(datas){
  491. var ids = [];
  492. datas.forEach(function(data){
  493. ids.push(data.ID);
  494. });
  495. if(callback){
  496. callback(ids);
  497. }
  498. });
  499. },
  500. delIds: function(sheet){
  501. var ids = [];
  502. var sels = sheet.getSelections();
  503. sels.forEach(function(sel){
  504. var orgRow = sel.row, rowCount = sel.rowCount, colCount = sel.colCount;
  505. var orgCol = sel.col === -1 ? 0 : sel.col;
  506. var maxRow = orgRow + rowCount - 1;
  507. for(var i=orgRow; i<= maxRow; i++){
  508. if(sheet.getTag(i, orgCol)){
  509. ids.push(sheet.getTag(i, orgCol));
  510. }
  511. }
  512. });
  513. return ids;
  514. },
  515. redirect: function(billsLibId, newHref){
  516. mainAjax.getABillsLib(billsLibId, function(result){
  517. if(result.length === 0){
  518. window.location.href = newHref;
  519. }
  520. });
  521. },
  522. uniqArr: function (arr) {
  523. let newArr = [];
  524. for(let i=0; i<arr.length; i++){
  525. if(newArr.indexOf(arr[i]) === -1){
  526. newArr.push(arr[i]);
  527. }
  528. }
  529. return newArr;
  530. },
  531. getsheetDatas: function(sheet, classify){
  532. let rowCount = sheet.getRowCount();
  533. const colIdx = 1;
  534. let sheetDatas = [];
  535. if(classify === 'total'){
  536. for(let i=0; i<rowCount; i++){
  537. for(let j=0; j<= 1; j++){
  538. let data = sheet.getCell(i, j).value, id = sheet.getTag(i, j);
  539. if(data && id){
  540. let unitData ={
  541. rowIdx: i,
  542. colIdx: j,
  543. data: data,
  544. id: id
  545. };
  546. sheetDatas.push(unitData);
  547. }
  548. }
  549. }
  550. }
  551. else{
  552. for(let i=0; i<rowCount; i++){
  553. let data = sheet.getCell(i, colIdx).value(), id = sheet.getTag(i, colIdx);
  554. if(data && id){
  555. let rowData = {
  556. rowIdx: i,
  557. data: data,
  558. id: id
  559. }
  560. sheetDatas.push(rowData);
  561. }
  562. }
  563. }
  564. return sheetDatas;
  565. },
  566. encapData: function(uncrossedDatas, crossedDatas, controller, totalJobs){
  567. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  568. let updateDatas = [];
  569. let createDatas = [];
  570. let createNewData = [];
  571. let createExData = [];
  572. let updateNewData = [];
  573. let updateExData = [];
  574. let nodeId = controller.tree.selected.getID();
  575. uncrossedDatas.forEach(data => {
  576. let cnDataObj, ceDataObj, content, jobId;
  577. let isExisit = tools.isExist(totalJobs.jobsArr, 'content', data, null);
  578. let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', data, 'reference');
  579. if(isExisit && !isRepeat){
  580. totalJobs.jobsArr.forEach(job => {
  581. if(data === job.data.content){
  582. jobId = job.data.id;
  583. }
  584. });
  585. ceDataObj= {
  586. newData: data,
  587. billsLibId: billsLibId,
  588. nodeId: nodeId,
  589. jobId: jobId,
  590. type: CreateExist
  591. };
  592. createDatas.push(ceDataObj);
  593. }
  594. if(!isExisit){
  595. maxJobsNumber++;
  596. //currentCountId++;
  597. cnDataObj = {
  598. id: maxJobsNumber,
  599. billsLibId: billsLibId,
  600. nodeId: nodeId,
  601. newData: data,
  602. code: maxJobsNumber,
  603. type: CreateNew
  604. };
  605. createDatas.push(cnDataObj);
  606. }
  607. });
  608. crossedDatas.forEach(cData => {
  609. let ueObj, unObj, newJobId;
  610. let isExisit = tools.isExist(totalJobs.jobsArr, 'content', cData.newData, null);
  611. let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', cData.newData, 'reference');
  612. if(isExisit && !isRepeat){
  613. totalJobs.jobsArr.forEach(job => {
  614. if(cData.newData === job.data.content){
  615. newJobId = job.data.id;
  616. }
  617. });
  618. ueObj = {
  619. newData: cData.newData,
  620. billsLibId: billsLibId,
  621. nodeId: nodeId,
  622. newJobId: newJobId,
  623. orgJobId: cData.orgId,
  624. type: UpdateExist
  625. };
  626. updateDatas.push(ueObj);
  627. }
  628. if(!isExisit && !isRepeat){
  629. maxJobsNumber++;
  630. //currentCountId++;
  631. unObj = {
  632. newJobId: maxJobsNumber,
  633. billsLibId: billsLibId,
  634. nodeId: nodeId,
  635. newData: cData.newData,
  636. orgJobId: cData.orgId,
  637. code: maxJobsNumber,
  638. type: UpdateNew
  639. };
  640. updateDatas.push(unObj);
  641. }
  642. });
  643. let pasteDatas = {
  644. updateDatas: updateDatas,
  645. createDatas: createDatas
  646. };
  647. return pasteDatas;
  648. },
  649. encapItemsData: function(uncrossedDatas, crossedDatas, controller, totalItems){
  650. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  651. let updateDatas = [];
  652. let createDatas = [];
  653. let createNewData = [];
  654. let createExData = [];
  655. let updateNewData = [];
  656. let updateExData = [];
  657. let nodeId = controller.tree.selected.getID();
  658. uncrossedDatas.forEach(data => {
  659. let cnDataObj, ceDataObj, content,itemId;
  660. let isExisit = tools.isExist(totalItems.itemsArr, 'content', data, null);
  661. let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', data, 'reference');
  662. if(isExisit && !isRepeat){
  663. totalItems.itemsArr.forEach(item => {
  664. if(data === item.data.content){
  665. itemId = item.data.id;
  666. }
  667. });
  668. ceDataObj= {
  669. newData: data,
  670. billsLibId: billsLibId,
  671. nodeId: nodeId,
  672. itemId: itemId,
  673. type: CreateExist
  674. };
  675. createDatas.push(ceDataObj);
  676. }
  677. if(!isExisit){
  678. maxItemsNumber++;
  679. //currentCountId++;
  680. cnDataObj = {
  681. id: maxItemsNumber,
  682. billsLibId: billsLibId,
  683. nodeId: nodeId,
  684. newData: data,
  685. code: maxItemsNumber,
  686. type: CreateNew
  687. };
  688. createDatas.push(cnDataObj);
  689. }
  690. });
  691. crossedDatas.forEach(cData => {
  692. let ueObj, unObj, newItemId;
  693. let isExisit = tools.isExist(totalItems.itemsArr, 'content', cData.newData, null);
  694. let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', cData.newData, 'reference');
  695. if(isExisit && !isRepeat){
  696. totalItems.itemsArr.forEach(item => {
  697. if(cData.newData === item.data.content){
  698. newItemId = item.data.id;
  699. }
  700. });
  701. ueObj = {
  702. newData: cData.newData,
  703. billsLibId: billsLibId,
  704. nodeId: nodeId,
  705. newItemId: newItemId,
  706. orgItemId: cData.orgId,
  707. type: UpdateExist
  708. };
  709. updateDatas.push(ueObj);
  710. }
  711. if(!isExisit && !isRepeat){
  712. maxItemsNumber++;
  713. //currentCountId++;
  714. unObj = {
  715. newItemId: maxItemsNumber,
  716. billsLibId: billsLibId,
  717. nodeId: nodeId,
  718. newData: cData.newData,
  719. orgItemId: cData.orgId,
  720. code: maxItemsNumber,
  721. type: UpdateNew
  722. };
  723. updateDatas.push(unObj);
  724. }
  725. });
  726. let pasteDatas = {
  727. updateDatas: updateDatas,
  728. createDatas: createDatas
  729. };
  730. return pasteDatas;
  731. },
  732. rebuildArr: function(arr, classify){
  733. let conformDatas = [];
  734. let flag = true;
  735. for(let i=0; i< arr.length; i++){
  736. for(let j=i+1; j<arr.length; j++){
  737. if(arr[i].rowIdx === arr[j].rowIdx){
  738. flag = false;
  739. let field = arr[i].field;
  740. let conformData;
  741. if(classify === 'create'){
  742. if(field === 'code'){
  743. conformData = {
  744. billsLibId: billsLibId,
  745. code: arr[i].data,
  746. content: arr[j].data,
  747. rowIdx: arr[i].rowIdx,
  748. type: 'CreateT'
  749. }
  750. }
  751. else {
  752. conformData = {
  753. billsLIbId: billsLibId,
  754. code: arr[j].data,
  755. content: arr[i].data,
  756. rowIdx: arr[i].rowIdx,
  757. type: 'CreateT'
  758. }
  759. }
  760. }
  761. else {
  762. if(field === 'code'){
  763. conformData = {
  764. billsLibId: billsLibId,
  765. code: arr[i].data,
  766. content: arr[j].data,
  767. rowIdx: arr[i].rowIdx,
  768. orgId: arr[i].orgId,
  769. type: 'UpdateT'
  770. }
  771. }
  772. else {
  773. conformData = {
  774. billsLIbId: billsLibId,
  775. code: arr[j].data,
  776. content: arr[i].data,
  777. rowIdx: arr[i].rowIdx,
  778. orgId: arr[i].orgId,
  779. type: 'UpdateT'
  780. }
  781. }
  782. }
  783. conformDatas.push(conformData);
  784. }
  785. }
  786. }
  787. for(let i =0; i< arr.length; i++){
  788. let flag = true;
  789. for(let j=0; j<arr.length; j++){
  790. if(arr[i].rowIdx === arr[j].rowIdx && arr[i].field !== arr[j].field){
  791. flag = false;
  792. }
  793. }
  794. if(flag){
  795. conformDatas.push(arr[i]);
  796. }
  797. }
  798. return conformDatas;
  799. }
  800. };
  801. let pasteController = {
  802. frontOperator: function(sheet, setting, controller, totalJobs, pasteDatas){
  803. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  804. let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
  805. for(let i =0; i< updateDatas.length; i++){
  806. if(updateDatas[i].type === UpdateExist){
  807. totalJobs.jobsArr.forEach(job => {
  808. if(job.data.content === updateDatas[i].newData){
  809. let index = tools.getIndex(controller.tree.selected.jobs, updateDatas[i].orgJobId);
  810. job.count ++;
  811. controller.tree.selected.jobs.splice(index, 1);
  812. controller.tree.selected.jobs.splice(index, 0, job);
  813. }
  814. });
  815. }
  816. if(updateDatas[i].type === UpdateNew){
  817. let newJobData, newJob;
  818. let newJobId = updateDatas[i].newJobId;
  819. newJobData = {id: newJobId, content: updateDatas[i].newData, code: updateDatas[i].code};
  820. newJob = createObj.newJob(newJobData);
  821. newJob.count = 1;
  822. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  823. totalJobs.jobsArr.push(newJob);
  824. var index = tools.getIndex(controller.tree.selected.jobs, updateDatas[i].orgJobId);
  825. controller.tree.selected.jobs.splice(index, 1);
  826. controller.tree.selected.jobs.splice(index, 0, newJob);
  827. }
  828. }
  829. for(let i=0; i< createDatas.length; i++){
  830. if(createDatas[i].type === CreateExist){
  831. totalJobs.jobsArr.forEach(job => {
  832. if(job.data.content === createDatas[i].newData){
  833. job.count ++;
  834. controller.tree.selected.jobs.push(job);
  835. }
  836. });
  837. }
  838. if(createDatas[i].type === CreateNew){
  839. let newJobId = createDatas[i].id;
  840. let newJobData, newJob;
  841. newJobData = {id: newJobId, content: createDatas[i].newData, code: createDatas[i].code};
  842. newJob = createObj.newJob(newJobData);
  843. newJob.count = 1;
  844. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  845. totalJobs.jobsArr.push(newJob);
  846. controller.tree.selected.jobs.push(newJob);
  847. }
  848. }
  849. //resort&reshow
  850. let time = new Date().getTime();
  851. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  852. sheetDatas = tools.getsheetDatas(sheet);
  853. },
  854. frontItemsRelOperator: function(sheet, setting, controller, totalItems, pasteDatas){
  855. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  856. let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
  857. for(let i =0; i< updateDatas.length; i++){
  858. if(updateDatas[i].type === UpdateExist){
  859. totalItems.itemsArr.forEach(item => {
  860. if(item.data.content === updateDatas[i].newData){
  861. let index = tools.getIndex(controller.tree.selected.items, updateDatas[i].orgItemId);
  862. item.count ++;
  863. controller.tree.selected.items.splice(index, 1);
  864. controller.tree.selected.items.splice(index, 0, item);
  865. }
  866. });
  867. }
  868. if(updateDatas[i].type === UpdateNew){
  869. let newItemData, newItem;
  870. let newItemId = updateDatas[i].newItemId;
  871. newItemData = {id: newItemId, content: updateDatas[i].newData, code: updateDatas[i].code};
  872. newItem = createObj.newItem(newItemData);
  873. newItem.count = 1;
  874. totalItems.items[totalItems.prefix + newItemId] = newItem;
  875. totalItems.itemsArr.push(newItem);
  876. var index = tools.getIndex(controller.tree.selected.items, updateDatas[i].orgItemId);
  877. controller.tree.selected.items.splice(index, 1);
  878. controller.tree.selected.items.splice(index, 0, newItem);
  879. }
  880. }
  881. for(let i=0; i< createDatas.length; i++){
  882. if(createDatas[i].type === CreateExist){
  883. totalItems.itemsArr.forEach(item => {
  884. if(item.data.content === createDatas[i].newData){
  885. item.count ++;
  886. controller.tree.selected.jobs.push(item);
  887. }
  888. });
  889. }
  890. if(createDatas[i].type === CreateNew){
  891. let newItemId = createDatas[i].id;
  892. let newItemData, newItem;
  893. newItemData = {id: newItemId, content: createDatas[i].newData, code: createDatas[i].code};
  894. newItem = createObj.newItem(newItemData);
  895. newItem.count = 1;
  896. totalItems.items[totalItems.prefix + newItemId] = newItem;
  897. totalItems.itemsArr.push(newItem);
  898. controller.tree.selected.items.push(newItem);
  899. }
  900. }
  901. //resort&reshow
  902. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  903. sheetItemsDatas = tools.getsheetDatas(sheet);
  904. },
  905. pasteJobsFront: function(sheet, totalJobs, uncrossedDatas, crossedDatas){
  906. let rebuildArr =[];
  907. if(crossedDatas.length > 0){
  908. for(let i=0; i< crossedDatas.length; i++){
  909. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  910. let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, data, 'reference');
  911. if(isRepeat){
  912. crossedDatas.splice(i--, 1);
  913. }
  914. }
  915. for(let i=0; i< crossedDatas.length; i++){
  916. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  917. if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
  918. crossedDatas.splice(i--, 1);
  919. }
  920. else {
  921. totalJobs.jobsArr.forEach(job => {
  922. if(job.data.id === crossedDatas[i].orgId){
  923. job.data[field] = crossedDatas[i].data;
  924. }
  925. });
  926. }
  927. }
  928. }
  929. if(uncrossedDatas.length > 0){
  930. for(let i=0; i< uncrossedDatas.length; i++){
  931. let field = uncrossedDatas[i].field;
  932. let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, uncrossedDatas[i].data, 'reference');
  933. if(isRepeat){
  934. uncrossedDatas.splice(i--, 1);
  935. }
  936. }
  937. for(let i=0; i< uncrossedDatas.length; i++){
  938. let field = uncrossedDatas[i].field;
  939. if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
  940. uncrossedDatas.splice(i--, 1);
  941. }
  942. }
  943. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  944. function myCompare(a, b){
  945. if(a.rowIdx > b.rowIdx)
  946. return 1;
  947. if(a.rowIdx < b.rowIdx)
  948. return -1;
  949. return 0;
  950. }
  951. rebuildArr.sort(myCompare);
  952. for(let i=0; i< rebuildArr.length; i++){
  953. let newJobData, newJob;
  954. if(rebuildArr[i].type === 'CreateT'){
  955. maxJobsNumber++;
  956. maxJobsNumber = maxJobsNumber >= rebuildArr[i].code ? maxJobsNumber : rebuildArr[i].code;
  957. let id = maxJobsNumber;
  958. //rebuildArr[i].code = maxJobsNumber;
  959. rebuildArr[i].id = id;
  960. newJobData = {id: id, content: rebuildArr[i].content, code: rebuildArr[i].code};
  961. newJob = createObj.newJob(newJobData);
  962. totalJobs.jobsArr.push(newJob);
  963. }
  964. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'content'){
  965. maxJobsNumber++;
  966. let id = maxJobsNumber;
  967. let code = tools.getNewCode(totalJobs, 'jobs');
  968. code++;
  969. rebuildArr[i].id = id;
  970. rebuildArr[i].code = code;
  971. newJobData = {id: id, content: rebuildArr[i].data, code: code};
  972. newJob = createObj.newJob(newJobData);
  973. totalJobs.jobsArr.push(newJob);
  974. }
  975. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'code'){
  976. maxJobsNumber++;
  977. maxJobsNumber = maxJobsNumber >= rebuildArr[i].data ? maxJobsNumber : rebuildArr[i].data;
  978. let id = maxJobsNumber;
  979. // rebuildArr[i].data = maxJobsNumber;
  980. rebuildArr[i].id = id;
  981. newJobData = {id: id, content: '', code: rebuildArr[i].data};
  982. newJob = createObj.newJob(newJobData);
  983. totalJobs.jobsArr.push(newJob);
  984. }
  985. }
  986. }
  987. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  988. //backendOP
  989. let backendDatas = {
  990. updateDatas: crossedDatas,
  991. createDatas: rebuildArr
  992. };
  993. jobsAjax.pasteJobs(backendDatas);
  994. },
  995. pasteItemsFront: function(sheet, totalItems, uncrossedDatas, crossedDatas){
  996. let rebuildArr =[];
  997. if(crossedDatas.length > 0){
  998. for(let i=0; i< crossedDatas.length; i++){
  999. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1000. let isRepeat = tools.isRepeat(totalItems.itemsArr, field, data, 'reference');
  1001. if(isRepeat){
  1002. crossedDatas.splice(i--, 1);
  1003. }
  1004. }
  1005. for(let i=0; i< crossedDatas.length; i++){
  1006. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1007. if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
  1008. crossedDatas.splice(i--, 1);
  1009. }
  1010. else {
  1011. totalItems.itemsArr.forEach(item => {
  1012. if(item.data.id === crossedDatas[i].orgId){
  1013. item.data[field] = crossedDatas[i].data;
  1014. }
  1015. });
  1016. }
  1017. }
  1018. }
  1019. if(uncrossedDatas.length > 0){
  1020. for(let i=0; i< uncrossedDatas.length; i++){
  1021. let field = uncrossedDatas[i].field;
  1022. let isRepeat = tools.isRepeat(totalItems.itemsArr, field, uncrossedDatas[i].data, 'reference');
  1023. if(isRepeat){
  1024. uncrossedDatas.splice(i--, 1);
  1025. }
  1026. }
  1027. for(let i=0; i< uncrossedDatas.length; i++){
  1028. let field = uncrossedDatas[i].field;
  1029. if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
  1030. uncrossedDatas.splice(i--, 1);
  1031. }
  1032. }
  1033. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1034. function myCompare(a, b){
  1035. if(a.rowIdx > b.rowIdx)
  1036. return 1;
  1037. if(a.rowIdx < b.rowIdx)
  1038. return -1;
  1039. return 0;
  1040. }
  1041. rebuildArr.sort(myCompare);
  1042. for(let i=0; i< rebuildArr.length; i++){
  1043. let newItemData, newItem;
  1044. if(rebuildArr[i].type === 'CreateT'){
  1045. maxItemsNumber++;
  1046. maxItemsNumber = maxItemsNumber >= rebuildArr[i].code ? maxItemsNumber : rebuildArr[i].code;
  1047. let id = maxItemsNumber;
  1048. rebuildArr[i].id = id;
  1049. newItemData = {id: id, content: rebuildArr[i].content, code: rebuildArr[i].code, itemValue:[]};
  1050. newItem = createObj.newItem(newItemData);
  1051. totalItems.itemsArr.push(newItem);
  1052. totalItems.items[totalItems.prefix + id] = newItem;
  1053. }
  1054. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'content'){
  1055. maxItemsNumber++;
  1056. let id = maxItemsNumber;
  1057. let code = tools.getNewCode(totalItems, 'items');
  1058. code++;
  1059. rebuildArr[i].id = id;
  1060. rebuildArr[i].code = code;
  1061. newItemData = {id: id, content: rebuildArr[i].data, code: code, itemValue:[]};
  1062. newItem = createObj.newItem(newItemData);
  1063. totalItems.itemsArr.push(newItem);
  1064. totalItems.items[totalItems.prefix + id] = newItem;
  1065. }
  1066. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'code'){
  1067. maxItemsNumber++;
  1068. maxItemsNumber = maxItemsNumber >= rebuildArr[i].data ? maxItemsNumber : rebuildArr[i].data;
  1069. let id = maxItemsNumber;
  1070. rebuildArr[i].id = id;
  1071. newItemData = {id: id, content: '', code: rebuildArr[i].data};
  1072. newItem = createObj.newItem(newItemData);
  1073. totalItems.itemsArr.push(newItem);
  1074. totalItems.items[totalItems.prefix + id] = newItem;
  1075. }
  1076. }
  1077. }
  1078. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  1079. //backendOP
  1080. let backendDatas = {
  1081. updateDatas: crossedDatas,
  1082. createDatas: rebuildArr
  1083. };
  1084. itemsAjax.pasteItems(backendDatas);
  1085. },
  1086. pasteValueFront: function(sheet, totalItems, uncrossedDatas, crossedDatas){
  1087. let rebuildArr =[];
  1088. let rebuildUpdateDatas = [];
  1089. let backendUpdateDatas = [];
  1090. let valuesArr = valueController.getValues(totalItems, selectedId);
  1091. function myCompare(a, b){
  1092. if(a.rowIdx > b.rowIdx)
  1093. return 1;
  1094. if(a.rowIdx < b.rowIdx)
  1095. return -1;
  1096. return 0;
  1097. }
  1098. if(crossedDatas.length > 0){
  1099. for(let i=0; i< crossedDatas.length; i++){
  1100. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1101. let isRepeat = tools.isRepeat(valuesArr, field, data, 'document');
  1102. if(isRepeat){
  1103. crossedDatas.splice(i--, 1);
  1104. }
  1105. }
  1106. for(let i=0; i< crossedDatas.length; i++){
  1107. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1108. if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
  1109. crossedDatas.splice(i--, 1);
  1110. }
  1111. }
  1112. rebuildUpdateDatas = tools.rebuildArr(crossedDatas, 'update');
  1113. rebuildUpdateDatas.sort(myCompare);
  1114. for(let i =0; i< rebuildUpdateDatas.length; i++){
  1115. rebuildUpdateDatas[i].itemId = selectedId;
  1116. let index;
  1117. if(rebuildUpdateDatas[i].type === 'UpdateT'){
  1118. if(valuesArr){
  1119. for(let j=0; j< valuesArr.length; j++){
  1120. if(rebuildUpdateDatas[i].orgId === valuesArr[j].code){
  1121. index = j;
  1122. valuesArr.splice(j--, 1);
  1123. }
  1124. }
  1125. let updateEle = {code: rebuildUpdateDatas[i].code, value: rebuildUpdateDatas[i].content};
  1126. valuesArr.splice(index, 0, updateEle);
  1127. }
  1128. }
  1129. if(rebuildUpdateDatas[i].type !== 'UpdateT' && rebuildUpdateDatas[i].field === 'code'){
  1130. if(valuesArr){
  1131. for(let j=0; j< valuesArr.length; j++){
  1132. if(rebuildUpdateDatas[i].orgId === valuesArr[j].code){
  1133. valuesArr[j].code = rebuildUpdateDatas[i].data;
  1134. }
  1135. }
  1136. }
  1137. }
  1138. if(rebuildUpdateDatas[i].type !== 'UpdateT' && rebuildUpdateDatas[i].field === 'value'){
  1139. if(valuesArr){
  1140. for(let j=0; j< valuesArr.length; j++){
  1141. if(rebuildUpdateDatas[i].orgId === valuesArr[j].code){
  1142. valuesArr[j].value = rebuildUpdateDatas[i].data
  1143. }
  1144. }
  1145. }
  1146. }
  1147. }
  1148. }
  1149. if(uncrossedDatas.length > 0){
  1150. for(let i=0; i< uncrossedDatas.length; i++){
  1151. let field = uncrossedDatas[i].field;
  1152. let isRepeat = tools.isRepeat(valuesArr, field, uncrossedDatas[i].data, 'document');
  1153. if(isRepeat){
  1154. uncrossedDatas.splice(i--, 1);
  1155. }
  1156. }
  1157. for(let i=0; i< uncrossedDatas.length; i++){
  1158. let field = uncrossedDatas[i].field;
  1159. if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
  1160. uncrossedDatas.splice(i--, 1);
  1161. }
  1162. }
  1163. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1164. rebuildArr.sort(myCompare);
  1165. for(let i=0; i< rebuildArr.length; i++){
  1166. let newValueData, newValue;
  1167. let newCode = valueController.getCode(totalItems, selectedId);
  1168. if(rebuildArr[i].type === 'CreateT'){
  1169. rebuildArr[i].itemId = selectedId;
  1170. newValueData = {value: rebuildArr[i].content, code: rebuildArr[i].code};
  1171. valuesArr.push(newValueData);
  1172. }
  1173. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'value'){
  1174. rebuildArr[i].itemId = selectedId;
  1175. rebuildArr[i].code = newCode;
  1176. newValueData = {value: rebuildArr[i].data, code: newCode};
  1177. valuesArr.push(newValueData);
  1178. }
  1179. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'code'){
  1180. //newCode = newCode >= rebuildArr[i].data ? newCode : rebuildArr[i].data;
  1181. //rebuildArr[i].data = newCode;
  1182. rebuildArr[i].itemId = selectedId;
  1183. newValueData = {value: '', code: rebuildArr[i].data};
  1184. valuesArr.push(newValueData);
  1185. }
  1186. }
  1187. }
  1188. tools.reshowValue(sheet, valuesArr, eigenValueSetting, true);
  1189. //backendOP
  1190. let backendDatas = {
  1191. updateDatas: rebuildUpdateDatas,
  1192. createDatas: rebuildArr
  1193. };
  1194. if(rebuildUpdateDatas.length >0 || rebuildArr.length >0){
  1195. itemsAjax.pasteValues(backendDatas);
  1196. }
  1197. }
  1198. };
  1199. var jobsController = {
  1200. editData: function(controller, sheet, totalJobs, setting){
  1201. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1202. orgJobData = sheet.getCell(args.row, args.col).value();
  1203. });
  1204. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  1205. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  1206. setting.cols.forEach(function (col, idx) {
  1207. if (args.col === idx) {
  1208. field = col.data.field;
  1209. }
  1210. });
  1211. if (controller.tree.selected) {
  1212. var isExist = tools.isExist(totalJobs.jobsArr, field, newData, orgJobData);
  1213. var isRepeat = tools.isRepeat(controller.tree.selected.jobs, field ,newData, 'reference');
  1214. //create
  1215. if(!id && newData && !isRepeat){
  1216. if(isExist){
  1217. jobsController.createExist(sheet, controller, totalJobs, field, newData, args, setting);
  1218. }
  1219. else {
  1220. jobsController.createNew(sheet, controller, totalJobs, field, newData, args, setting);
  1221. }
  1222. }
  1223. //update
  1224. else if(id && newData !== orgJobData && !isRepeat){
  1225. jobsController.update(sheet, controller, totalJobs, field, newData, id, isExist, args, setting);
  1226. }
  1227. //处理重复
  1228. if(isRepeat){
  1229. if(id && newData){
  1230. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgJobData);
  1231. }
  1232. else {
  1233. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  1234. }
  1235. }
  1236. }
  1237. else {
  1238. sheet.getCell(args.row, args.col).value('');
  1239. }
  1240. });
  1241. },
  1242. createNew: function(sheet, controller, totalJobs, field, newData, args, setting){
  1243. if(field === 'content'){
  1244. maxJobsNumber++;
  1245. let code = tools.getNewCode(totalJobs, 'jobs');
  1246. code++;
  1247. console.log(`code:: ${code}`);
  1248. jobsAjax.createJobContent(billsLibId, newData, code, maxJobsNumber);
  1249. var newJobData, newJob;
  1250. newJobData = {id: maxJobsNumber, content: newData, code: code};
  1251. newJob = createObj.newJob(newJobData);
  1252. newJob.count = 1;
  1253. totalJobs.jobs[totalJobs.prefix + maxJobsNumber] = newJob;
  1254. totalJobs.jobsArr.push(newJob);
  1255. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', maxJobsNumber);
  1256. controller.tree.selected.jobs.push(newJob);
  1257. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  1258. }
  1259. else {
  1260. sheet.getCell(args.row, args.col).value('');
  1261. }
  1262. },
  1263. createExist: function(sheet, controller, totalJobs, field, newData, args, setting){
  1264. totalJobs.jobsArr.forEach(function(job){
  1265. if(field === 'content'&& newData === job.data.content){
  1266. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data.id);
  1267. job.count++;
  1268. controller.tree.selected.jobs.push(job);
  1269. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  1270. }
  1271. else if(field == 'code' && newData == job.data.code){
  1272. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data.id);
  1273. job.count++;
  1274. controller.tree.selected.jobs.push(job);
  1275. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  1276. }
  1277. });
  1278. },
  1279. update: function(sheet, controller, totalJobs, field, newData, id, isExist, args, setting){
  1280. if(isExist){
  1281. totalJobs.jobsArr.forEach(function(job){
  1282. if(field == 'code' && job.data[field] == newData){
  1283. var index = tools.getIndex(controller.tree.selected.jobs, id);
  1284. job.count++;
  1285. controller.tree.selected.jobs.splice(index, 1);
  1286. controller.tree.selected.jobs.splice(index, 0, job);
  1287. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  1288. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  1289. }
  1290. if(field === 'content' && job.data[field] === newData){
  1291. var index = tools.getIndex(controller.tree.selected.jobs, id);
  1292. job.count++;
  1293. controller.tree.selected.jobs.splice(index, 1);
  1294. controller.tree.selected.jobs.splice(index, 0, job);
  1295. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  1296. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  1297. }
  1298. });
  1299. }
  1300. else{
  1301. if(field === 'content'){
  1302. maxJobsNumber++;
  1303. let code = tools.getNewCode(totalJobs, 'jobs');
  1304. code++;
  1305. jobsAjax.createJobContent(billsLibId, newData, code, maxJobsNumber);
  1306. var newJobData, newJob;
  1307. newJobData = {id: maxJobsNumber, content: newData, code: code};
  1308. newJob = createObj.newJob(newJobData);
  1309. newJob.count = 1;
  1310. totalJobs.jobs[totalJobs.prefix + maxJobsNumber] = newJob;
  1311. totalJobs.jobsArr.push(newJob);
  1312. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, maxJobsNumber, 'update', 'jobs');
  1313. var index = tools.getIndex(controller.tree.selected.jobs, id);
  1314. controller.tree.selected.jobs.splice(index, 1);
  1315. controller.tree.selected.jobs.splice(index, 0, newJob);
  1316. tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
  1317. }
  1318. else {
  1319. //todo: 提示窗口
  1320. if(typeof newData === 'number'){
  1321. sheet.getCell(args.row, args.col).value(orgJobData);
  1322. }
  1323. else {
  1324. //编号只能是数字
  1325. sheet.getCell(args.row, args.col).value('');
  1326. }
  1327. }
  1328. }
  1329. },
  1330. };
  1331. var itemsController = {
  1332. editData: function(controller, sheet, totalItems, setting){
  1333. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1334. orgItemData = sheet.getCell(args.row, args.col).value();
  1335. });
  1336. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  1337. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  1338. setting.cols.forEach(function (col, idx) {
  1339. if (args.col === idx) {
  1340. field = col.data.field;
  1341. }
  1342. });
  1343. if (controller.tree.selected) {
  1344. var isExist = tools.isExist(totalItems.itemsArr, field, newData, orgItemData);
  1345. var isRepeat = tools.isRepeat(controller.tree.selected.items, field ,newData, 'reference');
  1346. //create
  1347. if(!id && newData && !isRepeat){
  1348. if(isExist){
  1349. itemsController.createExist(sheet, controller, totalItems, field, newData, args, setting);
  1350. }
  1351. else {
  1352. itemsController.createNew(sheet, controller, totalItems, field, newData, args, setting);
  1353. }
  1354. }
  1355. //update
  1356. else if(id && newData !== orgItemData && !isRepeat){
  1357. itemsController.update(sheet, controller, totalItems, field, newData, id, isExist, args, setting);
  1358. }
  1359. //处理重复
  1360. if(isRepeat){
  1361. //todo:redirect focus
  1362. if(id && newData){
  1363. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgItemData);
  1364. }
  1365. else {
  1366. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  1367. }
  1368. }
  1369. }
  1370. else {
  1371. sheet.getCell(args.row, args.col).value('');
  1372. }
  1373. });
  1374. },
  1375. createNew: function(sheet, controller, totalItems, field, newData, args, setting){
  1376. if(field === 'content'){
  1377. maxItemsNumber++;
  1378. let id = maxItemsNumber;
  1379. let code = tools.getNewCode(totalItems, 'items');
  1380. code++;
  1381. itemsAjax.createItemCharacter(billsLibId, newData, code, id);
  1382. var newItemData, newItem;
  1383. newItemData = {id: id, content: newData, code: code};
  1384. newItem = createObj.newItem(newItemData);
  1385. newItem.count = 1;
  1386. totalItems.items[totalItems.prefix + id] = newItem;
  1387. totalItems.itemsArr.push(newItem);
  1388. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', id);
  1389. controller.tree.selected.items.push(newItem);
  1390. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1391. }
  1392. else {
  1393. if(typeof newData === 'number'){
  1394. sheet.getCell(args.row, args.col).value('');
  1395. }
  1396. else {
  1397. //编号只能为数字
  1398. sheet.getCell(args.row, args.col).value('');
  1399. }
  1400. }
  1401. },
  1402. createExist: function(sheet, controller, totalItems, field, newData, args, setting){
  1403. totalItems.itemsArr.forEach(function(item){
  1404. //todo:整合代码
  1405. if(field === 'content'&& newData === item.data.content){
  1406. //isExist = true;
  1407. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data.id);
  1408. item.count++;
  1409. controller.tree.selected.items.push(item);
  1410. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1411. }
  1412. else if(field == 'code' && newData == item.data.code){
  1413. //isExist = true;
  1414. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data.id);
  1415. item.count++;
  1416. controller.tree.selected.items.push(item);
  1417. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1418. }
  1419. });
  1420. },
  1421. update: function(sheet, controller, totalItems, field, newData, id, isExist, args, setting){
  1422. if(isExist){
  1423. totalItems.itemsArr.forEach(function(item){
  1424. if(field == 'code' && item.data[field] == newData){
  1425. var index = tools.getIndex(controller.tree.selected.items, id);
  1426. item.count++;
  1427. controller.tree.selected.items.splice(index, 1);
  1428. controller.tree.selected.items.splice(index, 0, item);
  1429. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  1430. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1431. }
  1432. if(field === 'content' && item.data[field] === newData){
  1433. var index = tools.getIndex(controller.tree.selected.items, id);
  1434. item.count++;
  1435. controller.tree.selected.items.splice(index, 1);
  1436. controller.tree.selected.items.splice(index, 0, item);
  1437. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  1438. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1439. }
  1440. });
  1441. }
  1442. else{
  1443. if(field === 'content'){
  1444. maxItemsNumber++;
  1445. let newId = maxItemsNumber;
  1446. let code = tools.getNewCode(totalItems, 'items');
  1447. code++;
  1448. itemsAjax.createItemCharacter(billsLibId,newData, code, newId);
  1449. var newItemData, newItem;
  1450. newItemData = {id: newId, content: newData, code: code};
  1451. newItem = createObj.newItem(newItemData);
  1452. newItem.count = 1;
  1453. totalItems.items[totalItems.prefix + newId] = newItem;
  1454. totalItems.itemsArr.push(newItem);
  1455. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newId, 'update', 'items');
  1456. var index = tools.getIndex(controller.tree.selected.items, id);
  1457. controller.tree.selected.items.splice(index, 1);
  1458. controller.tree.selected.items.splice(index, 0, newItem);
  1459. tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1460. }
  1461. else {
  1462. if(typeof newData === 'number'){
  1463. sheet.getCell(args.row, args.col).value(orgItemData);
  1464. }
  1465. else {
  1466. //编号只能为数字
  1467. sheet.getCell(args.row, args.col).value('');
  1468. }
  1469. }
  1470. }
  1471. },
  1472. };
  1473. var valueController = {
  1474. editData: function(totalItems, sheet, setting){
  1475. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1476. orgValue = sheet.getValue(args.row, args.col);
  1477. });
  1478. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  1479. var newValue = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  1480. setting.cols.forEach(function(col, colIdx){
  1481. if(args.col === colIdx){
  1482. field = col.data.field;
  1483. }
  1484. });
  1485. if(selectedId){
  1486. isRepeat = tools.isRepeat(valueController.getValues(totalItems, selectedId), field, newValue, 'document');
  1487. if(!tagId && !isRepeat && newValue){//create
  1488. valueController.createValue(sheet, totalItems, selectedId, field, newValue);
  1489. }
  1490. else if(tagId && !isRepeat && newValue !== orgValue){//update
  1491. valueController.updateValue(totalItems, tagId, newValue, field);
  1492. }
  1493. if(isRepeat){
  1494. if(tagId && newValue){
  1495. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgValue);
  1496. }
  1497. else {
  1498. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  1499. }
  1500. }
  1501. }
  1502. });
  1503. },
  1504. createValue: function(sheet, totalItems, id, field, newValue){
  1505. var newData;
  1506. if(field === 'value'){
  1507. var newCode = valueController.getCode(totalItems, id);
  1508. newData = {code: newCode, value: newValue};
  1509. tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode);
  1510. }
  1511. else {
  1512. if(typeof newValue === 'number'){
  1513. newData = {code: newValue, value: ''};
  1514. tools.reSetCell(sheet, sheet.getActiveRowIndex(), null, null, newValue);
  1515. }
  1516. else {
  1517. //编号只能为数字!
  1518. sheet.getCell(args.row, args.col).value('');
  1519. }
  1520. }
  1521. console.log(`finItem`);
  1522. console.log(totalItems.findItem(id).data);
  1523. totalItems.findItem(id).data.itemValue.push(newData);
  1524. itemsAjax.updateValue(billsLibId, id, newData, null, 'create');
  1525. },
  1526. updateValue: function(totalItems, tagId, newData, field){
  1527. var updateData = {code: tagId, newData: newData, field: field};
  1528. var itemVals = totalItems.findItem(selectedId).data.itemValue;
  1529. if(field === 'value'){
  1530. var updateEle = {code: tagId, value: newData};
  1531. if(itemVals){
  1532. var index;
  1533. itemVals.forEach(function(val){
  1534. if(val.code === tagId){
  1535. index = itemVals.indexOf(val);
  1536. itemVals.splice(index, 1);
  1537. }
  1538. });
  1539. itemVals.splice(index, 0, updateEle);
  1540. }
  1541. itemsAjax.updateValue(billsLibId, selectedId, updateData, null, 'update');
  1542. }
  1543. else {
  1544. if(typeof newData === 'number'){
  1545. if(itemVals){
  1546. var updateEle;
  1547. var index;
  1548. itemVals.forEach(function(val){
  1549. if(val.code === tagId){
  1550. updateEle = {code: newData, value: val.value};
  1551. index = itemVals.indexOf(val);
  1552. itemVals.splice(index, 1);
  1553. }
  1554. });
  1555. itemVals.splice(index, 0, updateEle);
  1556. }
  1557. itemsAjax.updateValue(billsLibId, selectedId, updateData, null, 'update');
  1558. }
  1559. else {
  1560. //编号只能为数字!
  1561. sheet.getCell(args.row, args.col).value('');
  1562. }
  1563. }
  1564. },
  1565. getValues: function(totalItems, id){
  1566. return totalItems.findItem(id).data.itemValue;
  1567. },
  1568. getTopItem: function(totalItems){
  1569. tools.resort(totalItems.itemsArr, 'code', false);
  1570. return totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0] : null
  1571. },
  1572. getCode: function(totalItems, id){
  1573. var valArr = totalItems.findItem(id).data.itemValue;
  1574. if(valArr){
  1575. tools.resort(valArr, 'code', true);
  1576. return valArr.length > 0 ? valArr[valArr.length - 1].code + 1 : 1;
  1577. }else {
  1578. return 1;
  1579. }
  1580. },
  1581. isRepeat: function(arr, newValue){
  1582. var isRepeat = false;
  1583. arr.forEach(function(itemValue){
  1584. if(itemValue.value === newValue){
  1585. isRepeat = true;
  1586. }
  1587. });
  1588. return isRepeat;
  1589. }
  1590. };
  1591. var totalJobsController = {
  1592. eiditData: function(totalJobs, sheet, setting){
  1593. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1594. orgJobData = sheet.getCell(args.row, args.col).value();
  1595. });
  1596. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  1597. var newData = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  1598. setting.cols.forEach(function(col, colIdx){
  1599. if(args.col === colIdx){
  1600. field = col.data.field;
  1601. }
  1602. });
  1603. isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference');
  1604. if(!tagId && !isRepeat && newData){//create
  1605. totalJobsController.createJob(sheet, totalJobs, field, newData, args);
  1606. }
  1607. else if(tagId && !isRepeat && newData !== orgJobData){//update
  1608. totalJobsController.updateJob(totalJobs, tagId, field, newData);
  1609. }
  1610. if(isRepeat){
  1611. if(tagId && newData){
  1612. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgJobData);
  1613. }
  1614. else {
  1615. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  1616. }
  1617. }
  1618. });
  1619. },
  1620. createJob: function(sheet, totalJobs, field, newData, args){
  1621. if(field === 'content'){
  1622. maxJobsNumber++;
  1623. let id = maxJobsNumber;
  1624. let code = tools.getNewCode(totalJobs, 'jobs');
  1625. code++;
  1626. jobsAjax.createJobContent(billsLibId, newData, code, id);
  1627. var newJobData, newJob;
  1628. newJobData = {id: id, content: newData, code: code};
  1629. newJob = createObj.newJob(newJobData);
  1630. totalJobs.jobsArr.push(newJob);
  1631. tools.reSetCell(sheet, args.row, 0, code, id);
  1632. }
  1633. else {
  1634. if(typeof newData === 'number'){
  1635. maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
  1636. let id = maxJobsNumber;
  1637. jobsAjax.createJobContent(billsLibId, '', newData, id);
  1638. var newJobData, newJob;
  1639. newJobData = {id: id, content: '', code: newData};
  1640. newJob = createObj.newJob(newJobData);
  1641. totalJobs.jobsArr.push(newJob);
  1642. tools.reSetCell(sheet, args.row, 0, null, id);
  1643. }
  1644. else {
  1645. //编号只能为数字!
  1646. sheet.getCell(args.row, args.col).value("");
  1647. }
  1648. }
  1649. },
  1650. updateJob: function(totalJobs, id, field, newData){
  1651. if(field === 'code' && typeof newData !== 'number'){
  1652. //编号只能为数字
  1653. }
  1654. else {
  1655. console.log(`enterupdate id: ${id}`);
  1656. totalJobs.jobsArr.forEach(function(job){
  1657. if(job.data.id === id){
  1658. job.data[field] = newData;
  1659. }
  1660. });
  1661. jobsAjax.updateJobContent(billsLibId, id, field, newData);
  1662. }
  1663. }
  1664. };
  1665. var totalItemsController = {
  1666. eiditData: function(totalItems, sheet, setting){
  1667. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1668. orgItemData = sheet.getCell(args.row, args.col).value();
  1669. });
  1670. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  1671. var newData = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  1672. setting.cols.forEach(function(col, colIdx){
  1673. if(args.col === colIdx){
  1674. field = col.data.field;
  1675. console.log('colIdx' + colIdx);
  1676. }
  1677. });
  1678. isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference');
  1679. if(!tagId && !isRepeat && newData){//create
  1680. totalItemsController.createItem(sheet, totalItems, field, newData, args);
  1681. }
  1682. else if(tagId && !isRepeat && newData !== orgItemData){//update
  1683. totalItemsController.updateItem(totalItems, tagId, field, newData);
  1684. }
  1685. if(isRepeat){
  1686. if(tagId && newData){
  1687. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgItemData);
  1688. }
  1689. else {
  1690. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  1691. }
  1692. }
  1693. });
  1694. },
  1695. createItem: function(sheet, totalItems, field, newData, args){
  1696. if(field === 'content'){
  1697. maxItemsNumber++;
  1698. let id = maxItemsNumber;
  1699. let code = tools.getNewCode(totalItems, 'items');
  1700. code++;
  1701. itemsAjax.createItemCharacter(billsLibId, newData, code, id);
  1702. var newItemData, newItem;
  1703. newItemData = {id: id, content: newData, code: code, itemValue: []};
  1704. newItem = createObj.newItem(newItemData);
  1705. totalItems.itemsArr.push(newItem);
  1706. totalItems.items[totalItems.prefix + id] = newItem;
  1707. tools.reSetCell(sheet, args.row, 0, code, id);
  1708. }
  1709. else {
  1710. if(typeof newData === 'number'){
  1711. maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
  1712. let id = maxItemsNumber;
  1713. itemsAjax.createItemCharacter(billsLibId, '', newData, id);
  1714. var newItemData, newItem;
  1715. newItemData = {id: id, content: '', code: newData, itemValue: []};
  1716. newItem = createObj.newItem(newItemData);
  1717. totalItems.itemsArr.push(newItem);
  1718. totalItems.items[totalItems.prefix + id] = newItem;
  1719. tools.reSetCell(sheet, args.row, 0, null, id);
  1720. }
  1721. else {
  1722. //编号只能为数字
  1723. sheet.getCell(args.row, args.col).value("");
  1724. }
  1725. }
  1726. },
  1727. updateItem: function(totalItems, id, field, newData){
  1728. if(field === 'code' && typeof newData !== 'number'){
  1729. //编号只能为数字
  1730. sheet.getCell(args.row, args.col).value('');
  1731. }
  1732. else {
  1733. totalItems.itemsArr.forEach(function(item){
  1734. if(item.data.id === id){
  1735. item.data[field] = newData;
  1736. }
  1737. });
  1738. itemsAjax.updateItemCharacter(billsLibId, id, field, newData);
  1739. }
  1740. }
  1741. };
  1742. var rechargeController = {
  1743. updateRechar: function(selectedNode, newData){
  1744. if(selectedNode){
  1745. var updateIds = [];
  1746. var getupdateIds = function(node){
  1747. updateIds.push(node.getID());
  1748. node.data.recharge = newData;
  1749. if(node.children.length > 0){
  1750. node.children.forEach(function(node){
  1751. getupdateIds(node);
  1752. });
  1753. }
  1754. }
  1755. getupdateIds(tools.getRoot(selectedNode));
  1756. billsAjax.updateRecharge(billsLibId, updateIds, newData);
  1757. }
  1758. else {
  1759. $('exampleTextarea').val('');
  1760. }
  1761. },
  1762. createRecharge: function(node){
  1763. if(node){
  1764. var tempId = [];
  1765. tempId.push(node.getID());
  1766. var rootNode = tools.getRoot(node);
  1767. if(rootNode.data.recharge && rootNode !== node){
  1768. billsAjax.updateRecharge(billsLibId, tempId, rootNode.data.recharge);
  1769. node.data.recharge = rootNode.data.recharge;
  1770. $('#exampleTextarea').val(node.data.recharge);
  1771. }
  1772. else {
  1773. node.data.recharge = '';
  1774. $('#exampleTextarea').val('');
  1775. }
  1776. }
  1777. else {
  1778. $('exampleTextarea').val('');
  1779. }
  1780. }
  1781. };