db_controller.js 105 KB

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