db_controller.js 147 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957
  1. /**
  2. * Created by vian on 2017/4/12.
  3. */
  4. function getNewBIlls(controller, rowCount, billsLibId) {
  5. let ParentID = -1;
  6. let NextSiblingID = -1;
  7. let sectionInfo = { first: null, second: null, third: null };
  8. let updatePreData = null;
  9. let insertBills = [];
  10. if (controller.tree.items.length !== 0) {
  11. let node = controller.tree.selected;
  12. if (node) {
  13. ParentID = node.getParentID();
  14. sectionInfo = tools.getSectionInfo(node);
  15. NextSiblingID = node.getNextSiblingID();
  16. updatePreData = { ID: node.getID() };
  17. } else {
  18. let updateNode = controller.tree.roots[controller.tree.roots.length - 1];
  19. updatePreData = { ID: updateNode.getID() };
  20. }
  21. } else {
  22. controller.tree.maxNodeID(0);
  23. }
  24. for (let i = 0; i < rowCount; i++) {
  25. let tem = {
  26. ID: uuid.v1(),
  27. ParentID,
  28. NextSiblingID: -1,
  29. sectionInfo,
  30. billsLibId,
  31. };
  32. if (i === rowCount - 1) {
  33. tem.NextSiblingID = NextSiblingID;
  34. }
  35. if (i !== 0) {
  36. insertBills[i - 1].NextSiblingID = tem.ID;
  37. }
  38. if (i === 0 && updatePreData) {
  39. updatePreData.NextSiblingID = tem.ID;
  40. }
  41. insertBills.push(tem);
  42. }
  43. insertBills = insertBills.reverse();
  44. return { insertBills, updatePreData };
  45. }
  46. var dbController = {
  47. controller: null,
  48. currentEditData: null,
  49. insert: function (controller, btn, rowCount) {
  50. tools.btnClose(btn);
  51. btn.attr("doing", "true");
  52. let { insertBills, updatePreData } = getNewBIlls(
  53. controller,
  54. rowCount,
  55. billsLibId
  56. );
  57. billsAjax.createBills(
  58. userAccount,
  59. billsLibId,
  60. updatePreData,
  61. insertBills,
  62. function () {
  63. if (updatePreData) {
  64. const node = controller.tree.findNode(updatePreData.ID);
  65. if (node) {
  66. Object.assign(node.data, updatePreData);
  67. }
  68. }
  69. const treeData = insertBills.map((item) => ({
  70. type: "new",
  71. data: item,
  72. }));
  73. const newNodes = controller.m_insert(treeData);
  74. newNodes.forEach(n => {
  75. n.jobs = [];
  76. n.items = [];
  77. console.log(n.serialNo(), n.getID());
  78. controller.sheet.setTag(
  79. n.serialNo(),
  80. 0,
  81. n.getID()
  82. );
  83. });
  84. sheetBillsDatas = tools.getsheetDatas(
  85. controller.sheet,
  86. "bills",
  87. controller
  88. );
  89. tools.btnAction(btn);
  90. btn.attr("doing", "false");
  91. controller.sheet.getParent().focus(true);
  92. }
  93. );
  94. },
  95. upLevel: function (controller, btn) {
  96. tools.btnClose(btn);
  97. btn.attr("doing", "true");
  98. var node = controller.tree.selected;
  99. var nextSiblingIds = [];
  100. var updateData = [];
  101. let selNodes = tools.getSameDepthNodes(controller);
  102. let nextSiblings = [];
  103. let toUpSectionNodes = [];
  104. let getNextSibling = function (node) {
  105. if (node.nextSibling) {
  106. nextSiblingIds.push(node.getNextSiblingID());
  107. nextSiblings.push(node.nextSibling);
  108. getNextSibling(node.nextSibling);
  109. }
  110. };
  111. if (selNodes.length > 0) {
  112. let firstParent = selNodes[0].parent;
  113. //选中的第一个节点有父节点,则可升级
  114. if (firstParent) {
  115. //更新父节点
  116. updateData.push({
  117. ID: firstParent.getID(),
  118. NextSiblingID: selNodes[0].getID(),
  119. type: "parentNode",
  120. });
  121. //更新前节点
  122. if (selNodes[0].preSibling) {
  123. updateData.push({
  124. ID: selNodes[0].preSibling.getID(),
  125. NextSiblingID: -1,
  126. type: "preSiblingNode",
  127. });
  128. }
  129. //更新选中节点的后兄弟节点
  130. let lastSelNode = selNodes[selNodes.length - 1];
  131. if (lastSelNode.nextSibling) {
  132. let nextSectionInfo = tools.getSectionInfo(firstParent);
  133. let nullNextSectionInfo = tools.sectionInfoNull(nextSectionInfo);
  134. if (nullNextSectionInfo) {
  135. nextSectionInfo[nullNextSectionInfo] = lastSelNode.getID();
  136. }
  137. getNextSibling(lastSelNode);
  138. updateData.push({
  139. ID: nextSiblingIds,
  140. ParentID: lastSelNode.getID(),
  141. //sectionInfo: nextSectionInfo,
  142. type: "nextSiblingNode",
  143. });
  144. //nextSibling children
  145. }
  146. //更新选中节点
  147. for (let i = 0; i < selNodes.length; i++) {
  148. let selNode = selNodes[i];
  149. let oprSectionInfo = tools.getSectionInfo(firstParent);
  150. updateData.push({
  151. ID: selNode.getID(),
  152. ParentID: firstParent.getParentID(),
  153. NextSiblingID:
  154. i === selNodes.length - 1
  155. ? firstParent.getNextSiblingID()
  156. : selNode.getNextSiblingID(),
  157. sectionInfo: oprSectionInfo,
  158. type: "oprNode",
  159. });
  160. //update node children and grandchildren sectionInfo
  161. }
  162. //get updateSectionInfo nodes
  163. toUpSectionNodes = toUpSectionNodes.concat(selNodes); //选中的节点
  164. //选中节点的所有子节点
  165. toUpSectionNodes = toUpSectionNodes.concat(
  166. tools.getChildrenNodes(selNodes)
  167. );
  168. //后兄弟节点
  169. toUpSectionNodes = toUpSectionNodes.concat(nextSiblings);
  170. //所有后兄弟节点的所有子节点
  171. toUpSectionNodes = toUpSectionNodes.concat(
  172. tools.getChildrenNodes(nextSiblings)
  173. );
  174. billsAjax.upLevel(userAccount, billsLibId, updateData, function () {
  175. //tools.btnAction(btn);
  176. //btn.attr('doing', 'false');
  177. for (let upLevelNode of selNodes) {
  178. controller.setTreeSelected(upLevelNode);
  179. controller.upLevel();
  180. }
  181. sheetBillsDatas = tools.getsheetDatas(
  182. controller.sheet,
  183. "bills",
  184. controller
  185. );
  186. controller.sheet.getParent().focus(true);
  187. //updateSectionInfo
  188. if (toUpSectionNodes.length > 0) {
  189. billsAjax.updateSectionInfo(
  190. tools.getUpdateSectionData(toUpSectionNodes),
  191. function () {
  192. tools.btnAction(btn);
  193. btn.attr("doing", "false");
  194. }
  195. );
  196. }
  197. });
  198. }
  199. }
  200. },
  201. downLevel: function (controller, btn) {
  202. tools.btnClose(btn);
  203. btn.attr("doing", "true");
  204. var updateData = [];
  205. let selNodes = tools.getSameDepthNodes(controller);
  206. let toUpSectionNodes = [];
  207. if (selNodes.length > 0) {
  208. //选中的第一个节点有前节点,则可降级
  209. let firstPreSibling = selNodes[0].preSibling;
  210. if (firstPreSibling) {
  211. //更新前节点
  212. updateData.push({
  213. ID: firstPreSibling.getID(),
  214. NextSiblingID: selNodes[selNodes.length - 1].getNextSiblingID(),
  215. type: "preSiblingNode",
  216. });
  217. //更新前节点最末子节点
  218. if (firstPreSibling.children.length > 0) {
  219. updateData.push({
  220. ID: firstPreSibling.children[
  221. firstPreSibling.children.length - 1
  222. ].getID(),
  223. NextSiblingID: selNodes[0].getID(),
  224. type: "preChildren",
  225. });
  226. }
  227. for (let i = 0; i < selNodes.length; i++) {
  228. let selNode = selNodes[i];
  229. //更新选中的节点
  230. updateData.push({
  231. ID: selNode.getID(),
  232. ParentID: firstPreSibling.getID(),
  233. NextSiblingID:
  234. i === selNodes.length - 1 ? -1 : selNode.getNextSiblingID(),
  235. type: "oprNode",
  236. });
  237. }
  238. //get updateSectionInfo nodes
  239. //选中的节点
  240. toUpSectionNodes = toUpSectionNodes.concat(selNodes);
  241. //选中节点的所有子节点
  242. toUpSectionNodes = toUpSectionNodes.concat(
  243. tools.getChildrenNodes(selNodes)
  244. );
  245. billsAjax.downLevel(userAccount, billsLibId, updateData, function () {
  246. //tools.btnAction(btn);
  247. //btn.attr('doing', 'false');
  248. for (let downNode of selNodes) {
  249. controller.setTreeSelected(downNode);
  250. controller.downLevel();
  251. }
  252. sheetBillsDatas = tools.getsheetDatas(
  253. controller.sheet,
  254. "bills",
  255. controller
  256. );
  257. controller.sheet.getParent().focus(true);
  258. //update sectionInfo
  259. if (toUpSectionNodes.length > 0) {
  260. billsAjax.updateSectionInfo(
  261. tools.getUpdateSectionData(toUpSectionNodes),
  262. function () {
  263. tools.btnAction(btn);
  264. btn.attr("doing", "false");
  265. }
  266. );
  267. }
  268. });
  269. }
  270. }
  271. },
  272. delete: function (controller, btn, totalJobs, totalItems) {
  273. tools.btnClose(btn);
  274. btn.attr("doing", "true");
  275. var node = controller.tree.selected;
  276. if (node) {
  277. var deleteIds = [];
  278. var getDeleteIds = function (node) {
  279. if (node) {
  280. deleteIds.push(node.getID());
  281. var length = node.children.length;
  282. if (length > 0) {
  283. for (var i = 0; i < length; i++) {
  284. getDeleteIds(node.children[i]);
  285. }
  286. }
  287. }
  288. };
  289. var selNodes = tools.getSameDepthNodes(controller);
  290. for (var selNode of selNodes) {
  291. getDeleteIds(selNode);
  292. }
  293. let updateNode = node.preSibling
  294. ? {
  295. ID: node.preSibling.getID(),
  296. NextSiblingID: node.getNextSiblingID(),
  297. }
  298. : null;
  299. billsAjax.deleteBills(
  300. userAccount,
  301. billsLibId,
  302. deleteIds,
  303. updateNode,
  304. function () {
  305. tools.btnAction(btn);
  306. btn.attr("doing", "false");
  307. controller.m_delete(selNodes);
  308. //to solve refresh after deleted
  309. let jobsSheet = jobsSpread.getActiveSheet();
  310. let designsSheet = designsSpread.getActiveSheet();
  311. let itemsSheet = itemsSpread.getActiveSheet();
  312. let nowNode = controller.tree.selected;
  313. if (nowNode) {
  314. let jobs = controller.tree.selected.jobs;
  315. const recharge = controller.tree.selected.data.recharge || "";
  316. codeEditor.setValue(recharge);
  317. //$('#exampleTextarea').val(controller.tree.selected.data.recharge);
  318. setSheet.setMaxRowCount(jobsSheet, jobs);
  319. tools.orderReshowData(jobsSheet, jobs, jobsSetting, "job", false);
  320. if (jobs.length > 0) {
  321. orgJobData = jobsSheet.getValue(0, 0);
  322. }
  323. let designs = controller.tree.selected.designs;
  324. setSheet.setMaxRowCount(designsSheet, designs);
  325. tools.orderReshowData(
  326. designsSheet,
  327. designs,
  328. designsSetting,
  329. "design",
  330. false
  331. );
  332. if (designs.length > 0) {
  333. orgDesignData = designsSheet.getValue(0, 0);
  334. }
  335. let items = controller.tree.selected.items;
  336. setSheet.setMaxRowCount(itemsSheet, items);
  337. tools.orderReshowData(
  338. itemsSheet,
  339. items,
  340. itemsSetting,
  341. "item",
  342. false
  343. );
  344. if (items.length > 0) {
  345. orgItemData = itemsSheet.getValue(0, 0);
  346. }
  347. } else {
  348. tools.clearData(jobsSheet);
  349. tools.clearData(designsSheet);
  350. tools.clearData(itemsSheet);
  351. codeEditor.setValue("");
  352. //$('#exampleTextarea').val("");
  353. }
  354. sheetDatas = tools.getsheetDatas(jobsSheet, "jobs");
  355. sheetDesignDatas = tools.getsheetDatas(designsSheet, "designs");
  356. sheetItemsDatas = tools.getsheetDatas(itemsSheet, "items");
  357. sheetBillsDatas = tools.getsheetDatas(
  358. controller.sheet,
  359. "bills",
  360. controller
  361. );
  362. controller.sheet.getParent().focus(true);
  363. //to solve refresh after deleted
  364. }
  365. );
  366. }
  367. },
  368. upMove: function (controller, btn) {
  369. tools.btnClose(btn);
  370. btn.attr("doing", "true");
  371. var node = controller.tree.selected;
  372. var updateData = [];
  373. if (node) {
  374. if (node.preSibling) {
  375. let updateA = {
  376. ID: node.preSibling.getID(),
  377. NextSiblingID: node.getNextSiblingID(),
  378. };
  379. let updateB = {
  380. ID: node.getID(),
  381. NextSiblingID: node.preSibling.getID(),
  382. };
  383. updateData.push(updateA);
  384. updateData.push(updateB);
  385. if (node.preSibling.preSibling) {
  386. let updateC = {
  387. ID: node.preSibling.preSibling.getID(),
  388. NextSiblingID: node.getID(),
  389. };
  390. updateData.push(updateC);
  391. }
  392. billsAjax.upMove(userAccount, billsLibId, updateData, function () {
  393. tools.btnAction(btn);
  394. btn.attr("doing", "false");
  395. controller.upMove();
  396. //udpate tag
  397. controller.sheet.setTag(
  398. controller.tree.selected.serialNo(),
  399. 0,
  400. controller.tree.selected.getID()
  401. );
  402. controller.sheet.setTag(
  403. controller.tree.selected.nextSibling.serialNo(),
  404. 0,
  405. controller.tree.selected.nextSibling.getID()
  406. );
  407. sheetBillsDatas = tools.getsheetDatas(
  408. controller.sheet,
  409. "bills",
  410. controller
  411. );
  412. controller.sheet.getParent().focus(true);
  413. });
  414. }
  415. }
  416. },
  417. downMove: function (controller, btn) {
  418. tools.btnClose(btn);
  419. btn.attr("doing", "true");
  420. var node = controller.tree.selected;
  421. var updateData = [];
  422. if (node) {
  423. if (node.nextSibling) {
  424. var updateA = {
  425. ID: node.getNextSiblingID(),
  426. NextSiblingID: node.getID(),
  427. type: "nextSiblingNode",
  428. };
  429. var updateB = {
  430. ID: node.getID(),
  431. NextSiblingID: node.nextSibling.getNextSiblingID(),
  432. type: "oprNode",
  433. };
  434. updateData.push(updateA);
  435. updateData.push(updateB);
  436. if (node.preSibling) {
  437. var updateC = {
  438. ID: node.preSibling.getID(),
  439. NextSiblingID: node.getNextSiblingID(),
  440. type: "preSiblingNode",
  441. };
  442. updateData.push(updateC);
  443. }
  444. billsAjax.downMove(userAccount, billsLibId, updateData);
  445. tools.btnAction(btn);
  446. btn.attr("doing", "false");
  447. controller.downMove();
  448. //udpate tag
  449. controller.sheet.setTag(
  450. controller.tree.selected.serialNo(),
  451. 0,
  452. controller.tree.selected.getID()
  453. );
  454. controller.sheet.setTag(
  455. controller.tree.selected.preSibling.serialNo(),
  456. 0,
  457. controller.tree.selected.preSibling.getID()
  458. );
  459. sheetBillsDatas = tools.getsheetDatas(
  460. controller.sheet,
  461. "bills",
  462. controller
  463. );
  464. controller.sheet.getParent().focus(true);
  465. }
  466. }
  467. },
  468. onEditStart: function (sender, args) {
  469. dbController.currentEditData = args.sheet.getValue(args.row, args.col);
  470. },
  471. onEditEnded: function (sender, args) {
  472. let controller = dbController.controller;
  473. var node = controller.tree.items[args.row],
  474. updateId,
  475. field;
  476. if (node) {
  477. updateId = node.getID();
  478. field = billsLibSetting.cols[args.col].data.field;
  479. /* if (field === 'engineering') {
  480. if (isNaN(args.editingText) || args.editingText % 1 !== 0) {
  481. args.sheet.setValue(args.row, args.col, dbController.currentEditData ? dbController.currentEditData : '');
  482. alert('工程专业只能输入整数!');
  483. return;
  484. }
  485. } else */ if (field === "unitPrice") {
  486. if (isNaN(args.editingText)) {
  487. args.sheet.setValue(
  488. args.row,
  489. args.col,
  490. dbController.currentEditData ? dbController.currentEditData : ""
  491. );
  492. alert("单价只能输入数值!");
  493. return;
  494. }
  495. }
  496. node.data[field] = args.editingText;
  497. sheetBillsDatas.datasIdx["rowIdx" + args.row][field] = args.editingText;
  498. billsAjax.updateBills(
  499. userAccount,
  500. billsLibId,
  501. updateId,
  502. field,
  503. args.editingText
  504. );
  505. } else {
  506. args.sheet
  507. .getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport)
  508. .value("");
  509. }
  510. },
  511. onEnterCell: function (sender, args) {
  512. args.sheet.repaint();
  513. },
  514. onButtonClicked: function (sender, info) {
  515. if (info.sheet.isEditing()) {
  516. info.sheet.endEdit(true);
  517. }
  518. const field = dbController.controller.setting.cols[info.col].data.field;
  519. var node = dbController.controller.tree.items[info.row];
  520. if (node && field === "isBillBudget") {
  521. const isChecked = Boolean(info.sheet.getValue(info.row, info.col));
  522. const allNodes = [node, ...node.getPosterity()];
  523. const postData = [];
  524. allNodes.forEach((item) => {
  525. postData.push({ ID: item.data.ID, [field]: isChecked });
  526. });
  527. billsAjax.pasteBills(userAccount, billsLibId, postData, () => {
  528. allNodes.forEach((item) => {
  529. const row = node.tree.items.indexOf(item);
  530. if (row >= 0) {
  531. sheetBillsDatas.datasIdx["rowIdx" + row][field] = isChecked;
  532. item.data[field] = isChecked;
  533. }
  534. });
  535. dbController.controller.refreshTreeNode(allNodes, false);
  536. });
  537. /* node.data[field] = isChecked;
  538. sheetBillsDatas.datasIdx['rowIdx' + info.row][field] = isChecked;
  539. billsAjax.updateBills(userAccount, billsLibId, node.getID(), field, isChecked); */
  540. }
  541. },
  542. editData: function (controller, billsSpread) {
  543. billsSpread.bind(
  544. GC.Spread.Sheets.Events.ButtonClicked,
  545. this.onButtonClicked
  546. );
  547. controller.sheet.bind(
  548. GC.Spread.Sheets.Events.EditStarting,
  549. this.onEditStart
  550. );
  551. controller.sheet.bind(GC.Spread.Sheets.Events.EditEnded, this.onEditEnded);
  552. controller.sheet.bind(GC.Spread.Sheets.Events.EnterCell, this.onEnterCell);
  553. },
  554. };
  555. var createObj = {
  556. newJob: function (data) {
  557. var Job = function (data) {
  558. this.data = data;
  559. //count = 0则没有被引用了
  560. this.count = 0;
  561. };
  562. return new Job(data);
  563. },
  564. newJobs: function () {
  565. var TotalJobs = function () {
  566. this.jobs = {};
  567. this.jobsArr = [];
  568. this.prefix = "_id";
  569. };
  570. TotalJobs.prototype.findJob = function (id) {
  571. return this.jobs[this.prefix + id] ? this.jobs[this.prefix + id] : null;
  572. };
  573. TotalJobs.prototype.loadJobs = function (nodes, datas) {
  574. var me = this;
  575. datas.forEach(function (jobData) {
  576. var job = createObj.newJob(jobData);
  577. me.jobs[me.prefix + jobData.id] = job;
  578. me.jobsArr.push(job);
  579. });
  580. if (nodes) {
  581. nodes.forEach(function (node) {
  582. node.jobs = new Array();
  583. let spliceArr = [];
  584. node.data.jobs.forEach(function (obj) {
  585. if (me.jobs[me.prefix + obj.id]) {
  586. node.jobs.push({
  587. job: me.jobs[me.prefix + obj.id],
  588. serialNo: obj.serialNo,
  589. });
  590. me.jobs[me.prefix + obj.id].count++;
  591. } else {
  592. spliceArr.push(obj);
  593. }
  594. });
  595. for (let sItem of spliceArr) {
  596. node.data.jobs.splice(node.data.jobs.indexOf(sItem), 1);
  597. }
  598. });
  599. }
  600. };
  601. TotalJobs.prototype.getUpdateIds = function (nodes, repeatId) {
  602. var ids = [];
  603. nodes.forEach(function (node) {
  604. node.jobs.forEach(function (job) {
  605. if (job.data.id === repeatId) {
  606. ids.push(node.getID());
  607. }
  608. });
  609. });
  610. return ids;
  611. };
  612. return new TotalJobs();
  613. },
  614. newDesign: function (data) {
  615. var Design = function (data) {
  616. this.data = data;
  617. //count = 0则没有被引用了
  618. this.count = 0;
  619. };
  620. return new Design(data);
  621. },
  622. newDesigns: function () {
  623. var TotalDesigns = function () {
  624. this.designs = {};
  625. this.designsArr = [];
  626. this.prefix = "_id";
  627. };
  628. TotalDesigns.prototype.findDesign = function (id) {
  629. return this.designs[this.prefix + id]
  630. ? this.designs[this.prefix + id]
  631. : null;
  632. };
  633. TotalDesigns.prototype.loadDesigns = function (nodes, datas) {
  634. var me = this;
  635. datas.forEach(function (data) {
  636. var design = createObj.newDesign(data);
  637. me.designs[me.prefix + data.id] = design;
  638. me.designsArr.push(design);
  639. });
  640. if (nodes) {
  641. nodes.forEach(function (node) {
  642. node.designs = new Array();
  643. if (node.data.designs) {
  644. let spliceArr = [];
  645. node.data.designs.forEach(function (obj) {
  646. if (me.designs[me.prefix + obj.id]) {
  647. node.designs.push({
  648. design: me.designs[me.prefix + obj.id],
  649. serialNo: obj.serialNo,
  650. });
  651. me.designs[me.prefix + obj.id].count++;
  652. } else {
  653. spliceArr.push(obj);
  654. }
  655. });
  656. for (let sItem of spliceArr) {
  657. node.data.designs.splice(node.data.designs.indexOf(sItem), 1);
  658. }
  659. }
  660. });
  661. }
  662. };
  663. TotalDesigns.prototype.getUpdateIds = function (nodes, repeatId) {
  664. var ids = [];
  665. nodes.forEach(function (node) {
  666. node.designs.forEach(function (design) {
  667. if (design.data.id === repeatId) {
  668. ids.push(node.getID());
  669. }
  670. });
  671. });
  672. return ids;
  673. };
  674. return new TotalDesigns();
  675. },
  676. newItem: function (data) {
  677. var Item = function (data) {
  678. this.data = data;
  679. this.count = 0;
  680. };
  681. return new Item(data);
  682. },
  683. newItems: function () {
  684. var TotalItems = function () {
  685. this.items = {};
  686. this.itemsArr = [];
  687. this.prefix = "_id";
  688. };
  689. TotalItems.prototype.findItem = function (id) {
  690. return this.items[this.prefix + id] ? this.items[this.prefix + id] : null;
  691. };
  692. TotalItems.prototype.loadItems = function (nodes, datas) {
  693. var me = this;
  694. datas.forEach(function (itemData) {
  695. var item = createObj.newItem(itemData);
  696. me.items[me.prefix + itemData.id] = item;
  697. me.itemsArr.push(item);
  698. });
  699. if (nodes) {
  700. nodes.forEach(function (node) {
  701. node.items = new Array();
  702. let spliceArr = [];
  703. node.data.items.forEach(function (obj) {
  704. if (me.items[me.prefix + obj.id]) {
  705. node.items.push({
  706. item: me.items[me.prefix + obj.id],
  707. serialNo: obj.serialNo,
  708. });
  709. me.items[me.prefix + obj.id].count++;
  710. } else {
  711. spliceArr.push(obj);
  712. }
  713. });
  714. for (let sItem of spliceArr) {
  715. node.data.items.splice(node.data.items.indexOf(sItem), 1);
  716. }
  717. });
  718. }
  719. };
  720. TotalItems.prototype.getUpdateIds = function (nodes, repeatId) {
  721. var ids = [];
  722. nodes.forEach(function (node) {
  723. node.items.forEach(function (item) {
  724. if (item.data.id === repeatId) {
  725. ids.push(node.getID());
  726. }
  727. });
  728. });
  729. return ids;
  730. };
  731. return new TotalItems();
  732. },
  733. };
  734. var tools = {
  735. alertOpr: function (args, sheet, txt, arr, field) {
  736. $("#alertTxt").text(txt);
  737. $("#alertBtn").click();
  738. sheet.options.isProtected = true;
  739. let dataCode = args.col === 0 ? "code" : "content";
  740. let orgCode =
  741. args.row < arr.length ? arr[args.row][field].data[dataCode] : "";
  742. $("#alertCof").unbind("click");
  743. $("#alertCls").unbind("click");
  744. $("#alertCls").click(function () {
  745. sheet.options.isProtected = false;
  746. sheet.getCell(args.row, args.col).value(orgCode);
  747. });
  748. $("#alertCof").click(function () {
  749. sheet.options.isProtected = false;
  750. sheet.getCell(args.row, args.col).value(orgCode);
  751. });
  752. },
  753. alertTotalOpr: function (args, txt, arr) {
  754. $("#alertTxt").text(txt);
  755. $("#alertBtn").click();
  756. args.sheet.options.isProtected = true;
  757. let dataCode = args.col === 0 ? "code" : "content";
  758. let orgCode = args.row < arr.length ? arr[args.row].data[dataCode] : "";
  759. $("#alertCof").unbind("click");
  760. $("#alertCls").unbind("click");
  761. $("#alertCls").click(function () {
  762. args.sheet.options.isProtected = false;
  763. args.sheet.getCell(args.row, args.col).value(orgCode);
  764. });
  765. $("#alertCof").click(function () {
  766. args.sheet.options.isProtected = false;
  767. args.sheet.getCell(args.row, args.col).value(orgCode);
  768. });
  769. },
  770. //ref sheet up&down Move
  771. canUpMove: function (selected, arr) {
  772. return selected && arr.indexOf(selected) > 0 && arr.indexOf(selected) !== -1
  773. ? true
  774. : false;
  775. },
  776. canDownMove: function (selected, arr) {
  777. return selected &&
  778. arr.indexOf(selected) < arr.length - 1 &&
  779. arr.indexOf(selected) !== -1
  780. ? true
  781. : false;
  782. },
  783. btnClose: function (btn) {
  784. btn.css("opacity", "0.2");
  785. btn.addClass("disabled");
  786. //btn.attr(attr, 'true');
  787. },
  788. btnAction: function (btn) {
  789. btn.css("opacity", "");
  790. btn.removeClass("disabled");
  791. //btn.attr(attr, 'false');
  792. },
  793. /*isExist: function (totalArr, field, newData, orgData){
  794. var isExist = false;
  795. if(totalArr.length > 0){
  796. totalArr.forEach(function(item){
  797. if(item.data[field] == newData && newData !== orgData){
  798. isExist = true;
  799. }
  800. });
  801. }
  802. return isExist;
  803. },*/
  804. isExist: function (totalArr, field, newData) {
  805. var isExist = false;
  806. if (totalArr.length > 0) {
  807. totalArr.forEach(function (item) {
  808. if (item.data[field] == newData) {
  809. isExist = true;
  810. }
  811. });
  812. }
  813. return isExist;
  814. },
  815. isDesignExist: function (totalArr, field, newData, sheet, row) {
  816. if (field === "code") {
  817. return !!totalArr.find((item) => item.data.code == newData);
  818. }
  819. const name = field === "name" ? newData : sheet.getValue(row, 1);
  820. const unit = field === "unit" ? newData : sheet.getValue(row, 2);
  821. return !!totalArr.find(
  822. (item) => item.data.name == name && item.data.unit == unit
  823. );
  824. },
  825. isRepeat: function (arr, field, newData, ref, classify) {
  826. var isRepeat = false;
  827. if (classify) {
  828. if (arr) {
  829. arr.forEach(function (item) {
  830. if (ref === "reference" && item[classify].data[field] == newData) {
  831. isRepeat = true;
  832. } else if (ref === "document" && item[field] == newData) {
  833. isRepeat = true;
  834. }
  835. });
  836. }
  837. } else {
  838. if (arr) {
  839. arr.forEach(function (item) {
  840. if (ref === "reference" && item.data[field] == newData) {
  841. isRepeat = true;
  842. } else if (ref === "document" && item[field] == newData) {
  843. isRepeat = true;
  844. }
  845. });
  846. }
  847. }
  848. return isRepeat;
  849. },
  850. isDesignRepeat: function (arr, field, newData, ref, classify, sheet, row) {
  851. const name = field === "name" ? newData : sheet.getValue(row, 1);
  852. const unit = field === "unit" ? newData : sheet.getValue(row, 2);
  853. var isRepeat = false;
  854. if (classify) {
  855. if (arr) {
  856. arr.forEach(function (item, index) {
  857. if (
  858. ref === "reference" &&
  859. index !== row &&
  860. ((item[classify].data.name == name &&
  861. item[classify].data.unit == unit) ||
  862. (field === "code" && item[classify].data.code == newData))
  863. ) {
  864. isRepeat = true;
  865. } else if (
  866. ref === "document" &&
  867. index !== row &&
  868. ((item.name == name && item.unit == unit) ||
  869. (field === "code" && item.code == newData))
  870. ) {
  871. isRepeat = true;
  872. }
  873. });
  874. }
  875. } else {
  876. if (arr) {
  877. arr.forEach(function (item, index) {
  878. if (
  879. ref === "reference" &&
  880. index !== row &&
  881. ((item.data.name == name && item.data.unit == unit) ||
  882. (field === "code" && item.data.code == newData))
  883. ) {
  884. isRepeat = true;
  885. } else if (
  886. ref === "document" &&
  887. index !== row &&
  888. ((item.name == name && item.unit == unit) ||
  889. (field === "code" && item.code == newData))
  890. ) {
  891. isRepeat = true;
  892. }
  893. });
  894. }
  895. }
  896. return isRepeat;
  897. },
  898. getContentByCode: function (items, code) {
  899. for (let item of items) {
  900. if (item.data.code == code) {
  901. return item.data.content;
  902. }
  903. }
  904. return null;
  905. },
  906. addAttr: function (attr) {
  907. if (!attr) {
  908. attr = new Array();
  909. }
  910. },
  911. isEmptyObj: function (obj) {
  912. let t;
  913. for (t in obj) return !1;
  914. return !0;
  915. },
  916. reSetCell: function (sheet, rowIdx, colIdx, value, id) {
  917. if (value && colIdx !== null) {
  918. sheet
  919. .getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport)
  920. .value(value);
  921. }
  922. sheet.setTag(rowIdx, 0, id);
  923. sheet.setTag(rowIdx, 1, id);
  924. },
  925. getIndex: function (arr, id, classify) {
  926. var index;
  927. arr.forEach(function (item) {
  928. if (item[classify].data.id === id) {
  929. index = arr.indexOf(item);
  930. }
  931. });
  932. return index;
  933. },
  934. getObj: function (arr, id, classify) {
  935. for (let i = 0; i < arr.length; i++) {
  936. if (arr[i][classify].data.id === id) {
  937. return arr[i];
  938. }
  939. }
  940. return null;
  941. },
  942. getNewCode: function (totalObj, classify) {
  943. let arr;
  944. if (classify === "jobs") {
  945. arr = totalObj.jobsArr;
  946. } else {
  947. arr = totalObj.itemsArr;
  948. }
  949. tools.resort(arr, "code", false);
  950. return arr.length > 0 ? arr[arr.length - 1].data.code : 0;
  951. },
  952. getValidDatas: function (sheet, setting, args) {
  953. let validDatas = [];
  954. let orgRow = args.cellRange.row,
  955. orgCol = args.cellRange.col,
  956. rowCount = args.cellRange.rowCount,
  957. colCount = args.cellRange.colCount;
  958. let maxRow = orgRow + rowCount - 1,
  959. maxCol = orgCol + colCount - 1;
  960. for (let i = orgRow; i <= maxRow; i++) {
  961. let validData = {};
  962. for (let j = orgCol; j <= maxCol; j++) {
  963. let value = sheet.getValue(i, j) || "";
  964. if (value) {
  965. if (setting.cols[j].data.field === "engineering") {
  966. if (!isNaN(value) && value % 1 === 0) {
  967. validData[setting.cols[j].data.field] = value;
  968. }
  969. } else if (setting.cols[j].data.field === "unitPrice") {
  970. if (!isNaN(value)) {
  971. validData[setting.cols[j].data.field] = value;
  972. }
  973. } else if (setting.cols[j].data.field === "fixedFlag") {
  974. let findData = BillsFixedFlagList.find((x) => x.name === value);
  975. if (findData) {
  976. validData[setting.cols[j].data.field] = findData.value;
  977. }
  978. } else if (setting.cols[j].data.field === "kind") {
  979. const kindItem = billKindComboList.find(
  980. (item) => item.name === value
  981. );
  982. if (kindItem) {
  983. validData[setting.cols[j].data.field] = kindItem.value;
  984. }
  985. } else {
  986. validData[setting.cols[j].data.field] = value;
  987. }
  988. } else {
  989. validData[setting.cols[j].data.field] = value;
  990. }
  991. }
  992. if (!tools.isEmptyObj(validData)) {
  993. validDatas.push(validData);
  994. }
  995. }
  996. return validDatas;
  997. },
  998. getValidRow: function (sheet, rowIdx) {
  999. const colCount = 5;
  1000. let isValid = false;
  1001. for (let i = 0; i < colCount; i++) {
  1002. if (sheet.getValue(rowIdx, i, GC.Spread.Sheets.SheetArea.viewport)) {
  1003. isValid = true;
  1004. }
  1005. }
  1006. return isValid;
  1007. },
  1008. getDelDatas: function (controller, totalJobs, totalItems) {
  1009. let delJobs = controller.tree.selected.jobs,
  1010. delItems = controller.tree.selected.items,
  1011. delJobsIds = [],
  1012. delItemsIds = [];
  1013. if (delJobs.length > 0) {
  1014. delJobs.forEach();
  1015. }
  1016. },
  1017. delteSheets: function (
  1018. controller,
  1019. totalJobs,
  1020. totalItems,
  1021. jobsSheet,
  1022. itemsSheet
  1023. ) {
  1024. var delJobs = controller.tree.selected.jobs;
  1025. var delItems = controller.tree.selected.items;
  1026. var delJobsIds = [];
  1027. var delItemsIds = [];
  1028. if (delJobs.length > 0) {
  1029. delJobs.forEach(function (obj) {
  1030. obj.job.count--;
  1031. if (obj.job.count <= 0) {
  1032. totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1);
  1033. delJobsIds.push(obj.job.data.id);
  1034. }
  1035. });
  1036. jobsAjax.deleteJobContent(userAccount, billsLibId, delJobsIds);
  1037. tools.clearData(jobsSheet);
  1038. tools.orderReshowData(
  1039. jobsSheet,
  1040. controller.tree.selected.jobs,
  1041. jobsSetting,
  1042. "job",
  1043. true
  1044. );
  1045. }
  1046. if (delItems.length > 0) {
  1047. delItems.forEach(function (obj) {
  1048. obj.item.count--;
  1049. if (obj.item.count <= 0) {
  1050. totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1);
  1051. delItemsIds.push(obj.item.data.id);
  1052. }
  1053. });
  1054. itemsAjax.deleteItemCharacter(userAccount, billsLibId, delItemsIds);
  1055. tools.clearData(itemsSheet);
  1056. tools.orderReshowData(
  1057. itemsSheet,
  1058. controller.tree.selected.items,
  1059. itemsSetting,
  1060. "item",
  1061. true
  1062. );
  1063. }
  1064. controller.delete();
  1065. },
  1066. deleteELes: function (arr, delIds, classifyStr) {
  1067. var ids = [];
  1068. delIds.forEach(function (delId) {
  1069. arr.forEach(function (ele) {
  1070. if (ele[classifyStr].data.id === delId) {
  1071. arr.splice(arr.indexOf(ele), 1);
  1072. ele.count--;
  1073. /*if(ele.count <= 0){
  1074. ids.push(ele.data.id);
  1075. }*/
  1076. }
  1077. });
  1078. });
  1079. /* if(callback){
  1080. callback(ids);
  1081. }*/
  1082. },
  1083. getSerialNo: function (arr) {
  1084. if (arr.length > 0) {
  1085. tools.resortSerialNo(arr);
  1086. return arr[arr.length - 1].serialNo + 1;
  1087. }
  1088. return 1;
  1089. },
  1090. resortSerialNo: function (arr) {
  1091. function compare() {
  1092. return function (a, b) {
  1093. let valA = a.serialNo,
  1094. valB = b.serialNo;
  1095. return valA - valB;
  1096. };
  1097. }
  1098. arr.sort(compare());
  1099. },
  1100. resort: function (arr, attr, isValue) {
  1101. function compare(attr) {
  1102. return function (a, b) {
  1103. var valA, valB;
  1104. if (isValue) {
  1105. valA = a[attr];
  1106. valB = a[attr];
  1107. } else {
  1108. valA = a.data[attr];
  1109. valB = b.data[attr];
  1110. }
  1111. return valA - valB;
  1112. };
  1113. }
  1114. arr.sort(compare(attr));
  1115. },
  1116. //update--
  1117. orderReshowData: function (sheet, arr, setting, classify, isResort) {
  1118. const colCount = setting.cols.length;
  1119. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.viewport);
  1120. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.colHeader);
  1121. tools.clearData(sheet);
  1122. if (arr.length > 0) {
  1123. sheet.suspendPaint();
  1124. setSheet.setMaxRowCount(sheet, arr);
  1125. if (isResort) {
  1126. tools.resortSerialNo(arr);
  1127. }
  1128. let length = arr.length;
  1129. for (let i = 0; i < length; i++) {
  1130. setting.cols.forEach(function (col, colIdx) {
  1131. sheet.setTag(i, colIdx, arr[i][classify].data.id);
  1132. if (arr[i][classify].data[col.data.field]) {
  1133. sheet
  1134. .getCell(i, colIdx)
  1135. .value(arr[i][classify].data[col.data.field]);
  1136. } else {
  1137. sheet.getCell(i, colIdx).value("");
  1138. }
  1139. });
  1140. }
  1141. sheet.resumePaint();
  1142. }
  1143. },
  1144. reshowData: function (sheet, arr, setting, isResort) {
  1145. sheet.suspendPaint();
  1146. const colCount = setting.cols.length;
  1147. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.viewport);
  1148. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.colHeader);
  1149. tools.clearData(sheet);
  1150. if (isResort) {
  1151. tools.resort(arr, "code", false);
  1152. }
  1153. if (arr.length > 0) {
  1154. var length = arr.length;
  1155. for (var i = 0; i < length; i++) {
  1156. setting.cols.forEach(function (col, colIdx) {
  1157. sheet.setTag(i, colIdx, arr[i].data.id);
  1158. if (arr[i].data[col.data.field]) {
  1159. sheet.getCell(i, colIdx).value(arr[i].data[col.data.field]);
  1160. } else {
  1161. sheet.getCell(i, colIdx).value("");
  1162. }
  1163. });
  1164. }
  1165. }
  1166. sheet.resumePaint();
  1167. },
  1168. reshowValue: function (sheet, arr, setting, isResort) {
  1169. sheet.suspendPaint();
  1170. tools.clearData(sheet);
  1171. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
  1172. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
  1173. if (isResort) {
  1174. //tools.resort(arr, 'code', true);
  1175. function myCompareCode(a, b) {
  1176. let valA = a.code,
  1177. valB = b.code;
  1178. return valA - valB;
  1179. }
  1180. arr.sort(myCompareCode);
  1181. }
  1182. if (arr.length > 0) {
  1183. var length = arr.length;
  1184. for (var i = 0; i < length; i++) {
  1185. setting.cols.forEach(function (col, colIdx) {
  1186. sheet.setTag(i, colIdx, arr[i].code);
  1187. if (arr[i][col.data.field]) {
  1188. sheet.getCell(i, colIdx).value(arr[i][col.data.field]);
  1189. } else {
  1190. sheet.getCell(i, colIdx).value("");
  1191. }
  1192. });
  1193. }
  1194. }
  1195. sheet.resumePaint();
  1196. },
  1197. clearData: function (sheet) {
  1198. sheet.clear(
  1199. 0,
  1200. 0,
  1201. sheet.getRowCount(),
  1202. sheet.getColumnCount(),
  1203. GC.Spread.Sheets.SheetArea.viewport,
  1204. GC.Spread.Sheets.StorageType.data
  1205. );
  1206. sheet.clear(
  1207. 0,
  1208. 0,
  1209. sheet.getRowCount(),
  1210. sheet.getColumnCount(),
  1211. GC.Spread.Sheets.SheetArea.viewport,
  1212. GC.Spread.Sheets.StorageType.tag
  1213. );
  1214. },
  1215. getRoot: function (node) {
  1216. return node.parent ? tools.getRoot(node.parent) : node;
  1217. },
  1218. getBillsIds: function (callback) {
  1219. billsAjax.getBills(billsLibId, function (datas) {
  1220. var ids = [];
  1221. datas.forEach(function (data) {
  1222. ids.push(data.ID);
  1223. });
  1224. if (callback) {
  1225. callback(ids);
  1226. }
  1227. });
  1228. },
  1229. delIds: function (sheet) {
  1230. var ids = [];
  1231. var sels = sheet.getSelections();
  1232. sels.forEach(function (sel) {
  1233. var orgRow = sel.row,
  1234. rowCount = sel.rowCount,
  1235. colCount = sel.colCount;
  1236. var orgCol = sel.col === -1 ? 0 : sel.col;
  1237. var maxRow = orgRow + rowCount - 1;
  1238. for (var i = orgRow; i <= maxRow; i++) {
  1239. if (sheet.getTag(i, orgCol)) {
  1240. ids.push(sheet.getTag(i, orgCol));
  1241. }
  1242. }
  1243. });
  1244. return ids;
  1245. },
  1246. redirect: function (billsLibId, newHref) {
  1247. mainAjax.getABillsLib(billsLibId, function (result) {
  1248. if (result.length === 0) {
  1249. window.location.href = newHref;
  1250. }
  1251. });
  1252. },
  1253. uniqArr: function (arr) {
  1254. let newArr = [];
  1255. for (let i = 0; i < arr.length; i++) {
  1256. if (newArr.indexOf(arr[i]) === -1) {
  1257. newArr.push(arr[i]);
  1258. }
  1259. }
  1260. return newArr;
  1261. },
  1262. uniqObjArr: function (arr) {
  1263. let uniqArr = [];
  1264. for (let i = 0; i < arr.length; i++) {
  1265. let uniqLen = uniqArr.length;
  1266. let flag = false;
  1267. if (uniqLen > 0) {
  1268. for (let j = 0; j < uniqLen; j++) {
  1269. if (
  1270. arr[i].field === uniqArr[j].field &&
  1271. arr[i].data === uniqArr[j].data
  1272. ) {
  1273. flag = true;
  1274. //uniqArr.push(arr[i]);
  1275. }
  1276. }
  1277. if (!flag) {
  1278. uniqArr.push(arr[i]);
  1279. }
  1280. } else {
  1281. uniqArr.push(arr[i]);
  1282. }
  1283. }
  1284. return uniqArr;
  1285. },
  1286. resetRowIdx: function (arr, beginRow) {
  1287. let rowIdx = beginRow;
  1288. for (let i = 0; i < arr.length; i++) {
  1289. if (arr[i].rowIdx !== rowIdx) {
  1290. rowIdx++;
  1291. arr[i].rowIdx = rowIdx;
  1292. }
  1293. }
  1294. },
  1295. getsheetDatas: function (sheet, classify, controller) {
  1296. let rowCount = sheet.getRowCount();
  1297. let colCount = sheet.getColumnCount();
  1298. const colIdx = 1;
  1299. let sheetDatas;
  1300. if (classify === "total") {
  1301. sheetDatas = [];
  1302. for (let i = 0; i < rowCount; i++) {
  1303. for (let j = 0; j <= colCount - 1; j++) {
  1304. let data = sheet.getCell(i, j).value,
  1305. id = sheet.getTag(i, j);
  1306. if (data && id) {
  1307. let unitData = {
  1308. rowIdx: i,
  1309. colIdx: j,
  1310. data: data,
  1311. id: id,
  1312. };
  1313. sheetDatas.push(unitData);
  1314. }
  1315. }
  1316. }
  1317. } else if (classify === "bills") {
  1318. sheetDatas = { datasIdx: {}, datas: [] };
  1319. for (let i = 0; i < controller.tree.items.length; i++) {
  1320. let kind = sheet.getValue(i, 0),
  1321. code = sheet.getValue(i, 1),
  1322. name = sheet.getValue(i, 2),
  1323. unit = sheet.getValue(i, 3),
  1324. ruleText = sheet.getValue(i, 4),
  1325. engineerContent = sheet.getValue(i, 5),
  1326. unitPrice = sheet.getValue(i, 6),
  1327. // engineering = sheet.getValue(i, 7),
  1328. fixedFlag = sheet.getValue(i, 7),
  1329. landType = sheet.getValue(i, 8);
  1330. let data = {
  1331. kind: kind,
  1332. code: code,
  1333. name: name,
  1334. unit: unit,
  1335. ruleText: ruleText,
  1336. engineerContent,
  1337. landType,
  1338. unitPrice,
  1339. /* engineering: engineering, */ fixedFlag: fixedFlag,
  1340. rowIdx: i,
  1341. };
  1342. sheetDatas.datas.push(data);
  1343. sheetDatas.datasIdx["rowIdx" + i] = data;
  1344. }
  1345. } else if (classify === "designs") {
  1346. sheetDatas = [];
  1347. for (let i = 0; i < rowCount; i++) {
  1348. let name = sheet.getCell(i, 1).value(),
  1349. unit = sheet.getCell(i, 2).value(),
  1350. id = sheet.getTag(i, colIdx);
  1351. if (id) {
  1352. let rowData = {
  1353. rowIdx: i,
  1354. name,
  1355. unit,
  1356. id: id,
  1357. };
  1358. sheetDatas.push(rowData);
  1359. }
  1360. }
  1361. } else {
  1362. sheetDatas = [];
  1363. for (let i = 0; i < rowCount; i++) {
  1364. let data = sheet.getCell(i, colIdx).value(),
  1365. id = sheet.getTag(i, colIdx);
  1366. if (data && id) {
  1367. let rowData = {
  1368. rowIdx: i,
  1369. data: data,
  1370. id: id,
  1371. };
  1372. sheetDatas.push(rowData);
  1373. }
  1374. }
  1375. }
  1376. return sheetDatas;
  1377. },
  1378. encapData: function (uncrossedDatas, crossedDatas, controller, totalJobs) {
  1379. const UpdateExist = "updateExist",
  1380. UpdateNew = "updateNew",
  1381. CreateExist = "createExist",
  1382. CreateNew = "createNew";
  1383. let updateDatas = [];
  1384. let createDatas = [];
  1385. let nodeId = controller.tree.selected.getID();
  1386. uncrossedDatas.forEach((obj) => {
  1387. let cnDataObj, ceDataObj, content, jobId;
  1388. let isExisit = tools.isExist(
  1389. totalJobs.jobsArr,
  1390. "content",
  1391. obj.data,
  1392. null
  1393. );
  1394. let isRepeat = tools.isRepeat(
  1395. controller.tree.selected.jobs,
  1396. "content",
  1397. obj.data,
  1398. "reference",
  1399. "job"
  1400. );
  1401. if (isExisit && !isRepeat) {
  1402. totalJobs.jobsArr.forEach((job) => {
  1403. if (obj.data == job.data.content) {
  1404. jobId = job.data.id;
  1405. }
  1406. });
  1407. ceDataObj = {
  1408. newData: obj.data,
  1409. billsLibId: billsLibId,
  1410. nodeId: nodeId,
  1411. jobId: jobId,
  1412. serialNo: obj.serialNo,
  1413. type: CreateExist,
  1414. };
  1415. createDatas.push(ceDataObj);
  1416. }
  1417. if (!isExisit) {
  1418. maxJobsNumber++;
  1419. //currentCountId++;
  1420. cnDataObj = {
  1421. //id: maxJobsNumber,
  1422. billsLibId: billsLibId,
  1423. nodeId: nodeId,
  1424. newData: obj.data,
  1425. code: maxJobsNumber,
  1426. serialNo: obj.serialNo,
  1427. type: CreateNew,
  1428. };
  1429. createDatas.push(cnDataObj);
  1430. }
  1431. });
  1432. crossedDatas.forEach((cData) => {
  1433. let ueObj, unObj, newJobId;
  1434. let isExisit = tools.isExist(
  1435. totalJobs.jobsArr,
  1436. "content",
  1437. cData.newData,
  1438. null
  1439. );
  1440. let isRepeat = tools.isRepeat(
  1441. controller.tree.selected.jobs,
  1442. "content",
  1443. cData.newData,
  1444. "reference",
  1445. "job"
  1446. );
  1447. if (isExisit && !isRepeat) {
  1448. totalJobs.jobsArr.forEach((job) => {
  1449. if (cData.newData == job.data.content) {
  1450. newJobId = job.data.id;
  1451. }
  1452. });
  1453. ueObj = {
  1454. newData: cData.newData,
  1455. billsLibId: billsLibId,
  1456. nodeId: nodeId,
  1457. newJobId: newJobId,
  1458. orgJobId: cData.orgId,
  1459. serialNo: cData.serialNo,
  1460. type: UpdateExist,
  1461. };
  1462. updateDatas.push(ueObj);
  1463. }
  1464. if (!isExisit && !isRepeat) {
  1465. maxJobsNumber++;
  1466. //currentCountId++;
  1467. unObj = {
  1468. //newJobId: maxJobsNumber,
  1469. billsLibId: billsLibId,
  1470. nodeId: nodeId,
  1471. newData: cData.newData,
  1472. orgJobId: cData.orgId,
  1473. code: maxJobsNumber,
  1474. serialNo: cData.serialNo,
  1475. type: UpdateNew,
  1476. };
  1477. updateDatas.push(unObj);
  1478. }
  1479. });
  1480. let pasteDatas = {
  1481. updateDatas: updateDatas,
  1482. createDatas: createDatas,
  1483. };
  1484. return pasteDatas;
  1485. },
  1486. getDesignByNameUnit: function (arr, name, unit, fromSelected) {
  1487. if (fromSelected) {
  1488. return arr.find(
  1489. (item) => item.design.data.name == name && item.design.data.unit == unit
  1490. );
  1491. } else {
  1492. return arr.find(
  1493. (item) => item.data.name == name && item.data.unit == unit
  1494. );
  1495. }
  1496. },
  1497. encapDesignsData: function (
  1498. uncrossedDatas,
  1499. crossedDatas,
  1500. controller,
  1501. totalDesigns
  1502. ) {
  1503. const UpdateExist = "updateExist",
  1504. UpdateNew = "updateNew",
  1505. CreateExist = "createExist",
  1506. CreateNew = "createNew";
  1507. let updateDatas = [];
  1508. let createDatas = [];
  1509. let nodeId = controller.tree.selected.getID();
  1510. uncrossedDatas.forEach((obj) => {
  1511. let cnDataObj, ceDataObj, designId;
  1512. const matchedTotalDesign = tools.getDesignByNameUnit(
  1513. totalDesigns.designsArr,
  1514. obj.name,
  1515. obj.unit,
  1516. false
  1517. );
  1518. const matchedDesign = tools.getDesignByNameUnit(
  1519. controller.tree.selected.designs,
  1520. obj.name,
  1521. obj.unit,
  1522. true
  1523. );
  1524. if (matchedTotalDesign && !matchedDesign) {
  1525. designId = matchedTotalDesign.data.id;
  1526. ceDataObj = {
  1527. name: obj.name,
  1528. unit: obj.unit,
  1529. billsLibId: billsLibId,
  1530. nodeId: nodeId,
  1531. designId: designId,
  1532. serialNo: obj.serialNo,
  1533. type: CreateExist,
  1534. };
  1535. createDatas.push(ceDataObj);
  1536. }
  1537. if (!matchedTotalDesign) {
  1538. maxDesignsNumber++;
  1539. cnDataObj = {
  1540. //id: maxJobsNumber,
  1541. billsLibId: billsLibId,
  1542. nodeId: nodeId,
  1543. name: obj.name,
  1544. unit: obj.unit,
  1545. code: maxDesignsNumber,
  1546. serialNo: obj.serialNo,
  1547. type: CreateNew,
  1548. };
  1549. createDatas.push(cnDataObj);
  1550. }
  1551. });
  1552. crossedDatas.forEach((cData) => {
  1553. let ueObj, unObj, newDesignId;
  1554. const matchedTotalDesign = tools.getDesignByNameUnit(
  1555. totalDesigns.designsArr,
  1556. cData.name,
  1557. cData.unit,
  1558. false
  1559. );
  1560. const matchedDesign = tools.getDesignByNameUnit(
  1561. controller.tree.selected.designs,
  1562. cData.name,
  1563. cData.unit,
  1564. true
  1565. );
  1566. if (matchedTotalDesign && !matchedDesign) {
  1567. newDesignId = matchedTotalDesign.data.id;
  1568. ueObj = {
  1569. name: cData.name,
  1570. unit: cData.unit,
  1571. billsLibId: billsLibId,
  1572. nodeId: nodeId,
  1573. newDesignId: newDesignId,
  1574. orgDesignId: cData.orgId,
  1575. serialNo: cData.serialNo,
  1576. type: UpdateExist,
  1577. };
  1578. updateDatas.push(ueObj);
  1579. }
  1580. if (!matchedTotalDesign && !matchedDesign) {
  1581. maxDesignsNumber++;
  1582. unObj = {
  1583. billsLibId: billsLibId,
  1584. nodeId: nodeId,
  1585. name: cData.name,
  1586. unit: cData.unit,
  1587. orgDesignId: cData.orgId,
  1588. code: maxDesignsNumber,
  1589. serialNo: cData.serialNo,
  1590. type: UpdateNew,
  1591. };
  1592. updateDatas.push(unObj);
  1593. }
  1594. });
  1595. let pasteDatas = {
  1596. updateDatas: updateDatas,
  1597. createDatas: createDatas,
  1598. };
  1599. return pasteDatas;
  1600. },
  1601. encapItemsData: function (
  1602. uncrossedDatas,
  1603. crossedDatas,
  1604. controller,
  1605. totalItems
  1606. ) {
  1607. const UpdateExist = "updateExist",
  1608. UpdateNew = "updateNew",
  1609. CreateExist = "createExist",
  1610. CreateNew = "createNew";
  1611. let updateDatas = [];
  1612. let createDatas = [];
  1613. let nodeId = controller.tree.selected.getID();
  1614. uncrossedDatas.forEach((obj) => {
  1615. let cnDataObj, ceDataObj, content, itemId;
  1616. let isExisit = tools.isExist(
  1617. totalItems.itemsArr,
  1618. "content",
  1619. obj.data,
  1620. null
  1621. );
  1622. let isRepeat = tools.isRepeat(
  1623. controller.tree.selected.items,
  1624. "content",
  1625. obj.data,
  1626. "reference",
  1627. "item"
  1628. );
  1629. if (isExisit && !isRepeat) {
  1630. totalItems.itemsArr.forEach((item) => {
  1631. if (obj.data == item.data.content) {
  1632. itemId = item.data.id;
  1633. }
  1634. });
  1635. ceDataObj = {
  1636. newData: obj.data,
  1637. billsLibId: billsLibId,
  1638. nodeId: nodeId,
  1639. itemId: itemId,
  1640. serialNo: obj.serialNo,
  1641. type: CreateExist,
  1642. };
  1643. createDatas.push(ceDataObj);
  1644. }
  1645. if (!isExisit) {
  1646. maxItemsNumber++;
  1647. //currentCountId++;
  1648. cnDataObj = {
  1649. // id: maxItemsNumber,
  1650. billsLibId: billsLibId,
  1651. nodeId: nodeId,
  1652. newData: obj.data,
  1653. serialNo: obj.serialNo,
  1654. code: maxItemsNumber,
  1655. type: CreateNew,
  1656. };
  1657. createDatas.push(cnDataObj);
  1658. }
  1659. });
  1660. crossedDatas.forEach((cData) => {
  1661. let ueObj, unObj, newItemId;
  1662. let isExisit = tools.isExist(
  1663. totalItems.itemsArr,
  1664. "content",
  1665. cData.newData,
  1666. null
  1667. );
  1668. let isRepeat = tools.isRepeat(
  1669. controller.tree.selected.items,
  1670. "content",
  1671. cData.newData,
  1672. "reference",
  1673. "item"
  1674. );
  1675. if (isExisit && !isRepeat) {
  1676. totalItems.itemsArr.forEach((item) => {
  1677. if (cData.newData == item.data.content) {
  1678. newItemId = item.data.id;
  1679. }
  1680. });
  1681. ueObj = {
  1682. newData: cData.newData,
  1683. billsLibId: billsLibId,
  1684. nodeId: nodeId,
  1685. newItemId: newItemId,
  1686. orgItemId: cData.orgId,
  1687. serialNo: cData.serialNo,
  1688. type: UpdateExist,
  1689. };
  1690. updateDatas.push(ueObj);
  1691. }
  1692. if (!isExisit && !isRepeat) {
  1693. maxItemsNumber++;
  1694. //currentCountId++;
  1695. unObj = {
  1696. // newItemId: maxItemsNumber,
  1697. billsLibId: billsLibId,
  1698. nodeId: nodeId,
  1699. newData: cData.newData,
  1700. orgItemId: cData.orgId,
  1701. code: maxItemsNumber,
  1702. serialNo: cData.serialNo,
  1703. type: UpdateNew,
  1704. };
  1705. updateDatas.push(unObj);
  1706. }
  1707. });
  1708. let pasteDatas = {
  1709. updateDatas: updateDatas,
  1710. createDatas: createDatas,
  1711. };
  1712. return pasteDatas;
  1713. },
  1714. encapTotalJobsDatas: function (
  1715. sheet,
  1716. totalJobs,
  1717. uncrossedDatas,
  1718. crossedDatas
  1719. ) {
  1720. let pasteDatas;
  1721. let rebuildArr = [];
  1722. if (crossedDatas.length > 0) {
  1723. for (let i = 0; i < crossedDatas.length; i++) {
  1724. let field = crossedDatas[i].field,
  1725. data = crossedDatas[i].data;
  1726. let isRepeat = tools.isRepeat(
  1727. totalJobs.jobsArr,
  1728. field,
  1729. data,
  1730. "reference"
  1731. );
  1732. if (isRepeat) {
  1733. crossedDatas.splice(i--, 1);
  1734. }
  1735. }
  1736. for (let i = 0; i < crossedDatas.length; i++) {
  1737. let field = crossedDatas[i].field,
  1738. data = crossedDatas[i].data;
  1739. if (crossedDatas[i].field === "code" && typeof data !== "number") {
  1740. crossedDatas.splice(i--, 1);
  1741. }
  1742. }
  1743. }
  1744. if (uncrossedDatas.length > 0) {
  1745. for (let i = 0; i < uncrossedDatas.length; i++) {
  1746. let field = uncrossedDatas[i].field;
  1747. let isRepeat = tools.isRepeat(
  1748. totalJobs.jobsArr,
  1749. field,
  1750. uncrossedDatas[i].data,
  1751. "reference"
  1752. );
  1753. if (isRepeat) {
  1754. uncrossedDatas.splice(i--, 1);
  1755. }
  1756. }
  1757. for (let i = 0; i < uncrossedDatas.length; i++) {
  1758. let field = uncrossedDatas[i].field;
  1759. if (
  1760. uncrossedDatas[i].field === "code" &&
  1761. typeof uncrossedDatas[i].data !== "number"
  1762. ) {
  1763. uncrossedDatas.splice(i--, 1);
  1764. }
  1765. }
  1766. rebuildArr = tools.rebuildArr(uncrossedDatas, "create");
  1767. function myCompare(a, b) {
  1768. if (a.rowIdx > b.rowIdx) return 1;
  1769. if (a.rowIdx < b.rowIdx) return -1;
  1770. return 0;
  1771. }
  1772. function myCompareCode(a, b) {
  1773. if (a.code > b.code) return -1;
  1774. if (a.code < b.code) return 1;
  1775. return 0;
  1776. }
  1777. if (rebuildArr.length > 0) {
  1778. rebuildArr.sort(myCompareCode);
  1779. if (rebuildArr[0].code) {
  1780. maxJobsNumber =
  1781. maxJobsNumber + 1 > rebuildArr[0].code
  1782. ? maxJobsNumber
  1783. : rebuildArr[0].code;
  1784. }
  1785. rebuildArr.forEach(function (data) {
  1786. if (!data.code) {
  1787. maxJobsNumber++;
  1788. let code = maxJobsNumber;
  1789. data.code = code;
  1790. }
  1791. /* if (data.type !== 'CreateT' && data.field === 'content') {
  1792. maxJobsNumber++;
  1793. let code = maxJobsNumber;
  1794. data.code = code;
  1795. } */
  1796. });
  1797. }
  1798. //rebuildArr.sort(myCompare);
  1799. }
  1800. //rebuildArr.sort(myCompare);
  1801. pasteDatas = {
  1802. updateDatas: crossedDatas,
  1803. createDatas: rebuildArr,
  1804. };
  1805. return pasteDatas;
  1806. },
  1807. encapTotalDesignsDatas: function (
  1808. sheet,
  1809. totalDesigns,
  1810. uncrossedDatas,
  1811. crossedDatas
  1812. ) {
  1813. let pasteDatas;
  1814. let rebuildArr = [];
  1815. if (crossedDatas.length > 0) {
  1816. for (let i = 0; i < crossedDatas.length; i++) {
  1817. let field = crossedDatas[i].field,
  1818. data = crossedDatas[i].data;
  1819. let isRepeat = tools.isDesignRepeat(
  1820. totalDesigns.designsArr,
  1821. field,
  1822. data,
  1823. "reference",
  1824. null,
  1825. sheet,
  1826. crossedDatas[i].rowIdx
  1827. );
  1828. if (isRepeat) {
  1829. crossedDatas.splice(i--, 1);
  1830. }
  1831. }
  1832. for (let i = 0; i < crossedDatas.length; i++) {
  1833. let field = crossedDatas[i].field,
  1834. data = crossedDatas[i].data;
  1835. if (crossedDatas[i].field === "code" && typeof data !== "number") {
  1836. crossedDatas.splice(i--, 1);
  1837. }
  1838. }
  1839. }
  1840. if (uncrossedDatas.length > 0) {
  1841. for (let i = 0; i < uncrossedDatas.length; i++) {
  1842. let field = uncrossedDatas[i].field;
  1843. let isRepeat = tools.isDesignRepeat(
  1844. totalDesigns.designsArr,
  1845. field,
  1846. uncrossedDatas[i].data,
  1847. "reference",
  1848. null,
  1849. sheet,
  1850. uncrossedDatas[i].rowIdx
  1851. );
  1852. if (isRepeat) {
  1853. uncrossedDatas.splice(i--, 1);
  1854. }
  1855. }
  1856. for (let i = 0; i < uncrossedDatas.length; i++) {
  1857. let field = uncrossedDatas[i].field;
  1858. if (
  1859. uncrossedDatas[i].field === "code" &&
  1860. typeof uncrossedDatas[i].data !== "number"
  1861. ) {
  1862. uncrossedDatas.splice(i--, 1);
  1863. }
  1864. }
  1865. rebuildArr = tools.rebuildArr(uncrossedDatas, "create");
  1866. function myCompare(a, b) {
  1867. if (a.rowIdx > b.rowIdx) return 1;
  1868. if (a.rowIdx < b.rowIdx) return -1;
  1869. return 0;
  1870. }
  1871. function myCompareCode(a, b) {
  1872. if (a.code > b.code) return -1;
  1873. if (a.code < b.code) return 1;
  1874. return 0;
  1875. }
  1876. if (rebuildArr.length > 0) {
  1877. rebuildArr.sort(myCompareCode);
  1878. if (rebuildArr[0].code) {
  1879. maxDesignsNumber =
  1880. maxDesignsNumber + 1 > rebuildArr[0].code
  1881. ? maxDesignsNumber
  1882. : rebuildArr[0].code;
  1883. }
  1884. rebuildArr.forEach(function (data) {
  1885. if (!data.code) {
  1886. maxDesignsNumber++;
  1887. let code = maxDesignsNumber;
  1888. data.code = code;
  1889. }
  1890. });
  1891. }
  1892. //rebuildArr.sort(myCompare);
  1893. }
  1894. //rebuildArr.sort(myCompare);
  1895. pasteDatas = {
  1896. updateDatas: crossedDatas,
  1897. createDatas: rebuildArr,
  1898. };
  1899. return pasteDatas;
  1900. },
  1901. encapTotalItemsDatas: function (
  1902. sheet,
  1903. totalItems,
  1904. uncrossedDatas,
  1905. crossedDatas
  1906. ) {
  1907. let pasteDatas;
  1908. let rebuildArr = [];
  1909. if (crossedDatas.length > 0) {
  1910. for (let i = 0; i < crossedDatas.length; i++) {
  1911. let field = crossedDatas[i].field,
  1912. data = crossedDatas[i].data;
  1913. let isRepeat = tools.isRepeat(
  1914. totalItems.itemsArr,
  1915. field,
  1916. data,
  1917. "reference"
  1918. );
  1919. if (isRepeat) {
  1920. crossedDatas.splice(i--, 1);
  1921. }
  1922. }
  1923. for (let i = 0; i < crossedDatas.length; i++) {
  1924. let field = crossedDatas[i].field,
  1925. data = crossedDatas[i].data;
  1926. if (crossedDatas[i].field === "code" && typeof data !== "number") {
  1927. crossedDatas.splice(i--, 1);
  1928. }
  1929. }
  1930. }
  1931. if (uncrossedDatas.length > 0) {
  1932. for (let i = 0; i < uncrossedDatas.length; i++) {
  1933. let field = uncrossedDatas[i].field;
  1934. let isRepeat = tools.isRepeat(
  1935. totalItems.itemsArr,
  1936. field,
  1937. uncrossedDatas[i].data,
  1938. "reference"
  1939. );
  1940. if (isRepeat) {
  1941. uncrossedDatas.splice(i--, 1);
  1942. }
  1943. }
  1944. for (let i = 0; i < uncrossedDatas.length; i++) {
  1945. let field = uncrossedDatas[i].field;
  1946. if (
  1947. uncrossedDatas[i].field === "code" &&
  1948. typeof uncrossedDatas[i].data !== "number"
  1949. ) {
  1950. uncrossedDatas.splice(i--, 1);
  1951. }
  1952. }
  1953. rebuildArr = tools.rebuildArr(uncrossedDatas, "create");
  1954. function myCompare(a, b) {
  1955. if (a.rowIdx > b.rowIdx) return 1;
  1956. if (a.rowIdx < b.rowIdx) return -1;
  1957. return 0;
  1958. }
  1959. function myCompareCode(a, b) {
  1960. if (a.code > b.code) return -1;
  1961. if (a.code < b.code) return 1;
  1962. return 0;
  1963. }
  1964. //rebuildArr.sort(myCompare);
  1965. if (rebuildArr.length > 0) {
  1966. rebuildArr.sort(myCompareCode);
  1967. if (rebuildArr[0].code) {
  1968. maxItemsNumber =
  1969. maxItemsNumber + 1 > rebuildArr[0].code
  1970. ? maxItemsNumber
  1971. : rebuildArr[0].code;
  1972. }
  1973. rebuildArr.forEach(function (data) {
  1974. if (!data.code) {
  1975. maxItemsNumber++;
  1976. let code = maxItemsNumber;
  1977. data.code = code;
  1978. }
  1979. });
  1980. }
  1981. }
  1982. // rebuildArr.sort(myCompare);
  1983. pasteDatas = {
  1984. updateDatas: crossedDatas,
  1985. createDatas: rebuildArr,
  1986. };
  1987. return pasteDatas;
  1988. },
  1989. encapValues: function (sheet, totalItems, uncrossedDatas, crossedDatas) {
  1990. let rebuildArr = [];
  1991. let rebuildUpdateDatas = [];
  1992. let valuesArr = valueController.getValues(totalItems, selectedId);
  1993. function myCompare(a, b) {
  1994. if (a.rowIdx > b.rowIdx) return 1;
  1995. if (a.rowIdx < b.rowIdx) return -1;
  1996. return 0;
  1997. }
  1998. if (crossedDatas.length > 0) {
  1999. for (let i = 0; i < crossedDatas.length; i++) {
  2000. let field = crossedDatas[i].field,
  2001. data = crossedDatas[i].data;
  2002. let isRepeat = tools.isRepeat(
  2003. valuesArr,
  2004. field,
  2005. data,
  2006. "document",
  2007. "value"
  2008. );
  2009. if (isRepeat) {
  2010. crossedDatas.splice(i--, 1);
  2011. }
  2012. }
  2013. for (let i = 0; i < crossedDatas.length; i++) {
  2014. let field = crossedDatas[i].field,
  2015. data = crossedDatas[i].data;
  2016. if (crossedDatas[i].field === "code" && typeof data !== "number") {
  2017. crossedDatas.splice(i--, 1);
  2018. }
  2019. }
  2020. rebuildUpdateDatas = tools.rebuildArr(crossedDatas, "update");
  2021. rebuildUpdateDatas.sort(myCompare);
  2022. for (let i = 0; i < rebuildUpdateDatas.length; i++) {
  2023. rebuildUpdateDatas[i].itemId = selectedId;
  2024. }
  2025. }
  2026. if (uncrossedDatas.length > 0) {
  2027. for (let i = 0; i < uncrossedDatas.length; i++) {
  2028. let field = uncrossedDatas[i].field;
  2029. let isRepeat = tools.isRepeat(
  2030. valuesArr,
  2031. field,
  2032. uncrossedDatas[i].data,
  2033. "document",
  2034. "value"
  2035. );
  2036. if (isRepeat) {
  2037. uncrossedDatas.splice(i--, 1);
  2038. }
  2039. }
  2040. for (let i = 0; i < uncrossedDatas.length; i++) {
  2041. let field = uncrossedDatas[i].field;
  2042. if (
  2043. uncrossedDatas[i].field === "code" &&
  2044. typeof uncrossedDatas[i].data !== "number"
  2045. ) {
  2046. uncrossedDatas.splice(i--, 1);
  2047. }
  2048. }
  2049. rebuildArr = tools.rebuildArr(uncrossedDatas, "create");
  2050. //rebuildArr.sort(myCompare);
  2051. function myCompareCode(a, b) {
  2052. let valA = a.code,
  2053. valB = b.code;
  2054. return valB - valA;
  2055. }
  2056. rebuildArr.sort(myCompareCode);
  2057. let newCode = valueController.getCode(totalItems, selectedId);
  2058. if (rebuildArr[0].code) {
  2059. newCode =
  2060. newCode > rebuildArr[0].code ? newCode : rebuildArr[0].code + 1;
  2061. }
  2062. for (let i = 0; i < rebuildArr.length; i++) {
  2063. rebuildArr[i].itemId = selectedId;
  2064. if (
  2065. rebuildArr[i].type !== "CreateT" &&
  2066. rebuildArr[i].field === "value"
  2067. ) {
  2068. rebuildArr[i].code = newCode;
  2069. newCode++;
  2070. }
  2071. }
  2072. }
  2073. //backendOP
  2074. let pasteDatas = {
  2075. updateDatas: rebuildUpdateDatas,
  2076. createDatas: rebuildArr,
  2077. };
  2078. return pasteDatas;
  2079. },
  2080. rebuildArr: function (arr, classify) {
  2081. let conformDatas = [];
  2082. let flag = true;
  2083. for (let i = 0; i < arr.length; i++) {
  2084. let conformData = {
  2085. billsLibId: billsLibId,
  2086. rowIdx: arr[i].rowIdx,
  2087. type: classify === "create" ? "CreateT" : "UpdateT",
  2088. };
  2089. conformData[arr[i].field] = arr[i].data;
  2090. for (let j = i + 1; j < arr.length; j++) {
  2091. if (arr[i].rowIdx === arr[j].rowIdx) {
  2092. flag = false;
  2093. let field = arr[i].field;
  2094. if (classify === "create") {
  2095. conformData[arr[j].field] = arr[j].data;
  2096. /* conformData = {
  2097. billsLibId: billsLibId,
  2098. rowIdx: arr[i].rowIdx,
  2099. type: 'CreateT'
  2100. }
  2101. conformData[arr[i].field] = arr[i].data;
  2102. conformData[arr[j].field] = arr[j].data; */
  2103. /* if (field === 'code') {
  2104. conformData = {
  2105. billsLibId: billsLibId,
  2106. code: arr[i].data,
  2107. content: arr[j].data,
  2108. rowIdx: arr[i].rowIdx,
  2109. type: 'CreateT'
  2110. }
  2111. }
  2112. else {
  2113. conformData = {
  2114. billsLibId: billsLibId,
  2115. code: arr[j].data,
  2116. content: arr[i].data,
  2117. rowIdx: arr[i].rowIdx,
  2118. type: 'CreateT'
  2119. }
  2120. } */
  2121. } else {
  2122. conformData.orgId = arr[i].orgId;
  2123. conformData[arr[j].field] = arr[j].data;
  2124. /* conformData = {
  2125. billsLibId: billsLibId,
  2126. rowIdx: arr[i].rowIdx,
  2127. orgId: arr[i].orgId,
  2128. type: 'UpdateT'
  2129. }
  2130. conformData[arr[i].field] = arr[i].data;
  2131. conformData[arr[j].field] = arr[j].data; */
  2132. /* if (field === 'code') {
  2133. conformData = {
  2134. billsLibId: billsLibId,
  2135. code: arr[i].data,
  2136. content: arr[j].data,
  2137. rowIdx: arr[i].rowIdx,
  2138. orgId: arr[i].orgId,
  2139. type: 'UpdateT'
  2140. }
  2141. }
  2142. else {
  2143. conformData = {
  2144. billsLIbId: billsLibId,
  2145. code: arr[j].data,
  2146. content: arr[i].data,
  2147. rowIdx: arr[i].rowIdx,
  2148. orgId: arr[i].orgId,
  2149. type: 'UpdateT'
  2150. }
  2151. } */
  2152. }
  2153. }
  2154. }
  2155. const matched = conformDatas.find(
  2156. (item) => item.rowIdx === conformData.rowIdx
  2157. );
  2158. if (!matched) {
  2159. conformDatas.push(conformData);
  2160. }
  2161. }
  2162. /* for (let i = 0; i < arr.length; i++) {
  2163. let flag = true;
  2164. for (let j = 0; j < arr.length; j++) {
  2165. if (arr[i].rowIdx === arr[j].rowIdx && arr[i].field !== arr[j].field) {
  2166. flag = false;
  2167. }
  2168. }
  2169. if (flag) {
  2170. conformDatas.push(arr[i]);
  2171. }
  2172. } */
  2173. return conformDatas;
  2174. },
  2175. isDef: function (v) {
  2176. return v !== undefined && v !== null;
  2177. },
  2178. //返回
  2179. sectionInfoNull: function (sectionInfo) {
  2180. for (let info in sectionInfo) {
  2181. if (!this.isDef(sectionInfo[info])) {
  2182. return info;
  2183. }
  2184. }
  2185. return false;
  2186. },
  2187. getSectionInfo: function (node) {
  2188. let parentIDs = [];
  2189. let sectionInfo = { first: null, second: null, third: null };
  2190. getParent(node);
  2191. if (this.isDef(parentIDs[parentIDs.length - 1])) {
  2192. sectionInfo.first = parentIDs[parentIDs.length - 1];
  2193. }
  2194. if (this.isDef(parentIDs[parentIDs.length - 2])) {
  2195. sectionInfo.second = parentIDs[parentIDs.length - 2];
  2196. }
  2197. if (this.isDef(parentIDs[parentIDs.length - 3])) {
  2198. sectionInfo.third = parentIDs[parentIDs.length - 3];
  2199. }
  2200. return sectionInfo;
  2201. function getParent(node) {
  2202. if (node.parent) {
  2203. parentIDs.push(node.parent.data.ID);
  2204. getParent(node.parent);
  2205. }
  2206. }
  2207. },
  2208. getUpdateSectionData: function (nodes) {
  2209. let rst = [];
  2210. for (let node of nodes) {
  2211. rst.push({ ID: node.getID(), sectionInfo: tools.getSectionInfo(node) });
  2212. }
  2213. return rst;
  2214. },
  2215. //获取节点底下所有子节点
  2216. getChildrenNodes: function (nodes) {
  2217. let rst = [];
  2218. for (let node of nodes) {
  2219. getChild(node.children);
  2220. }
  2221. function getChild(ns) {
  2222. rst = rst.concat(ns);
  2223. for (let n of ns) {
  2224. if (n.children.length > 0) {
  2225. getChild(n.children);
  2226. }
  2227. }
  2228. }
  2229. return rst;
  2230. },
  2231. getSameDepthNodes: function (controller) {
  2232. const items = controller.tree.items;
  2233. let rst = [];
  2234. let sel = controller.sheet.getSelections()[0];
  2235. let selectedDepth = controller.tree.selected.depth();
  2236. for (let i = 0; i < sel.rowCount; i++) {
  2237. let row = sel.row + i;
  2238. if (items[row].depth() === selectedDepth) {
  2239. rst.push(items[row]);
  2240. }
  2241. }
  2242. return rst;
  2243. },
  2244. };
  2245. let pasteController = {
  2246. frontOperator: function (sheet, setting, controller, totalJobs, datas) {
  2247. const UpdateExist = "updateExist",
  2248. UpdateNew = "updateNew",
  2249. CreateExist = "createExist",
  2250. CreateNew = "createNew";
  2251. if (datas.length > 0) {
  2252. for (let i = 0; i < datas.length; i++) {
  2253. if (datas[i]) {
  2254. if (datas[i].type === UpdateExist) {
  2255. totalJobs.jobsArr.forEach((job) => {
  2256. if (job.data.content == datas[i].newData) {
  2257. let serialNo = datas[i].serialNo;
  2258. let index = tools.getIndex(
  2259. controller.tree.selected.jobs,
  2260. datas[i].orgJobId,
  2261. "job"
  2262. );
  2263. job.count++;
  2264. controller.tree.selected.jobs.splice(index, 1);
  2265. controller.tree.selected.jobs.splice(index, 0, {
  2266. job: job,
  2267. serialNo: serialNo,
  2268. });
  2269. }
  2270. });
  2271. } else if (datas[i].type === UpdateNew) {
  2272. let newJobData, newJob;
  2273. let newJobId = datas[i].newJobId,
  2274. serialNo = datas[i].serialNo;
  2275. newJobData = {
  2276. id: newJobId,
  2277. content: datas[i].newData,
  2278. code: datas[i].code,
  2279. };
  2280. newJob = createObj.newJob(newJobData);
  2281. newJob.count = 1;
  2282. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  2283. totalJobs.jobsArr.push(newJob);
  2284. var index = tools.getIndex(
  2285. controller.tree.selected.jobs,
  2286. datas[i].orgJobId,
  2287. "job"
  2288. );
  2289. controller.tree.selected.jobs.splice(index, 1);
  2290. controller.tree.selected.jobs.splice(index, 0, {
  2291. job: newJob,
  2292. serialNo: serialNo,
  2293. });
  2294. } else if (datas[i].type === CreateExist) {
  2295. let serialNo = datas[i].serialNo;
  2296. totalJobs.jobsArr.forEach((job) => {
  2297. if (job.data.content == datas[i].newData) {
  2298. job.count++;
  2299. controller.tree.selected.jobs.push({
  2300. job: job,
  2301. serialNo: serialNo,
  2302. });
  2303. }
  2304. });
  2305. } else if (datas[i].type === CreateNew) {
  2306. let newJobId = datas[i].newJobId,
  2307. serialNo = datas[i].serialNo;
  2308. let newJobData, newJob;
  2309. newJobData = {
  2310. id: newJobId,
  2311. content: datas[i].newData,
  2312. code: datas[i].code,
  2313. };
  2314. newJob = createObj.newJob(newJobData);
  2315. newJob.count = 1;
  2316. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  2317. totalJobs.jobsArr.push(newJob);
  2318. controller.tree.selected.jobs.push({
  2319. job: newJob,
  2320. serialNo: serialNo,
  2321. });
  2322. }
  2323. }
  2324. }
  2325. }
  2326. //resort&reshow
  2327. tools.orderReshowData(
  2328. sheet,
  2329. controller.tree.selected.jobs,
  2330. setting,
  2331. "job",
  2332. true
  2333. );
  2334. sheetDatas = tools.getsheetDatas(sheet);
  2335. },
  2336. frontDesignsRelOperator: function (
  2337. sheet,
  2338. setting,
  2339. controller,
  2340. totalDesigns,
  2341. datas
  2342. ) {
  2343. const UpdateExist = "updateExist",
  2344. UpdateNew = "updateNew",
  2345. CreateExist = "createExist",
  2346. CreateNew = "createNew";
  2347. if (datas.length > 0) {
  2348. for (let i = 0; i < datas.length; i++) {
  2349. if (datas[i]) {
  2350. if (datas[i].type === UpdateExist) {
  2351. const design = tools.getDesignByNameUnit(
  2352. totalDesigns.designsArr,
  2353. datas[i].name,
  2354. datas[i].unit,
  2355. false
  2356. );
  2357. if (design) {
  2358. let serialNo = datas[i].serialNo;
  2359. let index = tools.getIndex(
  2360. controller.tree.selected.designs,
  2361. datas[i].orgDesignId,
  2362. "design"
  2363. );
  2364. design.count++;
  2365. controller.tree.selected.designs.splice(index, 1);
  2366. controller.tree.selected.designs.splice(index, 0, {
  2367. design: design,
  2368. serialNo: serialNo,
  2369. });
  2370. }
  2371. } else if (datas[i].type === UpdateNew) {
  2372. let newDesignData, newDesign;
  2373. let newDesignId = datas[i].newDesignId,
  2374. serialNo = datas[i].serialNo;
  2375. newDesignData = {
  2376. id: newDesignId,
  2377. name: datas[i].name,
  2378. unit: datas[i].unit,
  2379. code: datas[i].code,
  2380. };
  2381. newDesign = createObj.newDesign(newDesignData);
  2382. newDesign.count = 1;
  2383. totalDesigns.designs[totalDesigns.prefix + newDesignId] = newDesign;
  2384. totalDesigns.designsArr.push(newDesign);
  2385. var index = tools.getIndex(
  2386. controller.tree.selected.designs,
  2387. datas[i].orgDesignId,
  2388. "design"
  2389. );
  2390. controller.tree.selected.designs.splice(index, 1);
  2391. controller.tree.selected.designs.splice(index, 0, {
  2392. design: newDesign,
  2393. serialNo: serialNo,
  2394. });
  2395. } else if (datas[i].type === CreateExist) {
  2396. let serialNo = datas[i].serialNo;
  2397. const design = tools.getDesignByNameUnit(
  2398. totalDesigns.designsArr,
  2399. datas[i].name,
  2400. datas[i].unit,
  2401. false
  2402. );
  2403. if (design) {
  2404. design.count++;
  2405. controller.tree.selected.designs.push({
  2406. design: design,
  2407. serialNo: serialNo,
  2408. });
  2409. }
  2410. } else if (datas[i].type === CreateNew) {
  2411. let newDesignId = datas[i].newDesignId,
  2412. serialNo = datas[i].serialNo;
  2413. let newDesignData, newDesign;
  2414. newDesignData = {
  2415. id: newDesignId,
  2416. name: datas[i].name,
  2417. unit: datas[i].unit,
  2418. code: datas[i].code,
  2419. };
  2420. newDesign = createObj.newDesign(newDesignData);
  2421. newDesign.count = 1;
  2422. totalDesigns.designs[totalDesigns.prefix + newDesignId] = newDesign;
  2423. totalDesigns.designsArr.push(newDesign);
  2424. controller.tree.selected.designs.push({
  2425. design: newDesign,
  2426. serialNo: serialNo,
  2427. });
  2428. }
  2429. }
  2430. }
  2431. }
  2432. //resort&reshow
  2433. tools.orderReshowData(
  2434. sheet,
  2435. controller.tree.selected.designs,
  2436. setting,
  2437. "design",
  2438. true
  2439. );
  2440. sheetDatas = tools.getsheetDatas(sheet, "designs");
  2441. },
  2442. frontItemsRelOperator: function (
  2443. sheet,
  2444. setting,
  2445. controller,
  2446. totalItems,
  2447. datas
  2448. ) {
  2449. const UpdateExist = "updateExist",
  2450. UpdateNew = "updateNew",
  2451. CreateExist = "createExist",
  2452. CreateNew = "createNew";
  2453. if (datas.length > 0) {
  2454. for (let i = 0; i < datas.length; i++) {
  2455. if (datas[i]) {
  2456. if (datas[i].type == UpdateExist) {
  2457. let serialNo = datas[i].serialNo;
  2458. totalItems.itemsArr.forEach((item) => {
  2459. if (item.data.content === datas[i].newData) {
  2460. let index = tools.getIndex(
  2461. controller.tree.selected.items,
  2462. datas[i].orgItemId,
  2463. "item"
  2464. );
  2465. item.count++;
  2466. controller.tree.selected.items.splice(index, 1);
  2467. controller.tree.selected.items.splice(index, 0, {
  2468. item: item,
  2469. serialNo: serialNo,
  2470. });
  2471. }
  2472. });
  2473. } else if (datas[i].type === UpdateNew) {
  2474. let newItemData, newItem;
  2475. let newItemId = datas[i].newItemId,
  2476. serialNo = datas[i].serialNo;
  2477. newItemData = {
  2478. id: newItemId,
  2479. content: datas[i].newData,
  2480. code: datas[i].code,
  2481. };
  2482. newItem = createObj.newItem(newItemData);
  2483. newItem.count = 1;
  2484. totalItems.items[totalItems.prefix + newItemId] = newItem;
  2485. totalItems.itemsArr.push(newItem);
  2486. var index = tools.getIndex(
  2487. controller.tree.selected.items,
  2488. datas[i].orgItemId,
  2489. "item"
  2490. );
  2491. controller.tree.selected.items.splice(index, 1);
  2492. controller.tree.selected.items.splice(index, 0, {
  2493. item: newItem,
  2494. serialNo: serialNo,
  2495. });
  2496. } else if (datas[i].type === CreateExist) {
  2497. let serialNo = datas[i].serialNo;
  2498. totalItems.itemsArr.forEach((item) => {
  2499. if (item.data.content == datas[i].newData) {
  2500. item.count++;
  2501. controller.tree.selected.items.push({
  2502. item: item,
  2503. serialNo: serialNo,
  2504. });
  2505. }
  2506. });
  2507. } else if (datas[i].type === CreateNew) {
  2508. let newItemId = datas[i].newItemId,
  2509. serialNo = datas[i].serialNo;
  2510. let newItemData, newItem;
  2511. newItemData = {
  2512. id: newItemId,
  2513. content: datas[i].newData,
  2514. code: datas[i].code,
  2515. };
  2516. newItem = createObj.newItem(newItemData);
  2517. newItem.count = 1;
  2518. totalItems.items[totalItems.prefix + newItemId] = newItem;
  2519. totalItems.itemsArr.push(newItem);
  2520. controller.tree.selected.items.push({
  2521. item: newItem,
  2522. serialNo: serialNo,
  2523. });
  2524. }
  2525. }
  2526. }
  2527. }
  2528. //resort&reshow
  2529. tools.orderReshowData(
  2530. sheet,
  2531. controller.tree.selected.items,
  2532. setting,
  2533. "item",
  2534. true
  2535. );
  2536. sheetItemsDatas = tools.getsheetDatas(sheet);
  2537. },
  2538. pasteJobsFront: function (sheet, totalJobs, datas) {
  2539. const Update = "Update",
  2540. CreateT = "CreateT";
  2541. if (datas.length > 0) {
  2542. for (let i = 0; i < datas.length; i++) {
  2543. let newJobData, newJob;
  2544. if (datas[i]) {
  2545. if (datas[i].type === Update) {
  2546. totalJobs.jobsArr.forEach((job) => {
  2547. if (job.data.id === datas[i].orgId) {
  2548. job.data[datas[i].field] = datas[i].data;
  2549. }
  2550. });
  2551. } else if (datas[i].type === CreateT) {
  2552. //maxJobsNumber++;
  2553. // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
  2554. newJobData = {
  2555. id: datas[i].newJobId,
  2556. content: datas[i].content,
  2557. code: datas[i].code,
  2558. };
  2559. newJob = createObj.newJob(newJobData);
  2560. totalJobs.jobsArr.push(newJob);
  2561. } else if (
  2562. datas[i].type !== CreateT &&
  2563. datas[i].field === "content"
  2564. ) {
  2565. newJobData = {
  2566. id: datas[i].newJobId,
  2567. content: datas[i].data,
  2568. code: datas[i].code,
  2569. };
  2570. newJob = createObj.newJob(newJobData);
  2571. totalJobs.jobsArr.push(newJob);
  2572. } else if (datas[i].type !== "CreateT" && datas[i].field === "code") {
  2573. // maxJobsNumber++;
  2574. // maxJobsNumber = maxJobsNumber >= datas[i].data ? maxJobsNumber : datas[i].data;
  2575. newJobData = {
  2576. id: datas[i].newJobId,
  2577. content: "",
  2578. code: datas[i].data,
  2579. };
  2580. newJob = createObj.newJob(newJobData);
  2581. totalJobs.jobsArr.push(newJob);
  2582. }
  2583. }
  2584. }
  2585. }
  2586. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  2587. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  2588. sheetJobsDatas = tools.getsheetDatas(sheet, "total");
  2589. },
  2590. pasteDesignsFront: function (sheet, totalDesigns, datas) {
  2591. const Update = "Update",
  2592. CreateT = "CreateT";
  2593. if (datas.length > 0) {
  2594. for (let i = 0; i < datas.length; i++) {
  2595. let newDesignData, newDesign;
  2596. if (datas[i]) {
  2597. if (datas[i].type === Update) {
  2598. totalDesigns.designsArr.forEach((design) => {
  2599. if (design.data.id === datas[i].orgId) {
  2600. design.data[datas[i].field] = datas[i].data;
  2601. }
  2602. });
  2603. } else if (datas[i].type === CreateT) {
  2604. //maxJobsNumber++;
  2605. // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
  2606. newDesignData = {
  2607. id: datas[i].newJobId,
  2608. name: datas[i].name,
  2609. code: datas[i].code,
  2610. unit: datas[i].unit,
  2611. };
  2612. newDesign = createObj.newDesign(newDesignData);
  2613. totalDesigns.designsArr.push(newDesign);
  2614. } else if (datas[i].type !== CreateT && datas[i].field === "name") {
  2615. newDesignData = {
  2616. id: datas[i].newJobId,
  2617. name: datas[i].data,
  2618. code: datas[i].code,
  2619. };
  2620. newDesign = createObj.newDesign(newDesignData);
  2621. totalDesigns.designsArr.push(newDesign);
  2622. } else if (datas[i].type !== "CreateT" && datas[i].field === "code") {
  2623. // maxJobsNumber++;
  2624. // maxJobsNumber = maxJobsNumber >= datas[i].data ? maxJobsNumber : datas[i].data;
  2625. newDesignData = {
  2626. id: datas[i].newJobId,
  2627. name: "",
  2628. code: datas[i].data,
  2629. };
  2630. newDesign = createObj.newDesign(newDesignData);
  2631. totalDesigns.designsArr.push(newDesign);
  2632. }
  2633. }
  2634. }
  2635. }
  2636. setSheet.setMaxRowCount(sheet, totalDesigns.designsArr);
  2637. tools.reshowData(sheet, totalDesigns.designsArr, totalDesignsSetting, true);
  2638. sheetJobsDatas = tools.getsheetDatas(sheet, "total");
  2639. },
  2640. pasteItemsFront: function (sheet, totalItems, datas) {
  2641. const Update = "Update",
  2642. CreateT = "CreateT";
  2643. if (datas.length > 0) {
  2644. for (let i = 0; i < datas.length; i++) {
  2645. let newItemData, newItem;
  2646. if (datas[i]) {
  2647. if (datas[i].type === Update) {
  2648. totalItems.itemsArr.forEach((item) => {
  2649. if (item.data.id === datas[i].orgId) {
  2650. item.data[datas[i].field] = datas[i].data;
  2651. }
  2652. });
  2653. } else if (datas[i].type === CreateT) {
  2654. newItemData = {
  2655. id: datas[i].newItemId,
  2656. content: datas[i].content,
  2657. code: datas[i].code,
  2658. itemValue: [],
  2659. };
  2660. newItem = createObj.newItem(newItemData);
  2661. totalItems.itemsArr.push(newItem);
  2662. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  2663. } else if (
  2664. datas[i].type !== CreateT &&
  2665. datas[i].field === "content"
  2666. ) {
  2667. newItemData = {
  2668. id: datas[i].newItemId,
  2669. content: datas[i].data,
  2670. code: datas[i].code,
  2671. itemValue: [],
  2672. };
  2673. newItem = createObj.newItem(newItemData);
  2674. totalItems.itemsArr.push(newItem);
  2675. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  2676. } else if (datas[i].type !== "CreateT" && datas[i].field === "code") {
  2677. newItemData = {
  2678. id: datas[i].newItemId,
  2679. content: "",
  2680. code: datas[i].data,
  2681. itemValue: [],
  2682. };
  2683. newItem = createObj.newItem(newItemData);
  2684. totalItems.itemsArr.push(newItem);
  2685. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  2686. }
  2687. }
  2688. }
  2689. }
  2690. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  2691. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  2692. totalItemsDatas = tools.getsheetDatas(sheet, "total");
  2693. },
  2694. pasteValueFront: function (sheet, totalItems, datas) {
  2695. let backendUpdateDatas = [];
  2696. let valuesArr = valueController.getValues(totalItems, selectedId);
  2697. if (datas.length > 0) {
  2698. for (let i = 0; i < datas.length; i++) {
  2699. let index;
  2700. if (datas[i]) {
  2701. if (datas[i].type === "UpdateT") {
  2702. if (valuesArr) {
  2703. for (let j = 0; j < valuesArr.length; j++) {
  2704. if (datas[i].orgId === valuesArr[j].code) {
  2705. index = j;
  2706. valuesArr.splice(j--, 1);
  2707. }
  2708. }
  2709. let updateEle = { code: datas[i].code, value: datas[i].content };
  2710. valuesArr.splice(index, 0, updateEle);
  2711. }
  2712. } else if (datas[i].type === "Update" && datas[i].field === "code") {
  2713. if (valuesArr) {
  2714. for (let j = 0; j < valuesArr.length; j++) {
  2715. if (datas[i].orgId === valuesArr[j].code) {
  2716. valuesArr[j].code = datas[i].data;
  2717. }
  2718. }
  2719. }
  2720. } else if (datas[i].type === "Update" && datas[i].field === "value") {
  2721. if (valuesArr) {
  2722. for (let j = 0; j < valuesArr.length; j++) {
  2723. if (datas[i].orgId === valuesArr[j].code) {
  2724. valuesArr[j].value = datas[i].data;
  2725. }
  2726. }
  2727. }
  2728. } else if (datas[i].type === "CreateT") {
  2729. let newValueData = { value: datas[i].content, code: datas[i].code };
  2730. valuesArr.push(newValueData);
  2731. } else if (datas[i].type === "Create" && datas[i].field === "value") {
  2732. let newValueData = { value: datas[i].data, code: datas[i].code };
  2733. valuesArr.push(newValueData);
  2734. } else if (datas[i].type === "Create" && datas[i].field === "code") {
  2735. let newValueData = { value: "", code: datas[i].data };
  2736. valuesArr.push(newValueData);
  2737. }
  2738. }
  2739. }
  2740. }
  2741. tools.reshowValue(sheet, valuesArr, eigenValueSetting, true);
  2742. valueDatas = tools.getsheetDatas(sheet, "total");
  2743. },
  2744. };
  2745. var jobsController = {
  2746. currentEditData: null,
  2747. totalJobs: null,
  2748. onEditStart: function (sender, args) {
  2749. let me = jobsController;
  2750. me.currentEditData = args.sheet.getValue(args.row, args.col);
  2751. },
  2752. onEditEnded: function (sender, args) {
  2753. let me = jobsController;
  2754. let sheet = args.sheet;
  2755. let controller = dbController.controller;
  2756. let totalJobs = me.totalJobs;
  2757. let setting = jobsSetting;
  2758. var field,
  2759. newData = args.editingText,
  2760. id = sheet.getTag(args.row, args.col);
  2761. setting.cols.forEach(function (col, idx) {
  2762. if (args.col === idx) {
  2763. field = col.data.field;
  2764. }
  2765. });
  2766. if (controller.tree.selected && newData != me.currentEditData) {
  2767. var isExist = tools.isExist(totalJobs.jobsArr, field, newData);
  2768. var isRepeat = tools.isRepeat(
  2769. controller.tree.selected.jobs,
  2770. field,
  2771. newData,
  2772. "reference",
  2773. "job"
  2774. );
  2775. //create
  2776. if (!id && newData && !isRepeat) {
  2777. if (isExist) {
  2778. jobsController.createExist(
  2779. sheet,
  2780. controller,
  2781. totalJobs,
  2782. field,
  2783. newData,
  2784. args,
  2785. setting
  2786. );
  2787. } else {
  2788. jobsController.createNew(
  2789. sheet,
  2790. controller,
  2791. totalJobs,
  2792. field,
  2793. newData,
  2794. args,
  2795. setting
  2796. );
  2797. }
  2798. }
  2799. //update
  2800. else if (id && !isRepeat) {
  2801. jobsController.update(
  2802. sheet,
  2803. controller,
  2804. totalJobs,
  2805. field,
  2806. newData,
  2807. id,
  2808. isExist,
  2809. args,
  2810. setting
  2811. );
  2812. }
  2813. //处理重复
  2814. if (isRepeat) {
  2815. tools.alertOpr(
  2816. args,
  2817. sheet,
  2818. "该工作内容已存在!",
  2819. controller.tree.selected.jobs,
  2820. "job"
  2821. );
  2822. }
  2823. } else {
  2824. sheet
  2825. .getCell(args.row, args.col)
  2826. .value(me.currentEditData ? me.currentEditData : "");
  2827. }
  2828. },
  2829. editData: function (sheet) {
  2830. let me = jobsController;
  2831. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  2832. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  2833. },
  2834. createNew: function (
  2835. sheet,
  2836. controller,
  2837. totalJobs,
  2838. field,
  2839. newData,
  2840. args,
  2841. setting
  2842. ) {
  2843. if (field === "content") {
  2844. maxJobsNumber++;
  2845. //update--
  2846. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);
  2847. //--
  2848. jobsAjax.edCreateJob(
  2849. userAccount,
  2850. billsLibId,
  2851. controller.tree.selected.getID(),
  2852. newData,
  2853. maxJobsNumber,
  2854. serialNo,
  2855. function (newJobId) {
  2856. var newJobData, newJob;
  2857. newJobData = { id: newJobId, content: newData, code: maxJobsNumber };
  2858. newJob = createObj.newJob(newJobData);
  2859. newJob.count = 1;
  2860. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  2861. totalJobs.jobsArr.push(newJob);
  2862. controller.tree.selected.jobs.push({
  2863. job: newJob,
  2864. serialNo: serialNo,
  2865. }); //update--
  2866. tools.orderReshowData(
  2867. sheet,
  2868. controller.tree.selected.jobs,
  2869. setting,
  2870. "job",
  2871. true
  2872. ); //update--
  2873. }
  2874. );
  2875. } else {
  2876. tools.alertOpr(
  2877. args,
  2878. sheet,
  2879. "该编号不存在,请重新输入!",
  2880. controller.tree.selected.jobs,
  2881. "job"
  2882. );
  2883. }
  2884. },
  2885. createExist: function (
  2886. sheet,
  2887. controller,
  2888. totalJobs,
  2889. field,
  2890. newData,
  2891. args,
  2892. setting
  2893. ) {
  2894. totalJobs.jobsArr.forEach(function (job) {
  2895. if (field === "content" && newData === job.data.content) {
  2896. let serialNo = tools.getSerialNo(controller.tree.selected.jobs); //update--
  2897. //billsAjax.updateBills(billsLibId, controllers.tree.selected.getID(), 'jobs', job.data.id);//update--
  2898. billsAjax.updateBills(
  2899. userAccount,
  2900. billsLibId,
  2901. controller.tree.selected.getID(),
  2902. "jobs",
  2903. { id: job.data.id, serialNo: serialNo }
  2904. ); //update--
  2905. job.count++;
  2906. // controllers.tree.selected.jobs.push(job);//update--
  2907. controller.tree.selected.jobs.push({ job: job, serialNo: serialNo }); //update--
  2908. //tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  2909. tools.orderReshowData(
  2910. sheet,
  2911. controller.tree.selected.jobs,
  2912. setting,
  2913. "job",
  2914. true
  2915. );
  2916. } else if (field == "code" && newData == job.data.code) {
  2917. let serialNo = tools.getSerialNo(controller.tree.selected.jobs); //update--
  2918. billsAjax.updateBills(
  2919. userAccount,
  2920. billsLibId,
  2921. controller.tree.selected.getID(),
  2922. "jobs",
  2923. { id: job.data.id, serialNo: serialNo }
  2924. ); //update--
  2925. job.count++;
  2926. controller.tree.selected.jobs.push({ job: job, serialNo: serialNo }); //update--
  2927. // tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  2928. tools.orderReshowData(
  2929. sheet,
  2930. controller.tree.selected.jobs,
  2931. setting,
  2932. "job",
  2933. true
  2934. );
  2935. }
  2936. });
  2937. },
  2938. update: function (
  2939. sheet,
  2940. controller,
  2941. totalJobs,
  2942. field,
  2943. newData,
  2944. id,
  2945. isExist,
  2946. args,
  2947. setting
  2948. ) {
  2949. if (isExist) {
  2950. totalJobs.jobsArr.forEach(function (job) {
  2951. if (field == "code" && job.data[field] == newData) {
  2952. let serialNo = tools.getObj(
  2953. controller.tree.selected.jobs,
  2954. id,
  2955. "job"
  2956. ).serialNo; //update--add
  2957. let index = tools.getIndex(controller.tree.selected.jobs, id, "job"); //update-- getIndex
  2958. job.count++;
  2959. controller.tree.selected.jobs.splice(index, 1);
  2960. controller.tree.selected.jobs.splice(index, 0, {
  2961. job: job,
  2962. serialNo: serialNo,
  2963. }); //update--
  2964. billsAjax.updateBillsArr(
  2965. userAccount,
  2966. billsLibId,
  2967. controller.tree.selected.getID(),
  2968. id,
  2969. job.data.id,
  2970. "update",
  2971. "jobs"
  2972. );
  2973. tools.orderReshowData(
  2974. sheet,
  2975. controller.tree.selected.jobs,
  2976. setting,
  2977. "job",
  2978. true
  2979. );
  2980. }
  2981. if (field === "content" && job.data[field] === newData) {
  2982. let serialNo = tools.getObj(
  2983. controller.tree.selected.jobs,
  2984. id,
  2985. "job"
  2986. ).serialNo; //update--add
  2987. let index = tools.getIndex(controller.tree.selected.jobs, id, "job");
  2988. job.count++;
  2989. controller.tree.selected.jobs.splice(index, 1);
  2990. controller.tree.selected.jobs.splice(index, 0, {
  2991. job: job,
  2992. serialNo: serialNo,
  2993. }); //update--
  2994. billsAjax.updateBillsArr(
  2995. userAccount,
  2996. billsLibId,
  2997. controller.tree.selected.getID(),
  2998. id,
  2999. job.data.id,
  3000. "update",
  3001. "jobs"
  3002. );
  3003. // tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  3004. tools.orderReshowData(
  3005. sheet,
  3006. controller.tree.selected.jobs,
  3007. setting,
  3008. "job",
  3009. true
  3010. );
  3011. }
  3012. });
  3013. } else {
  3014. if (field === "content") {
  3015. maxJobsNumber++;
  3016. //let serialNo = tools.getSerialNo(controllers.tree.selected.jobs);//update--
  3017. let serialNo = tools.getObj(
  3018. controller.tree.selected.jobs,
  3019. id,
  3020. "job"
  3021. ).serialNo;
  3022. jobsAjax.edUpdateJob(
  3023. userAccount,
  3024. billsLibId,
  3025. controller.tree.selected.getID(),
  3026. newData,
  3027. maxJobsNumber,
  3028. id,
  3029. function (newJobId) {
  3030. //update--
  3031. var newJobData, newJob;
  3032. newJobData = {
  3033. id: newJobId,
  3034. content: newData,
  3035. code: maxJobsNumber,
  3036. };
  3037. newJob = createObj.newJob(newJobData);
  3038. newJob.count = 1;
  3039. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  3040. totalJobs.jobsArr.push(newJob);
  3041. var index = tools.getIndex(
  3042. controller.tree.selected.jobs,
  3043. id,
  3044. "job"
  3045. );
  3046. controller.tree.selected.jobs.splice(index, 1);
  3047. controller.tree.selected.jobs.splice(index, 0, {
  3048. job: newJob,
  3049. serialNo: serialNo,
  3050. }); //update--
  3051. //tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  3052. tools.orderReshowData(
  3053. sheet,
  3054. controller.tree.selected.jobs,
  3055. setting,
  3056. "job",
  3057. true
  3058. ); //update--
  3059. }
  3060. );
  3061. } else {
  3062. tools.alertOpr(
  3063. args,
  3064. sheet,
  3065. "该编号不存在,请重新输入!",
  3066. controller.tree.selected.jobs,
  3067. "job"
  3068. );
  3069. /* //todo: 提示窗口
  3070. console.log(`enter`);
  3071. console.log(typeof newData);
  3072. if(typeof newData === 'number'){
  3073. console.log(`orgJobData: ${orgJobData}`);
  3074. sheet.getCell(args.row, args.col).value(orgJobData);
  3075. }
  3076. else {
  3077. //编号只能是数字
  3078. sheet.getCell(args.row, args.col).value('');
  3079. }*/
  3080. }
  3081. }
  3082. },
  3083. upMove: function (controller, sheet) {
  3084. let updateSelArr = [];
  3085. $("#upMove").attr("doing", "true");
  3086. tools.btnClose($("#upMove"));
  3087. let args = controller.tree.selected.args,
  3088. thisJob = controller.tree.selected.jobs[args.row],
  3089. preJob = controller.tree.selected.jobs[args.row - 1],
  3090. tempSerialNo;
  3091. //switch serialNo
  3092. tempSerialNo = thisJob.serialNo;
  3093. thisJob.serialNo = preJob.serialNo;
  3094. preJob.serialNo = tempSerialNo;
  3095. updateSelArr.push({ id: thisJob.job.data.id, serialNo: thisJob.serialNo });
  3096. updateSelArr.push({ id: preJob.job.data.id, serialNo: preJob.serialNo });
  3097. billsAjax.updateSerialNo(
  3098. billsLibId,
  3099. controller.tree.selected.getID(),
  3100. updateSelArr,
  3101. "jobs",
  3102. function () {
  3103. tools.orderReshowData(
  3104. sheet,
  3105. controller.tree.selected.jobs,
  3106. jobsSetting,
  3107. "job",
  3108. true
  3109. );
  3110. sheet.setActiveCell(args.row - 1, args.col);
  3111. controller.tree.selected.args.row = args.row - 1;
  3112. $("#upMove").attr("doing", "false");
  3113. if (
  3114. tools.canUpMove(
  3115. controller.tree.selected.jobs[controller.tree.selected.args.row],
  3116. controller.tree.selected.jobs
  3117. )
  3118. ) {
  3119. $("#upMove").attr("canMove", "true");
  3120. tools.btnAction($("#upMove"));
  3121. } else {
  3122. $("#upMove").attr("canMove", "false");
  3123. }
  3124. if (
  3125. tools.canDownMove(
  3126. controller.tree.selected.jobs[controller.tree.selected.args.row],
  3127. controller.tree.selected.jobs
  3128. )
  3129. ) {
  3130. $("#downMove").attr("canMove", true);
  3131. tools.btnAction($("#downMove"));
  3132. } else {
  3133. $("#downMove").attr("canMove", "false");
  3134. tools.btnClose($("#downMove"));
  3135. }
  3136. }
  3137. );
  3138. },
  3139. downMove: function (controller, sheet) {
  3140. let updateSelArr = [];
  3141. $("#downMove").attr("doing", "true");
  3142. tools.btnClose($("#downMove"));
  3143. let tempSerialNo =
  3144. controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo;
  3145. controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo =
  3146. controller.tree.selected.jobs[
  3147. controller.tree.selected.args.row + 1
  3148. ].serialNo;
  3149. controller.tree.selected.jobs[
  3150. controller.tree.selected.args.row + 1
  3151. ].serialNo = tempSerialNo;
  3152. updateSelArr.push({
  3153. id: controller.tree.selected.jobs[controller.tree.selected.args.row].job
  3154. .data.id,
  3155. serialNo:
  3156. controller.tree.selected.jobs[controller.tree.selected.args.row]
  3157. .serialNo,
  3158. });
  3159. updateSelArr.push({
  3160. id: controller.tree.selected.jobs[controller.tree.selected.args.row + 1]
  3161. .job.data.id,
  3162. serialNo:
  3163. controller.tree.selected.jobs[controller.tree.selected.args.row + 1]
  3164. .serialNo,
  3165. });
  3166. billsAjax.updateSerialNo(
  3167. billsLibId,
  3168. controller.tree.selected.getID(),
  3169. updateSelArr,
  3170. "jobs",
  3171. function () {
  3172. tools.orderReshowData(
  3173. sheet,
  3174. controller.tree.selected.jobs,
  3175. jobsSetting,
  3176. "job",
  3177. true
  3178. );
  3179. sheet.setActiveCell(
  3180. controller.tree.selected.args.row + 1,
  3181. controller.tree.selected.args.col
  3182. );
  3183. controller.tree.selected.args.row =
  3184. controller.tree.selected.args.row + 1;
  3185. $("#downMove").attr("doing", "false");
  3186. if (
  3187. tools.canDownMove(
  3188. controller.tree.selected.jobs[controller.tree.selected.args.row],
  3189. controller.tree.selected.jobs
  3190. )
  3191. ) {
  3192. $("#downMove").attr("canMove", "true");
  3193. tools.btnAction($("#downMove"));
  3194. } else {
  3195. $("#downMove").attr("canMove", "false");
  3196. }
  3197. if (
  3198. tools.canUpMove(
  3199. controller.tree.selected.jobs[controller.tree.selected.args.row],
  3200. controller.tree.selected.jobs
  3201. )
  3202. ) {
  3203. $("#upMove").attr("canMove", "true");
  3204. tools.btnAction($("#upMove"));
  3205. } else {
  3206. $("#upMove").attr("canMove", "false");
  3207. tools.btnClose($("#upMove"));
  3208. }
  3209. }
  3210. );
  3211. },
  3212. };
  3213. var designsController = {
  3214. currentEditData: null,
  3215. totalDesigns: null,
  3216. onEditStart: function (sender, args) {
  3217. let me = designsController;
  3218. me.currentEditData = args.sheet.getValue(args.row, args.col);
  3219. },
  3220. onEditEnded: function (sender, args) {
  3221. let me = designsController;
  3222. let sheet = args.sheet;
  3223. let controller = dbController.controller;
  3224. let totalDesigns = me.totalDesigns;
  3225. let setting = designsSetting;
  3226. var field,
  3227. newData = args.editingText,
  3228. id = sheet.getTag(args.row, args.col);
  3229. setting.cols.forEach(function (col, idx) {
  3230. if (args.col === idx) {
  3231. field = col.data.field;
  3232. }
  3233. });
  3234. if (controller.tree.selected && newData != me.currentEditData) {
  3235. var isExist = tools.isDesignExist(
  3236. totalDesigns.designsArr,
  3237. field,
  3238. newData,
  3239. args.sheet,
  3240. args.row
  3241. );
  3242. var isRepeat = tools.isDesignRepeat(
  3243. controller.tree.selected.designs,
  3244. field,
  3245. newData,
  3246. "reference",
  3247. "design",
  3248. args.sheet,
  3249. args.row
  3250. );
  3251. //create
  3252. if (!id && newData && !isRepeat) {
  3253. if (isExist) {
  3254. designsController.createExist(
  3255. sheet,
  3256. controller,
  3257. totalDesigns,
  3258. field,
  3259. newData,
  3260. args,
  3261. setting
  3262. );
  3263. } else {
  3264. designsController.createNew(
  3265. sheet,
  3266. controller,
  3267. totalDesigns,
  3268. field,
  3269. newData,
  3270. args,
  3271. setting
  3272. );
  3273. }
  3274. }
  3275. //update
  3276. else if (id && !isRepeat) {
  3277. designsController.update(
  3278. sheet,
  3279. controller,
  3280. totalDesigns,
  3281. field,
  3282. newData,
  3283. id,
  3284. isExist,
  3285. args,
  3286. setting
  3287. );
  3288. }
  3289. //处理重复
  3290. if (isRepeat) {
  3291. tools.alertOpr(
  3292. args,
  3293. sheet,
  3294. "该设计细目已存在!",
  3295. controller.tree.selected.designs,
  3296. "design"
  3297. );
  3298. }
  3299. } else {
  3300. sheet
  3301. .getCell(args.row, args.col)
  3302. .value(me.currentEditData ? me.currentEditData : "");
  3303. }
  3304. },
  3305. editData: function (sheet) {
  3306. let me = designsController;
  3307. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  3308. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  3309. },
  3310. createNew: function (
  3311. sheet,
  3312. controller,
  3313. totalDesigns,
  3314. field,
  3315. newData,
  3316. args,
  3317. setting
  3318. ) {
  3319. if (field === "name" || field === "unit") {
  3320. maxDesignsNumber++;
  3321. //update--
  3322. let serialNo = tools.getSerialNo(controller.tree.selected.designs);
  3323. //--
  3324. designsAjax.edCreateDesign(
  3325. userAccount,
  3326. billsLibId,
  3327. controller.tree.selected.getID(),
  3328. field,
  3329. newData,
  3330. maxDesignsNumber,
  3331. serialNo,
  3332. function (newID) {
  3333. var newDesignData, newDesign;
  3334. newDesignData = {
  3335. id: newID,
  3336. [field]: newData,
  3337. code: maxDesignsNumber,
  3338. };
  3339. newDesign = createObj.newDesign(newDesignData);
  3340. newDesign.count = 1;
  3341. totalDesigns.designs[totalDesigns.prefix + newID] = newDesign;
  3342. totalDesigns.designsArr.push(newDesign);
  3343. controller.tree.selected.designs.push({
  3344. design: newDesign,
  3345. serialNo: serialNo,
  3346. }); //update--
  3347. tools.orderReshowData(
  3348. sheet,
  3349. controller.tree.selected.designs,
  3350. setting,
  3351. "design",
  3352. true
  3353. ); //update--
  3354. }
  3355. );
  3356. } else {
  3357. tools.alertOpr(
  3358. args,
  3359. sheet,
  3360. "该编号不存在,请重新输入!",
  3361. controller.tree.selected.designs,
  3362. "design"
  3363. );
  3364. }
  3365. },
  3366. createExist: function (
  3367. sheet,
  3368. controller,
  3369. totalDesigns,
  3370. field,
  3371. newData,
  3372. args,
  3373. setting
  3374. ) {
  3375. const name = field === "name" ? newData : sheet.getValue(args.row, 1);
  3376. const unit = field === "unit" ? newData : sheet.getValue(args.row, 2);
  3377. if (field === "code") {
  3378. matched = totalDesigns.designsArr.find(
  3379. (item) => item.data.code == newData
  3380. );
  3381. } else {
  3382. matched = totalDesigns.designsArr.find(
  3383. (item) => item.data.name == name && item.data.unit == unit
  3384. );
  3385. }
  3386. if (matched) {
  3387. let serialNo = tools.getSerialNo(controller.tree.selected.designs); //update--
  3388. billsAjax.updateBills(
  3389. userAccount,
  3390. billsLibId,
  3391. controller.tree.selected.getID(),
  3392. "designs",
  3393. { id: matched.data.id, serialNo: serialNo }
  3394. ); //update--
  3395. matched.count++;
  3396. controller.tree.selected.designs.push({
  3397. design: matched,
  3398. serialNo: serialNo,
  3399. }); //update--
  3400. // tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  3401. tools.orderReshowData(
  3402. sheet,
  3403. controller.tree.selected.designs,
  3404. setting,
  3405. "design",
  3406. true
  3407. );
  3408. }
  3409. /* for (const design of totalDesigns.designsArr) {
  3410. if ((field === 'name' && newData === design.data.name) || (field === 'unit' && newData === design.data.unit)) {
  3411. let serialNo = tools.getSerialNo(controller.tree.selected.designs);//update--
  3412. //billsAjax.updateBills(billsLibId, controllers.tree.selected.getID(), 'designs', job.data.id);//update--
  3413. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'designs', { id: design.data.id, serialNo: serialNo });//update--
  3414. design.count++;
  3415. // controllers.tree.selected.designs.push(job);//update--
  3416. controller.tree.selected.designs.push({ design: design, serialNo: serialNo });//update--
  3417. //tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  3418. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  3419. break;
  3420. }
  3421. else if (field == 'code' && newData == design.data.code) {
  3422. let serialNo = tools.getSerialNo(controller.tree.selected.designs);//update--
  3423. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'designs', { id: design.data.id, serialNo: serialNo });//update--
  3424. design.count++;
  3425. controller.tree.selected.designs.push({ design: design, serialNo: serialNo });//update--
  3426. // tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  3427. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  3428. break;
  3429. }
  3430. } */
  3431. },
  3432. update: function (
  3433. sheet,
  3434. controller,
  3435. totalDesigns,
  3436. field,
  3437. newData,
  3438. id,
  3439. isExist,
  3440. args,
  3441. setting
  3442. ) {
  3443. const name = field === "name" ? newData : sheet.getValue(args.row, 1);
  3444. const unit = field === "unit" ? newData : sheet.getValue(args.row, 2);
  3445. if (isExist) {
  3446. let matched;
  3447. if (field === "code") {
  3448. matched = totalDesigns.designsArr.find(
  3449. (item) => item.data.code == newData
  3450. );
  3451. } else {
  3452. matched = totalDesigns.designsArr.find(
  3453. (item) => item.data.name == name && item.data.unit == unit
  3454. );
  3455. }
  3456. if (matched) {
  3457. let serialNo = tools.getObj(
  3458. controller.tree.selected.designs,
  3459. id,
  3460. "design"
  3461. ).serialNo; //update--add
  3462. let index = tools.getIndex(
  3463. controller.tree.selected.designs,
  3464. id,
  3465. "design"
  3466. ); //update-- getIndex
  3467. matched.count++;
  3468. controller.tree.selected.designs.splice(index, 1);
  3469. controller.tree.selected.designs.splice(index, 0, {
  3470. design: matched,
  3471. serialNo: serialNo,
  3472. }); //update--
  3473. billsAjax.updateBillsArr(
  3474. userAccount,
  3475. billsLibId,
  3476. controller.tree.selected.getID(),
  3477. id,
  3478. matched.data.id,
  3479. "update",
  3480. "designs"
  3481. );
  3482. tools.orderReshowData(
  3483. sheet,
  3484. controller.tree.selected.designs,
  3485. setting,
  3486. "design",
  3487. true
  3488. );
  3489. }
  3490. /* totalDesigns.designsArr.forEach(function (design) {
  3491. if (field == 'code' && design.data[field] == newData) {
  3492. let serialNo = tools.getObj(controller.tree.selected.designs, id, 'design').serialNo;//update--add
  3493. let index = tools.getIndex(controller.tree.selected.designs, id, 'design');//update-- getIndex
  3494. design.count++;
  3495. controller.tree.selected.designs.splice(index, 1);
  3496. controller.tree.selected.designs.splice(index, 0, { design: design, serialNo: serialNo });//update--
  3497. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, design.data.id, 'update', 'designs');
  3498. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  3499. }
  3500. if (field === 'name' && design.data[field] === newData) {
  3501. let serialNo = tools.getObj(controller.tree.selected.designs, id, 'design').serialNo;//update--add
  3502. let index = tools.getIndex(controller.tree.selected.designs, id, 'design');
  3503. design.count++;
  3504. controller.tree.selected.designs.splice(index, 1);
  3505. controller.tree.selected.designs.splice(index, 0, { design: design, serialNo: serialNo });//update--
  3506. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, design.data.id, 'update', 'designs');
  3507. // tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  3508. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  3509. }
  3510. }); */
  3511. } else {
  3512. if (field === "name" || field === "unit") {
  3513. maxDesignsNumber++;
  3514. //let serialNo = tools.getSerialNo(controllers.tree.selected.designs);//update--
  3515. let serialNo = tools.getObj(
  3516. controller.tree.selected.designs,
  3517. id,
  3518. "design"
  3519. ).serialNo;
  3520. designsAjax.edUpdateDesign(
  3521. userAccount,
  3522. billsLibId,
  3523. controller.tree.selected.getID(),
  3524. name,
  3525. unit,
  3526. maxDesignsNumber,
  3527. id,
  3528. function (newDesignId) {
  3529. //update--
  3530. var newDesignData, newDesign;
  3531. newDesignData = {
  3532. id: newDesignId,
  3533. name,
  3534. unit,
  3535. code: maxDesignsNumber,
  3536. };
  3537. newDesign = createObj.newDesign(newDesignData);
  3538. newDesign.count = 1;
  3539. totalDesigns.designs[totalDesigns.prefix + newDesignId] = newDesign;
  3540. totalDesigns.designsArr.push(newDesign);
  3541. var index = tools.getIndex(
  3542. controller.tree.selected.designs,
  3543. id,
  3544. "design"
  3545. );
  3546. controller.tree.selected.designs.splice(index, 1);
  3547. controller.tree.selected.designs.splice(index, 0, {
  3548. design: newDesign,
  3549. serialNo: serialNo,
  3550. }); //update--
  3551. //tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  3552. tools.orderReshowData(
  3553. sheet,
  3554. controller.tree.selected.designs,
  3555. setting,
  3556. "design",
  3557. true
  3558. ); //update--
  3559. }
  3560. );
  3561. } else {
  3562. tools.alertOpr(
  3563. args,
  3564. sheet,
  3565. "该编号不存在,请重新输入!",
  3566. controller.tree.selected.designs,
  3567. "design"
  3568. );
  3569. }
  3570. }
  3571. },
  3572. upMove: function (controller, sheet) {
  3573. let updateSelArr = [];
  3574. $("#upMove").attr("doing", "true");
  3575. tools.btnClose($("#upMove"));
  3576. let args = controller.tree.selected.args,
  3577. thisDesign = controller.tree.selected.designs[args.row],
  3578. preDesign = controller.tree.selected.designs[args.row - 1],
  3579. tempSerialNo;
  3580. //switch serialNo
  3581. tempSerialNo = thisDesign.serialNo;
  3582. thisDesign.serialNo = preDesign.serialNo;
  3583. preDesign.serialNo = tempSerialNo;
  3584. updateSelArr.push({
  3585. id: thisDesign.design.data.id,
  3586. serialNo: thisDesign.serialNo,
  3587. });
  3588. updateSelArr.push({
  3589. id: preDesign.design.data.id,
  3590. serialNo: preDesign.serialNo,
  3591. });
  3592. billsAjax.updateSerialNo(
  3593. billsLibId,
  3594. controller.tree.selected.getID(),
  3595. updateSelArr,
  3596. "designs",
  3597. function () {
  3598. tools.orderReshowData(
  3599. sheet,
  3600. controller.tree.selected.designs,
  3601. designsSetting,
  3602. "design",
  3603. true
  3604. );
  3605. sheet.setActiveCell(args.row - 1, args.col);
  3606. controller.tree.selected.args.row = args.row - 1;
  3607. $("#upMove").attr("doing", "false");
  3608. if (
  3609. tools.canUpMove(
  3610. controller.tree.selected.designs[controller.tree.selected.args.row],
  3611. controller.tree.selected.designs
  3612. )
  3613. ) {
  3614. $("#upMove").attr("canMove", "true");
  3615. tools.btnAction($("#upMove"));
  3616. } else {
  3617. $("#upMove").attr("canMove", "false");
  3618. }
  3619. if (
  3620. tools.canDownMove(
  3621. controller.tree.selected.designs[controller.tree.selected.args.row],
  3622. controller.tree.selected.designs
  3623. )
  3624. ) {
  3625. $("#downMove").attr("canMove", true);
  3626. tools.btnAction($("#downMove"));
  3627. } else {
  3628. $("#downMove").attr("canMove", "false");
  3629. tools.btnClose($("#downMove"));
  3630. }
  3631. }
  3632. );
  3633. },
  3634. downMove: function (controller, sheet) {
  3635. let updateSelArr = [];
  3636. $("#downMove").attr("doing", "true");
  3637. tools.btnClose($("#downMove"));
  3638. let tempSerialNo =
  3639. controller.tree.selected.designs[controller.tree.selected.args.row]
  3640. .serialNo;
  3641. controller.tree.selected.designs[
  3642. controller.tree.selected.args.row
  3643. ].serialNo =
  3644. controller.tree.selected.designs[
  3645. controller.tree.selected.args.row + 1
  3646. ].serialNo;
  3647. controller.tree.selected.designs[
  3648. controller.tree.selected.args.row + 1
  3649. ].serialNo = tempSerialNo;
  3650. updateSelArr.push({
  3651. id: controller.tree.selected.designs[controller.tree.selected.args.row]
  3652. .design.data.id,
  3653. serialNo:
  3654. controller.tree.selected.designs[controller.tree.selected.args.row]
  3655. .serialNo,
  3656. });
  3657. updateSelArr.push({
  3658. id: controller.tree.selected.designs[
  3659. controller.tree.selected.args.row + 1
  3660. ].design.data.id,
  3661. serialNo:
  3662. controller.tree.selected.designs[controller.tree.selected.args.row + 1]
  3663. .serialNo,
  3664. });
  3665. billsAjax.updateSerialNo(
  3666. billsLibId,
  3667. controller.tree.selected.getID(),
  3668. updateSelArr,
  3669. "designs",
  3670. function () {
  3671. tools.orderReshowData(
  3672. sheet,
  3673. controller.tree.selected.designs,
  3674. designsSetting,
  3675. "design",
  3676. true
  3677. );
  3678. sheet.setActiveCell(
  3679. controller.tree.selected.args.row + 1,
  3680. controller.tree.selected.args.col
  3681. );
  3682. controller.tree.selected.args.row =
  3683. controller.tree.selected.args.row + 1;
  3684. $("#downMove").attr("doing", "false");
  3685. if (
  3686. tools.canDownMove(
  3687. controller.tree.selected.designs[controller.tree.selected.args.row],
  3688. controller.tree.selected.designs
  3689. )
  3690. ) {
  3691. $("#downMove").attr("canMove", "true");
  3692. tools.btnAction($("#downMove"));
  3693. } else {
  3694. $("#downMove").attr("canMove", "false");
  3695. }
  3696. if (
  3697. tools.canUpMove(
  3698. controller.tree.selected.designs[controller.tree.selected.args.row],
  3699. controller.tree.selected.designs
  3700. )
  3701. ) {
  3702. $("#upMove").attr("canMove", "true");
  3703. tools.btnAction($("#upMove"));
  3704. } else {
  3705. $("#upMove").attr("canMove", "false");
  3706. tools.btnClose($("#upMove"));
  3707. }
  3708. }
  3709. );
  3710. },
  3711. };
  3712. var itemsController = {
  3713. currentEditData: null,
  3714. totalItems: null,
  3715. onEditStart: function (sender, args) {
  3716. let me = itemsController;
  3717. me.currentEditData = args.sheet.getValue(args.row, args.col);
  3718. },
  3719. onEditEnded: function (sender, args) {
  3720. let me = itemsController;
  3721. let controller = dbController.controller;
  3722. let totalItems = me.totalItems;
  3723. let setting = itemsSetting;
  3724. let sheet = args.sheet;
  3725. var field,
  3726. newData = args.editingText,
  3727. id = sheet.getTag(args.row, args.col);
  3728. setting.cols.forEach(function (col, idx) {
  3729. if (args.col === idx) {
  3730. field = col.data.field;
  3731. }
  3732. });
  3733. if (controller.tree.selected && newData != me.currentEditData) {
  3734. var isExist = tools.isExist(totalItems.itemsArr, field, newData);
  3735. var isRepeat = tools.isRepeat(
  3736. controller.tree.selected.items,
  3737. field,
  3738. newData,
  3739. "reference",
  3740. "item"
  3741. );
  3742. //create
  3743. if (!id && newData && !isRepeat) {
  3744. if (isExist) {
  3745. itemsController.createExist(
  3746. sheet,
  3747. controller,
  3748. totalItems,
  3749. field,
  3750. newData,
  3751. args,
  3752. setting
  3753. );
  3754. } else {
  3755. itemsController.createNew(
  3756. sheet,
  3757. controller,
  3758. totalItems,
  3759. field,
  3760. newData,
  3761. args,
  3762. setting
  3763. );
  3764. }
  3765. }
  3766. //update
  3767. else if (id && !isRepeat) {
  3768. itemsController.update(
  3769. sheet,
  3770. controller,
  3771. totalItems,
  3772. field,
  3773. newData,
  3774. id,
  3775. isExist,
  3776. args,
  3777. setting
  3778. );
  3779. }
  3780. //处理重复
  3781. if (isRepeat) {
  3782. tools.alertOpr(
  3783. args,
  3784. sheet,
  3785. "该项目特征已存在!",
  3786. controller.tree.selected.items,
  3787. "item"
  3788. );
  3789. }
  3790. } else {
  3791. sheet
  3792. .getCell(args.row, args.col)
  3793. .value(me.currentEditData ? me.currentEditData : "");
  3794. }
  3795. },
  3796. editData: function (sheet) {
  3797. let me = itemsController;
  3798. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  3799. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  3800. },
  3801. createNew: function (
  3802. sheet,
  3803. controller,
  3804. totalItems,
  3805. field,
  3806. newData,
  3807. args,
  3808. setting
  3809. ) {
  3810. if (field === "content") {
  3811. maxItemsNumber++;
  3812. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  3813. itemsAjax.edCreateItem(
  3814. userAccount,
  3815. billsLibId,
  3816. controller.tree.selected.getID(),
  3817. newData,
  3818. maxItemsNumber,
  3819. serialNo,
  3820. function (newItemId) {
  3821. let newItemData, newItem;
  3822. newItemData = {
  3823. id: newItemId,
  3824. content: newData,
  3825. code: maxItemsNumber,
  3826. };
  3827. newItem = createObj.newItem(newItemData);
  3828. newItem.count = 1;
  3829. totalItems.items[totalItems.prefix + newItemId] = newItem;
  3830. totalItems.itemsArr.push(newItem);
  3831. controller.tree.selected.items.push({
  3832. item: newItem,
  3833. serialNo: serialNo,
  3834. });
  3835. //tools.reshowData(sheet, controllers.tree.selected.items, setting, true);
  3836. tools.orderReshowData(
  3837. sheet,
  3838. controller.tree.selected.items,
  3839. setting,
  3840. "item",
  3841. true
  3842. );
  3843. }
  3844. );
  3845. } else {
  3846. tools.alertOpr(
  3847. args,
  3848. sheet,
  3849. "该编号不存在,请重新输入!",
  3850. controller.tree.selected.items,
  3851. "item"
  3852. );
  3853. }
  3854. },
  3855. createExist: function (
  3856. sheet,
  3857. controller,
  3858. totalItems,
  3859. field,
  3860. newData,
  3861. args,
  3862. setting
  3863. ) {
  3864. totalItems.itemsArr.forEach(function (item) {
  3865. if (field === "content" && newData === item.data.content) {
  3866. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  3867. billsAjax.updateBills(
  3868. userAccount,
  3869. billsLibId,
  3870. controller.tree.selected.getID(),
  3871. "items",
  3872. { id: item.data.id, serialNo: serialNo }
  3873. );
  3874. item.count++;
  3875. controller.tree.selected.items.push({ item: item, serialNo: serialNo });
  3876. tools.orderReshowData(
  3877. sheet,
  3878. controller.tree.selected.items,
  3879. setting,
  3880. "item",
  3881. true
  3882. );
  3883. } else if (field == "code" && newData == item.data.code) {
  3884. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  3885. billsAjax.updateBills(
  3886. userAccount,
  3887. billsLibId,
  3888. controller.tree.selected.getID(),
  3889. "items",
  3890. { id: item.data.id, serialNo: serialNo }
  3891. );
  3892. item.count++;
  3893. controller.tree.selected.items.push({ item: item, serialNo: serialNo });
  3894. tools.orderReshowData(
  3895. sheet,
  3896. controller.tree.selected.items,
  3897. setting,
  3898. "item",
  3899. true
  3900. );
  3901. }
  3902. });
  3903. },
  3904. update: function (
  3905. sheet,
  3906. controller,
  3907. totalItems,
  3908. field,
  3909. newData,
  3910. id,
  3911. isExist,
  3912. args,
  3913. setting
  3914. ) {
  3915. if (isExist) {
  3916. totalItems.itemsArr.forEach(function (item) {
  3917. if (field == "code" && item.data[field] == newData) {
  3918. let serialNo = tools.getObj(
  3919. controller.tree.selected.items,
  3920. id,
  3921. "item"
  3922. ).serialNo;
  3923. let index = tools.getIndex(
  3924. controller.tree.selected.items,
  3925. id,
  3926. "item"
  3927. );
  3928. item.count++;
  3929. controller.tree.selected.items.splice(index, 1);
  3930. controller.tree.selected.items.splice(index, 0, {
  3931. item: item,
  3932. serialNo: serialNo,
  3933. });
  3934. billsAjax.updateBillsArr(
  3935. userAccount,
  3936. billsLibId,
  3937. controller.tree.selected.getID(),
  3938. id,
  3939. item.data.id,
  3940. "update",
  3941. "items"
  3942. );
  3943. tools.orderReshowData(
  3944. sheet,
  3945. controller.tree.selected.items,
  3946. setting,
  3947. "item",
  3948. true
  3949. );
  3950. }
  3951. if (field === "content" && item.data[field] === newData) {
  3952. let serialNo = tools.getObj(
  3953. controller.tree.selected.items,
  3954. id,
  3955. "item"
  3956. ).serialNo;
  3957. let index = tools.getIndex(
  3958. controller.tree.selected.items,
  3959. id,
  3960. "item"
  3961. );
  3962. item.count++;
  3963. controller.tree.selected.items.splice(index, 1);
  3964. controller.tree.selected.items.splice(index, 0, {
  3965. item: item,
  3966. serialNo: serialNo,
  3967. });
  3968. billsAjax.updateBillsArr(
  3969. userAccount,
  3970. billsLibId,
  3971. controller.tree.selected.getID(),
  3972. id,
  3973. item.data.id,
  3974. "update",
  3975. "items"
  3976. );
  3977. tools.orderReshowData(
  3978. sheet,
  3979. controller.tree.selected.items,
  3980. setting,
  3981. "item",
  3982. true
  3983. );
  3984. }
  3985. });
  3986. } else {
  3987. if (field === "content") {
  3988. maxItemsNumber++;
  3989. let serialNo = tools.getObj(
  3990. controller.tree.selected.items,
  3991. id,
  3992. "item"
  3993. ).serialNo;
  3994. itemsAjax.edUpdateItem(
  3995. userAccount,
  3996. billsLibId,
  3997. controller.tree.selected.getID(),
  3998. newData,
  3999. maxItemsNumber,
  4000. id,
  4001. function (newItemId) {
  4002. var newItemData, newItem;
  4003. newItemData = {
  4004. id: newItemId,
  4005. content: newData,
  4006. code: maxItemsNumber,
  4007. };
  4008. newItem = createObj.newItem(newItemData);
  4009. newItem.count = 1;
  4010. totalItems.items[totalItems.prefix + newItemId] = newItem;
  4011. totalItems.itemsArr.push(newItem);
  4012. var index = tools.getIndex(
  4013. controller.tree.selected.items,
  4014. id,
  4015. "item"
  4016. );
  4017. controller.tree.selected.items.splice(index, 1);
  4018. controller.tree.selected.items.splice(index, 0, {
  4019. item: newItem,
  4020. serialNo: serialNo,
  4021. });
  4022. tools.orderReshowData(
  4023. sheet,
  4024. controller.tree.selected.items,
  4025. setting,
  4026. "item",
  4027. true
  4028. );
  4029. }
  4030. );
  4031. } else {
  4032. tools.alertOpr(
  4033. args,
  4034. sheet,
  4035. "该编号不存在,请重新输入!",
  4036. controller.tree.selected.items,
  4037. "item"
  4038. );
  4039. }
  4040. }
  4041. },
  4042. upMove: function (controller, sheet) {
  4043. let updateSelArr = [];
  4044. $("#upMove").attr("doing", "true");
  4045. tools.btnClose($("#upMove"));
  4046. let tempSerialNo =
  4047. controller.tree.selected.items[controller.tree.selected.args.row]
  4048. .serialNo;
  4049. controller.tree.selected.items[controller.tree.selected.args.row].serialNo =
  4050. controller.tree.selected.items[
  4051. controller.tree.selected.args.row - 1
  4052. ].serialNo;
  4053. controller.tree.selected.items[
  4054. controller.tree.selected.args.row - 1
  4055. ].serialNo = tempSerialNo;
  4056. updateSelArr.push({
  4057. id: controller.tree.selected.items[controller.tree.selected.args.row].item
  4058. .data.id,
  4059. serialNo:
  4060. controller.tree.selected.items[controller.tree.selected.args.row]
  4061. .serialNo,
  4062. });
  4063. updateSelArr.push({
  4064. id: controller.tree.selected.items[controller.tree.selected.args.row - 1]
  4065. .item.data.id,
  4066. serialNo:
  4067. controller.tree.selected.items[controller.tree.selected.args.row - 1]
  4068. .serialNo,
  4069. });
  4070. billsAjax.updateSerialNo(
  4071. billsLibId,
  4072. controller.tree.selected.getID(),
  4073. updateSelArr,
  4074. "items",
  4075. function () {
  4076. tools.orderReshowData(
  4077. sheet,
  4078. controller.tree.selected.items,
  4079. itemsSetting,
  4080. "item",
  4081. true
  4082. );
  4083. sheet.setActiveCell(
  4084. controller.tree.selected.args.row - 1,
  4085. controller.tree.selected.args.col
  4086. );
  4087. controller.tree.selected.args.row =
  4088. controller.tree.selected.args.row - 1;
  4089. $("#upMove").attr("doing", "false");
  4090. if (
  4091. tools.canUpMove(
  4092. controller.tree.selected.items[controller.tree.selected.args.row],
  4093. controller.tree.selected.items
  4094. )
  4095. ) {
  4096. $("#upMove").attr("canMove", "true");
  4097. tools.btnAction($("#upMove"));
  4098. } else {
  4099. $("#upMove").attr("canMove", "false");
  4100. }
  4101. if (
  4102. tools.canDownMove(
  4103. controller.tree.selected.items[controller.tree.selected.args.row],
  4104. controller.tree.selected.items
  4105. )
  4106. ) {
  4107. $("#downMove").attr("canMove", "true");
  4108. tools.btnAction($("#downMove"));
  4109. } else {
  4110. $("#downMove").attr("canMove", "false");
  4111. tools.btnClose($("#downMove"));
  4112. }
  4113. }
  4114. );
  4115. },
  4116. downMove: function (controller, sheet) {
  4117. let updateSelArr = [];
  4118. $("#downMove").attr("doing", "true");
  4119. tools.btnClose($("#downMove"));
  4120. let tempSerialNo =
  4121. controller.tree.selected.items[controller.tree.selected.args.row]
  4122. .serialNo;
  4123. controller.tree.selected.items[controller.tree.selected.args.row].serialNo =
  4124. controller.tree.selected.items[
  4125. controller.tree.selected.args.row + 1
  4126. ].serialNo;
  4127. controller.tree.selected.items[
  4128. controller.tree.selected.args.row + 1
  4129. ].serialNo = tempSerialNo;
  4130. updateSelArr.push({
  4131. id: controller.tree.selected.items[controller.tree.selected.args.row].item
  4132. .data.id,
  4133. serialNo:
  4134. controller.tree.selected.items[controller.tree.selected.args.row]
  4135. .serialNo,
  4136. });
  4137. updateSelArr.push({
  4138. id: controller.tree.selected.items[controller.tree.selected.args.row + 1]
  4139. .item.data.id,
  4140. serialNo:
  4141. controller.tree.selected.items[controller.tree.selected.args.row + 1]
  4142. .serialNo,
  4143. });
  4144. billsAjax.updateSerialNo(
  4145. userAccount,
  4146. billsLibId,
  4147. controller.tree.selected.getID(),
  4148. updateSelArr,
  4149. "items",
  4150. function () {
  4151. tools.orderReshowData(
  4152. sheet,
  4153. controller.tree.selected.items,
  4154. itemsSetting,
  4155. "item",
  4156. true
  4157. );
  4158. sheet.setActiveCell(
  4159. controller.tree.selected.args.row + 1,
  4160. controller.tree.selected.args.col
  4161. );
  4162. controller.tree.selected.args.row =
  4163. controller.tree.selected.args.row + 1;
  4164. $("#downMove").attr("doing", "false");
  4165. if (
  4166. tools.canDownMove(
  4167. controller.tree.selected.items[controller.tree.selected.args.row],
  4168. controller.tree.selected.items
  4169. )
  4170. ) {
  4171. $("#downMove").attr("canMove", "true");
  4172. tools.btnAction($("#downMove"));
  4173. } else {
  4174. $("#downMove").attr("canMove", "false");
  4175. }
  4176. if (
  4177. tools.canUpMove(
  4178. controller.tree.selected.items[controlle.tree.selected.args.row],
  4179. controller.tree.selected.items
  4180. )
  4181. ) {
  4182. $("#upMove").attr("canMove", "true");
  4183. tools.btnAction($("#upMove"));
  4184. } else {
  4185. $("#upMove").attr("canMove", "false");
  4186. tools.btnClose($("#upMove"));
  4187. }
  4188. }
  4189. );
  4190. },
  4191. };
  4192. var valueController = {
  4193. currentEditData: null,
  4194. onEditStart: function (sender, args) {
  4195. let me = valueController;
  4196. me.currentEditData = args.sheet.getValue(args.row, args.col);
  4197. },
  4198. onEditEnded: function (sender, args) {
  4199. let me = valueController;
  4200. let totalItems = totalItemsController.totalItems;
  4201. let sheet = args.sheet;
  4202. let setting = eigenValueSetting;
  4203. var newValue = args.editingText,
  4204. tagId = sheet.getTag(args.row, args.col),
  4205. field,
  4206. isRepeat;
  4207. setting.cols.forEach(function (col, colIdx) {
  4208. if (args.col === colIdx) {
  4209. field = col.data.field;
  4210. }
  4211. });
  4212. if (selectedId && newValue !== me.currentEditData) {
  4213. isRepeat = tools.isRepeat(
  4214. valueController.getValues(totalItems, selectedId),
  4215. field,
  4216. newValue,
  4217. "document"
  4218. );
  4219. if (!tagId && !isRepeat && newValue) {
  4220. //create
  4221. valueController.createValue(
  4222. sheet,
  4223. totalItems,
  4224. selectedId,
  4225. field,
  4226. newValue,
  4227. args
  4228. );
  4229. } else if (tagId && !isRepeat) {
  4230. //update
  4231. valueController.updateValue(totalItems, tagId, newValue, field, args);
  4232. }
  4233. if (isRepeat) {
  4234. if (tagId && newValue) {
  4235. sheet
  4236. .getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport)
  4237. .value(me.currentEditData);
  4238. } else {
  4239. sheet
  4240. .getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport)
  4241. .value("");
  4242. }
  4243. }
  4244. } else {
  4245. sheet
  4246. .getCell(args.row, args.col)
  4247. .value(me.currentEditData ? me.currentEditData : "");
  4248. }
  4249. },
  4250. editData: function (sheet) {
  4251. let me = valueController;
  4252. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  4253. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  4254. },
  4255. createValue: function (sheet, totalItems, id, field, newValue, args) {
  4256. var newData;
  4257. if (field === "value") {
  4258. var newCode = valueController.getCode(totalItems, id);
  4259. newData = { code: newCode, value: newValue };
  4260. totalItems.findItem(id).data.itemValue.push(newData);
  4261. let valueArr = valueController.getValues(totalItems, id);
  4262. tools.reshowValue(args.sheet, valueArr, eigenValueSetting, true);
  4263. // tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode);
  4264. } else {
  4265. if (!isNaN(newValue)) {
  4266. newData = { code: newValue, value: "" };
  4267. totalItems.findItem(id).data.itemValue.push(newData);
  4268. let valueArr = valueController.getValues(totalItems, id);
  4269. tools.reshowValue(args.sheet, valueArr, eigenValueSetting, true);
  4270. //tools.reSetCell(sheet, sheet.getActiveRowIndex(), null, null, newValue);
  4271. } else {
  4272. //编号只能为数字!
  4273. sheet.getCell(args.row, args.col).value("");
  4274. }
  4275. }
  4276. itemsAjax.updateValue(userAccount, billsLibId, id, newData, null, "create");
  4277. valueDatas = tools.getsheetDatas(sheet, "total");
  4278. },
  4279. updateValue: function (totalItems, tagId, newData, field, args) {
  4280. var updateData = { code: tagId, newData: newData, field: field };
  4281. var itemVals = totalItems.findItem(selectedId).data.itemValue;
  4282. if (field === "value") {
  4283. var updateEle = { code: tagId, value: newData };
  4284. if (itemVals) {
  4285. var index;
  4286. itemVals.forEach(function (val) {
  4287. if (val.code === tagId) {
  4288. index = itemVals.indexOf(val);
  4289. itemVals.splice(index, 1);
  4290. }
  4291. });
  4292. itemVals.splice(index, 0, updateEle);
  4293. }
  4294. itemsAjax.updateValue(
  4295. userAccount,
  4296. billsLibId,
  4297. selectedId,
  4298. updateData,
  4299. null,
  4300. "update"
  4301. );
  4302. } else {
  4303. if (isNumber(newData)) {
  4304. if (itemVals) {
  4305. var updateEle;
  4306. var index;
  4307. itemVals.forEach(function (val) {
  4308. if (val.code === tagId) {
  4309. updateEle = { code: parseInt(newData), value: val.value };
  4310. index = itemVals.indexOf(val);
  4311. itemVals.splice(index, 1);
  4312. }
  4313. });
  4314. itemVals.splice(index, 0, updateEle);
  4315. }
  4316. tools.reshowValue(args.sheet, itemVals, eigenValueSetting, true);
  4317. itemsAjax.updateValue(
  4318. userAccount,
  4319. billsLibId,
  4320. selectedId,
  4321. updateData,
  4322. null,
  4323. "update"
  4324. );
  4325. } else {
  4326. //编号只能为数字!
  4327. args.sheet
  4328. .getCell(args.row, args.col)
  4329. .value(
  4330. args.sheet.getValue(0, args.col)
  4331. ? args.sheet.getValue(0, args.col)
  4332. : ""
  4333. );
  4334. }
  4335. }
  4336. },
  4337. getValues: function (totalItems, id) {
  4338. return totalItems.findItem(id).data.itemValue;
  4339. },
  4340. getTopItem: function (totalItems) {
  4341. tools.resort(totalItems.itemsArr, "code", false);
  4342. return totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0] : null;
  4343. },
  4344. getCode: function (totalItems, id) {
  4345. var valArr = totalItems.findItem(id).data.itemValue;
  4346. if (valArr) {
  4347. tools.resort(valArr, "code", true);
  4348. return valArr.length > 0
  4349. ? parseInt(valArr[valArr.length - 1].code) + 1
  4350. : 1;
  4351. } else {
  4352. return 1;
  4353. }
  4354. },
  4355. isRepeat: function (arr, newValue) {
  4356. var isRepeat = false;
  4357. arr.forEach(function (itemValue) {
  4358. if (itemValue.value === newValue) {
  4359. isRepeat = true;
  4360. }
  4361. });
  4362. return isRepeat;
  4363. },
  4364. };
  4365. var totalJobsController = {
  4366. currentEditData: null,
  4367. totalJobs: null,
  4368. onEditStart: function (sender, args) {
  4369. let me = totalJobsController;
  4370. me.currentEditData = args.sheet.getValue(args.row, args.col);
  4371. },
  4372. onEditEnded: function (sender, args) {
  4373. let me = totalJobsController;
  4374. let totalJobs = me.totalJobs;
  4375. let sheet = args.sheet;
  4376. let setting = totalJobsSetting;
  4377. var newData = args.editingText,
  4378. tagId = sheet.getTag(args.row, args.col),
  4379. field,
  4380. isRepeat;
  4381. setting.cols.forEach(function (col, colIdx) {
  4382. if (args.col === colIdx) {
  4383. field = col.data.field;
  4384. }
  4385. });
  4386. if (newData != me.currentEditData) {
  4387. isRepeat = tools.isRepeat(
  4388. totalJobs.jobsArr,
  4389. field,
  4390. newData,
  4391. "reference",
  4392. null
  4393. );
  4394. if (!tagId && !isRepeat && newData) {
  4395. //create
  4396. totalJobsController.createJob(sheet, totalJobs, field, newData, args);
  4397. } else if (tagId && !isRepeat) {
  4398. //update
  4399. totalJobsController.updateJob(totalJobs, tagId, field, newData, args);
  4400. }
  4401. if (isRepeat) {
  4402. tools.alertTotalOpr(args, "该工作内容已存在!", totalJobs.jobsArr);
  4403. }
  4404. } else {
  4405. sheet
  4406. .getCell(args.row, args.col)
  4407. .value(me.currentEditData ? me.currentEditData : "");
  4408. }
  4409. },
  4410. editData: function (sheet) {
  4411. let me = totalJobsController;
  4412. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  4413. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  4414. },
  4415. createJob: function (sheet, totalJobs, field, newData, args) {
  4416. if (field === "content") {
  4417. maxJobsNumber++;
  4418. let code = maxJobsNumber;
  4419. jobsAjax.createJobContent(
  4420. userAccount,
  4421. billsLibId,
  4422. newData,
  4423. code,
  4424. function (newJobId) {
  4425. let newJobData, newJob;
  4426. newJobData = { id: newJobId, content: newData, code: code };
  4427. newJob = createObj.newJob(newJobData);
  4428. totalJobs.jobsArr.push(newJob);
  4429. //tools.reSetCell(sheet, args.row, 0, code, newJobId);
  4430. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  4431. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  4432. sheetJobsDatas = tools.getsheetDatas(sheet, "total");
  4433. }
  4434. );
  4435. } else {
  4436. let parseNum = parseInt(newData);
  4437. //if(typeof newData === 'number'){
  4438. if (!isNaN(parseNum)) {
  4439. maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
  4440. jobsAjax.createJobContent(
  4441. userAccount,
  4442. billsLibId,
  4443. "",
  4444. newData,
  4445. function (newJobId) {
  4446. let newJobData, newJob;
  4447. newJobData = { id: newJobId, content: "", code: newData };
  4448. newJob = createObj.newJob(newJobData);
  4449. totalJobs.jobsArr.push(newJob);
  4450. //tools.reSetCell(sheet, args.row, 0, null, newJobId);
  4451. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  4452. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  4453. sheetJobsDatas = tools.getsheetDatas(sheet, "total");
  4454. }
  4455. );
  4456. } else {
  4457. //编号只能为数字!
  4458. tools.alertTotalOpr(
  4459. args,
  4460. "编号只能为数字,请重新输入!",
  4461. totalJobs.jobsArr
  4462. );
  4463. // sheet.getCell(args.row, args.col).value("");
  4464. }
  4465. }
  4466. },
  4467. updateJob: function (totalJobs, id, field, newData, args) {
  4468. // if(field === 'code' && typeof newData !== 'number'){
  4469. if (field === "code" && isNaN(parseInt(newData))) {
  4470. tools.alertTotalOpr(
  4471. args,
  4472. "编号只能为数字,请重新输入!",
  4473. totalJobs.jobsArr
  4474. );
  4475. } else {
  4476. totalJobs.jobsArr.forEach(function (job) {
  4477. if (job.data.id === id) {
  4478. job.data[field] = newData;
  4479. }
  4480. });
  4481. tools.reshowData(args.sheet, totalJobs.jobsArr, totalJobsSetting, true);
  4482. jobsAjax.updateJobContent(userAccount, billsLibId, id, field, newData);
  4483. }
  4484. },
  4485. };
  4486. var totalDesignsController = {
  4487. currentEditData: null,
  4488. totalDesigns: null,
  4489. onEditStart: function (sender, args) {
  4490. let me = totalDesignsController;
  4491. me.currentEditData = args.sheet.getValue(args.row, args.col);
  4492. },
  4493. onEditEnded: function (sender, args) {
  4494. let me = totalDesignsController;
  4495. let totalDesigns = me.totalDesigns;
  4496. let sheet = args.sheet;
  4497. let setting = totalDesignsSetting;
  4498. var newData = args.editingText,
  4499. tagId = sheet.getTag(args.row, args.col),
  4500. field,
  4501. isRepeat;
  4502. setting.cols.forEach(function (col, colIdx) {
  4503. if (args.col === colIdx) {
  4504. field = col.data.field;
  4505. }
  4506. });
  4507. if (newData != me.currentEditData) {
  4508. isRepeat = tools.isDesignRepeat(
  4509. totalDesigns.designsArr,
  4510. field,
  4511. newData,
  4512. "reference",
  4513. null,
  4514. args.sheet,
  4515. args.row
  4516. );
  4517. if (!tagId && !isRepeat && newData) {
  4518. //create
  4519. totalDesignsController.createDesign(
  4520. sheet,
  4521. totalDesigns,
  4522. field,
  4523. newData,
  4524. args
  4525. );
  4526. } else if (tagId && !isRepeat) {
  4527. //update
  4528. totalDesignsController.updateDesign(
  4529. totalDesigns,
  4530. tagId,
  4531. field,
  4532. newData,
  4533. args
  4534. );
  4535. }
  4536. if (isRepeat) {
  4537. tools.alertTotalOpr(args, "该内容已存在!", totalDesigns.designsArr);
  4538. }
  4539. } else {
  4540. sheet
  4541. .getCell(args.row, args.col)
  4542. .value(me.currentEditData ? me.currentEditData : "");
  4543. }
  4544. },
  4545. editData: function (sheet) {
  4546. let me = totalDesignsController;
  4547. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  4548. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  4549. },
  4550. createDesign: function (sheet, totalDesigns, field, newData, args) {
  4551. if (field === "name" || field === "unit") {
  4552. maxDesignsNumber++;
  4553. let code = maxDesignsNumber;
  4554. designsAjax.createDesignContent(
  4555. userAccount,
  4556. billsLibId,
  4557. field,
  4558. newData,
  4559. code,
  4560. function (newDesignId) {
  4561. let newDesignData, newDesign;
  4562. newDesignData = { id: newDesignId, [field]: newData, code: code };
  4563. newDesign = createObj.newDesign(newDesignData);
  4564. totalDesigns.designsArr.push(newDesign);
  4565. //tools.reSetCell(sheet, args.row, 0, code, newDesignId);
  4566. tools.reshowData(
  4567. sheet,
  4568. totalDesigns.designsArr,
  4569. totalDesignsSetting,
  4570. true
  4571. );
  4572. setSheet.setMaxRowCount(sheet, totalDesigns.designsArr);
  4573. sheetDesignDatas = tools.getsheetDatas(sheet, "total");
  4574. }
  4575. );
  4576. } else {
  4577. let parseNum = parseInt(newData);
  4578. //if(typeof newData === 'number'){
  4579. if (!isNaN(parseNum)) {
  4580. maxDesignsNumber =
  4581. maxDesignsNumber >= newData ? maxDesignsNumber : newData;
  4582. designsAjax.createDesignContent(
  4583. userAccount,
  4584. billsLibId,
  4585. "code",
  4586. newData,
  4587. newData,
  4588. function (newDesignId) {
  4589. let newDesignData, newDesign;
  4590. newDesignData = {
  4591. id: newDesignId,
  4592. name: "",
  4593. unit: "",
  4594. code: newData,
  4595. };
  4596. newDesign = createObj.newDesign(newDesignData);
  4597. totalDesigns.designsArr.push(newDesign);
  4598. //tools.reSetCell(sheet, args.row, 0, null, newDesignId);
  4599. tools.reshowData(
  4600. sheet,
  4601. totalDesigns.designsArr,
  4602. totalDesignsSetting,
  4603. true
  4604. );
  4605. setSheet.setMaxRowCount(sheet, totalDesigns.designsArr);
  4606. sheetDesignDatas = tools.getsheetDatas(sheet, "total");
  4607. }
  4608. );
  4609. } else {
  4610. //编号只能为数字!
  4611. tools.alertTotalOpr(
  4612. args,
  4613. "编号只能为数字,请重新输入!",
  4614. totalDesigns.designsArr
  4615. );
  4616. // sheet.getCell(args.row, args.col).value("");
  4617. }
  4618. }
  4619. },
  4620. updateDesign: function (totalDesigns, id, field, newData, args) {
  4621. // if(field === 'code' && typeof newData !== 'number'){
  4622. if (field === "code" && isNaN(parseInt(newData))) {
  4623. tools.alertTotalOpr(
  4624. args,
  4625. "编号只能为数字,请重新输入!",
  4626. totalDesigns.designsArr
  4627. );
  4628. } else {
  4629. totalDesigns.designsArr.forEach(function (job) {
  4630. if (job.data.id === id) {
  4631. job.data[field] = newData;
  4632. }
  4633. });
  4634. tools.reshowData(
  4635. args.sheet,
  4636. totalDesigns.designsArr,
  4637. totalDesignsSetting,
  4638. true
  4639. );
  4640. designsAjax.updateDesignContent(
  4641. userAccount,
  4642. billsLibId,
  4643. id,
  4644. field,
  4645. newData
  4646. );
  4647. }
  4648. },
  4649. };
  4650. var totalItemsController = {
  4651. currentEditData: null,
  4652. totalItems: null,
  4653. onEditStart: function (sender, args) {
  4654. let me = totalItemsController;
  4655. me.currentEditData = args.sheet.getValue(args.row, args.col);
  4656. },
  4657. onEditEnded: function (sender, args) {
  4658. let me = totalItemsController;
  4659. let totalItems = me.totalItems;
  4660. let sheet = args.sheet;
  4661. let setting = totalItemsSetting;
  4662. var newData = args.editingText,
  4663. tagId = sheet.getTag(args.row, args.col),
  4664. field,
  4665. isRepeat;
  4666. setting.cols.forEach(function (col, colIdx) {
  4667. if (args.col === colIdx) {
  4668. field = col.data.field;
  4669. }
  4670. });
  4671. if (newData != me.currentEditData) {
  4672. isRepeat = tools.isRepeat(
  4673. totalItems.itemsArr,
  4674. field,
  4675. newData,
  4676. "reference",
  4677. null
  4678. );
  4679. if (!tagId && !isRepeat && newData) {
  4680. //create
  4681. totalItemsController.createItem(
  4682. sheet,
  4683. totalItems,
  4684. field,
  4685. newData,
  4686. args
  4687. );
  4688. } else if (tagId && !isRepeat) {
  4689. //update
  4690. totalItemsController.updateItem(
  4691. totalItems,
  4692. tagId,
  4693. field,
  4694. newData,
  4695. args
  4696. );
  4697. } else if (isRepeat) {
  4698. tools.alertTotalOpr(args, "该项目特征已存在!", totalItems.itemsArr);
  4699. }
  4700. } else {
  4701. sheet
  4702. .getCell(args.row, args.col)
  4703. .value(me.currentEditData ? me.currentEditData : "");
  4704. }
  4705. },
  4706. editData: function (sheet) {
  4707. let me = totalItemsController;
  4708. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  4709. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  4710. },
  4711. createItem: function (sheet, totalItems, field, newData, args) {
  4712. if (field === "content") {
  4713. maxItemsNumber++;
  4714. let code = maxItemsNumber;
  4715. itemsAjax.createItemCharacter(
  4716. userAccount,
  4717. billsLibId,
  4718. newData,
  4719. code,
  4720. function (newItemId) {
  4721. var newItemData, newItem;
  4722. newItemData = {
  4723. id: newItemId,
  4724. content: newData,
  4725. code: code,
  4726. itemValue: [],
  4727. };
  4728. newItem = createObj.newItem(newItemData);
  4729. totalItems.itemsArr.push(newItem);
  4730. totalItems.items[totalItems.prefix + newItemId] = newItem;
  4731. //tools.reSetCell(sheet, args.row, 0, code, newItemId);
  4732. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  4733. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  4734. totalItemsDatas = tools.getsheetDatas(sheet, "total");
  4735. }
  4736. );
  4737. } else {
  4738. if (!isNaN(parseInt(newData))) {
  4739. maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
  4740. itemsAjax.createItemCharacter(
  4741. userAccount,
  4742. billsLibId,
  4743. "",
  4744. newData,
  4745. function (newItemId) {
  4746. var newItemData, newItem;
  4747. newItemData = {
  4748. id: newItemId,
  4749. content: "",
  4750. code: newData,
  4751. itemValue: [],
  4752. };
  4753. newItem = createObj.newItem(newItemData);
  4754. totalItems.itemsArr.push(newItem);
  4755. totalItems.items[totalItems.prefix + newItemId] = newItem;
  4756. //tools.reSetCell(sheet, args.row, 0, null, newItemId);
  4757. tools.reshowData(
  4758. sheet,
  4759. totalItems.itemsArr,
  4760. totalItemsSetting,
  4761. true
  4762. );
  4763. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  4764. totalItemsDatas = tools.getsheetDatas(sheet, "total");
  4765. }
  4766. );
  4767. } else {
  4768. tools.alertTotalOpr(
  4769. args,
  4770. "编号只能为数字,请重新输入!",
  4771. totalItems.itemsArr
  4772. );
  4773. }
  4774. }
  4775. },
  4776. updateItem: function (totalItems, id, field, newData, args) {
  4777. if (field === "code" && isNaN(parseInt(newData))) {
  4778. tools.alertTotalOpr(
  4779. args,
  4780. "编号只能为数字,请重新输入!",
  4781. totalItems.itemsArr
  4782. );
  4783. } else {
  4784. totalItems.itemsArr.forEach(function (item) {
  4785. if (item.data.id === id) {
  4786. item.data[field] = newData;
  4787. }
  4788. });
  4789. tools.reshowData(
  4790. args.sheet,
  4791. totalItems.itemsArr,
  4792. totalItemsSetting,
  4793. true
  4794. );
  4795. itemsAjax.updateItemCharacter(
  4796. userAccount,
  4797. billsLibId,
  4798. id,
  4799. field,
  4800. newData
  4801. );
  4802. }
  4803. },
  4804. };
  4805. var rechargeController = {
  4806. updateRechar: function (selectedNode, newData) {
  4807. if (selectedNode) {
  4808. var updateId = selectedNode.getID();
  4809. selectedNode.data.recharge = newData;
  4810. /*var getupdateIds = function(node){
  4811. updateIds.push(node.getID());
  4812. node.data.recharge = newData;
  4813. if(node.children.length > 0){
  4814. node.children.forEach(function(node){
  4815. getupdateIds(node);
  4816. });
  4817. }
  4818. }
  4819. getupdateIds(tools.getRoot(selectedNode));*/
  4820. billsAjax.updateRecharge(userAccount, billsLibId, updateId, newData);
  4821. } else {
  4822. codeEditor.setValue("");
  4823. //$('exampleTextarea').val('');
  4824. }
  4825. },
  4826. createRecharge: function (node) {
  4827. if (node) {
  4828. var tempId = [];
  4829. tempId.push(node.getID());
  4830. var rootNode = tools.getRoot(node);
  4831. if (rootNode.data.recharge && rootNode !== node) {
  4832. billsAjax.updateRecharge(
  4833. userAccount,
  4834. billsLibId,
  4835. tempId,
  4836. rootNode.data.recharge
  4837. );
  4838. node.data.recharge = rootNode.data.recharge;
  4839. //$('#exampleTextarea').val(node.data.recharge);
  4840. codeEditor.setValue(node.data.recharge);
  4841. } else {
  4842. node.data.recharge = "";
  4843. //$('#exampleTextarea').val('');
  4844. codeEditor.setValue("");
  4845. }
  4846. } else {
  4847. codeEditor.setValue("");
  4848. //$('exampleTextarea').val('');
  4849. }
  4850. },
  4851. };
  4852. function isNumber(num) {
  4853. return !isNaN(num) && num % 1 === 0;
  4854. }