index.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <normalLayout>
  3. <div class="container" slot="content">
  4. <el-select class="inline-16" v-model="type" placeholder="请选择类型" size="small" @change="listData" clearable>
  5. <el-option label="开票" value="1"></el-option>
  6. <el-option label="订单" value="2"></el-option>
  7. <el-option label="出货" value="3"></el-option>
  8. </el-select>
  9. <el-date-picker
  10. class="normal-margin inline-16"
  11. v-model="value3"
  12. type="year"
  13. value-format="yyyy"
  14. placeholder="选择年份"
  15. size="small"
  16. @change="listData">
  17. </el-date-picker>
  18. <el-select v-model="tradefield" placeholder="请选择选择领域" size="small" @change="listData" clearable>
  19. <el-option v-for="(item, index) in tradefieldOptions" :key="index" :label="item.tradefield"
  20. :value="item.tradefield">
  21. </el-option>
  22. </el-select>
  23. <div v-for="item in perfData" :key="item.index">
  24. <el-card class="normal-margin" shadow="none" :body-style="{padding:'10px'}">
  25. <div slot="header">{{item.tradefield}}</div>
  26. <p class="normal-title mt-10">月度目标</p>
  27. <el-table
  28. class="normal-margin"
  29. :data="item.month"
  30. style="width: 100%"
  31. size="mini"
  32. stripe
  33. border>
  34. <el-table-column
  35. prop="month"
  36. label="月份">
  37. </el-table-column>
  38. <el-table-column
  39. prop="a"
  40. label="实际完成">
  41. </el-table-column>
  42. <el-table-column
  43. prop="l"
  44. label="基本目标">
  45. </el-table-column>
  46. <el-table-column
  47. prop="h"
  48. label="挑战目标">
  49. </el-table-column>
  50. <el-table-column
  51. prop="pl"
  52. label="基本比">
  53. <template slot-scope="scope">
  54. {{scope.row.pl}}%
  55. </template>
  56. </el-table-column>
  57. <el-table-column
  58. prop="ph"
  59. label="挑战比">
  60. <template slot-scope="scope">
  61. {{scope.row.ph}}%
  62. </template>
  63. </el-table-column>
  64. </el-table>
  65. <p class="normal-title mt-10">季度目标</p>
  66. <el-table
  67. :data="item.quarter"
  68. style="width: 100%"
  69. size="mini"
  70. stripe
  71. border>
  72. <el-table-column
  73. prop="quarter"
  74. label="季度">
  75. </el-table-column>
  76. <el-table-column
  77. prop="a"
  78. label="实际完成">
  79. </el-table-column>
  80. <el-table-column
  81. prop="l"
  82. label="基本目标">
  83. </el-table-column>
  84. <el-table-column
  85. prop="h"
  86. label="挑战目标">
  87. </el-table-column>
  88. <el-table-column
  89. prop="pl"
  90. label="基本比">
  91. <template slot-scope="scope">
  92. {{scope.row.pl}}%
  93. </template>
  94. </el-table-column>
  95. <el-table-column
  96. prop="ph"
  97. label="挑战比">
  98. <template slot-scope="scope">
  99. {{scope.row.ph}}%
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. </el-card>
  104. </div>
  105. </div>
  106. </normalLayout>
  107. </template>
  108. <script>
  109. export default {
  110. data () {
  111. return {
  112. perfData:[],
  113. tradefieldOptions:[],
  114. quarterData:{},
  115. tradefield:'',
  116. value3:String((new Date()).getFullYear()),
  117. type:'1'
  118. }
  119. },
  120. methods:{
  121. async listData () {
  122. this.perfData = []
  123. const res = await this.$api.requested({
  124. "id": 20230110151902,
  125. "content": {
  126. "type":this.type,//开票,订单,出货
  127. "where": {
  128. "year": this.value3,
  129. "tradefield": this.tradefield
  130. }
  131. },
  132. })
  133. res.data.forEach(element => {
  134. this.createTableData(element)
  135. });
  136. },
  137. async fieldData () {
  138. const res = await this.$api.requested({
  139. "id": 20221223141802,
  140. "content": {
  141. "pageSize": 999,
  142. }
  143. })
  144. this.tradefieldOptions = res.data
  145. },
  146. createTableData (data) {
  147. let arr = []
  148. let arr_s = []
  149. for (let index = 1; index < 13; index++) {
  150. arr.push({
  151. month:index + '月',
  152. a:data[`m${index}a`],
  153. l:data[`m${index}l`],
  154. h:data[`m${index}h`],
  155. pl:data[`m${index}pl`],
  156. ph:data[`m${index}ph`]
  157. })
  158. }
  159. for (let index = 1; index < 5; index++) {
  160. arr_s.push({
  161. quarter:index + '季度',
  162. a:data[`s${index}a`],
  163. l:data[`s${index}l`],
  164. h:data[`s${index}h`],
  165. pl:data[`s${index}pl`],
  166. ph:data[`s${index}ph`]
  167. })
  168. }
  169. this.perfData.push({
  170. tradefield:data.tradefield,
  171. month:arr,
  172. quarter:arr_s
  173. })
  174. console.log(this.perfData)
  175. }
  176. },
  177. mounted () {
  178. this.listData()
  179. this.fieldData()
  180. }
  181. }
  182. </script>
  183. <style>
  184. </style>