reportview.js 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333
  1. Highcharts.theme = {
  2. colors: ["#90bafe", "#93ebe5", "#fda4a1", "#5deab1", "#fdf2bf", "#fdcebf", "#8ff4ff", "#d4fce1", "#2b7bfd", "#3ddbd1", "#fa433d", "#1ac781", "#f9df5d", "#f9845d", "#29eaff", "#75f59e", "#5d9bfd", "#68e3db", "#fb736f", "#2fe49c", "#fbe98e", "#fba98e", "#5cefff", "#a5f8bf"]
  3. };
  4. var ONLYONESERIENAME = "serie1",
  5. ROTATIONCATEGORIESLENGTH = 10,
  6. commonOptions = {
  7. colors: Highcharts.theme.colors,
  8. chart: {},
  9. title: {
  10. text: ""
  11. },
  12. yAxis: {
  13. title: {
  14. text: ""
  15. },
  16. min: 0
  17. },
  18. tooltip: {
  19. formatter: function() {
  20. if (this.series.chart.series.length > 1) {
  21. return "<b>" + this.series.name + "</b><br/>" + this.x + ": " + this.y
  22. } else {
  23. return this.x + ": " + this.y
  24. }
  25. }
  26. },
  27. plotOptions: {
  28. column: {
  29. borderWidth: 0,
  30. dataLabels: {
  31. enabled: true
  32. }
  33. },
  34. bar: {
  35. borderWidth: 0,
  36. dataLabels: {
  37. enabled: true
  38. }
  39. },
  40. area: {
  41. marker: {
  42. enabled: false,
  43. symbol: "circle",
  44. radius: 2,
  45. states: {
  46. hover: {
  47. enabled: true
  48. }
  49. }
  50. }
  51. }
  52. }
  53. },
  54. dateformatters = {
  55. formatHour: function(a) {
  56. if (a.length === 1) {
  57. return "0" + a + ":00"
  58. } else {
  59. return a + ":00"
  60. }
  61. },
  62. formatDay: function(b) {
  63. if (b.indexOf("__") > -1) {
  64. var a = b.split("__");
  65. return a[0] + "-" + a[1]
  66. } else {
  67. return b + "日"
  68. }
  69. },
  70. formatWeek: function(a) {
  71. var b = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"];
  72. return b[parseInt(a) - 1]
  73. },
  74. formatMonth: function(a) {
  75. return a + "月"
  76. },
  77. formatYear: function(a) {
  78. return a + "年"
  79. }
  80. };
  81. function fillNumber(c, e, d, a) {
  82. var b = D[c].numberCount;
  83. if (e === "avg") {
  84. b = Math.round(D[c].numberCount * 100 / D[c].numberTimeCount) / 100
  85. }
  86. if (d === "normal") {
  87. b = Highcharts.numberFormat(b, 2)
  88. } else {
  89. if (d === "rounded") {
  90. b = Highcharts.numberFormat(b, 0)
  91. } else {
  92. if (d === "decimal") {
  93. b = Highcharts.numberFormat(b, 2)
  94. } else {
  95. if (d === "scientific") {
  96. b = new Number(b).toExponential(2)
  97. } else {
  98. if (d === "currency") {
  99. b = currencys[a] + Highcharts.numberFormat(b, 2)
  100. } else {
  101. if (d === "currencyround") {
  102. b = currencys[a] + Highcharts.numberFormat(b, 0)
  103. }
  104. }
  105. }
  106. }
  107. }
  108. }
  109. $("#w" + c).find(".val").text(b)
  110. }
  111. function createPie(b, a, e) {
  112. var d = {
  113. chart: {
  114. renderTo: "w" + b,
  115. plotBackgroundColor: null,
  116. plotBorderWidth: null,
  117. plotShadow: true
  118. },
  119. title: {
  120. text: ""
  121. },
  122. tooltip: {
  123. formatter: function() {
  124. return "<b>" + this.point.name + "</b>:" + this.point.v
  125. }
  126. },
  127. plotOptions: {
  128. pie: {
  129. borderWidth: 0,
  130. allowPointSelect: true,
  131. cursor: "pointer",
  132. dataLabels: {
  133. color: "#000000",
  134. connectorColor: "#000000",
  135. distance: 10,
  136. width: "100px",
  137. formatter: function() {
  138. return "<b>" + this.point.name + "</b>:" + this.y + "%"
  139. }
  140. }
  141. }
  142. },
  143. series: getPieSeries(b, e)
  144. },
  145. c = new Highcharts.Chart($.extend(true, d, a))
  146. }
  147. function createCol(d, b, f) {
  148. if (!D[d] || !D[d].categories) {
  149. return
  150. }
  151. var c = getCommonSeries(d, f),
  152. g = !(c.length === 1 && c[0].name === ONLYONESERIENAME),
  153. a = 0,
  154. e = "center";
  155. if (D[d].categories.length >= ROTATIONCATEGORIESLENGTH) {
  156. a = -45;
  157. e = "right"
  158. }
  159. opts = {
  160. chart: {
  161. renderTo: "w" + d,
  162. defaultSeriesType: "column"
  163. },
  164. xAxis: {
  165. categories: D[d].categories,
  166. labels: {
  167. rotation: a,
  168. align: e
  169. }
  170. },
  171. legend: {
  172. enabled: g
  173. },
  174. series: c
  175. },
  176. chart = new Highcharts.Chart($.extend(true, {},
  177. commonOptions, opts, b))
  178. }
  179. function createStackCol(d, b, f) {
  180. if (!D[d].categories) {
  181. return
  182. }
  183. var c = getCommonSeries(d, f),
  184. g = !(c.length === 1 && c[0].name === ONLYONESERIENAME),
  185. a = 0,
  186. e = "center";
  187. if (D[d].categories.length >= ROTATIONCATEGORIESLENGTH) {
  188. a = -45;
  189. e = "right"
  190. }
  191. opts = {
  192. chart: {
  193. renderTo: "w" + d,
  194. defaultSeriesType: "column"
  195. },
  196. xAxis: {
  197. categories: D[d].categories,
  198. labels: {
  199. rotation: a,
  200. align: e
  201. }
  202. },
  203. yAxis: {
  204. stackLabels: {
  205. enabled: true
  206. }
  207. },
  208. legend: {
  209. enabled: g
  210. },
  211. tooltip: {
  212. formatter: function() {
  213. return "<b>" + this.x + "</b><br/>" + this.series.name + ": " + this.y + "<br/>Total: " + this.point.stackTotal
  214. }
  215. },
  216. plotOptions: {
  217. column: {
  218. stacking: "normal",
  219. dataLabels: {
  220. enabled: true,
  221. color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || "white"
  222. }
  223. }
  224. },
  225. series: c
  226. },
  227. chart = new Highcharts.Chart($.extend(true, {},
  228. commonOptions, opts, b))
  229. }
  230. function createBar(c, a, f) {
  231. if (!D[c].categories) {
  232. return
  233. }
  234. var b = getCommonSeries(c, f),
  235. g = !(b.length === 1 && b[0].name === ONLYONESERIENAME),
  236. e = {
  237. chart: {
  238. renderTo: "w" + c,
  239. defaultSeriesType: "bar"
  240. },
  241. xAxis: {
  242. categories: D[c].categories
  243. },
  244. legend: {
  245. enabled: g
  246. },
  247. series: b
  248. },
  249. d = new Highcharts.Chart($.extend(true, {},
  250. commonOptions, e, a))
  251. }
  252. function createStackBar(c, a, f) {
  253. if (!D[c].categories) {
  254. return
  255. }
  256. var b = getCommonSeries(c, f),
  257. g = !(b.length === 1 && b[0].name === ONLYONESERIENAME),
  258. e = {
  259. chart: {
  260. renderTo: "w" + c,
  261. defaultSeriesType: "bar"
  262. },
  263. xAxis: {
  264. categories: D[c].categories
  265. },
  266. yAxis: {
  267. stackLabels: {
  268. enabled: true
  269. }
  270. },
  271. legend: {
  272. enabled: g
  273. },
  274. tooltip: {
  275. formatter: function() {
  276. return "<b>" + this.x + "</b><br/>" + this.series.name + ": " + this.y + "<br/>Total: " + this.point.stackTotal
  277. }
  278. },
  279. plotOptions: {
  280. bar: {
  281. stacking: "normal",
  282. dataLabels: {
  283. enabled: true,
  284. color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || "white"
  285. }
  286. }
  287. },
  288. series: b
  289. },
  290. d = new Highcharts.Chart($.extend(true, {},
  291. commonOptions, e, a))
  292. }
  293. function createLine(j, h, b, e, l) {
  294. if (!D[j].categories) {
  295. return
  296. }
  297. var g = getCommonSeries(j, b, false),
  298. f = !(g.length === 1 && g[0].name === ONLYONESERIENAME),
  299. d = D[j].categories,
  300. k = 0,
  301. c = "center";
  302. if (D[j].categories.length >= ROTATIONCATEGORIESLENGTH) {
  303. k = -45;
  304. c = "right"
  305. }
  306. if (e) {
  307. d = [];
  308. $(D[j].categories).each(function(m, n) {
  309. d.push(dateformatters[e](n))
  310. })
  311. }
  312. var a = {
  313. chart: {
  314. renderTo: "w" + j,
  315. defaultSeriesType: h
  316. },
  317. xAxis: {
  318. categories: d,
  319. labels: {
  320. rotation: k,
  321. align: c
  322. }
  323. },
  324. legend: {
  325. enabled: f
  326. },
  327. series: g
  328. },
  329. i = new Highcharts.Chart($.extend(true, {},
  330. commonOptions, a, l))
  331. }
  332. function createArea(i, c, k, b) {
  333. if (!D[i].categories) {
  334. return
  335. }
  336. var g = getCommonSeries(i, b),
  337. f = !(g.length === 1 && g[0].name === ONLYONESERIENAME),
  338. e = D[i].categories,
  339. j = 0,
  340. d = "center";
  341. if (D[i].categories.length >= ROTATIONCATEGORIESLENGTH) {
  342. j = -45;
  343. d = "right"
  344. }
  345. var a = {
  346. chart: {
  347. renderTo: "w" + i,
  348. defaultSeriesType: c
  349. },
  350. xAxis: {
  351. categories: D[i].categories,
  352. labels: {
  353. rotation: j,
  354. align: d
  355. }
  356. },
  357. legend: {
  358. enabled: f
  359. },
  360. series: g
  361. },
  362. h = new Highcharts.Chart($.extend(true, {},
  363. commonOptions, a, k))
  364. }
  365. function createStackArea(h, j, b) {
  366. if (!D[h].categories) {
  367. return
  368. }
  369. var f = getCommonSeries(h, b),
  370. e = !(f.length === 1 && f[0].name === ONLYONESERIENAME),
  371. d = D[h].categories,
  372. i = 0,
  373. c = "center";
  374. if (D[h].categories.length >= ROTATIONCATEGORIESLENGTH) {
  375. i = -45;
  376. c = "right"
  377. }
  378. var a = {
  379. chart: {
  380. renderTo: "w" + h,
  381. defaultSeriesType: "area"
  382. },
  383. xAxis: {
  384. categories: D[h].categories,
  385. labels: {
  386. rotation: i,
  387. align: c
  388. }
  389. },
  390. yAxis: {
  391. stackLabels: {
  392. enabled: true
  393. }
  394. },
  395. legend: {
  396. enabled: e
  397. },
  398. tooltip: {
  399. formatter: function() {
  400. return "<b>" + this.x + "</b><br/>" + this.series.name + ": " + this.y + "<br/>Total: " + this.point.stackTotal
  401. }
  402. },
  403. plotOptions: {
  404. area: {
  405. stacking: "normal",
  406. dataLabels: {
  407. color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || "white"
  408. }
  409. }
  410. },
  411. series: f
  412. },
  413. g = new Highcharts.Chart($.extend(true, {},
  414. commonOptions, a, j))
  415. }
  416. function getPieSeries(h, a) {
  417. if (!D[h].categories) {
  418. return
  419. }
  420. var c = [],
  421. d,
  422. f = false,
  423. g = 0,
  424. b = 0,
  425. i = ["75%"],
  426. e = ["0"];
  427. $.each(D[h].series,
  428. function(j, l) {
  429. b++;
  430. $(l).each(function(m, k) {
  431. l[m] = Math.round(k * 100) / 100
  432. })
  433. });
  434. if (b == 2) {
  435. i = ["45%", "100%"];
  436. e = ["20%", "45%"]
  437. }
  438. $.each(D[h].series,
  439. function(j, m) {
  440. if (a == "avg") {
  441. var l = D[h].timeCountSeries[j];
  442. $(m).each(function(o, n) {
  443. var k = n;
  444. if (l[o] != 0) {
  445. k = Math.round((m[o] / l[o]) * 100) / 100
  446. } else {
  447. k = 0
  448. }
  449. m[o] = k
  450. })
  451. }
  452. });
  453. orderSeries(h);
  454. $.each(D[h].series,
  455. function(j, n) {
  456. if (g == b - 1) {
  457. f = true
  458. }
  459. var m = {
  460. type: "pie",
  461. data: [],
  462. name: j,
  463. size: i[g],
  464. innerSize: e[g],
  465. dataLabels: {
  466. enabled: f
  467. }
  468. },
  469. l = 0;
  470. $(n).each(function(o, k) {
  471. l += k
  472. });
  473. $(n).each(function(k, o) {
  474. m.data.push({
  475. name: D[h].categories[k],
  476. color: Highcharts.theme.colors[k % Highcharts.theme.colors.length],
  477. y: Math.round(o * 1000 / l) / 10,
  478. v: o
  479. })
  480. });
  481. c.push(m);
  482. g++
  483. });
  484. return c
  485. }
  486. function orderSeries(a) {
  487. var q = a.split("_"),
  488. s = R.WGTS[q[0]][q[1]],
  489. o = s.CATSORT;
  490. var n, r = [],
  491. g = D[a].series,
  492. h = D[a].categories;
  493. if (!h || h.length == 0) {
  494. return
  495. }
  496. var c = 0;
  497. $.each(g,
  498. function(i, j) {
  499. if (o) {
  500. n = h;
  501. r.push(i)
  502. } else {
  503. if (c == 0) {
  504. n = j
  505. } else {
  506. r.push(i)
  507. }
  508. c++
  509. }
  510. });
  511. var f = 0;
  512. var d = n.length - 1;
  513. var p = function(v, t) {
  514. if (v == t) {
  515. return
  516. }
  517. var u = n[v],
  518. x = h[v],
  519. w = [];
  520. $.each(r,
  521. function(j, i) {
  522. w[j] = g[i][v]
  523. });
  524. var l = v;
  525. var k = t;
  526. while (t > v) {
  527. if (n[t] >= u) {
  528. t--
  529. } else {
  530. n[v] = n[t];
  531. h[v] = h[t];
  532. $.each(r,
  533. function(j, i) {
  534. g[i][v] = g[i][t]
  535. });
  536. while (t > ++v) {
  537. if (n[v] > u) {
  538. n[t] = n[v];
  539. h[t] = h[v];
  540. $.each(r,
  541. function(j, i) {
  542. g[i][t] = g[i][v]
  543. });
  544. break
  545. }
  546. }
  547. }
  548. }
  549. if (l == v) {
  550. p(++v, k);
  551. return
  552. }
  553. n[v] = u;
  554. h[v] = x;
  555. $.each(r,
  556. function(j, i) {
  557. g[i][v] = w[j]
  558. });
  559. p(l, v);
  560. p(t, k)
  561. };
  562. p(f, d);
  563. if ("1" != o) {
  564. var b = h.length,
  565. m = Math.floor(b / 2);
  566. for (var f = 0; f < m; f++) {
  567. var e = h[f];
  568. h[f] = h[b - f - 1];
  569. h[b - f - 1] = e;
  570. $.each(g,
  571. function(i, j) {
  572. e = j[f];
  573. j[f] = j[b - f - 1];
  574. j[b - f - 1] = e
  575. })
  576. }
  577. }
  578. }
  579. function getCommonSeries(b, c, d) {
  580. if (!D[b].series) {
  581. return []
  582. }
  583. var a = [];
  584. $.each(D[b].series,
  585. function(e, f) {
  586. $.each(f,
  587. function(g, h) {
  588. f[g] = Math.formatFloat(h, 2)
  589. })
  590. });
  591. if (c === "avg") {
  592. $.each(D[b].series,
  593. function(e, f) {
  594. $(f).each(function(h, g) {
  595. if (D[b].timeCountSeries[e][h] !== 0) {
  596. f[h] = Math.round(g * 100 / D[b].timeCountSeries[e][h]) / 100
  597. } else {
  598. f[h] = 0
  599. }
  600. })
  601. })
  602. }
  603. if (!d) {
  604. orderSeries(b)
  605. }
  606. $.each(D[b].series,
  607. function(e, f) {
  608. a.push({
  609. name: e,
  610. data: f
  611. })
  612. });
  613. return a
  614. }
  615. function initLogo() {
  616. var b = $("#container").attr("mobile");
  617. if (b) {
  618. var c = $("#logo").find("a"),
  619. g = c.css("backgroundSize");
  620. if ("cover" == g) {
  621. var f = c.css("backgroundImage");
  622. if (f) {
  623. var e = f.substring(f.indexOf("(") + 1, f.lastIndexOf(")")).replace(/\"/g, "");
  624. var d = $($.format("<img src='{0}' style='border:none;width:100%;' />", e));
  625. c.append(d);
  626. d.load(function() {
  627. c.css({
  628. backgroundImage: "none",
  629. backgroundSize: "initial",
  630. height: $(this).height()
  631. })
  632. })
  633. }
  634. }
  635. }
  636. }
  637. function createTitle() {
  638. $("#rptTitle").text(R.RPT.TITLE);
  639. $("#rptDesc").text(R.RPT.DESC);
  640. if (R.RPT.EXP !== "1") {
  641. $("#exportButtons").hide()
  642. }
  643. $("#stage").addClass(isMobile ? "": "layout" + R.RPT.LAY)
  644. }
  645. function fillSubTitle(b, c) {
  646. var d = b.find(".subTitle"),
  647. a = {
  648. today: "[今天]",
  649. week: "[本周]",
  650. month: "[本月]",
  651. year: "[本年]",
  652. last24HR: "[过去24小时]",
  653. last7D: "[过去一周]",
  654. last30D: "[过去30天]",
  655. last12M: "[过去12个月]"
  656. };
  657. if (c.DRANG === "custom") {
  658. if (c.SDATE && c.EDATE) {
  659. d.text("[" + c.SDATE + " to " + c.EDATE + "]")
  660. } else {
  661. d.text("")
  662. }
  663. } else {
  664. if (c.DRANG !== "all") {
  665. d.text(a[c.DRANG])
  666. } else {
  667. d.text("")
  668. }
  669. }
  670. }
  671. function createChart(x, t, h, f) {
  672. if (!D[x].categories) {
  673. return
  674. }
  675. var w = [],
  676. q = [],
  677. a = $("<tbody></tbody>"),
  678. b,
  679. y = 0,
  680. n = 0,
  681. i = 0,
  682. u = 0,
  683. d,
  684. m = Highcharts.theme.colors,
  685. o;
  686. if (h === "likert") {
  687. var p = x.split("_"),
  688. l = R.WGTS[p[0]][p[1]],
  689. e = D[x].categories,
  690. s = D[x].series[ONLYONESERIENAME];
  691. $(F).each(function(c, z) {
  692. if (z.TYP === "likert") {
  693. $(z.ITMS).each(function(A, B) {
  694. if (B.NM === l.FLD) {
  695. $(B.ITMS).each(function(E, G) {
  696. q.push(G.VAL);
  697. var C = $.inArray(G.VAL, e);
  698. if (C >= 0) {
  699. w.push(s[C])
  700. } else {
  701. w.push(0)
  702. }
  703. })
  704. }
  705. })
  706. }
  707. })
  708. } else {
  709. q = D[x].categories;
  710. w = D[x].series[ONLYONESERIENAME]
  711. }
  712. var g = new Array();
  713. var k = new Array();
  714. $(q).each(function(A, c) {
  715. var z = new Array();
  716. z.push(c);
  717. z.push(w[A]);
  718. g[A] = z
  719. });
  720. $(w).each(function(z, A) {
  721. var c = new Array();
  722. c.push(A);
  723. c.push(q[z]);
  724. k[z] = c
  725. });
  726. function j(C, E) {
  727. for (var z = 0; z < C.length - 1; z++) {
  728. for (var B = z + 1; B < C.length; B++) {
  729. var H = C[z][0];
  730. var G = C[B][0];
  731. if (E && H && G && H > G) {
  732. var I = C[B];
  733. C[B] = C[z];
  734. C[z] = I
  735. } else {
  736. if (E && H && G && H == G) {
  737. var A = C[z][1];
  738. var c = C[B][1];
  739. if (A > c) {
  740. var I = C[B];
  741. C[B] = C[z];
  742. C[z] = I
  743. }
  744. }
  745. }
  746. if (!E && H < G) {
  747. var I = C[B];
  748. C[B] = C[z];
  749. C[z] = I
  750. } else {
  751. if (!E && H == G) {
  752. var A = C[z][1];
  753. var c = C[B][1];
  754. if (A > c) {
  755. var I = C[B];
  756. C[B] = C[z];
  757. C[z] = I
  758. }
  759. }
  760. }
  761. }
  762. }
  763. }
  764. $(q).each(function(z, c) {
  765. if (w[z] !== undefined) {
  766. y += w[z];
  767. u += (z + 1) * w[z]
  768. }
  769. });
  770. var v;
  771. if (f == "count") {
  772. j(g, true);
  773. v = g
  774. } else {
  775. j(k, false);
  776. v = k
  777. }
  778. $(v).each(function(A, z) {
  779. var B;
  780. var c;
  781. if (f == "count") {
  782. c = z[0];
  783. B = z[1]
  784. } else {
  785. c = z[1];
  786. B = z[0]
  787. }
  788. if (A % 2 === 0) {
  789. o = ""
  790. } else {
  791. o = "alt"
  792. }
  793. if (B !== undefined) {
  794. i = B;
  795. d = Highcharts.numberFormat(B * 100 / y, 0) + "%"
  796. } else {
  797. i = 0;
  798. d = "0%"
  799. }
  800. if (h === "likert") {
  801. c += $.format("<em>({0})<em>", A + 1)
  802. }
  803. b = $($.format('<tr class="{0}"><th><div>{1}</div></th><td class="percent"><div class="bar" style="width:{2};background-color:{3}"></div><var>{2}</var></td><td class="count">{4}</td></tr>', o, c, d, m[A % m.length], i));
  804. a.append(b)
  805. });
  806. if (h === "likert") {
  807. $(D[x].categories).each(function(z, A) {
  808. var c = false;
  809. $(q).each(function(C, B) {
  810. if (A === B) {
  811. c = true;
  812. return false
  813. }
  814. });
  815. if (!c) {
  816. b = $($.format('<tr class="{0}"><th><div>{1}<em>(0)<em></div></th><td class="percent"><div class="bar" style="width:{2};background-color:{3}"></div><var>{2}</var></td><td class="count">{4}</td></tr>', "alarm", A, "", "", w[z]));
  817. n += w[z];
  818. a.append(b)
  819. }
  820. })
  821. }
  822. var r = $($.format('<table cellspacing="0" class="fc"><caption><h4 class="title">标题</h4>&nbsp;</caption><thead><tr><th>选项</th><th class="percent">百分比</th><th class="count">小计</th></tr></thead><tfoot><tr><td class="empty">&nbsp;</td><th>合计</th><td class="count">{0}</td></tr><tr><td class="empty">&nbsp;</td><th><em>未填写</em></th><td class="count"><em>{1}</em></td></tr></tfoot></table>', y + n, D[x].noAnswer));
  823. if (h === "likert") {
  824. r.find("tfoot").append($.format('<tr><td class="empty">&nbsp;</td><th><em>平均分</em></th><td class="count"><em>{0}</em></td></tr>', Highcharts.numberFormat(u / y, 2)))
  825. }
  826. r.append(a);
  827. t.append(r)
  828. }
  829. function createAddressChart(o, k) {
  830. var f = $("<tbody></tbody>"),
  831. l = null,
  832. n,
  833. j = {},
  834. q = o.split("_"),
  835. m = 0,
  836. i = 0,
  837. r = R.WGTS[q[0]][q[1]],
  838. d,
  839. a,
  840. b,
  841. e,
  842. h,
  843. g = D[o].entries || [];
  844. $(F).each(function(c, s) {
  845. if (s.FLDID === r.FLD) {
  846. j.ZIP = s.SUBFLDS.ZIP.NM;
  847. j.PRV = s.SUBFLDS.PRV.NM;
  848. j.CITY = s.SUBFLDS.CITY.NM;
  849. j.DTL = s.SUBFLDS.DTL.NM;
  850. return false
  851. }
  852. });
  853. $(g).each(function(s, t) {
  854. if (! (t[j.COUN] || t[j.ZIP] || t[j.PRV] || t[j.CITY] || t[j.DTL])) {
  855. m++;
  856. return true
  857. } else {
  858. i++
  859. }
  860. if ((i - 1) % 3 === 0) {
  861. if (l !== null) {
  862. f.append(l)
  863. }
  864. l = $("<tr></tr>")
  865. }
  866. if ((i - 1) % 2 === 0) {
  867. n = "alt"
  868. } else {
  869. n = ""
  870. }
  871. a = t[j.ZIP] === undefined ? "": t[j.ZIP];
  872. b = t[j.PRV] === undefined ? "": t[j.PRV];
  873. e = t[j.PRV] === undefined ? "": t[j.CITY];
  874. h = t[j.DTL] === undefined ? "": t[j.DTL];
  875. l.append($.format('<td class="location {0}"><a href="{1}" target="_blank"><strong>{2}</strong><strong>{3},{4},{5}</strong></a></td>', n, $.format(mapUrlTxt, b + " " + e + " " + a + " " + h), b, e, a, h));
  876. if (s === g.length - 1) {
  877. if (i % 3 !== 0) {
  878. for (var c = 0; c < 3 - i % 3; c++) {
  879. l.append("<td></td>")
  880. }
  881. }
  882. f.append(l)
  883. }
  884. });
  885. var p = $($.format('<table cellspacing="0" class="fc cards"><caption><h4 class="title">标题</h4>&nbsp;</caption><thead><tr><th colspan="3">最近{0}条数据</th></tr></thead><tfoot><tr><th colspan="2">合计</th><td>{1}</td></tr><tr><th colspan="2"><em>未填写</em></th><td><em>{2}</em></td></tr></tfoot></table>', D[o].lastEntryLimit, i, m));
  886. p.append(f);
  887. k.append(p)
  888. }
  889. function createGrid(n, j) {
  890. var p = n.split("_"),
  891. f = R.WGTS[p[0]][p[1]],
  892. b = [],
  893. a = function() {
  894. var g = {},
  895. c = "";
  896. $(F).each(function(k, s) {
  897. if (s.TYP === "address") {
  898. g[s.SUBFLDS.PRV.NM] = {
  899. title: s.LBL + "(省/自治区/直辖市)"
  900. };
  901. g[s.SUBFLDS.CITY.NM] = {
  902. title: s.LBL + "(市)"
  903. };
  904. g[s.SUBFLDS.ZIP.NM] = {
  905. title: s.LBL + "(区/县)"
  906. };
  907. g[s.SUBFLDS.DTL.NM] = {
  908. title: s.LBL + "(详细地址)"
  909. }
  910. } else {
  911. if (s.TYP === "map") {
  912. g[s.SUBFLDS.TXT.NM] = {
  913. title: s.LBL
  914. }
  915. } else {
  916. if (s.TYP === "file") {
  917. g[s.SUBFLDS.ID.NM] = {
  918. title: s.LBL + "(文件ID)"
  919. };
  920. g[s.SUBFLDS.TYP.NM] = {
  921. title: s.LBL + "(文件类型)"
  922. };
  923. g[s.SUBFLDS.SZ.NM] = {
  924. title: s.LBL + "(文件大小)"
  925. };
  926. g[s.SUBFLDS.NM.NM] = {
  927. title: s.LBL + "(文件名称)"
  928. }
  929. } else {
  930. if (s.TYP === "dropdown2") {
  931. var t = 1;
  932. for (ddn in s.SUBFLDS) {
  933. g[s.SUBFLDS[ddn].NM] = {
  934. title: s.LBL + "(" + (t++) + ")"
  935. }
  936. }
  937. } else {
  938. if (s.TYP === "checkbox") {
  939. $(s.ITMS).each(function(u, v) {
  940. g[v.NM] = {
  941. title: v.VAL
  942. }
  943. })
  944. } else {
  945. if (s.TYP === "likert") {
  946. $(s.ITMS).each(function(u, v) {
  947. g[v.NM] = {
  948. title: v.LBL
  949. }
  950. })
  951. } else {
  952. var r = {
  953. title: s.LBL
  954. };
  955. if (s.TYP === "number" || s.TYP === "money") {
  956. r.align = "right"
  957. }
  958. g[s.NM] = r
  959. }
  960. }
  961. }
  962. }
  963. }
  964. }
  965. });
  966. $.extend(true, g, DataGrid.getCommonFieldsMap());
  967. return g
  968. },
  969. l = function(v, w, u, s, c) {
  970. var t = [];
  971. var r = s;
  972. if (!r) {
  973. r = ["CTIME_-1"]
  974. }
  975. if (!$.isArray(r)) {
  976. console.error("sortString不是个数组!");
  977. return
  978. }
  979. $.each(r,
  980. function(x, y) {
  981. var A = {};
  982. var B = y.substring(0, y.lastIndexOf("_"));
  983. var z = y.substring(y.lastIndexOf("_") + 1);
  984. A[B] = z;
  985. t.push(A)
  986. });
  987. if (!v) {
  988. v = {
  989. FIRST: {},
  990. LAST: {}
  991. }
  992. }
  993. var k = {
  994. PRTID: R._id,
  995. WGTKEY: n,
  996. SORTBY: t,
  997. PAGESIZE: parseInt(u),
  998. PAGEINFO: v,
  999. PREORNEXT: w
  1000. };
  1001. var g = $("#load" + c.attr("id"));
  1002. g.css({
  1003. top: "",
  1004. left: ""
  1005. });
  1006. g.position({
  1007. of: c.parent().parent(),
  1008. at: "center middle",
  1009. my: "center middle"
  1010. });
  1011. g.show();
  1012. $.postJSON("/web/reportview/getgriddata.json", k,
  1013. function(z) {
  1014. var A = z.rows;
  1015. if ("LAST" == w) {
  1016. A = z.rows.reverse()
  1017. }
  1018. var y = c.datagrid("option").pageNumber;
  1019. var x = {
  1020. FIRST: 1,
  1021. LAST: Math.ceil(z.total / u),
  1022. PRE: y - 1,
  1023. NEXT: y + 1
  1024. };
  1025. y = x[w];
  1026. c.datagrid("option", {
  1027. pageNumber: y,
  1028. pageSize: u
  1029. });
  1030. c.datagrid("fillData", {
  1031. rows: A,
  1032. total: z.total
  1033. });
  1034. g.hide()
  1035. })
  1036. };
  1037. j.append('<table class="grid" cellspacing="0" id="g' + n + '" title="数据列表"><thead><tr></tr></thead><tbody></tbody></table>');
  1038. var m = F.slice(0);
  1039. if (FRM.VERIFY == "1") {
  1040. m.push({
  1041. LBL: "核销码",
  1042. NM: "VERIFYID",
  1043. FLDID: "VERIFYID",
  1044. TYP: "text"
  1045. });
  1046. m.push({
  1047. LBL: "核销状态",
  1048. NM: "VERIFYSTATUS",
  1049. FLDID: "VERIFYSTATUS",
  1050. TYP: "text"
  1051. });
  1052. m.push({
  1053. LBL: "核销过期时间",
  1054. NM: "VERIFYDATE",
  1055. FLDID: "VERIFYDATE",
  1056. TYP: "date"
  1057. })
  1058. }
  1059. b = DataGrid.getAllColumns(F, FRM.EX, null);
  1060. if (f.ALLFLDS != "1") {
  1061. var h = a();
  1062. if (f.ISEDT === "1") {
  1063. $(b).each(function(k, c) {
  1064. var g = true;
  1065. $(f.FLDS).each(function(r, s) {
  1066. if (c.field === s) {
  1067. g = false;
  1068. return false
  1069. }
  1070. });
  1071. if (g) {
  1072. c.hide = "1"
  1073. }
  1074. })
  1075. } else {
  1076. for (var e = b.length - 1; e >= 0; e--) {
  1077. var i = true;
  1078. $(f.FLDS).each(function(c, g) {
  1079. if (b[e].field == g) {
  1080. i = false;
  1081. return false
  1082. }
  1083. });
  1084. if (i) {
  1085. b.splice(e, 1)
  1086. }
  1087. }
  1088. }
  1089. }
  1090. $(b).each(function(g, c) {
  1091. if (f.SORTFLD === c.field) {
  1092. c.sort = f.SRT;
  1093. return false
  1094. }
  1095. });
  1096. var d = [];
  1097. var q = {
  1098. rownumbers: "0",
  1099. pageSize: f.PGSZ,
  1100. columns: b,
  1101. query: l,
  1102. sort: ["CTIME_-1"]
  1103. };
  1104. if (f.SORTFLD) {
  1105. d[0] = f.SORTFLD + "_" + f.SRT;
  1106. q.sort = d
  1107. } else {
  1108. q.sort = ["CTIME_-1"]
  1109. }
  1110. j.find("#g" + n).datagrid(q);
  1111. var o = $('<div class="hide" style="position:absolute;" id="loadg' + n + '"><img src="' + resRoot + '/css/images/loading2.gif" /></div>');
  1112. $("body").append(o);
  1113. l(null, "FIRST", f.PGSZ, j.find("#g" + n).datagrid("getSortString"), j.find("#g" + n))
  1114. }
  1115. function createWidgets(e) {
  1116. var c, d, b, a = [$("#z1"), $("#z2"), $("#z3")];
  1117. $(R.WGTS).each(function(f, g) {
  1118. $(g).each(function(k, i) {
  1119. b = f + "_" + k;
  1120. c = i.TYP;
  1121. d = i.GTYP;
  1122. if (c === "advanced") {
  1123. c = i.ADTYP
  1124. }
  1125. var l = $('<div class="widget wgt_' + c + '"></div>');
  1126. if (e) {
  1127. e.append(l)
  1128. } else {
  1129. a[f].append(l)
  1130. }
  1131. if (c === "grid" || c === "chart") {
  1132. l.addClass("noFloat")
  1133. }
  1134. if (c === "graph") {
  1135. l.append('<div><h4 class="title"></h4>&nbsp;<span class="subTitle"></span></div><div class="wgtContainer" id=w' + b + "></div>");
  1136. var h = l.find(".wgtContainer");
  1137. if (d === "pie") {
  1138. if (i.SZ === "small" || isMobile) {
  1139. h.css({
  1140. width: "280px",
  1141. height: "150px"
  1142. })
  1143. } else {
  1144. if (i.SZ === "large") {
  1145. h.css({
  1146. width: "600px",
  1147. height: "300px"
  1148. })
  1149. } else {
  1150. h.css({
  1151. width: "330px",
  1152. height: "220px"
  1153. })
  1154. }
  1155. }
  1156. } else {
  1157. if (i.SZ === "small" || isMobile) {
  1158. h.css({
  1159. width: "410px",
  1160. height: "110px"
  1161. })
  1162. } else {
  1163. if (i.SZ === "large") {
  1164. h.css({
  1165. width: "1260px",
  1166. height: "250px"
  1167. })
  1168. } else {
  1169. h.css({
  1170. width: "790px",
  1171. height: "160px"
  1172. })
  1173. }
  1174. }
  1175. }
  1176. } else {
  1177. if (c === "number") {
  1178. l.attr("id", "w" + b);
  1179. l.append('<strong class="title"></strong><var class="val"></var><em class="numDesc"></em>');
  1180. l.find(".numDesc").text(i.DESC);
  1181. l.find(".val").addClass(i.CLR)
  1182. } else {
  1183. if (c === "text") {
  1184. l.append('<div class="textDesc"></div>');
  1185. l.find(".textDesc").html(i.TEXT)
  1186. } else {
  1187. if (c === "chart") {
  1188. if (i.CHTTYP === "address") {
  1189. createAddressChart(b, l)
  1190. } else {
  1191. createChart(b, l, i.CHTTYP, i.COUNTSORT)
  1192. }
  1193. if (i.FLDDTL === "percent") {
  1194. l.find("tfoot").hide();
  1195. l.find(".count").hide()
  1196. } else {
  1197. if (i.FLDDTL === "count") {
  1198. l.find(".percent").hide();
  1199. l.find(".empty").hide()
  1200. }
  1201. }
  1202. } else {
  1203. if (c === "grid") {
  1204. createGrid(b, l)
  1205. }
  1206. }
  1207. }
  1208. }
  1209. }
  1210. if (i.TITLE) {
  1211. l.find(".title").text(i.TITLE)
  1212. }
  1213. if (i.DRANG) {
  1214. fillSubTitle(l, i)
  1215. }
  1216. if (d === "pie") {
  1217. createPie(b, i.options, i.CNTTYP)
  1218. } else {
  1219. if (d === "col") {
  1220. createCol(b, i.options, i.CNTTYP)
  1221. } else {
  1222. if (d === "stackcol") {
  1223. createStackCol(b, i.options, i.CNTTYP)
  1224. } else {
  1225. if (d === "area" || d === "areaspline") {
  1226. createArea(b, d, i.options, i.CNTTYP)
  1227. } else {
  1228. if (d === "stackarea") {
  1229. createStackArea(b, i.options, i.CNTTYP)
  1230. } else {
  1231. if (d === "bar") {
  1232. createBar(b, i.options, countType)
  1233. } else {
  1234. if (d === "stackbar") {
  1235. createStackBar(b, i.options, i.CNTTYP)
  1236. } else {
  1237. if (d === "line" || d === "spline") {
  1238. i.CATSORT = true;
  1239. createLine(b, d, i.CNTTYP, i.XGRPFMT, i.options)
  1240. } else {
  1241. if (c === "number") {
  1242. fillNumber(b, i.CNTTYP, i.FMT, i.CURR, i.options)
  1243. }
  1244. }
  1245. }
  1246. }
  1247. }
  1248. }
  1249. }
  1250. }
  1251. }
  1252. })
  1253. })
  1254. }
  1255. function initExportAndRefresh() {
  1256. $("#exportButton").click(function() {
  1257. if ($.browser.msie && $.browser.version === "6.0") {
  1258. $("#lightBox").css("margin-top", $(document).scrollTop() - 210)
  1259. }
  1260. $.lightBox({
  1261. url: "/web/exportoption.jsp?RPTID=" + R._id + "&REPORT=1"
  1262. })
  1263. });
  1264. if (R.ISCACHE) {
  1265. $("#cacheInfo").show().find("span").text(R.CACHETM);
  1266. $("#refresh").click(function() {
  1267. $.showStatus();
  1268. $.postJSON("/web/reportview/getrealtimedata", {
  1269. RPTID: R._id
  1270. },
  1271. function(a) {
  1272. D = a;
  1273. $("#z1,#z2,#z3").empty();
  1274. createWidgets();
  1275. $.hideStatus()
  1276. });
  1277. $("#cacheInfo").find("span").text("实时统计");
  1278. $(this).hide();
  1279. return false
  1280. })
  1281. } else {
  1282. if ("1" === R.RPT.CACHE) {
  1283. $("#cacheInfo").show().find("span").text("实时统计");
  1284. $("#refresh").hide()
  1285. }
  1286. }
  1287. }
  1288. function onBridgeReady() {
  1289. WeixinJSBridge.call("hideOptionMenu")
  1290. }
  1291. function initWeixinShare() {
  1292. if (R.DISSHARE === "1") {
  1293. if (typeof WeixinJSBridge == "undefined") {
  1294. if (document.addEventListener) {
  1295. document.addEventListener("WeixinJSBridgeReady", onBridgeReady, false)
  1296. } else {
  1297. if (document.attachEvent) {
  1298. document.attachEvent("WeixinJSBridgeReady", onBridgeReady);
  1299. document.attachEvent("onWeixinJSBridgeReady", onBridgeReady)
  1300. }
  1301. }
  1302. } else {
  1303. onBridgeReady()
  1304. }
  1305. }
  1306. }
  1307. head.ready(function() {
  1308. if (isEmbed) {
  1309. $("body").css("background", "none");
  1310. $("#container").css("width", "100%")
  1311. }
  1312. $.showStatus();
  1313. if ("1" === R.NEEDAJAX) {
  1314. var a = "/web/reportview/getrealtimedata";
  1315. $.postJSON(a, {
  1316. RPTID: R._id
  1317. },
  1318. function(b) {
  1319. D = b;
  1320. createTitle();
  1321. createWidgets();
  1322. initExportAndRefresh();
  1323. $.hideStatus()
  1324. })
  1325. } else {
  1326. createTitle();
  1327. createWidgets();
  1328. initExportAndRefresh();
  1329. $.hideStatus()
  1330. }
  1331. initWeixinShare();
  1332. initLogo()
  1333. });