订单录入
This commit is contained in:
parent
5e17d3025b
commit
43691f78ef
30
application/admin/controller/Area.php
Normal file
30
application/admin/controller/Area.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 订单列管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Area extends Backend
|
||||
{
|
||||
protected $noNeedLogin = ['search'];
|
||||
|
||||
public function search(){
|
||||
$keyword = request()->get('keyword');
|
||||
if (!$keyword){
|
||||
$this->success(data:[]);
|
||||
}else{
|
||||
$data = model('area')
|
||||
->where('merge_name','like','%'.$keyword.'%')
|
||||
->where('level','=',3)
|
||||
->field('area_code, merge_name')
|
||||
->limit(0,10)
|
||||
->select();
|
||||
$this->success(data:$data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -73,7 +73,6 @@ class Order extends Backend
|
|||
if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
|
||||
$params[$this->dataLimitField] = $this->auth->id;
|
||||
}
|
||||
dd($params);
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
try {
|
||||
|
|
@ -83,6 +82,12 @@ class Order extends Backend
|
|||
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
|
||||
$this->model->validateFailException()->validate($validate);
|
||||
}
|
||||
|
||||
$params['enter_admin_id'] = $this->auth->id;
|
||||
$params['status'] = 10;
|
||||
$params['order_no'] = $this->generateOrderNumber();
|
||||
|
||||
|
||||
$result = $this->model->allowField(true)->save($params);
|
||||
Db::commit();
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
|
|
@ -94,4 +99,16 @@ class Order extends Backend
|
|||
}
|
||||
$this->success();
|
||||
}
|
||||
|
||||
function generateOrderNumber($prefix = 'ORD') {
|
||||
// 获取当前时间戳(精确到毫秒)
|
||||
$timestamp = microtime(true);
|
||||
$date = date('YmdHis', (int)$timestamp); // 格式:YYYYMMDDHHMMSS
|
||||
$randomNum = strtoupper(substr(md5($timestamp), 0, 4)); // 从时间戳生成一个随机字符串,取前四个字符
|
||||
|
||||
// 组合生成的订单编号
|
||||
$orderNumber = $prefix . $date . $randomNum;
|
||||
|
||||
return $orderNumber;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
15
application/admin/model/Area.php
Normal file
15
application/admin/model/Area.php
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
|
||||
class Area extends Model
|
||||
{
|
||||
|
||||
// 表名
|
||||
protected $name = 'areas';
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,3 +1,12 @@
|
|||
|
||||
<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="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
|
|
@ -9,25 +18,19 @@
|
|||
<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="10"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
<input id="c-tel" data-rule="required" class="form-control" name="row[tel]" type="number">
|
||||
</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" data-toggle="city-picker" name="row[area_id]" type="text" value="" />
|
||||
<input id="c-area_id" class="form-control" type="text" value="" />
|
||||
<!-- 选项下拉框 -->
|
||||
<ul id="address-list" class="dropdown-menu" style="display: none;"></ul>
|
||||
|
||||
<!-- 存储选择的 area_code -->
|
||||
<input type="hidden" id="selected-area-code" name="row[area_id]">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
@ -46,18 +49,25 @@
|
|||
<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="">
|
||||
|
||||
<!-- 选项下拉框 -->
|
||||
<ul id="service-list" class="dropdown-menu" style="display: none;"></ul>
|
||||
|
||||
<!-- 存储选择的 area_code -->
|
||||
<input type="hidden" id="selected-service_id" name="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">
|
||||
<input id="c-detail" class="form-control" name="row[detail]" type="text">
|
||||
<textarea id="c-detail" rows="4" style="width: 100%;resize: vertical" class="form-control" name="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">
|
||||
<input id="c-remark" class="form-control" name="row[remark]" type="text">
|
||||
|
||||
<textarea id="c-remark" rows="4" style="width: 100%;resize: vertical" class="form-control" name="row[remark]" ></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
@ -77,7 +87,84 @@
|
|||
<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>
|
||||
<button type="submit" class="btn btn-primary btn-embossed disabled">录入</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>
|
||||
<script>
|
||||
|
||||
</script>
|
||||
<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>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -83,5 +83,134 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
function parseAndFill() {
|
||||
// 获取左侧输入框的内容
|
||||
}
|
||||
let $input = $("#c-area_id");
|
||||
let $dropdown = $("#address-list");
|
||||
let $hiddenField = $("#selected-area-code");
|
||||
let timer = null; // 定义定时器
|
||||
// 监听输入框
|
||||
$input.on("input", function () {
|
||||
clearTimeout(timer); // 清除上次的定时器
|
||||
let keyword = $(this).val().trim();
|
||||
|
||||
if (keyword.length === 0) {
|
||||
$dropdown.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
// 延迟 500 毫秒后执行 AJAX 查询(防止过快触发)
|
||||
timer = setTimeout(() => {
|
||||
$.ajax({
|
||||
url: "/admin/area/search", // 你的 API 地址
|
||||
type: "GET",
|
||||
data: { keyword: keyword },
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
renderDropdown(data.data);
|
||||
},
|
||||
error: function () {
|
||||
console.error("请求失败");
|
||||
}
|
||||
});
|
||||
}, 200); // 500 毫秒防抖
|
||||
});
|
||||
// 渲染城市下拉选项
|
||||
function renderDropdown(data) {
|
||||
$dropdown.empty(); // 清空列表
|
||||
if (data.length === 0){
|
||||
let $option = $("<li class='dropdown-item'></li>")
|
||||
.text('未搜索到结果')
|
||||
.attr("data-value", 0);
|
||||
$dropdown.append($option);
|
||||
}else{
|
||||
data.forEach(item => {
|
||||
let $option = $("<li class='dropdown-item'></li>")
|
||||
.text(item.merge_name)
|
||||
.attr("data-value", item.area_code) // 绑定 area_code
|
||||
.on("click", function () {
|
||||
$input.val(item.merge_name); // 选中后填充输入框
|
||||
$hiddenField.val($(this).attr("data-value")); // 存储 area_code
|
||||
$dropdown.hide();
|
||||
});
|
||||
|
||||
$dropdown.append($option);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$dropdown.show(); // 显示下拉框
|
||||
}
|
||||
|
||||
|
||||
|
||||
let $inputService = $("#c-service_title");
|
||||
let $dropdownService = $("#service-list");
|
||||
let $hiddenFieldService = $("#c-service_id");
|
||||
let timerService = null; // 定义定时器
|
||||
|
||||
$inputService.on("input", function () {
|
||||
clearTimeout(timerService); // 清除上次的定时器
|
||||
let keyword = $(this).val().trim();
|
||||
|
||||
if (keyword.length === 0) {
|
||||
$dropdown.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
// 延迟 500 毫秒后执行 AJAX 查询(防止过快触发)
|
||||
timerService = setTimeout(() => {
|
||||
$.ajax({
|
||||
url: "/admin/area/search", // 你的 API 地址
|
||||
type: "GET",
|
||||
data: { keyword: keyword },
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
renderDropdownService(data.data);
|
||||
},
|
||||
error: function () {
|
||||
console.error("请求失败");
|
||||
}
|
||||
});
|
||||
}, 200); // 500 毫秒防抖
|
||||
});
|
||||
|
||||
// 渲染城市下拉选项
|
||||
function renderDropdownService(data) {
|
||||
$dropdownService.empty(); // 清空列表
|
||||
if (data.length === 0){
|
||||
let $option = $("<li class='dropdown-item'></li>")
|
||||
.text('未搜索到结果')
|
||||
.attr("data-value", 0);
|
||||
$dropdownService.append($option);
|
||||
}else{
|
||||
data.forEach(item => {
|
||||
let $option = $("<li class='dropdown-item'></li>")
|
||||
.text(item.merge_name)
|
||||
.attr("data-value", item.area_code) // 绑定 area_code
|
||||
.on("click", function () {
|
||||
$inputService.val(item.merge_name); // 选中后填充输入框
|
||||
$hiddenFieldService.val($(this).attr("data-value")); // 存储 area_code
|
||||
$dropdownService.hide();
|
||||
});
|
||||
$dropdownService.append($option);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$dropdownService.show(); // 显示下拉框
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 点击外部隐藏下拉框
|
||||
$(document).on("click", function (e) {
|
||||
if (!$(e.target).closest("#c-address, #address-list").length) {
|
||||
$dropdown.hide();
|
||||
}
|
||||
});
|
||||
return Controller;
|
||||
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user