RankingRecordNunStatistics.vue 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div
  3. v-loading="loading"
  4. class="main-container">
  5. <filtrate-handle-view
  6. :show-user-select="false"
  7. title="跟进次数排行"
  8. class="filtrate-bar"
  9. module-type="ranking"
  10. @load="loading=true"
  11. @change="getDataList"/>
  12. <div class="content">
  13. <div class="content-title">跟进次数排行(按拜访时间统计)</div>
  14. <div
  15. v-empty="list.length === 0"
  16. class="axis-content"
  17. xs-empty-text="暂无排行">
  18. <div id="axismain"/>
  19. </div>
  20. <div class="table-content">
  21. <div class="handle-bar">
  22. <el-button
  23. class="export-btn"
  24. @click="exportClick">导出</el-button>
  25. </div>
  26. <el-table
  27. :data="list"
  28. height="400"
  29. stripe
  30. border
  31. highlight-current-row>
  32. <el-table-column
  33. align="center"
  34. header-align="center"
  35. show-overflow-tooltip
  36. label="公司总排名">
  37. <template slot-scope="scope">
  38. {{ scope.$index + 1 }}
  39. </template>
  40. </el-table-column>
  41. <el-table-column
  42. v-for="(item, index) in fieldList"
  43. :key="index"
  44. :prop="item.field"
  45. :label="item.name"
  46. align="center"
  47. header-align="center"
  48. show-overflow-tooltip/>
  49. </el-table>
  50. </div>
  51. </div>
  52. </div>
  53. </template>
  54. <script>
  55. import RankingMixin from '../mixins/Ranking'
  56. import echarts from 'echarts'
  57. import { biRankingRecordNunAPI, biRankingRecordNunExportAPI } from '@/api/bi/ranking'
  58. export default {
  59. /** 跟进次数排行 */
  60. name: 'RankingRecordNunStatistics',
  61. mixins: [RankingMixin],
  62. data() {
  63. return {}
  64. },
  65. computed: {},
  66. mounted() {
  67. this.fieldList = [
  68. { field: 'user_name', name: '员工' },
  69. { field: 'structure_name', name: '部门' },
  70. { field: 'count', name: '跟进次数(次)' }
  71. ]
  72. this.initAxis()
  73. },
  74. methods: {
  75. getDataList(params) {
  76. this.postParams = params
  77. this.loading = true
  78. biRankingRecordNunAPI(params)
  79. .then(res => {
  80. this.loading = false
  81. this.list = res.data || []
  82. const showData = []
  83. const yAxis = []
  84. const rankingIndex = res.data.length > 10 ? 10 : res.data.length
  85. for (let index = 0; index < rankingIndex; index++) {
  86. const element = res.data[index]
  87. showData.splice(0, 0, parseFloat(element.count))
  88. yAxis.splice(0, 0, element.user_name)
  89. }
  90. this.axisOption.yAxis[0].data = yAxis
  91. this.axisOption.series[0].data = showData
  92. this.chartObj.setOption(this.axisOption, true)
  93. })
  94. .catch(() => {
  95. this.loading = false
  96. })
  97. },
  98. /** 柱状图 */
  99. initAxis() {
  100. this.chartObj = echarts.init(document.getElementById('axismain'))
  101. this.axisOption.tooltip.formatter = '{b} : {c}次'
  102. this.axisOption.xAxis[0].name = '(次)'
  103. this.chartObj.setOption(this.axisOption, true)
  104. },
  105. /**
  106. * 导出点击
  107. */
  108. exportClick() {
  109. this.requestExportInfo(biRankingRecordNunExportAPI, this.postParams, 'recordNun')
  110. }
  111. }
  112. }
  113. </script>
  114. <style rel="stylesheet/scss" lang="scss" scoped>
  115. @import '../styles/detail.scss';
  116. </style>