InspectionBanner

This commit is contained in:
2024-12-02 14:48:56 +08:00
parent 410a838e8b
commit 6fcd8f7ce2
8 changed files with 328 additions and 14 deletions

View File

@ -0,0 +1,97 @@
<?php
namespace plugin\inspection\controller;
use plugin\inspection\model\InspectionBanner;
use think\admin\Controller;
use think\admin\helper\QueryHelper;
class Banner extends Controller
{
/**
* 轮播图管理
* @auth true
* @menu true
* @login true
* @return void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function index()
{
$this->title = '轮播图管理';
InspectionBanner::mQuery()->layTable(function () {
}, static function (QueryHelper $query) {
$query->equal('status')->like('title');
$query->timeBetween('create_at');
});
}
/**
* 添加轮播图
* @auth true
* @menu true
* @login true
* @return void
*/
public function add()
{
$this->title = '添加轮播图';
$this->_applyFormToken();
InspectionBanner::mForm('form');
}
/**
* 编辑轮播图
* @auth true
* @menu true
* @login true
* @return void
*/
public function edit()
{
$this->title = '编辑轮播图';
$this->id = $this->request->param('id', 0, 'intval'); //当前轮播图ID
$this->_applyFormToken();
InspectionBanner::mForm('form');
}
/**
* 删除轮播图
* @auth true
* @menu true
* @login true
* @return void
*/
public function remove()
{
InspectionBanner::mDelete('id');
}
/**
* 状态切换
* @auth true
* @menu true
* @login true
* @return void
*/
public function status()
{
InspectionBanner::mSave($this->_vali([
'id.require' => '轮播图ID不能为空',
'status.in:0,1' => '状态值范围异常!',
'status.require' => '状态值不能为空!',
]), 'id');
}
public function sort()
{
InspectionBanner::mSave($this->_vali([
'id.require' => '轮播图ID不能为空',
'sort.require' => '排序值不能为空!',
'sort.number' => '排序必须为数字!',
'sort.between:0,9999' => '排序值必须为0~9999之间!',
]), 'id');
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace plugin\inspection\controller\api;
use plugin\inspection\model\InspectionBanner;
use think\admin\Controller;
class Banner extends Controller
{
public function index() {
$banners = InspectionBanner::mk()->where('status', '=', 1)->field("id, image")->order('sort asc,id desc')->select();
$this->success('获取轮播图列表', $banners);
}
}

View File

@ -10,18 +10,28 @@ class Record extends Auth
{
public function index()
{
$pageData = $this->staff->records()->with(['points'])->order('create_at desc')->paginate();
$pageData = $this->staff->records()->order('create_at desc')->paginate();
$this->success('获取记录成功', $pageData);
}
public function info()
{
$record_id = $this->request->get('record_id');
$record = InspectionRecord::mk()->where('id', $record_id)->with(['points'])->find();
if (empty($record)) {
$this->error('记录不存在');
}
$this->success('获取记录成功', $record);
}
public function create()
{
$this->staff->records()->save([
'staff_id' => $this->staff->id,
$record = $this->staff->records()->save([
'no' => uniqid('XJ_' . date('YmdHis')),
'create_at' => date('Y-m-d H:i:s'),
'status' => 0,
]);
$this->success('创建记录成功');
$this->success('创建记录成功', $record);
}
public function end()
@ -53,18 +63,38 @@ class Record extends Auth
$lat = $this->request->post('lat');
$lng = $this->request->post('lng');
/** @var InspectionRecord $record */
$record = InspectionRecord::mk()->where('id', $record_id)->find();
$record = InspectionRecord::query()->where('id', $record_id)->find();
if (empty($record)) {
$this->error('记录不存在');
}
$record->points()->save([
$point = $record->points()->save([
'staff_id' => $this->staff->id,
'is_pause' => $this->request->post('is_pause', 0),
'lat' => $lat,
'lng' => $lng,
'create_at' => date('Y-m-d H:i:s'),
]);
$record->distance = $record->calculateDistance();
$record->autoFix();
$record->save();
$this->success('添加点成功');
$this->success('添加点成功', $point);
}
public function update_point()
{
$record_id = $this->request->post('record_id');
$point_id = $this->request->post('id');
/** @var InspectionRecord $record */
$record = InspectionRecord::query()->where('id', $record_id)->find();
if (empty($record)) {
$this->error('记录不存在');
}
$point = $record->points()->where('id', $point_id)->find();
if (empty($point)) {
$this->error('点不存在');
}
$point->is_pause = $this->request->post('is_pause', 0);
$point->save();
$this->success("成功");
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace plugin\inspection\model;
use think\admin\Model;
class InspectionBanner extends Model
{
}

View File

@ -2,6 +2,7 @@
namespace plugin\inspection\model;
use Cassandra\Date;
use plugin\ticket\model\TicketTicket;
use think\admin\Model;
@ -17,14 +18,40 @@ class InspectionRecord extends Model
return $this->hasMany(InspectionRecordPoint::class, 'record_id', 'id')->order('create_at', 'asc');
}
public function autoFix()
{
$this->distance = $this->calculateDistance();
$this->duration = $this->calculateTime();
}
public function calculateTime()
{
$points = $this->points()->select();
$startTime = null;
$endTime = null;
foreach ($points as $point) {
if ($point->is_pause) continue;
if ($startTime === null) {
$startTime = $point->create_at;
}
$endTime = $point->create_at;
}
if ($startTime && $endTime) {
$start = new \DateTime($startTime);
$end = new \DateTime($endTime);
return $end->diff($start)->format('%H:%I:%S');
}
return '0:00:00';
}
public function calculateDistance()
{
$points = $this->points()->select();
$distance = 0;
$previousPoint = null;
foreach ($points as $point) {
$lat = $point->latitude;
$lng = $point->longitude;
$lat = $point->lat;
$lng = $point->lng;
if ($previousPoint) {
$distance += $this->calculateDistanceBetweenPoints($previousPoint[0], $previousPoint[1], $lat, $lng);
}
@ -38,10 +65,10 @@ class InspectionRecord extends Model
$earthRadius = 6371000; // 地球半径,单位为米
$dLat = deg2rad($lat - $lat1);
$dLng = deg2rad($lng - $lng1);
$a = sin($dLat / 2) * sin($dLat / 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat)) * sin($dLng / 2) * sin($dLng / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$distance = $earthRadius * $c;
return $distance;
$lat1 = deg2rad($lat1);
$lat = deg2rad($lat);
$d = $earthRadius * 2 * asin(sqrt(pow(sin($dLat / 2), 2) + cos($lat1) * cos($lat) * pow(sin($dLng / 2), 2)));
return $d;
}
public function ticket()

View File

@ -0,0 +1,33 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-auto="true" method="post" autocomplete="off" data-table-id="articleTable">
<div class="layui-row layui-col-space15">
<div class="layui-form-item">
<label class="layui-form-label">轮播图名称</label>
<div class="layui-input-block">
<input type="text" name="name" value='{$vo.name|default=""}' required placeholder="请输入轮播图名称" class="layui-input">
<div class="layui-form-mid layui-word-aux">仅用于后台展示</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">轮播图图片</label>
<div class="layui-input-block">
<input type="hidden" name="image" data-size="1" value='{$vo.image|default=""}' required placeholder="请上传轮播图图片" class="layui-input layui-hide">
<div class="layui-form-mid layui-word-aux">建议尺寸:750*300</div>
</div>
</div>
</div>
{notempty name='id'}<input class="layui-input layui-hide" type='hidden' value='{$id}' name='id'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn layui-btn-normal" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
</div>
</form>
<script>
$('[name="image"]').uploadOneImage()
layui.use(['form'], function () {
var layer = layui.layer,
form = layui.form;
form.render();
});
</script>

View File

@ -0,0 +1,87 @@
{extend name="table"}
{block name="button"}
<!--{if auth("add")}-->
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" data-modal='{:url("add")}' data-title="添加轮播图">添加</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<div class="layui-tab-content think-box-shadow">
{include file='banner/index_search'}
<table class="layui-table margin-top-10" data-url="{$request->url()}" data-target-search="form.form-search" lay-skin="line" id="bannerTable"></table>
</div>
</div>
<script type="text/html" id="toolbar">
<!--{if auth("edit")}-->
<a data-modal="{:url('edit')}?id={{ d.id }}" class="layui-btn layui-btn-xs layui-btn-normal" title="修改">修改</a>
<!--{/if}-->
<!--{if auth("status")}-->
{{# if(d.status == 0){ }}
<a class="layui-btn layui-btn-xs layui-btn-normal" data-title="启用该轮播图" data-modal='{:url("status")}?id={{ d.id }}&status=1'> </a>
{{# } else { }}
<a class="layui-btn layui-btn-xs layui-btn-primary" data-title="隐藏该轮播图" data-modal='{:url("status")}?id={{ d.id }}&status=0'> </a>
{{# } }}
<!--{/if}-->
<!--{if auth("remove")}-->
<a data-confirm="确定要永久删除此轮播图吗?" data-action="{:url('remove')}" data-value="id#{{ d.id }}" data-csrf="{:systoken('remove')}" class="layui-btn layui-btn-xs layui-btn-danger" title="删除">删除</a>
<!--{/if}-->
</script>
{/block}
{block name='style'}
<style>
</style>
{/block}
{block name='script'}
<script>
$(function () {
$('#bannerTable').layTable({
height: 'full-240',
toolbar: true,
sort: {field: 'sort', type: 'asc'},
title: '轮播图列表',
cols: [[
{type: 'numbers'},
{field: 'sort', title: '排序', width: 80, sort: true, edit: 'text'},
{field: 'image', title: '轮播图', width: 140, templet:function(item){
return '<img data-tips-image src="'+item.image+'" alt="image" style="width: 120px;height: 60px;">';
}},
{field: 'name', title: '轮播图名称', minWidth: 120},
{field: 'status', title: '状态', width: 60,templet:function(item){
if(item.status == 0){
return '<span style="color:red;">隐藏</span>';
}else if(item.status == 1){
return '<span style="color:green;">显示</span>';
}
}},
{field: 'create_at', title: '创建时间', width: 150},
{align: 'center', toolbar: '#toolbar', title: '操作', width: 240}
]]
})
layui.use(['table'], function(){
var table = layui.table,
layer = layui.layer;
table.on('edit(bannerTable)', function(obj) {
if (obj.field == 'sort') {
if (obj.value == '') {
obj.value = obj.oldValue
return false;
} else {
$.form.load("{:url('sort')}", {sort: obj.value, id: obj.data.id}, 'post', function (ret) {
$('#bannerTable').trigger('reload');
});
}
}
});
})
})
</script>
{/block}

View File

@ -0,0 +1,16 @@
<fieldset>
<legend>条件搜索</legend>
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">名称</label>
<div class="layui-input-inline">
<input name="name" value="{:input('get.name')}" placeholder="请输入名称" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="searchData"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
</fieldset>