123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <template>
- <div class="div-box-new-margin">
- <div class="div-border-box" id="uninvoiceAmountFull">
- <div class="out">
- <div>
- <div class="div-line div-line-right"></div>
- <div class="title" style="min-width: 264px;"> 近12月出货未开票金额趋势分析</div>
- </div>
- <div class="in">
- <div class="inline-16 mt-10">
- <departmentSalesperson ref="departmentSalesperson" @depSelect="depSelect" @personSelect="personSelect" :isFull="isFull"></departmentSalesperson>
- </div>
- <div class="mt-10 inline-15">
- <span class="search__label inline-16">分析日期:</span>
- <el-date-picker
- :append-to-body="!isFull"
- v-model="endDate"
- type="date"
- :clearable="false"
- @change="changeDate"
- format="yyyy-MM-dd"
- value-format="yyyy-MM-dd"
- size="small"
- range-separator="至"
- start-placeholder="开始月份"
- end-placeholder="结束月份">
- </el-date-picker>
- </div>
- <fullScreen domId="uninvoiceAmountFull" @onFull="onFull" @backFull="backFull"></fullScreen>
- </div>
- </div>
- <div class="chart">
- <div id="uninvoiceAmountChart" :style="{height: heightChart}"></div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
- import fullScreen from "@/views/salesData/components/fullScreen";
- import { Line } from '@antv/g2plot';
- const seriesKey = 'series';
- const valueKey = 'value';
- const meta = {
- date: {
- alias: '日期',
- },
- zerotothree: {
- alias: '0-3月出货未开票金额(万元)',
- },
- threetosix: {
- alias: '3-6月出货未开票金额(万元)',
- },
- sixtotwelve:{
- alias: '6-12月出货未开票金额(万元)'
- },
- twelveup:{
- alias: '一年以上出货未开票金额(万元)'
- },
- };
- export default {
- name: "uninvoiceAmountAnalysis",
- props:['dataid','scrollHeight','windowWidth'],
- components:{departmentSalesperson,fullScreen},
- data(){
- return {
- chartLine:null,
- param:{
- "id": 20231016122504,
- "content": {
- "type": 0,
- "dataid": '',
- "enddate": "2023-09-21"
- }
- },
- list:[],
- endDate:new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
- heightChart:'98%',
- isFull:false
- }
- },
- methods:{
- async listData(val){
- this.renderPie(val)
- },
- processData(data, yFields, meta) {
- const result = [];
- data.forEach((d) => {
- yFields.forEach((yField) => {
- const name = meta?.[yField]?.alias || yField;
- result.push({ ...d, date: d.date, [seriesKey]: name, [valueKey]: d[yField] });
- });
- });
- return result;
- },
- /*图表更新*/
- async queryModel(val){
- this.param.content.dataid = val || this.dataid
- this.param.content.enddate = this.endDate
- const res = await this.$api.requested(this.param)
- this.list = res.data.map(item=>{
- return {
- "zerotothree":Math.round(((item.zerotothree/10000)*100)/100),
- "threetosix":Math.round(((item.threetosix/10000)*100)/100),
- "date":item.date,
- "sixtotwelve":Math.round(((item.sixtotwelve/10000)*100)/100),
- "twelveup":Math.round(((item.twelveup/10000)*100)/100),
- }
- })
- this.chartLine.changeData(this.processData(this.list, ['zerotothree', 'threetosix','sixtotwelve','twelveup'], meta))
- },
- renderPie(val){
- this.chartLine = new Line('uninvoiceAmountChart',{
- data:this.processData(this.list, ['zerotothree', 'threetosix','sixtotwelve','twelveup',], meta),
- xField: 'date',
- yField: valueKey,
- seriesField: seriesKey,
- tooltip: {
- formatter: (datum) => {
- return {
- name:datum.series,
- value:'¥'+this.tool.formatAmount(datum.value,2)
- }
- }
- }
- });
- this.chartLine.render();
- this.queryModel(val)
- },
- changeDate(){
- this.queryModel(this.param.content.dataid)
- },
- /*选择部门*/
- depSelect(val){
- this.param.content.type = 1
- this.param.content.dataid = val
- this.queryModel(val)
- },
- /*选择业务员*/
- personSelect(val){
- this.param.content.type = 0
- this.param.content.dataid = val
- this.queryModel(val)
- },
- /*全屏*/
- onFull(){
- this.heightChart = this.windowWidth > 1180 ?'calc(100vh - 85px)':'calc(100vh - 124px)'
- this.isFull = true
- },
- /*退出全屏*/
- backFull(val){
- this.heightChart = '98%'
- this.isFull = false
- this.$emit('backFull',val)
- }
- }
- }
- </script>
- <style scoped>
- </style>
|