salesTemplate.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <template>
  2. <div>
  3. <div style="display: flex;align-items: center;align-content: center;justify-content: space-between;">
  4. <div class="title">{{$t(`业务员营销费用TOP10`)}}</div>
  5. <div class="div-inline" style="float: right">
  6. <div class="inline-16 mt-10">
  7. <departmentSalesperson ref="departmentSalesperson" @depSelect="depSelect" @personSelect="personSelect" :isFull="isFull"></departmentSalesperson>
  8. </div>
  9. <div class="mt-10 inline-16">
  10. <p class="search__label">{{$t('状态')}}:</p>
  11. <el-select v-model="param.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="listData('状态')" >
  12. <el-option :label="$t('在职')" value="1"></el-option>
  13. <el-option :label="$t('离职')" value="2"></el-option>
  14. </el-select>
  15. </div>
  16. <el-button-group >
  17. <el-button size="small" :type="dateType === '本年'?'primary':''" @click="onChangeType('本年')">{{$t(`本年`)}}</el-button>
  18. <el-button size="small" :type="dateType === '本季'?'primary':''" @click="onChangeType('本季')">{{$t(`本季`)}}</el-button>
  19. <el-button size="small" :type="dateType === '本月'?'primary':''" @click="onChangeType('本月')">{{$t(`本月`)}}</el-button>
  20. </el-button-group>
  21. <el-date-picker
  22. v-model="monthDate"
  23. type="monthrange"
  24. @change="changMonth"
  25. :clearable="false"
  26. style="margin-left:10px;margin-right: 10px;margin-bottom: 10px"
  27. format="yyyy-MM"
  28. value-format="yyyy-MM"
  29. size="small"
  30. :range-separator="$t('至')"
  31. :start-placeholder="$t('开始月份')"
  32. :end-placeholder="$t('结束月份')">
  33. </el-date-picker>
  34. <div class="inline-16 mt-10">
  35. <allSalesTemplate :tablecols="tablecols" :dataid="dataid" :monthDate="monthDate" :dateType="dateType" :type="type" :button-title="buttonTitle" :param="param"></allSalesTemplate>
  36. </div>
  37. </div>
  38. </div>
  39. <div style="margin-top: 20px;margin-bottom: 10px">
  40. <tableTemplate ref="table" :layout="tablecols" :data="list" :opwidth="200" :custom="true" height="356px">
  41. <template v-slot:customcol="scope">
  42. <p v-if="scope.column.columnname === 'amount'" >
  43. <span class="highlight-color"> ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}</span>
  44. </p>
  45. <p v-else-if="scope.column.columnname === 'rowindex'">
  46. <span style="font-weight: bold">{{$t(scope.column.data[scope.column.columnname])}}</span>
  47. </p>
  48. <p v-else-if="scope.column.columnname != 'operation'">{{scope.column.data[scope.column.columnname]?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
  49. <div v-else>
  50. <balanceDetail :hrid="scope.column.data.hrid" :selectData="param"></balanceDetail>
  51. </div>
  52. </template>
  53. </tableTemplate>
  54. </div>
  55. </div>
  56. </template>
  57. <script>
  58. import tableTemplate from './table';
  59. import allSalesTemplate from "./allSalesTemplate";
  60. import departmentSalesperson from "./departmentSalesperson";
  61. import balanceDetail from "./balanceDetail";
  62. export default {
  63. name: "salesTemplate",
  64. props:['tablecols','dataid','type','param','buttonTitle'],
  65. components:{tableTemplate,allSalesTemplate,departmentSalesperson,balanceDetail},
  66. data(){
  67. return {
  68. title:'订单',
  69. tableHeight:'',
  70. dateType:'本年',
  71. monthDate:[new Date().getFullYear() + '-1',new Date().getFullYear() + '-12'],
  72. list:[],
  73. isFull:false
  74. }
  75. },
  76. methods:{
  77. onChangeType(val){
  78. this.param.content.where.begdate = ''
  79. this.param.content.where.enddate = ''
  80. if (val === '本年'){
  81. this.monthDate = [new Date().getFullYear() + '-1',new Date().getFullYear() + '-12']
  82. }else if(val === '本季'){
  83. let currentMonth = new Date().getMonth() + 1
  84. let begMonth = Math.ceil(currentMonth / 3) * 3 - 2
  85. let endMonth = begMonth + 2
  86. this.monthDate = [new Date().getFullYear() + '-' + begMonth,new Date().getFullYear() + '-' + endMonth]
  87. }else {
  88. this.monthDate[0] = new Date().getFullYear() + '-' + (new Date().getMonth() + 1)
  89. this.monthDate[1] = new Date().getFullYear() + '-' + (new Date().getMonth() + 1)
  90. this.monthDate = [new Date().getFullYear() + '-' + (new Date().getMonth() + 1),new Date().getFullYear() + '-' + (new Date().getMonth() + 1)]
  91. }
  92. this.dateType = val
  93. this.listData()
  94. },
  95. changMonth(){
  96. this.dateType = ''
  97. let begdate = new Date(this.monthDate[0])
  98. let enddate = new Date(this.monthDate[1])
  99. this.param.content.where.begdate = this.monthDate[0]
  100. this.param.content.where.enddate = this.monthDate[1]
  101. this.listData()
  102. },
  103. async listData(val){
  104. if (val == '状态'){
  105. this.$refs.departmentSalesperson.person = ''
  106. this.param.content.dataid = this.param.content.type == 0 ? -1 : this.param.content.dataid
  107. this.personData()
  108. }
  109. this.param.content.dateType = this.dateType
  110. const res = await this.$api.requested(this.param)
  111. this.list = res.data
  112. },
  113. /*选择部门*/
  114. depSelect(val){
  115. this.param.content.type = 1
  116. this.param.content.dataid = val
  117. this.listData()
  118. },
  119. /*选择业务员*/
  120. personSelect(val){
  121. this.param.content.type = 0
  122. this.param.content.dataid = val
  123. this.listData()
  124. },
  125. /*获取新的业务员列表*/
  126. async personData(){
  127. let param = {
  128. id: 20230620102004,
  129. content: {
  130. isleave:this.param.content.where.isleave
  131. },
  132. }
  133. const res = await this.$api.requested(param)
  134. this.$refs.departmentSalesperson.personnelList = res.data.hr
  135. },
  136. },
  137. mounted() {
  138. }
  139. }
  140. </script>
  141. <style scoped>
  142. .div-inline{
  143. display: inline-block;
  144. vertical-align: middle;
  145. }
  146. .title-font{
  147. color: #515151;
  148. font-size: 15px;
  149. display: inline-block !important;
  150. margin-right: 5px;
  151. }
  152. .highlight-color{
  153. color:#4F7BFD
  154. }
  155. .title {
  156. min-width: 220px;
  157. }
  158. .title::before {
  159. content:'';
  160. border-left: 4px #3874f6 solid;
  161. padding-right: 10px;
  162. }
  163. </style>