db_controller.js 151 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387
  1. /**
  2. * Created by vian on 2017/4/12.
  3. */
  4. var dbController = {
  5. controller: null,
  6. currentEditData: null,
  7. insert: function (controller, btn) {
  8. tools.btnClose(btn);
  9. btn.attr('doing', 'true');
  10. if (controller.tree.items.length === 0) {
  11. controller.tree.maxNodeID(0);
  12. let newNodeId = uuid.v1();
  13. let sectionInfo = { first: null, second: null, third: null };
  14. billsAjax.createBills(userAccount, billsLibId, newNodeId, -1, -1, null, sectionInfo, function () {
  15. controller.insertByID(newNodeId);
  16. controller.tree.selected.jobs = new Array();
  17. controller.tree.selected.items = new Array();
  18. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
  19. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  20. tools.btnAction(btn);
  21. btn.attr('doing', 'false');
  22. controller.sheet.getParent().focus(true);
  23. });
  24. }
  25. else {
  26. let node = controller.tree.selected;
  27. if (node) {
  28. var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID();
  29. let newNodeId = uuid.v1();
  30. let updatePreData = { ID: updateId, NextSiblingID: newNodeId };
  31. let sectionInfo = tools.getSectionInfo(node);
  32. billsAjax.createBills(userAccount, billsLibId, newNodeId, createpid, createnid, updatePreData, sectionInfo, function () {
  33. controller.insertByID(newNodeId);
  34. controller.tree.selected.jobs = new Array();
  35. controller.tree.selected.items = new Array();
  36. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
  37. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  38. tools.btnAction(btn);
  39. btn.attr('doing', 'false');
  40. controller.sheet.getParent().focus(true);
  41. });
  42. }
  43. else {
  44. let updateNode = controller.tree.roots[controller.tree.roots.length - 1];
  45. let updateId = updateNode.getID();
  46. //let newNodeId = controllers.tree.newNodeID();
  47. let newNodeId = uuid.v1();
  48. let updatePreData = { ID: updateId, NextSiblingID: newNodeId };
  49. let sectionInfo = tools.getSectionInfo(node);
  50. billsAjax.createBills(userAccount, billsLibId, newNodeId, -1, -1, updatePreData, sectionInfo, function () {
  51. controller.insertByID(newNodeId);
  52. controller.tree.selected.jobs = new Array();
  53. controller.tree.selected.items = new Array();
  54. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
  55. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  56. tools.btnAction(btn);
  57. btn.attr('doing', 'false');
  58. controller.sheet.getParent().focus(true);
  59. });
  60. }
  61. }
  62. },
  63. upLevel: function (controller, btn) {
  64. tools.btnClose(btn);
  65. btn.attr('doing', 'true');
  66. var node = controller.tree.selected;
  67. var nextSiblingIds = [];
  68. var updateData = [];
  69. let selNodes = tools.getSameDepthNodes(controller);
  70. let nextSiblings = [];
  71. let toUpSectionNodes = [];
  72. let getNextSibling = function (node) {
  73. if (node.nextSibling) {
  74. nextSiblingIds.push(node.getNextSiblingID());
  75. nextSiblings.push(node.nextSibling);
  76. getNextSibling(node.nextSibling);
  77. }
  78. };
  79. if (selNodes.length > 0) {
  80. let firstParent = selNodes[0].parent;
  81. //选中的第一个节点有父节点,则可升级
  82. if (firstParent) {
  83. //更新父节点
  84. updateData.push({
  85. ID: firstParent.getID(),
  86. NextSiblingID: selNodes[0].getID(),
  87. type: 'parentNode'
  88. });
  89. //更新前节点
  90. if (selNodes[0].preSibling) {
  91. updateData.push({
  92. ID: selNodes[0].preSibling.getID(),
  93. NextSiblingID: -1,
  94. type: 'preSiblingNode'
  95. });
  96. }
  97. //更新选中节点的后兄弟节点
  98. let lastSelNode = selNodes[selNodes.length - 1];
  99. if (lastSelNode.nextSibling) {
  100. let nextSectionInfo = tools.getSectionInfo(firstParent);
  101. let nullNextSectionInfo = tools.sectionInfoNull(nextSectionInfo);
  102. if (nullNextSectionInfo) {
  103. nextSectionInfo[nullNextSectionInfo] = lastSelNode.getID();
  104. }
  105. getNextSibling(lastSelNode);
  106. updateData.push({
  107. ID: nextSiblingIds,
  108. ParentID: lastSelNode.getID(),
  109. //sectionInfo: nextSectionInfo,
  110. type: 'nextSiblingNode'
  111. });
  112. //nextSibling children
  113. }
  114. //更新选中节点
  115. for (let i = 0; i < selNodes.length; i++) {
  116. let selNode = selNodes[i];
  117. let oprSectionInfo = tools.getSectionInfo(firstParent);
  118. updateData.push({
  119. ID: selNode.getID(),
  120. ParentID: firstParent.getParentID(),
  121. NextSiblingID: i === selNodes.length - 1 ? firstParent.getNextSiblingID() : selNode.getNextSiblingID(),
  122. sectionInfo: oprSectionInfo,
  123. type: 'oprNode'
  124. });
  125. //update node children and grandchildren sectionInfo
  126. }
  127. //get updateSectionInfo nodes
  128. toUpSectionNodes = toUpSectionNodes.concat(selNodes);//选中的节点
  129. //选中节点的所有子节点
  130. toUpSectionNodes = toUpSectionNodes.concat(tools.getChildrenNodes(selNodes));
  131. //后兄弟节点
  132. toUpSectionNodes = toUpSectionNodes.concat(nextSiblings);
  133. //所有后兄弟节点的所有子节点
  134. toUpSectionNodes = toUpSectionNodes.concat(tools.getChildrenNodes(nextSiblings));
  135. billsAjax.upLevel(userAccount, billsLibId, updateData, function () {
  136. //tools.btnAction(btn);
  137. //btn.attr('doing', 'false');
  138. for (let upLevelNode of selNodes) {
  139. controller.setTreeSelected(upLevelNode);
  140. controller.upLevel();
  141. }
  142. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  143. controller.sheet.getParent().focus(true);
  144. //updateSectionInfo
  145. if (toUpSectionNodes.length > 0) {
  146. billsAjax.updateSectionInfo(tools.getUpdateSectionData(toUpSectionNodes), function () {
  147. tools.btnAction(btn);
  148. btn.attr('doing', 'false');
  149. });
  150. }
  151. });
  152. }
  153. }
  154. },
  155. downLevel: function (controller, btn) {
  156. tools.btnClose(btn);
  157. btn.attr('doing', 'true');
  158. var updateData = [];
  159. let selNodes = tools.getSameDepthNodes(controller);
  160. let toUpSectionNodes = [];
  161. if (selNodes.length > 0) {
  162. //选中的第一个节点有前节点,则可降级
  163. let firstPreSibling = selNodes[0].preSibling;
  164. if (firstPreSibling) {
  165. //更新前节点
  166. updateData.push({
  167. ID: firstPreSibling.getID(),
  168. NextSiblingID: selNodes[selNodes.length - 1].getNextSiblingID(),
  169. type: 'preSiblingNode'
  170. });
  171. //更新前节点最末子节点
  172. if (firstPreSibling.children.length > 0) {
  173. updateData.push({
  174. ID: firstPreSibling.children[firstPreSibling.children.length - 1].getID(),
  175. NextSiblingID: selNodes[0].getID(),
  176. type: 'preChildren'
  177. })
  178. }
  179. for (let i = 0; i < selNodes.length; i++) {
  180. let selNode = selNodes[i];
  181. //更新选中的节点
  182. updateData.push({
  183. ID: selNode.getID(),
  184. ParentID: firstPreSibling.getID(),
  185. NextSiblingID: i === selNodes.length - 1 ? -1 : selNode.getNextSiblingID(),
  186. type: 'oprNode'
  187. });
  188. }
  189. //get updateSectionInfo nodes
  190. //选中的节点
  191. toUpSectionNodes = toUpSectionNodes.concat(selNodes);
  192. //选中节点的所有子节点
  193. toUpSectionNodes = toUpSectionNodes.concat(tools.getChildrenNodes(selNodes));
  194. billsAjax.downLevel(userAccount, billsLibId, updateData, function () {
  195. //tools.btnAction(btn);
  196. //btn.attr('doing', 'false');
  197. for (let downNode of selNodes) {
  198. controller.setTreeSelected(downNode);
  199. controller.downLevel();
  200. }
  201. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  202. controller.sheet.getParent().focus(true);
  203. //update sectionInfo
  204. if (toUpSectionNodes.length > 0) {
  205. billsAjax.updateSectionInfo(tools.getUpdateSectionData(toUpSectionNodes), function () {
  206. tools.btnAction(btn);
  207. btn.attr('doing', 'false');
  208. });
  209. }
  210. });
  211. }
  212. }
  213. },
  214. delete: function (controller, btn, totalJobs, totalItems) {
  215. tools.btnClose(btn);
  216. btn.attr('doing', 'true');
  217. var node = controller.tree.selected;
  218. if (node) {
  219. var deleteIds = [];
  220. var getDeleteIds = function (node) {
  221. if (node) {
  222. deleteIds.push(node.getID());
  223. var length = node.children.length;
  224. if (length > 0) {
  225. for (var i = 0; i < length; i++) {
  226. getDeleteIds(node.children[i]);
  227. }
  228. }
  229. }
  230. };
  231. getDeleteIds(node);
  232. let updateNode = node.preSibling ? { ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID() } : null;
  233. billsAjax.deleteBills(userAccount, billsLibId, deleteIds, updateNode, function () {
  234. tools.btnAction(btn);
  235. btn.attr('doing', 'false');
  236. controller.delete();
  237. //to solve refresh after deleted
  238. let jobsSheet = jobsSpread.getActiveSheet();
  239. let designsSheet = designsSpread.getActiveSheet();
  240. let itemsSheet = itemsSpread.getActiveSheet();
  241. let nowNode = controller.tree.selected;
  242. if (nowNode) {
  243. let jobs = controller.tree.selected.jobs;
  244. const recharge = controller.tree.selected.data.recharge || '';
  245. codeEditor.setValue(recharge);
  246. //$('#exampleTextarea').val(controller.tree.selected.data.recharge);
  247. setSheet.setMaxRowCount(jobsSheet, jobs);
  248. tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false);
  249. if (jobs.length > 0) {
  250. orgJobData = jobsSheet.getValue(0, 0);
  251. }
  252. let designs = controller.tree.selected.designs;
  253. setSheet.setMaxRowCount(designsSheet, designs);
  254. tools.orderReshowData(designsSheet, designs, designsSetting, 'design', false);
  255. if (designs.length > 0) {
  256. orgDesignData = designsSheet.getValue(0, 0);
  257. }
  258. let items = controller.tree.selected.items;
  259. setSheet.setMaxRowCount(itemsSheet, items);
  260. tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false);
  261. if (items.length > 0) {
  262. orgItemData = itemsSheet.getValue(0, 0);
  263. }
  264. }
  265. else {
  266. tools.clearData(jobsSheet);
  267. tools.clearData(designsSheet);
  268. tools.clearData(itemsSheet);
  269. codeEditor.setValue('');
  270. //$('#exampleTextarea').val("");
  271. }
  272. sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
  273. sheetDesignDatas = tools.getsheetDatas(designsSheet, 'designs');
  274. sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
  275. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  276. controller.sheet.getParent().focus(true);
  277. //to solve refresh after deleted
  278. });
  279. }
  280. },
  281. upMove: function (controller, btn) {
  282. tools.btnClose(btn);
  283. btn.attr('doing', 'true');
  284. var node = controller.tree.selected;
  285. var updateData = [];
  286. if (node) {
  287. if (node.preSibling) {
  288. let updateA = {
  289. ID: node.preSibling.getID(),
  290. NextSiblingID: node.getNextSiblingID()
  291. };
  292. let updateB = {
  293. ID: node.getID(),
  294. NextSiblingID: node.preSibling.getID()
  295. };
  296. updateData.push(updateA);
  297. updateData.push(updateB);
  298. if (node.preSibling.preSibling) {
  299. let updateC = {
  300. ID: node.preSibling.preSibling.getID(),
  301. NextSiblingID: node.getID()
  302. }
  303. updateData.push(updateC);
  304. }
  305. billsAjax.upMove(userAccount, billsLibId, updateData, function () {
  306. tools.btnAction(btn);
  307. btn.attr('doing', 'false');
  308. controller.upMove();
  309. //udpate tag
  310. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, controller.tree.selected.getID());
  311. controller.sheet.setTag(controller.tree.selected.nextSibling.serialNo(), 0, controller.tree.selected.nextSibling.getID());
  312. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  313. controller.sheet.getParent().focus(true);
  314. });
  315. }
  316. }
  317. },
  318. downMove: function (controller, btn) {
  319. tools.btnClose(btn);
  320. btn.attr('doing', 'true');
  321. var node = controller.tree.selected;
  322. var updateData = [];
  323. if (node) {
  324. if (node.nextSibling) {
  325. var updateA = {
  326. ID: node.getNextSiblingID(),
  327. NextSiblingID: node.getID(),
  328. type: 'nextSiblingNode'
  329. };
  330. var updateB = {
  331. ID: node.getID(),
  332. NextSiblingID: node.nextSibling.getNextSiblingID(),
  333. type: 'oprNode'
  334. };
  335. updateData.push(updateA);
  336. updateData.push(updateB);
  337. if (node.preSibling) {
  338. var updateC = {
  339. ID: node.preSibling.getID(),
  340. NextSiblingID: node.getNextSiblingID(),
  341. type: 'preSiblingNode'
  342. };
  343. updateData.push(updateC);
  344. }
  345. billsAjax.downMove(userAccount, billsLibId, updateData);
  346. tools.btnAction(btn);
  347. btn.attr('doing', 'false');
  348. controller.downMove();
  349. //udpate tag
  350. controller.sheet.setTag(controller.tree.selected.serialNo(), 0, controller.tree.selected.getID());
  351. controller.sheet.setTag(controller.tree.selected.preSibling.serialNo(), 0, controller.tree.selected.preSibling.getID());
  352. sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
  353. controller.sheet.getParent().focus(true);
  354. }
  355. }
  356. },
  357. onEditStart: function (sender, args) {
  358. dbController.currentEditData = args.sheet.getValue(args.row, args.col);
  359. },
  360. onEditEnded: function (sender, args) {
  361. let controller = dbController.controller;
  362. var node = controller.tree.items[args.row], updateId, field;
  363. if (node) {
  364. updateId = node.getID();
  365. field = billsLibSetting.cols[args.col].data.field;
  366. if (field === 'engineering') {
  367. if (isNaN(args.editingText) || args.editingText % 1 !== 0) {
  368. args.sheet.setValue(args.row, args.col, dbController.currentEditData ? dbController.currentEditData : '');
  369. alert('工程专业只能输入整数!');
  370. return;
  371. }
  372. }
  373. node.data[field] = args.editingText;
  374. sheetBillsDatas.datasIdx['rowIdx' + args.row][field] = args.editingText;
  375. billsAjax.updateBills(userAccount, billsLibId, updateId, field, args.editingText);
  376. }
  377. else {
  378. args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  379. }
  380. },
  381. onEnterCell: function (sender, args) {
  382. args.sheet.repaint();
  383. },
  384. editData: function (controller) {
  385. controller.sheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onEditStart);
  386. controller.sheet.bind(GC.Spread.Sheets.Events.EditEnded, this.onEditEnded);
  387. controller.sheet.bind(GC.Spread.Sheets.Events.EnterCell, this.onEnterCell);
  388. }
  389. };
  390. var createObj = {
  391. newJob: function (data) {
  392. var Job = function (data) {
  393. this.data = data;
  394. //count = 0则没有被引用了
  395. this.count = 0;
  396. };
  397. return new Job(data);
  398. },
  399. newJobs: function () {
  400. var TotalJobs = function () {
  401. this.jobs = {};
  402. this.jobsArr = [];
  403. this.prefix = '_id';
  404. };
  405. TotalJobs.prototype.findJob = function (id) {
  406. return this.jobs[this.prefix + id] ? this.jobs[this.prefix + id] : null;
  407. }
  408. TotalJobs.prototype.loadJobs = function (nodes, datas) {
  409. var me = this;
  410. datas.forEach(function (jobData) {
  411. var job = createObj.newJob(jobData);
  412. me.jobs[me.prefix + jobData.id] = job;
  413. me.jobsArr.push(job);
  414. });
  415. if (nodes) {
  416. nodes.forEach(function (node) {
  417. node.jobs = new Array();
  418. let spliceArr = [];
  419. node.data.jobs.forEach(function (obj) {
  420. if (me.jobs[me.prefix + obj.id]) {
  421. node.jobs.push({ job: me.jobs[me.prefix + obj.id], serialNo: obj.serialNo });
  422. me.jobs[me.prefix + obj.id].count++;
  423. }
  424. else {
  425. spliceArr.push(obj);
  426. }
  427. });
  428. for (let sItem of spliceArr) {
  429. node.data.jobs.splice(node.data.jobs.indexOf(sItem), 1);
  430. }
  431. });
  432. }
  433. };
  434. TotalJobs.prototype.getUpdateIds = function (nodes, repeatId) {
  435. var ids = [];
  436. nodes.forEach(function (node) {
  437. node.jobs.forEach(function (job) {
  438. if (job.data.id === repeatId) {
  439. ids.push(node.getID());
  440. }
  441. });
  442. });
  443. return ids;
  444. };
  445. return new TotalJobs();
  446. },
  447. newDesign: function (data) {
  448. var Design = function (data) {
  449. this.data = data;
  450. //count = 0则没有被引用了
  451. this.count = 0;
  452. };
  453. return new Design(data);
  454. },
  455. newDesigns: function () {
  456. var TotalDesigns = function () {
  457. this.designs = {};
  458. this.designsArr = [];
  459. this.prefix = '_id';
  460. };
  461. TotalDesigns.prototype.findDesign = function (id) {
  462. return this.designs[this.prefix + id] ? this.designs[this.prefix + id] : null;
  463. }
  464. TotalDesigns.prototype.loadDesigns = function (nodes, datas) {
  465. var me = this;
  466. datas.forEach(function (data) {
  467. var design = createObj.newDesign(data);
  468. me.designs[me.prefix + data.id] = design;
  469. me.designsArr.push(design);
  470. });
  471. if (nodes) {
  472. nodes.forEach(function (node) {
  473. node.designs = new Array();
  474. if (node.data.designs) {
  475. let spliceArr = [];
  476. node.data.designs.forEach(function (obj) {
  477. if (me.designs[me.prefix + obj.id]) {
  478. node.designs.push({ design: me.designs[me.prefix + obj.id], serialNo: obj.serialNo });
  479. me.designs[me.prefix + obj.id].count++;
  480. }
  481. else {
  482. spliceArr.push(obj);
  483. }
  484. });
  485. for (let sItem of spliceArr) {
  486. node.data.designs.splice(node.data.designs.indexOf(sItem), 1);
  487. }
  488. }
  489. });
  490. }
  491. };
  492. TotalDesigns.prototype.getUpdateIds = function (nodes, repeatId) {
  493. var ids = [];
  494. nodes.forEach(function (node) {
  495. node.designs.forEach(function (design) {
  496. if (design.data.id === repeatId) {
  497. ids.push(node.getID());
  498. }
  499. });
  500. });
  501. return ids;
  502. };
  503. return new TotalDesigns();
  504. },
  505. newItem: function (data) {
  506. var Item = function (data) {
  507. this.data = data;
  508. this.count = 0;
  509. };
  510. return new Item(data);
  511. },
  512. newItems: function () {
  513. var TotalItems = function () {
  514. this.items = {};
  515. this.itemsArr = [];
  516. this.prefix = '_id';
  517. };
  518. TotalItems.prototype.findItem = function (id) {
  519. return this.items[this.prefix + id] ? this.items[this.prefix + id] : null;
  520. };
  521. TotalItems.prototype.loadItems = function (nodes, datas) {
  522. var me = this;
  523. datas.forEach(function (itemData) {
  524. var item = createObj.newItem(itemData);
  525. me.items[me.prefix + itemData.id] = item;
  526. me.itemsArr.push(item);
  527. });
  528. if (nodes) {
  529. nodes.forEach(function (node) {
  530. node.items = new Array();
  531. let spliceArr = [];
  532. node.data.items.forEach(function (obj) {
  533. if (me.items[me.prefix + obj.id]) {
  534. node.items.push({ item: me.items[me.prefix + obj.id], serialNo: obj.serialNo });
  535. me.items[me.prefix + obj.id].count++;
  536. }
  537. else {
  538. spliceArr.push(obj);
  539. }
  540. });
  541. for (let sItem of spliceArr) {
  542. node.data.items.splice(node.data.items.indexOf(sItem), 1);
  543. }
  544. });
  545. }
  546. };
  547. TotalItems.prototype.getUpdateIds = function (nodes, repeatId) {
  548. var ids = [];
  549. nodes.forEach(function (node) {
  550. node.items.forEach(function (item) {
  551. if (item.data.id === repeatId) {
  552. ids.push(node.getID());
  553. }
  554. });
  555. });
  556. return ids;
  557. };
  558. return new TotalItems();
  559. }
  560. };
  561. var tools = {
  562. alertOpr: function (args, sheet, txt, arr, field) {
  563. $('#alertTxt').text(txt);
  564. $('#alertBtn').click();
  565. sheet.options.isProtected = true;
  566. let dataCode = args.col === 0 ? 'code' : 'content';
  567. let orgCode = args.row < arr.length ? arr[args.row][field].data[dataCode] : '';
  568. $('#alertCof').unbind('click');
  569. $('#alertCls').unbind('click');
  570. $('#alertCls').click(function () {
  571. sheet.options.isProtected = false;
  572. sheet.getCell(args.row, args.col).value(orgCode);
  573. });
  574. $('#alertCof').click(function () {
  575. sheet.options.isProtected = false;
  576. sheet.getCell(args.row, args.col).value(orgCode);
  577. });
  578. },
  579. alertTotalOpr: function (args, txt, arr) {
  580. $('#alertTxt').text(txt);
  581. $('#alertBtn').click();
  582. args.sheet.options.isProtected = true;
  583. let dataCode = args.col === 0 ? 'code' : 'content';
  584. let orgCode = args.row < arr.length ? arr[args.row].data[dataCode] : '';
  585. $('#alertCof').unbind('click');
  586. $('#alertCls').unbind('click');
  587. $('#alertCls').click(function () {
  588. args.sheet.options.isProtected = false;
  589. args.sheet.getCell(args.row, args.col).value(orgCode);
  590. });
  591. $('#alertCof').click(function () {
  592. args.sheet.options.isProtected = false;
  593. args.sheet.getCell(args.row, args.col).value(orgCode);
  594. });
  595. },
  596. //ref sheet up&down Move
  597. canUpMove: function (selected, arr) {
  598. return selected && arr.indexOf(selected) > 0 && arr.indexOf(selected) !== -1 ? true : false;
  599. },
  600. canDownMove: function (selected, arr) {
  601. return selected && arr.indexOf(selected) < arr.length - 1 && arr.indexOf(selected) !== -1 ? true : false;
  602. },
  603. btnClose: function (btn) {
  604. btn.css("opacity", "0.2");
  605. btn.addClass("disabled");
  606. //btn.attr(attr, 'true');
  607. },
  608. btnAction: function (btn) {
  609. btn.css("opacity", "");
  610. btn.removeClass("disabled");
  611. //btn.attr(attr, 'false');
  612. },
  613. /*isExist: function (totalArr, field, newData, orgData){
  614. var isExist = false;
  615. if(totalArr.length > 0){
  616. totalArr.forEach(function(item){
  617. if(item.data[field] == newData && newData !== orgData){
  618. isExist = true;
  619. }
  620. });
  621. }
  622. return isExist;
  623. },*/
  624. isExist: function (totalArr, field, newData) {
  625. var isExist = false;
  626. if (totalArr.length > 0) {
  627. totalArr.forEach(function (item) {
  628. if (item.data[field] == newData) {
  629. isExist = true;
  630. }
  631. });
  632. }
  633. return isExist;
  634. },
  635. isDesignExist: function (totalArr, field, newData, sheet, row) {
  636. if (field === 'code') {
  637. return !!totalArr.find(item => item.data.code == newData);
  638. }
  639. const name = field === 'name' ? newData : sheet.getValue(row, 1);
  640. const unit = field === 'unit' ? newData : sheet.getValue(row, 2);
  641. return !!totalArr.find(item => item.data.name == name && item.data.unit == unit);
  642. },
  643. isRepeat: function (arr, field, newData, ref, classify) {
  644. var isRepeat = false;
  645. if (classify) {
  646. if (arr) {
  647. arr.forEach(function (item) {
  648. if (ref === 'reference' && item[classify].data[field] == newData) {
  649. isRepeat = true;
  650. }
  651. else if (ref === 'document' && item[field] == newData) {
  652. isRepeat = true;
  653. }
  654. });
  655. }
  656. }
  657. else {
  658. if (arr) {
  659. arr.forEach(function (item) {
  660. if (ref === 'reference' && item.data[field] == newData) {
  661. isRepeat = true;
  662. }
  663. else if (ref === 'document' && item[field] == newData) {
  664. isRepeat = true;
  665. }
  666. });
  667. }
  668. }
  669. return isRepeat;
  670. },
  671. isDesignRepeat: function (arr, field, newData, ref, classify, sheet, row) {
  672. const name = field === 'name' ? newData : sheet.getValue(row, 1);
  673. const unit = field === 'unit' ? newData : sheet.getValue(row, 2);
  674. var isRepeat = false;
  675. if (classify) {
  676. if (arr) {
  677. arr.forEach(function (item, index) {
  678. if (ref === 'reference' && index !== row && ((item[classify].data.name == name && item[classify].data.unit == unit) || (field === 'code' && item[classify].data.code == newData))) {
  679. isRepeat = true;
  680. }
  681. else if (ref === 'document' && index !== row && ((item.name == name && item.unit == unit) || (field === 'code' && item.code == newData))) {
  682. isRepeat = true;
  683. }
  684. });
  685. }
  686. }
  687. else {
  688. if (arr) {
  689. arr.forEach(function (item, index) {
  690. if (ref === 'reference' && index !== row && ((item.data.name == name && item.data.unit == unit) || (field === 'code' && item.data.code == newData))) {
  691. isRepeat = true;
  692. }
  693. else if (ref === 'document' && index !== row && ((item.name == name && item.unit == unit) || (field === 'code' && item.code == newData))) {
  694. isRepeat = true;
  695. }
  696. });
  697. }
  698. }
  699. return isRepeat;
  700. },
  701. getContentByCode: function (items, code) {
  702. for (let item of items) {
  703. if (item.data.code == code) {
  704. return item.data.content;
  705. }
  706. }
  707. return null;
  708. },
  709. addAttr: function (attr) {
  710. if (!attr) {
  711. attr = new Array();
  712. }
  713. },
  714. isEmptyObj: function (obj) {
  715. let t;
  716. for (t in obj)
  717. return !1;
  718. return !0;
  719. },
  720. reSetCell: function (sheet, rowIdx, colIdx, value, id) {
  721. if (value && colIdx !== null) {
  722. sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value);
  723. }
  724. sheet.setTag(rowIdx, 0, id);
  725. sheet.setTag(rowIdx, 1, id);
  726. },
  727. getIndex: function (arr, id, classify) {
  728. var index;
  729. arr.forEach(function (item) {
  730. if (item[classify].data.id === id) {
  731. index = arr.indexOf(item);
  732. }
  733. });
  734. return index;
  735. },
  736. getObj: function (arr, id, classify) {
  737. for (let i = 0; i < arr.length; i++) {
  738. if (arr[i][classify].data.id === id) {
  739. return arr[i];
  740. }
  741. }
  742. return null;
  743. },
  744. getNewCode: function (totalObj, classify) {
  745. let arr;
  746. if (classify === 'jobs') {
  747. arr = totalObj.jobsArr;
  748. }
  749. else {
  750. arr = totalObj.itemsArr;
  751. }
  752. tools.resort(arr, 'code', false);
  753. return arr.length > 0 ? arr[arr.length - 1].data.code : 0;
  754. },
  755. getValidDatas: function (sheet, setting, args) {
  756. let validDatas = [];
  757. let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
  758. let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount - 1;
  759. for (let i = orgRow; i <= maxRow; i++) {
  760. let validData = {};
  761. for (let j = orgCol; j <= maxCol; j++) {
  762. let value = sheet.getValue(i, j);
  763. if (value) {
  764. if (setting.cols[j].data.field === 'engineering') {
  765. if (!isNaN(value) && value % 1 === 0) {
  766. validData[setting.cols[j].data.field] = value;
  767. }
  768. } else if (setting.cols[j].data.field === 'fixedFlag') {
  769. let findData = BillsFixedFlagList.find((x) => x.name === value);
  770. if (findData) {
  771. validData[setting.cols[j].data.field] = findData.value;
  772. }
  773. } else if (setting.cols[j].data.field === 'kind') {
  774. const kindItem = billKindComboList.find(item => item.name === value);
  775. if (kindItem) {
  776. validData[setting.cols[j].data.field] = kindItem.value;
  777. }
  778. } else {
  779. validData[setting.cols[j].data.field] = value;
  780. }
  781. }
  782. }
  783. if (!tools.isEmptyObj(validData)) {
  784. validDatas.push(validData);
  785. }
  786. }
  787. return validDatas;
  788. },
  789. getValidRow: function (sheet, rowIdx) {
  790. const colCount = 5;
  791. let isValid = false;
  792. for (let i = 0; i < colCount; i++) {
  793. if (sheet.getValue(rowIdx, i, GC.Spread.Sheets.SheetArea.viewport)) {
  794. isValid = true;
  795. }
  796. }
  797. return isValid;
  798. },
  799. getDelDatas: function (controller, totalJobs, totalItems) {
  800. let delJobs = controller.tree.selected.jobs,
  801. delItems = controller.tree.selected.items,
  802. delJobsIds = [], delItemsIds = [];
  803. if (delJobs.length > 0) {
  804. delJobs.forEach()
  805. }
  806. },
  807. delteSheets: function (controller, totalJobs, totalItems, jobsSheet, itemsSheet) {
  808. var delJobs = controller.tree.selected.jobs;
  809. var delItems = controller.tree.selected.items;
  810. var delJobsIds = [];
  811. var delItemsIds = [];
  812. if (delJobs.length > 0) {
  813. delJobs.forEach(function (obj) {
  814. obj.job.count--;
  815. if (obj.job.count <= 0) {
  816. totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1);
  817. delJobsIds.push(obj.job.data.id)
  818. }
  819. });
  820. jobsAjax.deleteJobContent(userAccount, billsLibId, delJobsIds);
  821. tools.clearData(jobsSheet);
  822. tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
  823. }
  824. if (delItems.length > 0) {
  825. delItems.forEach(function (obj) {
  826. obj.item.count--;
  827. if (obj.item.count <= 0) {
  828. totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1);
  829. delItemsIds.push(obj.item.data.id)
  830. }
  831. });
  832. itemsAjax.deleteItemCharacter(userAccount, billsLibId, delItemsIds);
  833. tools.clearData(itemsSheet);
  834. tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true);
  835. }
  836. controller.delete();
  837. },
  838. deleteELes: function (arr, delIds, classifyStr) {
  839. var ids = [];
  840. delIds.forEach(function (delId) {
  841. arr.forEach(function (ele) {
  842. if (ele[classifyStr].data.id === delId) {
  843. arr.splice(arr.indexOf(ele), 1);
  844. ele.count--;
  845. /*if(ele.count <= 0){
  846. ids.push(ele.data.id);
  847. }*/
  848. }
  849. });
  850. });
  851. /* if(callback){
  852. callback(ids);
  853. }*/
  854. },
  855. getSerialNo: function (arr) {
  856. if (arr.length > 0) {
  857. tools.resortSerialNo(arr);
  858. return arr[arr.length - 1].serialNo + 1;
  859. }
  860. return 1;
  861. },
  862. resortSerialNo: function (arr) {
  863. function compare() {
  864. return function (a, b) {
  865. let valA = a.serialNo,
  866. valB = b.serialNo;
  867. return valA - valB;
  868. }
  869. }
  870. arr.sort(compare());
  871. },
  872. resort: function (arr, attr, isValue) {
  873. function compare(attr) {
  874. return function (a, b) {
  875. var valA, valB;
  876. if (isValue) {
  877. valA = a[attr];
  878. valB = a[attr];
  879. }
  880. else {
  881. valA = a.data[attr];
  882. valB = b.data[attr];
  883. }
  884. return valA - valB;
  885. }
  886. }
  887. arr.sort(compare(attr));
  888. },
  889. //update--
  890. orderReshowData: function (sheet, arr, setting, classify, isResort) {
  891. const colCount = setting.cols.length;
  892. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.viewport);
  893. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.colHeader);
  894. tools.clearData(sheet);
  895. if (arr.length > 0) {
  896. sheet.suspendPaint();
  897. setSheet.setMaxRowCount(sheet, arr);
  898. if (isResort) {
  899. tools.resortSerialNo(arr);
  900. }
  901. let length = arr.length;
  902. for (let i = 0; i < length; i++) {
  903. setting.cols.forEach(function (col, colIdx) {
  904. sheet.setTag(i, colIdx, arr[i][classify].data.id);
  905. if (arr[i][classify].data[col.data.field]) {
  906. sheet.getCell(i, colIdx).value(arr[i][classify].data[col.data.field]);
  907. }
  908. else {
  909. sheet.getCell(i, colIdx).value('');
  910. }
  911. });
  912. }
  913. sheet.resumePaint();
  914. }
  915. },
  916. reshowData: function (sheet, arr, setting, isResort) {
  917. sheet.suspendPaint();
  918. const colCount = setting.cols.length;
  919. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.viewport);
  920. sheet.setColumnCount(colCount, GC.Spread.Sheets.SheetArea.colHeader);
  921. tools.clearData(sheet);
  922. if (isResort) {
  923. tools.resort(arr, 'code', false);
  924. }
  925. if (arr.length > 0) {
  926. var length = arr.length;
  927. for (var i = 0; i < length; i++) {
  928. setting.cols.forEach(function (col, colIdx) {
  929. sheet.setTag(i, colIdx, arr[i].data.id);
  930. if (arr[i].data[col.data.field]) {
  931. sheet.getCell(i, colIdx).value(arr[i].data[col.data.field]);
  932. }
  933. else {
  934. sheet.getCell(i, colIdx).value('');
  935. }
  936. });
  937. }
  938. }
  939. sheet.resumePaint();
  940. },
  941. reshowValue: function (sheet, arr, setting, isResort) {
  942. sheet.suspendPaint();
  943. tools.clearData(sheet);
  944. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
  945. sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
  946. if (isResort) {
  947. //tools.resort(arr, 'code', true);
  948. function myCompareCode(a, b) {
  949. let valA = a.code,
  950. valB = b.code;
  951. return valA - valB;
  952. }
  953. arr.sort(myCompareCode);
  954. }
  955. if (arr.length > 0) {
  956. var length = arr.length;
  957. for (var i = 0; i < length; i++) {
  958. setting.cols.forEach(function (col, colIdx) {
  959. sheet.setTag(i, colIdx, arr[i].code);
  960. if (arr[i][col.data.field]) {
  961. sheet.getCell(i, colIdx).value(arr[i][col.data.field]);
  962. }
  963. else {
  964. sheet.getCell(i, colIdx).value('');
  965. }
  966. });
  967. }
  968. }
  969. sheet.resumePaint();
  970. },
  971. clearData: function (sheet) {
  972. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
  973. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.tag);
  974. },
  975. getRoot: function (node) {
  976. return node.parent ? tools.getRoot(node.parent) : node;
  977. },
  978. getBillsIds: function (callback) {
  979. billsAjax.getBills(billsLibId, function (datas) {
  980. var ids = [];
  981. datas.forEach(function (data) {
  982. ids.push(data.ID);
  983. });
  984. if (callback) {
  985. callback(ids);
  986. }
  987. });
  988. },
  989. delIds: function (sheet) {
  990. var ids = [];
  991. var sels = sheet.getSelections();
  992. sels.forEach(function (sel) {
  993. var orgRow = sel.row, rowCount = sel.rowCount, colCount = sel.colCount;
  994. var orgCol = sel.col === -1 ? 0 : sel.col;
  995. var maxRow = orgRow + rowCount - 1;
  996. for (var i = orgRow; i <= maxRow; i++) {
  997. if (sheet.getTag(i, orgCol)) {
  998. ids.push(sheet.getTag(i, orgCol));
  999. }
  1000. }
  1001. });
  1002. return ids;
  1003. },
  1004. redirect: function (billsLibId, newHref) {
  1005. mainAjax.getABillsLib(billsLibId, function (result) {
  1006. if (result.length === 0) {
  1007. window.location.href = newHref;
  1008. }
  1009. });
  1010. },
  1011. uniqArr: function (arr) {
  1012. let newArr = [];
  1013. for (let i = 0; i < arr.length; i++) {
  1014. if (newArr.indexOf(arr[i]) === -1) {
  1015. newArr.push(arr[i]);
  1016. }
  1017. }
  1018. return newArr;
  1019. },
  1020. uniqObjArr: function (arr) {
  1021. let uniqArr = [];
  1022. for (let i = 0; i < arr.length; i++) {
  1023. let uniqLen = uniqArr.length;
  1024. let flag = false;
  1025. if (uniqLen > 0) {
  1026. for (let j = 0; j < uniqLen; j++) {
  1027. if (arr[i].field === uniqArr[j].field && arr[i].data === uniqArr[j].data) {
  1028. flag = true;
  1029. //uniqArr.push(arr[i]);
  1030. }
  1031. }
  1032. if (!flag) {
  1033. uniqArr.push(arr[i]);
  1034. }
  1035. }
  1036. else {
  1037. uniqArr.push(arr[i])
  1038. }
  1039. }
  1040. return uniqArr;
  1041. },
  1042. resetRowIdx: function (arr, beginRow) {
  1043. let rowIdx = beginRow;
  1044. for (let i = 0; i < arr.length; i++) {
  1045. if (arr[i].rowIdx !== rowIdx) {
  1046. rowIdx++;
  1047. arr[i].rowIdx = rowIdx;
  1048. }
  1049. }
  1050. },
  1051. getsheetDatas: function (sheet, classify, controller) {
  1052. let rowCount = sheet.getRowCount();
  1053. let colCount = sheet.getColumnCount();
  1054. const colIdx = 1;
  1055. let sheetDatas;
  1056. if (classify === 'total') {
  1057. sheetDatas = [];
  1058. for (let i = 0; i < rowCount; i++) {
  1059. for (let j = 0; j <= colCount - 1; j++) {
  1060. let data = sheet.getCell(i, j).value, id = sheet.getTag(i, j);
  1061. if (data && id) {
  1062. let unitData = {
  1063. rowIdx: i,
  1064. colIdx: j,
  1065. data: data,
  1066. id: id
  1067. };
  1068. sheetDatas.push(unitData);
  1069. }
  1070. }
  1071. }
  1072. }
  1073. else if (classify === 'bills') {
  1074. sheetDatas = { datasIdx: {}, datas: [] };
  1075. for (let i = 0; i < controller.tree.items.length; i++) {
  1076. let kind = sheet.getValue(i, 0), code = sheet.getValue(i, 1), name = sheet.getValue(i, 2),
  1077. unit = sheet.getValue(i, 3), ruleText = sheet.getValue(i, 4),
  1078. engineerContent = sheet.getValue(i, 5),
  1079. engineering = sheet.getValue(i, 6),
  1080. fixedFlag = sheet.getValue(i, 7);
  1081. let data = { kind: kind, code: code, name: name, unit: unit, ruleText: ruleText, engineerContent, engineering: engineering, fixedFlag: fixedFlag, rowIdx: i };
  1082. sheetDatas.datas.push(data);
  1083. sheetDatas.datasIdx['rowIdx' + i] = data;
  1084. }
  1085. }
  1086. else if (classify === 'designs') {
  1087. sheetDatas = [];
  1088. for (let i = 0; i < rowCount; i++) {
  1089. let name = sheet.getCell(i, 1).value(),
  1090. unit = sheet.getCell(i, 2).value(),
  1091. id = sheet.getTag(i, colIdx);
  1092. if (id) {
  1093. let rowData = {
  1094. rowIdx: i,
  1095. name,
  1096. unit,
  1097. id: id
  1098. }
  1099. sheetDatas.push(rowData);
  1100. }
  1101. }
  1102. }
  1103. else {
  1104. sheetDatas = [];
  1105. for (let i = 0; i < rowCount; i++) {
  1106. let data = sheet.getCell(i, colIdx).value(), id = sheet.getTag(i, colIdx);
  1107. if (data && id) {
  1108. let rowData = {
  1109. rowIdx: i,
  1110. data: data,
  1111. id: id
  1112. }
  1113. sheetDatas.push(rowData);
  1114. }
  1115. }
  1116. }
  1117. return sheetDatas;
  1118. },
  1119. encapData: function (uncrossedDatas, crossedDatas, controller, totalJobs) {
  1120. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1121. let updateDatas = [];
  1122. let createDatas = [];
  1123. let nodeId = controller.tree.selected.getID();
  1124. uncrossedDatas.forEach(obj => {
  1125. let cnDataObj, ceDataObj, content, jobId;
  1126. let isExisit = tools.isExist(totalJobs.jobsArr, 'content', obj.data, null);
  1127. let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', obj.data, 'reference', 'job');
  1128. if (isExisit && !isRepeat) {
  1129. totalJobs.jobsArr.forEach(job => {
  1130. if (obj.data == job.data.content) {
  1131. jobId = job.data.id;
  1132. }
  1133. });
  1134. ceDataObj = {
  1135. newData: obj.data,
  1136. billsLibId: billsLibId,
  1137. nodeId: nodeId,
  1138. jobId: jobId,
  1139. serialNo: obj.serialNo,
  1140. type: CreateExist
  1141. };
  1142. createDatas.push(ceDataObj);
  1143. }
  1144. if (!isExisit) {
  1145. maxJobsNumber++;
  1146. //currentCountId++;
  1147. cnDataObj = {
  1148. //id: maxJobsNumber,
  1149. billsLibId: billsLibId,
  1150. nodeId: nodeId,
  1151. newData: obj.data,
  1152. code: maxJobsNumber,
  1153. serialNo: obj.serialNo,
  1154. type: CreateNew
  1155. };
  1156. createDatas.push(cnDataObj);
  1157. }
  1158. });
  1159. crossedDatas.forEach(cData => {
  1160. let ueObj, unObj, newJobId;
  1161. let isExisit = tools.isExist(totalJobs.jobsArr, 'content', cData.newData, null);
  1162. let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', cData.newData, 'reference', 'job');
  1163. if (isExisit && !isRepeat) {
  1164. totalJobs.jobsArr.forEach(job => {
  1165. if (cData.newData == job.data.content) {
  1166. newJobId = job.data.id;
  1167. }
  1168. });
  1169. ueObj = {
  1170. newData: cData.newData,
  1171. billsLibId: billsLibId,
  1172. nodeId: nodeId,
  1173. newJobId: newJobId,
  1174. orgJobId: cData.orgId,
  1175. serialNo: cData.serialNo,
  1176. type: UpdateExist
  1177. };
  1178. updateDatas.push(ueObj);
  1179. }
  1180. if (!isExisit && !isRepeat) {
  1181. maxJobsNumber++;
  1182. //currentCountId++;
  1183. unObj = {
  1184. //newJobId: maxJobsNumber,
  1185. billsLibId: billsLibId,
  1186. nodeId: nodeId,
  1187. newData: cData.newData,
  1188. orgJobId: cData.orgId,
  1189. code: maxJobsNumber,
  1190. serialNo: cData.serialNo,
  1191. type: UpdateNew
  1192. };
  1193. updateDatas.push(unObj);
  1194. }
  1195. });
  1196. let pasteDatas = {
  1197. updateDatas: updateDatas,
  1198. createDatas: createDatas
  1199. };
  1200. return pasteDatas;
  1201. },
  1202. getDesignByNameUnit: function (arr, name, unit, fromSelected) {
  1203. if (fromSelected) {
  1204. return arr.find(item => item.design.data.name == name && item.design.data.unit == unit);
  1205. } else {
  1206. return arr.find(item => item.data.name == name && item.data.unit == unit);
  1207. }
  1208. },
  1209. encapDesignsData: function (uncrossedDatas, crossedDatas, controller, totalDesigns) {
  1210. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1211. let updateDatas = [];
  1212. let createDatas = [];
  1213. let nodeId = controller.tree.selected.getID();
  1214. debugger;
  1215. uncrossedDatas.forEach(obj => {
  1216. let cnDataObj, ceDataObj, designId;
  1217. const matchedTotalDesign = tools.getDesignByNameUnit(totalDesigns.designsArr, obj.name, obj.unit, false);
  1218. const matchedDesign = tools.getDesignByNameUnit(controller.tree.selected.designs, obj.name, obj.unit, true);
  1219. if (matchedTotalDesign && !matchedDesign) {
  1220. designId = matchedTotalDesign.data.id;
  1221. ceDataObj = {
  1222. name: obj.name,
  1223. unit: obj.unit,
  1224. billsLibId: billsLibId,
  1225. nodeId: nodeId,
  1226. designId: designId,
  1227. serialNo: obj.serialNo,
  1228. type: CreateExist
  1229. };
  1230. createDatas.push(ceDataObj);
  1231. }
  1232. if (!matchedTotalDesign) {
  1233. maxDesignsNumber++;
  1234. cnDataObj = {
  1235. //id: maxJobsNumber,
  1236. billsLibId: billsLibId,
  1237. nodeId: nodeId,
  1238. name: obj.name,
  1239. unit: obj.unit,
  1240. code: maxDesignsNumber,
  1241. serialNo: obj.serialNo,
  1242. type: CreateNew
  1243. };
  1244. createDatas.push(cnDataObj);
  1245. }
  1246. });
  1247. crossedDatas.forEach(cData => {
  1248. let ueObj, unObj, newDesignId;
  1249. const matchedTotalDesign = tools.getDesignByNameUnit(totalDesigns.designsArr, cData.name, cData.unit, false);
  1250. const matchedDesign = tools.getDesignByNameUnit(controller.tree.selected.designs, cData.name, cData.unit, true);
  1251. if (matchedTotalDesign && !matchedDesign) {
  1252. newDesignId = matchedTotalDesign.data.id;
  1253. ueObj = {
  1254. name: cData.name,
  1255. unit: cData.unit,
  1256. billsLibId: billsLibId,
  1257. nodeId: nodeId,
  1258. newDesignId: newDesignId,
  1259. orgDesignId: cData.orgId,
  1260. serialNo: cData.serialNo,
  1261. type: UpdateExist
  1262. };
  1263. updateDatas.push(ueObj);
  1264. }
  1265. if (!matchedTotalDesign && !matchedDesign) {
  1266. maxDesignsNumber++;
  1267. unObj = {
  1268. billsLibId: billsLibId,
  1269. nodeId: nodeId,
  1270. name: cData.name,
  1271. unit: cData.unit,
  1272. orgDesignId: cData.orgId,
  1273. code: maxDesignsNumber,
  1274. serialNo: cData.serialNo,
  1275. type: UpdateNew
  1276. };
  1277. updateDatas.push(unObj);
  1278. }
  1279. });
  1280. let pasteDatas = {
  1281. updateDatas: updateDatas,
  1282. createDatas: createDatas
  1283. };
  1284. return pasteDatas;
  1285. },
  1286. encapItemsData: function (uncrossedDatas, crossedDatas, controller, totalItems) {
  1287. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1288. let updateDatas = [];
  1289. let createDatas = [];
  1290. let nodeId = controller.tree.selected.getID();
  1291. uncrossedDatas.forEach(obj => {
  1292. let cnDataObj, ceDataObj, content, itemId;
  1293. let isExisit = tools.isExist(totalItems.itemsArr, 'content', obj.data, null);
  1294. let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', obj.data, 'reference', 'item');
  1295. if (isExisit && !isRepeat) {
  1296. totalItems.itemsArr.forEach(item => {
  1297. if (obj.data == item.data.content) {
  1298. itemId = item.data.id;
  1299. }
  1300. });
  1301. ceDataObj = {
  1302. newData: obj.data,
  1303. billsLibId: billsLibId,
  1304. nodeId: nodeId,
  1305. itemId: itemId,
  1306. serialNo: obj.serialNo,
  1307. type: CreateExist
  1308. };
  1309. createDatas.push(ceDataObj);
  1310. }
  1311. if (!isExisit) {
  1312. maxItemsNumber++;
  1313. //currentCountId++;
  1314. cnDataObj = {
  1315. // id: maxItemsNumber,
  1316. billsLibId: billsLibId,
  1317. nodeId: nodeId,
  1318. newData: obj.data,
  1319. serialNo: obj.serialNo,
  1320. code: maxItemsNumber,
  1321. type: CreateNew
  1322. };
  1323. createDatas.push(cnDataObj);
  1324. }
  1325. });
  1326. crossedDatas.forEach(cData => {
  1327. let ueObj, unObj, newItemId;
  1328. let isExisit = tools.isExist(totalItems.itemsArr, 'content', cData.newData, null);
  1329. let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', cData.newData, 'reference', 'item');
  1330. if (isExisit && !isRepeat) {
  1331. totalItems.itemsArr.forEach(item => {
  1332. if (cData.newData == item.data.content) {
  1333. newItemId = item.data.id;
  1334. }
  1335. });
  1336. ueObj = {
  1337. newData: cData.newData,
  1338. billsLibId: billsLibId,
  1339. nodeId: nodeId,
  1340. newItemId: newItemId,
  1341. orgItemId: cData.orgId,
  1342. serialNo: cData.serialNo,
  1343. type: UpdateExist
  1344. };
  1345. updateDatas.push(ueObj);
  1346. }
  1347. if (!isExisit && !isRepeat) {
  1348. maxItemsNumber++;
  1349. //currentCountId++;
  1350. unObj = {
  1351. // newItemId: maxItemsNumber,
  1352. billsLibId: billsLibId,
  1353. nodeId: nodeId,
  1354. newData: cData.newData,
  1355. orgItemId: cData.orgId,
  1356. code: maxItemsNumber,
  1357. serialNo: cData.serialNo,
  1358. type: UpdateNew
  1359. };
  1360. updateDatas.push(unObj);
  1361. }
  1362. });
  1363. let pasteDatas = {
  1364. updateDatas: updateDatas,
  1365. createDatas: createDatas
  1366. };
  1367. return pasteDatas;
  1368. },
  1369. encapTotalJobsDatas: function (sheet, totalJobs, uncrossedDatas, crossedDatas) {
  1370. let pasteDatas;
  1371. let rebuildArr = [];
  1372. if (crossedDatas.length > 0) {
  1373. for (let i = 0; i < crossedDatas.length; i++) {
  1374. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1375. let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, data, 'reference');
  1376. if (isRepeat) {
  1377. crossedDatas.splice(i--, 1);
  1378. }
  1379. }
  1380. for (let i = 0; i < crossedDatas.length; i++) {
  1381. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1382. if (crossedDatas[i].field === 'code' && typeof data !== 'number') {
  1383. crossedDatas.splice(i--, 1);
  1384. }
  1385. }
  1386. }
  1387. if (uncrossedDatas.length > 0) {
  1388. for (let i = 0; i < uncrossedDatas.length; i++) {
  1389. let field = uncrossedDatas[i].field;
  1390. let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, uncrossedDatas[i].data, 'reference');
  1391. if (isRepeat) {
  1392. uncrossedDatas.splice(i--, 1);
  1393. }
  1394. }
  1395. for (let i = 0; i < uncrossedDatas.length; i++) {
  1396. let field = uncrossedDatas[i].field;
  1397. if (uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number') {
  1398. uncrossedDatas.splice(i--, 1);
  1399. }
  1400. }
  1401. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1402. function myCompare(a, b) {
  1403. if (a.rowIdx > b.rowIdx)
  1404. return 1;
  1405. if (a.rowIdx < b.rowIdx)
  1406. return -1;
  1407. return 0;
  1408. }
  1409. function myCompareCode(a, b) {
  1410. if (a.code > b.code)
  1411. return -1;
  1412. if (a.code < b.code)
  1413. return 1;
  1414. return 0;
  1415. }
  1416. if (rebuildArr.length > 0) {
  1417. rebuildArr.sort(myCompareCode);
  1418. if (rebuildArr[0].code) {
  1419. maxJobsNumber = maxJobsNumber + 1 > rebuildArr[0].code ? maxJobsNumber : rebuildArr[0].code;
  1420. }
  1421. rebuildArr.forEach(function (data) {
  1422. if (!data.code) {
  1423. maxJobsNumber++;
  1424. let code = maxJobsNumber;
  1425. data.code = code;
  1426. }
  1427. /* if (data.type !== 'CreateT' && data.field === 'content') {
  1428. maxJobsNumber++;
  1429. let code = maxJobsNumber;
  1430. data.code = code;
  1431. } */
  1432. });
  1433. }
  1434. //rebuildArr.sort(myCompare);
  1435. }
  1436. //rebuildArr.sort(myCompare);
  1437. pasteDatas = {
  1438. updateDatas: crossedDatas,
  1439. createDatas: rebuildArr
  1440. }
  1441. return pasteDatas;
  1442. },
  1443. encapTotalDesignsDatas: function (sheet, totalDesigns, uncrossedDatas, crossedDatas) {
  1444. let pasteDatas;
  1445. let rebuildArr = [];
  1446. if (crossedDatas.length > 0) {
  1447. for (let i = 0; i < crossedDatas.length; i++) {
  1448. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1449. let isRepeat = tools.isDesignRepeat(totalDesigns.designsArr, field, data, 'reference', null, sheet, crossedDatas[i].rowIdx);
  1450. if (isRepeat) {
  1451. crossedDatas.splice(i--, 1);
  1452. }
  1453. }
  1454. for (let i = 0; i < crossedDatas.length; i++) {
  1455. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1456. if (crossedDatas[i].field === 'code' && typeof data !== 'number') {
  1457. crossedDatas.splice(i--, 1);
  1458. }
  1459. }
  1460. }
  1461. if (uncrossedDatas.length > 0) {
  1462. for (let i = 0; i < uncrossedDatas.length; i++) {
  1463. let field = uncrossedDatas[i].field;
  1464. let isRepeat = tools.isDesignRepeat(totalDesigns.designsArr, field, uncrossedDatas[i].data, 'reference', null, sheet, uncrossedDatas[i].rowIdx);
  1465. if (isRepeat) {
  1466. uncrossedDatas.splice(i--, 1);
  1467. }
  1468. }
  1469. for (let i = 0; i < uncrossedDatas.length; i++) {
  1470. let field = uncrossedDatas[i].field;
  1471. if (uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number') {
  1472. uncrossedDatas.splice(i--, 1);
  1473. }
  1474. }
  1475. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1476. function myCompare(a, b) {
  1477. if (a.rowIdx > b.rowIdx)
  1478. return 1;
  1479. if (a.rowIdx < b.rowIdx)
  1480. return -1;
  1481. return 0;
  1482. }
  1483. function myCompareCode(a, b) {
  1484. if (a.code > b.code)
  1485. return -1;
  1486. if (a.code < b.code)
  1487. return 1;
  1488. return 0;
  1489. }
  1490. if (rebuildArr.length > 0) {
  1491. rebuildArr.sort(myCompareCode);
  1492. if (rebuildArr[0].code) {
  1493. maxDesignsNumber = maxDesignsNumber + 1 > rebuildArr[0].code ? maxDesignsNumber : rebuildArr[0].code;
  1494. }
  1495. rebuildArr.forEach(function (data) {
  1496. if (!data.code) {
  1497. maxDesignsNumber++;
  1498. let code = maxDesignsNumber;
  1499. data.code = code;
  1500. }
  1501. });
  1502. }
  1503. //rebuildArr.sort(myCompare);
  1504. }
  1505. //rebuildArr.sort(myCompare);
  1506. pasteDatas = {
  1507. updateDatas: crossedDatas,
  1508. createDatas: rebuildArr
  1509. }
  1510. return pasteDatas;
  1511. },
  1512. encapTotalItemsDatas: function (sheet, totalItems, uncrossedDatas, crossedDatas) {
  1513. let pasteDatas;
  1514. let rebuildArr = [];
  1515. if (crossedDatas.length > 0) {
  1516. for (let i = 0; i < crossedDatas.length; i++) {
  1517. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1518. let isRepeat = tools.isRepeat(totalItems.itemsArr, field, data, 'reference');
  1519. if (isRepeat) {
  1520. crossedDatas.splice(i--, 1);
  1521. }
  1522. }
  1523. for (let i = 0; i < crossedDatas.length; i++) {
  1524. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1525. if (crossedDatas[i].field === 'code' && typeof data !== 'number') {
  1526. crossedDatas.splice(i--, 1);
  1527. }
  1528. }
  1529. }
  1530. if (uncrossedDatas.length > 0) {
  1531. for (let i = 0; i < uncrossedDatas.length; i++) {
  1532. let field = uncrossedDatas[i].field;
  1533. let isRepeat = tools.isRepeat(totalItems.itemsArr, field, uncrossedDatas[i].data, 'reference');
  1534. if (isRepeat) {
  1535. uncrossedDatas.splice(i--, 1);
  1536. }
  1537. }
  1538. for (let i = 0; i < uncrossedDatas.length; i++) {
  1539. let field = uncrossedDatas[i].field;
  1540. if (uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number') {
  1541. uncrossedDatas.splice(i--, 1);
  1542. }
  1543. }
  1544. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1545. function myCompare(a, b) {
  1546. if (a.rowIdx > b.rowIdx)
  1547. return 1;
  1548. if (a.rowIdx < b.rowIdx)
  1549. return -1;
  1550. return 0;
  1551. }
  1552. function myCompareCode(a, b) {
  1553. if (a.code > b.code)
  1554. return -1;
  1555. if (a.code < b.code)
  1556. return 1;
  1557. return 0;
  1558. }
  1559. //rebuildArr.sort(myCompare);
  1560. if (rebuildArr.length > 0) {
  1561. rebuildArr.sort(myCompareCode);
  1562. if (rebuildArr[0].code) {
  1563. maxItemsNumber = maxItemsNumber + 1 > rebuildArr[0].code ? maxItemsNumber : rebuildArr[0].code;
  1564. }
  1565. rebuildArr.forEach(function (data) {
  1566. if (!data.code) {
  1567. maxItemsNumber++;
  1568. let code = maxItemsNumber;
  1569. data.code = code;
  1570. }
  1571. });
  1572. }
  1573. }
  1574. // rebuildArr.sort(myCompare);
  1575. pasteDatas = {
  1576. updateDatas: crossedDatas,
  1577. createDatas: rebuildArr
  1578. }
  1579. return pasteDatas;
  1580. },
  1581. encapValues: function (sheet, totalItems, uncrossedDatas, crossedDatas) {
  1582. let rebuildArr = [];
  1583. let rebuildUpdateDatas = [];
  1584. let valuesArr = valueController.getValues(totalItems, selectedId);
  1585. function myCompare(a, b) {
  1586. if (a.rowIdx > b.rowIdx)
  1587. return 1;
  1588. if (a.rowIdx < b.rowIdx)
  1589. return -1;
  1590. return 0;
  1591. }
  1592. if (crossedDatas.length > 0) {
  1593. for (let i = 0; i < crossedDatas.length; i++) {
  1594. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1595. let isRepeat = tools.isRepeat(valuesArr, field, data, 'document', 'value');
  1596. if (isRepeat) {
  1597. crossedDatas.splice(i--, 1);
  1598. }
  1599. }
  1600. for (let i = 0; i < crossedDatas.length; i++) {
  1601. let field = crossedDatas[i].field, data = crossedDatas[i].data;
  1602. if (crossedDatas[i].field === 'code' && typeof data !== 'number') {
  1603. crossedDatas.splice(i--, 1);
  1604. }
  1605. }
  1606. rebuildUpdateDatas = tools.rebuildArr(crossedDatas, 'update');
  1607. rebuildUpdateDatas.sort(myCompare);
  1608. for (let i = 0; i < rebuildUpdateDatas.length; i++) {
  1609. rebuildUpdateDatas[i].itemId = selectedId;
  1610. }
  1611. }
  1612. if (uncrossedDatas.length > 0) {
  1613. for (let i = 0; i < uncrossedDatas.length; i++) {
  1614. let field = uncrossedDatas[i].field;
  1615. let isRepeat = tools.isRepeat(valuesArr, field, uncrossedDatas[i].data, 'document', 'value');
  1616. if (isRepeat) {
  1617. uncrossedDatas.splice(i--, 1);
  1618. }
  1619. }
  1620. for (let i = 0; i < uncrossedDatas.length; i++) {
  1621. let field = uncrossedDatas[i].field;
  1622. if (uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number') {
  1623. uncrossedDatas.splice(i--, 1);
  1624. }
  1625. }
  1626. rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
  1627. //rebuildArr.sort(myCompare);
  1628. function myCompareCode(a, b) {
  1629. let valA = a.code,
  1630. valB = b.code;
  1631. return valB - valA;
  1632. }
  1633. rebuildArr.sort(myCompareCode);
  1634. let newCode = valueController.getCode(totalItems, selectedId);
  1635. if (rebuildArr[0].code) {
  1636. newCode = newCode > rebuildArr[0].code ? newCode : rebuildArr[0].code + 1;
  1637. }
  1638. for (let i = 0; i < rebuildArr.length; i++) {
  1639. rebuildArr[i].itemId = selectedId;
  1640. if (rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'value') {
  1641. rebuildArr[i].code = newCode;
  1642. newCode++;
  1643. }
  1644. }
  1645. }
  1646. //backendOP
  1647. let pasteDatas = {
  1648. updateDatas: rebuildUpdateDatas,
  1649. createDatas: rebuildArr
  1650. };
  1651. return pasteDatas;
  1652. },
  1653. rebuildArr: function (arr, classify) {
  1654. let conformDatas = [];
  1655. let flag = true;
  1656. for (let i = 0; i < arr.length; i++) {
  1657. let conformData = {
  1658. billsLibId: billsLibId,
  1659. rowIdx: arr[i].rowIdx,
  1660. type: classify === 'create' ? 'CreateT' : 'UpdateT',
  1661. };
  1662. conformData[arr[i].field] = arr[i].data;;
  1663. for (let j = i + 1; j < arr.length; j++) {
  1664. if (arr[i].rowIdx === arr[j].rowIdx) {
  1665. flag = false;
  1666. let field = arr[i].field;
  1667. if (classify === 'create') {
  1668. conformData[arr[j].field] = arr[j].data;
  1669. /* conformData = {
  1670. billsLibId: billsLibId,
  1671. rowIdx: arr[i].rowIdx,
  1672. type: 'CreateT'
  1673. }
  1674. conformData[arr[i].field] = arr[i].data;
  1675. conformData[arr[j].field] = arr[j].data; */
  1676. /* if (field === 'code') {
  1677. conformData = {
  1678. billsLibId: billsLibId,
  1679. code: arr[i].data,
  1680. content: arr[j].data,
  1681. rowIdx: arr[i].rowIdx,
  1682. type: 'CreateT'
  1683. }
  1684. }
  1685. else {
  1686. conformData = {
  1687. billsLibId: billsLibId,
  1688. code: arr[j].data,
  1689. content: arr[i].data,
  1690. rowIdx: arr[i].rowIdx,
  1691. type: 'CreateT'
  1692. }
  1693. } */
  1694. }
  1695. else {
  1696. conformData.orgId = arr[i].orgId;
  1697. conformData[arr[j].field] = arr[j].data;
  1698. /* conformData = {
  1699. billsLibId: billsLibId,
  1700. rowIdx: arr[i].rowIdx,
  1701. orgId: arr[i].orgId,
  1702. type: 'UpdateT'
  1703. }
  1704. conformData[arr[i].field] = arr[i].data;
  1705. conformData[arr[j].field] = arr[j].data; */
  1706. /* if (field === 'code') {
  1707. conformData = {
  1708. billsLibId: billsLibId,
  1709. code: arr[i].data,
  1710. content: arr[j].data,
  1711. rowIdx: arr[i].rowIdx,
  1712. orgId: arr[i].orgId,
  1713. type: 'UpdateT'
  1714. }
  1715. }
  1716. else {
  1717. conformData = {
  1718. billsLIbId: billsLibId,
  1719. code: arr[j].data,
  1720. content: arr[i].data,
  1721. rowIdx: arr[i].rowIdx,
  1722. orgId: arr[i].orgId,
  1723. type: 'UpdateT'
  1724. }
  1725. } */
  1726. }
  1727. }
  1728. }
  1729. const matched = conformDatas.find(item => item.rowIdx === conformData.rowIdx);
  1730. if (!matched) {
  1731. conformDatas.push(conformData);
  1732. }
  1733. }
  1734. /* for (let i = 0; i < arr.length; i++) {
  1735. let flag = true;
  1736. for (let j = 0; j < arr.length; j++) {
  1737. if (arr[i].rowIdx === arr[j].rowIdx && arr[i].field !== arr[j].field) {
  1738. flag = false;
  1739. }
  1740. }
  1741. if (flag) {
  1742. conformDatas.push(arr[i]);
  1743. }
  1744. } */
  1745. return conformDatas;
  1746. },
  1747. isDef: function (v) {
  1748. return v !== undefined && v !== null;
  1749. },
  1750. //返回
  1751. sectionInfoNull: function (sectionInfo) {
  1752. for (let info in sectionInfo) {
  1753. if (!this.isDef(sectionInfo[info])) {
  1754. return info;
  1755. }
  1756. }
  1757. return false;
  1758. },
  1759. getSectionInfo: function (node) {
  1760. let parentIDs = [];
  1761. let sectionInfo = { first: null, second: null, third: null };
  1762. getParent(node);
  1763. if (this.isDef(parentIDs[parentIDs.length - 1])) {
  1764. sectionInfo.first = parentIDs[parentIDs.length - 1];
  1765. }
  1766. if (this.isDef(parentIDs[parentIDs.length - 2])) {
  1767. sectionInfo.second = parentIDs[parentIDs.length - 2];
  1768. }
  1769. if (this.isDef(parentIDs[parentIDs.length - 3])) {
  1770. sectionInfo.third = parentIDs[parentIDs.length - 3];
  1771. }
  1772. return sectionInfo;
  1773. function getParent(node) {
  1774. if (node.parent) {
  1775. parentIDs.push(node.parent.data.ID);
  1776. getParent(node.parent);
  1777. }
  1778. }
  1779. },
  1780. getUpdateSectionData: function (nodes) {
  1781. let rst = [];
  1782. for (let node of nodes) {
  1783. rst.push({ ID: node.getID(), sectionInfo: tools.getSectionInfo(node) });
  1784. }
  1785. return rst;
  1786. },
  1787. //获取节点底下所有子节点
  1788. getChildrenNodes: function (nodes) {
  1789. let rst = [];
  1790. for (let node of nodes) {
  1791. getChild(node.children);
  1792. }
  1793. function getChild(ns) {
  1794. rst = rst.concat(ns);
  1795. for (let n of ns) {
  1796. if (n.children.length > 0) {
  1797. getChild(n.children);
  1798. }
  1799. }
  1800. }
  1801. return rst;
  1802. },
  1803. getSameDepthNodes: function (controller) {
  1804. const items = controller.tree.items;
  1805. let rst = [];
  1806. let sel = controller.sheet.getSelections()[0];
  1807. let selectedDepth = controller.tree.selected.depth();
  1808. for (let i = 0; i < sel.rowCount; i++) {
  1809. let row = sel.row + i;
  1810. if (items[row].depth() === selectedDepth) {
  1811. rst.push(items[row]);
  1812. }
  1813. }
  1814. return rst;
  1815. }
  1816. };
  1817. let pasteController = {
  1818. frontOperator: function (sheet, setting, controller, totalJobs, datas) {
  1819. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1820. if (datas.length > 0) {
  1821. for (let i = 0; i < datas.length; i++) {
  1822. if (datas[i]) {
  1823. if (datas[i].type === UpdateExist) {
  1824. totalJobs.jobsArr.forEach(job => {
  1825. if (job.data.content == datas[i].newData) {
  1826. let serialNo = datas[i].serialNo;
  1827. let index = tools.getIndex(controller.tree.selected.jobs, datas[i].orgJobId, 'job');
  1828. job.count++;
  1829. controller.tree.selected.jobs.splice(index, 1);
  1830. controller.tree.selected.jobs.splice(index, 0, { job: job, serialNo: serialNo });
  1831. }
  1832. });
  1833. }
  1834. else if (datas[i].type === UpdateNew) {
  1835. let newJobData, newJob;
  1836. let newJobId = datas[i].newJobId, serialNo = datas[i].serialNo;
  1837. newJobData = { id: newJobId, content: datas[i].newData, code: datas[i].code };
  1838. newJob = createObj.newJob(newJobData);
  1839. newJob.count = 1;
  1840. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  1841. totalJobs.jobsArr.push(newJob);
  1842. var index = tools.getIndex(controller.tree.selected.jobs, datas[i].orgJobId, 'job');
  1843. controller.tree.selected.jobs.splice(index, 1);
  1844. controller.tree.selected.jobs.splice(index, 0, { job: newJob, serialNo: serialNo });
  1845. }
  1846. else if (datas[i].type === CreateExist) {
  1847. let serialNo = datas[i].serialNo;
  1848. totalJobs.jobsArr.forEach(job => {
  1849. if (job.data.content == datas[i].newData) {
  1850. job.count++;
  1851. controller.tree.selected.jobs.push({ job: job, serialNo: serialNo });
  1852. }
  1853. });
  1854. }
  1855. else if (datas[i].type === CreateNew) {
  1856. let newJobId = datas[i].newJobId, serialNo = datas[i].serialNo;
  1857. let newJobData, newJob;
  1858. newJobData = { id: newJobId, content: datas[i].newData, code: datas[i].code };
  1859. newJob = createObj.newJob(newJobData);
  1860. newJob.count = 1;
  1861. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  1862. totalJobs.jobsArr.push(newJob);
  1863. controller.tree.selected.jobs.push({ job: newJob, serialNo: serialNo });
  1864. }
  1865. }
  1866. }
  1867. }
  1868. //resort&reshow
  1869. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  1870. sheetDatas = tools.getsheetDatas(sheet);
  1871. },
  1872. frontDesignsRelOperator: function (sheet, setting, controller, totalDesigns, datas) {
  1873. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1874. if (datas.length > 0) {
  1875. for (let i = 0; i < datas.length; i++) {
  1876. if (datas[i]) {
  1877. if (datas[i].type === UpdateExist) {
  1878. const design = tools.getDesignByNameUnit(totalDesigns.designsArr, datas[i].name, datas[i].unit, false);
  1879. if (design) {
  1880. let serialNo = datas[i].serialNo;
  1881. let index = tools.getIndex(controller.tree.selected.designs, datas[i].orgDesignId, 'design');
  1882. design.count++;
  1883. controller.tree.selected.designs.splice(index, 1);
  1884. controller.tree.selected.designs.splice(index, 0, { design: design, serialNo: serialNo });
  1885. }
  1886. }
  1887. else if (datas[i].type === UpdateNew) {
  1888. let newDesignData, newDesign;
  1889. let newDesignId = datas[i].newDesignId, serialNo = datas[i].serialNo;
  1890. newDesignData = { id: newDesignId, name: datas[i].name, unit: datas[i].unit, code: datas[i].code };
  1891. newDesign = createObj.newDesign(newDesignData);
  1892. newDesign.count = 1;
  1893. totalDesigns.designs[totalDesigns.prefix + newDesignId] = newDesign;
  1894. totalDesigns.designsArr.push(newDesign);
  1895. var index = tools.getIndex(controller.tree.selected.designs, datas[i].orgDesignId, 'design');
  1896. controller.tree.selected.designs.splice(index, 1);
  1897. controller.tree.selected.designs.splice(index, 0, { design: newDesign, serialNo: serialNo });
  1898. }
  1899. else if (datas[i].type === CreateExist) {
  1900. let serialNo = datas[i].serialNo;
  1901. const design = tools.getDesignByNameUnit(totalDesigns.designsArr, datas[i].name, datas[i].unit, false);
  1902. if (design) {
  1903. design.count++;
  1904. controller.tree.selected.designs.push({ design: design, serialNo: serialNo });
  1905. }
  1906. }
  1907. else if (datas[i].type === CreateNew) {
  1908. let newDesignId = datas[i].newDesignId, serialNo = datas[i].serialNo;
  1909. let newDesignData, newDesign;
  1910. newDesignData = { id: newDesignId, name: datas[i].name, unit: datas[i].unit, code: datas[i].code };
  1911. newDesign = createObj.newDesign(newDesignData);
  1912. newDesign.count = 1;
  1913. totalDesigns.designs[totalDesigns.prefix + newDesignId] = newDesign;
  1914. totalDesigns.designsArr.push(newDesign);
  1915. controller.tree.selected.designs.push({ design: newDesign, serialNo: serialNo });
  1916. }
  1917. }
  1918. }
  1919. }
  1920. //resort&reshow
  1921. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  1922. sheetDatas = tools.getsheetDatas(sheet, 'designs');
  1923. },
  1924. frontItemsRelOperator: function (sheet, setting, controller, totalItems, datas) {
  1925. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1926. if (datas.length > 0) {
  1927. for (let i = 0; i < datas.length; i++) {
  1928. if (datas[i]) {
  1929. if (datas[i].type == UpdateExist) {
  1930. let serialNo = datas[i].serialNo;
  1931. totalItems.itemsArr.forEach(item => {
  1932. if (item.data.content === datas[i].newData) {
  1933. let index = tools.getIndex(controller.tree.selected.items, datas[i].orgItemId, 'item');
  1934. item.count++;
  1935. controller.tree.selected.items.splice(index, 1);
  1936. controller.tree.selected.items.splice(index, 0, { item: item, serialNo: serialNo });
  1937. }
  1938. });
  1939. }
  1940. else if (datas[i].type === UpdateNew) {
  1941. let newItemData, newItem;
  1942. let newItemId = datas[i].newItemId, serialNo = datas[i].serialNo;
  1943. newItemData = { id: newItemId, content: datas[i].newData, code: datas[i].code };
  1944. newItem = createObj.newItem(newItemData);
  1945. newItem.count = 1;
  1946. totalItems.items[totalItems.prefix + newItemId] = newItem;
  1947. totalItems.itemsArr.push(newItem);
  1948. var index = tools.getIndex(controller.tree.selected.items, datas[i].orgItemId, 'item');
  1949. controller.tree.selected.items.splice(index, 1);
  1950. controller.tree.selected.items.splice(index, 0, { item: newItem, serialNo: serialNo });
  1951. }
  1952. else if (datas[i].type === CreateExist) {
  1953. let serialNo = datas[i].serialNo;
  1954. totalItems.itemsArr.forEach(item => {
  1955. if (item.data.content == datas[i].newData) {
  1956. item.count++;
  1957. controller.tree.selected.items.push({ item: item, serialNo: serialNo });
  1958. }
  1959. });
  1960. }
  1961. else if (datas[i].type === CreateNew) {
  1962. let newItemId = datas[i].newItemId, serialNo = datas[i].serialNo;
  1963. let newItemData, newItem;
  1964. newItemData = { id: newItemId, content: datas[i].newData, code: datas[i].code };
  1965. newItem = createObj.newItem(newItemData);
  1966. newItem.count = 1;
  1967. totalItems.items[totalItems.prefix + newItemId] = newItem;
  1968. totalItems.itemsArr.push(newItem);
  1969. controller.tree.selected.items.push({ item: newItem, serialNo: serialNo });
  1970. }
  1971. }
  1972. }
  1973. }
  1974. //resort&reshow
  1975. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  1976. sheetItemsDatas = tools.getsheetDatas(sheet);
  1977. },
  1978. pasteJobsFront: function (sheet, totalJobs, datas) {
  1979. const Update = 'Update', CreateT = 'CreateT';
  1980. if (datas.length > 0) {
  1981. for (let i = 0; i < datas.length; i++) {
  1982. let newJobData, newJob;
  1983. if (datas[i]) {
  1984. if (datas[i].type === Update) {
  1985. totalJobs.jobsArr.forEach(job => {
  1986. if (job.data.id === datas[i].orgId) {
  1987. job.data[datas[i].field] = datas[i].data;
  1988. }
  1989. });
  1990. }
  1991. else if (datas[i].type === CreateT) {
  1992. //maxJobsNumber++;
  1993. // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
  1994. newJobData = { id: datas[i].newJobId, content: datas[i].content, code: datas[i].code };
  1995. newJob = createObj.newJob(newJobData);
  1996. totalJobs.jobsArr.push(newJob);
  1997. }
  1998. else if (datas[i].type !== CreateT && datas[i].field === 'content') {
  1999. newJobData = { id: datas[i].newJobId, content: datas[i].data, code: datas[i].code };
  2000. newJob = createObj.newJob(newJobData);
  2001. totalJobs.jobsArr.push(newJob);
  2002. }
  2003. else if (datas[i].type !== 'CreateT' && datas[i].field === 'code') {
  2004. // maxJobsNumber++;
  2005. // maxJobsNumber = maxJobsNumber >= datas[i].data ? maxJobsNumber : datas[i].data;
  2006. newJobData = { id: datas[i].newJobId, content: '', code: datas[i].data };
  2007. newJob = createObj.newJob(newJobData);
  2008. totalJobs.jobsArr.push(newJob);
  2009. }
  2010. }
  2011. }
  2012. }
  2013. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  2014. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  2015. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  2016. },
  2017. pasteDesignsFront: function (sheet, totalDesigns, datas) {
  2018. const Update = 'Update', CreateT = 'CreateT';
  2019. if (datas.length > 0) {
  2020. for (let i = 0; i < datas.length; i++) {
  2021. let newDesignData, newDesign;
  2022. if (datas[i]) {
  2023. if (datas[i].type === Update) {
  2024. totalDesigns.designsArr.forEach(design => {
  2025. if (design.data.id === datas[i].orgId) {
  2026. design.data[datas[i].field] = datas[i].data;
  2027. }
  2028. });
  2029. }
  2030. else if (datas[i].type === CreateT) {
  2031. //maxJobsNumber++;
  2032. // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
  2033. newDesignData = { id: datas[i].newJobId, name: datas[i].name, code: datas[i].code, unit: datas[i].unit };
  2034. newDesign = createObj.newDesign(newDesignData);
  2035. totalDesigns.designsArr.push(newDesign);
  2036. }
  2037. else if (datas[i].type !== CreateT && datas[i].field === 'name') {
  2038. newDesignData = { id: datas[i].newJobId, name: datas[i].data, code: datas[i].code };
  2039. newDesign = createObj.newDesign(newDesignData);
  2040. totalDesigns.designsArr.push(newDesign);
  2041. }
  2042. else if (datas[i].type !== 'CreateT' && datas[i].field === 'code') {
  2043. // maxJobsNumber++;
  2044. // maxJobsNumber = maxJobsNumber >= datas[i].data ? maxJobsNumber : datas[i].data;
  2045. newDesignData = { id: datas[i].newJobId, name: '', code: datas[i].data };
  2046. newDesign = createObj.newDesign(newDesignData);
  2047. totalDesigns.designsArr.push(newDesign);
  2048. }
  2049. }
  2050. }
  2051. }
  2052. setSheet.setMaxRowCount(sheet, totalDesigns.designsArr);
  2053. tools.reshowData(sheet, totalDesigns.designsArr, totalDesignsSetting, true);
  2054. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  2055. },
  2056. pasteItemsFront: function (sheet, totalItems, datas) {
  2057. const Update = 'Update', CreateT = 'CreateT';
  2058. if (datas.length > 0) {
  2059. for (let i = 0; i < datas.length; i++) {
  2060. let newItemData, newItem;
  2061. if (datas[i]) {
  2062. if (datas[i].type === Update) {
  2063. totalItems.itemsArr.forEach(item => {
  2064. if (item.data.id === datas[i].orgId) {
  2065. item.data[datas[i].field] = datas[i].data;
  2066. }
  2067. });
  2068. }
  2069. else if (datas[i].type === CreateT) {
  2070. newItemData = { id: datas[i].newItemId, content: datas[i].content, code: datas[i].code, itemValue: [] };
  2071. newItem = createObj.newItem(newItemData);
  2072. totalItems.itemsArr.push(newItem);
  2073. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  2074. }
  2075. else if (datas[i].type !== CreateT && datas[i].field === 'content') {
  2076. newItemData = { id: datas[i].newItemId, content: datas[i].data, code: datas[i].code, itemValue: [] };
  2077. newItem = createObj.newItem(newItemData);
  2078. totalItems.itemsArr.push(newItem);
  2079. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  2080. }
  2081. else if (datas[i].type !== 'CreateT' && datas[i].field === 'code') {
  2082. newItemData = { id: datas[i].newItemId, content: '', code: datas[i].data, itemValue: [] };
  2083. newItem = createObj.newItem(newItemData);
  2084. totalItems.itemsArr.push(newItem);
  2085. totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
  2086. }
  2087. }
  2088. }
  2089. }
  2090. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  2091. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  2092. totalItemsDatas = tools.getsheetDatas(sheet, 'total');
  2093. },
  2094. pasteValueFront: function (sheet, totalItems, datas) {
  2095. let backendUpdateDatas = [];
  2096. let valuesArr = valueController.getValues(totalItems, selectedId);
  2097. if (datas.length > 0) {
  2098. for (let i = 0; i < datas.length; i++) {
  2099. let index;
  2100. if (datas[i]) {
  2101. if (datas[i].type === 'UpdateT') {
  2102. if (valuesArr) {
  2103. for (let j = 0; j < valuesArr.length; j++) {
  2104. if (datas[i].orgId === valuesArr[j].code) {
  2105. index = j;
  2106. valuesArr.splice(j--, 1);
  2107. }
  2108. }
  2109. let updateEle = { code: datas[i].code, value: datas[i].content };
  2110. valuesArr.splice(index, 0, updateEle);
  2111. }
  2112. }
  2113. else if (datas[i].type === 'Update' && datas[i].field === 'code') {
  2114. if (valuesArr) {
  2115. for (let j = 0; j < valuesArr.length; j++) {
  2116. if (datas[i].orgId === valuesArr[j].code) {
  2117. valuesArr[j].code = datas[i].data;
  2118. }
  2119. }
  2120. }
  2121. }
  2122. else if (datas[i].type === 'Update' && datas[i].field === 'value') {
  2123. if (valuesArr) {
  2124. for (let j = 0; j < valuesArr.length; j++) {
  2125. if (datas[i].orgId === valuesArr[j].code) {
  2126. valuesArr[j].value = datas[i].data
  2127. }
  2128. }
  2129. }
  2130. }
  2131. else if (datas[i].type === 'CreateT') {
  2132. let newValueData = { value: datas[i].content, code: datas[i].code };
  2133. valuesArr.push(newValueData);
  2134. }
  2135. else if (datas[i].type === 'Create' && datas[i].field === 'value') {
  2136. let newValueData = { value: datas[i].data, code: datas[i].code };
  2137. valuesArr.push(newValueData);
  2138. }
  2139. else if (datas[i].type === 'Create' && datas[i].field === 'code') {
  2140. let newValueData = { value: '', code: datas[i].data };
  2141. valuesArr.push(newValueData);
  2142. }
  2143. }
  2144. }
  2145. }
  2146. tools.reshowValue(sheet, valuesArr, eigenValueSetting, true);
  2147. valueDatas = tools.getsheetDatas(sheet, 'total');
  2148. }
  2149. };
  2150. var jobsController = {
  2151. currentEditData: null,
  2152. totalJobs: null,
  2153. onEditStart: function (sender, args) {
  2154. let me = jobsController;
  2155. me.currentEditData = args.sheet.getValue(args.row, args.col);
  2156. },
  2157. onEditEnded: function (sender, args) {
  2158. let me = jobsController;
  2159. let sheet = args.sheet;
  2160. let controller = dbController.controller;
  2161. let totalJobs = me.totalJobs;
  2162. let setting = jobsSetting;
  2163. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  2164. setting.cols.forEach(function (col, idx) {
  2165. if (args.col === idx) {
  2166. field = col.data.field;
  2167. }
  2168. });
  2169. if (controller.tree.selected && newData != me.currentEditData) {
  2170. var isExist = tools.isExist(totalJobs.jobsArr, field, newData);
  2171. var isRepeat = tools.isRepeat(controller.tree.selected.jobs, field, newData, 'reference', 'job');
  2172. //create
  2173. if (!id && newData && !isRepeat) {
  2174. if (isExist) {
  2175. jobsController.createExist(sheet, controller, totalJobs, field, newData, args, setting);
  2176. }
  2177. else {
  2178. jobsController.createNew(sheet, controller, totalJobs, field, newData, args, setting);
  2179. }
  2180. }
  2181. //update
  2182. else if (id && !isRepeat) {
  2183. jobsController.update(sheet, controller, totalJobs, field, newData, id, isExist, args, setting);
  2184. }
  2185. //处理重复
  2186. if (isRepeat) {
  2187. tools.alertOpr(args, sheet, '该工作内容已存在!', controller.tree.selected.jobs, 'job');
  2188. }
  2189. }
  2190. else {
  2191. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  2192. }
  2193. },
  2194. editData: function (sheet) {
  2195. let me = jobsController;
  2196. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  2197. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  2198. },
  2199. createNew: function (sheet, controller, totalJobs, field, newData, args, setting) {
  2200. if (field === 'content') {
  2201. maxJobsNumber++;
  2202. //update--
  2203. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);
  2204. //--
  2205. jobsAjax.edCreateJob(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, serialNo, function (newJobId) {
  2206. var newJobData, newJob;
  2207. newJobData = { id: newJobId, content: newData, code: maxJobsNumber };
  2208. newJob = createObj.newJob(newJobData);
  2209. newJob.count = 1;
  2210. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  2211. totalJobs.jobsArr.push(newJob);
  2212. controller.tree.selected.jobs.push({ job: newJob, serialNo: serialNo });//update--
  2213. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true)//update--
  2214. });
  2215. }
  2216. else {
  2217. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.jobs, 'job');
  2218. }
  2219. },
  2220. createExist: function (sheet, controller, totalJobs, field, newData, args, setting) {
  2221. totalJobs.jobsArr.forEach(function (job) {
  2222. if (field === 'content' && newData === job.data.content) {
  2223. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update--
  2224. //billsAjax.updateBills(billsLibId, controllers.tree.selected.getID(), 'jobs', job.data.id);//update--
  2225. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'jobs', { id: job.data.id, serialNo: serialNo });//update--
  2226. job.count++;
  2227. // controllers.tree.selected.jobs.push(job);//update--
  2228. controller.tree.selected.jobs.push({ job: job, serialNo: serialNo });//update--
  2229. //tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  2230. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  2231. }
  2232. else if (field == 'code' && newData == job.data.code) {
  2233. let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update--
  2234. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'jobs', { id: job.data.id, serialNo: serialNo });//update--
  2235. job.count++;
  2236. controller.tree.selected.jobs.push({ job: job, serialNo: serialNo });//update--
  2237. // tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  2238. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  2239. }
  2240. });
  2241. },
  2242. update: function (sheet, controller, totalJobs, field, newData, id, isExist, args, setting) {
  2243. if (isExist) {
  2244. totalJobs.jobsArr.forEach(function (job) {
  2245. if (field == 'code' && job.data[field] == newData) {
  2246. let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;//update--add
  2247. let index = tools.getIndex(controller.tree.selected.jobs, id, 'job');//update-- getIndex
  2248. job.count++;
  2249. controller.tree.selected.jobs.splice(index, 1);
  2250. controller.tree.selected.jobs.splice(index, 0, { job: job, serialNo: serialNo });//update--
  2251. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  2252. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  2253. }
  2254. if (field === 'content' && job.data[field] === newData) {
  2255. let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;//update--add
  2256. let index = tools.getIndex(controller.tree.selected.jobs, id, 'job');
  2257. job.count++;
  2258. controller.tree.selected.jobs.splice(index, 1);
  2259. controller.tree.selected.jobs.splice(index, 0, { job: job, serialNo: serialNo });//update--
  2260. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs');
  2261. // tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  2262. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
  2263. }
  2264. });
  2265. }
  2266. else {
  2267. if (field === 'content') {
  2268. maxJobsNumber++;
  2269. //let serialNo = tools.getSerialNo(controllers.tree.selected.jobs);//update--
  2270. let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;
  2271. jobsAjax.edUpdateJob(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, id, function (newJobId) {//update--
  2272. var newJobData, newJob;
  2273. newJobData = { id: newJobId, content: newData, code: maxJobsNumber };
  2274. newJob = createObj.newJob(newJobData);
  2275. newJob.count = 1;
  2276. totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
  2277. totalJobs.jobsArr.push(newJob);
  2278. var index = tools.getIndex(controller.tree.selected.jobs, id, 'job');
  2279. controller.tree.selected.jobs.splice(index, 1);
  2280. controller.tree.selected.jobs.splice(index, 0, { job: newJob, serialNo: serialNo });//update--
  2281. //tools.reshowData(sheet, controllers.tree.selected.jobs, setting, true);//update--
  2282. tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);//update--
  2283. });
  2284. }
  2285. else {
  2286. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.jobs, 'job');
  2287. /* //todo: 提示窗口
  2288. console.log(`enter`);
  2289. console.log(typeof newData);
  2290. if(typeof newData === 'number'){
  2291. console.log(`orgJobData: ${orgJobData}`);
  2292. sheet.getCell(args.row, args.col).value(orgJobData);
  2293. }
  2294. else {
  2295. //编号只能是数字
  2296. sheet.getCell(args.row, args.col).value('');
  2297. }*/
  2298. }
  2299. }
  2300. },
  2301. upMove: function (controller, sheet) {
  2302. let updateSelArr = [];
  2303. $('#upMove').attr('doing', 'true');
  2304. tools.btnClose($('#upMove'));
  2305. let args = controller.tree.selected.args,
  2306. thisJob = controller.tree.selected.jobs[args.row],
  2307. preJob = controller.tree.selected.jobs[args.row - 1],
  2308. tempSerialNo;
  2309. //switch serialNo
  2310. tempSerialNo = thisJob.serialNo;
  2311. thisJob.serialNo = preJob.serialNo;
  2312. preJob.serialNo = tempSerialNo;
  2313. updateSelArr.push({ id: thisJob.job.data.id, serialNo: thisJob.serialNo });
  2314. updateSelArr.push({ id: preJob.job.data.id, serialNo: preJob.serialNo });
  2315. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'jobs', function () {
  2316. tools.orderReshowData(sheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
  2317. sheet.setActiveCell(args.row - 1, args.col);
  2318. controller.tree.selected.args.row = args.row - 1;
  2319. $('#upMove').attr('doing', 'false');
  2320. if (tools.canUpMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)) {
  2321. $('#upMove').attr('canMove', 'true');
  2322. tools.btnAction($('#upMove'));
  2323. }
  2324. else {
  2325. $('#upMove').attr('canMove', 'false');
  2326. }
  2327. if (tools.canDownMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)) {
  2328. $('#downMove').attr('canMove', true);
  2329. tools.btnAction($('#downMove'));
  2330. }
  2331. else {
  2332. $('#downMove').attr('canMove', 'false');
  2333. tools.btnClose($('#downMove'));
  2334. }
  2335. });
  2336. },
  2337. downMove: function (controller, sheet) {
  2338. let updateSelArr = [];
  2339. $('#downMove').attr('doing', 'true');
  2340. tools.btnClose($('#downMove'));
  2341. let tempSerialNo = controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo;
  2342. controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo = controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo;
  2343. controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo = tempSerialNo;
  2344. updateSelArr.push({ id: controller.tree.selected.jobs[controller.tree.selected.args.row].job.data.id, serialNo: controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo });
  2345. updateSelArr.push({ id: controller.tree.selected.jobs[controller.tree.selected.args.row + 1].job.data.id, serialNo: controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo });
  2346. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'jobs', function () {
  2347. tools.orderReshowData(sheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
  2348. sheet.setActiveCell(controller.tree.selected.args.row + 1, controller.tree.selected.args.col);
  2349. controller.tree.selected.args.row = controller.tree.selected.args.row + 1;
  2350. $('#downMove').attr('doing', 'false');
  2351. if (tools.canDownMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)) {
  2352. $('#downMove').attr('canMove', 'true');
  2353. tools.btnAction($('#downMove'));
  2354. }
  2355. else {
  2356. $('#downMove').attr('canMove', 'false');
  2357. }
  2358. if (tools.canUpMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)) {
  2359. $('#upMove').attr('canMove', 'true');
  2360. tools.btnAction($('#upMove'));
  2361. }
  2362. else {
  2363. $('#upMove').attr('canMove', 'false');
  2364. tools.btnClose($('#upMove'));
  2365. }
  2366. });
  2367. }
  2368. };
  2369. var designsController = {
  2370. currentEditData: null,
  2371. totalDesigns: null,
  2372. onEditStart: function (sender, args) {
  2373. let me = designsController;
  2374. me.currentEditData = args.sheet.getValue(args.row, args.col);
  2375. },
  2376. onEditEnded: function (sender, args) {
  2377. let me = designsController;
  2378. let sheet = args.sheet;
  2379. let controller = dbController.controller;
  2380. let totalDesigns = me.totalDesigns;
  2381. let setting = designsSetting;
  2382. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  2383. setting.cols.forEach(function (col, idx) {
  2384. if (args.col === idx) {
  2385. field = col.data.field;
  2386. }
  2387. });
  2388. if (controller.tree.selected && newData != me.currentEditData) {
  2389. var isExist = tools.isDesignExist(totalDesigns.designsArr, field, newData, args.sheet, args.row);
  2390. var isRepeat = tools.isDesignRepeat(controller.tree.selected.designs, field, newData, 'reference', 'design', args.sheet, args.row);
  2391. //create
  2392. if (!id && newData && !isRepeat) {
  2393. if (isExist) {
  2394. designsController.createExist(sheet, controller, totalDesigns, field, newData, args, setting);
  2395. }
  2396. else {
  2397. designsController.createNew(sheet, controller, totalDesigns, field, newData, args, setting);
  2398. }
  2399. }
  2400. //update
  2401. else if (id && !isRepeat) {
  2402. designsController.update(sheet, controller, totalDesigns, field, newData, id, isExist, args, setting);
  2403. }
  2404. //处理重复
  2405. if (isRepeat) {
  2406. tools.alertOpr(args, sheet, '该设计细目已存在!', controller.tree.selected.designs, 'design');
  2407. }
  2408. }
  2409. else {
  2410. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  2411. }
  2412. },
  2413. editData: function (sheet) {
  2414. let me = designsController;
  2415. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  2416. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  2417. },
  2418. createNew: function (sheet, controller, totalDesigns, field, newData, args, setting) {
  2419. if (field === 'name' || field === 'unit') {
  2420. maxDesignsNumber++;
  2421. //update--
  2422. let serialNo = tools.getSerialNo(controller.tree.selected.designs);
  2423. //--
  2424. designsAjax.edCreateDesign(userAccount, billsLibId, controller.tree.selected.getID(), field, newData, maxDesignsNumber, serialNo, function (newID) {
  2425. var newDesignData, newDesign;
  2426. newDesignData = { id: newID, [field]: newData, code: maxDesignsNumber };
  2427. newDesign = createObj.newDesign(newDesignData);
  2428. newDesign.count = 1;
  2429. totalDesigns.designs[totalDesigns.prefix + newID] = newDesign;
  2430. totalDesigns.designsArr.push(newDesign);
  2431. controller.tree.selected.designs.push({ design: newDesign, serialNo: serialNo });//update--
  2432. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true)//update--
  2433. });
  2434. }
  2435. else {
  2436. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.designs, 'design');
  2437. }
  2438. },
  2439. createExist: function (sheet, controller, totalDesigns, field, newData, args, setting) {
  2440. const name = field === 'name' ? newData : sheet.getValue(args.row, 1);
  2441. const unit = field === 'unit' ? newData : sheet.getValue(args.row, 2);
  2442. if (field === 'code') {
  2443. matched = totalDesigns.designsArr.find(item => item.data.code == newData);
  2444. } else {
  2445. matched = totalDesigns.designsArr.find(item => item.data.name == name && item.data.unit == unit);
  2446. }
  2447. if (matched) {
  2448. let serialNo = tools.getSerialNo(controller.tree.selected.designs);//update--
  2449. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'designs', { id: matched.data.id, serialNo: serialNo });//update--
  2450. matched.count++;
  2451. controller.tree.selected.designs.push({ design: matched, serialNo: serialNo });//update--
  2452. // tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  2453. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  2454. }
  2455. /* for (const design of totalDesigns.designsArr) {
  2456. if ((field === 'name' && newData === design.data.name) || (field === 'unit' && newData === design.data.unit)) {
  2457. let serialNo = tools.getSerialNo(controller.tree.selected.designs);//update--
  2458. //billsAjax.updateBills(billsLibId, controllers.tree.selected.getID(), 'designs', job.data.id);//update--
  2459. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'designs', { id: design.data.id, serialNo: serialNo });//update--
  2460. design.count++;
  2461. // controllers.tree.selected.designs.push(job);//update--
  2462. controller.tree.selected.designs.push({ design: design, serialNo: serialNo });//update--
  2463. //tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  2464. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  2465. break;
  2466. }
  2467. else if (field == 'code' && newData == design.data.code) {
  2468. let serialNo = tools.getSerialNo(controller.tree.selected.designs);//update--
  2469. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'designs', { id: design.data.id, serialNo: serialNo });//update--
  2470. design.count++;
  2471. controller.tree.selected.designs.push({ design: design, serialNo: serialNo });//update--
  2472. // tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  2473. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  2474. break;
  2475. }
  2476. } */
  2477. },
  2478. update: function (sheet, controller, totalDesigns, field, newData, id, isExist, args, setting) {
  2479. const name = field === 'name' ? newData : sheet.getValue(args.row, 1);
  2480. const unit = field === 'unit' ? newData : sheet.getValue(args.row, 2);
  2481. if (isExist) {
  2482. let matched
  2483. if (field === 'code') {
  2484. matched = totalDesigns.designsArr.find(item => item.data.code == newData);
  2485. } else {
  2486. matched = totalDesigns.designsArr.find(item => item.data.name == name && item.data.unit == unit);
  2487. }
  2488. if (matched) {
  2489. let serialNo = tools.getObj(controller.tree.selected.designs, id, 'design').serialNo;//update--add
  2490. let index = tools.getIndex(controller.tree.selected.designs, id, 'design');//update-- getIndex
  2491. matched.count++;
  2492. controller.tree.selected.designs.splice(index, 1);
  2493. controller.tree.selected.designs.splice(index, 0, { design: matched, serialNo: serialNo });//update--
  2494. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, matched.data.id, 'update', 'designs');
  2495. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  2496. }
  2497. /* totalDesigns.designsArr.forEach(function (design) {
  2498. if (field == 'code' && design.data[field] == newData) {
  2499. let serialNo = tools.getObj(controller.tree.selected.designs, id, 'design').serialNo;//update--add
  2500. let index = tools.getIndex(controller.tree.selected.designs, id, 'design');//update-- getIndex
  2501. design.count++;
  2502. controller.tree.selected.designs.splice(index, 1);
  2503. controller.tree.selected.designs.splice(index, 0, { design: design, serialNo: serialNo });//update--
  2504. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, design.data.id, 'update', 'designs');
  2505. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  2506. }
  2507. if (field === 'name' && design.data[field] === newData) {
  2508. let serialNo = tools.getObj(controller.tree.selected.designs, id, 'design').serialNo;//update--add
  2509. let index = tools.getIndex(controller.tree.selected.designs, id, 'design');
  2510. design.count++;
  2511. controller.tree.selected.designs.splice(index, 1);
  2512. controller.tree.selected.designs.splice(index, 0, { design: design, serialNo: serialNo });//update--
  2513. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, design.data.id, 'update', 'designs');
  2514. // tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  2515. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);
  2516. }
  2517. }); */
  2518. }
  2519. else {
  2520. if (field === 'name' || field === 'unit') {
  2521. maxDesignsNumber++;
  2522. //let serialNo = tools.getSerialNo(controllers.tree.selected.designs);//update--
  2523. let serialNo = tools.getObj(controller.tree.selected.designs, id, 'design').serialNo;
  2524. designsAjax.edUpdateDesign(userAccount, billsLibId, controller.tree.selected.getID(), name, unit, maxDesignsNumber, id, function (newDesignId) {//update--
  2525. var newDesignData, newDesign;
  2526. newDesignData = { id: newDesignId, name, unit, code: maxDesignsNumber };
  2527. newDesign = createObj.newDesign(newDesignData);
  2528. newDesign.count = 1;
  2529. totalDesigns.designs[totalDesigns.prefix + newDesignId] = newDesign;
  2530. totalDesigns.designsArr.push(newDesign);
  2531. var index = tools.getIndex(controller.tree.selected.designs, id, 'design');
  2532. controller.tree.selected.designs.splice(index, 1);
  2533. controller.tree.selected.designs.splice(index, 0, { design: newDesign, serialNo: serialNo });//update--
  2534. //tools.reshowData(sheet, controllers.tree.selected.designs, setting, true);//update--
  2535. tools.orderReshowData(sheet, controller.tree.selected.designs, setting, 'design', true);//update--
  2536. });
  2537. }
  2538. else {
  2539. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.designs, 'design');
  2540. }
  2541. }
  2542. },
  2543. upMove: function (controller, sheet) {
  2544. let updateSelArr = [];
  2545. $('#upMove').attr('doing', 'true');
  2546. tools.btnClose($('#upMove'));
  2547. let args = controller.tree.selected.args,
  2548. thisDesign = controller.tree.selected.designs[args.row],
  2549. preDesign = controller.tree.selected.designs[args.row - 1],
  2550. tempSerialNo;
  2551. //switch serialNo
  2552. tempSerialNo = thisDesign.serialNo;
  2553. thisDesign.serialNo = preDesign.serialNo;
  2554. preDesign.serialNo = tempSerialNo;
  2555. updateSelArr.push({ id: thisDesign.design.data.id, serialNo: thisDesign.serialNo });
  2556. updateSelArr.push({ id: preDesign.design.data.id, serialNo: preDesign.serialNo });
  2557. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'designs', function () {
  2558. tools.orderReshowData(sheet, controller.tree.selected.designs, designsSetting, 'design', true);
  2559. sheet.setActiveCell(args.row - 1, args.col);
  2560. controller.tree.selected.args.row = args.row - 1;
  2561. $('#upMove').attr('doing', 'false');
  2562. if (tools.canUpMove(controller.tree.selected.designs[controller.tree.selected.args.row], controller.tree.selected.designs)) {
  2563. $('#upMove').attr('canMove', 'true');
  2564. tools.btnAction($('#upMove'));
  2565. }
  2566. else {
  2567. $('#upMove').attr('canMove', 'false');
  2568. }
  2569. if (tools.canDownMove(controller.tree.selected.designs[controller.tree.selected.args.row], controller.tree.selected.designs)) {
  2570. $('#downMove').attr('canMove', true);
  2571. tools.btnAction($('#downMove'));
  2572. }
  2573. else {
  2574. $('#downMove').attr('canMove', 'false');
  2575. tools.btnClose($('#downMove'));
  2576. }
  2577. });
  2578. },
  2579. downMove: function (controller, sheet) {
  2580. let updateSelArr = [];
  2581. $('#downMove').attr('doing', 'true');
  2582. tools.btnClose($('#downMove'));
  2583. let tempSerialNo = controller.tree.selected.designs[controller.tree.selected.args.row].serialNo;
  2584. controller.tree.selected.designs[controller.tree.selected.args.row].serialNo = controller.tree.selected.designs[controller.tree.selected.args.row + 1].serialNo;
  2585. controller.tree.selected.designs[controller.tree.selected.args.row + 1].serialNo = tempSerialNo;
  2586. updateSelArr.push({ id: controller.tree.selected.designs[controller.tree.selected.args.row].design.data.id, serialNo: controller.tree.selected.designs[controller.tree.selected.args.row].serialNo });
  2587. updateSelArr.push({ id: controller.tree.selected.designs[controller.tree.selected.args.row + 1].design.data.id, serialNo: controller.tree.selected.designs[controller.tree.selected.args.row + 1].serialNo });
  2588. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'designs', function () {
  2589. tools.orderReshowData(sheet, controller.tree.selected.designs, designsSetting, 'design', true);
  2590. sheet.setActiveCell(controller.tree.selected.args.row + 1, controller.tree.selected.args.col);
  2591. controller.tree.selected.args.row = controller.tree.selected.args.row + 1;
  2592. $('#downMove').attr('doing', 'false');
  2593. if (tools.canDownMove(controller.tree.selected.designs[controller.tree.selected.args.row], controller.tree.selected.designs)) {
  2594. $('#downMove').attr('canMove', 'true');
  2595. tools.btnAction($('#downMove'));
  2596. }
  2597. else {
  2598. $('#downMove').attr('canMove', 'false');
  2599. }
  2600. if (tools.canUpMove(controller.tree.selected.designs[controller.tree.selected.args.row], controller.tree.selected.designs)) {
  2601. $('#upMove').attr('canMove', 'true');
  2602. tools.btnAction($('#upMove'));
  2603. }
  2604. else {
  2605. $('#upMove').attr('canMove', 'false');
  2606. tools.btnClose($('#upMove'));
  2607. }
  2608. });
  2609. }
  2610. };
  2611. var itemsController = {
  2612. currentEditData: null,
  2613. totalItems: null,
  2614. onEditStart: function (sender, args) {
  2615. let me = itemsController;
  2616. me.currentEditData = args.sheet.getValue(args.row, args.col);
  2617. },
  2618. onEditEnded: function (sender, args) {
  2619. let me = itemsController;
  2620. let controller = dbController.controller;
  2621. let totalItems = me.totalItems;
  2622. let setting = itemsSetting;
  2623. let sheet = args.sheet;
  2624. var field, newData = args.editingText, id = sheet.getTag(args.row, args.col);
  2625. setting.cols.forEach(function (col, idx) {
  2626. if (args.col === idx) {
  2627. field = col.data.field;
  2628. }
  2629. });
  2630. if (controller.tree.selected && newData != me.currentEditData) {
  2631. var isExist = tools.isExist(totalItems.itemsArr, field, newData);
  2632. var isRepeat = tools.isRepeat(controller.tree.selected.items, field, newData, 'reference', 'item');
  2633. //create
  2634. if (!id && newData && !isRepeat) {
  2635. if (isExist) {
  2636. itemsController.createExist(sheet, controller, totalItems, field, newData, args, setting);
  2637. }
  2638. else {
  2639. itemsController.createNew(sheet, controller, totalItems, field, newData, args, setting);
  2640. }
  2641. }
  2642. //update
  2643. else if (id && !isRepeat) {
  2644. itemsController.update(sheet, controller, totalItems, field, newData, id, isExist, args, setting);
  2645. }
  2646. //处理重复
  2647. if (isRepeat) {
  2648. tools.alertOpr(args, sheet, '该项目特征已存在!', controller.tree.selected.items, 'item');
  2649. }
  2650. }
  2651. else {
  2652. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  2653. }
  2654. },
  2655. editData: function (sheet) {
  2656. let me = itemsController;
  2657. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  2658. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  2659. },
  2660. createNew: function (sheet, controller, totalItems, field, newData, args, setting) {
  2661. if (field === 'content') {
  2662. maxItemsNumber++;
  2663. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  2664. itemsAjax.edCreateItem(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxItemsNumber, serialNo, function (newItemId) {
  2665. let newItemData, newItem;
  2666. newItemData = { id: newItemId, content: newData, code: maxItemsNumber };
  2667. newItem = createObj.newItem(newItemData);
  2668. newItem.count = 1;
  2669. totalItems.items[totalItems.prefix + newItemId] = newItem;
  2670. totalItems.itemsArr.push(newItem);
  2671. controller.tree.selected.items.push({ item: newItem, serialNo: serialNo });
  2672. //tools.reshowData(sheet, controllers.tree.selected.items, setting, true);
  2673. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  2674. });
  2675. }
  2676. else {
  2677. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.items, 'item');
  2678. }
  2679. },
  2680. createExist: function (sheet, controller, totalItems, field, newData, args, setting) {
  2681. totalItems.itemsArr.forEach(function (item) {
  2682. if (field === 'content' && newData === item.data.content) {
  2683. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  2684. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'items', { id: item.data.id, serialNo: serialNo });
  2685. item.count++;
  2686. controller.tree.selected.items.push({ item: item, serialNo: serialNo });
  2687. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  2688. }
  2689. else if (field == 'code' && newData == item.data.code) {
  2690. let serialNo = tools.getSerialNo(controller.tree.selected.items);
  2691. billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'items', { id: item.data.id, serialNo: serialNo });
  2692. item.count++;
  2693. controller.tree.selected.items.push({ item: item, serialNo: serialNo });
  2694. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  2695. }
  2696. });
  2697. },
  2698. update: function (sheet, controller, totalItems, field, newData, id, isExist, args, setting) {
  2699. if (isExist) {
  2700. totalItems.itemsArr.forEach(function (item) {
  2701. if (field == 'code' && item.data[field] == newData) {
  2702. let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo;
  2703. let index = tools.getIndex(controller.tree.selected.items, id, 'item');
  2704. item.count++;
  2705. controller.tree.selected.items.splice(index, 1);
  2706. controller.tree.selected.items.splice(index, 0, { item: item, serialNo: serialNo });
  2707. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  2708. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  2709. }
  2710. if (field === 'content' && item.data[field] === newData) {
  2711. let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo;
  2712. let index = tools.getIndex(controller.tree.selected.items, id, 'item');
  2713. item.count++;
  2714. controller.tree.selected.items.splice(index, 1);
  2715. controller.tree.selected.items.splice(index, 0, { item: item, serialNo: serialNo });
  2716. billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
  2717. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  2718. }
  2719. });
  2720. }
  2721. else {
  2722. if (field === 'content') {
  2723. maxItemsNumber++;
  2724. let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo;
  2725. itemsAjax.edUpdateItem(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxItemsNumber, id, function (newItemId) {
  2726. var newItemData, newItem;
  2727. newItemData = { id: newItemId, content: newData, code: maxItemsNumber };
  2728. newItem = createObj.newItem(newItemData);
  2729. newItem.count = 1;
  2730. totalItems.items[totalItems.prefix + newItemId] = newItem;
  2731. totalItems.itemsArr.push(newItem);
  2732. var index = tools.getIndex(controller.tree.selected.items, id, 'item');
  2733. controller.tree.selected.items.splice(index, 1);
  2734. controller.tree.selected.items.splice(index, 0, { item: newItem, serialNo: serialNo });
  2735. tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
  2736. });
  2737. }
  2738. else {
  2739. tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.items, 'item');
  2740. }
  2741. }
  2742. },
  2743. upMove: function (controller, sheet) {
  2744. let updateSelArr = [];
  2745. $('#upMove').attr('doing', 'true');
  2746. tools.btnClose($('#upMove'));
  2747. let tempSerialNo = controller.tree.selected.items[controller.tree.selected.args.row].serialNo;
  2748. controller.tree.selected.items[controller.tree.selected.args.row].serialNo = controller.tree.selected.items[controller.tree.selected.args.row - 1].serialNo;
  2749. controller.tree.selected.items[controller.tree.selected.args.row - 1].serialNo = tempSerialNo;
  2750. updateSelArr.push({ id: controller.tree.selected.items[controller.tree.selected.args.row].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row].serialNo });
  2751. updateSelArr.push({ id: controller.tree.selected.items[controller.tree.selected.args.row - 1].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row - 1].serialNo });
  2752. billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'items', function () {
  2753. tools.orderReshowData(sheet, controller.tree.selected.items, itemsSetting, 'item', true);
  2754. sheet.setActiveCell(controller.tree.selected.args.row - 1, controller.tree.selected.args.col);
  2755. controller.tree.selected.args.row = controller.tree.selected.args.row - 1;
  2756. $('#upMove').attr('doing', 'false');
  2757. if (tools.canUpMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)) {
  2758. $('#upMove').attr('canMove', 'true');
  2759. tools.btnAction($('#upMove'));
  2760. }
  2761. else {
  2762. $('#upMove').attr('canMove', 'false');
  2763. }
  2764. if (tools.canDownMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)) {
  2765. $('#downMove').attr('canMove', 'true');
  2766. tools.btnAction($('#downMove'));
  2767. }
  2768. else {
  2769. $('#downMove').attr('canMove', 'false');
  2770. tools.btnClose($('#downMove'));
  2771. }
  2772. });
  2773. },
  2774. downMove: function (controller, sheet) {
  2775. let updateSelArr = [];
  2776. $('#downMove').attr('doing', 'true');
  2777. tools.btnClose($('#downMove'));
  2778. let tempSerialNo = controller.tree.selected.items[controller.tree.selected.args.row].serialNo;
  2779. controller.tree.selected.items[controller.tree.selected.args.row].serialNo = controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo;
  2780. controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo = tempSerialNo;
  2781. updateSelArr.push({ id: controller.tree.selected.items[controller.tree.selected.args.row].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row].serialNo });
  2782. updateSelArr.push({ id: controller.tree.selected.items[controller.tree.selected.args.row + 1].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo });
  2783. billsAjax.updateSerialNo(userAccount, billsLibId, controller.tree.selected.getID(), updateSelArr, 'items', function () {
  2784. tools.orderReshowData(sheet, controller.tree.selected.items, itemsSetting, 'item', true);
  2785. sheet.setActiveCell(controller.tree.selected.args.row + 1, controller.tree.selected.args.col);
  2786. controller.tree.selected.args.row = controller.tree.selected.args.row + 1;
  2787. $('#downMove').attr('doing', 'false');
  2788. if (tools.canDownMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)) {
  2789. $('#downMove').attr('canMove', 'true');
  2790. tools.btnAction($('#downMove'));
  2791. }
  2792. else {
  2793. $('#downMove').attr('canMove', 'false');
  2794. }
  2795. if (tools.canUpMove(controller.tree.selected.items[controlle.tree.selected.args.row], controller.tree.selected.items)) {
  2796. $('#upMove').attr('canMove', 'true');
  2797. tools.btnAction($('#upMove'));
  2798. }
  2799. else {
  2800. $('#upMove').attr('canMove', 'false');
  2801. tools.btnClose($('#upMove'));
  2802. }
  2803. });
  2804. }
  2805. };
  2806. var valueController = {
  2807. currentEditData: null,
  2808. onEditStart: function (sender, args) {
  2809. let me = valueController;
  2810. me.currentEditData = args.sheet.getValue(args.row, args.col);
  2811. },
  2812. onEditEnded: function (sender, args) {
  2813. let me = valueController;
  2814. let totalItems = totalItemsController.totalItems;
  2815. let sheet = args.sheet;
  2816. let setting = eigenValueSetting;
  2817. var newValue = args.editingText, tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  2818. setting.cols.forEach(function (col, colIdx) {
  2819. if (args.col === colIdx) {
  2820. field = col.data.field;
  2821. }
  2822. });
  2823. if (selectedId && newValue !== me.currentEditData) {
  2824. isRepeat = tools.isRepeat(valueController.getValues(totalItems, selectedId), field, newValue, 'document');
  2825. if (!tagId && !isRepeat && newValue) {//create
  2826. valueController.createValue(sheet, totalItems, selectedId, field, newValue, args);
  2827. }
  2828. else if (tagId && !isRepeat) {//update
  2829. valueController.updateValue(totalItems, tagId, newValue, field, args);
  2830. }
  2831. if (isRepeat) {
  2832. if (tagId && newValue) {
  2833. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(me.currentEditData);
  2834. }
  2835. else {
  2836. sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
  2837. }
  2838. }
  2839. }
  2840. else {
  2841. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  2842. }
  2843. },
  2844. editData: function (sheet) {
  2845. let me = valueController;
  2846. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  2847. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  2848. },
  2849. createValue: function (sheet, totalItems, id, field, newValue, args) {
  2850. var newData;
  2851. if (field === 'value') {
  2852. var newCode = valueController.getCode(totalItems, id);
  2853. newData = { code: newCode, value: newValue };
  2854. totalItems.findItem(id).data.itemValue.push(newData);
  2855. let valueArr = valueController.getValues(totalItems, id);
  2856. tools.reshowValue(args.sheet, valueArr, eigenValueSetting, true);
  2857. // tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode);
  2858. }
  2859. else {
  2860. if (!isNaN(newValue)) {
  2861. newData = { code: newValue, value: '' };
  2862. totalItems.findItem(id).data.itemValue.push(newData);
  2863. let valueArr = valueController.getValues(totalItems, id);
  2864. tools.reshowValue(args.sheet, valueArr, eigenValueSetting, true);
  2865. //tools.reSetCell(sheet, sheet.getActiveRowIndex(), null, null, newValue);
  2866. }
  2867. else {
  2868. //编号只能为数字!
  2869. sheet.getCell(args.row, args.col).value('');
  2870. }
  2871. }
  2872. itemsAjax.updateValue(userAccount, billsLibId, id, newData, null, 'create');
  2873. valueDatas = tools.getsheetDatas(sheet, 'total');
  2874. },
  2875. updateValue: function (totalItems, tagId, newData, field, args) {
  2876. var updateData = { code: tagId, newData: newData, field: field };
  2877. var itemVals = totalItems.findItem(selectedId).data.itemValue;
  2878. if (field === 'value') {
  2879. var updateEle = { code: tagId, value: newData };
  2880. if (itemVals) {
  2881. var index;
  2882. itemVals.forEach(function (val) {
  2883. if (val.code === tagId) {
  2884. index = itemVals.indexOf(val);
  2885. itemVals.splice(index, 1);
  2886. }
  2887. });
  2888. itemVals.splice(index, 0, updateEle);
  2889. }
  2890. itemsAjax.updateValue(userAccount, billsLibId, selectedId, updateData, null, 'update');
  2891. }
  2892. else {
  2893. if (isNumber(newData)) {
  2894. if (itemVals) {
  2895. var updateEle;
  2896. var index;
  2897. itemVals.forEach(function (val) {
  2898. if (val.code === tagId) {
  2899. updateEle = { code: parseInt(newData), value: val.value };
  2900. index = itemVals.indexOf(val);
  2901. itemVals.splice(index, 1);
  2902. }
  2903. });
  2904. itemVals.splice(index, 0, updateEle);
  2905. }
  2906. tools.reshowValue(args.sheet, itemVals, eigenValueSetting, true);
  2907. itemsAjax.updateValue(userAccount, billsLibId, selectedId, updateData, null, 'update');
  2908. }
  2909. else {
  2910. //编号只能为数字!
  2911. args.sheet.getCell(args.row, args.col).value(args.sheet.getValue(0, args.col) ? args.sheet.getValue(0, args.col) : '');
  2912. }
  2913. }
  2914. },
  2915. getValues: function (totalItems, id) {
  2916. return totalItems.findItem(id).data.itemValue;
  2917. },
  2918. getTopItem: function (totalItems) {
  2919. tools.resort(totalItems.itemsArr, 'code', false);
  2920. return totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0] : null
  2921. },
  2922. getCode: function (totalItems, id) {
  2923. var valArr = totalItems.findItem(id).data.itemValue;
  2924. if (valArr) {
  2925. tools.resort(valArr, 'code', true);
  2926. return valArr.length > 0 ? parseInt(valArr[valArr.length - 1].code) + 1 : 1;
  2927. } else {
  2928. return 1;
  2929. }
  2930. },
  2931. isRepeat: function (arr, newValue) {
  2932. var isRepeat = false;
  2933. arr.forEach(function (itemValue) {
  2934. if (itemValue.value === newValue) {
  2935. isRepeat = true;
  2936. }
  2937. });
  2938. return isRepeat;
  2939. }
  2940. };
  2941. var totalJobsController = {
  2942. currentEditData: null,
  2943. totalJobs: null,
  2944. onEditStart: function (sender, args) {
  2945. let me = totalJobsController;
  2946. me.currentEditData = args.sheet.getValue(args.row, args.col);
  2947. },
  2948. onEditEnded: function (sender, args) {
  2949. let me = totalJobsController;
  2950. let totalJobs = me.totalJobs;
  2951. let sheet = args.sheet;
  2952. let setting = totalJobsSetting;
  2953. var newData = args.editingText, tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  2954. setting.cols.forEach(function (col, colIdx) {
  2955. if (args.col === colIdx) {
  2956. field = col.data.field;
  2957. }
  2958. });
  2959. if (newData != me.currentEditData) {
  2960. isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference', null);
  2961. if (!tagId && !isRepeat && newData) {//create
  2962. totalJobsController.createJob(sheet, totalJobs, field, newData, args);
  2963. }
  2964. else if (tagId && !isRepeat) {//update
  2965. totalJobsController.updateJob(totalJobs, tagId, field, newData, args);
  2966. }
  2967. if (isRepeat) {
  2968. tools.alertTotalOpr(args, '该工作内容已存在!', totalJobs.jobsArr);
  2969. }
  2970. }
  2971. else {
  2972. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  2973. }
  2974. },
  2975. editData: function (sheet) {
  2976. let me = totalJobsController;
  2977. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  2978. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  2979. },
  2980. createJob: function (sheet, totalJobs, field, newData, args) {
  2981. if (field === 'content') {
  2982. maxJobsNumber++;
  2983. let code = maxJobsNumber;
  2984. jobsAjax.createJobContent(userAccount, billsLibId, newData, code, function (newJobId) {
  2985. let newJobData, newJob;
  2986. newJobData = { id: newJobId, content: newData, code: code };
  2987. newJob = createObj.newJob(newJobData);
  2988. totalJobs.jobsArr.push(newJob);
  2989. //tools.reSetCell(sheet, args.row, 0, code, newJobId);
  2990. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  2991. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  2992. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  2993. });
  2994. }
  2995. else {
  2996. let parseNum = parseInt(newData);
  2997. //if(typeof newData === 'number'){
  2998. if (!isNaN(parseNum)) {
  2999. maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
  3000. jobsAjax.createJobContent(userAccount, billsLibId, '', newData, function (newJobId) {
  3001. let newJobData, newJob;
  3002. newJobData = { id: newJobId, content: '', code: newData };
  3003. newJob = createObj.newJob(newJobData);
  3004. totalJobs.jobsArr.push(newJob);
  3005. //tools.reSetCell(sheet, args.row, 0, null, newJobId);
  3006. tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
  3007. setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
  3008. sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
  3009. });
  3010. }
  3011. else {
  3012. //编号只能为数字!
  3013. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalJobs.jobsArr);
  3014. // sheet.getCell(args.row, args.col).value("");
  3015. }
  3016. }
  3017. },
  3018. updateJob: function (totalJobs, id, field, newData, args) {
  3019. // if(field === 'code' && typeof newData !== 'number'){
  3020. if (field === 'code' && isNaN(parseInt(newData))) {
  3021. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalJobs.jobsArr);
  3022. }
  3023. else {
  3024. totalJobs.jobsArr.forEach(function (job) {
  3025. if (job.data.id === id) {
  3026. job.data[field] = newData;
  3027. }
  3028. });
  3029. tools.reshowData(args.sheet, totalJobs.jobsArr, totalJobsSetting, true);
  3030. jobsAjax.updateJobContent(userAccount, billsLibId, id, field, newData);
  3031. }
  3032. }
  3033. };
  3034. var totalDesignsController = {
  3035. currentEditData: null,
  3036. totalDesigns: null,
  3037. onEditStart: function (sender, args) {
  3038. let me = totalDesignsController;
  3039. me.currentEditData = args.sheet.getValue(args.row, args.col);
  3040. },
  3041. onEditEnded: function (sender, args) {
  3042. debugger;
  3043. let me = totalDesignsController;
  3044. let totalDesigns = me.totalDesigns;
  3045. let sheet = args.sheet;
  3046. let setting = totalDesignsSetting;
  3047. var newData = args.editingText, tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  3048. setting.cols.forEach(function (col, colIdx) {
  3049. if (args.col === colIdx) {
  3050. field = col.data.field;
  3051. }
  3052. });
  3053. if (newData != me.currentEditData) {
  3054. isRepeat = tools.isDesignRepeat(totalDesigns.designsArr, field, newData, 'reference', null, args.sheet, args.row);
  3055. if (!tagId && !isRepeat && newData) {//create
  3056. totalDesignsController.createDesign(sheet, totalDesigns, field, newData, args);
  3057. }
  3058. else if (tagId && !isRepeat) {//update
  3059. totalDesignsController.updateDesign(totalDesigns, tagId, field, newData, args);
  3060. }
  3061. if (isRepeat) {
  3062. tools.alertTotalOpr(args, '该内容已存在!', totalDesigns.designsArr);
  3063. }
  3064. }
  3065. else {
  3066. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  3067. }
  3068. },
  3069. editData: function (sheet) {
  3070. let me = totalDesignsController;
  3071. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  3072. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  3073. },
  3074. createDesign: function (sheet, totalDesigns, field, newData, args) {
  3075. if (field === 'name' || field === 'unit') {
  3076. maxDesignsNumber++;
  3077. let code = maxDesignsNumber;
  3078. designsAjax.createDesignContent(userAccount, billsLibId, field, newData, code, function (newDesignId) {
  3079. let newDesignData, newDesign;
  3080. newDesignData = { id: newDesignId, [field]: newData, code: code };
  3081. newDesign = createObj.newDesign(newDesignData);
  3082. totalDesigns.designsArr.push(newDesign);
  3083. //tools.reSetCell(sheet, args.row, 0, code, newDesignId);
  3084. tools.reshowData(sheet, totalDesigns.designsArr, totalDesignsSetting, true);
  3085. setSheet.setMaxRowCount(sheet, totalDesigns.designsArr);
  3086. sheetDesignDatas = tools.getsheetDatas(sheet, 'total');
  3087. });
  3088. }
  3089. else {
  3090. let parseNum = parseInt(newData);
  3091. //if(typeof newData === 'number'){
  3092. if (!isNaN(parseNum)) {
  3093. maxDesignsNumber = maxDesignsNumber >= newData ? maxDesignsNumber : newData;
  3094. designsAjax.createDesignContent(userAccount, billsLibId, 'code', newData, newData, function (newDesignId) {
  3095. let newDesignData, newDesign;
  3096. newDesignData = { id: newDesignId, name: '', unit: '', code: newData };
  3097. newDesign = createObj.newDesign(newDesignData);
  3098. totalDesigns.designsArr.push(newDesign);
  3099. //tools.reSetCell(sheet, args.row, 0, null, newDesignId);
  3100. tools.reshowData(sheet, totalDesigns.designsArr, totalDesignsSetting, true);
  3101. setSheet.setMaxRowCount(sheet, totalDesigns.designsArr);
  3102. sheetDesignDatas = tools.getsheetDatas(sheet, 'total');
  3103. });
  3104. }
  3105. else {
  3106. //编号只能为数字!
  3107. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalDesigns.designsArr);
  3108. // sheet.getCell(args.row, args.col).value("");
  3109. }
  3110. }
  3111. },
  3112. updateDesign: function (totalDesigns, id, field, newData, args) {
  3113. // if(field === 'code' && typeof newData !== 'number'){
  3114. if (field === 'code' && isNaN(parseInt(newData))) {
  3115. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalDesigns.designsArr);
  3116. }
  3117. else {
  3118. totalDesigns.designsArr.forEach(function (job) {
  3119. if (job.data.id === id) {
  3120. job.data[field] = newData;
  3121. }
  3122. });
  3123. tools.reshowData(args.sheet, totalDesigns.designsArr, totalDesignsSetting, true);
  3124. designsAjax.updateDesignContent(userAccount, billsLibId, id, field, newData);
  3125. }
  3126. }
  3127. };
  3128. var totalItemsController = {
  3129. currentEditData: null,
  3130. totalItems: null,
  3131. onEditStart: function (sender, args) {
  3132. let me = totalItemsController;
  3133. me.currentEditData = args.sheet.getValue(args.row, args.col);
  3134. },
  3135. onEditEnded: function (sender, args) {
  3136. let me = totalItemsController;
  3137. let totalItems = me.totalItems;
  3138. let sheet = args.sheet;
  3139. let setting = totalItemsSetting;
  3140. var newData = args.editingText, tagId = sheet.getTag(args.row, args.col), field, isRepeat;
  3141. setting.cols.forEach(function (col, colIdx) {
  3142. if (args.col === colIdx) {
  3143. field = col.data.field;
  3144. }
  3145. });
  3146. if (newData != me.currentEditData) {
  3147. isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference', null);
  3148. if (!tagId && !isRepeat && newData) {//create
  3149. totalItemsController.createItem(sheet, totalItems, field, newData, args);
  3150. }
  3151. else if (tagId && !isRepeat) {//update
  3152. totalItemsController.updateItem(totalItems, tagId, field, newData, args);
  3153. }
  3154. else if (isRepeat) {
  3155. tools.alertTotalOpr(args, '该项目特征已存在!', totalItems.itemsArr);
  3156. }
  3157. }
  3158. else {
  3159. sheet.getCell(args.row, args.col).value(me.currentEditData ? me.currentEditData : '');
  3160. }
  3161. },
  3162. editData: function (sheet) {
  3163. let me = totalItemsController;
  3164. sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStart);
  3165. sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
  3166. },
  3167. createItem: function (sheet, totalItems, field, newData, args) {
  3168. if (field === 'content') {
  3169. maxItemsNumber++;
  3170. let code = maxItemsNumber;
  3171. itemsAjax.createItemCharacter(userAccount, billsLibId, newData, code, function (newItemId) {
  3172. var newItemData, newItem;
  3173. newItemData = { id: newItemId, content: newData, code: code, itemValue: [] };
  3174. newItem = createObj.newItem(newItemData);
  3175. totalItems.itemsArr.push(newItem);
  3176. totalItems.items[totalItems.prefix + newItemId] = newItem;
  3177. //tools.reSetCell(sheet, args.row, 0, code, newItemId);
  3178. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  3179. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  3180. totalItemsDatas = tools.getsheetDatas(sheet, 'total');
  3181. });
  3182. }
  3183. else {
  3184. if (!isNaN(parseInt(newData))) {
  3185. maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
  3186. itemsAjax.createItemCharacter(userAccount, billsLibId, '', newData, function (newItemId) {
  3187. var newItemData, newItem;
  3188. newItemData = { id: newItemId, content: '', code: newData, itemValue: [] };
  3189. newItem = createObj.newItem(newItemData);
  3190. totalItems.itemsArr.push(newItem);
  3191. totalItems.items[totalItems.prefix + newItemId] = newItem;
  3192. //tools.reSetCell(sheet, args.row, 0, null, newItemId);
  3193. tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
  3194. setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
  3195. totalItemsDatas = tools.getsheetDatas(sheet, 'total');
  3196. });
  3197. }
  3198. else {
  3199. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalItems.itemsArr);
  3200. }
  3201. }
  3202. },
  3203. updateItem: function (totalItems, id, field, newData, args) {
  3204. if (field === 'code' && isNaN(parseInt(newData))) {
  3205. tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalItems.itemsArr);
  3206. }
  3207. else {
  3208. totalItems.itemsArr.forEach(function (item) {
  3209. if (item.data.id === id) {
  3210. item.data[field] = newData;
  3211. }
  3212. });
  3213. tools.reshowData(args.sheet, totalItems.itemsArr, totalItemsSetting, true);
  3214. itemsAjax.updateItemCharacter(userAccount, billsLibId, id, field, newData);
  3215. }
  3216. }
  3217. };
  3218. var rechargeController = {
  3219. updateRechar: function (selectedNode, newData) {
  3220. if (selectedNode) {
  3221. var updateId = selectedNode.getID();
  3222. selectedNode.data.recharge = newData;
  3223. /*var getupdateIds = function(node){
  3224. updateIds.push(node.getID());
  3225. node.data.recharge = newData;
  3226. if(node.children.length > 0){
  3227. node.children.forEach(function(node){
  3228. getupdateIds(node);
  3229. });
  3230. }
  3231. }
  3232. getupdateIds(tools.getRoot(selectedNode));*/
  3233. billsAjax.updateRecharge(userAccount, billsLibId, updateId, newData);
  3234. }
  3235. else {
  3236. codeEditor.setValue('');
  3237. //$('exampleTextarea').val('');
  3238. }
  3239. },
  3240. createRecharge: function (node) {
  3241. if (node) {
  3242. var tempId = [];
  3243. tempId.push(node.getID());
  3244. var rootNode = tools.getRoot(node);
  3245. if (rootNode.data.recharge && rootNode !== node) {
  3246. billsAjax.updateRecharge(userAccount, billsLibId, tempId, rootNode.data.recharge);
  3247. node.data.recharge = rootNode.data.recharge;
  3248. //$('#exampleTextarea').val(node.data.recharge);
  3249. codeEditor.setValue(node.data.recharge);
  3250. }
  3251. else {
  3252. node.data.recharge = '';
  3253. //$('#exampleTextarea').val('');
  3254. codeEditor.setValue('');
  3255. }
  3256. }
  3257. else {
  3258. codeEditor.setValue('');
  3259. //$('exampleTextarea').val('');
  3260. }
  3261. }
  3262. };
  3263. function isNumber(num) {
  3264. return !isNaN(num) && num % 1 === 0;
  3265. }