db_controller.js 102 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387
  1. /**
  2. * Created by vian on 2017/4/12.
  3. */
  4. var dbController = {
  5. insert: function(controller, btn){
  6. tools.btnClose(btn);
  7. btn.attr('doing', 'true');
  8. if(controller.tree.items.length === 0){
  9. controller.tree.maxNodeID(0);
  10. let newNodeId = controller.tree.newNodeID();
  11. billsAjax.createBills(userAccount, billsLibId, newNodeId, -1 , -1, null, function(){
  12. controller.insert();
  13. controller.tree.selected.jobs = new Array();
  14. controller.tree.selected.items = new Array();
  15. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
  16. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  17. tools.btnAction(btn);
  18. btn.attr('doing', 'false');
  19. });
  20. }
  21. else {
  22. let node = controller.tree.selected;
  23. if(node){
  24. var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID();
  25. let newNodeId = controller.tree.newNodeID();
  26. let updatePreData = {ID: updateId, NextSiblingID: newNodeId};
  27. billsAjax.createBills(userAccount, billsLibId, newNodeId, createpid, createnid, updatePreData, function(){
  28. controller.insert();
  29. controller.tree.selected.jobs = new Array();
  30. controller.tree.selected.items = new Array();
  31. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
  32. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  33. tools.btnAction(btn);
  34. btn.attr('doing', 'false');
  35. });
  36. }
  37. else {
  38. let updateNode = controller.tree.roots[controller.tree.roots.length - 1];
  39. let updateId = updateNode.getID();
  40. let newNodeId = controller.tree.newNodeID();
  41. let updatePreData = {ID: updateId, NextSiblingID: newNodeId};
  42. billsAjax.createBills(userAccount, billsLibId, newNodeId, -1, -1, updatePreData, function(){
  43. controller.insert();
  44. controller.tree.selected.jobs = new Array();
  45. controller.tree.selected.items = new Array();
  46. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
  47. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  48. tools.btnAction(btn);
  49. btn.attr('doing', 'false');
  50. });
  51. }
  52. }
  53. },
  54. upLevel: function(controller, btn){
  55. tools.btnClose(btn);
  56. btn.attr('doing', 'true');
  57. var node = controller.tree.selected;
  58. var ids = [];
  59. var updateData = [];
  60. var getNextSibling = function(node){
  61. if(node.nextSibling){
  62. ids.push(node.getNextSiblingID());
  63. getNextSibling(node.nextSibling);
  64. }
  65. }
  66. //node
  67. if(node){
  68. if(node.parent){
  69. let updateA = {
  70. ID: node.getID(),
  71. ParentID: node.parent.getParentID(),
  72. NextSiblingID: node.parent.getNextSiblingID(),
  73. type: 'oprNode'
  74. };
  75. updateData.push(updateA);
  76. //parent
  77. let updateB = {
  78. ID: node.getParentID(),
  79. NextSiblingID: node.getID(),
  80. type: 'parentNode'
  81. }
  82. updateData.push(updateB);
  83. if(node.nextSibling){
  84. getNextSibling(node);
  85. let updateC = {
  86. ID: ids,
  87. ParentID: node.getID(),
  88. type: 'nextSiblingNode'
  89. }
  90. updateData.push(updateC);
  91. }
  92. if(node.preSibling){
  93. let updateD = {
  94. ID: node.preSibling.getID(),
  95. NextSiblingID: -1,
  96. type: 'preSiblingNode'
  97. }
  98. updateData.push(updateD);
  99. }
  100. billsAjax.upLevel(userAccount, billsLibId, updateData, function(){
  101. tools.btnAction(btn);
  102. btn.attr('doing', 'false');
  103. controller.upLevel();
  104. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  105. });
  106. //rechargeController.createRecharge(controller.tree.selected);
  107. }
  108. }
  109. },
  110. downLevel: function(controller, btn){
  111. tools.btnClose(btn);
  112. btn.attr('doing', 'true');
  113. var node = controller.tree.selected;
  114. var updateData = [];
  115. if(node){
  116. if(node.preSibling){
  117. var updateA = {
  118. ID: node.preSibling.getID(),
  119. NextSiblingID: node.getNextSiblingID(),
  120. type: 'preSiblingNode'
  121. };
  122. var updateB = {
  123. ID: node.getID(),
  124. ParentID: node.preSibling.getID(),
  125. NextSiblingID: -1,
  126. type: 'oprNode'
  127. };
  128. updateData.push(updateA);
  129. updateData.push(updateB);
  130. if(node.preSibling.children.length > 0){
  131. var updateC = {
  132. ID: node.preSibling.children[node.preSibling.children.length -1].getID(),
  133. NextSiblingID: node.getID(),
  134. type: 'preChildren'
  135. }
  136. updateData.push(updateC);
  137. }
  138. billsAjax.downLevel(userAccount, billsLibId, updateData, function(){
  139. tools.btnAction(btn);
  140. btn.attr('doing', 'false');
  141. controller.downLevel();
  142. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  143. });
  144. //rechargeController.createRecharge(controller.tree.selected);
  145. }
  146. }
  147. },
  148. delete: function(controller, btn, totalJobs, totalItems){
  149. tools.btnClose(btn);
  150. btn.attr('doing', 'true');
  151. console.log(`beforeNodeId :${controller.tree.selected.getID()}`);
  152. var node = controller.tree.selected;
  153. if(node){
  154. var deleteIds = [];
  155. var getDeleteIds = function(node){
  156. if(node){
  157. deleteIds.push(node.getID());
  158. var length = node.children.length;
  159. if(length > 0){
  160. for(var i=0; i<length; i++){
  161. getDeleteIds(node.children[i]);
  162. }
  163. }
  164. }
  165. };
  166. getDeleteIds(node);
  167. let updateNode = node.preSibling ? {ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()} : null;
  168. billsAjax.deleteBills(userAccount, billsLibId, deleteIds, updateNode, function(){
  169. tools.btnAction(btn);
  170. btn.attr('doing', 'false');
  171. controller.delete();
  172. //to solve refresh after deleted
  173. let jobsSheet = jobsSpread.getActiveSheet();
  174. let itemsSheet = itemsSpread.getActiveSheet();
  175. let nowNode = controller.tree.selected ;
  176. if(nowNode){
  177. let jobs = controller.tree.selected.jobs;
  178. $('#exampleTextarea').val(controller.tree.selected.data.recharge);
  179. setSheet.setMaxRowCount(jobsSheet, jobs);
  180. if(jobs.length > 0){
  181. tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false);
  182. orgJobData = jobsSheet.getValue(0, 0);
  183. }
  184. let items = controller.tree.selected.items;
  185. setSheet.setMaxRowCount(itemsSheet, items);
  186. if(items.length > 0){
  187. tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false);
  188. orgItemData = itemsSheet.getValue(0, 0);
  189. }
  190. }
  191. else {
  192. tools.clearData(jobsSheet);
  193. tools.clearData(itemsSheet);
  194. $('#exampleTextarea').val("");
  195. }
  196. sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
  197. sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
  198. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  199. //to solve refresh after deleted
  200. });
  201. }
  202. },
  203. upMove: function(controller, btn){
  204. tools.btnClose(btn);
  205. btn.attr('doing', 'true');
  206. var node = controller.tree.selected;
  207. var updateData = [];
  208. if(node){
  209. if(node.preSibling){
  210. let updateA = {
  211. ID: node.preSibling.getID(),
  212. NextSiblingID: node.getNextSiblingID()
  213. };
  214. let updateB = {
  215. ID: node.getID(),
  216. NextSiblingID: node.preSibling.getID()
  217. };
  218. updateData.push(updateA);
  219. updateData.push(updateB);
  220. if(node.preSibling.preSibling){
  221. let updateC = {
  222. ID: node.preSibling.preSibling.getID(),
  223. NextSiblingID: node.getID()
  224. }
  225. updateData.push(updateC);
  226. }
  227. billsAjax.upMove(userAccount, billsLibId, updateData, function(){
  228. tools.btnAction(btn);
  229. btn.attr('doing', 'false');
  230. controller.upMove();
  231. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  232. });
  233. }
  234. }
  235. },
  236. downMove: function(controller, btn){
  237. tools.btnClose(btn);
  238. btn.attr('doing', 'true');
  239. var node = controller.tree.selected;
  240. var updateData = [];
  241. if(node){
  242. if(node.nextSibling){
  243. var updateA = {
  244. ID: node.getNextSiblingID(),
  245. NextSiblingID: node.getID(),
  246. type: 'nextSiblingNode'
  247. };
  248. var updateB = {
  249. ID: node.getID(),
  250. NextSiblingID: node.nextSibling.getNextSiblingID(),
  251. type: 'oprNode'
  252. };
  253. updateData.push(updateA);
  254. updateData.push(updateB);
  255. if(node.preSibling){
  256. var updateC = {
  257. ID: node.preSibling.getID(),
  258. NextSiblingID: node.getNextSiblingID(),
  259. type: 'preSiblingNode'
  260. };
  261. updateData.push(updateC);
  262. }
  263. billsAjax.downMove(userAccount, billsLibId, updateData);
  264. tools.btnAction(btn);
  265. btn.attr('doing', 'false');
  266. controller.downMove();
  267. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  268. }
  269. }
  270. },
  271. editData: function(controller){
  272. controller.sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  273. var node = controller.tree.selected, updateId, field;
  274. if(node){
  275. updateId = node.getID();
  276. billsLibSetting.cols.forEach(function(col, idx){
  277. if(args.col === idx){
  278. field = col.data.field;
  279. node.data[field] = args.editingText;
  280. sheetBillsDatas.datasIdx['rowIdx'+ args.row][field] = args.editingText;
  281. }
  282. });
  283. billsAjax.updateBills(userAccount, billsLibId, updateId, field, args.editingText);
  284. //sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  285. }
  286. else {
  287. args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  288. }
  289. });
  290. }
  291. };
  292. var createObj = {
  293. newJob: function(data){
  294. var Job = function(data){
  295. this.data = data;
  296. //count = 0则没有被引用了
  297. this.count = 0;
  298. };
  299. return new Job(data);
  300. },
  301. newJobs: function(){
  302. var TotalJobs = function(){
  303. this.jobs = {};
  304. this.jobsArr = [];
  305. this.prefix = '_id';
  306. };
  307. TotalJobs.prototype.findJob = function(id){
  308. return this.jobs[this.prefix + id] ? this.jobs[this.prefix + id] : null;
  309. }
  310. TotalJobs.prototype.loadJobs = function (nodes, datas){
  311. var me = this;
  312. datas.forEach(function(jobData){
  313. var job = createObj.newJob(jobData);
  314. me.jobs[me.prefix + jobData.id] = job;
  315. me.jobsArr.push(job);
  316. });
  317. if(nodes){
  318. nodes.forEach(function(node){
  319. node.jobs = new Array();
  320. node.data.jobs.forEach(function(obj){
  321. if(me.jobs[me.prefix + obj.id]){
  322. node.jobs.push({job: me.jobs[me.prefix + obj.id], serialNo: obj.serialNo});
  323. me.jobs[me.prefix + obj.id].count ++;
  324. }
  325. else {
  326. node.data.jobs.splice(node.data.jobs.indexOf(obj), 1);
  327. }
  328. });
  329. });
  330. }
  331. };
  332. TotalJobs.prototype.getUpdateIds = function(nodes, repeatId){
  333. var ids = [];
  334. nodes.forEach(function(node){
  335. node.jobs.forEach(function(job){
  336. if(job.data.id === repeatId){
  337. ids.push(node.getID());
  338. }
  339. });
  340. });
  341. return ids;
  342. };
  343. return new TotalJobs();
  344. },
  345. newItem: function(data){
  346. var Item = function(data){
  347. this.data = data;
  348. this.count = 0;
  349. };
  350. return new Item(data);
  351. },
  352. newItems: function(){
  353. var TotalItems = function(){
  354. this.items = {};
  355. this.itemsArr = [];
  356. this.prefix = '_id';
  357. };
  358. TotalItems.prototype.findItem = function(id){
  359. return this.items[this.prefix + id] ? this.items[this.prefix + id] : null;
  360. }
  361. TotalItems.prototype.loadItems = function (nodes, datas){
  362. var me = this;
  363. datas.forEach(function(itemData){
  364. var item = createObj.newItem(itemData);
  365. me.items[me.prefix + itemData.id] = item;
  366. me.itemsArr.push(item);
  367. });
  368. if(nodes){
  369. nodes.forEach(function(node){
  370. node.items = new Array();
  371. node.data.items.forEach(function(obj){
  372. if(me.items[me.prefix + obj.id]){
  373. node.items.push({item: me.items[me.prefix + obj.id], serialNo: obj.serialNo});
  374. me.items[me.prefix + obj.id].count ++;
  375. }
  376. else {
  377. node.data.items.splice(node.data.items.indexOf(obj), 1);
  378. }
  379. });
  380. });
  381. }
  382. };
  383. TotalItems.prototype.getUpdateIds = function(nodes, repeatId){
  384. var ids = [];
  385. nodes.forEach(function(node){
  386. node.items.forEach(function(item){
  387. if(item.data.id === repeatId){
  388. ids.push(node.getID());
  389. }
  390. });
  391. });
  392. return ids;
  393. };
  394. return new TotalItems();
  395. }
  396. };
  397. var tools = {
  398. alertOpr: function(args, sheet, txt, arr, field){
  399. $('#alertTxt').text(txt);
  400. $('#alertBtn').click();
  401. sheet.options.isProtected = true;
  402. let dataCode = args.col === 0 ? 'code' : 'content';
  403. let orgCode = args.row < arr.length ? arr[args.row][field].data[dataCode] : '';
  404. $('#alertCof').unbind('click');
  405. $('#alertCls').unbind('click');
  406. $('#alertCls').click(function () {
  407. sheet.options.isProtected = false;
  408. sheet.getCell(args.row, args.col).value(orgCode);
  409. });
  410. $('#alertCof').click(function () {
  411. sheet.options.isProtected = false;
  412. sheet.getCell(args.row, args.col).value(orgCode);
  413. });
  414. },
  415. alertTotalOpr: function (args, txt, arr) {
  416. $('#alertTxt').text(txt);
  417. $('#alertBtn').click();
  418. args.sheet.options.isProtected = true;
  419. let dataCode = args.col === 0 ? 'code' : 'content';
  420. let orgCode = args.row < arr.length ? arr[args.row].data[dataCode] : '';
  421. $('#alertCof').unbind('click');
  422. $('#alertCls').unbind('click');
  423. $('#alertCls').click(function () {
  424. args.sheet.options.isProtected = false;
  425. args.sheet.getCell(args.row, args.col).value(orgCode);
  426. });
  427. $('#alertCof').click(function () {
  428. console.log(args.col);
  429. args.sheet.options.isProtected = false;
  430. args.sheet.getCell(args.row, args.col).value(orgCode);
  431. });
  432. },
  433. //ref sheet up&down Move
  434. canUpMove: function (selected, arr) {
  435. return selected && arr.indexOf(selected) > 0 && arr.indexOf(selected) !== -1 ? true: false;
  436. },
  437. canDownMove: function (selected, arr) {
  438. return selected && arr.indexOf(selected) < arr.length -1 && arr.indexOf(selected) !== -1 ? true: false;
  439. },
  440. btnClose: function (btn) {
  441. btn.css("opacity", "0.2");
  442. btn.addClass("disabled");
  443. //btn.attr(attr, 'true');
  444. },
  445. btnAction: function (btn) {
  446. btn.css("opacity", "");
  447. btn.removeClass("disabled");
  448. //btn.attr(attr, 'false');
  449. },
  450. isExist: function (totalArr, field, newData, orgData){
  451. var isExist = false;
  452. if(totalArr.length > 0){
  453. totalArr.forEach(function(item){
  454. if(item.data[field] == newData && newData !== orgData){
  455. isExist = true;
  456. }
  457. });
  458. }
  459. return isExist;
  460. },
  461. isRepeat: function(arr, field, newData, ref, classify){
  462. var isRepeat = false;
  463. if(classify){
  464. if(arr){
  465. arr.forEach(function(item){
  466. if(ref === 'reference' && item[classify].data[field] == newData){
  467. isRepeat = true;
  468. }
  469. else if(ref === 'document' && item[field] === newData){
  470. isRepeat = true;
  471. }
  472. });
  473. }
  474. }
  475. else {
  476. if(arr){
  477. arr.forEach(function(item){
  478. if(ref === 'reference' && item.data[field] == newData){
  479. isRepeat = true;
  480. }
  481. else if(ref === 'document' && item[field] === newData){
  482. isRepeat = true;
  483. }
  484. });
  485. }
  486. }
  487. return isRepeat;
  488. },
  489. addAttr: function(attr){
  490. if(!attr){
  491. attr = new Array();
  492. }
  493. },
  494. isEmptyObj: function(obj){
  495. let t;
  496. for(t in obj)
  497. return !1;
  498. return !0;
  499. },
  500. reSetCell: function(sheet, rowIdx, colIdx, value, id){
  501. if(value && colIdx!== null){
  502. sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value);
  503. }
  504. sheet.setTag(rowIdx, 0, id);
  505. sheet.setTag(rowIdx, 1, id);
  506. },
  507. getIndex: function(arr, id, classify){
  508. var index;
  509. arr.forEach(function(item){
  510. if(item[classify].data.id === id){
  511. index = arr.indexOf(item);
  512. }
  513. });
  514. return index;
  515. },
  516. getObj: function(arr, id, classify){
  517. for(let i=0; i<arr.length; i++){
  518. if(arr[i][classify].data.id === id){
  519. return arr[i];
  520. }
  521. }
  522. return null;
  523. },
  524. getNewCode: function(totalObj, classify){
  525. let arr;
  526. if(classify === 'jobs'){
  527. arr = totalObj.jobsArr;
  528. }
  529. else {
  530. arr = totalObj.itemsArr;
  531. }
  532. tools.resort(arr, 'code', false);
  533. return arr.length > 0 ? arr[arr.length - 1].data.code : 0;
  534. },
  535. getValidDatas: function(sheet, setting, args){
  536. let validDatas = [];
  537. const colLen = 4;
  538. let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
  539. let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
  540. for(let i =orgRow; i<=maxRow; i++){
  541. let validData = {};
  542. for(let j= orgCol; j<=maxCol; j++){
  543. let value = sheet.getValue(i, j);
  544. if(value){
  545. setting.cols.forEach(function(col, colIdx){
  546. if(colIdx === j){
  547. validData[col.data.field] = value;
  548. }
  549. });
  550. }
  551. }
  552. if(!tools.isEmptyObj(validData)){
  553. validDatas.push(validData);
  554. }
  555. }
  556. //---------------------------------------
  557. /*for(let i=orgRow; i<= maxRow; i++){
  558. if(tools.getValidRow(sheet, i)){
  559. console.log(`validRow: ${i}`);
  560. let validData = {code: '', name: '', unit: '', ruleText: ''};
  561. for(var j=orgCol; j<=maxCol; j++){
  562. let field;
  563. setting.cols.forEach(function(col, colIdx){
  564. if(colIdx === j){
  565. field = col.data.field;
  566. if(sheet.getValue(i, j)){
  567. validData[field] = sheet.getValue(i, j);
  568. }
  569. }
  570. });
  571. //validData[field] = sheet.getValue(i, j);
  572. }
  573. validDatas.push(validData);
  574. }
  575. }*/
  576. return validDatas;
  577. },
  578. getValidRow: function(sheet, rowIdx){
  579. const colCount = 4;
  580. let isValid = false;
  581. for(let i=0; i< colCount; i++){
  582. if(sheet.getValue(rowIdx, i, GC.Spread.Sheets.SheetArea.viewport)){
  583. isValid = true;
  584. }
  585. }
  586. return isValid;
  587. },
  588. getDelDatas: function(controller, totalJobs, totalItems){
  589. let delJobs = controller.tree.selected.jobs,
  590. delItems = controller.tree.selected.items,
  591. delJobsIds = [], delItemsIds = [];
  592. if(delJobs.length > 0){
  593. delJobs.forEach()
  594. }
  595. },
  596. delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){
  597. var delJobs = controller.tree.selected.jobs;
  598. var delItems = controller.tree.selected.items;
  599. var delJobsIds = [];
  600. var delItemsIds = [];
  601. if(delJobs.length > 0){
  602. delJobs.forEach(function(obj){
  603. obj.job.count --;
  604. if(obj.job.count <=0){
  605. totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1);
  606. delJobsIds.push(obj.job.data.id)
  607. }
  608. });
  609. jobsAjax.deleteJobContent(userAccount, billsLibId, delJobsIds);
  610. tools.clearData(jobsSheet);
  611. tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
  612. }
  613. if(delItems.length > 0){
  614. delItems.forEach(function(obj){
  615. obj.item.count --;
  616. if(obj.item.count <=0){
  617. totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1);
  618. delItemsIds.push(obj.item.data.id)
  619. }
  620. });
  621. itemsAjax.deleteItemCharacter(userAccount, billsLibId, delItemsIds);
  622. tools.clearData(itemsSheet);
  623. tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true);
  624. }
  625. controller.delete();
  626. },
  627. deleteELes: function (arr, delIds, classifyStr){
  628. var ids = [];
  629. delIds.forEach(function(delId){
  630. arr.forEach(function(ele){
  631. if(ele[classifyStr].data.id === delId){
  632. arr.splice(arr.indexOf(ele), 1);
  633. ele.count--;
  634. /*if(ele.count <= 0){
  635. ids.push(ele.data.id);
  636. }*/
  637. }
  638. });
  639. });
  640. /* if(callback){
  641. callback(ids);
  642. }*/
  643. },
  644. getSerialNo: function(arr){
  645. if(arr.length > 0){
  646. tools.resortSerialNo(arr);
  647. return arr[arr.length - 1].serialNo + 1;
  648. }
  649. return 1;
  650. },
  651. resortSerialNo: function(arr){
  652. function compare(){
  653. return function (a, b){
  654. let valA = a.serialNo,
  655. valB = b.serialNo;
  656. return valA - valB;
  657. }
  658. }
  659. arr.sort(compare());
  660. },
  661. resort: function(arr, attr, isValue){
  662. function compare(attr){
  663. return function (a, b){
  664. var valA, valB;
  665. if(isValue){
  666. valA = a[attr];
  667. valB = a[attr];
  668. }
  669. else {
  670. valA = a.data[attr];
  671. valB = b.data[attr];
  672. }
  673. return valA - valB;
  674. }
  675. }
  676. arr.sort(compare(attr));
  677. },
  678. //update--
  679. orderReshowData: function(sheet, arr, setting, classify, isResort){
  680. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
  681. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
  682. tools.clearData(sheet);
  683. if(arr.length > 0){
  684. sheet.suspendPaint();
  685. setSheet.setMaxRowCount(sheet, arr);
  686. if(isResort){
  687. tools.resortSerialNo(arr);
  688. }
  689. let length = arr.length;
  690. for(let i=0; i<length; i++){
  691. setting.cols.forEach(function(col, colIdx){
  692. sheet.setTag(i, colIdx, arr[i][classify].data.id);
  693. if(arr[i][classify].data[col.data.field]){
  694. sheet.getCell(i, colIdx).value(arr[i][classify].data[col.data.field]);
  695. }
  696. else {
  697. sheet.getCell(i, colIdx).value('');
  698. }
  699. });
  700. }
  701. sheet.resumePaint();
  702. }
  703. },
  704. reshowData: function(sheet, arr, setting, isResort){
  705. sheet.suspendPaint();
  706. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
  707. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
  708. tools.clearData(sheet);
  709. if(isResort){
  710. tools.resort(arr, 'code', false);
  711. }
  712. if(arr.length > 0){
  713. var length = arr.length;
  714. for(var i=0; i<length; i++){
  715. setting.cols.forEach(function(col, colIdx){
  716. sheet.setTag(i, colIdx, arr[i].data.id);
  717. if(arr[i].data[col.data.field]){
  718. sheet.getCell(i, colIdx).value(arr[i].data[col.data.field]);
  719. }
  720. else {
  721. sheet.getCell(i, colIdx).value('');
  722. }
  723. });
  724. }
  725. }
  726. sheet.resumePaint();
  727. },
  728. reshowValue: function(sheet, arr, setting, isResort){
  729. tools.clearData(sheet);
  730. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
  731. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
  732. if(isResort){
  733. //tools.resort(arr, 'code', true);
  734. function myCompareCode(a, b){
  735. let valA = a.code,
  736. valB = b.code;
  737. return valA- valB;
  738. }
  739. arr.sort(myCompareCode);
  740. }
  741. if(arr.length > 0){
  742. sheet.suspendPaint();
  743. var length = arr.length;
  744. for(var i=0; i<length; i++){
  745. setting.cols.forEach(function(col, colIdx){
  746. sheet.setTag(i, colIdx, arr[i].code);
  747. if(arr[i][col.data.field]){
  748. sheet.getCell(i, colIdx).value(arr[i][col.data.field]);
  749. }
  750. else {
  751. sheet.getCell(i, colIdx).value('');
  752. }
  753. });
  754. }
  755. sheet.resumePaint();
  756. }
  757. },
  758. clearData: function(sheet){
  759. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
  760. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.tag);
  761. },
  762. getRoot: function(node){
  763. return node.parent ? tools.getRoot(node.parent) : node;
  764. },
  765. getBillsIds: function(callback){
  766. billsAjax.getBills(billsLibId, function(datas){
  767. var ids = [];
  768. datas.forEach(function(data){
  769. ids.push(data.ID);
  770. });
  771. if(callback){
  772. callback(ids);
  773. }
  774. });
  775. },
  776. delIds: function(sheet){
  777. var ids = [];
  778. var sels = sheet.getSelections();
  779. sels.forEach(function(sel){
  780. var orgRow = sel.row, rowCount = sel.rowCount, colCount = sel.colCount;
  781. var orgCol = sel.col === -1 ? 0 : sel.col;
  782. var maxRow = orgRow + rowCount - 1;
  783. for(var i=orgRow; i<= maxRow; i++){
  784. if(sheet.getTag(i, orgCol)){
  785. ids.push(sheet.getTag(i, orgCol));
  786. }
  787. }
  788. });
  789. return ids;
  790. },
  791. redirect: function(billsLibId, newHref){
  792. mainAjax.getABillsLib(billsLibId, function(result){
  793. if(result.length === 0){
  794. window.location.href = newHref;
  795. }
  796. });
  797. },
  798. uniqArr: function (arr) {
  799. let newArr = [];
  800. for(let i=0; i<arr.length; i++){
  801. if(newArr.indexOf(arr[i]) === -1){
  802. newArr.push(arr[i]);
  803. }
  804. }
  805. return newArr;
  806. },
  807. uniqObjArr: function(arr){
  808. let uniqArr = [];
  809. for(let i =0; i< arr.length; i++){
  810. let uniqLen = uniqArr.length;
  811. let flag = false;
  812. if(uniqLen > 0){
  813. for(let j=0; j< uniqLen; j++){
  814. if(arr[i].field === uniqArr[j].field && arr[i].data === uniqArr[j].data){
  815. flag = true;
  816. //uniqArr.push(arr[i]);
  817. }
  818. }
  819. if(!flag){
  820. uniqArr.push(arr[i]);
  821. }
  822. }
  823. else {
  824. uniqArr.push(arr[i])
  825. }
  826. }
  827. return uniqArr;
  828. },
  829. resetRowIdx: function(arr, beginRow){
  830. let rowIdx = beginRow;
  831. for(let i=0; i< arr.length; i++){
  832. if(arr[i].rowIdx !== rowIdx){
  833. rowIdx++;
  834. arr[i].rowIdx = rowIdx;
  835. }
  836. }
  837. },
  838. getsheetDatas: function(sheet, classify, controller){
  839. let rowCount = sheet.getRowCount();
  840. const colIdx = 1;
  841. let sheetDatas;
  842. if(classify === 'total'){
  843. sheetDatas = [];
  844. for(let i=0; i<rowCount; i++){
  845. for(let j=0; j<= 1; j++){
  846. let data = sheet.getCell(i, j).value, id = sheet.getTag(i, j);
  847. if(data && id){
  848. let unitData ={
  849. rowIdx: i,
  850. colIdx: j,
  851. data: data,
  852. id: id
  853. };
  854. sheetDatas.push(unitData);
  855. }
  856. }
  857. }
  858. }
  859. else if(classify === 'bills'){
  860. sheetDatas = {datasIdx: {}, datas: []};
  861. for(let i= 0; i< controller.tree.items.length; i++){
  862. let code = sheet.getValue(i, 0), name = sheet.getValue(i, 1),
  863. unit = sheet.getValue(i, 2), ruleText = sheet.getValue(i, 3);
  864. let data = {code: code, name: name, unit: unit, ruleText: ruleText, rowIdx: i};
  865. sheetDatas.datas.push(data);
  866. sheetDatas.datasIdx['rowIdx' + i] = data;
  867. }
  868. }
  869. else{
  870. sheetDatas = [];
  871. for(let i=0; i<rowCount; i++){
  872. let data = sheet.getCell(i, colIdx).value(), id = sheet.getTag(i, colIdx);
  873. if(data && id){
  874. let rowData = {
  875. rowIdx: i,
  876. data: data,
  877. id: id
  878. }
  879. sheetDatas.push(rowData);
  880. }
  881. }
  882. }
  883. return sheetDatas;
  884. },
  885. encapData: function(uncrossedDatas, crossedDatas, controller, totalJobs){
  886. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  887. let updateDatas = [];
  888. let createDatas = [];
  889. let nodeId = controller.tree.selected.getID();
  890. uncrossedDatas.forEach(obj => {
  891. let cnDataObj, ceDataObj, content, jobId;
  892. let isExisit = tools.isExist(totalJobs.jobsArr, 'content', obj.data, null);
  893. let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', obj.data, 'reference', 'job');
  894. if(isExisit && !isRepeat){
  895. totalJobs.jobsArr.forEach(job => {
  896. if(obj.data === job.data.content){
  897. jobId = job.data.id;
  898. }
  899. });
  900. ceDataObj= {
  901. newData: obj.data,
  902. billsLibId: billsLibId,
  903. nodeId: nodeId,
  904. jobId: jobId,
  905. serialNo: obj.serialNo,
  906. type: CreateExist
  907. };
  908. createDatas.push(ceDataObj);
  909. }
  910. if(!isExisit){
  911. maxJobsNumber++;
  912. //currentCountId++;
  913. cnDataObj = {
  914. //id: maxJobsNumber,
  915. billsLibId: billsLibId,
  916. nodeId: nodeId,
  917. newData: obj.data,
  918. code: maxJobsNumber,
  919. serialNo: obj.serialNo,
  920. type: CreateNew
  921. };
  922. createDatas.push(cnDataObj);
  923. }
  924. });
  925. crossedDatas.forEach(cData => {
  926. let ueObj, unObj, newJobId;
  927. let isExisit = tools.isExist(totalJobs.jobsArr, 'content', cData.newData, null);
  928. let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', cData.newData, 'reference', 'job');
  929. if(isExisit && !isRepeat){
  930. totalJobs.jobsArr.forEach(job => {
  931. if(cData.newData === job.data.content){
  932. newJobId = job.data.id;
  933. }
  934. });
  935. ueObj = {
  936. newData: cData.newData,
  937. billsLibId: billsLibId,
  938. nodeId: nodeId,
  939. newJobId: newJobId,
  940. orgJobId: cData.orgId,
  941. serialNo:cData.serialNo,
  942. type: UpdateExist
  943. };
  944. updateDatas.push(ueObj);
  945. }
  946. if(!isExisit && !isRepeat){
  947. maxJobsNumber++;
  948. //currentCountId++;
  949. unObj = {
  950. //newJobId: maxJobsNumber,
  951. billsLibId: billsLibId,
  952. nodeId: nodeId,
  953. newData: cData.newData,
  954. orgJobId: cData.orgId,
  955. code: maxJobsNumber,
  956. serialNo: cData.serialNo,
  957. type: UpdateNew
  958. };
  959. updateDatas.push(unObj);
  960. }
  961. });
  962. let pasteDatas = {
  963. updateDatas: updateDatas,
  964. createDatas: createDatas
  965. };
  966. return pasteDatas;
  967. },
  968. encapItemsData: function(uncrossedDatas, crossedDatas, controller, totalItems){
  969. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  970. let updateDatas = [];
  971. let createDatas = [];
  972. let nodeId = controller.tree.selected.getID();
  973. uncrossedDatas.forEach(obj => {
  974. let cnDataObj, ceDataObj, content,itemId;
  975. let isExisit = tools.isExist(totalItems.itemsArr, 'content', obj.data, null);
  976. let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', obj.data, 'reference', 'item');
  977. if(isExisit && !isRepeat){
  978. totalItems.itemsArr.forEach(item => {
  979. if(obj.data === item.data.content){
  980. itemId = item.data.id;
  981. }
  982. });
  983. ceDataObj= {
  984. newData: obj.data,
  985. billsLibId: billsLibId,
  986. nodeId: nodeId,
  987. itemId: itemId,
  988. serialNo: obj.serialNo,
  989. type: CreateExist
  990. };
  991. createDatas.push(ceDataObj);
  992. }
  993. if(!isExisit){
  994. maxItemsNumber++;
  995. //currentCountId++;
  996. cnDataObj = {
  997. // id: maxItemsNumber,
  998. billsLibId: billsLibId,
  999. nodeId: nodeId,
  1000. newData: obj.data,
  1001. serialNo: obj.serialNo,
  1002. code: maxItemsNumber,
  1003. type: CreateNew
  1004. };
  1005. createDatas.push(cnDataObj);
  1006. }
  1007. });
  1008. crossedDatas.forEach(cData => {
  1009. let ueObj, unObj, newItemId;
  1010. let isExisit = tools.isExist(totalItems.itemsArr, 'content', cData.newData, null);
  1011. let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', cData.newData, 'reference', 'item');
  1012. if(isExisit && !isRepeat){
  1013. totalItems.itemsArr.forEach(item => {
  1014. if(cData.newData === item.data.content){
  1015. newItemId = item.data.id;
  1016. }
  1017. });
  1018. ueObj = {
  1019. newData: cData.newData,
  1020. billsLibId: billsLibId,
  1021. nodeId: nodeId,
  1022. newItemId: newItemId,
  1023. orgItemId: cData.orgId,
  1024. serialNo: cData.serialNo,
  1025. type: UpdateExist
  1026. };
  1027. updateDatas.push(ueObj);
  1028. }
  1029. if(!isExisit && !isRepeat){
  1030. maxItemsNumber++;
  1031. //currentCountId++;
  1032. unObj = {
  1033. // newItemId: maxItemsNumber,
  1034. billsLibId: billsLibId,
  1035. nodeId: nodeId,
  1036. newData: cData.newData,
  1037. orgItemId: cData.orgId,
  1038. code: maxItemsNumber,
  1039. serialNo: cData.serialNo,
  1040. type: UpdateNew
  1041. };
  1042. updateDatas.push(unObj);
  1043. }
  1044. });
  1045. let pasteDatas = {
  1046. updateDatas: updateDatas,
  1047. createDatas: createDatas
  1048. };
  1049. return pasteDatas;
  1050. },
  1051. encapTotalJobsDatas: function(sheet, totalJobs, uncrossedDatas, crossedDatas){
  1052. let pasteDatas;
  1053. let rebuildArr =[];
  1054. if(crossedDatas.length > 0){
  1055. for(let i=0; i< crossedDatas.length; i++){
  1056. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1057. let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, data, 'reference');
  1058. if(isRepeat){
  1059. crossedDatas.splice(i--, 1);
  1060. }
  1061. }
  1062. for(let i=0; i< crossedDatas.length; i++){
  1063. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1064. if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
  1065. crossedDatas.splice(i--, 1);
  1066. }
  1067. }
  1068. }
  1069. if(uncrossedDatas.length > 0){
  1070. for(let i=0; i< uncrossedDatas.length; i++){
  1071. let field = uncrossedDatas[i].field;
  1072. let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, uncrossedDatas[i].data, 'reference');
  1073. if(isRepeat){
  1074. uncrossedDatas.splice(i--, 1);
  1075. }
  1076. }
  1077. for(let i=0; i< uncrossedDatas.length; i++){
  1078. let field = uncrossedDatas[i].field;
  1079. if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
  1080. uncrossedDatas.splice(i--, 1);
  1081. }
  1082. }
  1083. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1084. function myCompare(a, b){
  1085. if(a.rowIdx > b.rowIdx)
  1086. return 1;
  1087. if(a.rowIdx < b.rowIdx)
  1088. return -1;
  1089. return 0;
  1090. }
  1091. function myCompareCode(a, b){
  1092. if(a.code > b.code)
  1093. return -1;
  1094. if(a.code < b.code)
  1095. return 1;
  1096. return 0;
  1097. }
  1098. if(rebuildArr.length > 0){
  1099. rebuildArr.sort(myCompareCode);
  1100. if(rebuildArr[0].code){
  1101. maxJobsNumber = maxJobsNumber + 1 > rebuildArr[0].code ? maxJobsNumber : rebuildArr[0].code;
  1102. }
  1103. rebuildArr.forEach(function(data){
  1104. if(data.type !== 'CreateT' && data.field === 'content' ){
  1105. maxJobsNumber++;
  1106. let code = maxJobsNumber;
  1107. data.code = code;
  1108. }
  1109. });
  1110. }
  1111. //rebuildArr.sort(myCompare);
  1112. }
  1113. //rebuildArr.sort(myCompare);
  1114. pasteDatas = {
  1115. updateDatas: crossedDatas,
  1116. createDatas: rebuildArr
  1117. }
  1118. return pasteDatas;
  1119. },
  1120. encapTotalItemsDatas: function(sheet, totalItems, uncrossedDatas, crossedDatas){
  1121. let pasteDatas;
  1122. let rebuildArr =[];
  1123. if(crossedDatas.length > 0){
  1124. for(let i=0; i< crossedDatas.length; i++){
  1125. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1126. let isRepeat = tools.isRepeat(totalItems.itemsArr, field, data, 'reference');
  1127. if(isRepeat){
  1128. crossedDatas.splice(i--, 1);
  1129. }
  1130. }
  1131. for(let i=0; i< crossedDatas.length; i++){
  1132. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1133. if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
  1134. crossedDatas.splice(i--, 1);
  1135. }
  1136. }
  1137. }
  1138. if(uncrossedDatas.length > 0){
  1139. for(let i=0; i< uncrossedDatas.length; i++){
  1140. let field = uncrossedDatas[i].field;
  1141. let isRepeat = tools.isRepeat(totalItems.itemsArr, field, uncrossedDatas[i].data, 'reference');
  1142. if(isRepeat){
  1143. uncrossedDatas.splice(i--, 1);
  1144. }
  1145. }
  1146. for(let i=0; i< uncrossedDatas.length; i++){
  1147. let field = uncrossedDatas[i].field;
  1148. if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
  1149. uncrossedDatas.splice(i--, 1);
  1150. }
  1151. }
  1152. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1153. function myCompare(a, b){
  1154. if(a.rowIdx > b.rowIdx)
  1155. return 1;
  1156. if(a.rowIdx < b.rowIdx)
  1157. return -1;
  1158. return 0;
  1159. }
  1160. function myCompareCode(a, b){
  1161. if(a.code > b.code)
  1162. return -1;
  1163. if(a.code < b.code)
  1164. return 1;
  1165. return 0;
  1166. }
  1167. //rebuildArr.sort(myCompare);
  1168. if(rebuildArr.length > 0){
  1169. rebuildArr.sort(myCompareCode);
  1170. if(rebuildArr[0].code){
  1171. maxItemsNumber = maxItemsNumber + 1 > rebuildArr[0].code ? maxItemsNumber : rebuildArr[0].code;
  1172. console.log(`maxJobs`);
  1173. console.log(maxItemsNumber);
  1174. }
  1175. rebuildArr.forEach(function(data){
  1176. if(data.type !== 'CreateT' && data.field === 'content' ){
  1177. maxItemsNumber ++;
  1178. let code = maxItemsNumber;
  1179. data.code = code;
  1180. }
  1181. });
  1182. }
  1183. }
  1184. // rebuildArr.sort(myCompare);
  1185. pasteDatas = {
  1186. updateDatas: crossedDatas,
  1187. createDatas: rebuildArr
  1188. }
  1189. return pasteDatas;
  1190. },
  1191. encapValues: function(sheet, totalItems, uncrossedDatas, crossedDatas){
  1192. let rebuildArr =[];
  1193. let rebuildUpdateDatas = [];
  1194. let valuesArr = valueController.getValues(totalItems, selectedId);
  1195. function myCompare(a, b){
  1196. if(a.rowIdx > b.rowIdx)
  1197. return 1;
  1198. if(a.rowIdx < b.rowIdx)
  1199. return -1;
  1200. return 0;
  1201. }
  1202. if(crossedDatas.length > 0){
  1203. for(let i=0; i< crossedDatas.length; i++){
  1204. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1205. let isRepeat = tools.isRepeat(valuesArr, field, data, 'document', 'value');
  1206. if(isRepeat){
  1207. crossedDatas.splice(i--, 1);
  1208. }
  1209. }
  1210. for(let i=0; i< crossedDatas.length; i++){
  1211. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1212. if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
  1213. crossedDatas.splice(i--, 1);
  1214. }
  1215. }
  1216. rebuildUpdateDatas = tools.rebuildArr(crossedDatas, 'update');
  1217. rebuildUpdateDatas.sort(myCompare);
  1218. for(let i =0; i< rebuildUpdateDatas.length; i++){
  1219. rebuildUpdateDatas[i].itemId = selectedId;
  1220. }
  1221. }
  1222. if(uncrossedDatas.length > 0){
  1223. for(let i=0; i< uncrossedDatas.length; i++){
  1224. let field = uncrossedDatas[i].field;
  1225. let isRepeat = tools.isRepeat(valuesArr, field, uncrossedDatas[i].data, 'document', 'value');
  1226. if(isRepeat){
  1227. uncrossedDatas.splice(i--, 1);
  1228. }
  1229. }
  1230. for(let i=0; i< uncrossedDatas.length; i++){
  1231. let field = uncrossedDatas[i].field;
  1232. if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
  1233. uncrossedDatas.splice(i--, 1);
  1234. }
  1235. }
  1236. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1237. //rebuildArr.sort(myCompare);
  1238. function myCompareCode(a, b){
  1239. let valA = a.code,
  1240. valB = b.code;
  1241. return valB- valA;
  1242. }
  1243. rebuildArr.sort(myCompareCode);
  1244. let newCode = valueController.getCode(totalItems, selectedId);
  1245. if(rebuildArr[0].code){
  1246. newCode = newCode > rebuildArr[0].code ? newCode : rebuildArr[0].code + 1;
  1247. }
  1248. for(let i=0; i< rebuildArr.length; i++){
  1249. rebuildArr[i].itemId = selectedId;
  1250. if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'value'){
  1251. rebuildArr[i].code = newCode;
  1252. newCode++;
  1253. }
  1254. }
  1255. }
  1256. //backendOP
  1257. let pasteDatas = {
  1258. updateDatas: rebuildUpdateDatas,
  1259. createDatas: rebuildArr
  1260. };
  1261. return pasteDatas;
  1262. },
  1263. rebuildArr: function(arr, classify){
  1264. let conformDatas = [];
  1265. let flag = true;
  1266. for(let i=0; i< arr.length; i++){
  1267. for(let j=i+1; j<arr.length; j++){
  1268. if(arr[i].rowIdx === arr[j].rowIdx){
  1269. flag = false;
  1270. let field = arr[i].field;
  1271. let conformData;
  1272. if(classify === 'create'){
  1273. if(field === 'code'){
  1274. conformData = {
  1275. billsLibId: billsLibId,
  1276. code: arr[i].data,
  1277. content: arr[j].data,
  1278. rowIdx: arr[i].rowIdx,
  1279. type: 'CreateT'
  1280. }
  1281. }
  1282. else {
  1283. conformData = {
  1284. billsLIbId: billsLibId,
  1285. code: arr[j].data,
  1286. content: arr[i].data,
  1287. rowIdx: arr[i].rowIdx,
  1288. type: 'CreateT'
  1289. }
  1290. }
  1291. }
  1292. else {
  1293. if(field === 'code'){
  1294. conformData = {
  1295. billsLibId: billsLibId,
  1296. code: arr[i].data,
  1297. content: arr[j].data,
  1298. rowIdx: arr[i].rowIdx,
  1299. orgId: arr[i].orgId,
  1300. type: 'UpdateT'
  1301. }
  1302. }
  1303. else {
  1304. conformData = {
  1305. billsLIbId: billsLibId,
  1306. code: arr[j].data,
  1307. content: arr[i].data,
  1308. rowIdx: arr[i].rowIdx,
  1309. orgId: arr[i].orgId,
  1310. type: 'UpdateT'
  1311. }
  1312. }
  1313. }
  1314. conformDatas.push(conformData);
  1315. }
  1316. }
  1317. }
  1318. for(let i =0; i< arr.length; i++){
  1319. let flag = true;
  1320. for(let j=0; j<arr.length; j++){
  1321. if(arr[i].rowIdx === arr[j].rowIdx && arr[i].field !== arr[j].field){
  1322. flag = false;
  1323. }
  1324. }
  1325. if(flag){
  1326. conformDatas.push(arr[i]);
  1327. }
  1328. }
  1329. return conformDatas;
  1330. }
  1331. };
  1332. let pasteController = {
  1333. frontOperator: function(sheet, setting, controller, totalJobs, datas){
  1334. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1335. if(datas.length > 0){
  1336. for(let i=0; i<datas.length; i++){
  1337. if(datas[i]){
  1338. if(datas[i].type === UpdateExist){
  1339. totalJobs.jobsArr.forEach(job => {
  1340. if(job.data.content === datas[i].newData){
  1341. let serialNo = datas[i].serialNo;
  1342. let index = tools.getIndex(controller.tree.selected.jobs, datas[i].orgJobId, 'job');
  1343. job.count ++;
  1344. controller.tree.selected.jobs.splice(index, 1);
  1345. controller.tree.selected.jobs.splice(index, 0, {job: job, serialNo: serialNo});
  1346. }
  1347. });
  1348. }
  1349. else if(datas[i].type === UpdateNew){
  1350. let newJobData, newJob;
  1351. let newJobId = datas[i].newJobId, serialNo = datas[i].serialNo;
  1352. newJobData = {id: newJobId, content: datas[i].newData, code: datas[i].code};
  1353. newJob = createObj.newJob(newJobData);
  1354. newJob.count = 1;
  1355. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  1356. totalJobs.jobsArr.push(newJob);
  1357. var index = tools.getIndex(controller.tree.selected.jobs, datas[i].orgJobId, 'job');
  1358. controller.tree.selected.jobs.splice(index, 1);
  1359. controller.tree.selected.jobs.splice(index, 0, {job: newJob, serialNo: serialNo});
  1360. }
  1361. else if(datas[i].type === CreateExist){
  1362. let serialNo = datas[i].serialNo;
  1363. totalJobs.jobsArr.forEach(job => {
  1364. if(job.data.content === datas[i].newData){
  1365. job.count ++;
  1366. controller.tree.selected.jobs.push({job: job, serialNo: serialNo});
  1367. }
  1368. });
  1369. }
  1370. else if(datas[i].type === CreateNew){
  1371. let newJobId = datas[i].newJobId, serialNo = datas[i].serialNo;
  1372. let newJobData, newJob;
  1373. newJobData = {id: newJobId, content: datas[i].newData, code: datas[i].code};
  1374. newJob = createObj.newJob(newJobData);
  1375. newJob.count = 1;
  1376. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  1377. totalJobs.jobsArr.push(newJob);
  1378. controller.tree.selected.jobs.push({job: newJob, serialNo: serialNo});
  1379. }
  1380. }
  1381. }
  1382. }
  1383. //resort&reshow
  1384. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  1385. sheetDatas = tools.getsheetDatas(sheet);
  1386. },
  1387. frontItemsRelOperator: function(sheet, setting, controller, totalItems, datas){
  1388. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1389. if(datas.length > 0){
  1390. for(let i =0; i<datas.length; i++){
  1391. if(datas[i]){
  1392. if(datas[i].type === UpdateExist){
  1393. let serialNo = datas[i].serialNo;
  1394. totalItems.itemsArr.forEach(item => {
  1395. if(item.data.content === datas[i].newData){
  1396. let index = tools.getIndex(controller.tree.selected.items, datas[i].orgItemId, 'item');
  1397. item.count ++;
  1398. controller.tree.selected.items.splice(index, 1);
  1399. controller.tree.selected.items.splice(index, 0, {item: item, serialNo: serialNo});
  1400. }
  1401. });
  1402. }
  1403. else if(datas[i].type === UpdateNew){
  1404. let newItemData, newItem;
  1405. let newItemId = datas[i].newItemId, serialNo = datas[i].serialNo;
  1406. newItemData = {id: newItemId, content: datas[i].newData, code: datas[i].code};
  1407. newItem = createObj.newItem(newItemData);
  1408. newItem.count = 1;
  1409. totalItems.items[totalItems.prefix + newItemId] = newItem;
  1410. totalItems.itemsArr.push(newItem);
  1411. var index = tools.getIndex(controller.tree.selected.items, datas[i].orgItemId, 'item');
  1412. controller.tree.selected.items.splice(index, 1);
  1413. controller.tree.selected.items.splice(index, 0, {item: newItem, serialNo: serialNo});
  1414. }
  1415. else if(datas[i].type === CreateExist){
  1416. let serialNo = datas[i].serialNo;
  1417. totalItems.itemsArr.forEach(item => {
  1418. if(item.data.content === datas[i].newData){
  1419. item.count ++;
  1420. controller.tree.selected.items.push({item: item, serialNo: serialNo});
  1421. }
  1422. });
  1423. }
  1424. else if(datas[i].type === CreateNew){
  1425. let newItemId = datas[i].newItemId, serialNo = datas[i].serialNo;
  1426. let newItemData, newItem;
  1427. newItemData = {id: newItemId, content: datas[i].newData, code: datas[i].code};
  1428. newItem = createObj.newItem(newItemData);
  1429. newItem.count = 1;
  1430. totalItems.items[totalItems.prefix + newItemId] = newItem;
  1431. totalItems.itemsArr.push(newItem);
  1432. controller.tree.selected.items.push({item: newItem, serialNo: serialNo});
  1433. }
  1434. }
  1435. }
  1436. }
  1437. //resort&reshow
  1438. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1439. sheetItemsDatas = tools.getsheetDatas(sheet);
  1440. },
  1441. pasteJobsFront: function(sheet, totalJobs, datas){
  1442. const Update = 'Update', CreateT = 'CreateT';
  1443. if(datas.length > 0){
  1444. for(let i=0; i<datas.length; i++){
  1445. let newJobData, newJob;
  1446. if(datas[i]){
  1447. if(datas[i].type === Update){
  1448. totalJobs.jobsArr.forEach(job => {
  1449. if(job.data.id === datas[i].orgId){
  1450. job.data[datas[i].field] = datas[i].data;
  1451. }
  1452. });
  1453. }
  1454. else if(datas[i].type === CreateT){
  1455. //maxJobsNumber++;
  1456. // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
  1457. newJobData = {id: datas[i].newJobId, content: datas[i].content, code: datas[i].code};
  1458. newJob = createObj.newJob(newJobData);
  1459. totalJobs.jobsArr.push(newJob);
  1460. }
  1461. else if(datas[i].type !== CreateT && datas[i].field === 'content'){
  1462. newJobData = {id: datas[i].newJobId, content: datas[i].data, code: datas[i].code};
  1463. newJob = createObj.newJob(newJobData);
  1464. totalJobs.jobsArr.push(newJob);
  1465. }
  1466. else if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){
  1467. // maxJobsNumber++;
  1468. // maxJobsNumber = maxJobsNumber >= datas[i].data ? maxJobsNumber : datas[i].data;
  1469. newJobData = {id: datas[i].newJobId, content: '', code: datas[i].data};
  1470. newJob = createObj.newJob(newJobData);
  1471. totalJobs.jobsArr.push(newJob);
  1472. }
  1473. }
  1474. }
  1475. }
  1476. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  1477. console.log(totalJobs);
  1478. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  1479. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  1480. },
  1481. pasteItemsFront: function(sheet, totalItems, datas){
  1482. const Update = 'Update', CreateT = 'CreateT';
  1483. if(datas.length > 0){
  1484. for(let i=0; i<datas.length; i++){
  1485. let newItemData, newItem;
  1486. if(datas[i]){
  1487. if(datas[i].type === Update){
  1488. totalItems.itemsArr.forEach(item => {
  1489. if(item.data.id === datas[i].orgId){
  1490. item.data[datas[i].field] = datas[i].data;
  1491. }
  1492. });
  1493. }
  1494. else if(datas[i].type === CreateT){
  1495. newItemData = {id: datas[i].newItemId, content: datas[i].content, code: datas[i].code};
  1496. newItem = createObj.newItem(newItemData);
  1497. totalItems.itemsArr.push(newItem);
  1498. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  1499. }
  1500. else if(datas[i].type !== CreateT && datas[i].field === 'content'){
  1501. newItemData = {id: datas[i].newItemId, content: datas[i].data, code: datas[i].code};
  1502. newItem = createObj.newItem(newItemData);
  1503. totalItems.itemsArr.push(newItem);
  1504. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  1505. }
  1506. else if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){
  1507. newItemData = {id: datas[i].newItemId, content: '', code: datas[i].data};
  1508. newItem = createObj.newItem(newItemData);
  1509. totalItems.itemsArr.push(newItem);
  1510. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  1511. }
  1512. }
  1513. }
  1514. }
  1515. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  1516. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  1517. totalItemsDatas = tools.getsheetDatas(sheet, 'total');
  1518. },
  1519. pasteValueFront: function(sheet, totalItems, datas){
  1520. let backendUpdateDatas = [];
  1521. let valuesArr = valueController.getValues(totalItems, selectedId);
  1522. if(datas.length > 0){
  1523. for(let i =0; i< datas.length; i++){
  1524. let index;
  1525. if(datas[i]){
  1526. if(datas[i].type === 'UpdateT'){
  1527. if(valuesArr){
  1528. for(let j=0; j< valuesArr.length; j++){
  1529. if(datas[i].orgId === valuesArr[j].code){
  1530. index = j;
  1531. valuesArr.splice(j--, 1);
  1532. }
  1533. }
  1534. let updateEle = {code: datas[i].code, value: datas[i].content};
  1535. valuesArr.splice(index, 0, updateEle);
  1536. }
  1537. }
  1538. else if(datas[i].type !== 'UpdateT' && datas[i].field === 'code'){
  1539. if(valuesArr){
  1540. for(let j=0; j< valuesArr.length; j++){
  1541. if(datas[i].orgId === valuesArr[j].code){
  1542. valuesArr[j].code = datas[i].data;
  1543. }
  1544. }
  1545. }
  1546. }
  1547. else if(datas[i].type !== 'UpdateT' && datas[i].field === 'value'){
  1548. if(valuesArr){
  1549. for(let j=0; j< valuesArr.length; j++){
  1550. if(datas[i].orgId === valuesArr[j].code){
  1551. valuesArr[j].value = datas[i].data
  1552. }
  1553. }
  1554. }
  1555. }
  1556. else if(datas[i].type === 'CreateT'){
  1557. let newValueData = {value: datas[i].content, code: datas[i].code};
  1558. valuesArr.push(newValueData);
  1559. }
  1560. else if(datas[i].type !== 'CreateT' && datas[i].field === 'value'){
  1561. let newValueData = {value: datas[i].data, code: datas[i].code};
  1562. valuesArr.push(newValueData);
  1563. }
  1564. else if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){
  1565. let newValueData = {value: '', code: datas[i].data};
  1566. valuesArr.push(newValueData);
  1567. }
  1568. }
  1569. }
  1570. }
  1571. tools.reshowValue(sheet, valuesArr, eigenValueSetting, true);
  1572. valueDatas = tools.getsheetDatas(sheet, 'total');
  1573. }
  1574. };
  1575. var jobsController = {
  1576. editData: function(controller, sheet, totalJobs, setting){
  1577. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1578. orgJobData = sheet.getCell(args.row, args.col).value();
  1579. });
  1580. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  1581. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  1582. setting.cols.forEach(function (col, idx) {
  1583. if (args.col === idx) {
  1584. field = col.data.field;
  1585. }
  1586. });
  1587. if (controller.tree.selected) {
  1588. var isExist = tools.isExist(totalJobs.jobsArr, field, newData, orgJobData);
  1589. var isRepeat = tools.isRepeat(controller.tree.selected.jobs, field ,newData, 'reference', 'job');
  1590. //create
  1591. if(!id && newData && !isRepeat){
  1592. if(isExist){
  1593. jobsController.createExist(sheet, controller, totalJobs, field, newData, args, setting);
  1594. }
  1595. else {
  1596. jobsController.createNew(sheet, controller, totalJobs, field, newData, args, setting);
  1597. }
  1598. }
  1599. //update
  1600. else if(id && newData !== orgJobData && !isRepeat){
  1601. jobsController.update(sheet, controller, totalJobs, field, newData, id, isExist, args, setting);
  1602. }
  1603. //处理重复
  1604. if(isRepeat){
  1605. ///if(id && newData){
  1606. tools.alertOpr(args, sheet, '该工作内容已存在!', controller.tree.selected.jobs, 'job');
  1607. // }
  1608. // else {
  1609. //sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  1610. // tools.alertOpr(sheet, controller.tree.selected.jobs, 'jobs');
  1611. // }
  1612. }
  1613. }
  1614. else {
  1615. sheet.getCell(args.row, args.col).value('');
  1616. }
  1617. });
  1618. },
  1619. createNew: function(sheet, controller, totalJobs, field, newData, args, setting){
  1620. if(field === 'content'){
  1621. maxJobsNumber++;
  1622. //update--
  1623. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);
  1624. //--
  1625. jobsAjax.edCreateJob(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, serialNo, function(newJobId){
  1626. var newJobData, newJob;
  1627. newJobData = {id: newJobId, content: newData, code: maxJobsNumber};
  1628. newJob = createObj.newJob(newJobData);
  1629. newJob.count = 1;
  1630. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  1631. totalJobs.jobsArr.push(newJob);
  1632. controller.tree.selected.jobs.push({job: newJob, serialNo: serialNo});//update--
  1633. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true)//update--
  1634. });
  1635. }
  1636. else {
  1637. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.jobs, 'job');
  1638. }
  1639. },
  1640. createExist: function(sheet, controller, totalJobs, field, newData, args, setting){
  1641. totalJobs.jobsArr.forEach(function(job){
  1642. if(field === 'content'&& newData === job.data.content){
  1643. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update--
  1644. //billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data.id);//update--
  1645. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', {id: job.data.id, serialNo: serialNo});//update--
  1646. job.count++;
  1647. // controller.tree.selected.jobs.push(job);//update--
  1648. controller.tree.selected.jobs.push({job: job, serialNo: serialNo});//update--
  1649. //tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update--
  1650. tools.orderReshowData(sheet,controller.tree.selected.jobs, setting, 'job', true);
  1651. }
  1652. else if(field == 'code' && newData == job.data.code){
  1653. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update--
  1654. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', {id: job.data.id, serialNo: serialNo});//update--
  1655. job.count++;
  1656. controller.tree.selected.jobs.push({job: job, serialNo: serialNo});//update--
  1657. // tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update--
  1658. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  1659. }
  1660. });
  1661. },
  1662. update: function(sheet, controller, totalJobs, field, newData, id, isExist, args, setting){
  1663. if(isExist){
  1664. totalJobs.jobsArr.forEach(function(job){
  1665. if(field == 'code' && job.data[field] == newData){
  1666. let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;//update--add
  1667. let index = tools.getIndex(controller.tree.selected.jobs, id, 'job');//update-- getIndex
  1668. job.count++;
  1669. controller.tree.selected.jobs.splice(index, 1);
  1670. controller.tree.selected.jobs.splice(index, 0, {job: job, serialNo: serialNo});//update--
  1671. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  1672. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  1673. }
  1674. if(field === 'content' && job.data[field] === newData){
  1675. let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;//update--add
  1676. let index = tools.getIndex(controller.tree.selected.jobs, id, 'job');
  1677. job.count++;
  1678. controller.tree.selected.jobs.splice(index, 1);
  1679. controller.tree.selected.jobs.splice(index, 0, {job: job, serialNo: serialNo});//update--
  1680. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  1681. // tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update--
  1682. tools.orderReshowData(sheet,controller.tree.selected.jobs, setting, 'job', true);
  1683. }
  1684. });
  1685. }
  1686. else{
  1687. if(field === 'content'){
  1688. maxJobsNumber++;
  1689. //let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update--
  1690. let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;
  1691. jobsAjax.edUpdateJob(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, id, function(newJobId){//update--
  1692. var newJobData, newJob;
  1693. newJobData = {id: newJobId, content: newData, code: maxJobsNumber};
  1694. newJob = createObj.newJob(newJobData);
  1695. newJob.count = 1;
  1696. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  1697. totalJobs.jobsArr.push(newJob);
  1698. var index = tools.getIndex(controller.tree.selected.jobs, id, 'job');
  1699. controller.tree.selected.jobs.splice(index, 1);
  1700. controller.tree.selected.jobs.splice(index, 0, {job: newJob, serialNo: serialNo});//update--
  1701. //tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update--
  1702. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);//update--
  1703. });
  1704. }
  1705. else {
  1706. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.jobs, 'job');
  1707. /* //todo: 提示窗口
  1708. console.log(`enter`);
  1709. console.log(typeof newData);
  1710. if(typeof newData === 'number'){
  1711. console.log(`orgJobData: ${orgJobData}`);
  1712. sheet.getCell(args.row, args.col).value(orgJobData);
  1713. }
  1714. else {
  1715. //编号只能是数字
  1716. sheet.getCell(args.row, args.col).value('');
  1717. }*/
  1718. }
  1719. }
  1720. },
  1721. upMove: function (controller, sheet) {
  1722. let updateSelArr = [];
  1723. $('#upMove').attr('doing', 'true');
  1724. tools.btnClose($('#upMove'));
  1725. let args = controller.tree.selected.args,
  1726. thisJob = controller.tree.selected.jobs[args.row],
  1727. preJob = controller.tree.selected.jobs[args.row - 1],
  1728. tempSerialNo;
  1729. //switch serialNo
  1730. tempSerialNo = thisJob.serialNo;
  1731. thisJob.serialNo = preJob.serialNo;
  1732. preJob.serialNo = tempSerialNo;
  1733. updateSelArr.push({id: thisJob.job.data.id, serialNo: thisJob.serialNo});
  1734. updateSelArr.push({id: preJob.job.data.id, serialNo: preJob.serialNo});
  1735. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'jobs', function () {
  1736. tools.orderReshowData(sheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
  1737. sheet.setActiveCell(args.row -1, args.col);
  1738. controller.tree.selected.args.row = args.row - 1;
  1739. $('#upMove').attr('doing', 'false');
  1740. if(tools.canUpMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){
  1741. $('#upMove').attr('canMove', 'true');
  1742. tools.btnAction($('#upMove'));
  1743. }
  1744. else{
  1745. $('#upMove').attr('canMove', 'false');
  1746. }
  1747. if(tools.canDownMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){
  1748. $('#downMove').attr('canMove', true);
  1749. tools.btnAction($('#downMove'));
  1750. }
  1751. else{
  1752. $('#downMove').attr('canMove', 'false');
  1753. tools.btnClose($('#downMove'));
  1754. }
  1755. });
  1756. },
  1757. downMove: function (controller, sheet) {
  1758. let updateSelArr = [];
  1759. $('#downMove').attr('doing', 'true');
  1760. tools.btnClose($('#downMove'));
  1761. let tempSerialNo = controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo;
  1762. controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo = controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo;
  1763. controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo = tempSerialNo;
  1764. updateSelArr.push({id: controller.tree.selected.jobs[controller.tree.selected.args.row].job.data.id, serialNo: controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo});
  1765. updateSelArr.push({id: controller.tree.selected.jobs[controller.tree.selected.args.row + 1].job.data.id, serialNo: controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo});
  1766. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'jobs', function () {
  1767. tools.orderReshowData(sheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
  1768. sheet.setActiveCell(controller.tree.selected.args.row + 1, controller.tree.selected.args.col);
  1769. controller.tree.selected.args.row = controller.tree.selected.args.row + 1;
  1770. $('#downMove').attr('doing', 'false');
  1771. if(tools.canDownMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){
  1772. $('#downMove').attr('canMove', 'true');
  1773. tools.btnAction($('#downMove'));
  1774. }
  1775. else{
  1776. $('#downMove').attr('canMove', 'false');
  1777. }
  1778. if(tools.canUpMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){
  1779. $('#upMove').attr('canMove', 'true');
  1780. tools.btnAction($('#upMove'));
  1781. }
  1782. else{
  1783. $('#upMove').attr('canMove', 'false');
  1784. tools.btnClose($('#upMove'));
  1785. }
  1786. });
  1787. }
  1788. };
  1789. var itemsController = {
  1790. editData: function(controller, sheet, totalItems, setting){
  1791. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1792. orgItemData = sheet.getCell(args.row, args.col).value();
  1793. });
  1794. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) {
  1795. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  1796. setting.cols.forEach(function (col, idx) {
  1797. if (args.col === idx) {
  1798. field = col.data.field;
  1799. }
  1800. });
  1801. if (controller.tree.selected) {
  1802. var isExist = tools.isExist(totalItems.itemsArr, field, newData, orgItemData);
  1803. var isRepeat = tools.isRepeat(controller.tree.selected.items, field ,newData, 'reference', 'item');
  1804. //create
  1805. if(!id && newData && !isRepeat){
  1806. if(isExist){
  1807. itemsController.createExist(sheet, controller, totalItems, field, newData, args, setting);
  1808. }
  1809. else {
  1810. itemsController.createNew(sheet, controller, totalItems, field, newData, args, setting);
  1811. }
  1812. }
  1813. //update
  1814. else if(id && newData !== orgItemData && !isRepeat){
  1815. itemsController.update(sheet, controller, totalItems, field, newData, id, isExist, args, setting);
  1816. }
  1817. //处理重复
  1818. if(isRepeat){
  1819. tools.alertOpr(args, sheet, '该项目特征已存在!', controller.tree.selected.items, 'item');
  1820. }
  1821. }
  1822. else {
  1823. sheet.getCell(args.row, args.col).value('');
  1824. }
  1825. });
  1826. },
  1827. createNew: function(sheet, controller, totalItems, field, newData, args, setting){
  1828. if(field === 'content'){
  1829. maxItemsNumber++;
  1830. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  1831. console.log(`billsLibId: ${billsLibId} billsId: ${controller.tree.selected.getID()} content: ${newData} code: ${maxItemsNumber}`);
  1832. itemsAjax.edCreateItem(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxItemsNumber, serialNo, function(newItemId){
  1833. let newItemData, newItem;
  1834. newItemData = {id: newItemId, content: newData, code: maxItemsNumber};
  1835. newItem = createObj.newItem(newItemData);
  1836. newItem.count = 1;
  1837. totalItems.items[totalItems.prefix + newItemId] = newItem;
  1838. totalItems.itemsArr.push(newItem);
  1839. controller.tree.selected.items.push({item: newItem, serialNo: serialNo});
  1840. //tools.reshowData(sheet, controller.tree.selected.items, setting, true);
  1841. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1842. });
  1843. }
  1844. else {
  1845. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.items, 'item');
  1846. }
  1847. },
  1848. createExist: function(sheet, controller, totalItems, field, newData, args, setting){
  1849. totalItems.itemsArr.forEach(function(item){
  1850. if(field === 'content'&& newData === item.data.content){
  1851. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  1852. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', {id: item.data.id, serialNo: serialNo});
  1853. item.count++;
  1854. controller.tree.selected.items.push({item: item, serialNo: serialNo});
  1855. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1856. }
  1857. else if(field == 'code' && newData == item.data.code){
  1858. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  1859. billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', {id: item.data.id, serialNo: serialNo});
  1860. item.count++;
  1861. controller.tree.selected.items.push({item: item, serialNo: serialNo});
  1862. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1863. }
  1864. });
  1865. },
  1866. update: function(sheet, controller, totalItems, field, newData, id, isExist, args, setting){
  1867. if(isExist){
  1868. totalItems.itemsArr.forEach(function(item){
  1869. if(field == 'code' && item.data[field] == newData){
  1870. let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo;
  1871. let index = tools.getIndex(controller.tree.selected.items, id, 'item');
  1872. item.count++;
  1873. controller.tree.selected.items.splice(index, 1);
  1874. controller.tree.selected.items.splice(index, 0, {item: item, serialNo: serialNo});
  1875. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  1876. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1877. }
  1878. if(field === 'content' && item.data[field] === newData){
  1879. let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo;
  1880. let index = tools.getIndex(controller.tree.selected.items, id, 'item');
  1881. item.count++;
  1882. controller.tree.selected.items.splice(index, 1);
  1883. controller.tree.selected.items.splice(index, 0, {item: item, serialNo: serialNo});
  1884. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  1885. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1886. }
  1887. });
  1888. }
  1889. else{
  1890. if(field === 'content'){
  1891. maxItemsNumber++;
  1892. let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo;
  1893. itemsAjax.edUpdateItem(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxItemsNumber, id, function(newItemId){
  1894. var newItemData, newItem;
  1895. newItemData = {id: newItemId, content: newData, code: maxItemsNumber};
  1896. newItem = createObj.newItem(newItemData);
  1897. newItem.count = 1;
  1898. totalItems.items[totalItems.prefix + newItemId] = newItem;
  1899. totalItems.itemsArr.push(newItem);
  1900. var index = tools.getIndex(controller.tree.selected.items, id, 'item');
  1901. controller.tree.selected.items.splice(index, 1);
  1902. controller.tree.selected.items.splice(index, 0, {item: newItem, serialNo: serialNo});
  1903. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1904. });
  1905. }
  1906. else {
  1907. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.items, 'item');
  1908. }
  1909. /* if(typeof newData === 'number'){
  1910. sheet.getCell(args.row, args.col).value(orgItemData);
  1911. }
  1912. else {
  1913. //编号只能为数字
  1914. sheet.getCell(args.row, args.col).value('');
  1915. }
  1916. }*/
  1917. }
  1918. },
  1919. upMove: function (controller, sheet) {
  1920. let updateSelArr = [];
  1921. $('#upMove').attr('doing', 'true');
  1922. tools.btnClose($('#upMove'));
  1923. let tempSerialNo = controller.tree.selected.items[controller.tree.selected.args.row].serialNo;
  1924. controller.tree.selected.items[controller.tree.selected.args.row].serialNo = controller.tree.selected.items[controller.tree.selected.args.row -1].serialNo;
  1925. controller.tree.selected.items[controller.tree.selected.args.row -1].serialNo = tempSerialNo;
  1926. updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row].serialNo});
  1927. updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row -1].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row -1].serialNo});
  1928. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'items', function () {
  1929. tools.orderReshowData(sheet, controller.tree.selected.items, itemsSetting, 'item', true);
  1930. sheet.setActiveCell(controller.tree.selected.args.row -1, controller.tree.selected.args.col);
  1931. controller.tree.selected.args.row = controller.tree.selected.args.row -1;
  1932. $('#upMove').attr('doing', 'false');
  1933. if(tools.canUpMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)){
  1934. $('#upMove').attr('canMove', 'true');
  1935. tools.btnAction($('#upMove'));
  1936. }
  1937. else{
  1938. $('#upMove').attr('canMove', 'false');
  1939. }
  1940. if(tools.canDownMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)){
  1941. $('#downMove').attr('canMove', 'true');
  1942. tools.btnAction($('#downMove'));
  1943. }
  1944. else{
  1945. $('#downMove').attr('canMove', 'false');
  1946. tools.btnClose($('#downMove'));
  1947. }
  1948. });
  1949. },
  1950. downMove: function (controller, sheet) {
  1951. let updateSelArr = [];
  1952. $('#downMove').attr('doing', 'true');
  1953. tools.btnClose($('#downMove'));
  1954. let tempSerialNo = controller.tree.selected.items[controller.tree.selected.args.row].serialNo;
  1955. controller.tree.selected.items[controller.tree.selected.args.row].serialNo = controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo;
  1956. controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo = tempSerialNo;
  1957. updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row].serialNo});
  1958. updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row + 1].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row +1].serialNo});
  1959. billsAjax.updateSerialNo(userAccount, billsLibId, controller.tree.selected.getID(), updateSelArr, 'items', function () {
  1960. tools.orderReshowData(sheet, controller.tree.selected.items, itemsSetting, 'item', true);
  1961. sheet.setActiveCell(controller.tree.selected.args.row +1, controller.tree.selected.args.col);
  1962. controller.tree.selected.args.row = controller.tree.selected.args.row +1;
  1963. $('#downMove').attr('doing', 'false');
  1964. if(tools.canDownMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)){
  1965. $('#downMove').attr('canMove', 'true');
  1966. tools.btnAction($('#downMove'));
  1967. }
  1968. else{
  1969. $('#downMove').attr('canMove', 'false');
  1970. }
  1971. if(tools.canUpMove(controller.tree.selected.items[controlle.tree.selected.args.row], controller.tree.selected.items)){
  1972. $('#upMove').attr('canMove', 'true');
  1973. tools.btnAction($('#upMove'));
  1974. }
  1975. else{
  1976. $('#upMove').attr('canMove', 'false');
  1977. tools.btnClose($('#upMove'));
  1978. }
  1979. });
  1980. }
  1981. };
  1982. var valueController = {
  1983. editData: function(totalItems, sheet, setting){
  1984. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  1985. orgValue = sheet.getValue(args.row, args.col);
  1986. });
  1987. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  1988. var newValue = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  1989. setting.cols.forEach(function(col, colIdx){
  1990. if(args.col === colIdx){
  1991. field = col.data.field;
  1992. }
  1993. });
  1994. if(selectedId){
  1995. isRepeat = tools.isRepeat(valueController.getValues(totalItems, selectedId), field, newValue, 'document');
  1996. if(!tagId && !isRepeat && newValue){//create
  1997. valueController.createValue(sheet, totalItems, selectedId, field, newValue);
  1998. }
  1999. else if(tagId && !isRepeat && newValue !== orgValue){//update
  2000. valueController.updateValue(userAccount, totalItems, tagId, newValue, field);
  2001. }
  2002. if(isRepeat){
  2003. if(tagId && newValue){
  2004. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgValue);
  2005. }
  2006. else {
  2007. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  2008. }
  2009. }
  2010. }
  2011. });
  2012. },
  2013. createValue: function(sheet, totalItems, id, field, newValue){
  2014. var newData;
  2015. if(field === 'value'){
  2016. var newCode = valueController.getCode(totalItems, id);
  2017. newData = {code: newCode, value: newValue};
  2018. tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode);
  2019. }
  2020. else {
  2021. if(typeof newValue === 'number'){
  2022. newData = {code: newValue, value: ''};
  2023. tools.reSetCell(sheet, sheet.getActiveRowIndex(), null, null, newValue);
  2024. }
  2025. else {
  2026. //编号只能为数字!
  2027. sheet.getCell(args.row, args.col).value('');
  2028. }
  2029. }
  2030. totalItems.findItem(id).data.itemValue.push(newData);
  2031. itemsAjax.updateValue(userAccount, billsLibId, id, newData, null, 'create');
  2032. valueDatas = tools.getsheetDatas(sheet, 'total');
  2033. },
  2034. updateValue: function(totalItems, tagId, newData, field){
  2035. var updateData = {code: tagId, newData: newData, field: field};
  2036. var itemVals = totalItems.findItem(selectedId).data.itemValue;
  2037. if(field === 'value'){
  2038. var updateEle = {code: tagId, value: newData};
  2039. if(itemVals){
  2040. var index;
  2041. itemVals.forEach(function(val){
  2042. if(val.code === tagId){
  2043. index = itemVals.indexOf(val);
  2044. itemVals.splice(index, 1);
  2045. }
  2046. });
  2047. itemVals.splice(index, 0, updateEle);
  2048. }
  2049. itemsAjax.updateValue(userAccount, billsLibId, selectedId, updateData, null, 'update');
  2050. }
  2051. else {
  2052. if(typeof newData === 'number'){
  2053. if(itemVals){
  2054. var updateEle;
  2055. var index;
  2056. itemVals.forEach(function(val){
  2057. if(val.code === tagId){
  2058. updateEle = {code: newData, value: val.value};
  2059. index = itemVals.indexOf(val);
  2060. itemVals.splice(index, 1);
  2061. }
  2062. });
  2063. itemVals.splice(index, 0, updateEle);
  2064. }
  2065. itemsAjax.updateValue(userAccount, billsLibId, selectedId, updateData, null, 'update');
  2066. }
  2067. else {
  2068. //编号只能为数字!
  2069. sheet.getCell(args.row, args.col).value('');
  2070. }
  2071. }
  2072. },
  2073. getValues: function(totalItems, id){
  2074. return totalItems.findItem(id).data.itemValue;
  2075. },
  2076. getTopItem: function(totalItems){
  2077. tools.resort(totalItems.itemsArr, 'code', false);
  2078. return totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0] : null
  2079. },
  2080. getCode: function(totalItems, id){
  2081. var valArr = totalItems.findItem(id).data.itemValue;
  2082. if(valArr){
  2083. tools.resort(valArr, 'code', true);
  2084. return valArr.length > 0 ? valArr[valArr.length - 1].code + 1 : 1;
  2085. }else {
  2086. return 1;
  2087. }
  2088. },
  2089. isRepeat: function(arr, newValue){
  2090. var isRepeat = false;
  2091. arr.forEach(function(itemValue){
  2092. if(itemValue.value === newValue){
  2093. isRepeat = true;
  2094. }
  2095. });
  2096. return isRepeat;
  2097. }
  2098. };
  2099. var totalJobsController = {
  2100. eiditData: function(totalJobs, sheet, setting){
  2101. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  2102. orgJobData = sheet.getCell(args.row, args.col).value();
  2103. });
  2104. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  2105. var newData = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  2106. setting.cols.forEach(function(col, colIdx){
  2107. if(args.col === colIdx){
  2108. field = col.data.field;
  2109. }
  2110. });
  2111. isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference', null);
  2112. if(!tagId && !isRepeat && newData){//create
  2113. totalJobsController.createJob(sheet, totalJobs, field, newData, args);
  2114. }
  2115. else if(tagId && !isRepeat && newData !== orgJobData){//update
  2116. totalJobsController.updateJob(totalJobs, tagId, field, newData, args);
  2117. }
  2118. if(isRepeat){
  2119. tools.alertTotalOpr(args, '该工作内容已存在!', totalJobs.jobsArr);
  2120. }
  2121. });
  2122. },
  2123. createJob: function(sheet, totalJobs, field, newData, args){
  2124. if(field === 'content'){
  2125. maxJobsNumber++;
  2126. let code = maxJobsNumber;
  2127. jobsAjax.createJobContent(userAccount, billsLibId, newData, code, function(newJobId){
  2128. let newJobData, newJob;
  2129. newJobData = {id: newJobId, content: newData, code: code};
  2130. newJob = createObj.newJob(newJobData);
  2131. totalJobs.jobsArr.push(newJob);
  2132. //tools.reSetCell(sheet, args.row, 0, code, newJobId);
  2133. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  2134. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  2135. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  2136. });
  2137. }
  2138. else {
  2139. let parseNum = parseInt(newData);
  2140. //if(typeof newData === 'number'){
  2141. if(!isNaN(parseNum)){
  2142. maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
  2143. jobsAjax.createJobContent(userAccount, billsLibId, '', newData, function(newJobId){
  2144. let newJobData, newJob;
  2145. newJobData = {id: newJobId, content: '', code: newData};
  2146. newJob = createObj.newJob(newJobData);
  2147. totalJobs.jobsArr.push(newJob);
  2148. //tools.reSetCell(sheet, args.row, 0, null, newJobId);
  2149. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  2150. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  2151. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  2152. });
  2153. }
  2154. else {
  2155. //编号只能为数字!
  2156. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalJobs.jobsArr);
  2157. // sheet.getCell(args.row, args.col).value("");
  2158. }
  2159. }
  2160. },
  2161. updateJob: function(totalJobs, id, field, newData, args){
  2162. // if(field === 'code' && typeof newData !== 'number'){
  2163. if(field === 'code' && isNaN(parseInt(newData))){
  2164. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalJobs.jobsArr);
  2165. }
  2166. else {
  2167. totalJobs.jobsArr.forEach(function(job){
  2168. if(job.data.id === id){
  2169. job.data[field] = newData;
  2170. }
  2171. });
  2172. tools.reshowData(args.sheet, totalJobs.jobsArr, totalJobsSetting, true);
  2173. jobsAjax.updateJobContent(userAccount, billsLibId, id, field, newData);
  2174. }
  2175. }
  2176. };
  2177. var totalItemsController = {
  2178. eiditData: function(totalItems, sheet, setting){
  2179. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
  2180. orgItemData = sheet.getCell(args.row, args.col).value();
  2181. });
  2182. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
  2183. var newData = sheet.getValue(args.row, args.col), tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  2184. setting.cols.forEach(function(col, colIdx){
  2185. if(args.col === colIdx){
  2186. field = col.data.field;
  2187. }
  2188. });
  2189. isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference', null);
  2190. if(!tagId && !isRepeat && newData){//create
  2191. totalItemsController.createItem(sheet, totalItems, field, newData, args);
  2192. }
  2193. else if(tagId && !isRepeat && newData !== orgItemData){//update
  2194. totalItemsController.updateItem(totalItems, tagId, field, newData, args);
  2195. }
  2196. else if(isRepeat){
  2197. console.log(`cunzai`);
  2198. tools.alertTotalOpr(args, '该项目特征已存在!', totalItems.itemsArr);
  2199. }
  2200. });
  2201. },
  2202. createItem: function(sheet, totalItems, field, newData, args){
  2203. if(field === 'content'){
  2204. maxItemsNumber++;
  2205. let code = maxItemsNumber;
  2206. itemsAjax.createItemCharacter(userAccount, billsLibId, newData, code, function(newItemId){
  2207. var newItemData, newItem;
  2208. newItemData = {id: newItemId, content: newData, code: code, itemValue: []};
  2209. newItem = createObj.newItem(newItemData);
  2210. totalItems.itemsArr.push(newItem);
  2211. totalItems.items[totalItems.prefix + newItemId] = newItem;
  2212. //tools.reSetCell(sheet, args.row, 0, code, newItemId);
  2213. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  2214. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  2215. totalItemsDatas = tools.getsheetDatas(sheet, 'total');
  2216. });
  2217. }
  2218. else {
  2219. if(!isNaN(parseInt(newData))){
  2220. maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
  2221. itemsAjax.createItemCharacter(userAccount, billsLibId, '', newData, function(newItemId){
  2222. var newItemData, newItem;
  2223. newItemData = {id: newItemId, content: '', code: newData, itemValue: []};
  2224. newItem = createObj.newItem(newItemData);
  2225. totalItems.itemsArr.push(newItem);
  2226. totalItems.items[totalItems.prefix + newItemId] = newItem;
  2227. //tools.reSetCell(sheet, args.row, 0, null, newItemId);
  2228. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  2229. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  2230. totalItemsDatas = tools.getsheetDatas(sheet, 'total');
  2231. });
  2232. }
  2233. else {
  2234. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalItems.itemsArr);
  2235. }
  2236. }
  2237. },
  2238. updateItem: function(totalItems, id, field, newData, args){
  2239. if(field === 'code' && isNaN(parseInt(newData))){
  2240. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalItems.itemsArr);
  2241. }
  2242. else {
  2243. totalItems.itemsArr.forEach(function(item){
  2244. if(item.data.id === id){
  2245. item.data[field] = newData;
  2246. }
  2247. });
  2248. tools.reshowData(args.sheet, totalItems.itemsArr, totalItemsSetting, true);
  2249. itemsAjax.updateItemCharacter(userAccount, billsLibId, id, field, newData);
  2250. }
  2251. }
  2252. };
  2253. var rechargeController = {
  2254. updateRechar: function(selectedNode, newData){
  2255. if(selectedNode){
  2256. var updateId = selectedNode.getID();
  2257. selectedNode.data.recharge = newData;
  2258. /*var getupdateIds = function(node){
  2259. updateIds.push(node.getID());
  2260. node.data.recharge = newData;
  2261. if(node.children.length > 0){
  2262. node.children.forEach(function(node){
  2263. getupdateIds(node);
  2264. });
  2265. }
  2266. }
  2267. getupdateIds(tools.getRoot(selectedNode));*/
  2268. billsAjax.updateRecharge(userAccount, billsLibId, updateId, newData);
  2269. }
  2270. else {
  2271. $('exampleTextarea').val('');
  2272. }
  2273. },
  2274. createRecharge: function(node){
  2275. if(node){
  2276. var tempId = [];
  2277. tempId.push(node.getID());
  2278. var rootNode = tools.getRoot(node);
  2279. if(rootNode.data.recharge && rootNode !== node){
  2280. billsAjax.updateRecharge(userAccount, billsLibId, tempId, rootNode.data.recharge);
  2281. node.data.recharge = rootNode.data.recharge;
  2282. $('#exampleTextarea').val(node.data.recharge);
  2283. }
  2284. else {
  2285. node.data.recharge = '';
  2286. $('#exampleTextarea').val('');
  2287. }
  2288. }
  2289. else {
  2290. $('exampleTextarea').val('');
  2291. }
  2292. }
  2293. };