YXXMWGJTSFX.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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. import * as echarts from '../../ec-canvas/echarts';
  8. Component({
  9. options: {
  10. addGlobalClass: true
  11. },
  12. lifetimes: {
  13. attached: function () {
  14. getApp().globalData.Language.getLanguagePackage(this)
  15. this.setData({
  16. "content.dataid": wx.getStorageSync('userMsg').userid,
  17. "content.username": wx.getStorageSync('userMsg').name,
  18. })
  19. }
  20. },
  21. data: {
  22. year: new Date().getFullYear().toString(),
  23. "content": {
  24. enddate: new Date().toISOString().split('T')[0],
  25. where: {
  26. dateType: "15-30天",
  27. projecttype: ""
  28. },
  29. pageNumber: 1,
  30. pageSize: 20,
  31. pageTotal: 1
  32. },
  33. types: [],
  34. filterShow: false,
  35. filtratelist: [{
  36. label: "项目状态",
  37. index: null,
  38. showName: "value", //显示字段
  39. valueKey: "status", //返回Key
  40. selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
  41. value: "", //选中值
  42. type: "checkbox",
  43. list: [{
  44. value: "跟进中"
  45. }, {
  46. value: "已成交"
  47. }, {
  48. value: "已失败"
  49. }, {
  50. value: "已结案"
  51. }]
  52. }]
  53. },
  54. methods: {
  55. async getList(init = false) {
  56. if (init.detail != undefined) init = init.detail;
  57. let content = this.data.content
  58. const {
  59. dataid,
  60. type,
  61. username,
  62. isleave
  63. } = getCurrentPages()[getCurrentPages().length - 1].data;
  64. if (content.dataid != dataid || content.type != type || isleave != isleave) init = true
  65. content.dataid = dataid;
  66. content.type = type;
  67. content.username = username;
  68. content.where.isleave = isleave;
  69. if (init) {
  70. content.pageNumber = 1;
  71. content.pageSize = 20;
  72. }
  73. if (content.pageNumber > content.pageTotal) return;
  74. _Http.basic({
  75. "id": 20231019095904,
  76. content
  77. }).then(res => {
  78. console.log("有效项目未跟进天数分析", res)
  79. this.selectComponent('#ListBox').RefreshToComplete();
  80. if (res.code != '1') return wx.showToast({
  81. title: res.data,
  82. icon: "none"
  83. })
  84. res.data = res.data.map(v => {
  85. v.signamount_due = CNY(v.signamount_due)
  86. return v
  87. })
  88. this.setData({
  89. list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
  90. "content.pageNumber": res.pageNumber + 1,
  91. "content.pageSize": res.pageSize,
  92. "content.pageTotal": res.pageTotal,
  93. "total": res.total,
  94. })
  95. try {
  96. this.selectAllComponents("#Filtrate").forEach(v => v.onCancel())
  97. } catch (error) {}
  98. if (init) _Http.basic({
  99. "id": 20231019095804,
  100. content
  101. }).then(res1 => {
  102. console.log("图标", res1)
  103. this.initChart(res1.data)
  104. })
  105. })
  106. },
  107. initChart(data) {
  108. let projecttype = [...new Set(data.map(v => getApp().globalData.Language.getMapText(v.projecttype)))]
  109. let source = [
  110. ['product'].concat(projecttype),
  111. ];
  112. data.forEach(v => {
  113. if (!source.find(item => item[0] === getApp().globalData.Language.getMapText(v.datetype))) {
  114. source.push([getApp().globalData.Language.getMapText(v.datetype)])
  115. }
  116. let index = source.findIndex(item => item[0] === getApp().globalData.Language.getMapText(v.datetype));
  117. source[index].push(v.value);
  118. })
  119. if (this.data.types.length == 0) {
  120. let types = projecttype.map(v => {
  121. return {
  122. remarks: v,
  123. value: v.split("-")[0],
  124. }
  125. })
  126. types.unshift({
  127. remarks: '全部',
  128. value: ''
  129. })
  130. console.log("types", types)
  131. this.setData({
  132. types
  133. })
  134. }
  135. let that = this,
  136. countDown = null,
  137. datetypes = [...new Set(data.map(v => v.datetype))];
  138. function changeDateType(params) {
  139. clearTimeout(countDown)
  140. countDown = setTimeout(() => {
  141. if (datetypes[params.dataIndex] === that.data.content.where.dateType) return;
  142. that.setData({
  143. "content.where.dateType": datetypes[params.dataIndex],
  144. "content.pageNumber": 1,
  145. })
  146. that.getList();
  147. }, 200)
  148. }
  149. let option = {
  150. legend: {
  151. type: 'scroll',
  152. orient: 'horizontal',
  153. top: 10
  154. },
  155. tooltip: {
  156. trigger: 'axis',
  157. axisPointer: {
  158. type: 'shadow'
  159. },
  160. formatter: function (params) {
  161. changeDateType(params[0]);
  162. let filteredParams = params.filter(item => item.value !== 0);
  163. if (filteredParams.length === 0) return '';
  164. let tooltipText = `${params[0].axisValue}\n`;
  165. filteredParams.forEach((item, index) => {
  166. if (item.value[index + 1] != 0) {
  167. tooltipText += `${item.marker} ${item.dimensionNames[index + 1]}: ${item.value[index + 1]}\n`;
  168. }
  169. });
  170. return tooltipText;
  171. }
  172. },
  173. dataset: {
  174. source
  175. },
  176. xAxis: {
  177. type: 'category',
  178. axisLabel: {
  179. interval: 0,
  180. rotate: 30
  181. }
  182. },
  183. yAxis: {
  184. type: 'value'
  185. },
  186. series: projecttype.map(() => ({
  187. type: 'bar',
  188. barMaxWidth: 30
  189. }))
  190. };
  191. this.chartComponent = this.selectComponent('#mychart');
  192. this.chartComponent.init((canvas, width, height, dpr) => {
  193. const chart = echarts.init(canvas, null, {
  194. width,
  195. height,
  196. devicePixelRatio: dpr
  197. });
  198. chart.setOption(option);
  199. return chart;
  200. });
  201. },
  202. changeDate({
  203. detail
  204. }) {
  205. this.setData({
  206. "content.enddate": detail
  207. })
  208. this.getList(true)
  209. },
  210. clickOpen() {
  211. this.setData({
  212. filterShow: true
  213. })
  214. },
  215. /* 处理筛选 */
  216. handleFilter({
  217. detail
  218. }) {
  219. if (detail.name == "confirm") {
  220. this.setData({
  221. "content.where.status": detail.status
  222. })
  223. this.selectComponent('#Filtrate1').setShowArrText(detail.status)
  224. this.getList(true)
  225. } else if (detail.name == 'reset') {
  226. this.setData({
  227. "content.where.status": []
  228. })
  229. this.selectComponent('#Filtrate1').setShowArrText([])
  230. this.getList(true)
  231. }
  232. },
  233. changeType2({
  234. detail
  235. }) {
  236. this.setData({
  237. "content.where.projecttype": detail,
  238. })
  239. this.getList(true)
  240. },
  241. }
  242. })