mall.vue 9.4 KB
<template>
    <div class="index">
        <div class="title-wrap">
            <div class="title-box">
            </div>
            <div class="title-collapse-content">
                <span v-for="(item) in reportData" :key="item.label" class="date-box" @click="reportHandle(item.label)">
                    <span :class="item.label === handleVal ? 'date-btn active-date' : 'date-btn'">{{ i18nFormatter(item.label) }}</span>
                </span>
                <span class="date-input-box">
                    <el-date-picker class="date-input day-piack" v-show="handleVal == 'day'" v-model="dayVal" value-format="yyyy-MM-dd" align="right" type="date" size="mini" :placeholder="$t('pholder.date')" :picker-options="pickerOptions1">
                    </el-date-picker>
                    <el-date-picker class="date-input week-piack" v-show="handleVal == 'week'" v-model="weekVal" align="right" type="week" format="yyyy 年第 WW 周" size="mini" :placeholder="$t('pholder.week')" :picker-options="weekPickerOpt">
                    </el-date-picker>
                    <el-date-picker class="date-input month-piack" v-show="handleVal == 'month'" v-model="monthVal" align="right" type="month" :format="datePickerFormatter('month')" size="mini" :placeholder="$t('pholder.month')">
                    </el-date-picker>
                    <el-date-picker class="date-input year-piack" v-show="handleVal == 'year'" v-model="yearVal" align="right" type="year" :format="datePickerFormatter('year')" size="mini" :placeholder="$t('pholder.year')">
                    </el-date-picker>
                </span>
                <div class="mall-sel-wrapper" v-if="false">
                    <el-select v-model="mallVal" :placeholder="$t('pholder.shopSelect')">
                        <el-option label="长春绿园吾悦广场" value="testMall"></el-option>
                    </el-select>
                </div>
                <div class="right-btn">
                    <span class="collapse-btn-box">
                        <el-button type="primary" class="primary-btn collapse-btn" size="samll" @click="confirmCondition"
                            :disabled="(handleVal == 'day' && !dayVal) || (handleVal == 'week' && !weekVal) || (handleVal == 'month' && !monthVal) || (handleVal == 'year' && !yearVal)"
                        >{{$t('button.confirm')}}</el-button>
                        <!-- <el-button class="reset-btn collapse-btn" size="samll" @click="resetRefresh">{{$t('button.reset')}}</el-button> -->
                        <el-button  class="reset-btn collapse-btn" size="samll" icon="el-icon-download" :loading="downloadStatus" @click="download"></el-button>
                    </span>
                </div>
            </div>
        </div>
        <router-view :propparam="propParams" ref="mallreport" @downloadSuccess="downloadSuccess"></router-view>
    </div>
</template>

<script>
import Bus from '../public/eventBus'
import myChart from '../public/mapChart'
require('echarts/map/js/china.js')
export default {
    props: {
        reportName: String
    },
    data() {
        return {
            isDayReport: true,
            downloadStatus:false,

            reportData: [{
                label: 'day',
                is_active: 'date-btn'
            }, {
                label: 'week',
                is_active: 'date-btn',
            }, {
                label: 'month',
                is_active: 'date-btn',
            }, {
                label: 'year',
                is_active: 'date-btn',
            }],
            value3: '',
            repTime: '',    // 报表时间
            dayVal: '',
            weekVal: '',  // 周时间
            monthVal: '',  // 月时间
            yearVal: '',   // 年时间
            mallVal: '',    // 广场
            pickerOptions1: {
                disabledDate(time) {
                    return time.getTime() > Date.now();
                },
                shortcuts: [{
                    text: this.$t('reportHandle.today'),
                    onClick(picker) {
                        picker.$emit('pick', new Date());
                    }
                }, {
                    text: this.$t('reportHandle.yesterday'),
                    onClick(picker) {
                        const date = new Date();
                        date.setTime(date.getTime() - 3600 * 1000 * 24);
                        picker.$emit('pick', date);
                    }
                }, {
                    text: this.$t('reportHandle.lastweek'),
                    onClick(picker) {
                        const date = new Date();
                        date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
                        picker.$emit('pick', date);
                    }
                }]
            },
            weekPickerOpt: {
                firstDayOfWeek: window._vionConfig.firstDayOfWeek ? window._vionConfig.firstDayOfWeek : 1
            },
            isRefresh: false,
            propParams: {},
            handleVal: 'day',
            mallName: '',
            isShow: false,
        }
    },
    components: {
        'my-chart': myChart
    },
    watch: {
        reportName(val) {
            this.init();
        },
        propParams(val) {
            if (val.dateType == '/mall') {
                this.reportHandle('day');
            } else if (val.dateType == '/mall/weekly') {
                this.reportHandle('week');
            } else if (val.dateType == '/mall/monthly') {
                this.reportHandle('month');
            } else if (val.dateType == '/mall/yearly') {
                this.reportHandle('year');
            }
        },
        dayVal(val) {
            this.sessionDate('dayDate', val);
        },
        weekVal(val) {
            this.sessionDate('weekDate', val);
        },
        monthVal(val) {
            this.sessionDate('monthDate', val);
        },
        yearVal(val) {
            this.sessionDate('yearDate', val);
        }
    },
    computed: {
        
    },
    created() {
        let {dayDate, weekDate, monthDate , yearDate} = this.createDate();
        this.dayVal = dayDate;
        this.weekVal = weekDate;
        this.monthVal = monthDate;
        this.yearVal = yearDate;
        var now = new Date()
        // var weekFirstDay = new Date(now- (now.getDay() + 6) * 86400000)
        //  this.weekVal = weekFirstDay;
    },
    mounted() {
        let routeHandler = {
            '/mall': 'day',
            '/mall/weekly': 'week',
            '/mall/monthly': 'month',
            '/mall/yearly': 'year'
        }
        const storageDateType = this.getSessionLocal('homeDateType') || routeHandler[this.$router.history.current.fullPath]
        this.reportHandle(storageDateType);
        this.init();
    },

    methods: {
        i18nFormatter(label) {
            let languageLabel = 'reportHandle.' + label;
            return this.$t(languageLabel)
        },
        async init() {
            const storageDateType = this.getSessionLocal('homeDateType')
            let type = (storageDateType ? `/mall/${storageDateType}ly` : '') || this.$router.history.current.fullPath;
            this.repTime = $(`.${this.handleVal}-piack input`)[0].value;
            this.propParams = {
                dateType: type,
                timeVal: this[this.handleVal + 'Val']
            }
            await console.log(1)
            this.isShow = true
        },
        reportHandle(label) {
           this.handleVal = label
        },
        classHandle(index) {
            let dateBtnList = document.getElementsByClassName('date-btn');
            for (let i = 0, len = dateBtnList.length; i < len; i++) {
                if (i === index) {
                    dateBtnList[i].className = 'date-btn active-date';
                } else {
                    dateBtnList[i].className = 'date-btn';
                }
            }

        },
        resetRefresh() {
            this.reportHandle('day');
            this.setSessionLocal('homeDateType', '')
            this.isRefresh = false;
            this.dayVal = dateUnit.dateFormat(new Date(), 'yyyy-MM-dd');  // 日时间
            this.weekVal = new Date();  // 周时间
            this.monthVal = new Date();  // 月时间
            this.yearVal = new Date();  // 年时间
        },
        download(){
            this.downloadStatus = true;
            this.$refs.mallreport.downLoadpdf(this.handleVal)
        },
        downloadSuccess(){
            this.downloadStatus = false;
        },
        confirmCondition() {
            if(this.handleVal == 'day'){
                this.setSessionLocal('homeDateType', '')
                this.$router.push('/mall');
                this.repTime = this.dayVal;
                this.propParams = {
                    dateType: '/mall',
                    timeVal: this.dayVal
                }
            }else{
                this.setSessionLocal('homeDateType', this.handleVal)
                this.$router.push(`/mall/${this.handleVal}ly`);
                this.repTime = $(`.${this.handleVal}-piack input`)[0].value
                this.propParams = {
                    dateType: `/mall/${this.handleVal}ly`,
                    timeVal: this[this.handleVal + 'Val']
                }
            }
        }
    }
}
</script>

<style scoped>
.index {
  position: absolute;
  left: 0;
  top: 65px;
  width: 100%;
  height: calc(100% - 65px);
  overflow: auto;
}
@media only screen and (max-width: 1366px) {
    .date-input-box {
        position: relative;
    }
}
</style>