添加后台产量录入
parent
d68bf141ce
commit
7ea9994dba
|
|
@ -7,6 +7,7 @@ use Dcat\Admin\Form;
|
||||||
use Dcat\Admin\Grid;
|
use Dcat\Admin\Grid;
|
||||||
use Dcat\Admin\Show;
|
use Dcat\Admin\Show;
|
||||||
use Dcat\Admin\Admin;
|
use Dcat\Admin\Admin;
|
||||||
|
use App\Http\Resources\CropResource;
|
||||||
use Peidikeji\Keywords\Models\Keywords;
|
use Peidikeji\Keywords\Models\Keywords;
|
||||||
use Dcat\Admin\Http\Controllers\AdminController;
|
use Dcat\Admin\Http\Controllers\AdminController;
|
||||||
|
|
||||||
|
|
@ -100,4 +101,9 @@ class CropController extends AdminController
|
||||||
$form->display('updated_at');
|
$form->display('updated_at');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function info($id){
|
||||||
|
$crop = Crop::findOrFail($id);
|
||||||
|
return CropResource::make($crop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,138 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Crop;
|
||||||
|
use Dcat\Admin\Form;
|
||||||
|
use Dcat\Admin\Grid;
|
||||||
|
use Dcat\Admin\Show;
|
||||||
|
use Dcat\Admin\Admin;
|
||||||
|
use App\Models\CropYield;
|
||||||
|
use App\Models\AgriculturalBase;
|
||||||
|
use Dcat\Admin\Http\Controllers\AdminController;
|
||||||
|
|
||||||
|
class CropYieldController extends AdminController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
$builder = CropYield::with(['base', 'crop', 'createdBy', 'updatedBy']);
|
||||||
|
return Grid::make($builder, function (Grid $grid) {
|
||||||
|
$grid->column('id')->sortable();
|
||||||
|
$grid->column('base.name', '区域')->label();
|
||||||
|
$grid->column('crop.name', '农作物');
|
||||||
|
$grid->column('time_year')->append('年');
|
||||||
|
$grid->column('quarter')->display(function($v){
|
||||||
|
return '第'.$v.'季度';
|
||||||
|
});
|
||||||
|
$grid->column('yield')->display(function($v){
|
||||||
|
return $v.$this->crop?->unit ?? '';
|
||||||
|
});
|
||||||
|
$grid->column('cultivated');
|
||||||
|
$grid->column('output');
|
||||||
|
$grid->column('createdBy.name', '录入人');
|
||||||
|
$grid->column('updatedBy.name', '更新人');
|
||||||
|
$grid->column('created_at')->sortable();
|
||||||
|
|
||||||
|
$grid->model()->orderBy('time_year', 'desc')->orderBy('quarter', 'asc');
|
||||||
|
|
||||||
|
$grid->showCreateButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.crop_yields.create'));
|
||||||
|
$grid->showQuickEditButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.crop_yields.edit'));
|
||||||
|
$grid->showDeleteButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.crop_yields.destroy'));
|
||||||
|
|
||||||
|
$grid->filter(function (Grid\Filter $filter) {
|
||||||
|
$filter->equal('base_id')->select(AgriculturalBase::all()->pluck('name', 'name'))->width(3);
|
||||||
|
$filter->equal('crop_id')->select(Crop::where('is_end', 1)->pluck('name', 'id'))->width(3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a show builder.
|
||||||
|
*
|
||||||
|
* @param mixed $id
|
||||||
|
*
|
||||||
|
* @return Show
|
||||||
|
*/
|
||||||
|
protected function detail($id)
|
||||||
|
{
|
||||||
|
return Show::make($id, new CropYield(), function (Show $show) {
|
||||||
|
$show->field('id');
|
||||||
|
$show->field('base_id');
|
||||||
|
$show->field('crop_id');
|
||||||
|
$show->field('time_year');
|
||||||
|
$show->field('quarter');
|
||||||
|
$show->field('yield');
|
||||||
|
$show->field('cultivated');
|
||||||
|
$show->field('output');
|
||||||
|
$show->field('created_by');
|
||||||
|
$show->field('updated_by');
|
||||||
|
$show->field('created_at');
|
||||||
|
$show->field('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
$builder = CropYield::with(['base', 'crop']);
|
||||||
|
return Form::make($builder, function (Form $form) {
|
||||||
|
$model = $form->model();
|
||||||
|
|
||||||
|
$form->display('id');
|
||||||
|
$form->select('base_id')->options(AgriculturalBase::all()->pluck('name', 'id'));
|
||||||
|
$form->select('crop_id')->options(Crop::where('is_end', 1)->pluck('name', 'id'));
|
||||||
|
|
||||||
|
$form->datetime('time_year')->format('YYYY')->required();
|
||||||
|
$form->radio('quarter')->options([
|
||||||
|
1=>'1季度',2=>'2季度',3=>'3季度',4=>'4季度',
|
||||||
|
])->default(1)->required();
|
||||||
|
$form->currency('yield')->symbol($model->crop?->unit ?? '斤');
|
||||||
|
|
||||||
|
Admin::script(
|
||||||
|
<<<JS
|
||||||
|
let crop;
|
||||||
|
$('body').on('select2:select', 'select.field_crop_id', function(e){
|
||||||
|
let url_path = '/admin/api/crops/' + e.params.data.id
|
||||||
|
$.ajax({
|
||||||
|
type: 'get',
|
||||||
|
dataType: 'json',
|
||||||
|
url: url_path,
|
||||||
|
success: function(result){
|
||||||
|
crop = result.data;
|
||||||
|
$('input[name=yield]').parent().find('span.input-group-text').text(crop.unit);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
JS
|
||||||
|
);
|
||||||
|
$form->cropExtends('extends', '扩展信息')->crop($model->crop)->listen('crop_id');
|
||||||
|
|
||||||
|
$form->currency('cultivated')->symbol('亩')->default(0)->required()->saving(function ($v) {
|
||||||
|
if ($v === null) {
|
||||||
|
$v = 0;
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
});
|
||||||
|
$form->currency('output')->symbol('元')->default(0)->required()->saving(function ($v) {
|
||||||
|
if ($v === null) {
|
||||||
|
$v = 0;
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
});
|
||||||
|
// $form->text('created_by');
|
||||||
|
// $form->text('updated_by');
|
||||||
|
|
||||||
|
$form->display('created_at');
|
||||||
|
$form->display('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Form;
|
||||||
|
|
||||||
|
use Dcat\Admin\Form\Field;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
|
class CropExtends extends Field
|
||||||
|
{
|
||||||
|
protected $view = 'admin.form.crop_extends';
|
||||||
|
|
||||||
|
protected $listen = '';
|
||||||
|
|
||||||
|
protected static $js = [
|
||||||
|
'/vendor/vue/vue.js',
|
||||||
|
// 'https://cdn.jsdelivr.net/npm/vue/dist/vue.js' // 这里可以将vue.js下载下来引入
|
||||||
|
];
|
||||||
|
|
||||||
|
public function listen($listen = '')
|
||||||
|
{
|
||||||
|
$this->listen = $listen;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->addVariables(['listen' => $this->listen]);
|
||||||
|
return parent::render();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化保存值
|
||||||
|
*
|
||||||
|
* @param [type] $data
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function prepareInputValue($value)
|
||||||
|
{
|
||||||
|
$value = json_decode($value, true);
|
||||||
|
$toValue = null;
|
||||||
|
if($value){
|
||||||
|
foreach($value as $item){
|
||||||
|
$toValue[$item['name']] = $item['value'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $toValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化渲染值
|
||||||
|
*
|
||||||
|
* @param [type] $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function formatFieldData($data)
|
||||||
|
{
|
||||||
|
$value = parent::formatFieldData($data);
|
||||||
|
|
||||||
|
$crop = Arr::get($this->variables, 'crop', null);
|
||||||
|
$toValue = [];
|
||||||
|
if($crop && $crop->extends){
|
||||||
|
$extends = json_decode($crop->extends, true);
|
||||||
|
foreach ($extends as $ext){
|
||||||
|
$toValue[] = array_merge($ext, ['value'=>$value[$ext['name']] ?? null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return json_encode($toValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function crop($crop)
|
||||||
|
{
|
||||||
|
return $this->addVariables(['crop' => $crop]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ use Dcat\Admin\Grid;
|
||||||
use Dcat\Admin\Show;
|
use Dcat\Admin\Show;
|
||||||
use Dcat\Admin\Admin;
|
use Dcat\Admin\Admin;
|
||||||
use App\Admin\Form\Amap;
|
use App\Admin\Form\Amap;
|
||||||
|
use App\Admin\Form\CropExtends;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dcat-admin - admin builder based on Laravel.
|
* Dcat-admin - admin builder based on Laravel.
|
||||||
|
|
@ -25,6 +26,7 @@ use App\Admin\Form\Amap;
|
||||||
* Admin::js('/packages/prettydocs/js/main.js');
|
* Admin::js('/packages/prettydocs/js/main.js');
|
||||||
*/
|
*/
|
||||||
Form::extend('amap', Amap::class);
|
Form::extend('amap', Amap::class);
|
||||||
|
Form::extend('cropExtends', CropExtends::class);
|
||||||
|
|
||||||
Grid::resolving(function (Grid $grid) {
|
Grid::resolving(function (Grid $grid) {
|
||||||
$grid->disableRowSelector();
|
$grid->disableRowSelector();
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,7 @@ Route::group([
|
||||||
$router->resource('agricultural-bases', 'AgriculturalBaseController')->names('agricultural_bases');
|
$router->resource('agricultural-bases', 'AgriculturalBaseController')->names('agricultural_bases');
|
||||||
|
|
||||||
$router->resource('crops', 'CropController')->names('crops');
|
$router->resource('crops', 'CropController')->names('crops');
|
||||||
|
$router->get('api/crops/{id}', 'CropController@info')->name('api.crops.info');
|
||||||
|
|
||||||
|
$router->resource('crop-yields', 'CropYieldController')->names('crop_yields');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@ namespace App\Models;
|
||||||
|
|
||||||
use EloquentFilter\Filterable;
|
use EloquentFilter\Filterable;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||||
|
|
||||||
class CropYield extends Model
|
class CropYield extends Model
|
||||||
{
|
{
|
||||||
use Filterable;
|
use Filterable, HasDateTimeFormatter;
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'extends'=>'array',
|
'extends'=>'array',
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'labels' => [
|
||||||
|
'CropYield' => 'CropYield',
|
||||||
|
'crop-yield' => 'CropYield',
|
||||||
|
],
|
||||||
|
'fields' => [
|
||||||
|
'base_id' => '基地',
|
||||||
|
'crop_id' => '农产品',
|
||||||
|
'time_year' => '年份',
|
||||||
|
'quarter' => '季度',
|
||||||
|
'yield' => '产量',
|
||||||
|
'cultivated' => '耕地面积(亩)',
|
||||||
|
'output' => '产值(元)',
|
||||||
|
'created_by' => '创建人',
|
||||||
|
'updated_by' => '修改人',
|
||||||
|
],
|
||||||
|
'options' => [
|
||||||
|
],
|
||||||
|
];
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,105 @@
|
||||||
|
<div class="{{$viewClass['form-group']}}">
|
||||||
|
|
||||||
|
<label class="{{$viewClass['label']}} control-label">{!! $label !!}</label>
|
||||||
|
|
||||||
|
<div class="{{$viewClass['field']}}">
|
||||||
|
|
||||||
|
@include('admin::form.error')
|
||||||
|
|
||||||
|
<div class="{{ $class }}" style="width: 100%; height: 100%;">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row form-field" initialized="1" >
|
||||||
|
<table class="table table-hover">
|
||||||
|
<tbody class="kv-table">
|
||||||
|
<tr v-for="i in extend_data">
|
||||||
|
<td>
|
||||||
|
<div class="form-group " style="margin-bottom: 0 !important;">
|
||||||
|
<div class="col-sm-12 input-group">
|
||||||
|
<div class="help-block with-errors"></div>
|
||||||
|
<span class="input-group-prepend"><span class="input-group-text bg-white">@{{i.unit}}</span></span>
|
||||||
|
<input name="" class="form-control" v-model="i.name" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="form-group " style="margin-bottom: 0 !important;">
|
||||||
|
<div class="col-sm-12 input-group">
|
||||||
|
<div class="help-block with-errors"></div>
|
||||||
|
<input name="" class="form-control" v-model="i.value" onInput="value=value.replace(/[^\d^\.]+/g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')" :placeholder="i.unit">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<input type="hidden" name="{{ $name }}" :value="getExtends">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@include('admin::form.help-block')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script init="{!! $selector !!}">
|
||||||
|
|
||||||
|
var vm = new Vue({
|
||||||
|
el: '#' + id,
|
||||||
|
data: {
|
||||||
|
extend_data:[]
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.createStart();
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
getExtends() {
|
||||||
|
return JSON.stringify(this.extend_data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
createStart(){//初始化数据
|
||||||
|
var selectExtendValue = (new Function("return " + '{!! $value !!}'))();
|
||||||
|
if(selectExtendValue && selectExtendValue.length > 0){
|
||||||
|
for(j = 0, len=selectExtendValue.length; j < len; j++){
|
||||||
|
this.extend_data.push(selectExtendValue[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function getCropExtends(cropId){
|
||||||
|
$.ajax({
|
||||||
|
type: 'get',
|
||||||
|
dataType: 'json',
|
||||||
|
url: '/admin/api/crops/' + cropId,
|
||||||
|
success: function (result) {
|
||||||
|
vm.extend_data = [];
|
||||||
|
let crop = result.data;
|
||||||
|
let crop_extends;
|
||||||
|
if(crop && crop.extends){
|
||||||
|
crop_extends = JSON.parse(crop.extends);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(crop_extends && crop_extends.length > 0){
|
||||||
|
for(j = 0, len=crop_extends.length; j < len; j++){
|
||||||
|
vm.extend_data.push({
|
||||||
|
"name": crop_extends[j].name,
|
||||||
|
"unit": crop_extends[j].unit,
|
||||||
|
"value": null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$("[name='{{ $listen }}']").on('change', function(){
|
||||||
|
var crop_id = this.options[this.options.selectedIndex].value;
|
||||||
|
getCropExtends(crop_id);
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
Loading…
Reference in New Issue