sth
This commit is contained in:
parent
416c20735f
commit
c3ef078c36
431
application/admin/controller/statistics/Kpidispatcher.php
Normal file
431
application/admin/controller/statistics/Kpidispatcher.php
Normal file
|
|
@ -0,0 +1,431 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\statistics;
|
||||
|
||||
use app\admin\model\Admin;
|
||||
use app\admin\model\kpi\Template;
|
||||
use app\admin\model\Kpiorder;
|
||||
use app\admin\model\Order;
|
||||
use app\common\controller\Backend;
|
||||
use think\Db;
|
||||
use think\exception\DbException;
|
||||
use think\response\Json;
|
||||
use app\admin\model\kpi\Item as KpiItem;
|
||||
use function Symfony\Component\Clock\now;
|
||||
|
||||
/**
|
||||
* 订单列管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Kpidispatcher extends Backend
|
||||
{
|
||||
|
||||
/**
|
||||
* Kpiorder模型对象
|
||||
* @var Order
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
|
||||
const GROUP_ID = 6; //派单员ID
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = new Order();
|
||||
|
||||
$template = Template::where('group_id',self::GROUP_ID)->with(['kpiitem'])->find()->toArray();
|
||||
|
||||
$itemUnits = [];
|
||||
foreach ($template['kpiitem'] as $item)
|
||||
{
|
||||
$itemRate[$item['attr']] = $item['pivot']['rate'];
|
||||
|
||||
$itemUnits[$item['attr']] = $item['unit'];
|
||||
}
|
||||
|
||||
$item_title = [];
|
||||
|
||||
$item_title['ZHL'] = [
|
||||
'title' => '转化率'.(!empty($itemRate['ZHL'])?'(权重'.$itemRate['ZHL'].'%)':''),
|
||||
'isshow' => !empty($itemRate['ZHL']),
|
||||
'unit' => '%'
|
||||
];
|
||||
$item_title['LRL'] = [
|
||||
'title' => '利润率'.(!empty($itemRate['LRL'])?'(权重'.$itemRate['LRL'].'%)':''),
|
||||
'isshow' =>!empty($itemRate['LRL']),
|
||||
];
|
||||
$item_title['PDSX'] = [
|
||||
'title' => '派单时效'.(!empty($itemRate['PDSX'])?'(权重'.$itemRate['PDSX'].'%)':''),
|
||||
'isshow' =>!empty($itemRate['PDSX']),
|
||||
];
|
||||
$item_title['PCCGL'] = [
|
||||
'title' => '派出成功率'.(!empty($itemRate['PCCGL'])?'(权重'.$itemRate['PCCGL'].'%)':''),
|
||||
'isshow' =>!empty($itemRate['PCCGL']),
|
||||
];
|
||||
$item_title['GDJSL'] = [
|
||||
'title' => '跟单及时率'.(!empty($itemRate['GDJSL'])?'(权重'.$itemRate['GDJSL'].'%)':''),
|
||||
'isshow' =>!empty($itemRate['GDJSL']),
|
||||
];
|
||||
$item_title['LRSFS'] = [
|
||||
'title' => '录入师傅数'.(!empty($itemRate['LRSFS'])?'(权重'.$itemRate['LRSFS'].'%)':''),
|
||||
'isshow' =>!empty($itemRate['LRSFS']),
|
||||
];
|
||||
/*$item_title['LRL'] = '利润率'.(!empty($itemRate['LRL'])?$itemRate['LRL'].'%':'');
|
||||
$item_title['PDSX'] = '派单时效'.(!empty($itemRate['PDSX'])?$itemRate['LRL'].'%':'');
|
||||
$item_title['PCCGL'] = '派出成功率'.(!empty($itemRate['PCCGL'])?$itemRate['LRL'].'%':'');
|
||||
$item_title['GDJSL'] = '跟单及时率'.(!empty($itemRate['GDJSL'])?$itemRate['LRL'].'%':'');
|
||||
$item_title['LRSFS'] = '录入师傅数'.(!empty($itemRate['LRSFS'])?$itemRate['LRL'].'%':'');*/
|
||||
|
||||
$this->assignconfig('item_titles',$item_title);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*
|
||||
* @return string|Json
|
||||
* @throws \think\Exception
|
||||
* @throws DbException
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//$this->chart();
|
||||
//$today = now()->sub('')->format('Y-m-d' );
|
||||
$month = now()->format('Y-m');
|
||||
|
||||
|
||||
//设置过滤方法
|
||||
$this->request->filter(['strip_tags', 'trim']);
|
||||
if (false === $this->request->isAjax()) {
|
||||
$this->assignconfig('month',$month);
|
||||
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
$filter = $this->request->param('filter');
|
||||
$filter = json_decode($filter,true);
|
||||
|
||||
if(empty($filter['monthrange'])){
|
||||
/*$arr = explode(' - ',$filter['daterange']);
|
||||
if(trim($arr[0])){
|
||||
$filter['start_time'] = trim($arr[0]);
|
||||
}
|
||||
if(trim($arr[1])){
|
||||
$filter['end_time'] = trim($arr[1]);
|
||||
}*/
|
||||
|
||||
$filter['monthrange'] = date('Y-m');
|
||||
}
|
||||
$this->getMonthTimeRange($filter);
|
||||
|
||||
$filter['group_id'] = self::GROUP_ID;
|
||||
if(!empty($filter['admin_user'])){
|
||||
$adminIds = Admin::where('username','like','%'.$filter['admin_user'].'%')->column('id');
|
||||
$filter['admin_user_ids'] = $adminIds;
|
||||
}
|
||||
|
||||
$list = $this->chart($filter,false);
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $list->items());
|
||||
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
public function chartData()
|
||||
{
|
||||
$filter = $this->request->post();
|
||||
|
||||
if(!empty($filter['daterange'])){
|
||||
$arr = explode(' - ',$filter['daterange']);
|
||||
if(trim($arr[0])){
|
||||
$filter['start_time'] = trim($arr[0]);
|
||||
}
|
||||
if(trim($arr[1])){
|
||||
$filter['end_time'] = trim($arr[1]).' 23:59:59';
|
||||
}
|
||||
}
|
||||
|
||||
$data = $this->chart($filter,true);
|
||||
|
||||
|
||||
$newData = [
|
||||
['派单员','总业绩','转化率','利润率','变现值']
|
||||
];
|
||||
foreach ($data as $datum){
|
||||
$newData[] = [
|
||||
$datum['admin_user'],
|
||||
$datum['performance'],
|
||||
$datum['trans_rate'],
|
||||
$datum['performance_rate'],
|
||||
$datum['cash_value'],
|
||||
];
|
||||
}
|
||||
return $newData;
|
||||
}
|
||||
|
||||
//图表统计
|
||||
public function chart($filter,$getAll=false): \think\Collection|\think\Paginator|bool|array|string|\PDOStatement
|
||||
{
|
||||
$template = Template::where('group_id',self::GROUP_ID)->with(['kpiitem'])->find();
|
||||
if(empty($template) || empty($template->kpiitem)){
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
$kpiItem = [];
|
||||
foreach ($template->kpiitem as $item){
|
||||
$kpiItem[$item->attr] = $item->toArray();
|
||||
}
|
||||
|
||||
$orderValid = implode(',',$this->model->tabStatus(Order::TAB_VALID));
|
||||
|
||||
//"COUNT(CASE WHEN status IN (".$orderValid.") THEN 1 END) AS ing_num",
|
||||
$fields = [
|
||||
'dispatch_admin_id',
|
||||
'worker_num',
|
||||
// 使用 IFNULL 确保结果为 null 时返回 0
|
||||
"IFNULL(COUNT(CASE WHEN status = 60 THEN 1 END), 0) AS finish_num", //完成数
|
||||
"IFNULL(COUNT(CASE WHEN status IN (".$orderValid.") THEN 1 END), 0) AS count_num", //总订单数 (排除取消 和草稿)
|
||||
"IFNULL(SUM(CASE WHEN status = 60 THEN total END), 0) AS total", //成效额
|
||||
"IFNULL(SUM(CASE WHEN status = 60 THEN performance END), 0) AS performance", //业绩
|
||||
"IFNULL(SUM(CASE WHEN status = 60 THEN (cost + material_cost) END), 0) AS cost_total", //总成本
|
||||
"IFNULL(SUM(CASE WHEN status = 60 THEN (refund_amount + worker_refund_amount) END), 0) AS refund_total", //退款总数
|
||||
"IFNULL(COUNT(CASE WHEN refund_amount > 0 OR worker_refund_amount > 0 THEN 1 END), 0) AS refund_count", //退款订单数量
|
||||
"IFNULL(AVG(CASE WHEN status > 10 THEN UNIX_TIMESTAMP(dispatch_time) - UNIX_TIMESTAMP(create_time) END), 0) AS avg_time_diff", //派单时效
|
||||
// "SUM(CASE WHEN status = 60 THEN (field1 + field2) END) AS performance",
|
||||
];
|
||||
|
||||
$builder = $this->model
|
||||
//->where('status',Order::STATUS_FINISHED)
|
||||
->field($fields);
|
||||
//->where('dispatch_admin_id','>',0);
|
||||
|
||||
if(isset($filter['admin_user_ids'])){
|
||||
$builder->whereIn('dispatch_admin_id',$filter['admin_user_ids']);
|
||||
}
|
||||
|
||||
if(!empty($filter['start_time']) && !empty($filter['end_time'])){
|
||||
//$time_by = $filter['time_by'] ??1;
|
||||
/* if($time_by == 1){ //按派单时间
|
||||
$time_field = 'dispatch_time';
|
||||
}else{ //按录单时间
|
||||
$time_field = 'create_time';
|
||||
}*/
|
||||
|
||||
$time_field = 'audit_time';
|
||||
|
||||
$builder->whereBetween($time_field,[$filter['start_time'],$filter['end_time']]);
|
||||
|
||||
}
|
||||
|
||||
$subsql = $this->_subsql($filter);
|
||||
|
||||
$builder->join([$subsql => 'a'], 'a.admin_id = dispatch_admin_id', 'LEFT');
|
||||
|
||||
//城市
|
||||
if(!empty($filter['area_id'])){
|
||||
$builder->where('area_id',$filter['area_id']);
|
||||
}
|
||||
//项目
|
||||
if(!empty($filter['item_id'])){
|
||||
$builder->where('item_id',$filter['item_id']);
|
||||
}
|
||||
|
||||
if($getAll){
|
||||
$data = $builder->group('dispatch_admin_id')->limit(50)->select();
|
||||
}else{
|
||||
$data = $builder->group('dispatch_admin_id')->paginate();
|
||||
}
|
||||
|
||||
$newData = [];
|
||||
|
||||
$max_score = $template->max_score??100;
|
||||
|
||||
if(!empty($data)){
|
||||
foreach ($data as &$datum){
|
||||
//利润率 = 总业绩/总成效额
|
||||
$datum->performance_rate = $this->_calc($datum->performance,$datum->total,4,true);
|
||||
//转化率 = 完单数 / 总订单数
|
||||
$datum->trans_rate = $this->_calc($datum->finish_num,$datum->count_num,4,true);
|
||||
//变现值 = 总业绩 / 总订单数
|
||||
$datum->cash_value = $this->_calc($datum->performance,$datum->count_num,2);
|
||||
//客单利润 = 总利润 / 完单数
|
||||
$datum->performance_avg = $this->_calc($datum->performance,$datum->finish_num,2);
|
||||
//客单价 = 总成效额 / 完单数
|
||||
$datum->total_avg = $this->_calc($datum->total,$datum->finish_num,2);
|
||||
|
||||
if(!empty($datum->dispatch_admin_id)){
|
||||
$datum->admin_user = Admin::where('id',$datum->dispatch_admin_id)->value('nickname')??'系统';
|
||||
}else{
|
||||
$datum->admin_user = '系统';
|
||||
}
|
||||
$datum->avg_time_diff = $this->_calc($datum->avg_time_diff,3600,2);
|
||||
|
||||
$datum->id = $datum->dispatch_admin_id;
|
||||
|
||||
$kpi_total = 0;
|
||||
//kpi
|
||||
//转化率
|
||||
$datum->zhl_score = 0;
|
||||
$datum->zhl_target_value = $kpiItem[KpiItem::ATTR_ZHL]['target_value']??0;
|
||||
$datum->unit = '';
|
||||
if(!empty($kpiItem[KpiItem::ATTR_ZHL])){
|
||||
$datum->zhl_score = $this->_kpi_score($datum->trans_rate,$kpiItem[KpiItem::ATTR_ZHL]);
|
||||
$kpi_total += $datum->zhl_score;
|
||||
//$datum->zhl_unit = $kpiItem[KpiItem::ATTR_ZHL]['unit'];
|
||||
}
|
||||
|
||||
//利润率
|
||||
$datum->lrl_score = 0;
|
||||
$datum->lrl_target_value = $kpiItem[KpiItem::ATTR_LRL]['target_value']??0;
|
||||
if (!empty($kpiItem[KpiItem::ATTR_LRL])) {
|
||||
$datum->lrl_score = $this->_kpi_score($datum->performance_rate, $kpiItem[KpiItem::ATTR_LRL]);
|
||||
$kpi_total += $datum->lrl_score;
|
||||
//$datum->lrl_unit = $kpiItem[KpiItem::ATTR_LRL]['unit'];
|
||||
}
|
||||
|
||||
//派单时效
|
||||
$datum->pdsx_score = 0;
|
||||
$datum->pdsx_target_value = $kpiItem[KpiItem::ATTR_PDSX]['target_value']??0; //秒
|
||||
if (!empty($kpiItem[KpiItem::ATTR_PDSX])) {
|
||||
$datum->pdsx_score = $this->_kpi_score($datum->avg_time_diff, $kpiItem[KpiItem::ATTR_PDSX]);
|
||||
$kpi_total += $datum->pdsx_score;
|
||||
//$datum->pdsx_unit = $kpiItem[KpiItem::ATTR_PDSX]['unit'];
|
||||
}
|
||||
|
||||
//派单成功率
|
||||
$datum->succ_rate = $this->_calc($datum->finish_num,$datum->count_num,4,true);
|
||||
$datum->pccgl_score = 0;
|
||||
$datum->pccgl_target_value = $kpiItem[KpiItem::ATTR_PCCGL]['target_value']??0;
|
||||
if (!empty($kpiItem[KpiItem::ATTR_PCCGL])) {
|
||||
$datum->pccgl_score = $this->_kpi_score($datum->succ_rate, $kpiItem[KpiItem::ATTR_PCCGL]);
|
||||
$kpi_total += $datum->pccgl_score;
|
||||
//$datum->pccgl_unit = $kpiItem[KpiItem::ATTR_PCCGL]['unit'];
|
||||
}
|
||||
|
||||
|
||||
//录单师傅数
|
||||
$datum->lrsfs_score = 0;
|
||||
$datum->lrsfs_target_value = $kpiItem[KpiItem::ATTR_LRSFS]['target_value']??0;
|
||||
$datum->worker_num = $datum->worker_num??0;
|
||||
if (!empty($kpiItem[KpiItem::ATTR_LRSFS])) {
|
||||
$datum->lrsfs_score = $this->_kpi_score($datum->worker_num, $kpiItem[KpiItem::ATTR_LRSFS]);
|
||||
$kpi_total += $datum->lrsfs_score;
|
||||
}
|
||||
|
||||
$datum->kpi_total = bcadd($kpi_total,0,2);
|
||||
|
||||
$datum->kpi_value = $this->_calc($kpi_total,$template->score ?: 1,2);
|
||||
|
||||
if($datum->kpi_value <= 0){
|
||||
$datum->kpi_money = 0;
|
||||
}else{
|
||||
$datum->kpi_money = bcmul($datum->performance,$datum->kpi_value,4);
|
||||
|
||||
if($datum->kpi_money <= 0){
|
||||
$datum->kpi_money = 0;
|
||||
}else{
|
||||
$datum->kpi_money = bcdiv($datum->kpi_money,100,2);
|
||||
}
|
||||
}
|
||||
$newData[] = $datum->toArray();
|
||||
}
|
||||
}
|
||||
if($getAll){
|
||||
return $newData;
|
||||
}else{
|
||||
return $data;
|
||||
}
|
||||
//dump($newData);exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $a
|
||||
* @param $b
|
||||
* @param int $scale
|
||||
* @return int|string
|
||||
*/
|
||||
private function _calc($a, $b, int $scale=4, $is_percent=false): int|string
|
||||
{
|
||||
$a = $a??0;
|
||||
$b = $b??0;
|
||||
|
||||
$val = $b > 0 ? bcdiv($a,$b,$scale) : 0;
|
||||
|
||||
if($is_percent){
|
||||
|
||||
return bcmul($val,100,2);
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
|
||||
private function _kpi_score($num,$item)
|
||||
{
|
||||
//完成值/目标值*单个指标分*权重
|
||||
|
||||
if($item['target_value'] == 0){
|
||||
$item['target_value'] = 1;
|
||||
}
|
||||
$rate = bcdiv($num,$item['target_value'],4);
|
||||
$score = bcmul($item['score'],$rate,4);
|
||||
$score = bcmul($score,$item['pivot']['rate']/100,2);
|
||||
|
||||
if($score<= 0){
|
||||
$score = 0;
|
||||
}
|
||||
|
||||
return $score;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取指定年月的开始和结束时间戳(到秒)
|
||||
* @param string $yearMonth 格式为 "YYYY-MM" 的日期字符串
|
||||
* @return array 包含开始时间戳和结束时间戳的数组
|
||||
*/
|
||||
function getMonthTimeRange(&$filter)
|
||||
{
|
||||
$yearMonth = $filter['monthrange'];
|
||||
// 解析输入的年月字符串
|
||||
list($year, $month) = explode('-', $yearMonth);
|
||||
|
||||
// 获取当月第一天的时间戳(00:00:00)
|
||||
$startTime = strtotime("{$year}-{$month}-01 00:00:00");
|
||||
|
||||
// 获取下个月第一天的时间戳
|
||||
$nextMonth = strtotime("+1 month", $startTime);
|
||||
|
||||
// 当月最后一天的时间戳(23:59:59)
|
||||
$endTime = $nextMonth - 1;
|
||||
|
||||
$filter['start_time'] = date('Y-m-d H:i:s',$startTime);
|
||||
$filter['end_time'] = date('Y-m-d H:i:s',$endTime);
|
||||
|
||||
return $filter;
|
||||
}
|
||||
|
||||
|
||||
public function _subsql($filter){
|
||||
|
||||
$builder = new \app\admin\model\Worker();
|
||||
|
||||
$fields = [
|
||||
'admin_id',
|
||||
"count(*) as worker_num", //完成数
|
||||
];
|
||||
|
||||
$builder->field($fields)->whereBetween('create_time',[$filter['start_time'],$filter['end_time']]);
|
||||
|
||||
$builder->group('admin_id');
|
||||
|
||||
return $builder->buildSql();
|
||||
}
|
||||
|
||||
}
|
||||
71
application/admin/lang/zh-cn/statistics/kpidispatcher.php
Normal file
71
application/admin/lang/zh-cn/statistics/kpidispatcher.php
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'Id' => 'ID',
|
||||
'Order_no' => '订单号',
|
||||
'Customer' => '客户姓名',
|
||||
'Tel' => '客户电话',
|
||||
'Status' => '订单状态',
|
||||
'Status 0' => '草稿',
|
||||
'Set status to 0' => '设为草稿',
|
||||
'Status 10' => '未派单',
|
||||
'Set status to 10' => '设为未派单',
|
||||
'Status 20' => '已派单',
|
||||
'Set status to 20' => '设为已派单',
|
||||
'Status 30' => '进行中',
|
||||
'Set status to 30' => '设为进行中',
|
||||
'Status 40' => '待验收',
|
||||
'Set status to 40' => '设为待验收',
|
||||
'Status 50' => '待财务审核',
|
||||
'Set status to 50' => '设为待财务审核',
|
||||
'Status 60' => '已完成',
|
||||
'Set status to 60' => '设为已完成',
|
||||
'Status -10' => '取消',
|
||||
'Set status to -10' => '设为取消',
|
||||
'Area_id' => '地域',
|
||||
'Address' => '详细地址',
|
||||
'Lng' => '经度',
|
||||
'Lat' => '纬度',
|
||||
'Work_tel_id' => '工作机',
|
||||
'Source_shop' => '来源店铺',
|
||||
'Source' => '订单来源',
|
||||
'Source_uid' => '来源UID',
|
||||
'Item_id' => '服务ID',
|
||||
'Item_title' => '服务名称',
|
||||
'Detail' => '订单详情',
|
||||
'Remark' => '订单备注',
|
||||
'Images' => '图片',
|
||||
'Plan_time' => '客户预约时间',
|
||||
'Admin_id' => '录单员ID',
|
||||
'Coupon_id' => '优惠码id',
|
||||
'Total' => '总收款',
|
||||
'Online_amount' => '线上收款',
|
||||
'Offline_amount' => '线下尾款',
|
||||
'Online_amount_last' => '线上尾款',
|
||||
'Offline_amount_type' => '线下尾款类型',
|
||||
'Offline_amount_type 1' => '师傅收',
|
||||
'Offline_amount_type 2' => '公司收',
|
||||
'Discount_amount' => '优惠抵扣',
|
||||
'Refund_amount' => '公司款额',
|
||||
'Worker_refund_amount' => '师傅退款',
|
||||
'Real_amount' => '实际收款',
|
||||
'Cost' => '师傅成本',
|
||||
'Material_cost' => '材料成本',
|
||||
'Performance' => '预计利润',
|
||||
'Cancel_reason_id' => '取消原因',
|
||||
'Cancel_detail' => '取消详情',
|
||||
'Audit_remark' => '审核备注',
|
||||
'Audit_admin_id' => '审核员',
|
||||
'Create_time' => '录单时间',
|
||||
'Update_time' => '更新时间',
|
||||
'Delete_time' => '删除时间',
|
||||
'Dispatch_type' => '1 手动派单 2自动排单',
|
||||
'Receive_type' => '1 定金 2全款',
|
||||
'Revisit_id' => '回访ID',
|
||||
'Dispatch_admin_id' => '派单员',
|
||||
'Dispatch_admin_user' => '派单员',
|
||||
'Dispatch_time' => '派单时间',
|
||||
'Aftersale_id' => '售后ID',
|
||||
'Amount_images' => '收款凭据',
|
||||
'Worker_id' => '师傅ID'
|
||||
];
|
||||
63
application/admin/model/Kpiorder.php
Normal file
63
application/admin/model/Kpiorder.php
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
|
||||
class Kpiorder extends Model
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'order';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = false;
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = false;
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'status_text',
|
||||
'offline_amount_type_text'
|
||||
];
|
||||
|
||||
|
||||
|
||||
public function getStatusList()
|
||||
{
|
||||
return ['0' => __('Status 0'), '10' => __('Status 10'), '20' => __('Status 20'), '30' => __('Status 30'), '40' => __('Status 40'), '50' => __('Status 50'), '60' => __('Status 60'), '-10' => __('Status -10')];
|
||||
}
|
||||
|
||||
public function getOfflineAmountTypeList()
|
||||
{
|
||||
return ['1' => __('Offline_amount_type 1'), '2' => __('Offline_amount_type 2')];
|
||||
}
|
||||
|
||||
|
||||
public function getStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['status'] ?? '');
|
||||
$list = $this->getStatusList();
|
||||
return $list[$value] ?? '';
|
||||
}
|
||||
|
||||
|
||||
public function getOfflineAmountTypeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['offline_amount_type'] ?? '');
|
||||
$list = $this->getOfflineAmountTypeList();
|
||||
return $list[$value] ?? '';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
27
application/admin/validate/Kpiorder.php
Normal file
27
application/admin/validate/Kpiorder.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Kpiorder extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected $rule = [
|
||||
];
|
||||
/**
|
||||
* 提示消息
|
||||
*/
|
||||
protected $message = [
|
||||
];
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected $scene = [
|
||||
'add' => [],
|
||||
'edit' => [],
|
||||
];
|
||||
|
||||
}
|
||||
319
application/admin/view/statistics/kpidispatcher/add.html
Normal file
319
application/admin/view/statistics/kpidispatcher/add.html
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Order_no')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-order_no" data-rule="required" class="form-control" name="row[order_no]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Customer')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-customer" class="form-control" name="row[customer]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Tel')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-tel" data-rule="required" class="form-control" name="row[tel]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Area_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-area_id" data-rule="required" data-source="area/index" class="form-control selectpage" name="row[area_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Address')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-address" data-rule="required" class="form-control" name="row[address]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Lng')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-lng" class="form-control" step="0.000001" name="row[lng]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Lat')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-lat" class="form-control" step="0.000001" name="row[lat]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Work_tel_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-work_tel_id" data-rule="required" data-source="work/tel/index" class="form-control selectpage" name="row[work_tel_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Source_shop')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-source_shop" data-rule="required" class="form-control" name="row[source_shop]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Source')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-source" data-rule="required" class="form-control" name="row[source]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Source_uid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-source_uid" class="form-control" name="row[source_uid]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Item_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-item_id" data-rule="required" data-source="item/index" class="form-control selectpage" name="row[item_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Item_title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-item_title" data-rule="required" class="form-control" name="row[item_title]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Detail')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-detail" class="form-control" name="row[detail]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-remark" class="form-control" name="row[remark]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-images" class="form-control" size="50" name="row[images]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-images" class="btn btn-danger faupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-images"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-images"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Plan_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-plan_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[plan_time]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Coupon_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-coupon_id" data-rule="required" data-source="coupon/index" class="form-control selectpage" name="row[coupon_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Total')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-total" data-rule="required" class="form-control" step="0.01" name="row[total]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Online_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-online_amount" data-rule="required" class="form-control" step="0.01" name="row[online_amount]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Offline_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-offline_amount" data-rule="required" class="form-control" step="0.01" name="row[offline_amount]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Online_amount_last')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-online_amount_last" data-rule="required" class="form-control" step="0.01" name="row[online_amount_last]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Offline_amount_type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-offline_amount_type" data-rule="required" class="form-control selectpicker" name="row[offline_amount_type]">
|
||||
{foreach name="offlineAmountTypeList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Discount_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-discount_amount" data-rule="required" class="form-control" step="0.01" name="row[discount_amount]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Refund_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-refund_amount" data-rule="required" class="form-control" step="0.01" name="row[refund_amount]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_refund_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-worker_refund_amount" data-rule="required" class="form-control" step="0.01" name="row[worker_refund_amount]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Real_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-real_amount" data-rule="required" class="form-control" step="0.01" name="row[real_amount]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Cost')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-cost" data-rule="required" class="form-control" step="0.01" name="row[cost]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Material_cost')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-material_cost" data-rule="required" class="form-control" step="0.01" name="row[material_cost]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Performance')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-performance" data-rule="required" class="form-control" step="0.01" name="row[performance]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Cancel_reason_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-cancel_reason_id" data-rule="required" data-source="cancel/reason/index" class="form-control selectpage" name="row[cancel_reason_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Cancel_detail')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-cancel_detail" class="form-control" name="row[cancel_detail]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Audit_remark')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-audit_remark" class="form-control" name="row[audit_remark]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Audit_admin_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-audit_admin_id" data-rule="required" data-source="audit/admin/index" class="form-control selectpage" name="row[audit_admin_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Delete_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-delete_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[delete_time]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_type" class="form-control" name="row[dispatch_type]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Receive_type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-receive_type" class="form-control" name="row[receive_type]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Revisit_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-revisit_id" data-rule="required" data-source="revisit/index" class="form-control selectpage" name="row[revisit_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_admin_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_admin_id" data-rule="required" data-source="dispatch/admin/index" class="form-control selectpage" name="row[dispatch_admin_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_admin_user')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_admin_user" class="form-control" name="row[dispatch_admin_user]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[dispatch_time]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Aftersale_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-aftersale_id" data-rule="required" data-source="aftersale/index" class="form-control selectpage" name="row[aftersale_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Amount_images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-amount_images" class="form-control" size="50" name="row[amount_images]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-amount_images" class="btn btn-danger faupload" data-input-id="c-amount_images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-amount_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-amount_images" class="btn btn-primary fachoose" data-input-id="c-amount_images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-amount_images"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-amount_images"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-worker_id" data-rule="required" data-source="worker/index" class="form-control selectpage" name="row[worker_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
319
application/admin/view/statistics/kpidispatcher/edit.html
Normal file
319
application/admin/view/statistics/kpidispatcher/edit.html
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Order_no')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-order_no" data-rule="required" class="form-control" name="row[order_no]" type="text" value="{$row.order_no|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Customer')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-customer" class="form-control" name="row[customer]" type="text" value="{$row.customer|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Tel')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-tel" data-rule="required" class="form-control" name="row[tel]" type="text" value="{$row.tel|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Area_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-area_id" data-rule="required" data-source="area/index" class="form-control selectpage" name="row[area_id]" type="text" value="{$row.area_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Address')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-address" data-rule="required" class="form-control" name="row[address]" type="text" value="{$row.address|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Lng')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-lng" class="form-control" step="0.000001" name="row[lng]" type="number" value="{$row.lng|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Lat')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-lat" class="form-control" step="0.000001" name="row[lat]" type="number" value="{$row.lat|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Work_tel_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-work_tel_id" data-rule="required" data-source="work/tel/index" class="form-control selectpage" name="row[work_tel_id]" type="text" value="{$row.work_tel_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Source_shop')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-source_shop" data-rule="required" class="form-control" name="row[source_shop]" type="text" value="{$row.source_shop|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Source')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-source" data-rule="required" class="form-control" name="row[source]" type="number" value="{$row.source|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Source_uid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-source_uid" class="form-control" name="row[source_uid]" type="text" value="{$row.source_uid|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Item_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-item_id" data-rule="required" data-source="item/index" class="form-control selectpage" name="row[item_id]" type="text" value="{$row.item_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Item_title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-item_title" data-rule="required" class="form-control" name="row[item_title]" type="text" value="{$row.item_title|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Detail')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-detail" class="form-control" name="row[detail]" type="text" value="{$row.detail|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-images" class="form-control" size="50" name="row[images]" type="text" value="{$row.images|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-images" class="btn btn-danger faupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-images"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-images"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Plan_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-plan_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[plan_time]" type="text" value="{$row.plan_time}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Coupon_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-coupon_id" data-rule="required" data-source="coupon/index" class="form-control selectpage" name="row[coupon_id]" type="text" value="{$row.coupon_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Total')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-total" data-rule="required" class="form-control" step="0.01" name="row[total]" type="number" value="{$row.total|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Online_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-online_amount" data-rule="required" class="form-control" step="0.01" name="row[online_amount]" type="number" value="{$row.online_amount|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Offline_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-offline_amount" data-rule="required" class="form-control" step="0.01" name="row[offline_amount]" type="number" value="{$row.offline_amount|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Online_amount_last')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-online_amount_last" data-rule="required" class="form-control" step="0.01" name="row[online_amount_last]" type="number" value="{$row.online_amount_last|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Offline_amount_type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-offline_amount_type" data-rule="required" class="form-control selectpicker" name="row[offline_amount_type]">
|
||||
{foreach name="offlineAmountTypeList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.offline_amount_type"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Discount_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-discount_amount" data-rule="required" class="form-control" step="0.01" name="row[discount_amount]" type="number" value="{$row.discount_amount|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Refund_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-refund_amount" data-rule="required" class="form-control" step="0.01" name="row[refund_amount]" type="number" value="{$row.refund_amount|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_refund_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-worker_refund_amount" data-rule="required" class="form-control" step="0.01" name="row[worker_refund_amount]" type="number" value="{$row.worker_refund_amount|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Real_amount')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-real_amount" data-rule="required" class="form-control" step="0.01" name="row[real_amount]" type="number" value="{$row.real_amount|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Cost')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-cost" data-rule="required" class="form-control" step="0.01" name="row[cost]" type="number" value="{$row.cost|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Material_cost')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-material_cost" data-rule="required" class="form-control" step="0.01" name="row[material_cost]" type="number" value="{$row.material_cost|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Performance')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-performance" data-rule="required" class="form-control" step="0.01" name="row[performance]" type="number" value="{$row.performance|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Cancel_reason_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-cancel_reason_id" data-rule="required" data-source="cancel/reason/index" class="form-control selectpage" name="row[cancel_reason_id]" type="text" value="{$row.cancel_reason_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Cancel_detail')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-cancel_detail" class="form-control" name="row[cancel_detail]" type="text" value="{$row.cancel_detail|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Audit_remark')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-audit_remark" class="form-control" name="row[audit_remark]" type="text" value="{$row.audit_remark|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Audit_admin_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-audit_admin_id" data-rule="required" data-source="audit/admin/index" class="form-control selectpage" name="row[audit_admin_id]" type="text" value="{$row.audit_admin_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{$row.create_time}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{$row.update_time}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Delete_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-delete_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[delete_time]" type="text" value="{$row.delete_time}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_type" class="form-control" name="row[dispatch_type]" type="number" value="{$row.dispatch_type|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Receive_type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-receive_type" class="form-control" name="row[receive_type]" type="number" value="{$row.receive_type|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Revisit_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-revisit_id" data-rule="required" data-source="revisit/index" class="form-control selectpage" name="row[revisit_id]" type="text" value="{$row.revisit_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_admin_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_admin_id" data-rule="required" data-source="dispatch/admin/index" class="form-control selectpage" name="row[dispatch_admin_id]" type="text" value="{$row.dispatch_admin_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_admin_user')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_admin_user" class="form-control" name="row[dispatch_admin_user]" type="text" value="{$row.dispatch_admin_user|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Dispatch_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-dispatch_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[dispatch_time]" type="text" value="{$row.dispatch_time}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Aftersale_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-aftersale_id" data-rule="required" data-source="aftersale/index" class="form-control selectpage" name="row[aftersale_id]" type="text" value="{$row.aftersale_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Amount_images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-amount_images" class="form-control" size="50" name="row[amount_images]" type="text" value="{$row.amount_images|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-amount_images" class="btn btn-danger faupload" data-input-id="c-amount_images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-amount_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-amount_images" class="btn btn-primary fachoose" data-input-id="c-amount_images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-amount_images"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-amount_images"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-worker_id" data-rule="required" data-source="worker/index" class="form-control selectpage" name="row[worker_id]" type="text" value="{$row.worker_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
21
application/admin/view/statistics/kpidispatcher/index.html
Normal file
21
application/admin/view/statistics/kpidispatcher/index.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<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="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
|
||||
data-operate-edit="{:$auth->check('statistics/kpidispatcher/edit')}"
|
||||
data-operate-del="{:$auth->check('statistics/kpidispatcher/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
184
public/assets/js/backend/statistics/kpidispatcher.js
Normal file
184
public/assets/js/backend/statistics/kpidispatcher.js
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'statistics/kpidispatcher/index' + location.search,
|
||||
// add_url: 'statistics/kpidispatcher/add',
|
||||
//edit_url: 'statistics/kpidispatcher/edit',
|
||||
// del_url: 'statistics/kpidispatcher/del',
|
||||
//multi_url: 'statistics/kpidispatcher/multi',
|
||||
// import_url: 'statistics/kpidispatcher/import',
|
||||
table: 'order',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
fixedColumns: true,
|
||||
fixedRightNumber: 1,
|
||||
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: 'zhl_score', title: __(Config.item_titles['ZHL']['title']),operate: false,visible:Config.item_titles['ZHL']['isshow'],
|
||||
formatter: function (value,row) {
|
||||
// value 是一个标签数组
|
||||
var htm = '<div>目标值:' + row.zhl_target_value + '%</div><br>';
|
||||
htm += '<div>完成值:' + row.trans_rate + '%</div><br>';
|
||||
htm += '<div>绩效分:' + row.zhl_score+ '</div>';
|
||||
return htm;
|
||||
},
|
||||
align: 'left'
|
||||
},
|
||||
|
||||
|
||||
{field: 'lrl_score', title: __(Config.item_titles['LRL']['title']),operate: false,visible:Config.item_titles['ZHL']['isshow'],
|
||||
formatter: function (value,row) {
|
||||
// value 是一个标签数组
|
||||
var htm = '<div>目标值:' + row.lrl_target_value + '%</div><br>';
|
||||
htm += '<div>完成值:' + row.performance_rate + '%</div><br>';
|
||||
htm += '<div>绩效分:' + row.lrl_score+ '</div>';
|
||||
return htm;
|
||||
},
|
||||
align: 'left'
|
||||
},
|
||||
|
||||
|
||||
{field: 'pdsx_score', title: __(Config.item_titles['PDSX']['title']),operate: false,visible:Config.item_titles['PDSX']['isshow'],
|
||||
formatter: function (value,row) {
|
||||
// value 是一个标签数组
|
||||
var htm = '<div>目标值:' + row.lrl_target_value + '</div><br>';
|
||||
htm += '<div>完成值:' + row.avg_time_diff + '</div><br>';
|
||||
htm += '<div>绩效分:' + row.pdsx_score+ '</div>';
|
||||
return htm;
|
||||
},
|
||||
align: 'left'
|
||||
},
|
||||
|
||||
|
||||
{field: 'pccgl_score', title: __(Config.item_titles['PCCGL']['title']),operate: false,visible:Config.item_titles['PCCGL']['isshow'],
|
||||
formatter: function (value,row) {
|
||||
// value 是一个标签数组
|
||||
var htm = '<div>目标值:' + row.pccgl_target_value + '%</div><br>';
|
||||
htm += '<div>完成值:' + row.succ_rate + '%</div><br>';
|
||||
htm += '<div>绩效分:' + row.pccgl_score+ '</div>';
|
||||
return htm;
|
||||
},
|
||||
align: 'left'
|
||||
},
|
||||
|
||||
{field: 'lrsfs_score', title: __(Config.item_titles['LRSFS']['title']),operate: false,visible:Config.item_titles['LRSFS']['isshow'],
|
||||
formatter: function (value,row) {
|
||||
// value 是一个标签数组
|
||||
var htm = '<div>目标值:' + row.lrsfs_target_value + '</div><br>';
|
||||
htm += '<div>完成值:' + row.worker_num + '</div><br>';
|
||||
htm += '<div>绩效分:' + row.lrsfs_score+ '</div>';
|
||||
return htm;
|
||||
},
|
||||
align: 'left'
|
||||
},
|
||||
|
||||
|
||||
{field: 'kpi_total', title: __('绩效总分'),operate: false},
|
||||
{field: 'kpi_value', title: __('绩效提点'),operate: false,formatter: function (value,row) {
|
||||
return value+'%';
|
||||
}
|
||||
},
|
||||
{field: 'performance', title: __('总业绩(¥)'), operate: false},
|
||||
{field: 'kpi_money', title: __('绩效金额(¥)'),operate: false},
|
||||
|
||||
|
||||
|
||||
// {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: 'monthrange',
|
||||
title: __('月份筛选'),
|
||||
addclass: 'datetimepicker', // 使用日期选择器类
|
||||
autocomplete: false,
|
||||
operate: "=",
|
||||
datetimeFormat: "YYYY-MM",
|
||||
data: 'autocomplete="off" data-date-format="YYYY-MM" data-min-view="year" data-start-view="year"',
|
||||
visible: false,
|
||||
defaultValue: Config.month,
|
||||
formatter: function(value, row, index) {
|
||||
// 格式化显示值
|
||||
return value ? moment(value).format('YYYY-MM') : '';
|
||||
},
|
||||
callback: function(input) {
|
||||
// 初始化月份选择器
|
||||
input.datetimepicker({
|
||||
format: 'YYYY-MM',
|
||||
minView: 'year',
|
||||
startView: 'year',
|
||||
autoclose: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user