123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <template>
- <div class="div-box-new-margin" >
- <div class="div-border-box" id="shippingTrendFull">
- <div class="out">
- <div>
- <div class="div-line div-line-right"></div>
- <div style="min-width: 220px;">
- <div class="title" style="float: left">{{$t(`出货趋势分析`)}}</div>
- <el-tooltip placement="top" style="vertical-align: middle">
- <div slot="content">
- <p>{{$t(`依据:月度的准交率 = 月度准交的订单行数 ÷ 月度的总订单行数 x 100%;`)}}</p>
- <p>{{$t(`月度的总订单行数: 回复交期在当月的,有审核和关闭的订单行数。`)}}</p>
- <p>{{$t(`1、不包含备货数据,月度准交的订单行数:`)}}</p>
- <p>{{$t(`回复交期在当月,且出货日期在回复交期+一个工作日(包含)之前完全出货的订单行数;`)}}</p>
- <p>{{$t(`2、包含备货数据,月度准交的订单行数:①+②`)}}</p>
- <p>{{$t(`①回复交期在当月,且出货日期在回复交期+一个工作日(包含)之前完全出货的订单行数;`)}}</p>
- <p>{{$t(`②回复交期在当月,且备货日期在回复交期(包含)之前完全备货且未完全出货的订单行数;`)}}</p>
- </div>
- <img style="vertical-align: middle;margin-left: 10px" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
- </el-tooltip>
- </div>
- </div>
- <div class="in">
- <div class="inline-16 mt-10">
- <el-checkbox v-model="param.content.isbooked" true-label="1" false-label="0" @change="changeDate">{{$t(`包含备货数据`)}}</el-checkbox>
- </div>
- <div class="inline-16 mt-10">
- <departmentSalesperson ref="departmentSalesperson" @depSelect="depSelect" @personSelect="personSelect" :isFull="isFull"></departmentSalesperson>
- </div>
- <div class="mt-10 inline-16">
- <p class="search__label">{{$t('状态')}}:</p>
- <el-select v-model="param.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="queryModel(param.content.dataid,param.content.where.isleave,'状态')" >
- <el-option :label="$t('在职')" value="1"></el-option>
- <el-option :label="$t('离职')" value="2"></el-option>
- </el-select>
- </div>
- <div class="mt-10 inline-15">
- <span class="search__label inline-16">{{$t(`年度`)}}:</span>
- <el-date-picker
- :append-to-body="!isFull"
- v-model="yearNow"
- @change="changeDate"
- :picker-options="pickerOptions"
- type="year"
- size="small"
- placeholder="选择年">
- </el-date-picker>
- </div>
- <fullScreen domId="shippingTrendFull" @onFull="onFull" @backFull="backFull"></fullScreen>
- </div>
- </div>
- <div class="chart">
- <div id="shippingTrendAnalysisChart" :style="{height: heightChart}"></div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
- import fullScreen from "@/views/salesData/components/fullScreen";
- import {DualAxes} from '@antv/g2plot';
- export default {
- name: "shippingTrendAnalysis", //出货趋势分析
- props:['dataid','scrollHeight','windowWidth'],
- components:{departmentSalesperson,fullScreen},
- data(){
- return {
- chartDualAxes:null,
- pickerOptions: {
- disabledDate(time){
- // 获取当前时间
- const today = new Date();
- // 比较日期,将未来的年份禁用
- return time.getFullYear() > today.getFullYear();
- }
- },
- param:{
- "id": 20231012152004,
- "content": {
- "type": 0,
- "dataid": '',
- "year": "2023",
- "isbooked":0,
- "where":{
- "isleave":"1"
- }
- }
- },
- yearNow:new Date(),
- list:[],
- list1:[],
- heightChart:'100%',
- isFull:false
- }
- },
- methods:{
- async listData(val){
- this.renderPie(val)
- },
- async queryModel(val,isleave,state){
- if (state == '状态'){
- this.$refs.departmentSalesperson.person = ''
- this.param.content.dataid = this.param.content.type == 0?-1:val
- }else {
- this.param.content.dataid = val?val : this.dataid
- }
- this.param.content.where.isleave = isleave
- this.param.content.year = new Date(this.yearNow).getFullYear()
- const res = await this.$api.requested(this.param)
- const amount = res.data.map(item=>{
- let value = this.tool.unitConversion(item.amount,10000)
- return {
- "value":value,
- "date":item.date,
- "type":this.$t('本期金额(万元)')
- }
- })
- const oldamount = res.data.map(item=>{
- let value = this.tool.unitConversion(item.oldamount,10000)
- return {
- "value":value,
- "date":item.date,
- "type":this.$t('去年同期金额(万元)')
- }
- })
- this.list = oldamount.concat(amount)
- const tbzzl = res.data.map(item=>{
- return {
- "value":Math.round((item.tbzzl * 100)*100)/100,
- "date":item.date,
- "type":this.$t('同比增长率')
- }
- })
- const zjl = res.data.map(item=>{
- return {
- "value":Math.round((item.zjl * 100)*100)/100,
- "date":item.date,
- "type":this.$t('准交率')
- }
- })
- this.list1 = tbzzl.concat(zjl)
- this.chartDualAxes.changeData([this.list,this.list1])
- state == '状态' ? this.personData() : ''
- },
- renderPie(val){
- this.chartDualAxes = new DualAxes('shippingTrendAnalysisChart',{
- data:[this.list,this.list1],
- xField: 'date',
- yField: ['value','value'],
- geometryOptions: [
- {
- geometry: 'column',
- isGroup: true,
- seriesField: 'type',
- color:['#62daab','#6395fa'],
- label:{
- position:top,
- formatter: (datum) =>{
- return '¥' + this.tool.formatAmount(datum.value,2)
- }
- }
- /*label: {
- // 可手动配置 label 数据标签位置
- position: 'top', // 'top', 'bottom', 'middle',
- // 配置样式
- formatter: (item) =>'¥'+this.tool.formatAmount(item.value,2) ,
- },*/
- },
- {
- geometry: 'line',
- isGroup: true,
- seriesField: 'type',
- color: ['#F6903D','#f7c122'],
- smooth: true,
- label:{
- formatter: (datum) =>{
- return datum.value + '%'
- }
- }
- /*label: {
- // 可手动配置 label 数据标签位置
- position: 'top', // 'top', 'bottom', 'middle',
- // 配置样式
- formatter: (item) => item.value + '%',
- },*/
- },
- ],
- tooltip: {
- formatter: (datum) => {
- return {
- name:datum.type,
- value:datum.type == this.$t('去年同期金额(万元)') || datum.type == this.$t('本期金额(万元)') ?'¥' + this.tool.formatAmount(datum.value,2):datum.value + '%'
- }
- }
- }
- });
- this.chartDualAxes.render();
- this.queryModel(val,this.param.content.where.isleave)
- },
- changeDate(){
- this.queryModel(this.param.content.dataid,this.param.content.where.isleave)
- },
- /*选择部门*/
- depSelect(val){
- this.param.content.type = 1
- this.param.content.dataid = val
- this.queryModel(val,this.param.content.where.isleave)
- },
- /*选择业务员*/
- personSelect(val){
- this.param.content.type = 0
- this.param.content.dataid = val
- this.queryModel(val,this.param.content.where.isleave)
- },
- /*获取新的业务员列表*/
- async personData(){
- let param = {
- id: 20230620102004,
- content: {
- isleave:this.param.content.where.isleave
- },
- }
- const res = await this.$api.requested(param)
- this.$refs.departmentSalesperson.personnelList = res.data.hr
- },
- /*全屏*/
- onFull(){
- this.heightChart = this.windowWidth > 1128 ? 'calc(100vh - 85px)':'calc(100vh - 115px)'
- this.isFull = true
- },
- /*退出全屏*/
- backFull(val){
- this.heightChart = '100%'
- this.isFull = false
- this.$emit('backFull',val)
- }
- }
- }
- </script>
- <style scoped>
- </style>
|