delayedShipmentAnalysis.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <template>
  2. <div class="div-new-box-new">
  3. <div class="content-new-content">
  4. <div class="div-line"></div>
  5. <div class="title">近12月延期出货情况分析</div>
  6. <div style="float: right">
  7. <departmentSalesperson ref="departmentSalesperson" class="inline-16" @depSelect="depSelect" @personSelect="personSelect"></departmentSalesperson>
  8. <span class="search__label inline-16">分析日期:</span>
  9. <el-date-picker
  10. v-model="enddate"
  11. style="margin-right: 10px !important;"
  12. type="date"
  13. :clearable="false"
  14. @change="changeDate"
  15. format="yyyy-MM-dd"
  16. value-format="yyyy-MM-dd"
  17. size="small"
  18. range-separator="至"
  19. start-placeholder="开始月份"
  20. end-placeholder="结束月份">
  21. </el-date-picker>
  22. </div>
  23. </div>
  24. <div class="chart">
  25. <div id="delayedShipmentAnalysisChart" style="height: 300px;"></div>
  26. </div>
  27. <div :style="{height:list.length < 5 ? '295px':'888px'}">
  28. <tableTemplate style="margin-top: 10px" ref="table" :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="list.length < 5 ? '242px':'842px'">
  29. <template v-slot:customcol="scope">
  30. <p v-if="scope.column.columnname === 'province'">
  31. {{scope.column.data.province+scope.column.data.city+scope.column.data.county}}
  32. </p>
  33. <p v-else-if="scope.column.columnname === 'marketprice'">
  34. <span v-if="scope.column.data[scope.column.columnname]">
  35. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  36. </span>
  37. <span v-else>--</span>
  38. </p>
  39. <p v-else-if="scope.column.columnname === 'defaultprice'">
  40. <span v-if="scope.column.data[scope.column.columnname]">
  41. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  42. </span>
  43. <span v-else>--</span>
  44. </p>
  45. <p v-else-if="scope.column.columnname === 'defaultamount'">
  46. <span v-if="scope.column.data[scope.column.columnname]">
  47. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  48. </span>
  49. <span v-else>--</span>
  50. </p>
  51. <p v-else-if="scope.column.columnname === 'price'">
  52. <span v-if="scope.column.data[scope.column.columnname]">
  53. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  54. </span>
  55. <span v-else>--</span>
  56. </p>
  57. <p v-else-if="scope.column.columnname === 'amount'">
  58. <span v-if="scope.column.data[scope.column.columnname]">
  59. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  60. </span>
  61. <span v-else>--</span>
  62. </p>
  63. <p v-else>{{scope.column.data[scope.column.columnname]?scope.column.data[scope.column.columnname]:'--'}}</p>
  64. </template>
  65. </tableTemplate>
  66. <div class=" " style="text-align:right;float: right;margin: 10px 0 0 0">
  67. <el-pagination
  68. background
  69. @size-change="handleSizeChange"
  70. @current-change="handleCurrentChange"
  71. :current-page="currentPage"
  72. :pager-count="7"
  73. :page-sizes="[20, 50,100, 200]"
  74. :page-size="20"
  75. layout="total,sizes, prev, pager, next, jumper"
  76. :total="total">
  77. </el-pagination>
  78. </div>
  79. </div>
  80. </div>
  81. </template>
  82. <script>
  83. import { Bar } from '@antv/g2plot';
  84. import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
  85. import tableTemplate from '@/views/salesData/components/table';
  86. export default {
  87. name: "delayedShipmentAnalysis",
  88. props:['dataid'],
  89. components:{departmentSalesperson,tableTemplate},
  90. data(){
  91. return {
  92. chartBar:null,
  93. param:{
  94. "id": 20231012163804,
  95. "content": {
  96. "type": 0,
  97. "dataid": '',
  98. "enddate": "",//分析日期
  99. "dateType": "",//图标联动 一周 一月 一季 一季以上 可不传 不传默认查全部
  100. "pageSize":20,
  101. "pageNumber":1
  102. }
  103. },
  104. list:[],
  105. chartData:[],
  106. tablecols:[],
  107. currentPage:0,
  108. total:0,
  109. enddate:new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
  110. hoverData:[]
  111. }
  112. },
  113. methods:{
  114. async listData(val){
  115. this.renderPie(val)
  116. },
  117. async queryModel(val){
  118. this.param.content.dataid = val || this.dataid
  119. const res = await this.$api.requested(this.param)
  120. if (res.data.length === 1){
  121. if (res.data[0].isEmpty == 1){
  122. this.list = []
  123. this.total = 0
  124. this.currentPage = 0
  125. }else {
  126. this.list = res.data
  127. this.total = res.total
  128. this.currentPage = res.data.currentPage
  129. }
  130. }else {
  131. this.list = res.data
  132. this.total = res.total
  133. this.currentPage = res.data.currentPage
  134. }
  135. this.chartData = res.data[0].trend.map(item=>{
  136. return {
  137. "sequence": item.sequence,
  138. "value": item.value,
  139. "key": item.key,
  140. "type":'订单行数'
  141. }
  142. })
  143. this.chartBar.changeData(this.chartData)
  144. },
  145. renderPie(val){
  146. this.chartBar = new Bar('delayedShipmentAnalysisChart', {
  147. data:this.chartData,
  148. xField: 'value',
  149. yField: 'key',
  150. seriesField: 'type',
  151. legend: {
  152. position: 'top-left',
  153. },
  154. interactions: [{ type: 'element-single-selected' }]
  155. });
  156. this.chartBar.on('plot:click',ev=>{
  157. const states = this.chartBar.getStates()
  158. this.param.content.dateType = states.length === 0 ?'':ev.data.data.key
  159. this.param.content.pageNumber = 1
  160. this.queryTable(val)
  161. })
  162. this.chartBar.render();
  163. this.queryModel(val)
  164. },
  165. async queryTable(val){
  166. this.param.content.dataid = val || this.dataid
  167. const res = await this.$api.requested(this.param)
  168. this.list = res.data
  169. this.total = res.total
  170. this.currentPage = res.pageNumber
  171. },
  172. changeDate(){
  173. this.queryModel(this.param.content.dataid)
  174. },
  175. /*选择部门*/
  176. depSelect(val){
  177. this.param.content.type = 1
  178. this.param.content.dataid = val
  179. this.queryModel(val)
  180. },
  181. /*选择业务员*/
  182. personSelect(val){
  183. this.param.content.type = 0
  184. this.param.content.dataid = val
  185. this.queryModel(val)
  186. },
  187. handleSizeChange(val) {
  188. // console.log(`每页 ${val} 条`);
  189. this.param.content.pageSize = val
  190. this.queryTable(this.param.content.dataid)
  191. },
  192. handleCurrentChange(val) {
  193. // console.log(`当前页: ${val}`);
  194. this.param.content.pageNumber = val
  195. this.queryTable(this.param.content.dataid)
  196. },
  197. },
  198. created() {
  199. this.tablecols = this.tool.tabelCol(this.$route.name).delayedShipmentTable.tablecols
  200. }
  201. }
  202. </script>
  203. <style scoped>
  204. </style>