NGToolsAdmin/pages/uni-stat/pay-order/overview/components/statPanelToday.vue
2024-09-13 16:39:31 +08:00

233 lines
5.1 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 历史数据统计面板最近7天本月本季度本月总和 -->
<view class="uni-stat--x p-m">
<view class="uni-stat-card-header">今日数据</view>
<uni-table :loading="loading" border stripe emptyText="暂无更多数据" style="min-height: 100px;">
<!-- 表头行 -->
<uni-tr>
<uni-th align="center" class="th"></uni-th>
<uni-th align="center" class="th" v-for="(item,index) in panelData" :key="index">
<uni-tooltip>
<view class="uni-stat--sum-item-title">
{{ item.title }}
<uni-icons class="ml-s" type="help" color="#666" />
</view>
<template v-slot:content>
<view class="uni-stat-tooltip-s">
<view v-for="(item2,index2) in item.list" :key="index2">{{ item2.tooltip }}</view>
</view>
</template>
</uni-tooltip>
</uni-th>
</uni-tr>
<!-- 表格数据行 -->
<uni-tr>
<uni-td align="center" class="td">下单</uni-td>
<uni-td align="center" class="td" v-for="(item, index) in panelData" :key="index">{{ item.list[0].value }}</uni-td>
</uni-tr>
<uni-tr>
<uni-td align="center" class="td">收款</uni-td>
<uni-td align="center" class="td" v-for="(item, index) in panelData" :key="index">{{ item.list[1].value }}</uni-td>
</uni-tr>
<uni-tr>
<uni-td align="center" class="td">退款</uni-td>
<uni-td align="center" class="td" v-for="(item, index) in panelData" :key="index">{{ item.list[2].value }}</uni-td>
</uni-tr>
</uni-table>
</view>
</template>
<script>
import {
formatterData,
stringifyQuery,
stringifyField,
stringifyGroupField,
getTimeOfSomeDayAgo,
formatDate,
parseDateTime,
debounce,
} from '@/js_sdk/uni-stat/util.js'
import timeUtil from "@/js_sdk/uni-stat/timeUtil.js"
import {
fieldsMap,
fieldsGroupMap,
} from '../fieldsMap.js'
export default {
props: {
query: {
type: [Object],
default: function(){
return {}
}
},
},
data() {
return {
tableName: 'uni-stat-pay-result',
panelData: fieldsGroupMap,
loading: false
}
},
created() {
this.getCloudDataDebounce = debounce(() => {
this.getCloudData();
}, 300);
this.getCloudDataDebounce();
},
methods: {
// 获取云端数据
getCloudData() {
let query = this.query;
if (!query.appid) return;
this.loading = true;
const where = stringifyQuery({
...query,
start_time: [getTimeOfSomeDayAgo(0), Date.now()]
}, true, ['uni_platform']);
//console.log('where: ', where)
const db = uniCloud.database();
const subTable = db.collection(this.tableName)
.where(where)
.field(`${stringifyField(fieldsMap)}, dimension, stat_date.date_str as stat_time, start_time`)
.groupBy(`stat_time, dimension`)
.groupField(stringifyGroupField(fieldsMap))
.orderBy('stat_time', 'desc')
.get()
.then(res => {
let data = res.result.data;
// 数据格式化
data = formatterData({
fieldsMap,
data
});
//console.log('data: ', data)
// 获取今日数据
let today = data.find((item) => {
return item.dimension === 'day' && item.stat_time === parseDateTime(getTimeOfSomeDayAgo(0), '');
});
if (!today) {
today = data.find((item) => {
return item.dimension === 'hour' && item.stat_time === parseDateTime(getTimeOfSomeDayAgo(0), '');
}) || {};
}
this.loading = false;
this.panelData = this.setPanelData(today);
})
},
// 设置面板数据
setPanelData(data){
let panelData = this.panelData;
panelData.map((item1, index1) => {
item1.list.map((item2, index2) => {
item2.value = data[item2.field] || 0;
});
});
return panelData;
}
},
watch: {
query: {
deep: true,
handler(val) {
this.getCloudDataDebounce()
}
}
},
}
</script>
<style lang="scss" scoped>
.uni-stat-tooltip-s {
width: 350px;
white-space: normal;
}
.uni-stat--sum {
&-x {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
border-radius: 4px;
padding: 15px;
box-shadow: -1px -1px 5px 0 rgba(0, 0, 0, 0.1);
}
&-item {
white-space: nowrap;
text-align: center;
margin: 10px 18px;
&-width {
width: 100px
}
}
&-item-title {
display: flex;
align-items: center;
justify-content: center;
min-height: 17px;
font-size: 12px;
color: #666;
}
&-item-value {
font-size: 24px;
line-height: 48px;
font-weight: 700;
color: #333;
}
&-item-contrast {
font-size: 14px;
color: #666;
}
}
/* #ifndef APP-NVUE */
@media screen and (max-width: 500px) {
.uni-stat--sum-x {
padding: 15px 0;
align-items: center;
justify-content: center;
flex-wrap: unset;
overflow-x: auto !important;
}
::-webkit-scrollbar {
display: none;
}
}
/* #endif */
.uni-stat--sum-flex{
flex:1;
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
border-radius: 4px;
padding: 15px;
.uni-stat--sum-item{
min-width: 300rpx;
max-width: 500rpx;
flex:1;
}
}
.uni-stat-card-header {
justify-content: space-between;
color: #555;
font-size: 14px;
font-weight: 600;
padding: 10px 0;
margin-bottom: 15px;
}
.td.main{
color:#e43d33;
}
</style>