订单复制

This commit is contained in:
hant 2025-03-01 16:53:47 +08:00
parent a5f08287e6
commit e6df60292a
6 changed files with 513 additions and 294 deletions

View File

@ -52,6 +52,9 @@ class Order extends Backend
}
[$where, $sort, $order, $offset, $limit] = $this->buildparams();
$list = $this->model
->field(['id','order_no','customer','tel','status','area_id','address',
'work_tel_id','worker_id','source','source_uid','service_id','service_title',
'detail','remark','images','create_time','update_time'])
->where($where)
->order($sort, $order)
->paginate($limit);
@ -86,7 +89,8 @@ class Order extends Backend
$params['enter_admin_id'] = $this->auth->id;
$params['status'] = 10;
$params['order_no'] = $this->generateOrderNumber();
$params['create_time'] = date('Y-m-d H:i:s');
$params['update_time'] = date('Y-m-d H:i:s');
$result = $this->model->allowField(true)->save($params);
Db::commit();
@ -100,6 +104,73 @@ class Order extends Backend
$this->success();
}
public function edit($ids = null)
{
if (!$ids) {
if (request()->isPost()){
$ids = input('id');
if (!$ids){
$this->error('缺少订单ID');
}
}else{
$this->error('缺少订单ID');
}
}
// 获取当前ID对应的订单信息
$order = $this->model->get($ids);
if (!$order) {
$this->error('订单不存在');
}
// 判断是否为POST请求进行更新操作
if (request()->isPost()) {
// 获取表单提交的数据
$data = input('post.row/a');
$data['update_time'] = date('Y-m-d H:i:s');
// 更新订单信息
$order->save($data);
// 返回成功信息
$this->success('更新成功', 'index');
}
$area = new \app\admin\model\Area();
$area_name = $area->getNameByCode($order->area_id);
$order->area_name = $area_name;
// 将订单数据传递到视图
$this->assign('row', $order);
// 渲染编辑页面
return $this->fetch();
}
public function copy($ids = null)
{
if (!$ids) {
$this->error('缺少订单ID');
}
// 获取当前ID对应的订单信息
$order = $this->model->get($ids);
if (!$order) {
$this->error('订单不存在');
}
$area = new \app\admin\model\Area();
$area_name = $area->getNameByCode($order->area_id);
$order->area_name = $area_name;
// 将订单数据传递到视图
$this->assign('row', $order);
// 渲染编辑页面
return $this->fetch();
}
function generateOrderNumber($prefix = 'ORD') {
// 获取当前时间戳(精确到毫秒)
$timestamp = microtime(true);

View File

@ -10,6 +10,11 @@ class Area extends Model
// 表名
protected $name = 'areas';
public function getNameByCode($code){
return $this->where('area_code',$code)->find()->value('merge_name');
}
}

View File

@ -0,0 +1,164 @@
<div class="full-height">
<div class="overlay"></div> <!-- 遮罩层 -->
<div class="content">
<!-- 表单区域占2/3 -->
<div class="form-area">
<div class="w-75">
<div class="card-body">
<h5 class="card-title">复制订单</h5>
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('order/add')}">
<input type="hidden" name="id" value="{$row.id}"> <!-- 订单ID用于提交编辑的对象 -->
<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}">
</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" class="form-control" name="row[tel]" type="number" value="{$row.tel}">
</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" class="form-control" type="text" value="{$row.area_name}" />
<!-- 选项下拉框 -->
<ul id="address-list" class="dropdown-menu" style="display: none;"></ul>
<!-- 存储选择的 area_code -->
<input type="hidden" id="selected-area-code" name="row[area_id]" value="{$row.area_id}">
</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" class="form-control" name="row[address]" type="text" value="{$row.address}">
</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" class="form-control" name="row[source]" type="number" value="{$row.source}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Service_title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-service_title" class="form-control" name="row[service_title]" type="text" value="{$row.service_title}">
<!-- 选项下拉框 -->
<ul id="service-list" class="dropdown-menu" style="display: none;"></ul>
<!-- 存储选择的 service_id -->
<input type="hidden" id="selected-service_id" name="row[service_id]" value="{$row.service_id}">
</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">
<textarea id="c-detail" rows="4" style="width: 100%;resize: vertical" class="form-control" name="row[detail]">{$row.detail}</textarea>
</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">
<textarea id="c-remark" rows="4" style="width: 100%;resize: vertical" class="form-control" name="row[remark]">{$row.remark}</textarea>
</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}">
<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 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">保存订单</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- 功能区占1/3 -->
<div class="function-area">
<h5 class="text-center">快速输入</h5>
<div class="form-floating">
<textarea rows="8" style="width: 100%;resize: vertical" class="form-control" placeholder="复制内容,快速输入" id="floatingTextarea"></textarea>
</div>
</div>
</div>
</div>
<style>
.full-height {
height: 100vh;
width: 100vw;
background: #fff;
}
.overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.3); /* 背景黑色遮罩 */
z-index: -1;
}
.card {
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.card-body {
padding: 2rem;
}
.content {
display: flex;
height: 100vh;
}
.form-area {
flex: 2;
display: flex;
justify-content: center;
align-items: flex-start;
}
.function-area {
flex: 1;
padding: 2rem;
background-color: #f8f9fa;
/*border-left: 1px solid #ddd;*/
}
.dropdown-menu {
position: absolute;
z-index: 1000;
width: 100%;
max-height: 300px;
overflow-y: auto;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 4px;
box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.2);
margin: 6px 12px;
}
.dropdown-item {
padding: 8px;
cursor: pointer;
}
.suggestion-item:hover {
background-color: #f0f0f0;
}
</style>

View File

@ -1,245 +1,164 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="full-height">
<div class="overlay"></div> <!-- 遮罩层 -->
<div class="content">
<!-- 表单区域占2/3 -->
<div class="form-area">
<div class="w-75">
<div class="card-body">
<h5 class="card-title">编辑订单</h5>
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('order/edit')}">
<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>
<input type="hidden" name="id" value="{$row.id}"> <!-- 订单ID用于提交编辑的对象 -->
</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">{:__('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">{:__('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">
<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">{:__('Service_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-service_id" data-rule="required" data-source="service/index" class="form-control selectpage" name="row[service_id]" type="text" value="{$row.service_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Service_title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-service_title" data-rule="required" class="form-control" name="row[service_title]" type="text" value="{$row.service_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 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}">
</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" class="form-control" name="row[tel]" type="number" value="{$row.tel}">
</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" class="form-control" type="text" value="{$row.area_name}" />
<!-- 选项下拉框 -->
<ul id="address-list" class="dropdown-menu" style="display: none;"></ul>
<!-- 存储选择的 area_code -->
<input type="hidden" id="selected-area-code" name="row[area_id]" value="{$row.area_id}">
</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" class="form-control" name="row[address]" type="text" value="{$row.address}">
</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" class="form-control" name="row[source]" type="number" value="{$row.source}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Service_title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-service_title" class="form-control" name="row[service_title]" type="text" value="{$row.service_title}">
<!-- 选项下拉框 -->
<ul id="service-list" class="dropdown-menu" style="display: none;"></ul>
<!-- 存储选择的 service_id -->
<input type="hidden" id="selected-service_id" name="row[service_id]" value="{$row.service_id}">
</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">
<textarea id="c-detail" rows="4" style="width: 100%;resize: vertical" class="form-control" name="row[detail]">{$row.detail}</textarea>
</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">
<textarea id="c-remark" rows="4" style="width: 100%;resize: vertical" class="form-control" name="row[remark]">{$row.remark}</textarea>
</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}">
<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 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">更新订单</button>
</div>
</div>
</form>
</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">{:__('Collect')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-collect" class="form-control selectpicker" name="row[collect]">
{foreach name="collectList" item="vo"}
<option value="{$key}" {in name="key" value="$row.collect"}selected{/in}>{$vo}</option>
{/foreach}
</select>
<!-- 功能区占1/3 -->
<div class="function-area">
<h5 class="text-center">快速输入</h5>
<div class="form-floating">
<textarea rows="8" style="width: 100%;resize: vertical" class="form-control" placeholder="复制内容,快速输入" id="floatingTextarea"></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Collect_remark')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-collect_remark" class="form-control" name="row[collect_remark]" type="text" value="{$row.collect_remark|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Enter_admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-enter_admin_id" data-rule="required" data-source="enter/admin/index" class="form-control selectpage" name="row[enter_admin_id]" type="text" value="{$row.enter_admin_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_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-dispatch_type" data-rule="required" class="form-control selectpicker" name="row[dispatch_type]">
{foreach name="dispatchTypeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.dispatch_type"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</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">{:__('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">{:__('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">{:__('Sb_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sb_amount" data-rule="required" class="form-control" step="0.01" name="row[sb_amount]" type="number" value="{$row.sb_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">{:__('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">{:__('Abolish_reason_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-abolish_reason_id" data-rule="required" data-source="abolish/reason/index" class="form-control selectpage" name="row[abolish_reason_id]" type="text" value="{$row.abolish_reason_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Abolish_detail')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-abolish_detail" class="form-control" name="row[abolish_detail]" type="text" value="{$row.abolish_detail|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">{:__('Payment_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-payment_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[payment_time]" type="text" value="{$row.payment_time}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Finishe_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-finishe_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[finishe_time]" type="text" value="{$row.finishe_time}">
</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">{:__('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 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>
<style>
.full-height {
height: 100vh;
width: 100vw;
background: #fff;
}
.overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.3); /* 背景黑色遮罩 */
z-index: -1;
}
.card {
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.card-body {
padding: 2rem;
}
.content {
display: flex;
height: 100vh;
}
.form-area {
flex: 2;
display: flex;
justify-content: center;
align-items: flex-start;
}
.function-area {
flex: 1;
padding: 2rem;
background-color: #f8f9fa;
/*border-left: 1px solid #ddd;*/
}
.dropdown-menu {
position: absolute;
z-index: 1000;
width: 100%;
max-height: 300px;
overflow-y: auto;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 4px;
box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.2);
margin: 6px 12px;
}
.dropdown-item {
padding: 8px;
cursor: pointer;
}
.suggestion-item:hover {
background-color: #f0f0f0;
}
</style>

View File

@ -1,15 +1,4 @@
<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">
@ -22,14 +11,14 @@
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('order/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<div class="dropdown btn-group {:$auth->check('order/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 class="dropdown btn-group {:$auth->check('order/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>

View File

@ -11,12 +11,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
del_url: 'order/del',
multi_url: 'order/multi',
import_url: 'order/import',
push_url: 'order/status',
table: 'order',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
@ -31,41 +31,109 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
{field: 'order_no', title: __('Order_no'), operate: 'LIKE'},
{field: 'customer', title: __('Customer'), operate: 'LIKE'},
{field: 'tel', title: __('Tel'), operate: 'LIKE'},
{field: 'status', title: __('Status'), searchList: {"10":__('Status 10'),"20":__('Status 20'),"30":__('Status 30'),"40":__('Status 40'),"50":__('Status 50'),"-10":__('Status -10'),"-20":__('Status -20'),"-30":__('Status -30')}, formatter: Table.api.formatter.status},
{
field: 'status',
title: __('Status'),
searchList: {
"10": __('Status 10'),
"20": __('Status 20'),
"30": __('Status 30'),
"40": __('Status 40'),
"50": __('Status 50'),
"-10": __('Status -10'),
"-20": __('Status -20'),
"-30": __('Status -30')
},
formatter: Table.api.formatter.status
},
{field: 'area_id', title: __('Area_id')},
{field: 'address', title: __('Address'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{
field: 'address',
title: __('Address'),
operate: 'LIKE',
table: table,
class: 'autocontent',
formatter: Table.api.formatter.content
},
{field: 'work_tel_id', title: __('Work_tel_id')},
{field: 'worker_id', title: __('Worker_id')},
{field: 'source', title: __('Source')},
{field: 'source_uid', title: __('Source_uid'), operate: 'LIKE'},
{field: 'service_id', title: __('Service_id')},
{field: 'service_title', title: __('Service_title'), operate: 'LIKE'},
{field: 'detail', title: __('Detail'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'remark', title: __('Remark'), 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: 'collect', title: __('Collect'), searchList: {"0":__('Collect 0'),"1":__('Collect 1')}, formatter: Table.api.formatter.normal},
{field: 'collect_remark', title: __('Collect_remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'enter_admin_id', title: __('Enter_admin_id')},
{field: 'dispatch_admin_id', title: __('Dispatch_admin_id')},
{field: 'dispatch_type', title: __('Dispatch_type'), searchList: {"10":__('Dispatch_type 10'),"11":__('Dispatch_type 11'),"20":__('Dispatch_type 20')}, formatter: Table.api.formatter.normal},
{field: 'total', title: __('Total'), operate:'BETWEEN'},
{field: 'cost', title: __('Cost'), operate:'BETWEEN'},
{field: 'performance', title: __('Performance'), operate:'BETWEEN'},
{field: 'sb_amount', title: __('Sb_amount'), operate:'BETWEEN'},
{field: 'real_amount', title: __('Real_amount'), operate:'BETWEEN'},
{field: 'cancel_reason_id', title: __('Cancel_reason_id')},
{field: 'cancel_detail', title: __('Cancel_detail'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'abolish_reason_id', title: __('Abolish_reason_id')},
{field: 'abolish_detail', title: __('Abolish_detail'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{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: 'payment_time', title: __('Payment_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'finishe_time', title: __('Finishe_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'dispatch_time', title: __('Dispatch_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'delete_time', title: __('Delete_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
{
field: 'detail',
title: __('Detail'),
operate: 'LIKE',
table: table,
class: 'autocontent',
formatter: Table.api.formatter.content
},
{
field: 'remark',
title: __('Remark'),
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: '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,
buttons: [
{
name: 'edit',
icon: 'fa fa-pencil',
title: __('Edit'),
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-success btn-editone'
},
{
name: 'del',
icon: 'fa fa-trash',
title: __('Del'),
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-danger btn-delone'
},
{
name: 'push',
icon: 'fa fa-copy',
title: '复制',
url: 'order/copy',
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-info btn-dialog',
callback: function ($data){
console.log($data);
}
},
],
}
]
]
],
});
// 为表格绑定事件
@ -77,15 +145,20 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
edit: function () {
Controller.api.bindevent();
},
push: function () {
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
function parseAndFill() {
// 获取左侧输入框的内容
}
let $input = $("#c-area_id");
let $dropdown = $("#address-list");
let $hiddenField = $("#selected-area-code");
@ -105,7 +178,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
$.ajax({
url: "/admin/area/search", // 你的 API 地址
type: "GET",
data: { keyword: keyword },
data: {keyword: keyword},
dataType: "json",
success: function (data) {
renderDropdown(data.data);
@ -116,15 +189,16 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
});
}, 200); // 500 毫秒防抖
});
// 渲染城市下拉选项
function renderDropdown(data) {
$dropdown.empty(); // 清空列表
if (data.length === 0){
if (data.length === 0) {
let $option = $("<li class='dropdown-item'></li>")
.text('未搜索到结果')
.attr("data-value", 0);
$dropdown.append($option);
}else{
} else {
data.forEach(item => {
let $option = $("<li class='dropdown-item'></li>")
.text(item.merge_name)
@ -144,10 +218,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
}
let $inputService = $("#c-service_title");
let $dropdownService = $("#service-list");
let $hiddenFieldService = $("#c-service_id");
let $hiddenFieldService = $("#selected-service_id");
let timerService = null; // 定义定时器
$inputService.on("input", function () {
@ -164,7 +237,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
$.ajax({
url: "/admin/area/search", // 你的 API 地址
type: "GET",
data: { keyword: keyword },
data: {keyword: keyword},
dataType: "json",
success: function (data) {
renderDropdownService(data.data);
@ -179,12 +252,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
// 渲染城市下拉选项
function renderDropdownService(data) {
$dropdownService.empty(); // 清空列表
if (data.length === 0){
if (data.length === 0) {
let $option = $("<li class='dropdown-item'></li>")
.text('未搜索到结果')
.attr("data-value", 0);
$dropdownService.append($option);
}else{
} else {
data.forEach(item => {
let $option = $("<li class='dropdown-item'></li>")
.text(item.merge_name)
@ -203,8 +276,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
}
// 点击外部隐藏下拉框
$(document).on("click", function (e) {
if (!$(e.target).closest("#c-address, #address-list").length) {