|
@@ -0,0 +1,333 @@
|
|
|
+<style type="text/css">
|
|
|
+ .sm-st {
|
|
|
+ background: #fff;
|
|
|
+ padding: 20px;
|
|
|
+ -webkit-border-radius: 3px;
|
|
|
+ -moz-border-radius: 3px;
|
|
|
+ border-radius: 3px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sm-st-icon {
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+ display: inline-block;
|
|
|
+ line-height: 60px;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 30px;
|
|
|
+ background: #eee;
|
|
|
+ -webkit-border-radius: 5px;
|
|
|
+ -moz-border-radius: 5px;
|
|
|
+ border-radius: 5px;
|
|
|
+ float: left;
|
|
|
+ margin-right: 10px;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sm-st-info {
|
|
|
+ padding-top: 2px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sm-st-info span {
|
|
|
+ display: block;
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 600;
|
|
|
+ }
|
|
|
+
|
|
|
+ .orange {
|
|
|
+ background: #fa8564 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tar {
|
|
|
+ background: #45cf95 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sm-st .green {
|
|
|
+ background: #86ba41 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pink {
|
|
|
+ background: #AC75F0 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .yellow-b {
|
|
|
+ background: #fdd752 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-elem {
|
|
|
+
|
|
|
+ background-color: #fff;
|
|
|
+ padding: 18px;
|
|
|
+ border-radius: 40px;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-info {
|
|
|
+ text-align: center;
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin-top: -5px;
|
|
|
+ padding: 8px;
|
|
|
+ -webkit-box-shadow: 0 1px 0px rgba(0, 0, 0, 0.05);
|
|
|
+ box-shadow: 0 1px 0px rgba(0, 0, 0, 0.05);
|
|
|
+ font-style: italic;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-icon {
|
|
|
+ text-align: center;
|
|
|
+ margin-bottom: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .st-red {
|
|
|
+ background-color: #F05050;
|
|
|
+ }
|
|
|
+
|
|
|
+ .st-green {
|
|
|
+ background-color: #27C24C;
|
|
|
+ }
|
|
|
+
|
|
|
+ .st-violet {
|
|
|
+ background-color: #7266ba;
|
|
|
+ }
|
|
|
+
|
|
|
+ .st-blue {
|
|
|
+ background-color: #23b7e5;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stats .stat-icon {
|
|
|
+ color: #28bb9c;
|
|
|
+ display: inline-block;
|
|
|
+ font-size: 26px;
|
|
|
+ text-align: center;
|
|
|
+ vertical-align: middle;
|
|
|
+ width: 50px;
|
|
|
+ float: left;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat {
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ display: inline-block;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat .value {
|
|
|
+ font-size: 20px;
|
|
|
+ line-height: 24px;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat .name {
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ margin: 5px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat.lg .value {
|
|
|
+ font-size: 26px;
|
|
|
+ line-height: 28px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-col {
|
|
|
+ margin:0 0 10px 0;
|
|
|
+ }
|
|
|
+ .stat.lg .name {
|
|
|
+ font-size: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-col .progress {
|
|
|
+ height: 2px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-col .progress-bar {
|
|
|
+ line-height: 2px;
|
|
|
+ height: 2px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .item {
|
|
|
+ padding: 30px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ #statistics .panel {
|
|
|
+ min-height: 150px;
|
|
|
+ }
|
|
|
+
|
|
|
+ #statistics .panel h5 {
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+</style>
|
|
|
+<div class="panel panel-default panel-intro">
|
|
|
+
|
|
|
+ <div class="panel-body">
|
|
|
+
|
|
|
+
|
|
|
+ <form class="form-horizontal form-commonsearch nice-validator n-default n-bootstrap" novalidate="" method="post"
|
|
|
+ action="" id="form">
|
|
|
+ <div class="row">
|
|
|
+ <div class="row">
|
|
|
+ <div class="form-group">
|
|
|
+ <label for="createtime" class="control-label col-xs-2" style="width: 6%">日期</label>
|
|
|
+ <div class="col-xs-5" style="width: 20%">
|
|
|
+ <input type="hidden" class="form-control operate" name="createtime-operate"
|
|
|
+ data-name="createtime" value="RANGE" readonly="">
|
|
|
+ <input type="text" class="form-control datetimerange" name="startTime" value="{$post_time}"
|
|
|
+ id="start_time" data-index="12" onfocus="getdaterangepicker(form)"
|
|
|
+ autocomplete="off" style="width: 100%">
|
|
|
+ </div>
|
|
|
+ <div class="col-xs-5">
|
|
|
+ <button type="submit" class="btn btn-success" formnovalidate="">提交</button>
|
|
|
+ <button type="reset" class="btn btn-default">重置</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+</div>
|
|
|
+
|
|
|
+<div class="panel panel-default panel-intro">
|
|
|
+
|
|
|
+ <div class="panel-body">
|
|
|
+ <div id="myTabContent" class="tab-content">
|
|
|
+ <div class="tab-pane fade active in" id="one">
|
|
|
+
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-sm-3 col-xs-6">
|
|
|
+ <div class="sm-st clearfix">
|
|
|
+ <span class="sm-st-icon st-red"><i class="fa fa-leaf"></i></span>
|
|
|
+ <div class="sm-st-info">
|
|
|
+ <span>{$sale}</span>
|
|
|
+ 总销售额
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col-sm-3 col-xs-6">
|
|
|
+ <div class="sm-st clearfix">
|
|
|
+ <span class="sm-st-icon st-violet"><i class="fa fa-magic"></i></span>
|
|
|
+ <div class="sm-st-info">
|
|
|
+ <span>{$sale_num}</span>
|
|
|
+ 总订单数
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="col-sm-3 col-xs-6">
|
|
|
+ <div class="sm-st clearfix">
|
|
|
+ <span class="sm-st-icon st-red"><i class="fa fa-users"></i></span>
|
|
|
+ <div class="sm-st-info">
|
|
|
+ <span>{$register}</span>
|
|
|
+ 新增用户数
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col-sm-3 col-xs-6">
|
|
|
+ <div class="sm-st clearfix">
|
|
|
+ <span class="sm-st-icon st-violet"><i class="fa fa-users"></i></span>
|
|
|
+ <div class="sm-st-info">
|
|
|
+ <span>{$buy}</span>
|
|
|
+ 下单客户数
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col-sm-3 col-xs-6">
|
|
|
+ <div class="sm-st clearfix">
|
|
|
+ <span class="sm-st-icon st-blue"><i class="fa fa-rocket"></i></span>
|
|
|
+ <div class="sm-st-info">
|
|
|
+ <span>{$gross_profit}</span>
|
|
|
+ 毛利
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col-sm-3 col-xs-6">
|
|
|
+ <div class="sm-st clearfix">
|
|
|
+ <span class="sm-st-icon st-green"><i class="fa fa-rmb"></i></span>
|
|
|
+ <div class="sm-st-info">
|
|
|
+ <span>{$gross_profit_margin}%</span>
|
|
|
+ 毛利率
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-lg-6">
|
|
|
+ <div id="echart" class="btn-refresh" style="height:300px;width:50%;"></div>
|
|
|
+ </div>
|
|
|
+ <div class="col-lg-6">
|
|
|
+ <div id="echart1" class="btn-refresh" style="height:300px;width:50%;"></div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="tab-pane fade" id="two">
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-xs-12">
|
|
|
+ {:__('Custom zone')}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</div>
|
|
|
+
|
|
|
+<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
|
|
|
+<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
|
|
|
+<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
|
|
|
+<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css"/>
|
|
|
+<script>
|
|
|
+ $('input[name="dates"]').daterangepicker();
|
|
|
+
|
|
|
+ function getdaterangepicker(form) {
|
|
|
+ //绑定日期时间元素事件
|
|
|
+ if ($(".datetimerange", form).size() > 0) {
|
|
|
+ require(['bootstrap-daterangepicker'], function () {
|
|
|
+ var ranges = {};
|
|
|
+ ranges[__('Today')] = [Moment().startOf('day'), Moment().endOf('day')];
|
|
|
+ ranges[__('Yesterday')] = [Moment().subtract(1, 'days').startOf('day'), Moment().subtract(1, 'days').endOf('day')];
|
|
|
+ ranges[__('Last 7 Days')] = [Moment().subtract(6, 'days').startOf('day'), Moment().endOf('day')];
|
|
|
+ ranges[__('Last 30 Days')] = [Moment().subtract(29, 'days').startOf('day'), Moment().endOf('day')];
|
|
|
+ ranges[__('This Month')] = [Moment().startOf('month'), Moment().endOf('month')];
|
|
|
+ ranges[__('Last Month')] = [Moment().subtract(1, 'month').startOf('month'), Moment().subtract(1, 'month').endOf('month')];
|
|
|
+ var options = {
|
|
|
+ timePicker: false,
|
|
|
+ autoUpdateInput: false,
|
|
|
+ timePickerSeconds: true,
|
|
|
+ timePicker24Hour: true,
|
|
|
+ autoApply: true,
|
|
|
+ locale: {
|
|
|
+ format: 'YYYY-MM-DD HH:mm:ss',
|
|
|
+ customRangeLabel: __("Custom Range"),
|
|
|
+ applyLabel: __("Apply"),
|
|
|
+ cancelLabel: __("Clear"),
|
|
|
+ },
|
|
|
+ ranges: ranges,
|
|
|
+ };
|
|
|
+ var origincallback = function (start, end) {
|
|
|
+ $(this.element).val(start.format(this.locale.format) + " - " + end.format(this.locale.format));
|
|
|
+ $(this.element).trigger('blur');
|
|
|
+ };
|
|
|
+ $(".datetimerange", form).each(function () {
|
|
|
+ var callback = typeof $(this).data('callback') == 'function' ? $(this).data('callback') : origincallback;
|
|
|
+ $(this).on('apply.daterangepicker', function (ev, picker) {
|
|
|
+ callback.call(picker, picker.startDate, picker.endDate);
|
|
|
+ });
|
|
|
+ $(this).on('cancel.daterangepicker', function (ev, picker) {
|
|
|
+ $(this).val('').trigger('blur');
|
|
|
+ });
|
|
|
+ $(this).daterangepicker($.extend(true, options, $(this).data()), callback);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|