2023-03-17 17:33:00 +08:00

1002 lines
25 KiB
HTML

{extend name="common/base"/}
{block name="style"}
<style type="text/css">
.dashboard-num table {width: 100%;}
.dashboard-num td {text-align: center; padding: 16px 0; width: 20%;border-left: 1px solid #f1f1f1; position: relative;}
.dashboard-num td:nth-child(1) { border-left: none}
.dashboard-num .num-title { padding-bottom: 10px; color: #999;}
.dashboard-num .blue {font-size: 20px; font-weight: 300;}
.dashboard-num td .badge {position: absolute;top: 0; right: 0;}
.dashboard-num td .badge span { padding: 2px 4px; font-size: 12px; border-radius: 0 0 0 4px;}
.dashboard-total td {border-top: 1px solid #f1f1f1}
.dashboard-logs .layui-timeline-item {padding-bottom: 1px;}
.info-td { width: 90px; text-align: right;background-color: #fafafa; color: #999; padding: 5px 3px;}
.info-td {width: 90px; text-align: right;background-color: #fafafa; color: #999; padding: 5px 3px;}
.layui-card-body .layui-timeline-title {
padding-bottom: 0;
font-size: 14px;
}
.layui-card-body .layui-timeline-item {
padding-bottom: 5px;
}
.layui-card-header span {
position: absolute;
right: 10px;
top: 10px;
}
.layui-sales {
margin-bottom: 0;
overflow: hidden;
color: rgba(0,0,0,.85);
font-size: 30px;
}
.layui-sales-info {
padding-top: 16px;
color: rgba(0,0,0,.65);
white-space: nowrap;
text-overflow: ellipsis;
}
fieldset.layui-field-title {
margin-bottom: 10px;
}
.select_time {
width: 350px;
/* border-radius: 5px; */
float: right;
/*background: #1e3d64;*/
/*left: 74%;*/
/*top: 221%;*/
position: relative;
z-index: 11;
}
.select_time span {
display: block;
width: 60px;
height: 25px;
float: left;
/*background: #4095e5;*/
text-align: center;
line-height: 25px;
position: relative;
top:-28px;
right: -30%;
border-left: 1px solid #dcdfe6;
border-radius: 4px 0 0 4px;
box-shadow: none!important;
cursor:pointer;
}
.select_time .active {
color: #fff;
background-color: #6394f9;
border-color: #6394f9;
box-shadow: -1px 0 0 0 #6394f9;
}
#btsspan{
position: relative;
width: 250px;
left:33%;
z-index: 11;
}
#btsspan span{
display: block;
width: 60px;
height: 25px;
float: left;
/*background: #4095e5;*/
text-align: center;
line-height: 25px;
position: relative;
border-left: 1px solid #dcdfe6;
border-radius: 4px 0 0 4px;
box-shadow: none!important;
cursor:pointer;
}
.el-row .active {
color: #fff;
background-color: #6394f9;
border-color: #6394f9;
box-shadow: -1px 0 0 0 #6394f9;
}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="p-3">
<div class="layui-row layui-col-space12">
<div class="">
<div class="layui-row layui-col-space12">
<div class="layui-col-md12">
<div class="layui-card dashboard-num">
<table>
<tr>
<td>
<div class="num-title">总会员数</div>
<div class="blue">{$totaluser}</div>
</td>
<td>
<div class="num-title">老人人数</div>
<div class="blue">{$old_num}</div>
</td>
<td>
<div class="num-title">儿童人数</div>
<div class="blue">{$children_num}</div>
</td>
<td>
<div class="num-title">未婚男</div>
<div class="blue">{$unmarried_man_num}</div>
</td>
<td>
<div class="num-title">未婚女</div>
<div class="blue">{$unmarried_woman_num}</div>
</td>
</tr>
<tr>
<td>
<div class="num-title">残疾人数</div>
<div class="blue">{$whether_disabled_num}</div>
</td>
<td>
<div class="num-title">参保人数</div>
<div class="blue">{$insurance_type_num}</div>
</td>
<td>
<div class="num-title">少数名族人数</div>
<div class="blue">{$nation_s_num}</div>
</td>
<td>
<div class="num-title">汉族人数</div>
<div class="blue">{$nation_h_num}</div>
</td>
<td>
<div class="num-title">工作人员数</div>
<div class="blue">{$work_num}</div>
</td>
</tr>
</table>
</div>
<div class="layui-card dashboard-num">
<table>
<tr>
<td>
<div class="num-title">土地总面积</div>
<div class="blue">{$land_area_num}</div>
</td>
<td>
<div class="num-title">荒地</div>
<div class="blue">{$waste_land_area}</div>
</td>
<td>
<div class="num-title">农田水利</div>
<div class="blue">{$sum_218}</div>
</td>
<td>
<div class="num-title">坑塘</div>
<div class="blue">{$sum_217}</div>
</td>
<td>
<div class="num-title">养殖</div>
<div class="blue">{$sum_216}</div>
</td>
</tr>
<tr>
<td>
<div class="num-title">牧草地</div>
<div class="blue">{$sum_215}</div>
</td>
<td>
<div class="num-title">林地</div>
<div class="blue">{$sum_214}</div>
</td>
<td>
<div class="num-title">耕地</div>
<div class="blue">{$sum_70}</div>
</td>
<td>
<div class="num-title">园地</div>
<div class="blue">{$sum_69}</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="p-3">
<div class="layui-row layui-col-space15">
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">支付金额<span class="layui-badge layui-badge-blue pull-right" style="background-color:#6394f9">今日</span></div>
<div class="layui-card-body">
<div class="layui-sales" id="pay1">0</div>
<div class="layui-sales-info" style="height: 125px;">
周同比 <span id="pay2">0%</span>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 66px;"></fieldset>
<div>昨日数据 <span id="pay3">0</span></div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">支付人数<span class="layui-badge layui-badge-blue pull-right" style="background-color:#6394f9">今日</span></div>
<div class="layui-card-body">
<div class="layui-sales" id="pay4">0</div>
<div class="layui-sales-info" style="height: 125px;">
周环比 <span id="pay5">0%</span>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 66px;"></fieldset>
<div>昨日数据 <span id="pay6">0</span></div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">访客<span class="layui-badge layui-badge-green pull-right" style="background-color:#6394f9">今日</span></div>
<div class="layui-card-body">
<div class="layui-sales" id="pay7">0</div>
<div class="layui-sales-info" >
周环比 <span id="pay8">0%</span>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 66px;"></fieldset>
<div>昨日数据 <span id="pay9">0</span></div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">关注店铺 <span class="layui-badge pull-right" style="background-color:#6394f9">今日</span></div>
<div class="layui-card-body">
<div class="layui-sales" id="pay10">0</div>
<div class="layui-sales-info" >
周环比 <span id="pay11">0%</span>
<fieldset class="layui-elem-field layui-field-title" style="position: relative;margin-top: 66px;"></fieldset>
<div>昨日数据 <span id="pay12">0</span></div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-card">
<div class="layui-card-header" style="position: relative">
<div style="font-size: 28;font-weight: 700;line-height: 36px;">
支付订单
</div>
<div class="select_time" id="select_time1">
<span data-type="lately7">近七天</span>
<span class="active" data-type="lately30">近30天</span>
<span data-type="month">本月</span>
<span data-type="year">本年</span>
</div>
</div>
<div class="layui-card-body">
<div id="main" style="height: 350px;"></div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md8">
<div class="layui-card">
<div class="layui-card-header" style="font-size: 28;font-weight: 700;line-height: 36px;">成交用户</div>
<div class="select_time" id="select_time2">
<span data-type="lately7">近七天</span>
<span class="active" data-type="lately30">近30天</span>
<span data-type="month">本月</span>
<span data-type="year">本年</span>
</div>
<div class="layui-card">
<div id="chartView2" style="width: 100%;height:500px;"></div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md4">
<div class="layui-card">
<div class="layui-card-header" style="font-size: 28;font-weight: 700;line-height: 36px;">用户统计</div>
<div class="select_time" id="select_time3">
<span data-type="lately7">近七天</span>
<span class="active" data-type="lately30">近30天</span>
<span data-type="month">本月</span>
<span data-type="year">本年</span>
</div>
<div data-v-5dd143d3="" class="pieChart-switch el-row">
<div class="bts" id="btsspan">
<span class="active" data-type="money">金额</span>
<span data-type="user">客户数</span>
</div>
</div>
<div class="layui-card">
<div id="chartView3" style="width: 100%;height:500px;"></div>
</div>
</div>
</div>
</div>
</div>
<div class="p-3">
<div class="layui-row layui-col-space15">
<div class="layui-col-xs6 layui-col-md4">
<div class="layui-card">
<div class="layui-card-header" style="font-size: 28;font-weight: 700;line-height: 36px;">商品支付排行</div>
<div class="select_time" id="select_time4">
<span data-type="lately7">近七天</span>
<span data-type="lately30">近30天</span>
<span data-type="month">本月</span>
<span class="active" data-type="year">本年</span>
</div>
<div class="layui-card">
<table class="layui-hide" id="goods1" lay-filter="admin"></table>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md4">
<div class="layui-card">
<div class="layui-card-header" style="font-size: 28;font-weight: 700;line-height: 36px;">商品访客排行</div>
<div class="select_time" id="select_time5">
<span data-type="lately7">近七天</span>
<span data-type="lately30">近30天</span>
<span data-type="month">本月</span>
<span class="active" data-type="year">本年</span>
</div>
<div class="layui-card">
<table class="layui-hide" id="goods2" lay-filter="admin"></table>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md4">
<div class="layui-card">
<div class="layui-card-header" style="font-size: 28;font-weight: 700;line-height: 36px;">商品加购排行</div>
<div class="select_time" id="select_time6">
<span data-type="lately7">近七天</span>
<span data-type="lately30">近30天</span>
<span data-type="month">本月</span>
<span class="active" data-type="year">本年</span>
</div>
<div class="layui-card">
<table class="layui-hide" id="goods3" lay-filter="admin"></table>
</div>
</div>
</div>
</div>
</div>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script src="https://cdn.staticfile.org/echarts/5.3.0/echarts.min.js"></script>
<script src="{__GOUGU__}/third_party/echart/china.js"></script>
<script src="/static/assets/js/jquery.min.js"></script>
<script>
const moduleInit = ['tool','admin'];
function gouguInit() {
var table = layui.table, tool = layui.tool, form = layui.form;
// 年月日的切换
var that = this
$("#select_time1").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
get_order(this.dataset.type);
});
$("#select_time2").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
get_view_data(this.dataset.type);
});
$("#select_time3").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
var type = $('#btsspan').children('.active').attr('data-type');
get_view_data2(this.dataset.type,type);
});
$("#btsspan").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
var date = $('#select_time3').children('.active').attr('data-type');
var type = this.dataset.type;
get_view_data2(date,type);
});
$("#select_time4").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
get_goods1(table,this.dataset.type);
});
$("#select_time5").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
get_goods2(table,this.dataset.type);
});
$("#select_time6").on("click", "span", function() {
// 此时要注意这个索引号的问题
index = $(this).index() - 1;
// 点击当前a 高亮显示 调用active
$(this)
.addClass("active")
.siblings("span")
.removeClass("active");
get_goods3(table,this.dataset.type);
});
get_main();
get_order('lately30');
get_view_data('lately30');
get_view_data2('lately30','money');
get_goods1(table,'year');
get_goods2(table,'year');
get_goods3(table,'year');
}
function get_main() {
$.ajax({
url: "/admin/api/main",
type: 'get',
data: {},
success: function (e) {
if (e.code == 0) {
$('#pay1').html(e.data.today.payPrice);
$('#pay2').html(e.data.lastWeekRate.payPrice);
$('#pay3').html(e.data.yesterday.payPrice);
$('#pay4').html(e.data.today.payUser);
$('#pay5').html(e.data.lastWeekRate.payUser);
$('#pay6').html(e.data.yesterday.payUser);
$('#pay7').html(e.data.today.visitNum);
$('#pay8').html(e.data.lastWeekRate.visitNum);
$('#pay9').html(e.data.yesterday.visitNum);
$('#pay10').html(e.data.today.visitUserNum);
$('#pay11').html(e.data.lastWeekRate.visitUserNum);
$('#pay12').html(e.data.yesterday.visitUserNum);
}
}
})
}
function get_order(date) {
var myChart = echarts.init(document.getElementById('main'));
$.ajax({
url: "/admin/api/order?date="+date,
type: 'get',
data: {},
success: function (e) {
if (e.code == 0) {
var option;
option = {
title: {
text: ''
},
tooltip: {
trigger: 'axis'
},
legend: {
left:0,
data: ['订单数', '支付人数', '支付金额']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
data:e.data.day
},
yAxis: [
{
type: 'value',
name: '订单/支付人数',
axisLine: {
symbol: 'arrow',
lineStyle: {
type: 'dashed'
// ...
}
}
},
{
type: 'value',
name: '支付金额',
axisLine: {
symbol: 'arrow',
lineStyle: {
type: 'dashed'
// ...
}
}
},
],
series: [
{
name: '订单数',
type: 'line',
stack: 'Total',
data: e.data.total
},
{
name: '支付人数',
type: 'line',
stack: 'Total',
data: e.data.user
},
{
name: '支付金额',
type: 'line',
stack: 'Total',
data: e.data.pay_price
},
]
};
myChart.setOption(option);
}
}
})
}
var chartView2 = echarts.init(document.getElementById('chartView2'));
var chartView3 = echarts.init(document.getElementById('chartView3'));
function get_view_data(date) {
$.ajax({
url: "/admin/api/user?date="+date,
type: 'get',
data: {},
success: function (e) {
if (e.code == 0) {
var visitUser = e.data.visitUser; //访客人数
var payOrderUser = e.data.payOrderUser;//支付人数
var orderUser = e.data.orderUser;//下单人数
var payOrderPrice = e.data.payOrderPrice;//支付金额
var payOrderRate = e.data.payOrderRate;//下单-支付转化率
var userRate = e.data.userRate;//客单价
var orderRate = e.data.orderRate;//访客-下单转化率
var orderPrice = e.data.orderPrice;//下单金额
var colors = ['#5b8ff9', '#5ad8a6', '#5d7092'];
// { value: payOrderUser, name: '支付' },
// { value: orderUser, name: '下单' },
// { value: visitUser, name: '访问' }
var lineargroup = [
{
value: 60,
name: '访客人数',
number: visitUser,
oriname: '访客',
color: ['#eff4fe'],
text1: '',
value1: '',
text2: '',
value2: '',
},
{
value: 40,
name: '下单人数',
number: orderUser,
oriname: '下单',
color: ['#effbf6'],
text1: '下单金额',
value1: orderPrice,
text2: '',
value2: '',
},
{
value: 20,
name: '支付人数',
number: payOrderUser,
oriname: '支付',
color: ['#eff4fe'],
text1: '支付金额',
value1: payOrderPrice,
text2: '客单价',
value2: userRate,
},
];
var data1 = [];
var data2 = [];
for (var i = 0; i < lineargroup.length; i++) {
var obj1 = {
value: lineargroup[i].value,
num: lineargroup[i].number,
name: lineargroup[i].oriname,
};
var obj2 = {
value: lineargroup[i].value,
name: lineargroup[i].name,
data: lineargroup[i],
itemStyle: {
normal: {
color: lineargroup[i].color[0],
borderWidth: 0,
opacity: 1,
},
},
};
data1.push(obj1);
data2.push(obj2);
}
var option = {
backgroundColor: '#ffffff',
color: colors,
// tooltip: {
// trigger: 'item',
// formatter: '{b}-下单转换率: {c}%',
// },
xAxis: [
{
show: false,
inverse: true,
position: 'top',
},
],
yAxis: [
{
position: 'left',
top: '120',
show: false,
boundaryGap: false,
inverse: true,
},
],
series: [
{
top: 0,
type: 'funnel',
height: '400',
gap: 10,
minSize: 150,
left: '30%',
width: '60%',
z: 3,
markLine :{
symbol:'none',
data:[
[
{ x: '83%', y: '27%' },
{
x: '85%',
y: '27%',
value: '访客-下单转化率:'+orderRate*100+'%',
lineStyle: { color: '#333' },
},
],
[
{ x: '76%', y: '55%' },
{
x: '80%',
y: '55%',
value: '下单-支付转化率:'+payOrderRate*100+'%',
lineStyle: { color: '#333' },
},
],
]
},
label: {
show: true,
position: 'inside',
fontSize: '14',
formatter: function (d) {
var ins = d.name;
return ins;
},
rich: {
aa: {
padding: [8, 0, 6, 0],
},
},
},
data: data1,
},
{
top: 0,
type: 'funnel',
height: '400',
gap: 10,
minSize: 400,
left: '12%',
width: '55%',
z: 2,
label: {
normal: {
color: '#333',
position: 'insideLeft',
padding: [11, 25],
formatter: function (d) {
let ins =
'{aa|}' +
d.name +
'{aa|}' +
d.data.data.text1 +
'{aa|}' +
d.data.data.text2 +
'\n{bb|}' +
d.data.data.number +
'{bb|}' +
d.data.data.value1 +
'{bb|}' +
d.data.data.value2 +
'';
return ins;
},
rich: {
aa: {
align: 'right',
color: '#666',
fontSize: '12',
lineHeight: '30',
padding: [0, 20, 0, 0],
},
bb: {
align: 'right',
color: '#333',
fontSize: '12',
padding: [0, 25, 0, 0],
},
},
},
},
tooltip: {
show: false,
},
data: data2,
},
],
};
chartView2.setOption(option);
setTimeout(function () {
window.onresize = function () {
chartView.resize();
myChart.resize();
}
})
}
}
})
}
function get_view_data2(date,type) {
$.ajax({
url: "/admin/api/userRate?date="+date,
type: 'post',
data: {},
success: function (e) {
if (e.code == 0) {
if(type == 'user'){
var newUser = e.data.newUser;
var oldUser = e.data.oldUser;
var title = '客户数';
}else{
var newUser = e.data.newTotalPrice;
var oldUser = e.data.oldTotalPrice;
var title = '金额';
}
var newTotalPrice = e.data.newTotalPrice;
var oldTotalPrice = e.data.oldTotalPrice;
var totalPrice = e.data.totalPrice;
var user = e.data.user;
option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
top: '5%',
x: 'left',
y:'bottom',
},
series: [
{
name: title,
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
color:['#5b8ff9','#FFBF26'],
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 40,
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [
{ value: newUser, name: '新用户'},
{ value: oldUser, name: '老用户'},
]
}
]
};
chartView3.setOption(option);
setTimeout(function () {
window.onresize = function () {
chartView.resize();
myChart.resize();
}
})
}
}
})
}
function get_goods1(table,date){
layui.pageTable = table.render({
elem: '#goods1',
title: '列表',
toolbar: '#toolbarDemo',
defaultToolbar: [],// 去掉“筛选列”,“导出”,“打印”,
url: '/admin/api/product?date='+date, //数据接口
page: false, //开启分页
limit: 10,
cols: [
[
{
title: '排名',
align: 'center',
templet: function (d) {
return d.LAY_TABLE_INDEX+1;
}
},{
field: 'store_name',
title: '名称',
templet: function (d) {
var html = '<div><img src="'+d.image+'" style="width:30px; height:30px;"> '+d.store_name+'</div>';
return html;
}
}, {
field: 'total',
title: '支付数',
align: 'center',
}
]
]
});
}
function get_goods2(table,date){
layui.pageTable = table.render({
elem: '#goods2',
title: '列表',
toolbar: '#toolbarDemo',
defaultToolbar: [],// 去掉“筛选列”,“导出”,“打印”,
url: '/admin/api/productVisit?date='+date, //数据接口
page: false, //开启分页
limit: 10,
cols: [
[
{
title: '排名',
align: 'center',
templet: function (d) {
return d.LAY_TABLE_INDEX+1;
}
},{
field: 'store_name',
title: '名称',
templet: function (d) {
var html = '<div><img src="'+d.image+'" style="width:30px; height:30px;"> '+d.store_name+'</div>';
return html;
}
}, {
field: 'total',
title: '支付数',
align: 'center',
}
]
]
});
}
function get_goods3(table,date){
layui.pageTable = table.render({
elem: '#goods3',
title: '列表',
toolbar: '#toolbarDemo',
defaultToolbar: [],// 去掉“筛选列”,“导出”,“打印”,
url: '/admin/api/productCart?date='+date, //数据接口
page: false, //开启分页
limit: 10,
cols: [
[
{
title: '排名',
align: 'center',
templet: function (d) {
return d.LAY_TABLE_INDEX+1;
}
},{
field: 'store_name',
title: '名称',
templet: function (d) {
var html = '<div><img src="'+d.image+'" style="width:30px; height:30px;"> '+d.store_name+'</div>';
return html;
}
}, {
field: 'total',
title: '支付数',
align: 'center',
}
]
]
});
}
</script>
{/block}
<!-- /脚本 -->