dbController.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  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. billsAjax.createBills(billsLibId, 1, -1 , -1);
  8. controller.insert();
  9. }
  10. else {
  11. var node = controller.tree.selected;
  12. if(node){
  13. var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID();
  14. controller.insert();
  15. billsAjax.createBills(billsLibId, node.getNextSiblingID(), createpid, createnid);
  16. billsAjax.updatePNId(billsLibId, updateId, -1, node.getNextSiblingID());
  17. }
  18. else {
  19. var updateNode = controller.tree.roots[controller.tree.roots.length - 1];
  20. var updateId = updateNode.getID();
  21. controller.insert();
  22. billsAjax.createBills(billsLibId, updateNode.getNextSiblingID(), -1, -1);
  23. billsAjax.updatePNId(billsLibId, updateId, -1, updateNode.getNextSiblingID());
  24. }
  25. }
  26. },
  27. delete: function(controller){
  28. var node = controller.tree.selected;
  29. var deleteIds = [];
  30. var getDeleteIds = function(node){
  31. if(node){
  32. deleteIds.push(node.getID());
  33. if(node.children.length > 0){
  34. for(var i=0; i<node.children.length; i++){
  35. getDeleteIds(node.children[i]);
  36. }
  37. }
  38. }
  39. };
  40. getDeleteIds(node);
  41. billsAjax.deleteBills(billsLibId, deleteIds);
  42. if(node.preSibling){
  43. billsAjax.updatePNId(billsLibId, node.preSibling.getID(), null, node.getNextSiblingID());
  44. }
  45. controller.delete();
  46. },
  47. upLevel: function(controller){
  48. var node = controller.tree.selected;
  49. var ids = [];
  50. var getNextSibling = function(node){
  51. if(node.nextSibling){
  52. ids.push(node.getNextSiblingID());
  53. getNextSibling(node.nextSibling);
  54. }
  55. }
  56. //node
  57. //todo:整合代码:updataPNId;
  58. //------------------------todo
  59. /* var updateData = [
  60. {
  61. billsLibId: null,
  62. updateIds: [],
  63. updatePid: null,
  64. updateNid: null
  65. }
  66. ];*/
  67. //--------------------------todo
  68. if(node){
  69. if(node.parent){
  70. billsAjax.updatePNId(billsLibId, node.getID(), node.parent.getParentID(), node.parent.getNextSiblingID());
  71. //parent
  72. billsAjax.updatePNId(billsLibId, node.getParentID(), null, node.getID());
  73. if(node.nextSibling){
  74. getNextSibling(node);
  75. billsAjax.updatePNId(billsLibId, ids, node.getID(), null);
  76. }
  77. if(node.preSibling){
  78. billsAjax.updatePNId(billsLibId, node.preSibling.getID(), null, -1);
  79. }
  80. controller.upLevel();
  81. }
  82. }
  83. },
  84. downLevel: function(controller){
  85. var node = controller.tree.selected;
  86. if(node){
  87. if(node.preSibling){
  88. billsAjax.updatePNId(billsLibId, node.preSibling.getID(), null, node.getNextSiblingID());
  89. billsAjax.updatePNId(billsLibId, node.getID(), node.preSibling.getID(), -1);
  90. if(node.preSibling.children.length > 0){
  91. billsAjax.updatePNId(billsLibId, node.preSibling.children[node.preSibling.children.length -1].getID(), null, node.getID());
  92. }
  93. controller.downLevel();
  94. }
  95. }
  96. },
  97. upMove: function(controller){
  98. var node = controller.tree.selected;
  99. if(node){
  100. if(node.preSibling){
  101. billsAjax.updatePNId(billsLibId, node.preSibling.getID(), null, node.getNextSiblingID());
  102. billsAjax.updatePNId(billsLibId, node.getID(), null, node.preSibling.getID());
  103. if(node.preSibling.preSibling){
  104. billsAjax.updatePNId(billsLibId, node.preSibling.preSibling.getID(), null, node.getID());
  105. }
  106. controller.upMove();
  107. }
  108. }
  109. },
  110. downMove: function(controller){
  111. var node = controller.tree.selected;
  112. if(node){
  113. if(node.nextSibling){
  114. billsAjax.updatePNId(billsLibId, node.getNextSiblingID(), null, node.getID());
  115. billsAjax.updatePNId(billsLibId, node.getID(), null, node.nextSibling.getNextSiblingID());
  116. if(node.preSibling){
  117. billsAjax.updatePNId(billsLibId, node.preSibling.getID(), null, node.getNextSiblingID());
  118. }
  119. controller.downMove();
  120. }
  121. }
  122. },
  123. editData: function(controller){
  124. controller.sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  125. var node = controller.tree.selected, updateId, field;
  126. if(node){
  127. updateId = node.getID();
  128. billsLibSetting.cols.forEach(function(col, idx){
  129. if(args.col === idx){
  130. field = col.data.field;
  131. node.data[field] = args.editingText;
  132. }
  133. });
  134. billsAjax.updateBills(billsLibId, updateId, field, args.editingText);
  135. }
  136. else {
  137. args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  138. }
  139. });
  140. }
  141. };
  142. //todo: 总表不存在则自动生成code并对应到分表
  143. var createObj = {
  144. newJob: function(data){
  145. var Job = function(data){
  146. this.data = data;
  147. };
  148. return new Job(data);
  149. },
  150. newJobs: function(){
  151. var TotalJobs = function(){
  152. this.jobs = {};
  153. this.jobsArr = [];
  154. this.prefix = '_id';
  155. };
  156. TotalJobs.prototype.loadJobs = function (nodes){
  157. var me = this;
  158. jobsAjax.getJobContent(billsLibId, function(reslut){
  159. reslut.forEach(function(jobData){
  160. var job = createObj.newJob(jobData);
  161. me.jobs[me.prefix + jobData.id] = job;
  162. me.jobsArr.push(job);
  163. });
  164. nodes.forEach(function(node){
  165. node.data.jobs.forEach(function(data){
  166. node.jobs.push(me.jobs[me.prefix + data.id]);
  167. });
  168. });
  169. });
  170. };
  171. TotalJobs.prototype.getUpdateIds = function(nodes, repeatId){
  172. var ids = [];
  173. nodes.forEach(function(node){
  174. node.jobs.forEach(function(job){
  175. if(job.data.id === repeatId){
  176. ids.push(node.getID());
  177. }
  178. });
  179. });
  180. return ids;
  181. };
  182. return new TotalJobs();
  183. },
  184. newItem: function(data){
  185. var Item = function(data){
  186. this.data = data;
  187. };
  188. return new Item(data);
  189. },
  190. newItems: function(){
  191. var TotalItems = function(){
  192. this.items = {};
  193. this.itemsArr = [];
  194. this.prefix = '_id';
  195. };
  196. TotalItems.prototype.loadItems = function (nodes){
  197. var me = this;
  198. itemsAjax.getItemCharacter(billsLibId, function(reslut){
  199. reslut.forEach(function(itemData){
  200. var item = createObj.newItem(itemData);
  201. me.items[me.prefix + itemData.id] = item;
  202. me.itemsArr.push(item);
  203. });
  204. nodes.forEach(function(node){
  205. node.data.items.forEach(function(data){
  206. node.items.push(me.items[me.prefix + data.id]);
  207. });
  208. });
  209. });
  210. };
  211. TotalItems.prototype.getUpdateIds = function(nodes, repeatId){
  212. var ids = [];
  213. nodes.forEach(function(node){
  214. node.items.forEach(function(item){
  215. if(item.data.id === repeatId){
  216. ids.push(node.getID());
  217. }
  218. });
  219. });
  220. return ids;
  221. };
  222. return new TotalItems();
  223. }
  224. };
  225. var jobsController = {
  226. editData: function(controller, sheet, totalJobs, maxNumber, setting){
  227. var orgData;
  228. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  229. orgData = sheet.getCell(args.row, args.col).value();
  230. });
  231. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  232. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  233. setting.cols.forEach(function (col, idx) {
  234. if (args.col === idx) {
  235. field = col.data.field;
  236. }
  237. });
  238. if (controller.tree.selected) {
  239. var isExist = false;
  240. var isRepeat = false;
  241. //isExist?
  242. if(totalJobs.jobsArr.length > 0){
  243. totalJobs.jobsArr.forEach(function(job){
  244. if(job.data[field] === newData && newData !== orgData){
  245. isExist = true;
  246. }
  247. });
  248. }
  249. //isRepeat?
  250. if (controller.tree.selected.jobs) {
  251. controller.tree.selected.jobs.forEach(function (job) {
  252. if (job.data[field] === newData && id !== job.data.id) {
  253. isRepeat = true;
  254. }
  255. });
  256. }
  257. //create
  258. if(!id && newData && !isRepeat){
  259. if(totalJobs.jobsArr.length > 0){
  260. if(isExist){
  261. jobsController.createExist(sheet, controller, totalJobs, field, newData, isExist, args);
  262. }
  263. else {
  264. jobsController.createNew(maxNumber, sheet, controller, totalJobs, field, newData, args);
  265. }
  266. }
  267. else {
  268. jobsController.createInit(sheet, controller, totalJobs, field, newData, args);
  269. }
  270. }
  271. //update
  272. else if(id && newData !== orgData && !isRepeat){
  273. jobsController.update(maxNumber, sheet, controller, totalJobs, field, newData, id);
  274. }
  275. //处理重复
  276. if(isRepeat){
  277. //todo:redirect focus
  278. if(id && newData){
  279. console.log('isRepeat1 orgData:'+orgData);
  280. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgData);
  281. }
  282. else {
  283. console.log('isRepeat2');
  284. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  285. }
  286. }
  287. }
  288. });
  289. },
  290. createExist: function(sheet, controller, totalJobs, field, newData, args){
  291. totalJobs.jobsArr.forEach(function(job){
  292. //todo:整合代码
  293. if(field === 'content'&& newData === job.data.content){
  294. console.log('ECreate1');
  295. //isExist = true;
  296. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data);
  297. if(!controller.tree.selected.jobs){
  298. controller.tree.selected.jobs = new Array();
  299. }
  300. controller.tree.selected.jobs.push(job);
  301. sheet.getCell(args.row, 0).value(job.data.code);
  302. sheet.setTag(args.row, 0, job.data.id);
  303. sheet.setTag(args.row, 1, job.data.id);
  304. }
  305. else if(field === 'code' && newData === job.data.code){
  306. console.log('ECreate2');
  307. //isExist = true;
  308. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data);
  309. if(!controller.tree.selected.jobs){
  310. controller.tree.selected.jobs = new Array();
  311. }
  312. controller.tree.selected.jobs.push(job);
  313. sheet.getCell(args.row, 1).value(job.data.content);
  314. sheet.setTag(args.row, 0, job.data.id);
  315. sheet.setTag(args.row, 1, job.data.id);
  316. }
  317. });
  318. },
  319. createNew: function(maxNumber, sheet, controller, totalJobs, field, newData, args){
  320. console.log('notEcreate');
  321. if(field === 'content'){
  322. maxNumber++;
  323. jobsAjax.createJobContent(billsLibId, field, newData, maxNumber, function(id){
  324. var newJobData, newJob;
  325. newJobData = {id: id, content: newData, code: maxNumber};
  326. newJob = createObj.newJob(newJobData);
  327. totalJobs.jobs[totalJobs.prefix + id] = newJob;
  328. totalJobs.jobsArr.push(newJob);
  329. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
  330. if(!controller.tree.selected.jobs){
  331. controller.tree.selected.jobs = new Array();
  332. }
  333. controller.tree.selected.jobs.push(newJob);
  334. sheet.setTag(args.row, 0, id);
  335. sheet.setTag(args.row, 1, id);
  336. });
  337. }
  338. else {
  339. sheet.getCell(args.row, args.col).value('');
  340. }
  341. },
  342. createInit: function(sheet, controller, totalJobs, field, newData, args){
  343. console.log('0create '+totalJobs.jobsArr.length);
  344. //new----------------
  345. if(field === 'content'){
  346. jobsAjax.createJobContent(billsLibId, field, newData, 1, function(id){
  347. var newJobData, newJob;
  348. newJobData = {id: id, content: newData, code: 1};
  349. newJob = createObj.newJob(newJobData);
  350. totalJobs.jobs[totalJobs.prefix + id] = newJob;
  351. totalJobs.jobsArr.push(newJob);
  352. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
  353. if(!controller.tree.selected.jobs){
  354. controller.tree.selected.jobs = new Array();
  355. }
  356. controller.tree.selected.jobs.push(newJob);
  357. sheet.setTag(args.row, 0, id);
  358. sheet.setTag(args.row, 1, id);
  359. });
  360. }
  361. else {
  362. sheet.getCell(args.row, args.col).value('');
  363. }
  364. },
  365. update: function(maxNumber, sheet, controller, totalJobs, field, newData, id, isExist){
  366. //1.更新后的数据存在总表则引用总表,不存在则新增 2.原数据有多个引用,
  367. var index;
  368. controller.tree.selected.jobs.forEach(function(job){
  369. if(job.data.id === id){
  370. index = controller.tree.selected.jobs.indexOf(job);
  371. controller.tree.selected.jobs.splice(index ,1);
  372. }
  373. });
  374. if(isExist){
  375. totalJobs.forEach(function(job){
  376. if(field === 'code' && job.data[field] === newData){
  377. controller.tree.selected.jobs.splice(index, 0, job);
  378. var newJobData = {id: job.data.id, code: newData, content: job.data.content}
  379. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newJobData, 'jobs');
  380. sheet.getCell(args.row, 1).value(job.data.content);
  381. sheet.setTag(args.row, 0, job.data.id);
  382. sheet.setTag(args.row, 1, job.data.id);
  383. }
  384. if(field === 'content' && job.data[field] === newData){
  385. controller.tree.selected.jobs.splice(index, 0, job);
  386. var newJobData = {id: job.data.id, code: job.data.code, content: newData}
  387. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newJobData, 'jobs');
  388. sheet.getCell(args.row, 0).value(job.data.code);
  389. sheet.setTag(args.row, 0, job.data.id);
  390. sheet.setTag(args.row, 1, job.data.id);
  391. }
  392. });
  393. }
  394. else{
  395. //jobsController.createNew(maxNumber, sheet, controller, totalJobs, field, newData, args);
  396. if(field === 'content'){
  397. maxNumber++;
  398. jobsAjax.createJobContent(billsLibId, field, newData, maxNumber, function(newId){
  399. var newJobData, newJob;
  400. newJobData = {id: newId, content: newData, code: maxNumber};
  401. newJob = createObj.newJob(newJobData);
  402. totalJobs.jobs[totalJobs.prefix + newId] = newJob;
  403. totalJobs.jobsArr.push(newJob);
  404. billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newJobData, 'jobs');
  405. if(!controller.tree.selected.jobs){
  406. controller.tree.selected.jobs = new Array();
  407. }
  408. controller.tree.selected.jobs.splice(index, 0, newJob);
  409. sheet.setTag(args.row, 0, newId);
  410. sheet.setTag(args.row, 1, newId);
  411. });
  412. }
  413. else {
  414. sheet.getCell(args.row, args.col).value(orgData);
  415. }
  416. }
  417. },
  418. delete: function(id){
  419. }
  420. };
  421. var itemsController = {
  422. editData: function(controller, sheet, totalItems, setting){
  423. var orgData;
  424. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  425. orgData = sheet.getCell(args.row, args.col).value();
  426. });
  427. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  428. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  429. setting.cols.forEach(function (col, idx) {
  430. if (args.col === idx) {
  431. field = col.data.field;
  432. }
  433. });
  434. if (controller.tree.selected) {
  435. var isExist = false;
  436. var isRepeat = false;
  437. //isRepeat?
  438. if (controller.tree.selected.items) {
  439. controller.tree.selected.items.forEach(function (item) {
  440. if (item.data[field] === newData && id !== item.data.id) {
  441. isRepeat = true;
  442. }
  443. });
  444. }
  445. //create
  446. if(!id && newData && !isRepeat){
  447. if(totalItems.itemsArr.length > 0){
  448. itemsController.createExist(sheet, controller, totalItems, field, newData, isExist, args);
  449. }
  450. else {
  451. itemsController.createInit(sheet, controller, totalItems, field, newData, args);
  452. }
  453. }
  454. //update
  455. else if(id && newData !== orgData && !isRepeat){
  456. itemsController.update(controller, totalItems, field, newData, id);
  457. }
  458. //处理重复
  459. if(isRepeat){
  460. //todo:redirect focus
  461. if(id && newData){
  462. console.log('isRepeat1 orgData:'+orgData);
  463. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgData);
  464. }
  465. else {
  466. console.log('isRepeat2');
  467. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  468. }
  469. }
  470. }
  471. });
  472. },
  473. createExist: function(sheet, controller, totalItems, field, newData, isExist, args){
  474. totalItems.itemsArr.forEach(function(item){
  475. //todo:整合代码
  476. if(field === 'content'&& newData === item.data.content){
  477. console.log('ECreate1');
  478. isExist = true;
  479. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data);
  480. if(!controller.tree.selected.items){
  481. controller.tree.selected.items = new Array();
  482. }
  483. controller.tree.selected.items.push(item);
  484. sheet.getCell(args.row, 0).value(item.data.code);
  485. sheet.setTag(args.row, 0, item.data.id);
  486. sheet.setTag(args.row, 1, item.data.id);
  487. }
  488. else if(field === 'code' && newData === item.data.code){
  489. console.log('ECreate2');
  490. isExist = true;
  491. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data);
  492. if(!controller.tree.selected.items){
  493. controller.tree.selected.items = new Array();
  494. }
  495. controller.tree.selected.items.push(item);
  496. sheet.getCell(args.row, 1).value(item.data.content);
  497. sheet.setTag(args.row, 0, item.data.id);
  498. sheet.setTag(args.row, 1, item.data.id);
  499. }
  500. });
  501. if(!isExist){
  502. console.log('notEcreate');
  503. itemsAjax.createItemCharacter(billsLibId, field, newData, function(id){
  504. var newItemData, newItem;
  505. if(field === 'code'){
  506. newItemData = {id: id, code: newData, content: ''};
  507. }
  508. else {
  509. newItemData = {id: id, content: newData, code: ''};
  510. }
  511. newItem = createObj.newItem(newItemData);
  512. totalItems.items[totalItems.prefix + id] = newItem;
  513. totalItems.itemsArr.push(newItem);
  514. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', newItemData);
  515. if(!controller.tree.selected.items){
  516. controller.tree.selected.items = new Array();
  517. }
  518. controller.tree.selected.items.push(newItem);
  519. sheet.setTag(args.row, 0, id);
  520. sheet.setTag(args.row, 1, id);
  521. });
  522. }
  523. },
  524. createNew: function(sheet, controller, totalItems, field, newData, args){
  525. console.log('0create '+totalItems.itemsArr.length);
  526. itemsAjax.createItemCharacter(billsLibId, field, newData, function(id){
  527. var newItemData, newItem;
  528. if(field === 'code'){
  529. newItemData = {id: id, code: newData, content: ''};
  530. }
  531. else {
  532. newItemData = {id: id, content: newData, code: ''};
  533. }
  534. newItem = createObj.newItem(newItemData);
  535. totalItems.items[totalItems.prefix + id] = newItem;
  536. totalItems.itemsArr.push(newItem);
  537. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', newItemData);
  538. if(!controller.tree.selected.items){
  539. controller.tree.selected.items = new Array();
  540. }
  541. controller.tree.selected.items.push(newItem);
  542. sheet.setTag(args.row, 0, id);
  543. sheet.setTag(args.row, 1, id);
  544. });
  545. },
  546. update: function(controller, totalItems, field, newData, id){
  547. console.log('update');
  548. var ids = totalItems.getUpdateIds(controller.tree.items, id);
  549. totalItems.items[totalItems.prefix + id].data[field] = newData;
  550. itemsAjax.updateItemCharacter(id, field, newData);
  551. billsAjax.updateBillsArr(billsLibId, ids, field, id, newData, 'items');
  552. },
  553. delete: function(id){
  554. }
  555. };
  556. /*function jobsController(controller, sheet, totalJobs, setting){
  557. var orgData;
  558. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  559. orgData = sheet.getCell(args.row, args.col).value();
  560. });
  561. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  562. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col) ;
  563. setting.cols.forEach(function(col, idx){
  564. if(args.col === idx){
  565. field = col.data.field;
  566. }
  567. });
  568. if(controller.tree.selected){
  569. var isExist = false;
  570. var isRepeat = false;
  571. //isRepeat?
  572. if(controller.tree.selected.jobs){
  573. controller.tree.selected.jobs.forEach(function(job){
  574. if(job.data[field] === newData && id !== job.data.id){
  575. isRepeat = true;
  576. }
  577. });
  578. }
  579. //create
  580. if(!id && newData && !isRepeat){
  581. if(totalJobs.jobsArr.length > 0){
  582. //spl==========================================================
  583. totalJobs.jobsArr.forEach(function(job){
  584. //todo:整合代码
  585. if(field === 'content'&& newData === job.data.content){
  586. console.log('ECreate1');
  587. isExist = true;
  588. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data);
  589. if(!controller.tree.selected.jobs){
  590. controller.tree.selected.jobs = new Array();
  591. }
  592. controller.tree.selected.jobs.push(job);
  593. sheet.getCell(args.row, 0).value(job.data.code);
  594. sheet.setTag(args.row, 0, job.data.id);
  595. sheet.setTag(args.row, 1, job.data.id);
  596. }
  597. else if(field === 'code' && newData === job.data.code){
  598. console.log('ECreate2');
  599. isExist = true;
  600. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data);
  601. if(!controller.tree.selected.jobs){
  602. controller.tree.selected.jobs = new Array();
  603. }
  604. controller.tree.selected.jobs.push(job);
  605. sheet.getCell(args.row, 1).value(job.data.content);
  606. sheet.setTag(args.row, 0, job.data.id);
  607. sheet.setTag(args.row, 1, job.data.id);
  608. }
  609. });
  610. if(!isExist){
  611. console.log('notEcreate');
  612. jobsAjax.createJobContent(billsLibId, field, newData, function(id){
  613. var newJobData, newJob;
  614. if(field === 'code'){
  615. newJobData = {id: id, code: newData, content: ''};
  616. }
  617. else {
  618. newJobData = {id: id, content: newData, code: ''};
  619. }
  620. newJob = new Job(newJobData);
  621. totalJobs.jobs[totalJobs.prefix + id] = newJob;
  622. totalJobs.jobsArr.push(newJob);
  623. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
  624. if(!controller.tree.selected.jobs){
  625. controller.tree.selected.jobs = new Array();
  626. }
  627. controller.tree.selected.jobs.push(newJob);
  628. sheet.setTag(args.row, 0, id);
  629. sheet.setTag(args.row, 1, id);
  630. });
  631. //spl==========================================================
  632. }
  633. }
  634. else {
  635. //spl==========================================================
  636. console.log('0create '+totalJobs.jobsArr.length);
  637. jobsAjax.createJobContent(billsLibId, field, newData, function(id){
  638. var newJobData, newJob;
  639. if(field === 'code'){
  640. newJobData = {id: id, code: newData, content: ''};
  641. }
  642. else {
  643. newJobData = {id: id, content: newData, code: ''};
  644. }
  645. newJob = new Job(newJobData);
  646. totalJobs.jobs[totalJobs.prefix + id] = newJob;
  647. totalJobs.jobsArr.push(newJob);
  648. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
  649. if(!controller.tree.selected.jobs){
  650. controller.tree.selected.jobs = new Array();
  651. }
  652. controller.tree.selected.jobs.push(newJob);
  653. sheet.setTag(args.row, 0, id);
  654. sheet.setTag(args.row, 1, id);
  655. });
  656. //spl==========================================================
  657. }
  658. }
  659. //update
  660. else if(id && newData !== orgData && !isRepeat){
  661. //spl==========================================================
  662. console.log('update');
  663. var ids = totalJobs.getUpdateIds(controller.tree.items, id);
  664. totalJobs.jobs[totalJobs.prefix + id].data[field] = newData;
  665. jobsAjax.updateJobContent(id, field, newData);
  666. billsAjax.updateBillsArr(billsLibId, ids, field, id, newData);
  667. //spl==========================================================
  668. }
  669. if(isRepeat){
  670. //todo:redirect focus
  671. if(id && newData){
  672. console.log('isRepeat1 orgData:'+orgData);
  673. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgData);
  674. }
  675. else {
  676. console.log('isRepeat2');
  677. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  678. }
  679. }
  680. //delete
  681. }
  682. });
  683. }*/