db_controller.js 150 KB

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