6
0
Fork 0

处理冲突

release
vine_liutk 2022-03-17 16:22:46 +08:00
parent 2d057fac9c
commit 647b74eb8d
15 changed files with 979 additions and 501 deletions

View File

@ -0,0 +1,166 @@
<?php
namespace App\Admin\Controllers;
use App\Admin\Repositories\Activity;
use App\Models\Coupon;
use App\Models\ProductPart;
use App\Models\ProductSku;
use Carbon\Carbon;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\Column;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Show;
class ActivityController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Activity(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('title');
$grid->column('cover')->image(100);
$grid->column('content');
$grid->column('is_use')
->if(function () {
return Admin::user()->can('dcat.admin.activities.edit');
})
->then(function (Column $column) {
$column->switch();
})
->else(function (Column $column) {
$column->bool();
});
$grid->column('started_at');
$grid->column('ended_at');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
//新增
if (Admin::user()->can('dcat.admin.activities.create')) {
$grid->disableCreateButton(false);
// $grid->enableDialogCreate();
}
//删除以及自定义操作
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableDelete(Admin::user()->cannot('dcat.admin.activities.destroy'));
//修改
$actions->disableEdit(Admin::user()->cannot('dcat.admin.activities.edit'));
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->like('title')->width(3);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Activity(), function (Show $show) {
$show->field('id');
$show->field('title');
$show->field('cover');
$show->field('content');
$show->field('is_use');
$show->field('started_at');
$show->field('ended_at');
$show->field('coupons_rule');
$show->field('gifts_rule');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$builder = Activity::with(['parts', 'couponSet', 'giftSet']);
return Form::make($builder, function (Form $form) {
$form->display('id');
$form->display('created_at');
$form->display('updated_at');
$form->block(6, function (Form\BlockForm $form) {
$form->text('title')->required();
$form->image('cover')
->move('activities/'.Carbon::now()->toDateString())
->saveFullUrl()
->removable(false)
->autoUpload()->retainable();
$form->switch('is_use');
$form->dateRange('started_at', 'ended_at', '活动时间');
$form->multipleSelect('parts', '商品分区关联')->options(ProductPart::all()->pluck('name', 'id'))->customFormat(function ($v) {
if (! $v) {
return [];
}
// 从数据库中查出的二维数组中转化成ID
return array_column($v, 'id');
});
$form->hasMany('couponSet', '优惠券关联', function ($form) {
$form->select('coupon_id', '优惠券')->options(function ($id) {
$coupon = Coupon::find($id);
if ($coupon) {
return [$coupon->id => $coupon->name];
}
})->ajax(admin_route('api.coupons'));
$form->number('qty', '数量');
})->useTable();
$form->hasMany('giftSet', '赠品关联', function ($form) {
$form->select('sku_id', '赠品')->options(function ($id) {
$sku = ProductSku::find($id);
if ($sku) {
return [$sku->id => $sku->name];
}
})->ajax(admin_route('api.product_skus'));
$form->number('qty', '数量');
})->useTable();
$form->showFooter();
});
$form->block(6, function (Form\BlockForm $form) {
$form->title('活动内容');
//优惠券规则
$form->embeds('coupons_rule', function ($form) {
$form->radio('type')->options([
0=>'按订单赠送',
1=>'其他活动来源',
])->default(0);
$form->number('value', '门槛')->help('每N元赠送一份');
$form->radio('times', '可领次数')->options([
'0'=>'仅首单',
'1'=>'不限',
])->default(0);
});
//赠品规则
$form->embeds('gifts_rule', function ($form) {
$form->radio('type')->options([
0=>'按订单赠送',
1=>'其他活动来源',
])->default(0);
$form->number('value', '门槛')->help('每N元赠送一份');
$form->radio('times', '可领次数')->options([
'0'=>'仅首单',
'1'=>'不限',
])->default(0);
});
$form->editor('content')->height('600');
});
});
}
}

View File

@ -6,6 +6,7 @@ use App\Admin\Actions\Grid\PartCoupon;
use App\Admin\Renderable\ProductPartSkuTable; use App\Admin\Renderable\ProductPartSkuTable;
use App\Admin\Renderable\ProductSkuSimpleTable; use App\Admin\Renderable\ProductSkuSimpleTable;
use App\Admin\Repositories\ProductPart; use App\Admin\Repositories\ProductPart;
use App\Models\ProductPart as ProductPartModel;
use App\Models\ProductSku; use App\Models\ProductSku;
use Dcat\Admin\Admin; use Dcat\Admin\Admin;
use Dcat\Admin\Form; use Dcat\Admin\Form;
@ -13,6 +14,7 @@ use Dcat\Admin\Grid;
use Dcat\Admin\Grid\Column; use Dcat\Admin\Grid\Column;
use Dcat\Admin\Http\Controllers\AdminController; use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Show; use Dcat\Admin\Show;
use Illuminate\Http\Request;
class ProductPartController extends AdminController class ProductPartController extends AdminController
{ {
@ -141,4 +143,18 @@ class ProductPartController extends AdminController
$form->display('updated_at'); $form->display('updated_at');
}); });
} }
public function parts(Request $request)
{
$name = $request->input('q');
$query = ProductPartModel::select('id', 'name as text');
if ($name) {
$query->where('name', 'like', "%$name%");
return $query->paginate(null);
}
return response()->json($query->get());
}
} }

View File

@ -0,0 +1,16 @@
<?php
namespace App\Admin\Repositories;
use App\Models\Activity as Model;
use Dcat\Admin\Repositories\EloquentRepository;
class Activity extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
}

View File

@ -160,6 +160,8 @@ Route::group([
'index', 'index',
])->names('order_refunds'); ])->names('order_refunds');
$router->resource('activities', 'ActivityController')->names('activities');
$router->get('import-job-logs', 'ImportJobLogController@index')->name('import_job_logs.index'); $router->get('import-job-logs', 'ImportJobLogController@index')->name('import_job_logs.index');
$router->resource('sales-value-logs', 'SalesValueLogController')->only( $router->resource('sales-value-logs', 'SalesValueLogController')->only(
@ -215,6 +217,7 @@ Route::group([
$router->get('api/product-categories', 'ProductCategoryController@categories')->name('api.product_categories'); $router->get('api/product-categories', 'ProductCategoryController@categories')->name('api.product_categories');
$router->get('api/product-group-details', 'ProductGroupController@details')->name('api.product_group_details'); $router->get('api/product-group-details', 'ProductGroupController@details')->name('api.product_group_details');
$router->get('api/product-skus', 'ProductSkuController@skus')->name('api.product_skus'); $router->get('api/product-skus', 'ProductSkuController@skus')->name('api.product_skus');
$router->get('api/product-parts', 'ProductPartController@parts')->name('api.product_parts');
$router->get('api/coupons', 'CouponController@coupons')->name('api.coupons'); $router->get('api/coupons', 'CouponController@coupons')->name('api.coupons');
$router->get('api/coupone-send-tasks', 'CouponSendTaskController@tasks')->name('api.coupon_send_tasks'); $router->get('api/coupone-send-tasks', 'CouponSendTaskController@tasks')->name('api.coupon_send_tasks');
$router->get('api/orders', 'OrderController@orders')->name('api.orders'); $router->get('api/orders', 'OrderController@orders')->name('api.orders');

View File

@ -0,0 +1,49 @@
<?php
namespace App\Models;
use App\Casts\JsonArray;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Activity extends Model
{
use HasFactory;
use HasDateTimeFormatter;
protected $casts = [
'is_use' => 'bool',
'coupons_rule'=> JsonArray::class,
'gifts_rule'=> JsonArray::class,
];
protected $fillable = [
'title', 'cover', 'content', 'is_use', 'coupons_rule', 'gifts_rule',
];
public function couponSet()
{
return $this->hasMany(ActivityCoupon::class);
}
public function giftSet()
{
return $this->hasMany(ActivityGift::class);
}
public function parts()
{
return $this->belongsToMany(ProductPart::class, 'activity_product_parts', 'activity_id', 'part_id');
}
public function coupons()
{
return $this->belongsToMany(Coupon::class, 'activity_coupons', 'activity_id', 'coupon_id');
}
public function gifts()
{
return $this->belongsToMany(ProductSku::class, 'activity_gifts', 'activity_id', 'sku_id');
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ActivityCoupon extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = [
'activity_id', 'coupon_id', 'qty',
];
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ActivityGift extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = [
'activity_id', 'sku_id', 'qty',
];
}

View File

@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ActivityProductPart extends Model
{
use HasFactory;
protected $fillable = [
'activity_id', 'part_id',
];
}

View File

@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActivitiesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('activities', function (Blueprint $table) {
$table->id();
$table->string('title')->comment('标题');
$table->string('cover')->nullable()->comment('封面图');
$table->text('content')->nullable()->comment('内容');
$table->unsignedTinyInteger('is_use')->default(0)->comment('是否上架');
$table->timestamp('started_at')->nullable()->comment('开始时间');
$table->timestamp('ended_at')->nullable()->comment('结束时间');
$table->json('coupons_rule')->nullable()->comment('优惠券规则');
$table->json('gifts_rule')->nullable()->comment('赠品规则');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('activities');
}
}

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActivityProductPartsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('activity_product_parts', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('activity_id')->comment('活动ID');
$table->unsignedBigInteger('part_id')->comment('商品分区ID');
$table->index(['activity_id', 'part_id']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('activity_product_parts');
}
}

View File

@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActivityCouponsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('activity_coupons', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('activity_id')->comment('活动ID');
$table->unsignedBigInteger('coupon_id')->comment('优惠券ID');
$table->unsignedInteger('qty')->comment('数量');
$table->index(['activity_id', 'coupon_id']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('activity_coupons');
}
}

View File

@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActivityGiftsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('activity_gifts', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('activity_id')->comment('活动ID');
$table->unsignedBigInteger('sku_id')->comment('赠品ID');
$table->unsignedInteger('qty')->comment('数量');
$table->index(['activity_id', 'sku_id']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('activity_gifts');
}
}

View File

@ -119,6 +119,11 @@ class AdminMenuSeeder extends Seeder
'icon' => 'fa fa-paw', 'icon' => 'fa fa-paw',
'uri'=>'', 'uri'=>'',
'children'=>[ 'children'=>[
[
'title' => '活动管理',
'icon'=>'',
'uri' =>'activities',
],
[ [
'title' =>'商品分区', 'title' =>'商品分区',
'icon' => '', 'icon' => '',

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
<?php
return [
'labels' => [
'Activity' => '活动管理',
'activity' => '活动管理',
],
'fields' => [
'title' => '标题',
'cover' => '封面图',
'content' => '内容',
'is_use' => '是否上架',
'started_at' => '开始时间',
'ended_at' => '结束时间',
'coupons_rule' => '优惠券规则',
'gifts_rule' => '赠品规则',
],
'options' => [
],
];