index.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. const _Http = getApp().globalData.http,
  2. currency = require("../../utils/currency"),
  3. CNY = (value, symbol = "", precision = 2) => currency(value, {
  4. symbol,
  5. precision
  6. }).format(),
  7. conversion = n => {
  8. const integer = (n + '').split(".")[0] + '',
  9. length = integer.length,
  10. regexp = /(?:\.0*|(\.\d+?)0+)$/
  11. if (length <= 4) {
  12. const index = 4 - length;
  13. return { //元
  14. show: CNY(n, "¥", index).replace(regexp, '$1'),
  15. value: CNY(n, '¥')
  16. }
  17. } else if (length <= 8) {
  18. return { //万-千万
  19. show: CNY(currency(n).divide(10000)).replace(regexp, '$1') + '万元',
  20. value: CNY(n)
  21. }
  22. } else {
  23. return { //亿
  24. show: CNY(currency(n).divide(100000000)).replace(regexp, '$1') + '亿',
  25. value: CNY(n)
  26. }
  27. }
  28. };
  29. import {
  30. createElement
  31. } from '@antv/f2';
  32. import Chart from './modules/chart';
  33. import {
  34. jsx as _jsx
  35. } from "@antv/f2/jsx-runtime";
  36. Page({
  37. data: {
  38. onRenderChart: () => {},
  39. showFiltrate: false,
  40. "where": {
  41. "begindate": "",
  42. "enddate": "",
  43. "departmentid": ""
  44. },
  45. content: {
  46. nocache: true,
  47. dataid: 0,
  48. type: 0,
  49. dateType: 0,
  50. "where": {
  51. isleave: 0
  52. },
  53. },
  54. filtratelist: [{
  55. label: "时间筛选",
  56. showName: "name", //显示字段
  57. valueKey: "dateType", //返回Key
  58. selectKey: "id",
  59. value: "id", //选中值
  60. index: 0,
  61. default: 0,
  62. list: [{
  63. name: "近一年",
  64. id: 1
  65. }, {
  66. name: "近九个月",
  67. id: 2
  68. }, {
  69. name: "近六个月",
  70. id: 3
  71. }, {
  72. name: "近三个月",
  73. id: 4
  74. }]
  75. }]
  76. },
  77. onLoad(options) {
  78. },
  79. onReady() {
  80. this.setChartData();
  81. this.selectComponent("#organization").initDepAndUser();
  82. },
  83. openFiltrate() {
  84. this.setData({
  85. showFiltrate: true
  86. })
  87. },
  88. handleFilter({
  89. detail
  90. }) {
  91. if (detail.name == 'reset') {
  92. this.selectComponent("#organization").initDepAndUser()
  93. this.setData({
  94. 'content.dataid': 0,
  95. 'content.type': 0,
  96. 'content.where.isleave': 0,
  97. })
  98. } else {
  99. let active = this.selectComponent("#organization").data.result;
  100. let type = active.userid ? 0 : 1,
  101. dataid = type == 0 ? active.userid : active.departmentid
  102. this.setData({
  103. 'content.dataid': dataid,
  104. 'content.type': type,
  105. 'content.where.isleave': active.isleave || 0,
  106. })
  107. }
  108. this.data.content.dateType = detail.dateType && detail.dateType != 'id' ? detail.dateType : 0;
  109. this.setChartData();
  110. },
  111. setChartData() {
  112. this.setData({
  113. statistics: []
  114. })
  115. _Http.basic({
  116. "id": 20230630151504,
  117. "content": this.data.content
  118. }).then(res => {
  119. console.log("漏斗数据", res)
  120. if (res.msg != '成功') return wx.showToast({
  121. title: res.msg,
  122. icon: "none"
  123. })
  124. if (res.data.length) res.data.pop();
  125. let full = Math.max(...res.data.map(v => v.wide));
  126. let statistics = res.data.map((v, i) => {
  127. v.action = v.stagename
  128. v.zhl = i == 0 ? '' : `转换率:${(v.zhl * 100).toFixed(2)}%`
  129. v.percent = v.wide / full;
  130. v.totalinvestment = conversion(v.totalinvestment).value
  131. v.budgetary = conversion(v.budgetary).value
  132. v.signamount_due = conversion(v.signamount_due).value
  133. return v
  134. })
  135. let cHeight = statistics.length * 74;
  136. if (cHeight < 200) cHeight = 200;
  137. this.setData({
  138. statistics,
  139. full,
  140. cHeight: cHeight + 'rpx',
  141. onRenderChart: res.data.length == 0 ? () => {} : () => {
  142. return this.renderChart();
  143. }
  144. });
  145. })
  146. },
  147. renderChart() {
  148. return createElement(Chart, {
  149. data: this.data.statistics
  150. });
  151. }
  152. })