<template>
    <div class="workbench">
        <el-card shadow="never" class="!border-none">
            <div class="mb-6 flex justify-between items-center">
                <span class="text-2xl">用户概况</span>
                <div class="flex items-center text-sm">
                    <div class="flex items-center mr-4">
                        <!-- <el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入门店id" /> -->
                        <el-select
                            v-model="queryParams.store_id"
                            filterable
                            remote
                            reserve-keyword
                            placeholder="输入门店名称搜索"
                            remote-show-suffix
                            :remote-method="remoteMethod"
                            :loading="storeloading"
                            style="width: 240px"
                            @change="getData"
                        >
                            <el-option
                                v-for="item in storeList"
                                :key="item.id"
                                :label="item.name"
                                :value="item.id"
                            />
                        </el-select>
                    </div>
                    <span class="mr-4">时间筛选: </span>
                    <el-date-picker
                        v-model="startEndTime"
                        type="daterange"
                        range-separator="至"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期"
                        unlink-panels
                        :shortcuts="shortcuts"
                        @change="getData"
                    />
                    <el-button type="primary" class="ml-4" @click="getData">查询</el-button>
                </div>
            </div>
            <div class="flex flex-wrap">
                <div class="w-1/5 flex mb-6" v-for="(item, index) in basicList" :key="index">
                    <div class="mr-2">
                        <div
                            class="rounded-full p-2"
                            :style="{ 'background-color': colorList[index % 8] }"
                        >
                            <iconfont :iconName="item.icon" white className="text-6xl" />
                        </div>
                    </div>
                    <div>
                        <div class="text-info">{{ item.name }}</div>
                        <div class="text-6xl">{{ item.num }}</div>
                        <!-- <div class="text-info">环比增长: <span :class="item.percent > 0 ? 'text-success' : 'text-danger'">{{
                            item.percent }}%</span></div> -->
                    </div>
                </div>
            </div>
        </el-card>
        <el-card shadow="never" class="mt-4 !border-none">
            <div>
                <div class="mb-6 flex justify-between items-center">
                    <span class="text-2xl">用户趋势</span>
                </div>
                <v-charts style="height: 400px" :option="visitorOption" :autoresize="true" />
            </div>
        </el-card>
    </div>
</template>

<script lang="ts" setup name="statistics_user">
import { apiGetUserBasic, apiGetUserTrend } from '@/api/workbench'
import moment from 'moment'
import vCharts from 'vue-echarts'
import { apiSystemStoreLists } from '@/api/system_store'

// 查询条件
const queryParams = reactive({
    store_id: '',
    date: ''
})

const shortcuts = [
    {
        text: '近一周',
        value: () => {
            const end = new Date()
            const start = new Date()
            start.setDate(start.getDate() - 7)
            return [start, end]
        }
    },
    {
        text: '本月',
        value: () => {
            const end = new Date()
            const start = new Date()
            start.setDate(1)
            end.setMonth(end.getMonth() + 1)
            end.setDate(0)
            return [start, end]
        }
    },
    {
        text: '近一月',
        value: () => {
            const end = new Date()
            const start = new Date()
            start.setMonth(start.getMonth() - 1)
            return [start, end]
        }
    },
    {
        text: '近三月',
        value: () => {
            const end = new Date()
            const start = new Date()
            start.setMonth(start.getMonth() - 3)
            return [start, end]
        }
    }
]

// 表单数据
const visitorOption: any = reactive({
    xAxis: {
        type: 'category',
        data: [0],
        axisLabel: {
            rotate: 45,
            color: '#333'
        }
    },
    yAxis: {
        type: 'value',
        name: '数量',
        position: 'left',
        axisLabel: {
            formatter: '{value}'
        }
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    legend: {
        data: ['访问量']
    },
    itemStyle: {
        // 点的颜色。
        color: 'red'
    },
    tooltip: {
        trigger: 'axis'
    },
    series: [
        {
            name: '访问量',
            data: [0],
            type: 'line',
            smooth: true
        }
    ]
})

// 颜色
const colorList = [
    '#5DB1FF',
    '#4CD384',
    '#FFC46A',
    '#CAA5F1',
    '#FFC46A',
    '#4CD384',
    '#5DB1FF',
    '#CAA5F1'
]
// 商品浏览量, 商品访客数, 加购件数, 下单件数, 支付件数, 支付金额, 成本金额, 退款金额, 退款件数, 访客-支付转化率
const basicList = reactive([
    {
        name: '余额',
        type: 'now_money',
        icon: 'RectangleCopy',
        num: 0,
        percent: 0
    },
    {
        name: '采购款',
        type: 'purchase_funds',
        icon: 'RectangleCopy49',
        num: 0,
        percent: 0
    },
    {
        name: '新增用户数',
        type: 'newUser',
        icon: 'RectangleCopy53',
        num: 0,
        percent: 0
    },
    {
        name: '成交用户数',
        type: 'payPeople',
        icon: 'RectangleCopy5',
        num: 0,
        percent: 0
    },
    // {
    //     name: '访客-支付转换率',
    //     type: 'payPercent',
    //     icon: 'RectangleCopy4',
    //     num: 0,
    //     percent: 0
    // },
    // {
    //     name: '激活付费会员数',
    //     type: 'payUser',
    //     icon: 'RectangleCopy7',
    //     num: 0,
    //     percent: 0
    // },

    // {
    //     name: '客单价',
    //     type: 'payPrice',
    //     icon: 'RectangleCopy15',
    //     num: 0,
    //     percent: 0
    // },

    // {
    //     name: '累计付费会员数',
    //     type: 'cumulativePayUser',
    //     icon: 'RectangleCopy7',
    //     num: 0,
    //     percent: 0
    // },
    {
        name: '会员数',
        type: 'rechargePeople',
        icon: 'RectangleCopy59',
        num: 0,
        percent: 0
    },
    {
        name: '累计会员数',
        type: 'cumulativeRechargePeople',
        icon: 'RectangleCopy6',
        num: 0,
        percent: 0
    },
    {
        name: '累计成交用户数',
        type: 'cumulativePayPeople',
        icon: 'RectangleCopy9',
        num: 0,
        percent: 0
    },
    {
        name: '累计用户',
        type: 'cumulativeUser',
        icon: 'RectangleCopy54',
        num: 0,
        percent: 0
    }
])
// 获取当前日期
const now = new Date()
// 获取当前年份
const year = now.getFullYear()
// 获取当前月份（注意：月份是从0开始的，所以实际月份需要加1）
const month = now.getMonth() + 1

// 创建当前月第一天的日期对象
const firstDay = new Date(year, month - 1, 1)
// 创建当前月最后一天的日期对象
const lastDay = new Date(year, month, 0)
const startEndTime = ref([firstDay, lastDay])
// 获取数据
const getData = () => {
    let date = ''
    if (startEndTime.value[0] && startEndTime.value[1]) {
        date =
            moment(startEndTime.value[0]).format('YYYY/MM/DD') +
            '-' +
            moment(startEndTime.value[1]).format('YYYY/MM/DD')
    }
    queryParams.date = date
    apiGetUserBasic(queryParams).then((res) => {
        basicList.forEach((item: any) => {
            item.num = res[item.type].num
            item.percent = res[item.type].percent
        })
    })
    apiGetUserTrend(queryParams).then((res) => {
        // 清空echarts 数据
        visitorOption.xAxis.data = []
        visitorOption.series = []

        visitorOption.legend.data = res.series.map((item: any) => item.name)

        // 写入从后台拿来的数据
        visitorOption.xAxis.data = res.xAxis
        visitorOption.series = res.series.map((item: any) => {
            return {
                type: 'line',
                smooth: true,
                data: item.value,
                name: item.name
            }
        })
    })
}
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
    storeloading.value = true
    apiSystemStoreLists({
        name: e,
        page_size: 50
    })
        .then((res) => {
            storeList.value = res.lists
            setTimeout(() => {
                storeloading.value = false
            }, 300)
        })
        .catch((err) => {
            setTimeout(() => {
                storeloading.value = false
            }, 300)
        })
}
onMounted(() => {
    getData()
})
</script>

<style lang="scss" scoped></style>
