pivotTable.js 138 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177
  1. import { getSheetIndex, getRangetxt } from '../methods/get';
  2. import {
  3. replaceHtml,
  4. getObjType,
  5. ABCatNum,
  6. numFormat,
  7. numfloatlen,
  8. showrightclickmenu,
  9. mouseclickposition
  10. } from '../utils/util';
  11. import { getdatabyselectionD, getcellvalue, datagridgrowth } from '../global/getdata';
  12. import { isdatetime, diff, isdatatypemulti, isdatatype } from '../global/datecontroll';
  13. import { genarate, update } from '../global/format';
  14. import { isRealNull, isEditMode } from '../global/validate';
  15. import { orderbydata1D } from '../global/sort';
  16. import { jfrefreshgrid, jfrefreshgridall } from '../global/refresh';
  17. import tooltip from '../global/tooltip';
  18. import editor from '../global/editor';
  19. import cleargridelement from '../global/cleargridelement';
  20. import luckysheetArray from '../global/array';
  21. import analysis from '../global/analysis';
  22. import { selectHightlightShow } from './select';
  23. import { luckysheet_searcharray } from './sheetSearch';
  24. import {
  25. modelHTML,
  26. filtermenuHTML,
  27. filtersubmenuHTML,
  28. pivottableconfigHTML,
  29. pivottablesumHTML,
  30. luckysheetPivotTableHTML
  31. } from './constant';
  32. import sheetmanage from './sheetmanage';
  33. import luckysheetsizeauto from './resize';
  34. import server from './server';
  35. import {checkProtectionAuthorityNormal} from './protection';
  36. import Store from '../store';
  37. import locale from '../locale/locale';
  38. import numeral from 'numeral';
  39. import { luckysheetlodingHTML } from '../controllers/constant';
  40. const pivotTable = {
  41. pivotDatas: null,
  42. pivotSheetIndex: 0,
  43. pivotDataSheetIndex: 0,
  44. celldata: null,
  45. origindata: null,
  46. getCellData: function (cursheetindex, datasheetindex, data_select_save) {
  47. let _this = this;
  48. let sheetIndex;
  49. if (cursheetindex != null) {
  50. sheetIndex = cursheetindex;
  51. }
  52. else {
  53. sheetIndex = Store.currentSheetIndex;
  54. }
  55. let realIndex = getSheetIndex(sheetIndex);
  56. if (getObjType(Store.luckysheetfile[realIndex].pivotTable) != "object"){
  57. Store.luckysheetfile[realIndex].pivotTable = new Function("return " + Store.luckysheetfile[realIndex].pivotTable )();
  58. }
  59. if (Store.luckysheetfile[realIndex].pivotTable != null) {
  60. _this.column = Store.luckysheetfile[realIndex].pivotTable.column;
  61. _this.row = Store.luckysheetfile[realIndex].pivotTable.row;
  62. _this.values = Store.luckysheetfile[realIndex].pivotTable.values;
  63. _this.filter = Store.luckysheetfile[realIndex].pivotTable.filter;
  64. _this.showType = Store.luckysheetfile[realIndex].pivotTable.showType;
  65. _this.filterparm = Store.luckysheetfile[realIndex].pivotTable.filterparm;
  66. if (Store.luckysheetfile[realIndex].pivotTable.drawPivotTable != null) {
  67. _this.drawPivotTable = Store.luckysheetfile[realIndex].pivotTable.drawPivotTable;
  68. }
  69. else {
  70. _this.drawPivotTable = true;
  71. }
  72. if (Store.luckysheetfile[realIndex].pivotTable.pivotTableBoundary != null) {
  73. _this.pivotTableBoundary = Store.luckysheetfile[realIndex].pivotTable.pivotTableBoundary;
  74. }
  75. else {
  76. _this.pivotTableBoundary = [12, 6];
  77. }
  78. if (data_select_save != null) {
  79. _this.pivot_select_save = data_select_save;
  80. }
  81. else {
  82. _this.pivot_select_save = Store.luckysheetfile[realIndex].pivotTable.pivot_select_save;
  83. }
  84. if (datasheetindex != null) {
  85. _this.pivotDataSheetIndex = datasheetindex;
  86. }
  87. else {
  88. _this.pivotDataSheetIndex = Store.luckysheetfile[realIndex].pivotTable.pivotDataSheetIndex;
  89. }
  90. }
  91. else {
  92. _this.column = null;
  93. _this.row = null;
  94. _this.values = null;
  95. _this.filter = null;
  96. _this.showType = null;
  97. _this.filterparm = null;
  98. _this.drawPivotTable = true;
  99. _this.pivotTableBoundary = [12, 6];
  100. if (data_select_save != null) {
  101. _this.pivot_select_save = data_select_save;
  102. }
  103. else {
  104. _this.pivot_select_save = Store.luckysheet_select_save;
  105. }
  106. if (datasheetindex != null) {
  107. _this.pivotDataSheetIndex = datasheetindex;
  108. }
  109. else {
  110. _this.pivotDataSheetIndex = sheetIndex;
  111. }
  112. }
  113. let pivotrealIndex = getSheetIndex(_this.pivotDataSheetIndex);
  114. let otherfile = Store.luckysheetfile[pivotrealIndex];
  115. if(otherfile["data"] == null){
  116. otherfile["data"] = sheetmanage.buildGridData(otherfile);
  117. }
  118. _this.origindata = getdatabyselectionD(otherfile.data, _this.pivot_select_save);
  119. let rowhidden = {};
  120. if (_this.filterparm != null) {
  121. for (let f in _this.filterparm) {
  122. // 目的是取出rowhidden
  123. for (let h in _this.filterparm[f]) {
  124. if (h === 'rowhidden' && _this.filterparm[f][h] != null) {
  125. rowhidden = $.extend(true, rowhidden, _this.filterparm[f][h]);
  126. }
  127. }
  128. }
  129. }
  130. _this.rowhidden = rowhidden;
  131. _this.pivotSheetIndex = sheetIndex;
  132. let newdata = [];
  133. for (let i = 0; i < _this.origindata.length; i++) {
  134. if (_this.rowhidden != null && _this.rowhidden[i] != null) {
  135. continue;
  136. }
  137. newdata.push([].concat(_this.origindata[i]));
  138. }
  139. _this.celldata = newdata;
  140. _this.pivot_data_type = {};
  141. for (let c = 0; c < _this.celldata[1].length; c++) {
  142. let type = isdatatype(_this.celldata[1][c]);
  143. _this.pivot_data_type[c.toString()] = type;
  144. }
  145. },
  146. pivot_data_type: {},
  147. pivot_select_save: null,
  148. column: null,
  149. row: null,
  150. values: null,
  151. filter: null,
  152. showType: null,
  153. rowhidden: null,
  154. selected: null,
  155. caljs: null,
  156. initial: true,
  157. filterparm: null,
  158. luckysheet_pivotTable_select_state: false,
  159. jgridCurrentPivotInput: null,
  160. movestate: false,
  161. moveitemposition: [],
  162. movesave: {},
  163. showvaluecolrow: function () {
  164. let _this = this;
  165. if ($("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").length >= 2) {
  166. $("#luckysheetpivottablevaluecolrowshow").show();
  167. if (_this.showType == "column") {
  168. $("#luckysheetpivottablevaluecolrow").prop("checked", true);
  169. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").addClass("ui-state-active");
  170. $("#luckysheetpivottablevaluecolrow1").prop("checked", false);
  171. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").removeClass("ui-state-active");
  172. }
  173. else {
  174. $("#luckysheetpivottablevaluecolrow1").prop("checked", true);
  175. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").addClass("ui-state-active");
  176. $("#luckysheetpivottablevaluecolrow").prop("checked", false);
  177. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").removeClass("ui-state-active");
  178. }
  179. }
  180. else {
  181. $("#luckysheetpivottablevaluecolrowshow").hide();
  182. }
  183. },
  184. resetOrderby: function (obj) {
  185. let orderby = $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").index(obj);
  186. $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").find(".luckysheet-modal-dialog-slider-config-item").each(function () {
  187. if ($(this).data("orderby") == orderby) {
  188. $(this).data("orderby", "self");
  189. }
  190. });
  191. },
  192. luckysheetsliderlistclearfilter: function ($filter) {
  193. let _this = this;
  194. let $t = $filter.parent();
  195. let cindex = $t.data("index");
  196. let rowhidden = {},
  197. selected = {},
  198. d = _this.origindata,
  199. filterdata = {};
  200. $t.data("rowhidden", "").find(".luckysheet-slider-list-item-filtered").hide();
  201. _this.setDatatojsfile("selected", {}, cindex);
  202. _this.setDatatojsfile("rowhidden", null, cindex);
  203. let newdata = [];
  204. for (let i = 0; i < d.length; i++) {
  205. if (rowhidden[i] != null) {
  206. continue;
  207. }
  208. newdata.push([].concat(d[i]));
  209. }
  210. _this.celldata = newdata;
  211. _this.refreshPivotTable();
  212. $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
  213. },
  214. luckysheetsliderlistitemfilter: function ($filter) {
  215. let _this = this;
  216. const _locale = locale();
  217. const locale_filter = _locale.filter;
  218. let $t = $filter.parent(),
  219. toffset = $t.offset(),
  220. $menu = $("#luckysheet-pivotTableFilter-menu"),
  221. winH = $(window).height(),
  222. winW = $(window).width();
  223. let cindex = $t.data("index");
  224. let rowhidden = $t.data("rowhidden");
  225. if(rowhidden == null || rowhidden == ""){
  226. rowhidden = {};
  227. }
  228. else if(getObjType(rowhidden) == "string"){
  229. rowhidden = JSON.parse(rowhidden);
  230. }
  231. $("body .luckysheet-cols-menu").hide();
  232. $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
  233. $("#luckysheet-pivotTableFilter-byvalue-input").val("");
  234. $("#luckysheet-pivotTableFilter-bycondition").next().hide();
  235. $("#luckysheet-pivotTableFilter-byvalue").next().show();
  236. $menu.data("index", cindex);
  237. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide().find("input").val();
  238. $("#luckysheet-pivotTableFilter-selected span").data("type", "0").data("type", null).text(locale_filter.filiterInputNone);
  239. let byconditiontype = $t.data("byconditiontype");
  240. $("#luckysheet-pivotTableFilter-selected span").data("value", $t.data("byconditionvalue")).data("type", byconditiontype).text($t.data("byconditiontext"));
  241. if (byconditiontype == "2") {
  242. let $input = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2").show().find("input");
  243. $input.eq(0).val($t.data("byconditionvalue1"));
  244. $input.eq(1).val($t.data("byconditionvalue2"));
  245. }
  246. else if (byconditiontype == "1") {
  247. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").eq(0).show().find("input").val($t.data("byconditionvalue1"));
  248. }
  249. const loadingObj = luckysheetlodingHTML("#luckysheet-pivotTableFilter-byvalue-select",{text:locale_filter.filiterMoreDataTip});
  250. $("#luckysheet-pivotTableFilter-byvalue-select").empty().append(loadingObj.el)
  251. let rowhiddenother = {}; //其它筛选列的隐藏行
  252. $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").not($t.get(0)).each(function () {
  253. let $t = $(this), rh = $t.data("rowhidden");
  254. if (rh == null || rh == "") {
  255. return true;
  256. }
  257. if(getObjType(rh) == "string"){
  258. rh = JSON.parse(rh);
  259. }
  260. for (let r in rh) {
  261. rowhiddenother[r] = 0;
  262. }
  263. });
  264. let data = _this.origindata;
  265. setTimeout(function () {
  266. //日期值
  267. let dvmap = {};
  268. let dvmap_uncheck = {};
  269. //除日期以外的值
  270. let vmap = {};
  271. let vmap_uncheck = {};
  272. for (let r = 1; r < data.length; r++) {
  273. if(r in rowhiddenother){
  274. continue;
  275. }
  276. if(data[r] == null){
  277. continue;
  278. }
  279. let cell = data[r][cindex];
  280. if(cell != null && cell.ct != null && cell.ct.t == "d"){ //单元格是日期
  281. let v = update("YYYY-MM-DD", cell.v);
  282. let y = v.split("-")[0];
  283. let m = v.split("-")[1];
  284. let d = v.split("-")[2];
  285. if(!(y in dvmap)){
  286. dvmap[y] = {};
  287. }
  288. if(!(m in dvmap[y])){
  289. dvmap[y][m] = {};
  290. }
  291. if(!(d in dvmap[y][m])){
  292. dvmap[y][m][d] = 0;
  293. }
  294. dvmap[y][m][d]++;
  295. if(r in rowhidden){
  296. dvmap_uncheck[y] = 0;
  297. dvmap_uncheck[m] = 0;
  298. dvmap_uncheck[d] = 0;
  299. }
  300. }
  301. else{
  302. let v, m;
  303. if(cell == null || isRealNull(cell.v)){
  304. v = null;
  305. m = null;
  306. }
  307. else{
  308. v = cell.v;
  309. m = cell.m;
  310. }
  311. if(!(v in vmap)){
  312. vmap[v] = {};
  313. }
  314. if(!(m in vmap[v])){
  315. vmap[v][m] = 0;
  316. }
  317. vmap[v][m]++;
  318. if(r in rowhidden){
  319. vmap_uncheck[v + "#$$$#" + m] = 0;
  320. }
  321. }
  322. }
  323. //遍历数据加到页面
  324. let item = [];
  325. if(JSON.stringify(dvmap).length > 2){
  326. for(let y in dvmap){
  327. let ysum = 0;
  328. let monthHtml = '';
  329. for(let m in dvmap[y]){
  330. let msum = 0;
  331. let dayHtml = '';
  332. for(let d in dvmap[y][m]){
  333. let dayL = dvmap[y][m][d];
  334. msum += dayL;
  335. //月 小于 10
  336. let mT;
  337. if(Number(m) < 10){
  338. mT = "0" + Number(m);
  339. }
  340. else{
  341. mT = m;
  342. }
  343. //日 小于 10
  344. let dT;
  345. if(Number(d) < 10){
  346. dT = "0" + Number(d);
  347. }
  348. else{
  349. dT = d;
  350. }
  351. //日是否选中状态
  352. if((y in dvmap_uncheck) && (m in dvmap_uncheck) && (d in dvmap_uncheck)){
  353. dayHtml += '<div class="day luckysheet-mousedown-cancel cf" data-check="false" title="'+ y +'-'+ mT +'-'+ dT +'">' +
  354. '<input class="luckysheet-mousedown-cancel" type="checkbox"/>' +
  355. '<label class="luckysheet-mousedown-cancel">' + d + '</label>' +
  356. '<span class="count luckysheet-mousedown-cancel">( ' + dayL + ' )</span>' +
  357. '</div>';
  358. }
  359. else{
  360. dayHtml += '<div class="day luckysheet-mousedown-cancel cf" data-check="true" title="'+ y +'-'+ mT +'-'+ dT +'">' +
  361. '<input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/>' +
  362. '<label class="luckysheet-mousedown-cancel">' + d + '</label>' +
  363. '<span class="count luckysheet-mousedown-cancel">( ' + dayL + ' )</span>' +
  364. '</div>';
  365. }
  366. }
  367. ysum += msum;
  368. //月 小于 10
  369. let mT2;
  370. if(Number(m) < 10){
  371. mT2 = "0" + Number(m);
  372. }
  373. else{
  374. mT2 = m;
  375. }
  376. //月是否选中状态
  377. if((y in dvmap_uncheck) && (m in dvmap_uncheck)){
  378. monthHtml += '<div class="monthBox luckysheet-mousedown-cancel">' +
  379. '<div class="month luckysheet-mousedown-cancel cf" data-check="false" title="'+ y +'-'+ mT2 +'">' +
  380. '<i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i>' +
  381. '<input class="luckysheet-mousedown-cancel" type="checkbox"/>' +
  382. '<label class="luckysheet-mousedown-cancel">' + m + ''+locale_filter.filiterMonthText+'</label>' +
  383. '<span class="count luckysheet-mousedown-cancel">( ' + msum + ' )</span>' +
  384. '</div>' +
  385. '<div class="dayList luckysheet-mousedown-cancel">' + dayHtml + '</div>' +
  386. '</div>';
  387. }
  388. else{
  389. monthHtml += '<div class="monthBox luckysheet-mousedown-cancel">' +
  390. '<div class="month luckysheet-mousedown-cancel cf" data-check="true" title="'+ y +'-'+ mT2 +'">' +
  391. '<i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i>' +
  392. '<input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/>' +
  393. '<label class="luckysheet-mousedown-cancel">' + m + ''+locale_filter.filiterMonthText+'</label>' +
  394. '<span class="count luckysheet-mousedown-cancel">( ' + msum + ' )</span>' +
  395. '</div>' +
  396. '<div class="dayList luckysheet-mousedown-cancel">' + dayHtml + '</div>' +
  397. '</div>';
  398. }
  399. }
  400. //年是否选中状态
  401. let yearHtml;
  402. if(y in dvmap_uncheck){
  403. yearHtml = '<div class="yearBox luckysheet-mousedown-cancel">' +
  404. '<div class="year luckysheet-mousedown-cancel cf" data-check="false" title="'+ y +'">' +
  405. '<i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i>' +
  406. '<input class="luckysheet-mousedown-cancel" type="checkbox"/>' +
  407. '<label class="luckysheet-mousedown-cancel">' + y + ''+locale_filter.filiterYearText+'</label>' +
  408. '<span class="count luckysheet-mousedown-cancel">( ' + ysum + ' )</span>' +
  409. '</div>' +
  410. '<div class="monthList luckysheet-mousedown-cancel">' + monthHtml + '</div>' +
  411. '</div>';
  412. }
  413. else{
  414. yearHtml = '<div class="yearBox luckysheet-mousedown-cancel">' +
  415. '<div class="year luckysheet-mousedown-cancel cf" data-check="true" title="'+ y +'">' +
  416. '<i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i>' +
  417. '<input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/>' +
  418. '<label class="luckysheet-mousedown-cancel">' + y + ''+locale_filter.filiterYearText+'</label>' +
  419. '<span class="count luckysheet-mousedown-cancel">( ' + ysum + ' )</span>' +
  420. '</div>' +
  421. '<div class="monthList luckysheet-mousedown-cancel">' + monthHtml + '</div>' +
  422. '</div>';
  423. }
  424. item.unshift(yearHtml);
  425. }
  426. }
  427. if(JSON.stringify(vmap).length > 2){
  428. let vmapKeys = Object.keys(vmap);
  429. vmapKeys = orderbydata1D(vmapKeys, true);
  430. for(let i = 0; i < vmapKeys.length; i++){
  431. let v = vmapKeys[i];
  432. for(let x in vmap[v]){
  433. let text;
  434. if((v + "#$$$#" + x) == "null#$$$#null"){
  435. text = locale_filter.valueBlank;
  436. }
  437. else{
  438. text = x;
  439. }
  440. //是否选中状态
  441. let dataHtml;
  442. if((v + "#$$$#" + x) in vmap_uncheck){
  443. dataHtml = '<div class="textBox luckysheet-mousedown-cancel cf" data-check="false" data-filter="'+ (v + "#$$$#" + x) +'" title="'+ x +'">' +
  444. '<input class="luckysheet-mousedown-cancel" type="checkbox"/>' +
  445. '<label class="luckysheet-mousedown-cancel">' + text + '</label>' +
  446. '<span class="luckysheet-mousedown-cancel count">( ' + vmap[v][x] + ' )</span>' +
  447. '</div>';
  448. }
  449. else{
  450. dataHtml = '<div class="textBox luckysheet-mousedown-cancel cf" data-check="true" data-filter="'+ (v + "#$$$#" + x) +'" title="'+ x +'">' +
  451. '<input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/>' +
  452. '<label class="luckysheet-mousedown-cancel">' + text + '</label>' +
  453. '<span class="luckysheet-mousedown-cancel count">( ' + vmap[v][x] + ' )</span>' +
  454. '</div>';
  455. }
  456. item.push(dataHtml);
  457. }
  458. }
  459. }
  460. // 适配小屏设备
  461. let containerH = winH - toffset.top - 350
  462. if (containerH < 0) containerH = 100
  463. //$("#luckysheet-pivotTableFilter-byvalue-select").html("<div class='ListBox luckysheet-mousedown-cancel' style='max-height:" + containerH + "px;overflow-y:auto;overflow-x:hidden;'>" + item.join("") + "</div>");
  464. $("#luckysheet-pivotTableFilter-byvalue-select").append("<div class='ListBox luckysheet-mousedown-cancel' style='max-height:" + containerH + "px;overflow-y:auto;overflow-x:hidden;'>" + item.join("") + "</div>");
  465. loadingObj.close()
  466. }, 1);
  467. showrightclickmenu($menu, toffset.left - 250, toffset.top);
  468. },
  469. getSumTypeName: function (type) {
  470. let name = "";
  471. const _locale = locale();
  472. const locale_pivotTable = _locale.pivotTable;
  473. if (type == "SUM") {
  474. name = locale_pivotTable.valueStatisticsSUM;
  475. }
  476. else if (type == "COUNT") {
  477. name = locale_pivotTable.valueStatisticsCOUNT;
  478. }
  479. else if (type == "COUNTA") {
  480. name = locale_pivotTable.valueStatisticsCOUNTA;
  481. }
  482. else if (type == "COUNTUNIQUE") {
  483. name = locale_pivotTable.valueStatisticsCOUNTUNIQUE;
  484. }
  485. else if (type == "AVERAGE") {
  486. name = locale_pivotTable.valueStatisticsAVERAGE;
  487. }
  488. else if (type == "MAX") {
  489. name = locale_pivotTable.valueStatisticsMAX;
  490. }
  491. else if (type == "MIN") {
  492. name = locale_pivotTable.valueStatisticsMIN;
  493. }
  494. else if (type == "MEDIAN") {
  495. name = locale_pivotTable.valueStatisticsMEDIAN;
  496. }
  497. else if (type == "PRODUCT") {
  498. name = locale_pivotTable.valueStatisticsPRODUCT;
  499. }
  500. else if (type == "STDEV") {
  501. name = locale_pivotTable.valueStatisticsSTDEV;
  502. }
  503. else if (type == "STDEVP") {
  504. name = locale_pivotTable.valueStatisticsSTDEVP;
  505. }
  506. else if (type == "let") {
  507. name = locale_pivotTable.valueStatisticslet;
  508. }
  509. else if (type == "VARP") {
  510. name = locale_pivotTable.valueStatisticsVARP;
  511. }
  512. return name;
  513. },
  514. setDatatojsfile: function (attr, value, cindex) {
  515. let _this = this;
  516. let index = getSheetIndex(_this.pivotSheetIndex);
  517. if (Store.luckysheetfile[index]["pivotTable"] == null) {
  518. Store.luckysheetfile[index]["pivotTable"] = {};
  519. }
  520. if (cindex == null) {
  521. Store.luckysheetfile[index]["pivotTable"][attr] = value;
  522. _this[attr] = value;
  523. }
  524. else {
  525. if (Store.luckysheetfile[index]["pivotTable"]["filterparm"] == null) {
  526. Store.luckysheetfile[index]["pivotTable"]["filterparm"] = {};
  527. }
  528. if (Store.luckysheetfile[index]["pivotTable"]["filterparm"][cindex.toString()] == null) {
  529. Store.luckysheetfile[index]["pivotTable"]["filterparm"][cindex.toString()] = {};
  530. }
  531. Store.luckysheetfile[index]["pivotTable"]["filterparm"][cindex.toString()][attr] = value;
  532. if (_this["filterparm"] == null) {
  533. _this["filterparm"] = {};
  534. }
  535. if (_this["filterparm"][cindex.toString()] == null) {
  536. _this["filterparm"][cindex.toString()] = {};
  537. }
  538. _this["filterparm"][cindex.toString()][attr] = value;
  539. }
  540. },
  541. createPivotTable: function (e) {
  542. if(isEditMode() || Store.allowEdit===false){
  543. return;
  544. }
  545. let _this = this;
  546. let datasheetindex = Store.currentSheetIndex;
  547. const _locale = locale();
  548. const locale_pivotTable = _locale.pivotTable;
  549. if(isEditMode()){
  550. alert(locale_pivotTable.errorNotAllowEdit);
  551. return;
  552. }
  553. if(Store.luckysheet_select_save.length > 1){
  554. tooltip.info("", locale_pivotTable.errorNotAllowMulti);
  555. return
  556. }
  557. if (Store.luckysheet_select_save.length == 0 || Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] || Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1]) {
  558. tooltip.info("", locale_pivotTable.errorSelectRange);
  559. return;
  560. }
  561. let select_save = $.extend(true, {}, Store.luckysheet_select_save[0]);
  562. sheetmanage.addNewSheet(e, true);
  563. _this.getCellData(Store.currentSheetIndex, datasheetindex, select_save);
  564. _this.setDatatojsfile("pivot_select_save", select_save);
  565. _this.setDatatojsfile("pivotDataSheetIndex", datasheetindex);
  566. _this.initialPivotManage();
  567. },
  568. changePivotTable: function (index) {
  569. let _this = this;
  570. const _locale = locale();
  571. const locale_pivotTable = _locale.pivotTable;
  572. let pivotDataSheetIndex = Store.luckysheetfile[getSheetIndex(index)].pivotTable.pivotDataSheetIndex;
  573. let real_pivotDataSheetIndex = getSheetIndex(pivotDataSheetIndex);
  574. if(real_pivotDataSheetIndex == null){
  575. tooltip.info(locale_pivotTable.errorIsDamage, "");
  576. return;
  577. }
  578. _this.getCellData(index);
  579. _this.initialPivotManage(true);
  580. _this.refreshPivotTable(); //初始化在一个普通sheet页,从此普通sheet页切换到数据透视表页时,需要刷新下数据,否则还是旧数据
  581. },
  582. refreshPivotTable: function (isRefreshCanvas=true) {
  583. let _this = this;
  584. let redo = {};
  585. redo["pivotTable"] = pivotTable;
  586. redo["data"] = editor.deepCopyFlowData(Store.flowdata);//取数据
  587. _this.storePivotTableParam();
  588. let ret = _this.dataHandler(_this.column, _this.row, _this.values, _this.showType, _this.celldata);
  589. _this.setDatatojsfile("pivotDatas", ret);
  590. let d = $.extend(true, [], sheetmanage.nulldata);
  591. let data = d;
  592. let addr = 0, addc = 0;
  593. if (ret.length == 0) {
  594. _this.setDatatojsfile("drawPivotTable", true);
  595. _this.setDatatojsfile("pivotTableBoundary", [12, 6]);
  596. }
  597. else {
  598. _this.setDatatojsfile("drawPivotTable", false);
  599. _this.setDatatojsfile("pivotTableBoundary", [ret.length, ret[0].length]);
  600. let rlen = ret.length,
  601. clen = ret[0].length;
  602. addr = rlen - d.length;
  603. addc = clen - d[0].length;
  604. data = datagridgrowth(d, addr + 20, addc + 10, true);
  605. for (let r = 0; r < rlen; r++) {
  606. let x = [].concat(data[r]);
  607. for (let c = 0; c < clen; c++) {
  608. let value = "";
  609. if (ret[r] != null && ret[r][c] != null) {
  610. value = getcellvalue(r, c, ret);
  611. }
  612. x[c] = value;
  613. }
  614. data[r] = x;
  615. }
  616. }
  617. redo["type"] = "pivotTable_change";
  618. redo["curdata"] = $.extend(true, [], data);
  619. redo["sheetIndex"] = Store.currentSheetIndex;
  620. redo["pivotTablecur"] = _this.getPivotTableData();
  621. if(Store.clearjfundo){
  622. Store.jfundo.length = 0;
  623. Store.jfredo.push(redo);
  624. }
  625. cleargridelement();
  626. Store.clearjfundo = false;
  627. if (addr > 0 || addc > 0) {
  628. jfrefreshgridall(data[0].length, data.length, data, null, Store.luckysheet_select_save, "datachangeAll", undefined, undefined,isRefreshCanvas);
  629. }
  630. else {
  631. jfrefreshgrid(data, Store.luckysheet_select_save, {}, null, isRefreshCanvas);
  632. selectHightlightShow();
  633. }
  634. Store.clearjfundo = true;
  635. },
  636. drawPivotTable: true,
  637. pivotTableBoundary: [12, 6],
  638. pivotclick: function (row_index, col_index, index) {
  639. if(index == null){
  640. index = Store.currentSheetIndex;
  641. }
  642. let file = Store.luckysheetfile[getSheetIndex(index)];
  643. if(!file.isPivotTable){
  644. return;
  645. }
  646. let pivotDataSheetIndex = file.pivotTable.pivotDataSheetIndex;
  647. let real_pivotDataSheetIndex = getSheetIndex(pivotDataSheetIndex);
  648. if(real_pivotDataSheetIndex == null){
  649. return;
  650. }
  651. let slider = $("#luckysheet-modal-dialog-slider-pivot");
  652. let isRangeClick = this.isPivotRange(row_index, col_index);
  653. if (isRangeClick && slider.is(":hidden")) {
  654. if(!checkProtectionAuthorityNormal(index, "usePivotTablereports",false)){
  655. // Store.luckysheet_select_status = false;
  656. return;
  657. }
  658. slider.show();
  659. luckysheetsizeauto();
  660. $("#luckysheet-sta-content").css("padding-right", 260);
  661. }
  662. else if(!isRangeClick && slider.is(":visible")) {
  663. slider.hide();
  664. luckysheetsizeauto();
  665. $("#luckysheet-sta-content").css("padding-right", 10);
  666. }
  667. },
  668. isPivotRange: function (row_index, col_index) {
  669. let _this = this;
  670. if (!!Store.luckysheetcurrentisPivotTable) {
  671. if (row_index < _this.pivotTableBoundary[0] && col_index < _this.pivotTableBoundary[1]) {
  672. return true;
  673. }
  674. else {
  675. return false;
  676. }
  677. }
  678. },
  679. storePivotTableParam: function () {
  680. let _this = this;
  681. let columnarr = [], rowarr = [], filterarr = [], valuesarr = [];
  682. $("#luckysheet-modal-dialog-config-filter .luckysheet-modal-dialog-slider-config-item").each(function () {
  683. let item = {};
  684. item["index"] = $(this).data("index");
  685. item["name"] = $(this).data("name");
  686. item["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
  687. filterarr.push(item);
  688. });
  689. $("#luckysheet-modal-dialog-config-row .luckysheet-modal-dialog-slider-config-item").each(function () {
  690. let item = {};
  691. item["index"] = $(this).data("index");
  692. item["name"] = $(this).data("name");
  693. item["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
  694. item["order"] = $(this).data("order");
  695. item["orderby"] = $(this).data("orderby");
  696. item["stastic"] = $(this).data("stastic");
  697. rowarr.push(item);
  698. });
  699. $("#luckysheet-modal-dialog-config-column .luckysheet-modal-dialog-slider-config-item").each(function () {
  700. let item = {};
  701. item["index"] = $(this).data("index");
  702. item["name"] = $(this).data("name");
  703. item["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
  704. item["order"] = $(this).data("order");
  705. item["orderby"] = $(this).data("orderby");
  706. item["stastic"] = $(this).data("stastic");
  707. columnarr.push(item);
  708. });
  709. $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").each(function () {
  710. let item = {};
  711. item["index"] = $(this).data("index");
  712. item["name"] = $(this).data("name");
  713. item["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
  714. item["sumtype"] = $(this).data("sumtype");
  715. item["nameindex"] = $(this).data("nameindex");
  716. valuesarr.push(item);
  717. });
  718. _this.setDatatojsfile("column", columnarr);
  719. _this.setDatatojsfile("row", rowarr);
  720. _this.setDatatojsfile("filter", filterarr);
  721. _this.setDatatojsfile("values", valuesarr);
  722. let showtype = $("#luckysheetpivottablevaluecolrow:checked, #luckysheetpivottablevaluecolrow1:checked").val();
  723. _this.setDatatojsfile("showType", showtype == "0" ? "row" : "column");
  724. let pivotTable = _this.getPivotTableData();
  725. delete pivotTable.pivotDatas;
  726. server.saveParam("all", _this.pivotSheetIndex, pivotTable, { "k": "pivotTable" });
  727. },
  728. getPivotTableData: function(dataindex){
  729. if(dataindex == null){
  730. dataindex = this.pivotSheetIndex;
  731. }
  732. let index = getSheetIndex(dataindex);
  733. let pivotTable = Store.luckysheetfile[index]["pivotTable"];
  734. if(getObjType(pivotTable) == "object"){
  735. pivotTable = $.extend(true, {}, Store.luckysheetfile[index]["pivotTable"]);
  736. }
  737. else{
  738. pivotTable = new Function("return " + pivotTable )();
  739. }
  740. return pivotTable
  741. },
  742. addValuesToTitle: function (titles, values) {
  743. let rowLen = titles.length * values.length,
  744. colLen = titles[0].length + 1;
  745. let retdata = [];
  746. if (titles.length == 0 && values.length > 0) {
  747. for (let v = 0; v < values.length; v++) {
  748. retdata.push(values[v].fullname);
  749. }
  750. return retdata;
  751. }
  752. if (values.length == 0 && titles.length > 0) {
  753. return titles;
  754. }
  755. for (let r = 0; r < rowLen; r++) {
  756. retdata[r] = new Array(colLen);
  757. for (let c = 0; c < colLen - 1; c++) {
  758. retdata[r][c] = titles[Math.floor(r / values.length)][c];
  759. }
  760. retdata[r][colLen - 1] = values[r % values.length].fullname;
  761. }
  762. return retdata;
  763. },
  764. initialPivotManage: function (restore) {
  765. let _this = this;
  766. const _locale = locale();
  767. const locale_pivotTable = _locale.pivotTable;
  768. const locale_button = _locale.button;
  769. const locale_filter = _locale.filter;
  770. if (_this.initial) {
  771. _this.initial = false;
  772. $("body").append(luckysheetPivotTableHTML());
  773. $("#luckysheet-modal-dialog-slider-close").click(function () {
  774. $("#luckysheet-modal-dialog-slider-pivot").hide();
  775. luckysheetsizeauto();
  776. });
  777. $("body").append(replaceHtml(modelHTML, { "id": "luckysheet-data-pivotTable-selection", "addclass": "luckysheet-data-pivotTable-selection", "title": locale_pivotTable.titleSelectionDataRange, "content": '<input id="luckysheet-pivotTable-range-selection-input" class="luckysheet-datavisual-range-container" style="font-size: 14px;padding:5px;max-width:none;" spellcheck="false" aria-label="'+locale_pivotTable.titleDataRange+'" placeholder="'+locale_pivotTable.titleDataRange+'">', "botton": '<button id="luckysheet-pivotTable-selection-confirm" class="btn btn-primary">'+locale_button.confirm+'</button><button class="btn btn-default luckysheet-model-close-btn">'+locale_button.cancel+'</button>' }));
  778. $("body").append(replaceHtml(filtermenuHTML(), { "menuid": "pivotTableFilter" }));
  779. $("body").append(replaceHtml(filtersubmenuHTML(), { "menuid": "pivotTableFilter" }));
  780. $("body").append(pivottableconfigHTML());
  781. $("body").append(pivottablesumHTML());
  782. $("#luckysheet-pivotTableFilter-orderby-asc").remove();
  783. $("#luckysheet-pivotTableFilter-orderby-desc").next().remove();
  784. $("#luckysheet-pivotTableFilter-orderby-desc").remove();
  785. $("#luckysheet-pivotTableFilter-orderby-color").next().remove();
  786. $("#luckysheet-pivotTableFilter-orderby-color").remove();
  787. $("#luckysheetpivottablevaluecolrow, #luckysheetpivottablevaluecolrow1").checkboxradio({
  788. icon: false
  789. }).change(function () {
  790. _this.refreshPivotTable();
  791. });
  792. let hidefilersubmenu = null;
  793. $("#luckysheet-pivotTableFilter-menu").mouseover(function () {
  794. clearTimeout(hidefilersubmenu);
  795. hidefilersubmenu = setTimeout(function () {
  796. $("#luckysheet-pivotTableFilter-submenu").hide();
  797. }, 500);
  798. });
  799. //点击复选框
  800. $(document).off("click.ptFilterCheckbox1").on("click.ptFilterCheckbox1", "#luckysheet-pivotTableFilter-byvalue-select .textBox",function(){
  801. if($(this).attr("data-check") == "true"){
  802. $(this).attr("data-check", "false");
  803. $(this).find("input[type='checkbox']").removeAttr("checked");
  804. }
  805. else{
  806. $(this).attr("data-check", "true");
  807. $(this).find("input[type='checkbox']").prop("checked", true);
  808. }
  809. })
  810. $(document).off("click.ptFilterCheckbox2").on("click.ptFilterCheckbox2", "#luckysheet-pivotTableFilter-byvalue-select .year",function(){
  811. if($(this).attr("data-check") == "true"){
  812. $(this).attr("data-check", "false");
  813. $(this).parents(".yearBox").find(".month").attr("data-check", "false");
  814. $(this).parents(".yearBox").find(".day").attr("data-check", "false");
  815. $(this).parents(".yearBox").find("input[type='checkbox']").removeAttr("checked");
  816. }
  817. else{
  818. $(this).attr("data-check", "true");
  819. $(this).parents(".yearBox").find(".month").attr("data-check", "true");
  820. $(this).parents(".yearBox").find(".day").attr("data-check", "true");
  821. $(this).parents(".yearBox").find("input[type='checkbox']").prop("checked", true);
  822. }
  823. })
  824. $(document).off("click.ptFilterCheckbox3").on("click.ptFilterCheckbox3", "#luckysheet-pivotTableFilter-byvalue-select .month",function(){
  825. //月份 对应的 天
  826. if($(this).attr("data-check") == "true"){
  827. $(this).attr("data-check", "false");
  828. $(this).parents(".monthBox").find(".day").attr("data-check", "false");
  829. $(this).parents(".monthBox").find("input[type='checkbox']").removeAttr("checked");
  830. }
  831. else{
  832. $(this).attr("data-check", "true");
  833. $(this).parents(".monthBox").find(".day").attr("data-check", "true");
  834. $(this).parents(".monthBox").find("input[type='checkbox']").prop("checked", true);
  835. }
  836. //月份 对应的 年份
  837. let yearDayAllCheck = true;
  838. let $yearDay = $(this).parents(".yearBox").find(".day");
  839. $yearDay.each(function(i,e){
  840. if($(e).attr("data-check") == "true"){
  841. }
  842. else{
  843. yearDayAllCheck = false;
  844. }
  845. });
  846. if(yearDayAllCheck){
  847. $(this).parents(".yearBox").find(".year").attr("data-check", "true");
  848. $(this).parents(".yearBox").find(".year input[type='checkbox']").prop("checked", true);
  849. }
  850. else{
  851. $(this).parents(".yearBox").find(".year").attr("data-check", "false");
  852. $(this).parents(".yearBox").find(".year input[type='checkbox']").removeAttr("checked");
  853. }
  854. })
  855. $(document).off("click.ptFilterCheckbox4").on("click.ptFilterCheckbox4", "#luckysheet-pivotTableFilter-byvalue-select .day",function(){
  856. if($(this).attr("data-check") == "true"){
  857. $(this).attr("data-check", "false");
  858. $(this).find("input[type='checkbox']").removeAttr("checked");
  859. }
  860. else{
  861. $(this).attr("data-check", "true");
  862. $(this).find("input[type='checkbox']").prop("checked", true);
  863. }
  864. //天 对应的 月份
  865. let monthDayAllCheck = true;
  866. let $monthDay = $(this).parents(".monthBox").find(".day");
  867. $monthDay.each(function(i,e){
  868. if($(e).attr("data-check") == "true"){
  869. }
  870. else{
  871. monthDayAllCheck = false;
  872. }
  873. });
  874. if(monthDayAllCheck){
  875. $(this).parents(".monthBox").find(".month").attr("data-check", "true");
  876. $(this).parents(".monthBox").find(".month input[type='checkbox']").prop("checked", true);
  877. }
  878. else{
  879. $(this).parents(".monthBox").find(".month").attr("data-check", "false");
  880. $(this).parents(".monthBox").find(".month input[type='checkbox']").removeAttr("checked");
  881. }
  882. //天 对应的 年份
  883. let yearDayAllCheck = true;
  884. let $yearDay = $(this).parents(".yearBox").find(".day");
  885. $yearDay.each(function(i,e){
  886. if($(e).attr("data-check") == "true"){
  887. }
  888. else{
  889. yearDayAllCheck = false;
  890. }
  891. });
  892. if(yearDayAllCheck){
  893. $(this).parents(".yearBox").find(".year").attr("data-check", "true");
  894. $(this).parents(".yearBox").find(".year input[type='checkbox']").prop("checked", true);
  895. }
  896. else{
  897. $(this).parents(".yearBox").find(".year").attr("data-check", "false");
  898. $(this).parents(".yearBox").find(".year input[type='checkbox']").removeAttr("checked");
  899. }
  900. })
  901. //日期 三级下拉显示
  902. $(document).off("click.ptFilterYearDropdown").on("click.ptFilterYearDropdown", "#luckysheet-pivotTableFilter-byvalue-select .yearBox .fa-caret-right",function(){
  903. let $p = $(this).parents(".luckysheet-mousedown-cancel");
  904. if($p.hasClass("year")){
  905. $(this).parents(".yearBox").find(".monthList").slideToggle();
  906. }
  907. if($p.hasClass("month")){
  908. $(this).parents(".monthBox").find(".dayList").slideToggle();
  909. }
  910. });
  911. //全选
  912. $("#luckysheet-pivotTableFilter-byvalue-btn-all").click(function () {
  913. $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").prop("checked", true);
  914. $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").parents(".luckysheet-mousedown-cancel").attr("data-check", "true");
  915. });
  916. //反选
  917. $("#luckysheet-pivotTableFilter-byvalue-btn-contra").click(function () {
  918. let $input = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']");
  919. $input.each(function(i, e){
  920. if($(e).is(":checked")){
  921. $(e).removeAttr("checked");
  922. $(e).parents(".luckysheet-mousedown-cancel").attr("data-check", "false");
  923. }
  924. else{
  925. $(e).prop("checked", true);
  926. $(e).parents(".luckysheet-mousedown-cancel").attr("data-check", "true");
  927. }
  928. });
  929. //天 对应的 月份
  930. let $month = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .monthBox");
  931. $month.each(function(index, event){
  932. let monthDayAllCheck = true;
  933. let $monthDay = $(event).find(".day input[type='checkbox']");
  934. $monthDay.each(function(i,e){
  935. if($(e).is(":checked")){
  936. }
  937. else{
  938. monthDayAllCheck = false;
  939. }
  940. });
  941. if(monthDayAllCheck){
  942. $(event).find(".month input[type='checkbox']").prop("checked", true);
  943. $(event).attr("data-check", "true");
  944. }
  945. else{
  946. $(event).find(".month input[type='checkbox']").removeAttr("checked");
  947. $(event).attr("data-check", "false");
  948. }
  949. });
  950. //天 对应的 年份
  951. let $year = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .yearBox");
  952. $year.each(function(index, event){
  953. let yearDayAllCheck = true;
  954. let $yearDay = $(event).find(".day input[type='checkbox']");
  955. $yearDay.each(function(i,e){
  956. if($(e).is(":checked")){
  957. }
  958. else{
  959. yearDayAllCheck = false;
  960. }
  961. });
  962. if(yearDayAllCheck){
  963. $(event).find(".year input[type='checkbox']").prop("checked", true);
  964. $(event).attr("data-check", "true");
  965. }
  966. else{
  967. $(event).find(".year input[type='checkbox']").removeAttr("checked");
  968. $(event).attr("data-check", "false");
  969. }
  970. });
  971. });
  972. //清除
  973. $("#luckysheet-pivotTableFilter-byvalue-btn-clear").click(function () {
  974. $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").removeAttr("checked");
  975. $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").parents(".luckysheet-mousedown-cancel").attr("data-check", "false");
  976. });
  977. //按照值进行筛选
  978. $("#luckysheet-pivotTableFilter-byvalue-input").on('input propertychange', function () {
  979. let v = $(this).val().toString();
  980. $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .luckysheet-mousedown-cancel").show();
  981. if(v != ""){
  982. let $check = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']");
  983. $check.each(function(i, e){
  984. let $p = $(e).parents(".luckysheet-mousedown-cancel");
  985. if($p.hasClass("day")){ //日期
  986. let day = $(e).siblings("label").text().toString();
  987. let month = $(e).parents(".monthBox").find(".month label").text().toString();
  988. let year = $(e).parents(".yearBox").find(".year label").text().toString();
  989. let itemV = year + "-" + month + "-" + day;
  990. if(itemV.indexOf(v) == -1){
  991. $(e).parents(".day").hide();
  992. //天 对应的 月份
  993. let $monthDay = $(e).parents(".dayList").find(".day:visible");
  994. if($monthDay.length == 0){
  995. $(e).parents(".monthBox").find(".month").hide();
  996. }
  997. //天 对应的 年份
  998. let $yearDay = $(e).parents(".monthList").find(".day:visible");
  999. if($yearDay.length == 0){
  1000. $(e).parents(".yearBox").find(".year").hide();
  1001. }
  1002. }
  1003. }
  1004. if($p.hasClass("textBox")){ //其它
  1005. let itemV = $(e).siblings("label").text().toString();
  1006. if(itemV.indexOf(v) == -1){
  1007. $(e).parents(".textBox").hide();
  1008. }
  1009. }
  1010. });
  1011. }
  1012. });
  1013. $("#luckysheet-pivotTableFilter-bycondition, #luckysheet-pivotTableFilter-byvalue").click(function () {
  1014. let $t = $(this);
  1015. $t.next().slideToggle(200);
  1016. setTimeout(function () {
  1017. if ($t.attr("id") == "luckysheet-pivotTableFilter-bycondition" && $("#luckysheet-pivotTableFilter-bycondition").next().is(":visible")) {
  1018. if ($("#luckysheet-pivotTableFilter-selected span").text() != locale_filter.filiterInputNone) {
  1019. $("#luckysheet-pivotTableFilter-byvalue").next().slideUp(200);
  1020. }
  1021. }
  1022. if ($t.is($("#luckysheet-pivotTableFilter-bycondition"))) {
  1023. if ($("#luckysheet-pivotTableFilter-bycondition").next().is(":hidden") && $("#luckysheet-pivotTableFilter-byvalue").next().is(":hidden")) {
  1024. $("#luckysheet-pivotTableFilter-byvalue").next().slideDown(200);
  1025. }
  1026. }
  1027. }, 300);
  1028. });
  1029. //取消按钮
  1030. $("#luckysheet-pivotTableFilter-cancel").click(function () {
  1031. $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
  1032. });
  1033. $("#luckysheet-pivotTableFilter-selected").click(function () {
  1034. let $t = $(this), toffset = $t.offset(), $menu = $("#luckysheet-pivotTableFilter-submenu");
  1035. $menu.hide();
  1036. let winH = $(window).height(), winW = $(window).width();
  1037. let menuW = $menu.width(), menuH = $menu.height();
  1038. let top = toffset.top, left = toffset.left, mheight = winH - toffset.top - 20;
  1039. if (toffset.left + menuW > winW) {
  1040. left = toffset.left - menuW;
  1041. }
  1042. if (toffset.top > winH / 2) {
  1043. top = winH - toffset.top;
  1044. if (top < 0) {
  1045. top = 0;
  1046. }
  1047. mheight = toffset.top - 20;
  1048. }
  1049. $menu.css({ "top": top, "left": left, "height": mheight }).show();
  1050. clearTimeout(hidefilersubmenu);
  1051. });
  1052. //按条件过滤
  1053. $("#luckysheet-pivotTableFilter-submenu").mouseover(function () {
  1054. clearTimeout(hidefilersubmenu);
  1055. }).find(".luckysheet-cols-menuitem").click(function (e) {
  1056. $("#luckysheet-pivotTableFilter-selected span").html($(this).find(".luckysheet-cols-menuitem-content").text()).data("value", $(this).data("value"));
  1057. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide();
  1058. if ($(this).data("type") == "2") {
  1059. $("#luckysheet-pivotTableFilter-selected span").data("type", "2");
  1060. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2").show();
  1061. }
  1062. else if ($(this).data("type") == "0") {
  1063. $("#luckysheet-pivotTableFilter-selected span").data("type", "0");
  1064. }
  1065. else {
  1066. $("#luckysheet-pivotTableFilter-selected span").data("type", "1");
  1067. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").eq(0).show();
  1068. //若是日期 改变input type类型为date
  1069. if($(this).attr("data-value") == "dateequal" || $(this).attr("data-value") == "datelessthan" || $(this).attr("data-value") == "datemorethan"){
  1070. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input input").prop("type", "date");
  1071. }
  1072. else{
  1073. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input input").prop("type", "text");
  1074. }
  1075. }
  1076. $("#luckysheet-pivotTableFilter-byvalue").next().slideUp();
  1077. $("#luckysheet-pivotTableFilter-submenu").hide();
  1078. });
  1079. $("#luckysheet-modal-dialog-pivotTable-list").on("click", " .luckysheet-slider-list-item-filter", function (e) {
  1080. _this.luckysheetsliderlistitemfilter($(this));
  1081. e.stopPropagation();
  1082. return false;
  1083. });
  1084. $("#luckysheet-modal-dialog-pivotTable-list").on("click", " .luckysheet-slider-list-item-filtered", function (e) {
  1085. _this.luckysheetsliderlistclearfilter($(this).next());
  1086. e.stopPropagation();
  1087. return false;
  1088. });
  1089. $("#luckysheet-dialog-pivotTable-range-seleted").click(function () {
  1090. $("#luckysheet-modal-dialog-slider-pivot").hide();
  1091. luckysheetsizeauto();
  1092. let $t = $("#luckysheet-data-pivotTable-selection"),
  1093. myh = $t.outerHeight(),
  1094. myw = $t.outerWidth();
  1095. let winw = $(window).width(), winh = $(window).height();
  1096. let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
  1097. $("#luckysheet-data-pivotTable-selection").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 4 }).show();
  1098. _this.jgridCurrentPivotInput = $("#luckysheet-dialog-pivotTable-range").html();
  1099. $("#luckysheet-pivotTable-range-selection-input").val(_this.jgridCurrentPivotInput);
  1100. _this.luckysheet_pivotTable_select_state = true;
  1101. });
  1102. //清除筛选按钮
  1103. $("#luckysheet-pivotTableFilter-initial").click(function () {
  1104. $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-slider-list-item-filtered").hide();
  1105. $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").data("rowhidden", "");
  1106. $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
  1107. $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide().find("input").val();
  1108. $("#luckysheet-pivotTableFilter-selected span").data("type", "0").data("type", null).text(locale_filter.filiterInputNone);
  1109. _this.setDatatojsfile("filterparm", null);
  1110. _this.celldata = _this.origindata;
  1111. _this.refreshPivotTable();
  1112. });
  1113. $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").on("click", ".luckysheet-modal-dialog-slider-config-item-icon", function (e) {
  1114. let $t = $(e.target),
  1115. $item = $t.closest(".luckysheet-modal-dialog-slider-config-item"),
  1116. cindex = $item.data("index"),
  1117. toffset = $item.offset();
  1118. let order = $item.data("order"),
  1119. orderby = $item.data("orderby"),
  1120. stastic = $item.data("stastic");
  1121. if (order == null) {
  1122. order = "default";
  1123. }
  1124. let option = '<option value="self">' + $item.find(".luckysheet-modal-dialog-slider-config-item-txt").data("name") + '</option>';
  1125. $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").each(function (i) {
  1126. option += '<option value="' + i + '">' + $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text() + '</option>';
  1127. });
  1128. $("#luckysheet-pivotTable-config-option-orderby").empty().html(option);
  1129. if (orderby == null) {
  1130. orderby = "self";
  1131. }
  1132. if (stastic == null) {
  1133. stastic = "1";
  1134. }
  1135. $("#luckysheet-pivotTable-config-option-order").val(order).data("index", cindex);
  1136. $("#luckysheet-pivotTable-config-option-orderby").val(orderby).data("index", cindex);
  1137. $("#luckysheet-pivotTable-config-option-stastic").val(stastic).data("index", cindex);
  1138. mouseclickposition($("#luckysheet-pivotTable-config-option"), toffset.left + $item.outerWidth(), toffset.top - 13, "rightbottom");
  1139. e.stopPropagation();
  1140. return false;
  1141. });
  1142. $("#luckysheet-pivotTable-config-option-order,#luckysheet-pivotTable-config-option-orderby,#luckysheet-pivotTable-config-option-stastic").change(function () {
  1143. let $t = $(this), cindex = $t.data("index");
  1144. $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").find(".luckysheet-modal-dialog-slider-config-item").each(function () {
  1145. if ($(this).data("index") == cindex) {
  1146. $(this).data($t.attr("id").replace("luckysheet-pivotTable-config-option-", ""), $t.val());
  1147. }
  1148. });
  1149. _this.refreshPivotTable();
  1150. });
  1151. $("#luckysheet-modal-dialog-config-value").on("click", ".luckysheet-modal-dialog-slider-config-item-icon", function (e) {
  1152. let $t = $(e.target),
  1153. $item = $t.closest(".luckysheet-modal-dialog-slider-config-item"),
  1154. cindex = $item.data("index"),
  1155. toffset = $item.offset(),
  1156. sumtype = $item.data("sumtype");
  1157. let type = _this.pivot_data_type[cindex.toString()];
  1158. if (sumtype == null) {
  1159. if (type == "num") {
  1160. sumtype = "SUM";
  1161. }
  1162. else {
  1163. sumtype = "COUNTA";
  1164. }
  1165. }
  1166. let $menu = $("#luckysheet-pivotTable-config-option-sumtype");
  1167. $menu.find(".luckysheet-submenu-arrow").hide();
  1168. $menu.find(".luckysheet-cols-menuitem[sumtype='" + sumtype + "'] .luckysheet-submenu-arrow").css("display", "inline");
  1169. $menu.data("item", $item);
  1170. mouseclickposition($menu, toffset.left + $item.outerWidth(), toffset.top - 13, "rightbottom");
  1171. e.stopPropagation();
  1172. return false;
  1173. });
  1174. $("#luckysheet-pivotTable-config-option-sumtype .luckysheet-cols-menuitem").click(function () {
  1175. let $item = $("#luckysheet-pivotTable-config-option-sumtype").data("item");
  1176. let sumtype = $(this).attr("sumtype");
  1177. $item.data("sumtype", $(this).attr("sumtype"));
  1178. let name = _this.getSumTypeName(sumtype) + ":" + $item.data("name");
  1179. $item.attr("title", name).find(".luckysheet-modal-dialog-slider-config-item-txt").html(name);
  1180. $("#luckysheet-pivotTable-config-option-sumtype").hide();
  1181. _this.refreshPivotTable();
  1182. });
  1183. $("#luckysheet-modal-dialog-config-filter").on("click", ".luckysheet-modal-dialog-slider-config-item-icon", function (e) {
  1184. let $t = $(e.target),
  1185. cindex = $t.closest(".luckysheet-modal-dialog-slider-config-item").data("index");
  1186. _this.luckysheetsliderlistitemfilter($("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(cindex).find(".luckysheet-slider-list-item-filter"));
  1187. e.stopPropagation();
  1188. return false;
  1189. });
  1190. //确认按钮
  1191. $("#luckysheet-pivotTableFilter-confirm").click(function () {
  1192. let $menu = $("#luckysheet-pivotTableFilter-menu");
  1193. let cindex = $menu.data("index");
  1194. let rowhiddenother = {}; //其它筛选列的隐藏行
  1195. $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").each(function () {
  1196. let $t = $(this), rh = $t.data("rowhidden");
  1197. if($t.data("index") != cindex){
  1198. if (rh == null || rh == "") {
  1199. return true;
  1200. }
  1201. if(getObjType(rh) == "string"){
  1202. rh = JSON.parse(rh);
  1203. }
  1204. for (let r in rh) {
  1205. rowhiddenother[r] = 0;
  1206. }
  1207. }
  1208. });
  1209. let d = _this.origindata;
  1210. let filterdata = {};
  1211. let rowhidden = {};
  1212. let caljs = {};
  1213. if ($("#luckysheet-pivotTableFilter-bycondition").next().is(":visible") && $("#luckysheet-pivotTableFilter-byvalue").next().is(":hidden") && $("#luckysheet-pivotTableFilter-selected span").data("value") != "null") {
  1214. let $t = $("#luckysheet-pivotTableFilter-selected span");
  1215. let type = $t.data("type"), value = $t.data("value");
  1216. caljs["value"] = value;
  1217. caljs["text"] = $t.text();
  1218. if (type == "0") {
  1219. caljs["type"] = "0";
  1220. }
  1221. else if (type == "2") {
  1222. let $input = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2 input");
  1223. caljs["type"] = "2";
  1224. caljs["value1"] = $input.eq(0).val();
  1225. caljs["value2"] = $input.eq(1).val();
  1226. }
  1227. else {
  1228. caljs["type"] = "1";
  1229. caljs["value1"] = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").eq(0).find("input").val();
  1230. }
  1231. for (let r = 1; r < d.length; r++) {
  1232. if(r in rowhiddenother){
  1233. continue;
  1234. }
  1235. if(d[r] == null){
  1236. continue;
  1237. }
  1238. let cell = d[r][cindex];
  1239. if (value == "cellnull") { //单元格为空
  1240. if(cell != null && !isRealNull(cell.v)){
  1241. rowhidden[r] = 0;
  1242. }
  1243. }
  1244. else if (value == "cellnonull") { //单元格有数据
  1245. if(cell == null || isRealNull(cell.v)){
  1246. rowhidden[r] = 0;
  1247. }
  1248. }
  1249. else if (value == "textinclude") { //文本包含
  1250. let value1 = caljs["value1"];
  1251. if(cell == null || isRealNull(cell.v)){
  1252. rowhidden[r] = 0;
  1253. }
  1254. else{
  1255. if(cell.m.indexOf(value1) == -1){
  1256. rowhidden[r] = 0;
  1257. }
  1258. }
  1259. }
  1260. else if (value == "textnotinclude") { //文本不包含
  1261. let value1 = caljs["value1"];
  1262. if(cell == null || isRealNull(cell.v)){
  1263. }
  1264. else{
  1265. if(cell.m.indexOf(value1) > -1){
  1266. rowhidden[r] = 0;
  1267. }
  1268. }
  1269. }
  1270. else if (value == "textstart") { //文本开头为
  1271. let value1 = caljs["value1"], valuelen = value1.length;
  1272. if(cell == null || isRealNull(cell.v)){
  1273. rowhidden[r] = 0;
  1274. }
  1275. else{
  1276. if(cell.m.substr(0, valuelen) != value1){
  1277. rowhidden[r] = 0;
  1278. }
  1279. }
  1280. }
  1281. else if (value == "textend") { //文本结尾为
  1282. let value1 = caljs["value1"], valuelen = value1.length;
  1283. if(cell == null || isRealNull(cell.v)){
  1284. rowhidden[r] = 0;
  1285. }
  1286. else{
  1287. if(valuelen > cell.m.length || cell.m.substr(cell.m.length - valuelen, valuelen) != value1){
  1288. rowhidden[r] = 0;
  1289. }
  1290. }
  1291. }
  1292. else if (value == "textequal") { //文本等于
  1293. let value1 = caljs["value1"];
  1294. if(cell == null || isRealNull(cell.v)){
  1295. rowhidden[r] = 0;
  1296. }
  1297. else{
  1298. if(cell.m != value1){
  1299. rowhidden[r] = 0;
  1300. }
  1301. }
  1302. }
  1303. else if (value == "dateequal") { //日期等于
  1304. let value1 = genarate(caljs["value1"])[2];
  1305. if(cell == null || isRealNull(cell.v)){
  1306. rowhidden[r] = 0;
  1307. }
  1308. else if(cell.ct != null && cell.ct.t == "d"){
  1309. if(parseInt(cell.v) != value1){
  1310. rowhidden[r] = 0;
  1311. }
  1312. }
  1313. else{
  1314. rowhidden[r] = 0;
  1315. }
  1316. }
  1317. else if (value == "datelessthan") { //日期早于
  1318. let value1 = genarate(caljs["value1"])[2];
  1319. if(cell == null || isRealNull(cell.v)){
  1320. rowhidden[r] = 0;
  1321. }
  1322. else if(cell.ct != null && cell.ct.t == "d"){
  1323. if(parseInt(cell.v) >= value1){
  1324. rowhidden[r] = 0;
  1325. }
  1326. }
  1327. else{
  1328. rowhidden[r] = 0;
  1329. }
  1330. }
  1331. else if (value == "datemorethan") { //日期晚于
  1332. let value1 = genarate(caljs["value1"])[2];
  1333. if(cell == null || isRealNull(cell.v)){
  1334. rowhidden[r] = 0;
  1335. }
  1336. else if(cell.ct != null && cell.ct.t == "d"){
  1337. if(parseInt(cell.v) <= value1){
  1338. rowhidden[r] = 0;
  1339. }
  1340. }
  1341. else{
  1342. rowhidden[r] = 0;
  1343. }
  1344. }
  1345. else if (value == "morethan") { //大于
  1346. let value1 = parseFloat(caljs["value1"]);
  1347. if(cell == null || isRealNull(cell.v)){
  1348. rowhidden[r] = 0;
  1349. }
  1350. else if(cell.ct != null && cell.ct.t == "n"){
  1351. if(cell.v <= value1){
  1352. rowhidden[r] = 0;
  1353. }
  1354. }
  1355. else{
  1356. rowhidden[r] = 0;
  1357. }
  1358. }
  1359. else if (value == "moreequalthan") { //大于等于
  1360. let value1 = parseFloat(caljs["value1"]);
  1361. if(cell == null || isRealNull(cell.v)){
  1362. rowhidden[r] = 0;
  1363. }
  1364. else if(cell.ct != null && cell.ct.t == "n"){
  1365. if(cell.v < value1){
  1366. rowhidden[r] = 0;
  1367. }
  1368. }
  1369. else{
  1370. rowhidden[r] = 0;
  1371. }
  1372. }
  1373. else if (value == "lessthan") { //小于
  1374. let value1 = parseFloat(caljs["value1"]);
  1375. if(cell == null || isRealNull(cell.v)){
  1376. rowhidden[r] = 0;
  1377. }
  1378. else if(cell.ct != null && cell.ct.t == "n"){
  1379. if(cell.v >= value1){
  1380. rowhidden[r] = 0;
  1381. }
  1382. }
  1383. else{
  1384. rowhidden[r] = 0;
  1385. }
  1386. }
  1387. else if (value == "lessequalthan") { //小于等于
  1388. let value1 = parseFloat(caljs["value1"]);
  1389. if(cell == null || isRealNull(cell.v)){
  1390. rowhidden[r] = 0;
  1391. }
  1392. else if(cell.ct != null && cell.ct.t == "n"){
  1393. if(cell.v > value1){
  1394. rowhidden[r] = 0;
  1395. }
  1396. }
  1397. else{
  1398. rowhidden[r] = 0;
  1399. }
  1400. }
  1401. else if (value == "equal") { //等于
  1402. let value1 = parseFloat(caljs["value1"]);
  1403. if(cell == null || isRealNull(cell.v)){
  1404. rowhidden[r] = 0;
  1405. }
  1406. else if(cell.ct != null && cell.ct.t == "n"){
  1407. if(cell.v != value1){
  1408. rowhidden[r] = 0;
  1409. }
  1410. }
  1411. else{
  1412. rowhidden[r] = 0;
  1413. }
  1414. }
  1415. else if (value == "noequal") { //不等于
  1416. let value1 = parseFloat(caljs["value1"]);
  1417. if(cell == null || isRealNull(cell.v)){
  1418. rowhidden[r] = 0;
  1419. }
  1420. else if(cell.ct != null && cell.ct.t == "n"){
  1421. if(cell.v == value1){
  1422. rowhidden[r] = 0;
  1423. }
  1424. }
  1425. else{
  1426. rowhidden[r] = 0;
  1427. }
  1428. }
  1429. else if (value == "include") { //介于
  1430. let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]);
  1431. let min, max;
  1432. if(value1 < value2){
  1433. min = value1;
  1434. max = value2;
  1435. }
  1436. else{
  1437. max = value1;
  1438. min = value2;
  1439. }
  1440. if(cell == null || isRealNull(cell.v)){
  1441. rowhidden[r] = 0;
  1442. }
  1443. else if(cell.ct != null && cell.ct.t == "n"){
  1444. if(cell.v < min || cell.v > max){
  1445. rowhidden[r] = 0;
  1446. }
  1447. }
  1448. else{
  1449. rowhidden[r] = 0;
  1450. }
  1451. }
  1452. else if (value == "noinclude") { //不在其中
  1453. let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]);
  1454. let min, max;
  1455. if(value1 < value2){
  1456. min = value1;
  1457. max = value2;
  1458. }
  1459. else{
  1460. max = value1;
  1461. min = value2;
  1462. }
  1463. if(cell == null || isRealNull(cell.v)){
  1464. rowhidden[r] = 0;
  1465. }
  1466. else if(cell.ct != null && cell.ct.t == "n"){
  1467. if(cell.v >= min && cell.v <= max){
  1468. rowhidden[r] = 0;
  1469. }
  1470. }
  1471. else{
  1472. rowhidden[r] = 0;
  1473. }
  1474. }
  1475. }
  1476. }
  1477. else {
  1478. $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").each(function(i, e){
  1479. if($(e).is(":visible") && $(e).is(":checked")){
  1480. return true;
  1481. }
  1482. if($(e).closest(".day").length > 0){
  1483. let day = $(e).siblings("label").text();
  1484. if(Number(day) < 10){
  1485. day = "0" + day;
  1486. }
  1487. let month = $(e).closest(".monthBox").find(".month label").text().replace(locale_filter.filiterMonthText, "");
  1488. if(Number(month) < 10){
  1489. month = "0" + month;
  1490. }
  1491. let year = $(e).closest(".yearBox").find(".year label").text().replace(locale_filter.filiterYearText, "");
  1492. let itemV = locale_filter.filterDateFormatTip+"#$$$#" + year + "-" + month + "-" + day;
  1493. filterdata[itemV] = "1";
  1494. }
  1495. if($(e).closest(".textBox").length > 0){
  1496. let itemV = $(e).closest(".textBox").data("filter");
  1497. filterdata[itemV] = "1";
  1498. }
  1499. })
  1500. for (let r = 1; r < d.length; r++) {
  1501. if(r in rowhiddenother){
  1502. continue;
  1503. }
  1504. if(d[r] == null){
  1505. continue;
  1506. }
  1507. let cell = d[r][cindex];
  1508. let value;
  1509. if(cell == null || isRealNull(cell.v)){
  1510. value = "null#$$$#null";
  1511. }
  1512. else if(cell.ct != null && cell.ct.t == "d"){
  1513. let fmt = update("YYYY-MM-DD", cell.v);
  1514. value = locale_filter.filterDateFormatTip+"#$$$#" + fmt;
  1515. }
  1516. else{
  1517. value = cell.v + "#$$$#" + cell.m;
  1518. }
  1519. if(value in filterdata){
  1520. rowhidden[r] = 0;
  1521. }
  1522. }
  1523. }
  1524. let $top = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(cindex);
  1525. if ($("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']:visible:checked").length < $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']:visible").length || $("#luckysheet-pivotTableFilter-byvalue-input").val().length > 0 || ($("#luckysheet-pivotTableFilter-bycondition").next().is(":visible") && $("#luckysheet-pivotTableFilter-byvalue").next().is(":hidden") && $("#luckysheet-pivotTableFilter-selected span").data("value") != "null")) {
  1526. $top.data("rowhidden", JSON.stringify(rowhidden)).find(".luckysheet-slider-list-item-filtered").show();
  1527. _this.setDatatojsfile("rowhidden", rowhidden, cindex);
  1528. if (caljs != null) {
  1529. $top.data("byconditionvalue", caljs["value"]).data("byconditiontype", caljs["type"]).data("byconditiontext", caljs["text"]);
  1530. if (caljs["value1"] != null) {
  1531. $top.data("byconditionvalue1", caljs["value1"]);
  1532. }
  1533. if (caljs["value2"] != null) {
  1534. $top.data("byconditionvalue2", caljs["value2"]);
  1535. }
  1536. _this.setDatatojsfile("caljs", caljs, cindex);
  1537. }
  1538. }
  1539. else {
  1540. $top.data("rowhidden", "").find(".luckysheet-slider-list-item-filtered").hide();
  1541. _this.setDatatojsfile("rowhidden", null, cindex);
  1542. }
  1543. let newdata = [];
  1544. for (let i = 0; i < d.length; i++) {
  1545. if(i in rowhidden || i in rowhiddenother){
  1546. continue;
  1547. }
  1548. newdata.push([].concat(d[i]));
  1549. }
  1550. _this.celldata = newdata;
  1551. _this.refreshPivotTable();
  1552. $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
  1553. cleargridelement();
  1554. });
  1555. $("#luckysheet-data-pivotTable-selection .luckysheet-model-close-btn, #luckysheet-data-pivotTable-selection .luckysheet-modal-dialog-title-close").click(function () {
  1556. $("#luckysheet-modal-dialog-slider-pivot").show();
  1557. luckysheetsizeauto();
  1558. $("#luckysheet-cell-main .luckysheet-pivotTable-selection-set div").show();
  1559. $("#luckysheet-data-pivotTable-selection").hide();
  1560. sheetmanage.changeSheetExec(_this.pivotSheetIndex);
  1561. _this.luckysheet_pivotTable_select_state = false;
  1562. cleargridelement();
  1563. });
  1564. $("#luckysheet-pivotTable-selection-confirm").click(function () {
  1565. let $input = $("#luckysheet-pivotTable-range-selection-input"), val = $input.val();
  1566. if ($.trim(val).length == 0 || $.trim(val).toUpperCase() == _this.jgridCurrentPivotInput.toUpperCase()) {
  1567. $input.val(_this.jgridCurrentPivotInput);
  1568. $("#luckysheet-data-pivotTable-selection .luckysheet-model-close-btn").click();
  1569. return;
  1570. }
  1571. else {
  1572. let val1 = val.split("!");
  1573. let sheettxt = "", rangetxt = "", sheetIndex = -1;
  1574. if (val1.length > 1) {
  1575. sheettxt = val1[0];
  1576. rangetxt = val1[1];
  1577. for (let i in Store.luckysheetfile) {
  1578. if (sheettxt == Store.luckysheetfile[i].name) {
  1579. sheetIndex = Store.luckysheetfile[i].index;
  1580. break;
  1581. }
  1582. }
  1583. if (sheetIndex == -1) {
  1584. sheetIndex = 0;
  1585. }
  1586. }
  1587. else {
  1588. let index = getSheetIndex(Store.currentSheetIndex);
  1589. sheettxt = Store.luckysheetfile[index].name;
  1590. sheetIndex = Store.luckysheetfile[index].index;
  1591. rangetxt = val1[0];
  1592. }
  1593. if(Store.luckysheetfile[getSheetIndex(sheetIndex)].isPivotTable){
  1594. if(isEditMode()){
  1595. alert(locale_pivotTable.errorNotAllowPivotData);
  1596. }
  1597. else{
  1598. tooltip.info("", locale_pivotTable.errorNotAllowPivotData);
  1599. }
  1600. $input.val(_this.jgridCurrentPivotInput);
  1601. return;
  1602. }
  1603. if (rangetxt.indexOf(":") == -1) {
  1604. if(isEditMode()){
  1605. alert(locale_pivotTable.errorSelectionRange);
  1606. }
  1607. else{
  1608. tooltip.info("", locale_pivotTable.errorSelectionRange);
  1609. }
  1610. $input.val(_this.jgridCurrentPivotInput);
  1611. return;
  1612. }
  1613. rangetxt = rangetxt.split(":");
  1614. let row = [], col = [];
  1615. row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
  1616. row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
  1617. if (row[0] > row[1]) {
  1618. if(isEditMode()){
  1619. alert(locale_pivotTable.errorSelectionRange);
  1620. }
  1621. else{
  1622. tooltip.info("", locale_pivotTable.errorSelectionRange);
  1623. }
  1624. $input.val(_this.jgridCurrentPivotInput);
  1625. return;
  1626. }
  1627. col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
  1628. col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
  1629. if (col[0] > col[1]) {
  1630. if(isEditMode()){
  1631. alert(locale_pivotTable.errorSelectionRange);
  1632. }
  1633. else{
  1634. tooltip.info(locale_pivotTable.errorSelectionRange);
  1635. }
  1636. $input.val(_this.jgridCurrentPivotInput);
  1637. return;
  1638. }
  1639. sheetmanage.changeSheetExec(_this.pivotSheetIndex);
  1640. _this.setDatatojsfile("pivot_select_save", { "row": row, "column": col });
  1641. _this.setDatatojsfile("pivotDataSheetIndex", sheetIndex);
  1642. _this.getCellData(_this.pivotSheetIndex, sheetIndex, { "row": row, "column": col });
  1643. _this.initialPivotManage();
  1644. $("#luckysheet-dialog-pivotTable-range").html(val);
  1645. $("#luckysheet-modal-dialog-slider-pivot").show();
  1646. $("#luckysheet-data-pivotTable-selection").hide();
  1647. _this.luckysheet_pivotTable_select_state = false;
  1648. _this.refreshPivotTable();
  1649. luckysheetsizeauto();
  1650. cleargridelement();
  1651. }
  1652. });
  1653. $("#luckysheet-modal-dialog-slider-pivot").on("mousedown", ".luckysheet-slider-list-item-name, .luckysheet-modal-dialog-slider-config-item-txt", function (e) {
  1654. let $cur = $(e.target);
  1655. _this.movestate = true;
  1656. _this.movesave.obj = $cur.parent();
  1657. _this.movesave.name = $cur.data("name");
  1658. _this.movesave.containerid = $cur.parent().parent().attr("id");
  1659. _this.movesave.index = $cur.data("index");
  1660. if ($("#luckysheet-modal-dialog-slider-pivot-move").length == 0) {
  1661. $("body").append('<div id="luckysheet-modal-dialog-slider-pivot-move">' + _this.movesave.name + '</div>');
  1662. }
  1663. _this.movesave.width = $("#luckysheet-modal-dialog-slider-pivot-move").outerWidth();
  1664. _this.movesave.height = $("#luckysheet-modal-dialog-slider-pivot-move").outerHeight();
  1665. $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default");
  1666. });
  1667. $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").mousemove(function (e) {
  1668. if (_this.movestate) {
  1669. if (_this.moveitemposition.length == 0) {
  1670. _this.moveitemposition = [0];
  1671. $(this).find(".luckysheet-modal-dialog-slider-config-item").each(function (i) {
  1672. let $t = $(this), h = $t.outerHeight();
  1673. _this.moveitemposition.push(_this.moveitemposition[i] + h + 2);
  1674. });
  1675. $(this).append('<div id="luckysheet-modal-dialog-config-order-help" style="position:absolute;height:3px;width:100%;background:#007ACC;z-index:1;pointer-events: none;user-select:none;"></div>');
  1676. }
  1677. $("#luckysheet-modal-dialog-slider-pivot-move").css({ "background": "#FD8585", "color": "#fff", "border": "1px solid #FD7070" });
  1678. let x = event.pageX, y = event.pageY, $container = $(this);
  1679. let curtop = y - $container.offset().top + $container.scrollTop();
  1680. let position = _this.moveitemposition;
  1681. let row_index = luckysheet_searcharray(position, curtop);
  1682. if (row_index == -1) {
  1683. $("#luckysheet-modal-dialog-config-order-help").css({ "top": position[position.length - 1] });
  1684. }
  1685. else if ((curtop - position[row_index - 1]) > (position[row_index] - position[row_index - 1]) / 2) {
  1686. $("#luckysheet-modal-dialog-config-order-help").css({ "top": position[row_index] });
  1687. }
  1688. else {
  1689. $("#luckysheet-modal-dialog-config-order-help").css({ "top": position[row_index - 1] });
  1690. }
  1691. }
  1692. }).mouseleave(function () {
  1693. if (_this.movestate) {
  1694. $("#luckysheet-modal-dialog-slider-pivot-move").css({ "background": "#fff", "color": "#000", "border": "1px dotted #000" });
  1695. _this.moveitemposition = [];
  1696. $("#luckysheet-modal-dialog-config-order-help").remove();
  1697. }
  1698. }).mouseup(function (e) {
  1699. if (_this.movestate) {
  1700. let $t = $(this);
  1701. let itemHTML;
  1702. if (_this.movesave.containerid == $t.attr("id")) {
  1703. itemHTML = _this.movesave.obj.clone();
  1704. }
  1705. else {
  1706. let name = _this.movesave.name,
  1707. sumtype = "",
  1708. nameindex = "";
  1709. if ($t.attr("id") == "luckysheet-modal-dialog-config-value") {
  1710. let type = _this.pivot_data_type[_this.movesave.index.toString()];
  1711. if (type == "num") {
  1712. name = locale_pivotTable.valueStatisticsSUM+":" + name;
  1713. sumtype = "data-sumtype='SUM'";
  1714. nameindex = "data-nameindex='0'";
  1715. }
  1716. else {
  1717. name = locale_pivotTable.valueStatisticsCOUNTA+":" + name;
  1718. sumtype = "data-sumtype='COUNTA'";
  1719. nameindex = "data-nameindex='0'";
  1720. }
  1721. $("#luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function () {
  1722. if ($(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text() == name) {
  1723. let ni = parseFloat($(this).data("nameindex")) + 1;
  1724. name = name + ni.toString();
  1725. $(this).data("nameindex", ni);
  1726. return false;
  1727. }
  1728. });
  1729. }
  1730. itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + nameindex + ' ' + sumtype + ' data-index="' + _this.movesave.index + '" data-name="' + _this.movesave.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + nameindex + ' ' + sumtype + ' data-index="' + _this.movesave.index + '" data-name="' + _this.movesave.name + '">' + name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1731. }
  1732. let x = event.pageX, y = event.pageY, $container = $(this);
  1733. let curtop = y - $container.offset().top + $container.scrollTop();
  1734. let position = _this.moveitemposition;
  1735. let row_index = luckysheet_searcharray(position, curtop);
  1736. if ((_this.movesave.containerid == "luckysheet-modal-dialog-pivotTable-list") || (_this.movesave.containerid == "luckysheet-modal-dialog-config-value" && _this.movesave.containerid != $t.attr("id"))) {
  1737. $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").find(".luckysheet-modal-dialog-slider-config-item").each(function () {
  1738. if ($(this).data("index") == _this.movesave.index) {
  1739. $(this).remove();
  1740. }
  1741. });
  1742. }
  1743. if (row_index == -1) {
  1744. if ($t.find(".luckysheet-modal-dialog-slider-config-item").length == 0) {
  1745. $t.append(itemHTML);
  1746. }
  1747. else {
  1748. $t.find(".luckysheet-modal-dialog-slider-config-item").last().after(itemHTML);
  1749. }
  1750. }
  1751. else if ((curtop - position[row_index - 1]) > (position[row_index] - position[row_index - 1]) / 2) {
  1752. $t.find(".luckysheet-modal-dialog-slider-config-item").eq(row_index - 1).after(itemHTML);
  1753. }
  1754. else {
  1755. $t.find(".luckysheet-modal-dialog-slider-config-item").eq(row_index - 1).before(itemHTML);
  1756. }
  1757. if (_this.movesave.containerid == "luckysheet-modal-dialog-pivotTable-list") {
  1758. }
  1759. else if (_this.movesave.containerid == "luckysheet-modal-dialog-config-value" && _this.movesave.containerid != $t.attr("id")) {
  1760. }
  1761. else {
  1762. _this.movesave.obj.remove();
  1763. }
  1764. $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function () {
  1765. let $seleted = $(this).find(".luckysheet-slider-list-item-selected");
  1766. if ($(this).data("index") == _this.movesave.index && $seleted.find("i").length == 0) {
  1767. $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
  1768. }
  1769. });
  1770. _this.refreshPivotTable();
  1771. $("#luckysheet-modal-dialog-slider-pivot-move").remove();
  1772. _this.movestate = false;
  1773. $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default");
  1774. _this.moveitemposition = [];
  1775. $("#luckysheet-modal-dialog-config-order-help").remove();
  1776. _this.showvaluecolrow();
  1777. e.stopPropagation();
  1778. }
  1779. });
  1780. $("#luckysheet-modal-dialog-pivotTable-list").on("click", ".luckysheet-slider-list-item-selected", function () {
  1781. let $t = $(this),
  1782. $item = $t.parent(),
  1783. index = $item.data("index"),
  1784. name = $item.data("name");
  1785. if ($t.find("i").length == 0) {
  1786. $t.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
  1787. let type = _this.pivot_data_type[index.toString()],
  1788. itemHTML;
  1789. if (type == "num") {
  1790. itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" data-nameindex="0" data-sumtype="SUM" data-index="' + index + '" data-name="' + name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" data-nameindex="0" data-sumtype="SUM" data-index="' + index + '" data-name="' + name + '">求和:' + name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1791. $("#luckysheet-modal-dialog-config-value").append(itemHTML);
  1792. }
  1793. else {
  1794. itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" data-index="' + index + '" data-name="' + name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" data-index="' + index + '" data-name="' + name + '">' + name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1795. let $column = $("#luckysheet-modal-dialog-config-column"),
  1796. $row = $("#luckysheet-modal-dialog-config-row");
  1797. let columnitem = $column.find(".luckysheet-modal-dialog-slider-config-item"),
  1798. rowitem = $row.find(".luckysheet-modal-dialog-slider-config-item");
  1799. if (columnitem.length < 2) {
  1800. $column.append(itemHTML);
  1801. }
  1802. else if (rowitem.length < 2) {
  1803. $row.append(itemHTML);
  1804. }
  1805. else {
  1806. $column.append(itemHTML);
  1807. }
  1808. }
  1809. }
  1810. else {
  1811. $t.find("i").remove();
  1812. $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function () {
  1813. if ($(this).data("index") == index) {
  1814. if ($(this).parent().attr("id") == "luckysheet-modal-dialog-config-value") {
  1815. _this.resetOrderby($(this));
  1816. }
  1817. $(this).remove();
  1818. }
  1819. });
  1820. }
  1821. _this.refreshPivotTable();
  1822. _this.showvaluecolrow();
  1823. });
  1824. $("#luckysheet-dialog-pivotTable-clearitem").click(function () {
  1825. $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function () {
  1826. $(this).remove();
  1827. });
  1828. $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function () {
  1829. $(this).find(".luckysheet-slider-list-item-selected").find("i").remove();
  1830. });
  1831. _this.refreshPivotTable();
  1832. _this.showvaluecolrow();
  1833. });
  1834. }
  1835. if (restore == null) {
  1836. restore = false;
  1837. }
  1838. if (_this.celldata.length <= 1 && _this.celldata[0].length <= 1) {
  1839. if(isEditMode()){
  1840. alert(locale_pivotTable.errorIncreaseRange);
  1841. }
  1842. else{
  1843. tooltip.info("", locale_pivotTable.errorIncreaseRange);
  1844. }
  1845. }
  1846. let selecteditem = "",
  1847. selecteditemIndex = 1,
  1848. selecteditemtest = {},
  1849. selecteditemNullIndex = 1;
  1850. for (let i = 0; i < _this.celldata[0].length; i++) {
  1851. let name;
  1852. if(!!_this.celldata[0][i] && !!_this.celldata[0][i]["m"]){
  1853. name = _this.celldata[0][i]["m"];
  1854. }
  1855. else{
  1856. name = getcellvalue(0, i, _this.celldata);
  1857. }
  1858. if(name != null){
  1859. name = name.toString();
  1860. }
  1861. if (name == null || $.trim(name.toString()).length == 0) {
  1862. name = locale_pivotTable.titleColumn+" " + selecteditemNullIndex;
  1863. }
  1864. selecteditemNullIndex++
  1865. if (name in selecteditemtest) {
  1866. name = name + selecteditemIndex++;
  1867. if (name in selecteditemtest) {
  1868. name = name + selecteditemIndex++;
  1869. if (name in selecteditemtest) {
  1870. name = name + selecteditemIndex++;
  1871. }
  1872. }
  1873. }
  1874. selecteditemtest[name] = 1;
  1875. let dataother = "", style = "";
  1876. if (restore && _this.filterparm != null) {
  1877. if (_this.filterparm[i.toString()] != null) {
  1878. let itemset = _this.filterparm[i.toString()];
  1879. if (itemset.rowhidden != null) {
  1880. dataother += "data-rowhidden='" + JSON.stringify(itemset.rowhidden) + "'";
  1881. }
  1882. if (itemset.selected != null) {
  1883. dataother += "data-selected='" + JSON.stringify(itemset.selected) + "'";
  1884. }
  1885. if (itemset.caljs != null) {
  1886. let caljsset = itemset.caljs;
  1887. if (caljsset.value != null) {
  1888. dataother += "data-byconditionvalue='" + caljsset.value + "'";
  1889. }
  1890. if (caljsset.type != null) {
  1891. dataother += "data-byconditiontype='" + caljsset.type + "'";
  1892. }
  1893. if (caljsset.text != null) {
  1894. dataother += "data-byconditiontext='" + caljsset.text + "'";
  1895. }
  1896. if (caljsset.value1 != null) {
  1897. dataother += "data-byconditionvalue1='" + caljsset.value1 + "'";
  1898. }
  1899. if (caljsset.value2 != null) {
  1900. dataother += "data-byconditionvalue2='" + caljsset.value2 + "'";
  1901. }
  1902. }
  1903. }
  1904. }
  1905. if (dataother.length > 0) {
  1906. style = "display:block;";
  1907. }
  1908. selecteditem += '<div class="luckysheet-modal-dialog-slider-list-item" ' + dataother + ' data-index="' + i + '" data-name="' + name + '"><div title="'+locale_pivotTable.titleAddColumn+'" class="luckysheet-slider-list-item-selected"><div></div></div><div title="'+locale_pivotTable.titleMoveColumn+'" class="luckysheet-slider-list-item-name" ' + dataother + ' data-index="' + i + '" data-name="' + name + '">' + name + '</div><div title="'+locale_pivotTable.titleClearColumnFilter+'" class="luckysheet-slider-list-item-filtered" style="' + style + '"><i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i><i class="fa fa-times" aria-hidden="true"></i></div><div title="'+locale_pivotTable.titleFilterColumn+'" class="luckysheet-slider-list-item-filter"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1909. }
  1910. $("#luckysheet-modal-dialog-pivotTable-list").html(selecteditem);
  1911. $("#luckysheetpivottablevaluecolrowshow").hide();
  1912. $("#luckysheetpivottablevaluecolrow").prop("checked", true);
  1913. $("#luckysheetpivottablevaluecolrow1").prop("checked", false);
  1914. $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").empty();
  1915. if (restore) {
  1916. if (_this.filter != null && _this.filter.length > 0) {
  1917. for (let i = 0; i < _this.filter.length; i++) {
  1918. let item = _this.filter[i];
  1919. let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" data-index="' + item.index + '" data-name="' + item.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" data-index="' + item.index + '" data-name="' + item.name + '">' + item.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1920. $("#luckysheet-modal-dialog-config-filter").append(itemHTML);
  1921. let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item.index).find(".luckysheet-slider-list-item-selected");
  1922. if ($seleted.find("i").length == 0) {
  1923. $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
  1924. }
  1925. }
  1926. }
  1927. if (_this.row != null && _this.row.length > 0) {
  1928. for (let i = 0; i < _this.row.length; i++) {
  1929. let item = _this.row[i];
  1930. let otherset = "";
  1931. if (item.order != null) {
  1932. otherset += "data-order = '" + item.order + "'";
  1933. }
  1934. if (item.orderby != null) {
  1935. otherset += "data-orderby = '" + item.orderby + "'";
  1936. }
  1937. if (item.order != null) {
  1938. otherset += "data-stastic = '" + item.stastic + "'";
  1939. }
  1940. let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + otherset + ' data-index="' + item.index + '" data-name="' + item.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + otherset + ' data-index="' + item.index + '" data-name="' + item.name + '">' + item.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1941. $("#luckysheet-modal-dialog-config-row").append(itemHTML);
  1942. let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item.index).find(".luckysheet-slider-list-item-selected");
  1943. if ($seleted.find("i").length == 0) {
  1944. $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
  1945. }
  1946. }
  1947. }
  1948. if (_this.column != null && _this.column.length > 0) {
  1949. for (let i = 0; i < _this.column.length; i++) {
  1950. let item = _this.column[i];
  1951. let otherset = "";
  1952. if (item.order != null) {
  1953. otherset += "data-order = '" + item.order + "'";
  1954. }
  1955. if (item.orderby != null) {
  1956. otherset += "data-orderby = '" + item.orderby + "'";
  1957. }
  1958. if (item.order != null) {
  1959. otherset += "data-stastic = '" + item.stastic + "'";
  1960. }
  1961. let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + otherset + ' data-index="' + item.index + '" data-name="' + item.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + otherset + ' data-index="' + item.index + '" data-name="' + item.name + '">' + item.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1962. $("#luckysheet-modal-dialog-config-column").append(itemHTML);
  1963. let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item.index).find(".luckysheet-slider-list-item-selected");
  1964. if ($seleted.find("i").length == 0) {
  1965. $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
  1966. }
  1967. }
  1968. }
  1969. if (_this.values != null && _this.values.length > 0) {
  1970. for (let i = 0; i < _this.values.length; i++) {
  1971. let item = _this.values[i];
  1972. let otherset = "";
  1973. if (item.sumtype != null) {
  1974. otherset += "data-sumtype = '" + item.sumtype + "'";
  1975. }
  1976. if (item.nameindex != null) {
  1977. otherset += "data-nameindex = '" + item.nameindex + "'";
  1978. }
  1979. let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + otherset + ' data-index="' + item.index + '" data-name="' + item.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + otherset + ' data-index="' + item.index + '" data-name="' + item.name + '">' + _this.getSumTypeName(item.sumtype) + ":" + item.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
  1980. $("#luckysheet-modal-dialog-config-value").append(itemHTML);
  1981. let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item.index).find(".luckysheet-slider-list-item-selected");
  1982. if ($seleted.find("i").length == 0) {
  1983. $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
  1984. }
  1985. }
  1986. if (_this.values.length >= 2) {
  1987. $("#luckysheetpivottablevaluecolrowshow").show();
  1988. if (_this.showType == "column") {
  1989. $("#luckysheetpivottablevaluecolrow").prop("checked", true);
  1990. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").addClass("ui-state-active");
  1991. $("#luckysheetpivottablevaluecolrow1").prop("checked", false);
  1992. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").removeClass("ui-state-active");
  1993. }
  1994. else {
  1995. $("#luckysheetpivottablevaluecolrow1").prop("checked", true);
  1996. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").addClass("ui-state-active");
  1997. $("#luckysheetpivottablevaluecolrow").prop("checked", false);
  1998. $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").removeClass("ui-state-active");
  1999. }
  2000. }
  2001. }
  2002. }
  2003. $("#luckysheet-dialog-pivotTable-range").html(getRangetxt(_this.pivotDataSheetIndex, _this.pivot_select_save));
  2004. $("#luckysheet-modal-dialog-slider-pivot").show();
  2005. luckysheetsizeauto(false);
  2006. },
  2007. getComposeArray: function (data) {
  2008. if (data.length == 0) {
  2009. return [];
  2010. }
  2011. let ret = [];
  2012. for (let i = 0; i < data.length; i++) {
  2013. let name = "";
  2014. for (let x = 0; x <= i; x++) {
  2015. if(!!data[x] && !!data[x]["m"]){
  2016. name += data[x]["m"];
  2017. }
  2018. else{
  2019. name += getcellvalue(x, null, data);
  2020. }
  2021. }
  2022. ret.push(name);
  2023. }
  2024. return ret;
  2025. },
  2026. getnameArray: function (data, field) {
  2027. if (data.length == 0) {
  2028. return [];
  2029. }
  2030. if (field.length == 0) {
  2031. return [];
  2032. }
  2033. let ret = [];
  2034. for (let i = 0; i < field.length; i++) {
  2035. let c_value;
  2036. if(!!data[field[i].index] && !!data[field[i].index]["m"]){
  2037. c_value = data[field[i].index]["m"];
  2038. }
  2039. else{
  2040. c_value = getcellvalue(field[i].index, null, data);
  2041. }
  2042. ret.push(c_value);
  2043. }
  2044. return ret;
  2045. },
  2046. getTitleFromGroup: function (group, config, dataposition) {
  2047. let _this = this;
  2048. let orderbygroup = _this.orderbygroup(group, config, dataposition);
  2049. return _this.generategrouparraymain(orderbygroup, config);
  2050. },
  2051. orderbygroup: function (group, config, dataposition) {
  2052. let _this = this;
  2053. let stackset = [];
  2054. if (group.length == 0) {
  2055. return [];
  2056. }
  2057. stackset = group;
  2058. let d = null,
  2059. alllength = stackset.length,
  2060. alllengthInital = stackset.length,
  2061. a = 0;
  2062. while (alllength != 0) {
  2063. d = stackset[a++];
  2064. alllength--;
  2065. if (d.children != null && d.children.length > 0) {
  2066. d.children = _this.orderbygroupchildren(d.children, config[d.index].orderby, config[d.index].order, dataposition);
  2067. for (let i = 0; i < d.children.length; i++) {
  2068. stackset.push(d.children[i]);
  2069. alllength++;
  2070. }
  2071. }
  2072. }
  2073. return group.splice(0, alllengthInital);
  2074. },
  2075. orderbygroupchildren: function (childrens, orderby, order, dataposition) {
  2076. if (childrens.length == 0) {
  2077. return [];
  2078. }
  2079. let isAsc = false;
  2080. if (order == null || order == "asc") {
  2081. isAsc = true;
  2082. }
  2083. const _locale = locale();
  2084. const locale_filter = _locale.filter;
  2085. let a = function (x, y) {
  2086. let f = null, s = null;
  2087. if (orderby == "self" || orderby == null) {
  2088. if(x.name == null){
  2089. f = locale_filter.valueBlank;
  2090. }
  2091. else{
  2092. f = x.name.toString();
  2093. }
  2094. if(y.name == null){
  2095. s = locale_filter.valueBlank;
  2096. }
  2097. else{
  2098. s = y.name.toString();
  2099. }
  2100. if (isdatetime(f) && isdatetime(s)) {
  2101. return diff(f, s);
  2102. }
  2103. }
  2104. else {
  2105. f = parseFloat(dataposition[x.orderby].result);
  2106. s = parseFloat(dataposition[y.orderby].result);
  2107. }
  2108. if (!isNaN(f) && !isNaN(s)) {
  2109. return numeral(f).value() - numeral(s).value();
  2110. }
  2111. else if(isNaN(f) && isNaN(s)){
  2112. return f.localeCompare(s);
  2113. }
  2114. else if (isNaN(f)) {
  2115. return 1;
  2116. }
  2117. else if (isNaN(s)) {
  2118. return -1;
  2119. }
  2120. }
  2121. let d = function (x, y) {
  2122. let f = null, s = null;
  2123. if (orderby == "self" || orderby == null) {
  2124. if(x.name == null){
  2125. f = locale_filter.valueBlank;
  2126. }
  2127. else{
  2128. f = x.name.toString();
  2129. }
  2130. if(y.name == null){
  2131. s = locale_filter.valueBlank;
  2132. }
  2133. else{
  2134. s = y.name.toString();
  2135. }
  2136. if (isdatetime(f) && isdatetime(s)) {
  2137. return diff(f, s);
  2138. }
  2139. }
  2140. else {
  2141. f = parseFloat(dataposition[x.orderby].result);
  2142. s = parseFloat(dataposition[y.orderby].result);
  2143. }
  2144. if (!isNaN(f) && !isNaN(s)) {
  2145. return numeral(s).value() - numeral(f).value();
  2146. }
  2147. else if(isNaN(f) && isNaN(s)){
  2148. return s.localeCompare(f);
  2149. }
  2150. else if (isNaN(f)) {
  2151. return -1;
  2152. }
  2153. else if (isNaN(s)) {
  2154. return 1;
  2155. }
  2156. }
  2157. if (isAsc) {
  2158. return childrens.sort(a);
  2159. }
  2160. else {
  2161. return childrens.sort(d);
  2162. }
  2163. },
  2164. generategroupaddstatic: function (arr, name) {
  2165. let stasticarr = [];
  2166. const _locale = locale();
  2167. const locale_pivotTable = _locale.pivotTable;
  2168. for (let a = 0; a < arr[0].length; a++) {
  2169. if (a == 0) {
  2170. if (name == locale_pivotTable.valueSum) {
  2171. stasticarr.push(name);
  2172. }
  2173. else {
  2174. stasticarr.push({ "name": name, "issum": true });
  2175. }
  2176. }
  2177. else {
  2178. stasticarr.push("");
  2179. }
  2180. }
  2181. return stasticarr;
  2182. },
  2183. generategrouparraymain: function (group, config) {
  2184. let _this = this;
  2185. //生成数组
  2186. let ret = [];
  2187. for (let i = 0; i < group.length; i++) {
  2188. let name = group[i].name;
  2189. let arr = _this.generategrouparray(group[i].children, config, 1);
  2190. if (config[0].stastic == "1" || config[0].stastic == null) {
  2191. arr.push(_this.generategroupaddstatic(arr, name));
  2192. }
  2193. ret = ret.concat(arr);
  2194. }
  2195. return ret;
  2196. },
  2197. generategrouparray: function (group, config, level) {
  2198. let _this = this;
  2199. let ret = [];
  2200. for (let i = 0; i < group.length; i++) {
  2201. let name = group[i].name;
  2202. let arr;
  2203. if (group[i].children == 0 || group[i].children.length == 0) {
  2204. arr = [name];
  2205. ret.push(arr);
  2206. }
  2207. else {
  2208. arr = _this.generategrouparray(group[i].children, config, level + 1);
  2209. for (let a = 0; a < arr.length; a++) {
  2210. arr[a].unshift(name);
  2211. }
  2212. if (config[level].stastic == "1" || config[level].stastic == null) {
  2213. arr.push(_this.generategroupaddstatic(arr, name));
  2214. }
  2215. ret = ret.concat(arr);
  2216. }
  2217. }
  2218. return ret;
  2219. },
  2220. addStatisticsData: function (dataposition, valueobj, indicator, d_value) {
  2221. if (dataposition[indicator] == null) {
  2222. dataposition[indicator] = {
  2223. "data": [],
  2224. "count": 0,
  2225. "max": -Infinity,
  2226. "min": Infinity,
  2227. "counta": 0,
  2228. "countunique": 0,
  2229. "countuniquedata": {},
  2230. "sum": 0,
  2231. "digitaldata": [],
  2232. "sumtype": valueobj.sumtype,
  2233. "index": valueobj.index,
  2234. "name": valueobj.fullname,
  2235. "acc": 0
  2236. };
  2237. }
  2238. if (isdatatypemulti(d_value)["num"] === true) {
  2239. //fix issue 265
  2240. let num = numFormat(d_value,6);
  2241. dataposition[indicator]["digitaldata"].push(num);
  2242. dataposition[indicator]["count"] += 1;
  2243. dataposition[indicator]["sum"] += num;
  2244. if (num > dataposition[indicator]["max"]) {
  2245. dataposition[indicator]["max"] = num;
  2246. }
  2247. if (num < dataposition[indicator]["min"]) {
  2248. dataposition[indicator]["min"] = num;
  2249. }
  2250. let newAcc = numfloatlen(num);
  2251. if(newAcc > dataposition[indicator]["acc"]){
  2252. dataposition[indicator]["acc"] = newAcc;
  2253. }
  2254. }
  2255. if (d_value != "") {
  2256. dataposition[indicator]["data"].push(d_value);
  2257. dataposition[indicator]["counta"] += 1;
  2258. if (!(d_value in dataposition[indicator]["countuniquedata"])) {
  2259. dataposition[indicator]["countuniquedata"][d_value] = 1;
  2260. dataposition[indicator]["countunique"] += 1;
  2261. }
  2262. }
  2263. },
  2264. dataHandler: function (column, row, values, showType, celldata) {
  2265. //column:[{"index":1, name:"列1", "order":"asc", "orderby":"self/0/1/2", "stastic":"0/1"}]
  2266. //row:[{"index":1, name:"列3", "order":"asc", "orderby":"self/0/1/2", "stastic":"0/1"}]
  2267. //values:[{"index":1, "sumtype":"SUM/COUNT/COUNTA/COUNTUNIQUE/AVERAGE/MAX/MIN/MEDIAN/PRODUCT/STDEV/STDEVP/let/VARP", "name":"求和:fyc"}]
  2268. let _this = this;
  2269. const _locale = locale();
  2270. const locale_filter = _locale.filter;
  2271. const locale_pivotTable = _locale.pivotTable;
  2272. if (showType == null) {
  2273. showType = "column";
  2274. }
  2275. if ((column.length == 0 && row.length == 0 && values.length == 0) || celldata.length == 0) {
  2276. _this.pivotDatas = [];
  2277. return [];
  2278. }
  2279. //生成透视表值及定位
  2280. let dataposition = {},
  2281. data = celldata,
  2282. datarowtitle = [],
  2283. datarowtitlegroup = [],
  2284. datarowposition = {},
  2285. datarowposition_i = 0,
  2286. datacoltitle = [],
  2287. datacoltitlegroup = [],
  2288. datacolposition = {},
  2289. datacolposition_i = 0;
  2290. for (let i = 1; i < data.length; i++) {
  2291. let d = data[i];
  2292. let groupbyrowtxt = "",
  2293. groupbycoltxt = "",
  2294. rowtxt = "",
  2295. rowtitle = [],
  2296. rowtitlename = [],
  2297. coltxt = "",
  2298. coltitle = [],
  2299. coltitlename = [];
  2300. //["四川", "成都", "邛崃"] 转换为 ["四川", "四川成都", "四川成都邛崃"]
  2301. rowtitlename = _this.getnameArray(d, row);
  2302. coltitlename = _this.getnameArray(d, column);
  2303. rowtitle = _this.getComposeArray(rowtitlename);
  2304. coltitle = _this.getComposeArray(coltitlename);
  2305. if (rowtitle.length > 0) {
  2306. rowtitle.unshift(locale_pivotTable.valueSum);
  2307. }
  2308. if (coltitle.length > 0) {
  2309. coltitle.unshift(locale_pivotTable.valueSum);
  2310. }
  2311. let curentLevelobj_row = datarowposition,
  2312. curentLevelarr_row = datarowtitlegroup;
  2313. for (let r = 0; r < rowtitle.length; r++) {
  2314. let item = rowtitle[r], name = r == 0 ? locale_pivotTable.valueSum : rowtitlename[r - 1];//修改
  2315. if (curentLevelobj_row[r.toString()] != null && curentLevelobj_row[r.toString()][item] != null) {//修改
  2316. curentLevelarr_row = curentLevelarr_row[curentLevelobj_row[r.toString()][item]].children;
  2317. }
  2318. else {
  2319. let orderby = r == 0 ? "self" : ((row[r - 1].orderby == "self" || row[r - 1].orderby == null) ? item : (showType == "column" ? item + values[parseInt(row[r - 1].orderby)].fullname : item + locale_pivotTable.valueSum));
  2320. if(name == null){
  2321. name = locale_filter.valueBlank;
  2322. }
  2323. curentLevelarr_row.push({ "name": name, "fullname": item, "index": r, "orderby": orderby, "children": [] });
  2324. if (curentLevelobj_row[r.toString()] == null) {
  2325. curentLevelobj_row[r.toString()] = {};
  2326. }
  2327. if (curentLevelobj_row[r.toString()][item] == null) {
  2328. curentLevelobj_row[r.toString()][item] = curentLevelarr_row.length - 1;
  2329. }
  2330. curentLevelarr_row = curentLevelarr_row[curentLevelarr_row.length - 1].children;
  2331. }
  2332. }
  2333. let curentLevelobj_col = datacolposition,
  2334. curentLevelarr_col = datacoltitlegroup;
  2335. for (let r = 0; r < coltitle.length; r++) {
  2336. let item = coltitle[r], name = r == 0 ? locale_pivotTable.valueSum : coltitlename[r - 1];
  2337. if (curentLevelobj_col[r.toString()] != null && curentLevelobj_col[r.toString()][item] != null) {
  2338. curentLevelarr_col = curentLevelarr_col[curentLevelobj_col[r.toString()][item]].children;
  2339. }
  2340. else {
  2341. let orderby = r == 0 ? "self" : ((column[r - 1].orderby == "self" || column[r - 1].orderby == null) ? item : (showType == "column" ? locale_pivotTable.valueSum + item : values[parseInt(column[r - 1].orderby)].fullname + item));
  2342. if(name == null){
  2343. name = locale_filter.valueBlank;
  2344. }
  2345. curentLevelarr_col.push({ "name": name, "fullname": item, "index": r, "orderby": orderby, "children": [] });
  2346. if (curentLevelobj_col[r.toString()] == null) {
  2347. curentLevelobj_col[r.toString()] = {};
  2348. }
  2349. if (curentLevelobj_col[r.toString()][item] == null) {
  2350. curentLevelobj_col[r.toString()][item] = curentLevelarr_col.length - 1;
  2351. }
  2352. curentLevelarr_col = curentLevelarr_col[curentLevelarr_col.length - 1].children;
  2353. }
  2354. }
  2355. let v_str = "";
  2356. for (let v = 0; v < values.length; v++) {
  2357. let d_value = getcellvalue(values[v].index, null, d);
  2358. let coltitle_c = [].concat(coltitle), rowtitle_c = [].concat(rowtitle);
  2359. if (showType == "column") {
  2360. if (coltitle_c.length > 0) {
  2361. coltitle_c.push("")
  2362. coltitle_c = coltitle_c.join(values[v].fullname + "|||").split("|||").slice(0, coltitle_c.length - 1);
  2363. }
  2364. else {
  2365. coltitle_c.push(values[v].fullname);
  2366. }
  2367. }
  2368. else {
  2369. if (rowtitle_c.length > 0) {
  2370. rowtitle_c.push("")
  2371. rowtitle_c = rowtitle_c.join(values[v].fullname + "|||").split("|||").slice(0, rowtitle_c.length - 1);
  2372. }
  2373. else {
  2374. rowtitle_c.push(values[v].fullname);
  2375. }
  2376. }
  2377. if (coltitle_c.length == 0) {
  2378. coltitle_c.push("");
  2379. }
  2380. if (rowtitle_c.length == 0) {
  2381. rowtitle_c.push("");
  2382. }
  2383. for (let r = 0; r < rowtitle_c.length; r++) {
  2384. for (let c = 0; c < coltitle_c.length; c++) {
  2385. let indicator = rowtitle_c[r] + coltitle_c[c];
  2386. _this.addStatisticsData(dataposition, values[v], indicator, d_value);
  2387. }
  2388. }
  2389. }
  2390. }
  2391. //计算值列
  2392. //SUM/COUNT/COUNTA/COUNTUNIQUE/AVERAGE/MAX/MIN/MEDIAN/PRODUCT/STDEV/STDEVP/let/VARP
  2393. for (let indicator in dataposition) {
  2394. let json = dataposition[indicator];
  2395. if (json.sumtype == "SUM") {
  2396. json.result = json.sum;
  2397. }
  2398. else if (json.sumtype == "COUNT") {
  2399. json.result = json.count;
  2400. }
  2401. else if (json.sumtype == "COUNTA") {
  2402. json.result = json.counta;
  2403. }
  2404. else if (json.sumtype == "COUNTUNIQUE") {
  2405. json.result = json.countunique;
  2406. }
  2407. else if (json.sumtype == "AVERAGE") {
  2408. json.result = numFormat(json.sum / json.count);
  2409. }
  2410. else if (json.sumtype == "MAX") {
  2411. json.result = json.max;
  2412. }
  2413. else if (json.sumtype == "MIN") {
  2414. json.result = json.min;
  2415. }
  2416. else if (json.sumtype == "MEDIAN") {
  2417. let numArr = json.digitaldata.sort(function(a, b){ return a - b });
  2418. let numLen = numArr.length;
  2419. let numindex = parseInt(numLen / 2);
  2420. if(numLen % 2 == 0){
  2421. json.result = (numArr[numindex - 1] + numArr[numindex]) / 2;
  2422. }
  2423. else{
  2424. json.result = numArr[numindex];
  2425. }
  2426. }
  2427. else if (json.sumtype == "PRODUCT") {
  2428. json.result = new Function("return " + json.digitaldata.join("*"))();
  2429. }
  2430. else if (json.sumtype == "STDEV") {
  2431. let mean = json.sum / json.count;
  2432. json.result = analysis.STDEV(mean, json.digitaldata);
  2433. }
  2434. else if (json.sumtype == "STDEVP") {
  2435. let mean = json.sum / json.count;
  2436. json.result = analysis.STDEVP(mean, json.digitaldata);
  2437. }
  2438. else if (json.sumtype == "let") {
  2439. let mean = json.sum / json.count;
  2440. json.result = analysis.let(mean, json.digitaldata);
  2441. }
  2442. else if (json.sumtype == "VARP") {
  2443. let mean = json.sum / json.count;
  2444. json.result = analysis.VARP(mean, json.digitaldata);
  2445. }
  2446. let newAcc = numfloatlen(json.result);
  2447. if(newAcc > json.acc){
  2448. json.acc = newAcc;
  2449. }
  2450. json.result = numFormat(json.result, json.acc);
  2451. }
  2452. datarowtitle = _this.getTitleFromGroup(datarowtitlegroup, row, dataposition);
  2453. datacoltitle = _this.getTitleFromGroup(datacoltitlegroup, column, dataposition);
  2454. //加入值到列/行形成新的表头
  2455. if (showType == "column") {
  2456. if (datacoltitle.length > 0 && datacoltitle[0].length > 0) {
  2457. datacoltitle = _this.addValuesToTitle(datacoltitle, values);
  2458. }
  2459. else {
  2460. for (let v = 0; v < values.length; v++) {
  2461. datacoltitle.push([values[v].fullname]);
  2462. }
  2463. }
  2464. }
  2465. else {
  2466. if (datarowtitle.length > 0 && datarowtitle[0].length > 0) {
  2467. datarowtitle = _this.addValuesToTitle(datarowtitle, values);
  2468. }
  2469. else {
  2470. for (let v = 0; v < values.length; v++) {
  2471. datarowtitle.push([values[v].fullname]);
  2472. }
  2473. }
  2474. }
  2475. let datacoltitle_index = datacoltitle;
  2476. datacoltitle = luckysheetArray.transpose(datacoltitle, false);
  2477. let valuenslen = values.length == 0 ? 0 : 1;
  2478. let rowLen = (datacoltitle.length == 0 ? valuenslen : datacoltitle.length) + (datarowtitle.length == 0 ? valuenslen : datarowtitle.length), colLen = (datacoltitle.length == 0 ? valuenslen : datacoltitle[0].length) + (datarowtitle.length == 0 ? valuenslen : datarowtitle[0].length);
  2479. let rowOver = datacoltitle.length, colOver = datarowtitle.length == 0 ? 0 : datarowtitle[0].length;
  2480. let retdata = [];
  2481. for (let r = 0; r < rowLen; r++) {
  2482. retdata[r] = new Array(colLen);
  2483. for (let c = 0; c < colLen; c++) {
  2484. let drt = datarowtitle[r - rowOver];
  2485. if (r < rowOver && c < colOver) {
  2486. //空白列头
  2487. retdata[r][c] = "";
  2488. }
  2489. else if (r < rowOver && c >= colOver) {
  2490. //列标题
  2491. if (datacoltitle[r] != null) {
  2492. if (getObjType(datacoltitle[r][c - colOver]) == "object") {
  2493. retdata[r][c] = datacoltitle[r][c - colOver].name + locale_pivotTable.valueSum;
  2494. }
  2495. else {
  2496. retdata[r][c] = datacoltitle[r][c - colOver];
  2497. }
  2498. }
  2499. else {
  2500. retdata[r][c] = "";
  2501. }
  2502. }
  2503. else if (r >= rowOver && c < colOver) {
  2504. //行标题
  2505. if (drt != null) {
  2506. if (getObjType(drt[c]) == "object") {
  2507. retdata[r][c] = drt[c].name + locale_pivotTable.valueSum;
  2508. }
  2509. else {
  2510. retdata[r][c] = drt[c];
  2511. }
  2512. }
  2513. else {
  2514. retdata[r][c] = "";
  2515. }
  2516. }
  2517. else {
  2518. //单元格内容
  2519. let prefix = "";
  2520. if (drt != null) {
  2521. if (!(drt instanceof Array) || drt.length == 1) {
  2522. if (drt instanceof Array) {
  2523. prefix = drt[0];
  2524. }
  2525. else {
  2526. prefix = drt;
  2527. }
  2528. }
  2529. else {
  2530. for (let x = 0; x < drt.length; x++) {
  2531. if (getObjType(drt[x]) == "object") {
  2532. prefix += drt[x].name;
  2533. }
  2534. else {
  2535. prefix += drt[x];
  2536. }
  2537. }
  2538. }
  2539. }
  2540. let suffix = "";
  2541. let dct = datacoltitle_index[c - colOver];
  2542. if (dct != null) {
  2543. if (!(dct instanceof Array) || dct.length == 1) {
  2544. if (dct instanceof Array) {
  2545. suffix = dct[0];
  2546. }
  2547. else {
  2548. suffix = dct;
  2549. }
  2550. }
  2551. else {
  2552. for (let x = 0; x < dct.length; x++) {
  2553. if (getObjType(dct[x]) == "object") {
  2554. suffix += dct[x].name;
  2555. }
  2556. else {
  2557. suffix += dct[x];
  2558. }
  2559. }
  2560. }
  2561. }
  2562. let indicator = prefix;
  2563. if (prefix != "" && suffix != "") {
  2564. indicator = prefix + suffix;
  2565. }
  2566. else if (prefix == "") {
  2567. indicator = suffix;
  2568. }
  2569. if (dataposition[indicator] == null) {
  2570. retdata[r][c] = "";
  2571. }
  2572. else {
  2573. retdata[r][c] = dataposition[indicator].result;
  2574. }
  2575. }
  2576. }
  2577. }
  2578. if (values.length == 1 && column.length > 0 && row.length > 0 ) {
  2579. retdata[0][0] = values[0].fullname;
  2580. retdata.splice(column.length, 1);
  2581. }
  2582. else if(values.length == 1 && column.length > 0){
  2583. // 0: (6) ["English", "foreign language", "mathematics", "science", "Sum", undefined]
  2584. // 1: (6) ["CountA:score", "CountA:score", "CountA:score", "CountA:score", "CountA:score", undefined]
  2585. // 2: (6) [3, 3, 3, 3, 12, ""]
  2586. //The above format does not meet viewing habits,Process retdata into the correct format
  2587. let titleRow = retdata.splice(column.length, 1);
  2588. let newRetdata = [];
  2589. for(let r=0;r<retdata.length;r++){
  2590. let row = [];
  2591. if(r==retdata.length-1){
  2592. row.push(titleRow[0][0]);
  2593. }
  2594. else{
  2595. row.push("");
  2596. }
  2597. for(let c=0;c<retdata[r].length-1;c++){
  2598. row.push(retdata[r][c]);
  2599. }
  2600. newRetdata.push(row);
  2601. }
  2602. retdata = newRetdata;
  2603. }
  2604. _this.pivotDatas = retdata;
  2605. return retdata;
  2606. },
  2607. drillDown: function(row_index, col_index){
  2608. if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "usePivotTablereports")){
  2609. return;
  2610. }
  2611. let _this = this;
  2612. let cell = _this.pivotDatas[row_index][col_index];
  2613. let d = $.extend(true, [], sheetmanage.nulldata);
  2614. const _locale = locale();
  2615. const locale_filter = _locale.filter;
  2616. const locale_pivotTable = _locale.pivotTable;
  2617. let selecteditemNullIndex = 1;
  2618. for(let i = 0; i < _this.celldata[0].length; i++){
  2619. let name;
  2620. if(!!_this.celldata[0][i] && !!_this.celldata[0][i]["m"]){
  2621. name = _this.celldata[0][i]["m"];
  2622. }
  2623. else{
  2624. name = getcellvalue(0, i, _this.celldata);
  2625. }
  2626. if(name != null){
  2627. name = name.toString();
  2628. }
  2629. if (name == null || $.trim(name.toString()).length == 0) {
  2630. name = locale_pivotTable.titleColumn+" " + selecteditemNullIndex;
  2631. }
  2632. selecteditemNullIndex++
  2633. d[0][i] = name;
  2634. }
  2635. let obj = {};
  2636. //行
  2637. if(_this.row != null && _this.row.length > 0){
  2638. for(let a = 0; a < _this.row.length; a++){
  2639. obj[_this.row[a]["index"]] = _this.pivotDatas[row_index][a];
  2640. }
  2641. }
  2642. //列
  2643. if(_this.column != null && _this.column.length > 0){
  2644. for(let b = 0; b < _this.column.length; b++){
  2645. obj[_this.column[b]["index"]] = _this.pivotDatas[b][col_index];
  2646. }
  2647. }
  2648. let rowArr = [];
  2649. for(let j = 1; j < _this.celldata.length; j++){
  2650. let isEqual = true
  2651. for(let x in obj){
  2652. let value;
  2653. if(!!_this.celldata[j][x] && !!_this.celldata[j][x]["m"]){
  2654. value = _this.celldata[j][x]["m"];
  2655. }
  2656. else{
  2657. value = getcellvalue(j, x, _this.celldata);
  2658. }
  2659. if(value != null){
  2660. value = value.toString();
  2661. }
  2662. else{
  2663. value = locale_filter.valueBlank;
  2664. }
  2665. if(value != obj[x]){
  2666. isEqual = false;
  2667. break;
  2668. }
  2669. }
  2670. if(isEqual){
  2671. rowArr.push(j);
  2672. }
  2673. }
  2674. for(let r = 0; r < rowArr.length; r++){
  2675. for(let c = 0; c < _this.celldata[0].length; c++){
  2676. let value;
  2677. if(!!_this.celldata[rowArr[r]][c] && !!_this.celldata[rowArr[r]][c]["m"]){
  2678. value = _this.celldata[rowArr[r]][c]["m"];
  2679. }
  2680. else{
  2681. value = getcellvalue(rowArr[r], c, _this.celldata);
  2682. }
  2683. if(value != null){
  2684. value = value.toString();
  2685. }
  2686. else{
  2687. value = "";
  2688. }
  2689. d[r + 1][c] = value;
  2690. }
  2691. }
  2692. Store.luckysheet_select_save = [{ "row": [0, rowArr.length], "column": [0, _this.celldata[0].length - 1] }];
  2693. Store.clearjfundo = false;
  2694. jfrefreshgrid(d, Store.luckysheet_select_save);
  2695. selectHightlightShow();
  2696. Store.clearjfundo = true;
  2697. }
  2698. }
  2699. export default pivotTable;