This commit is contained in:
xman 2025-03-03 10:25:35 +08:00
parent f9822fc344
commit e88a74138b
8 changed files with 791 additions and 0 deletions

View File

@ -0,0 +1,75 @@
<?php
namespace app\admin\controller\aftersales;
use app\common\controller\Backend;
/**
* 售后列管理
*
* @icon fa fa-circle-o
*/
class Aftersale extends Backend
{
/**
* Aftersale模型对象
* @var \app\admin\model\Aftersale
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\Aftersale;
$this->view->assign("statusList", $this->model->getStatusList());
$this->view->assign("handleTypeList", $this->model->getHandleTypeList());
$this->view->assign("fromList", $this->model->getFromList());
$this->view->assign("refundTypeList", $this->model->getRefundTypeList());
$this->view->assign("workerRefundEntryList", $this->model->getWorkerRefundEntryList());
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 查看
*/
public function index()
{
//当前是否为关联查询
$this->relationSearch = true;
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = $this->model
->with(['order'])
->where($where)
->order($sort, $order)
->paginate($limit);
foreach ($list as $row) {
}
$result = array("total" => $list->total(), "rows" => $list->items());
return json($result);
}
return $this->view->fetch();
}
}

View File

@ -0,0 +1,98 @@
<?php
return [
'Id' => 'ID',
'Order_id' => '订单ID',
'Status' => '状态',
'Status 1' => '售后中',
'Set status to 1' => '设为售后中',
'Status 2' => '已办结',
'Set status to 2' => '设为已办结',
'Status 3' => '已退款',
'Set status to 3' => '设为已退款',
'Status -1' => '已作废',
'Set status to -1' => '设为已作废',
'Handle_type' => '办结类型',
'Handle_type 1' => '退款',
'Handle_type 2' => '返修',
'Handle_type 3' => '客户无理取闹',
'Handle_type 4' => '其它',
'From' => '责任方',
'From 1' => '师傅',
'From 2' => '顾客',
'From 3' => '平台',
'Refund_amount' => '总退款金额',
'Company_refund_amount' => '公司退款金额',
'Worker_refund_amount' => '师傅退款金额',
'Refund_type' => '退款方式',
'Refund_type 1' => '微信支付',
'Refund_type 2' => '平台退款',
'Worker_refund_entry' => '师傅退款入账',
'Worker_refund_entry 0' => '否',
'Worker_refund_entry 1' => '是',
'Refund_time' => '退款时间',
'Customer_appeal' => '客户诉求',
'Customer_qrcode' => '客户二维码',
'Images' => '退款凭证',
'Remark' => '情况说明',
'Create_time' => '创建时间',
'Update_time' => '编辑时间',
'Company_refund_time' => '公司退款时间',
'Worker_refund_time' => '师傅退款时间',
'Admin_id' => '创建人',
'Admin_user' => '创建人',
'Handle_admin_id' => '处理人',
'Handle_admin_user' => '处理人',
'Star' => '评分',
'Order.id' => 'ID',
'Order.order_no' => '订单号',
'Order.customer' => '客户姓名',
'Order.tel' => '客户电话',
'Order.status' => '订单状态',
'Order.status 10' => '未派单',
'Order.status 20' => '已派单',
'Order.status 30' => '已接单',
'Order.status 40' => '处理中',
'Order.status 50' => '已完成',
'Order.status -10' => '取消',
'Order.status -20' => '作废',
'Order.status -30' => '已拒接',
'Order.area_id' => '地域',
'Order.address' => '详细地址',
'Order.work_tel_id' => '工作机',
'Order.worker_id' => '师傅ID',
'Order.worker_name' => '师傅姓名',
'Order.worker_tel' => '师傅手机',
'Order.source' => '订单来源',
'Order.source_uid' => '来源UID',
'Order.service_id' => '服务ID',
'Order.service_title' => '服务名称',
'Order.detail' => '订单详情',
'Order.remark' => '订单备注',
'Order.images' => '图片',
'Order.collect' => '是否收藏',
'Order.collect 0' => '否',
'Order.collect 1' => '是',
'Order.collect_remark' => '收藏备注',
'Order.enter_admin_id' => '录单员ID',
'Order.dispatch_admin_id' => '派单员ID',
'Order.dispatch_type' => '派单方式',
'Order.dispatch_type 10' => '线上手动',
'Order.dispatch_type 11' => '线上自动',
'Order.dispatch_type 20' => '线下',
'Order.total' => '总收款',
'Order.cost' => '成本',
'Order.performance' => '绩效',
'Order.sb_amount' => '垫付',
'Order.real_amount' => '实付',
'Order.cancel_reason_id' => '取消原因',
'Order.cancel_detail' => '取消详情',
'Order.abolish_reason_id' => '作废原因',
'Order.abolish_detail' => '作废详情',
'Order.create_time' => '录单时间',
'Order.update_time' => '更新时间',
'Order.payment_time' => '付款时间',
'Order.finishe_time' => '完成时间',
'Order.dispatch_time' => '派单时间',
'Order.delete_time' => '删除时间'
];

View File

@ -0,0 +1,109 @@
<?php
namespace app\admin\model;
use think\Model;
class Aftersale extends Model
{
// 表名
protected $name = 'aftersale';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'datetime';
protected $dateFormat = 'Y-m-d H:i:s';
// 定义时间戳字段名
protected $createTime = 'create_time';
protected $updateTime = 'update_time';
protected $deleteTime = false;
// 追加属性
protected $append = [
'status_text',
'handle_type_text',
'from_text',
'refund_type_text',
'worker_refund_entry_text'
];
public function getStatusList()
{
return ['1' => __('Status 1'), '2' => __('Status 2'), '3' => __('Status 3'), '-1' => __('Status -1')];
}
public function getHandleTypeList()
{
return ['1' => __('Handle_type 1'), '2' => __('Handle_type 2'), '3' => __('Handle_type 3'), '4' => __('Handle_type 4')];
}
public function getFromList()
{
return ['1' => __('From 1'), '2' => __('From 2'), '3' => __('From 3')];
}
public function getRefundTypeList()
{
return ['1' => __('Refund_type 1'), '2' => __('Refund_type 2')];
}
public function getWorkerRefundEntryList()
{
return ['0' => __('Worker_refund_entry 0'), '1' => __('Worker_refund_entry 1')];
}
public function getStatusTextAttr($value, $data)
{
$value = $value ?: ($data['status'] ?? '');
$list = $this->getStatusList();
return $list[$value] ?? '';
}
public function getHandleTypeTextAttr($value, $data)
{
$value = $value ?: ($data['handle_type'] ?? '');
$list = $this->getHandleTypeList();
return $list[$value] ?? '';
}
public function getFromTextAttr($value, $data)
{
$value = $value ?: ($data['from'] ?? '');
$list = $this->getFromList();
return $list[$value] ?? '';
}
public function getRefundTypeTextAttr($value, $data)
{
$value = $value ?: ($data['refund_type'] ?? '');
$list = $this->getRefundTypeList();
return $list[$value] ?? '';
}
public function getWorkerRefundEntryTextAttr($value, $data)
{
$value = $value ?: ($data['worker_refund_entry'] ?? '');
$list = $this->getWorkerRefundEntryList();
return $list[$value] ?? '';
}
public function order()
{
return $this->belongsTo('Order', 'order_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Aftersale extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -0,0 +1,179 @@
<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_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-order_id" data-rule="required" data-source="order/index" class="form-control selectpage" name="row[order_id]" type="text" value="">
</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="1"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Handle_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-handle_type" data-rule="required" class="form-control selectpicker" name="row[handle_type]">
{foreach name="handleTypeList" 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">{:__('From')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-from" data-rule="required" class="form-control selectpicker" name="row[from]">
{foreach name="fromList" 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">{:__('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">{:__('Company_refund_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-company_refund_amount" data-rule="required" class="form-control" step="0.01" name="row[company_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">{:__('Refund_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-refund_type" data-rule="required" class="form-control selectpicker" name="row[refund_type]">
{foreach name="refundTypeList" item="vo"}
<option value="{$key}" {in name="key" value="1"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_refund_entry')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-worker_refund_entry" data-rule="required" class="form-control selectpicker" name="row[worker_refund_entry]">
{foreach name="workerRefundEntryList" 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">{:__('Refund_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-refund_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[refund_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">{:__('Customer_appeal')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-customer_appeal" data-rule="required" class="form-control" name="row[customer_appeal]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Customer_qrcode')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-customer_qrcode" class="form-control" name="row[customer_qrcode]" 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">{:__('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">{:__('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">{:__('Company_refund_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-company_refund_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[company_refund_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">{:__('Worker_refund_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-worker_refund_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[worker_refund_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">{:__('Admin_user')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-admin_user" data-rule="required" class="form-control" name="row[admin_user]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Handle_admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-handle_admin_id" data-rule="required" data-source="handle/admin/index" class="form-control selectpage" name="row[handle_admin_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Handle_admin_user')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-handle_admin_user" data-rule="required" class="form-control" name="row[handle_admin_user]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Star')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-star" data-rule="required" class="form-control" name="row[star]" type="number" value="0">
</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,179 @@
<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_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-order_id" data-rule="required" data-source="order/index" class="form-control selectpage" name="row[order_id]" type="text" value="{$row.order_id|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">{:__('Handle_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-handle_type" data-rule="required" class="form-control selectpicker" name="row[handle_type]">
{foreach name="handleTypeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.handle_type"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('From')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-from" data-rule="required" class="form-control selectpicker" name="row[from]">
{foreach name="fromList" item="vo"}
<option value="{$key}" {in name="key" value="$row.from"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</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">{:__('Company_refund_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-company_refund_amount" data-rule="required" class="form-control" step="0.01" name="row[company_refund_amount]" type="number" value="{$row.company_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">{:__('Refund_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-refund_type" data-rule="required" class="form-control selectpicker" name="row[refund_type]">
{foreach name="refundTypeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.refund_type"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_refund_entry')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-worker_refund_entry" data-rule="required" class="form-control selectpicker" name="row[worker_refund_entry]">
{foreach name="workerRefundEntryList" item="vo"}
<option value="{$key}" {in name="key" value="$row.worker_refund_entry"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Refund_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-refund_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[refund_time]" type="text" value="{$row.refund_time}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Customer_appeal')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-customer_appeal" data-rule="required" class="form-control" name="row[customer_appeal]" type="text" value="{$row.customer_appeal|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Customer_qrcode')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-customer_qrcode" class="form-control" name="row[customer_qrcode]" type="text" value="{$row.customer_qrcode|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">{:__('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">{:__('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">{:__('Company_refund_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-company_refund_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[company_refund_time]" type="text" value="{$row.company_refund_time}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Worker_refund_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-worker_refund_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[worker_refund_time]" type="text" value="{$row.worker_refund_time}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Admin_user')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-admin_user" data-rule="required" class="form-control" name="row[admin_user]" type="text" value="{$row.admin_user|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Handle_admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-handle_admin_id" data-rule="required" data-source="handle/admin/index" class="form-control selectpage" name="row[handle_admin_id]" type="text" value="{$row.handle_admin_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Handle_admin_user')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-handle_admin_user" data-rule="required" class="form-control" name="row[handle_admin_user]" type="text" value="{$row.handle_admin_user|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Star')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-star" data-rule="required" class="form-control" name="row[star]" type="number" value="{$row.star|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,46 @@
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="status">
<li class="{:$Think.get.status === null ? 'active' : ''}"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li class="{:$Think.get.status === (string)$key ? 'active' : ''}"><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
{/foreach}
</ul>
</div>
<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>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('aftersales/aftersale/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('aftersales/aftersale/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('aftersales/aftersale/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<div class="dropdown btn-group {:$auth->check('aftersales/aftersale/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
{foreach name="statusList" item="vo"}
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:" data-params="status={$key}">{:__('Set status to ' . $key)}</a></li>
{/foreach}
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('aftersales/aftersale/edit')}"
data-operate-del="{:$auth->check('aftersales/aftersale/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,78 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'aftersales/aftersale/index' + location.search,
add_url: 'aftersales/aftersale/add',
edit_url: 'aftersales/aftersale/edit',
del_url: 'aftersales/aftersale/del',
multi_url: 'aftersales/aftersale/multi',
import_url: 'aftersales/aftersale/import',
table: 'aftersale',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
fixedColumns: true,
fixedRightNumber: 1,
columns: [
[
// {checkbox: true},
{field: 'id', title: __('Id')},
// {field: 'order_id', title: __('Order_id')},
{field: 'order.order_no', title: __('Order.order_no'), operate: 'LIKE'},
{field: 'order.customer', title: __('Order.customer'), operate: 'LIKE'},
{field: 'order.tel', title: __('Order.tel'), operate: 'LIKE'},
{field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2'),"3":__('Status 3'),"-1":__('Status -1')}, formatter: Table.api.formatter.status},
{field: 'handle_type', title: __('Handle_type'), searchList: {"1":__('Handle_type 1'),"2":__('Handle_type 2'),"3":__('Handle_type 3'),"4":__('Handle_type 4')}, formatter: Table.api.formatter.normal},
{field: 'from', title: __('From'), searchList: {"1":__('From 1'),"2":__('From 2'),"3":__('From 3')}, formatter: Table.api.formatter.normal},
{field: 'refund_amount', title: __('Refund_amount'), operate:'BETWEEN'},
{field: 'company_refund_amount', title: __('Company_refund_amount'), operate:'BETWEEN'},
{field: 'worker_refund_amount', title: __('Worker_refund_amount'), operate:'BETWEEN'},
{field: 'refund_type', title: __('Refund_type'), searchList: {"1":__('Refund_type 1'),"2":__('Refund_type 2')}, formatter: Table.api.formatter.normal},
{field: 'worker_refund_entry', title: __('Worker_refund_entry'), searchList: {"0":__('Worker_refund_entry 0'),"1":__('Worker_refund_entry 1')}, formatter: Table.api.formatter.normal},
{field: 'refund_time', title: __('Refund_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'customer_appeal', title: __('Customer_appeal'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'customer_qrcode', title: __('Customer_qrcode'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'images', title: __('Images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
{field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'company_refund_time', title: __('Company_refund_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'worker_refund_time', title: __('Worker_refund_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
//{field: 'admin_id', title: __('Admin_id')},
{field: 'admin_user', title: __('Admin_user'), operate: 'LIKE'},
//{field: 'handle_admin_id', title: __('Handle_admin_id')},
{field: 'handle_admin_user', title: __('Handle_admin_user'), operate: 'LIKE'},
{field: 'star', title: __('Star')},
{field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
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;
});