diff --git a/application/admin/controller/Orderplan.php b/application/admin/controller/Orderplan.php index eb1f378..8e34def 100644 --- a/application/admin/controller/Orderplan.php +++ b/application/admin/controller/Orderplan.php @@ -52,9 +52,7 @@ class Orderplan extends Backend public function dashboard() { - return $this->fetch('orderplan/index'); - } public function data() @@ -127,7 +125,6 @@ class Orderplan extends Backend } } - $this->buildDate($build); $build->field([ 'DATE(create_time) day', 'sum(total) total', diff --git a/application/admin/controller/statistics/Item.php b/application/admin/controller/statistics/Item.php new file mode 100644 index 0000000..103475d --- /dev/null +++ b/application/admin/controller/statistics/Item.php @@ -0,0 +1,72 @@ +fetch('index'); + } + + public function list(){ + + $build = new Order(); + + $start = now()->modify('-14 days')->format('Y-m-d'); + $end_at = now()->format('Y-m-d 23:29:59'); + + $filter ['daterange'] = request()->get('daterange'); + if (!empty($filter['daterange'])) { + $arr = explode(' - ', $filter['daterange']); + if (trim($arr[0])) { + $start = trim($arr[0]); + } + if (trim($arr[1])) { + $end_at = trim($arr[1]) . ' 23:29:59'; + } + } + $build->field([ + 'item_title', + 'sum(total) total', + 'count(id) count', + 'sum(performance) performance' + ])->group('item_title'); + + return []; + } + + public function chartData(){ + return []; + } + +} diff --git a/application/admin/view/statistics/item/index.html b/application/admin/view/statistics/item/index.html new file mode 100644 index 0000000..b74f52d --- /dev/null +++ b/application/admin/view/statistics/item/index.html @@ -0,0 +1,61 @@ +
+
+ +
+ + +
+
+
+
+ + + +
+
+
+ +
+
+
+
+
diff --git a/public/assets/js/addons.js b/public/assets/js/addons.js index 640ed38..aeba863 100755 --- a/public/assets/js/addons.js +++ b/public/assets/js/addons.js @@ -1,6 +1,8 @@ define([], function () { require([], function () { //绑定data-toggle=addresspicker属性点击事件 + console.log('111'); + $(document).on('click', "[data-toggle='addresspicker']", function () { var that = this; var callback = $(that).data('callback'); @@ -10,9 +12,9 @@ define([], function () { var zoom_id = $(that).data("zoom-id") ? $(that).data("zoom-id") : ""; var lat = lat_id ? $("#" + lat_id).val() : ''; var lng = lng_id ? $("#" + lng_id).val() : ''; - var city_code = $("#c-city").val(); + var city_code = $("#area_id").val(); var zoom = zoom_id ? $("#" + zoom_id).val() : ''; - var url = "/addons/address/index/select?a=1"; + var url = "/addons/address/index/select?1=1"; url += (lat && lng) ? 'lat=' + lat + '&lng=' + lng + (input_id ? "&address=" + $("#" + input_id).val() : "") +(zoom ? "&zoom=" + zoom : "") : '' @@ -20,7 +22,7 @@ define([], function () { if (city_code){ url += city_code ? "&city_code=" + city_code : ""; } - // console.log(url); + console.log(url); Fast.api.open(url, '位置选择', { callback: function (res) { input_id && $("#" + input_id).val(res.address).trigger("change"); diff --git a/public/assets/js/backend/statistics/item.js b/public/assets/js/backend/statistics/item.js new file mode 100644 index 0000000..409a941 --- /dev/null +++ b/public/assets/js/backend/statistics/item.js @@ -0,0 +1,194 @@ +define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts', 'echarts-theme', 'template','addtabs','moment'], function ($, undefined, Backend, Table, Form,Echarts,undefined,Template,Datatable,Moment) { + + var Controller = { + + index: function () { + //绑定事件 + $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + var $targetPanel = $($(this).attr("href")); + var tabVal = $(this).data('val'); + + if (tabVal === 'second') { + // 当切换到“统计列表”时,自动刷新表格 + //$targetPanel.find(".btn-refresh").trigger("click"); + // 初始化表格参数配置 + Table.api.init(); + // 表格2 + var table2 = $("#table2"); + table2.bootstrapTable({ + url: 'statistics/item/list' + location.search, + toolbar: '#toolbar1', + sortName: 'id', + search: false, + commonSearch:true, + visible: false, + showToggle: false, + showColumns: false, + showExport: true, + searchFormVisible:true, + columns: [ + [ + //{field: 'id', title: __('Id')}, + {field: 'id', title: __('ID'),visible:true,operate: false}, + {field: 'admin_user', title: __('派单员'),operate: "LIKE"}, + {field: 'count_num', title: __('总订单数'),operate: false}, + {field: 'finish_num', title: __('完单数'),operate: false}, + {field: 'total', title: __('成效额(¥)'), operate: false}, + {field: 'performance', title: __('总业绩(¥)'), operate: false}, + {field: 'cost_total', title: __('总成本(¥)'), operate: false}, + {field: 'refund_total', title: __('退款金额(¥)'), operate: false}, + {field: 'refund_count', title: __('退款单数'), operate: false}, + + {field: 'performance_rate', title: __('利润率(%)'), operate: false}, + {field: 'trans_rate', title: __('转化率(%)'), operate: false}, + {field: 'cash_value', title: __('变现值'), operate: false}, + {field: 'performance_avg', title: __('客单利润(¥)'), operate: false}, + {field: 'total_avg', title: __('客单价(¥)'), operate: false}, + + {field: 'avg_time_diff', title: __('派单时效(小时)'), operate: false}, + + //{field: 'admin_user', title: __('派单员'),operate: "LIKE",visible:false}, + //{field: 'city_name', title: __('城市'),operate: "LIKE",visible:false}, + //{field: 'city_name', title: __('城市'),operate: "LIKE",visible:false}, + {field: 'time_by', title: __('时间维度'), visible:false,searchList: {"1":__('录单时间'),"2":__('派单时间')},defaultValue:1, formatter: Table.api.formatter.normal}, + {field: 'daterange', title: __('时间筛选'), addclass:'datetimerange', + autocomplete:false, + operate: "RANGE", + datetimeFormat: "YYYY-MM-DD", + //defaultValue:today()+' - '+today(), + data:'autocomplete="off" data-local={"format":"YYYY-MM-DD"}', + visible:false, + defaultValue: Config.default_daterange + }, + {field: 'operate', title: __('Operate'), table: table2, events: Table.api.events.operate, formatter: Table.api.formatter.operate, + buttons: [ + { + name: 'aftersales', + text:"售后列表", + title:"售后列表", + icon: 'fa fa-list', + url: function(row){ + return 'aftersales/aftersale/index?from=2&man_id='+row.id; + }, + extend: 'data-toggle="tooltip" data-container="body"', + classname: 'btn btn-xs btn-default btn-dialog', + visible:function(row){ + return true; + } + }, + ] + } + ] + ] + }); + // 为表格2绑定事件 + Table.api.bindevent(table2); + } + + }); + + + + // 触发 tab 后发起 ajax 获取图表数据 + $('ul.nav-tabs li.active a[data-toggle="tab"]').on("shown.bs.tab", function () { + getChartData(); + }); + + + function getChartData(){ + // 获取单选框选中的值 + var timeBy = $('input[name="filter[time_by]"]:checked').val(); + + // 获取日期范围值 + var daterange = $('#daterange').val(); + + // 构建查询参数 + var params = { + 'time_by': timeBy, + 'daterange': daterange + }; + + $.ajax({ + url: "statistics/item/chartData", // + type: "POST", + dataType: "json", + data:params, + success: function (response) { + + }, + error: function () { + console.error("图表数据加载失败"); + } + }); + } + + + + + var form = $("#chart-filter"); + 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')]; + ranges[__('今年')] = [Moment().startOf('year'), Moment().endOf('year')]; + var options = { + timePicker: false, + autoUpdateInput: false, + timePickerSeconds: true, + timePicker24Hour: true, + autoApply: true, + locale: { + format: 'YYYY-MM-DD', + customRangeLabel: __("Custom Range"), + applyLabel: __("Apply"), + cancelLabel: __("Clear"), + }, + ranges: ranges, + }; + var callback = function (start, end) { + $(this.element).val(start.format(options.locale.format) + " - " + end.format(options.locale.format)); + }; + require(['bootstrap-daterangepicker'], function () { + $(".datetimerange", form).each(function () { + $(this).on('apply.daterangepicker', function (ev, picker) { + callback.call(picker, picker.startDate, picker.endDate); + var label = picker.chosenLabel; + $(picker.element).data('label', label).trigger("change"); + }); + $(this).on('cancel.daterangepicker', function (ev, picker) { + $(this).val(''); + }); + $(this).daterangepicker($.extend({}, options), callback); + }); + }); + + // 手动触发一次激活 tab 的 shown.bs.tab + getChartData(); + // 绑定查询按钮的点击事件 + $('#filter-btn').on('click', function() { + getChartData(); + }); + }, + + add: function () { + Controller.api.bindevent(); + }, + edit: function () { + Controller.api.bindevent(); + }, + + aftersales: function () { + Controller.api.bindevent(); + }, + + api: { + bindevent: function () { + Form.api.bindevent($("form[role=form]")); + } + } + }; + return Controller; +});