visitCollapse.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <template>
  2. <div class="visitCollapse">
  3. <div class="visitCollapse-box" v-for="(item, index) in visitCollapse" :key="index">
  4. <div class="targetName" v-if="item.targetName">
  5. {{ item.targetName }}
  6. </div>
  7. <div class="child" v-if="item.children">
  8. <div :class="['children-item']" v-for="(item1, index1) in item.children" :key="index1">
  9. <div
  10. class="child-targetName"
  11. :style="setTargetNameStyle(item1.targetName)"
  12. v-if="item1.targetName">
  13. {{ item1.targetName }}
  14. </div>
  15. <template v-if="item1.children">
  16. <div class="target-box">
  17. <div
  18. :class="['target', item2.targetName == '未拜访' ? 'clickTarget' : '']"
  19. v-for="(item2, index2) in item1.children"
  20. :key="index2"
  21. @click="clickTarget(item, item1, item2)">
  22. <div class="target-label">{{ item2.targetName }}</div>
  23. <div
  24. :class="['target-value']"
  25. :style="{
  26. color:
  27. item2.targetName == '未拜访' && (empLevel == 2 || empLevel == 3)
  28. ? '#1989fa'
  29. : '',
  30. }">
  31. {{ item2.targetValue }}
  32. </div>
  33. </div>
  34. </div>
  35. </template>
  36. </div>
  37. </div>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. import store from '@/store';
  43. import { mapState } from 'vuex';
  44. export default {
  45. name: 'visitCollapse',
  46. computed: {
  47. ...mapState({
  48. userInfo: (state) => state.user.userInfo,
  49. }),
  50. },
  51. props: {
  52. visitCollapse: {
  53. type: Array,
  54. default: () => [],
  55. },
  56. },
  57. data() {
  58. return {
  59. empLevel: '', //员工级别,1大区主管2销售部主管3业务员4其他 ***其他级别4
  60. };
  61. },
  62. created() {
  63. this.empLevel = this.userInfo.empLevel;
  64. },
  65. methods: {
  66. setTargetNameStyle(targetName) {
  67. let style = {};
  68. if (targetName == '涂料片区') {
  69. style.background = '#84ccc9';
  70. } else if (targetName == '厨卫片区') {
  71. style.background = '#f6b37f';
  72. } else if (targetName == '质感外墙片区') {
  73. style.background = '#88abda';
  74. } else if (targetName == 'SAF片区') {
  75. style.background = '#ff6565';
  76. } else if (targetName == '工业漆片区') {
  77. style.background = '#7ecef4';
  78. } else if (targetName == '粉料片区') {
  79. style.background = '#f19ec2';
  80. } else if (targetName == '片区经销商(36城)') {
  81. style.background = '#9ea4f1';
  82. }
  83. return style;
  84. },
  85. clickTarget(item, item1, item2) {
  86. if (this.empLevel != 2 && this.empLevel != 3) return;
  87. store.dispatch(
  88. 'setActivaTypeStore',
  89. item1.targetName ? item1.targetName + '经销商' : item.targetName,
  90. );
  91. if (item2.targetName != '未拜访') return;
  92. this.$router.push({
  93. path: '/noVisit',
  94. });
  95. },
  96. },
  97. };
  98. </script>
  99. <style lang="scss" scoped>
  100. .visitCollapse {
  101. .visitCollapse-box {
  102. .targetName {
  103. text-align: center;
  104. border-radius: 3px;
  105. font-size: 18px;
  106. color: #000;
  107. font-weight: 600;
  108. }
  109. .child {
  110. padding-top: 10px;
  111. }
  112. .children-item {
  113. .child-targetName {
  114. display: inline-block;
  115. color: #fff;
  116. padding: 3px 5px;
  117. border-radius: 6px;
  118. margin-bottom: 5px;
  119. }
  120. .target-box {
  121. overflow: hidden;
  122. padding-bottom: 8px;
  123. .target {
  124. width: 33%;
  125. float: left;
  126. text-align: center;
  127. &:first-child {
  128. text-align: left !important;
  129. }
  130. .target-value {
  131. padding-left: 10px;
  132. }
  133. }
  134. .clickTarget {
  135. .target-value {
  136. // color: #1989fa;
  137. }
  138. }
  139. }
  140. }
  141. }
  142. }
  143. </style>