This commit is contained in:
xman 2025-05-19 21:36:57 +08:00
parent 416c20735f
commit c3ef078c36
8 changed files with 1435 additions and 0 deletions

View 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();
}
}

View 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'
];

View 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] ?? '';
}
}

View 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' => [],
];
}

View 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>

View 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>

View 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>

View 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;
});