hr.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <el-card >
  3. <div slot="header" class="clearfix">
  4. <div class="box">
  5. <span class='shape'></span>
  6. <span>人事数据</span>
  7. </div>
  8. </div>
  9. <div class="wall" style="height:68px;" v-if="JSON.stringify(items) == '{}'">
  10. 暂无数据
  11. </div>
  12. <statistic class="statistic" :cols="0">
  13. <statistic-item v-for="(item, key) in items" :key="key" :class="{active: active === key}" @click="active = key">
  14. <span>
  15. {{item.title}}
  16. <el-tooltip v-if="item.desc" :content="item.desc" :open-delay=".3" placement="top">
  17. <i style="margin-left: 5px;cursor: pointer;" class="el-icon-warning-outline"/>
  18. </el-tooltip>
  19. </span>
  20. <span>
  21. <count-to :endVal="item.percent"/>人
  22. </span>
  23. </statistic-item>
  24. </statistic>
  25. <!-- <ve-histogram
  26. style="width: 100%;"
  27. height="350px"
  28. :data="chartData"
  29. :data-empty="dataEmpty"
  30. :data-zoom="dataZoom"
  31. :extend="chartExtend"
  32. ></ve-histogram> -->
  33. </el-card>
  34. </template>
  35. <script>
  36. import 'echarts/lib/component/dataZoom'
  37. import countTo from 'vue-count-to'
  38. import veHistogram from 'v-charts/lib/histogram.common'
  39. export default {
  40. props: ['data'],
  41. components: {
  42. 've-histogram': veHistogram,
  43. 'count-to': countTo
  44. },
  45. // DIMISSION_NUM: this.data['DIMISSION_NUM'] || {},
  46. computed: {
  47. items() {
  48. let obj = {}
  49. let arr = ["TEACHER_NUM","FULL_TIME_NUM","PART_TIME_NUM"]
  50. arr.forEach(str=>{
  51. if(this.data[str]){
  52. obj[str]=this.data[str]
  53. }
  54. })
  55. /**
  56. * {
  57. TEACHER_NUM: this.data['TEACHER_NUM'] || {},
  58. FULL_TIME_NUM: this.data['FULL_TIME_NUM'] || {},
  59. PART_TIME_NUM: this.data['PART_TIME_NUM'] || {},
  60. }
  61. */
  62. return obj
  63. },
  64. chartExtend() {
  65. return {
  66. tooltip: {
  67. axisPointer: {
  68. type: 'shadow',
  69. shadowStyle: {
  70. color: 'rgba(150,150,150,0.2)'
  71. }
  72. }
  73. }
  74. }
  75. },
  76. dataZoom() {
  77. return [
  78. {
  79. type: 'slider',
  80. start: 60,
  81. end: 100
  82. }
  83. ]
  84. },
  85. chartData() {
  86. const values = Object.values(this.items)
  87. const months = {}
  88. for (const item of values) {
  89. for (const row of (item.indexMonthData || [])) {
  90. const key = this.$helpers.dayjs(row.month).format('YYYY-MM-DD')
  91. if (!months[key]) {
  92. months[key] = {
  93. '日期': key,
  94. }
  95. }
  96. months[key][item.title] = row.percent
  97. }
  98. }
  99. return {
  100. columns: ['日期', ...values.map(item => item.title)],
  101. rows: Object.values(months)
  102. }
  103. },
  104. dataEmpty() {
  105. return !this.chartData.rows.length
  106. },
  107. },
  108. data () {
  109. return {
  110. active: 'TEACHER_NUM',
  111. }
  112. },
  113. }
  114. </script>
  115. <style lang="less" scoped>
  116. // .statistic{
  117. // /deep/ .statistic-content{
  118. // cursor: pointer;
  119. // &.active > span{
  120. // color: #14928a !important;
  121. // }
  122. // }
  123. // }
  124. </style>