1
0
Fork 0

Compare commits

..

No commits in common. "d1b8d88a5edf61973094eaf0b35405ff73862d48" and "3968270cf30e6212a8b33547b07804ef9769a03c" have entirely different histories.

14 changed files with 40 additions and 216 deletions

View File

@ -51,13 +51,12 @@ class Components extends BaseRenderer {
->options([
"menubar" => false,
"min_height" => 500,
"plugins" => 'image link table lists charmap emoticons code table fullscreen',
"toolbar" => "undo redo | bold italic underline strikethrough | fontfamily fontsize blocks | alignleft aligncenter alignright alignjustify | image link | outdent indent | numlist bullist table | forecolor backcolor removeformat | charmap emoticons | code fullscreen",
"toolbar_mode" => "wrap",
"toolbar" => "undo redo | bold italic underline strikethrough | fontfamily fontsize blocks | alignleft aligncenter alignright alignjustify | image link | outdent indent | numlist bullist | forecolor backcolor removeformat | charmap emoticons",
"help_tabs" => [],
"convert_urls" => false,
// "quickbars_selection_toolbar" => "fontsize forecolor backcolor",
// "quickbars_insert_toolbar" => false,
"quickbars_selection_toolbar" => "fontsize forecolor backcolor",
"toolbar_mode" => "wrap",
"quickbars_insert_toolbar" => false,
])
->receiver(admin_url('upload_rich'))
->name($name)

View File

@ -1,51 +0,0 @@
<?php
namespace App\Casts;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage as StorageFacades;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
/**
* 转换文件存储路径
*
* get: 返回全路径
* set: 原样保存
*/
class Storage implements CastsAttributes
{
protected $disk;
function __construct($disk = 'public')
{
$this->disk = $disk;
}
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return array
*/
public function get($model, $key, $value, $attributes)
{
return $value ? (Str::startsWith($value, ['http://', 'https://']) ? $value : StorageFacades::disk($this->disk)->url($value)) : '';
}
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param array $value
* @param array $attributes
* @return string
*/
public function set($model, $key, $value, $attributes)
{
return $value;
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\{Region, RegionCategory};
use App\Http\Resources\{RegionResource, RegionCategoryResource};
class RegionController extends Controller
{
public function category(Request $request)
{
$list = RegionCategory::query()->show()->sort()->get();
return $this->json(RegionCategoryResource::collection($list));
}
public function index(Request $request)
{
$query = Region::query()->sort()->show();
$list = $query->paginate($request->input('per_page'));
return $this->json(RegionResource::collection($list));
}
}

View File

@ -1,24 +0,0 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class RegionCategoryResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'icon' => $this->icon,
'description' => $this->description,
];
}
}

View File

@ -1,28 +0,0 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class RegionResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'cover' => $this->cover,
'director' => $this->director,
'area' => $this->area,
'description' => $this->description,
'category_id' => $this->category_id,
'category' => RegionCategoryResource::make($this->whenLoaded('category')),
];
}
}

View File

@ -2,10 +2,12 @@
namespace App\Models;
use App\Casts\Storage;
use Illuminate\Support\Str;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* 文章
*/
@ -21,9 +23,15 @@ class Article extends Model
'published_at' => 'datetime:Y-m-d H:i:s',
'is_enable' => 'boolean',
'is_recommend' => 'boolean',
'cover' => Storage::class,
];
protected function cover(): Attribute
{
return Attribute::make(
get: fn($value) => $value ? (Str::startsWith($value, ['http://', 'https://']) ? $value : Storage::url($value)) : '',
);
}
public function category()
{
return $this->belongsTo(ArticleCategory::class, 'category_id');

View File

@ -2,11 +2,13 @@
namespace App\Models;
use App\Casts\Storage;
use Illuminate\Support\Str;
use App\Filters\BannerFilter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* 广告图
@ -23,9 +25,15 @@ class Banner extends Model
'published_at' => 'datetime:Y-m-d H:i:s',
'is_enable' => 'boolean',
'link_config' => 'json',
'picture' => Storage::class,
];
protected function picture(): Attribute
{
return Attribute::make(
get: fn($value) => $value ? (Str::startsWith($value, ['http://', 'https://']) ? $value : Storage::url($value)) : '',
);
}
public function place()
{
return $this->belongsTo(BannerPlace::class, 'place_id');

View File

@ -2,14 +2,10 @@
namespace App\Models;
use App\Casts\Storage;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use EloquentFilter\Filterable;
/**
* 实验田
*/
class Region extends Model
{
use HasFactory;
@ -20,48 +16,18 @@ class Region extends Model
'sort', 'is_recommend','is_enable'
];
protected $casts = [
'cover' => Storage::class,
];
protected function serializeDate(\DateTimeInterface $date){
return $date->format('Y-m-d H:i:s');
}
public function scopeShow($q)
{
return $q->where('is_enable', 1);
}
public function scopeSort($q)
{
return $q->orderBy('sort', 'desc')->latest('id');
}
// 试验田分类
public function category()
{
public function category(){
return $this->belongsTo(RegionCategory::class, 'category_id');
}
// 关联设备
public function devices()
{
public function devices(){
return $this->belongsToMany(Device::class, RegionDevice::class, 'region_id', 'device_id')->withTimestamps();
}
// 种植记录
public function plants()
{
return $this->hasMany(RegionPlantLog::class, 'region_id');
}
// 收货记录
public function harvest()
{
return $this->hasMany(PlantHarvestLog::class, 'region_id');
}
public static function regionTabConfig($region = null){
$tabs = [
[

View File

@ -5,21 +5,13 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use EloquentFilter\Filterable;
use App\Casts\Storage;
/**
* 区域分类
*/
class RegionCategory extends Model
{
use HasFactory;
use Filterable;
protected $fillable = ['name', 'icon', 'description', 'parent_id', 'level', 'sort', 'path', 'is_enable'];
protected $casts = [
'icon' => Storage::class,
];
protected function serializeDate(\DateTimeInterface $date){
return $date->format('Y-m-d H:i:s');
@ -49,14 +41,4 @@ class RegionCategory extends Model
{
return $this->belongsTo(self::class, 'parent_id');
}
public function scopeShow($q)
{
return $q->where('is_enable', 1);
}
public function scopeSort($q)
{
return $q->orderBy('sort', 'desc')->latest('id');
}
}

View File

@ -19,9 +19,9 @@ class RegionPlantLog extends Model
//1进行中2已结束
protected function plantState():Attribute
{
{
return Attribute::make(
get: fn($value) => $this->end_at ? 2 : 1,
get:fn($value, $attributes) => $attributes['end_at'] ? 2:1,
);
}

View File

@ -2,7 +2,7 @@
namespace App\Services\Admin;
use App\Models\{PlantHarvestLog, RegionPlantLog};
use App\Models\PlantHarvestLog;
use App\Filters\Admin\PlantHarvestLogFilter;
use Illuminate\Support\Arr;
use Throwable;
@ -21,7 +21,7 @@ class CropHarvestService extends BaseService
public function store($data): bool
{
$columns = $this->getTableColumns();
$model = $this->getModel();
$model = $this->getModel();
foreach ($data as $k => $v) {
if (!in_array($k, $columns)) {
@ -29,9 +29,6 @@ class CropHarvestService extends BaseService
}
$model->setAttribute($k, $v);
}
if ($model->plant_id) {
$model->region_id = RegionPlantLog::where('id', $model->plant_id)->value('region_id');
}
try{
DB::beginTransaction();

View File

@ -15,7 +15,6 @@ return new class extends Migration
{
Schema::create('plant_harvest_logs', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('region_id');
$table->unsignedBigInteger('plant_id');
$table->string('director')->nullable()->comment('负责人');
$table->decimal('area')->default(0.00)->comment('面积/平米');

View File

@ -20,6 +20,5 @@ class DatabaseSeeder extends Seeder
$this->call(KeywordSeeder::class);
$this->call(BannerSeeder::class);
$this->call(SettingSeeder::class);
$this->call(RegionCategorySeeder::class);
}
}

View File

@ -2,7 +2,6 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\{BannerController, AdminNoticeController, ArticleController, RegionController};
/*
|--------------------------------------------------------------------------
@ -15,15 +14,12 @@ use App\Http\Controllers\Api\{BannerController, AdminNoticeController, ArticleCo
|
*/
Route::get('banner', [BannerController::class, 'index']);
Route::get('banner', [\App\Http\Controllers\Api\BannerController::class, 'index']);
Route::get('notice', [AdminNoticeController::class, 'index']);
Route::get('notice/{id}', [AdminNoticeController::class, 'show']);
Route::get('notice', [\App\Http\Controllers\Api\AdminNoticeController::class, 'index']);
Route::get('notice/{id}', [\App\Http\Controllers\Api\AdminNoticeController::class, 'show']);
Route::get('article/category', [ArticleController::class, 'category']);
Route::get('article/tree', [ArticleController::class, 'tree']);
Route::get('article', [ArticleController::class, 'index']);
Route::get('article/{id}', [ArticleController::class, 'show']);
Route::get('region/category', [RegionController::class, 'category']);
Route::get('region', [RegionController::class, 'index']);
Route::get('article/category', [\App\Http\Controllers\Api\ArticleController::class, 'category']);
Route::get('article/tree', [\App\Http\Controllers\Api\ArticleController::class, 'tree']);
Route::get('article', [\App\Http\Controllers\Api\ArticleController::class, 'index']);
Route::get('article/{id}', [\App\Http\Controllers\Api\ArticleController::class, 'show']);