Browse Source

代理商供应商

develop
lemon 4 years ago
parent
commit
dde7cb0e92
  1. 87
      app/AdminAgent/Actions/Grid/DemandConfirm.php
  2. 5
      app/AdminAgent/Controllers/AgentProductController.php
  3. 17
      app/AdminAgent/Controllers/DemandBiddingController.php
  4. 63
      app/AdminAgent/Controllers/DemandController.php
  5. 132
      app/AdminAgent/Controllers/MyDemandController.php
  6. 2
      app/AdminAgent/Renderable/SelectProduct.php
  7. 1
      app/AdminAgent/routes.php
  8. 171
      app/AdminSupplier/Controllers/DemandBiddingController.php
  9. 224
      app/AdminSupplier/Controllers/DemandController.php
  10. 139
      app/AdminSupplier/Controllers/DemandProductController.php
  11. 48
      app/AdminSupplier/Renderable/SelectProduct.php
  12. 16
      app/AdminSupplier/Repositories/Demand.php
  13. 16
      app/AdminSupplier/Repositories/DemandBidding.php
  14. 16
      app/AdminSupplier/Repositories/DemandProduct.php
  15. 7
      app/AdminSupplier/routes.php
  16. 5
      app/Models/DemandBidding.php
  17. 52
      app/Models/DemandProduct.php
  18. 6
      app/Traits/DemandTraits.php
  19. 23
      resources/lang/zh_CN/demand-product.php

87
app/AdminAgent/Actions/Grid/DemandConfirm.php

@ -0,0 +1,87 @@
<?php
namespace App\AdminAgent\Actions\Grid;
use Dcat\Admin\Actions\Response;
use Dcat\Admin\Grid\RowAction;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
class DemandConfirm extends RowAction
{
protected $model;
public function __construct(string $model = null)
{
$this->model = $model;
}
/**
* 标题
*
* @return string
*/
public function title()
{
return 'Copy';
}
/**
* 设置确认弹窗信息,如果返回空值,则不会弹出弹窗
*
* 允许返回字符串或数组类型
*
* @return array|string|void
*/
public function confirm()
{
return [
// 确认弹窗 title
"您确定要复制这行数据吗?",
// 确认弹窗 content
$this->row->username,
];
}
/**
* 处理请求
*
* @param Request $request
*
* @return \Dcat\Admin\Actions\Response
*/
public function handle(Request $request)
{
// 获取当前行ID
$id = $this->getKey();
// 获取 parameters 方法传递的参数
$username = $request->get('username');
$model = $request->get('model');
// 复制数据
$model::find($id)->replicate()->save();
// 返回响应结果并刷新页面
return $this->response()->success("复制成功: [{$username}]")->refresh();
}
/**
* 设置要POST到接口的数据
*
* @return array
*/
public function parameters()
{
return [
// 发送当前行 username 字段数据到接口
'username' => $this->row->username,
// 把模型类名传递到接口
'model' => $this->model,
];
}
}

5
app/AdminAgent/Controllers/AgentProductController.php

@ -157,7 +157,6 @@ class AgentProductController extends AdminController
{
return Form::make(new AgentProduct(), function (Form $form) {
$agent_id = Admin::user()->id;
//不允许查看非自己的数据
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
@ -190,7 +189,9 @@ class AgentProductController extends AdminController
$form->editor('know');
$form->editor('content');
});
$form->text('price')->required();
$form->text('title', '产品名称');
$form->text('price')->required();
$form->text('original_price')->required();
$form->text('sale')->default(0);
$form->text('stock')->default(8888);

17
app/AdminAgent/Controllers/DemandBiddingController.php

@ -26,6 +26,13 @@ class DemandBiddingController extends AdminController
$grid->column('id')->sortable();
$grid->column('price');
$grid->column('comment');
$grid->column('state','状态')->using(DemandTraits::$biddingState)->dot(
[
'yellow',
'success',
'danger',
]
);
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->disableDeleteButton();
@ -67,9 +74,12 @@ class DemandBiddingController extends AdminController
protected function form()
{
return Form::make(new DemandBidding(), function (Form $form) {
$form->display('id');
$form->disableEditingCheck();
$form->disableCreatingCheck();
$form->disableViewCheck();
$form->display('id');
$form->text('price');
$form->text('comment');
$form->textarea('comment');
$form->hidden('demand_id')->value(request('demand_id',0));
$form->hidden('bidding_user_type');
$form->hidden('bidding_user_id');
@ -77,9 +87,10 @@ class DemandBiddingController extends AdminController
// 判断是否是新增操作
if ($form->isCreating()) {
//发布人身份
$form->bidding_user_type = 'App\models\Agent';
$form->bidding_user_type = DemandTraits::$col[0];
$form->bidding_user_id = Admin::user()->id;
}
$form->response()->success('操作成功')->redirect('demand_bidding');
});
});
}

63
app/AdminAgent/Controllers/DemandController.php

@ -2,6 +2,8 @@
namespace App\AdminAgent\Controllers;
use App\AdminAgent\Actions\Grid\DemandConfirm;
use App\AdminAgent\Lazys\DemandBiddingLazys;
use App\Models\AgentProduct;
use App\Models\Product;
use App\Traits\ResponseHelper;
@ -32,6 +34,9 @@ class DemandController extends AdminController
protected function grid()
{
return Grid::make(new Demand(['publisher','biddingUser']), function (Grid $grid) {
if (\request('self',0)) {
$grid->model()->where(['publisher_id' => Admin::user()->id,'publisher_type' => DemandTraits::$col[0]]);
}
$grid->column('id')->sortable();
$grid->column('title');
$grid->column('detail','内容')->display('查看')->modal('详情',function ($modal) {
@ -55,20 +60,37 @@ class DemandController extends AdminController
3 => 'danger',
]
);
//$grid->setActionClass(Grid\Displayers\Actions::class);
//
//$grid->actions(function (Grid\Displayers\Actions $actions) {
// $actions->append(new DemandConfirm(1));
//});
if (\request('self',0)) {
$grid->column('bidding','竞标明细')
->display(function (){
return '竞标数 : '. DemandBidding::query()->where('demand_id',$this->id)->count();
})
->modal('竞标明细',function () {
return DemandBiddingLazys::make(['demand_id' => $this->id]);
});
}else{
$grid->column('bidding','竞标')
->if(function (){
return $this->state == 1 && $this->bidding_user_type == Arr::first(DemandTraits::$col);
})
->then(function (Grid\Column $column) {
$column->append('<a class="btn btn-sm btn-primary" href="'.admin_url('/demand_bidding/create?demand_id='.$this->id).'">发起竞标</a>');
});
}
$grid->column('bidding','竞标')
->if(function (){
return $this->state == 1 && $this->bidding_user_type == Arr::first(DemandTraits::$col);
})
->then(function (Grid\Column $column) {
$column->append('<a class="btn btn-sm btn-primary" href="'.admin_url('/demand_bidding/create?demand_id='.$this->id).'">发起竞标</a>');
});
$grid->column('created_at')->sortable();
$grid->disableDeleteButton();
$grid->disableEditButton();
$grid->disableQuickEditButton();
$grid->disableViewButton();
$grid->disableActions();
//$grid->disableActions();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->equal('bidding_user_type','竞标用户类型')->select(DemandTraits::$polymorphic);
@ -127,7 +149,7 @@ class DemandController extends AdminController
$form->hidden('deadline');
$form->select('bidding_user_type','竞标用户类型')
->when([2],function (Form $form){
$form->select('product_id','产品')->options(function (){
$form->select('demand_product_id','产品')->options(function (){
return Product::query()->whereIn('agent_id',[0,Admin::user()->id])->pluck('title','id');
});
})
@ -144,7 +166,7 @@ class DemandController extends AdminController
// 判断是否是新增操作
if ($form->isCreating()) {
if ($form->bidding_user_type != 2) {
$form->product_id = 0;
$form->demand_product_id = 0;
}
$form->bidding_user_type = DemandTraits::$col[$form->bidding_user_type];
//处理流拍时间
@ -173,25 +195,8 @@ class DemandController extends AdminController
DB::beginTransaction();
try {
//新建供应商订单
$product = new Product();
$product->agent_id = $demand->publisher_id;
$product->title = $demand->title;
$product->pictures = $demand->images;
$product->price = $demand->price;
$product->original_price = $demand->price;
$product->stock = $demand->stock;
$product->state = 0;
$product->save();
//处理代理商订单
$agentProduct = new AgentProduct();
$agentProduct->agent_id = $demand->publisher_id;
$agentProduct->product_id = $product->id;
$agentProduct->stock = $demand->stock;
$agentProduct->price = $demand->price;
$agentProduct->original_price = $demand->price;
$agentProduct->state = 0;
$agentProduct->save();
$demandBidding->state = 1;
$demandBidding->save();
//改变订单状态
$demand->bidding_id = $demandBidding->id;
$demand->bidding_user_id = $demandBidding->bidding_user_id;

132
app/AdminAgent/Controllers/MyDemandController.php

@ -1,132 +0,0 @@
<?php
namespace App\AdminAgent\Controllers;
use App\AdminAgent\Lazys\DemandBiddingLazys;
use App\AdminAgent\Repositories\Demand;
use App\Models\DemandBidding;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Traits\DemandTraits;
use Illuminate\Support\Arr;
class MyDemandController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Demand(['publisher','biddingUser']), function (Grid $grid) {
$grid->model()->where(['publisher_id' => Admin::user()->id,'publisher_type' => Arr::first(DemandTraits::$col)]);
$grid->column('id')->sortable();
$grid->column('title');
$grid->column('detail','内容')->display('查看')->modal('详情',function ($modal) {
$modal->xl();
return $this->comment;
});
$grid->column('images','图片')->display(function ($image) {
return json_decode($image,true);
})->image();
$grid->column('deadline');
$grid->column('biddingUser.name','中标人');
$grid->column('bidding_user_type','竞标用户类型')->using(DemandTraits::$polymorphic);
$grid->column('price');
$grid->column('stock');
$grid->column('state')->using(DemandTraits::$state)->dot(
[
1 => 'yellow',
2 => 'success',
3 => 'danger',
]
);
$grid->column('bidding','竞标明细')
->display(function (){
return '竞标数 : '. DemandBidding::query()->where('demand_id',$this->id)->count();
})
->modal('竞标明细',function () {
return DemandBiddingLazys::make(['demand_id' => $this->id]);
});
$grid->column('created_at')->sortable();
$grid->disableDeleteButton();
$grid->disableEditButton();
$grid->disableQuickEditButton();
$grid->disableViewButton();
$grid->disableActions();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->equal('bidding_user_type','竞标用户类型')->select(DemandTraits::$polymorphic);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Demand(['publisher','biddingUser']), function (Show $show) {
$show->field('id');
$show->field('title');
$show->field('comment');
$show->field('images')->image();
$show->field('deadline');
$show->field('bidding_user_type','竞标用户类型')->using(DemandTraits::$polymorphic);
$show->field('price');
$show->field('stock');
$show->field('state')->using(DemandTraits::$state)->dot(
[
1 => 'yellow',
2 => 'danger',
3 => 'success',
]
);;
$show->field('created_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Demand(), function (Form $form) {
$form->display('id');
$form->text('title');
$form->text('comment');
$form->multipleImage('images','图片');
$form->hidden('deadline');
$form->select('bidding_user_type','竞标用户类型')->options([
'App\models\Supplier' => '供应商',
'App\models\Guides' => '地接'
]);
$form->decimal('price');
$form->number('stock');
$form->hidden('publisher_type');
$form->hidden('publisher_id');
$form->saving(function (Form $form) {
// 判断是否是新增操作
if ($form->isCreating()) {
//处理流拍时间
$form->deadline = now()->addDays(5);
//发布人身份
$form->publisher_type = 'App\models\Agent';
$form->publisher_id = Admin::user()->id;
}
});
});
}
}

2
app/AdminAgent/Renderable/SelectProduct.php

@ -28,7 +28,7 @@ class SelectProduct extends LazyRenderable
$grid->quickSearch(['title', 'supplier.name'])->placeholder('搜索产品名称、供应商');
$grid->column('id');
$grid->column('supplier.name', '供应商');
//$grid->column('supplier.name', '供应商');
$grid->column('title');
$grid->column('picture')->image('',60, 60);
$grid->column('sale');

1
app/AdminAgent/routes.php

@ -26,7 +26,6 @@ Route::group([
$router->resource('demand', 'DemandController');
$router->resource('demand_bidding', 'DemandBiddingController');
$router->resource('my_demand', 'MyDemandController');

171
app/AdminSupplier/Controllers/DemandBiddingController.php

@ -0,0 +1,171 @@
<?php
namespace App\AdminSupplier\Controllers;
use App\AdminSupplier\Renderable\SelectProduct;
use App\AdminSupplier\Repositories\DemandBidding;
use App\Models\AgentProduct;
use App\Models\AgentProductItem;
use App\Models\Demand;
use App\Models\DemandProduct;
use App\Models\Product;
use App\Traits\DemandTraits;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class DemandBiddingController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new DemandBidding(['demand']), function (Grid $grid) {
$grid->model()->where(['bidding_user_id' => Admin::user()->id,'bidding_user_type' => DemandTraits::$col[1]]);
$grid->column('id')->sortable();
$grid->column('price');
$grid->column('comment');
$grid->column('demand.title','竞拍标题');
$grid->column('demand.comment','竞拍内容');
$grid->column('state','状态')->using(DemandTraits::$biddingState)->dot(
[
'yellow',
'success',
'danger',
]
);
$grid->column('bidding','操作')
->if(function (){
return $this->state == 1 && $this->bidding_user_type == DemandTraits::$col[1] && empty($this->demand->demand_product_id);
})
->then(function (Grid\Column $column) {
$column->append('<a class="btn btn-sm btn-success" href="'.admin_url('/demand_bidding/'.$this->id.'/edit?is_bidding=true').'">绑定产品</a>');
})
->if(function (){
return $this->state == 1 && $this->bidding_user_type == DemandTraits::$col[1] && !empty($this->demand->demand_product_id);
})
->then(function (Grid\Column $column) {
$column->append('<a class="btn btn-sm btn-primary" href="'.admin_url('/demand_product/'.$this->demand->demand_product_id).'">查看产品</a>');
});
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->disableDeleteButton();
$grid->disableEditButton();
$grid->disableQuickEditButton();
$grid->disableViewButton();
$grid->disableCreateButton();
$grid->disableActions();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new DemandBidding(), function (Show $show) {
$show->field('id');
$show->field('price');
$show->field('comment');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new DemandBidding(), function (Form $form) {
$form->disableEditingCheck();
$form->disableCreatingCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->disableViewCheck();
$form->display('id')->disable();
if(request('is_bidding',0)) {
$form->textarea('comment')->disable();
$form->selectTable('demand_product_id', '产品')
->title('选择产品')
->dialogWidth('50%;min-width:600px;') //不起作用
->from(SelectProduct::make())
->model(DemandProduct::class, 'id', 'title');
}else{
$form->text('price');
$form->textarea('comment');
}
$form->hidden('demand_id')->value(request('demand_id',0));
$form->hidden('bidding_user_type')->disable();
$form->hidden('bidding_user_id')->disable();
$form->saving(function (Form $form) {
$form->deleteInput('demand_product_id');
//发布人身份
$form->bidding_user_type = DemandTraits::$col[1];
$form->bidding_user_id = Admin::user()->id;
});
$form->saved(function (Form $form) {
if($form->isEditing()) {
$productId = request('demand_product_id', 0);
if (!empty($productId)) {
DB::beginTransaction();
try {
//处理订单
//将产品绑给代理商
$demand = Demand::find($form->model()->demand_id);
$demand->demand_product_id = $productId;
$demand->save();
$demandProduct = DemandProduct::find($productId);
$product = new Product();
$product->supplier_id = $demandProduct->supplier_id;
$product->category_id = $demandProduct->category_id;
$product->title = $demandProduct->title;
$product->price = $form->model()->price;
$product->original_price = $demandProduct->original_price;
$product->pictures = $demandProduct->pictures;
$product->stock = $demand->stock;
$product->know = $demandProduct->know;
$product->content = $demandProduct->content;
$product->pictures = $demandProduct->pictures;
$product->agent_id = $form->model()->bidding_user_id;
$product->pictures = $demandProduct->pictures;
$product->save();
//处理需求
$demand = Demand::find($form->model()->demand_id);
$demand->demand_product_id = $productId;
$demand->save();
DB::commit();
} catch (\Exception $e) {
Log::error('分配订单失败::' . $e->getTraceAsString());
DB::rollBack();
return $form->response()->error('分配订单失败,稍后重试或联系管理员!' . $e->getMessage());
}
}
}
$form->response()->success('操作成功')->redirect('demand_bidding');
});
});
}
}

224
app/AdminSupplier/Controllers/DemandController.php

@ -0,0 +1,224 @@
<?php
namespace App\AdminSupplier\Controllers;
use App\AdminAgent\Lazys\DemandBiddingLazys;
use App\Models\AgentProduct;
use App\Models\DemandProduct;
use App\Models\Product;
use App\Traits\ResponseHelper;
use App\AdminAgent\Repositories\Demand;
use App\Models\DemandBidding;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Traits\DemandTraits;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\URL;
class DemandController extends AdminController
{
use ResponseHelper;
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Demand(['publisher','biddingUser']), function (Grid $grid) {
if (\request('self',0)) {
$grid->model()->where(['publisher_id' => Admin::user()->id,'publisher_type' => DemandTraits::$col[1]]);
}
$grid->column('id')->sortable();
$grid->column('title');
$grid->column('detail','内容')->display('查看')->modal('详情',function ($modal) {
$modal->xl();
return $this->comment;
});
$grid->column('images','图片')->display(function ($image) {
return json_decode($image,true);
})->image();
$grid->column('deadline');
$grid->column('publisher.name','发布人');
$grid->column('publisher_type')->using(DemandTraits::$polymorphic);
$grid->column('biddingUser.name','中标人');
$grid->column('bidding_user_type','竞标用户类型')->using(DemandTraits::$polymorphic);
$grid->column('price');
$grid->column('stock');
$grid->column('state')->using(DemandTraits::$state)->dot(
[
1 => 'yellow',
2 => 'success',
3 => 'danger',
]
);
if (\request('self',0)) {
$grid->column('bidding','竞标明细')
->display(function (){
return '竞标数 : '. DemandBidding::query()->where('demand_id',$this->id)->count();
})
->modal('竞标明细',function () {
return DemandBiddingLazys::make(['demand_id' => $this->id]);
});
}else{
$grid->column('bidding','竞标')
->if(function (){
return $this->state == 1 && $this->bidding_user_type == DemandTraits::$col[1];
})
->then(function (Grid\Column $column) {
$column->append('<a class="btn btn-sm btn-primary" href="'.admin_url('/demand_bidding/create?demand_id='.$this->id).'">发起竞标</a>');
});
}
$grid->column('created_at')->sortable();
$grid->disableDeleteButton();
$grid->disableEditButton();
$grid->disableQuickEditButton();
$grid->disableViewButton();
$grid->disableActions();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->equal('bidding_user_type','竞标用户类型')->select(DemandTraits::$polymorphic);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Demand(['publisher','biddingUser']), function (Show $show) {
$show->field('id');
$show->field('title');
$show->field('comment');
$show->field('images')->image();
$show->field('deadline');
$show->field('bidding_user_type','竞标用户类型')->using(DemandTraits::$polymorphic);
$show->field('price');
$show->field('stock');
$show->field('publisher_type')->using(DemandTraits::$polymorphic);
$show->field('publisher.name','发布人');
$show->field('state')->using(DemandTraits::$state)->dot(
[
1 => 'yellow',
2 => 'danger',
3 => 'success',
]
);;
$show->field('created_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Demand(), function (Form $form) {
$form->disableEditingCheck();
$form->disableCreatingCheck();
$form->disableViewCheck();
$form->display('id');
$form->text('title');
$form->text('comment');
$form->multipleImage('images','图片')->limit(5)->saving(function ($path) {
return json_encode($path);
});
$form->hidden('deadline');
$form->select('bidding_user_type','竞标用户类型')
->when([0],function (Form $form){
$form->select('demand_product_id','产品')->options(function (){
return DemandProduct::query()->where('supplier_id',Admin::user()->id)->where('agent_id',0)->pluck('title','id');
});
})
->options([
'代理商'
])
->default(0);
$form->decimal('price');
$form->number('stock');
$form->hidden('publisher_type');
$form->hidden('publisher_id');
$form->saving(function (Form $form) {
// 判断是否是新增操作
if ($form->isCreating()) {
//if ($form->bidding_user_type != 2) {
// $form->demand_product_id = 0;
//}
$form->bidding_user_type = DemandTraits::$col[$form->bidding_user_type];
//处理流拍时间
$form->deadline = now()->addDays(5);
//发布人身份
$form->publisher_type = DemandTraits::$col[1];
$form->publisher_id = Admin::user()->id;
}
});
});
}
public function binding()
{
$demandBiddingId = request('demand_bidding_id',0);
$demandBidding = DemandBidding::find($demandBiddingId);
if (empty($demandBidding)) {
return false;
}
$demand = \App\Models\Demand::find($demandBidding->demand_id);
if (empty($demand)) {
return false;
}
DB::beginTransaction();
try {
$demandBidding->state = 1;
$demandBidding->save();
//改变订单状态
$demand->bidding_id = $demandBidding->id;
$demand->bidding_user_id = $demandBidding->bidding_user_id;
$demand->state = DemandTraits::$stateKey[1];
$demand->save();
//将产品绑给代理商
$demandProduct = DemandProduct::find($demand->demand_product_id);
$product = new Product();
$product->supplier_id = $demandProduct->supplier_id;
$product->category_id = $demandProduct->category_id;
$product->title = $demandProduct->title;
$product->price = $demandBidding->price;
$product->original_price = $demandProduct->original_price;
$product->pictures = $demandProduct->pictures;
$product->stock = $demand->stock;
$product->know = $demandProduct->know;
$product->content = $demandProduct->content;
$product->pictures = $demandProduct->pictures;
$product->agent_id = $demandBidding->bidding_user_id;
$product->pictures = $demandProduct->pictures;
$product->save();
DB::commit();
} catch (\Exception $e) {
Log::error('选中竞标失败::'.$e->getTraceAsString());
DB::rollBack();
return $this->jsonFail(1001,'选中竞标失败,稍后重试或联系管理员!'.$e->getMessage());
}
return back();
}
}

139
app/AdminSupplier/Controllers/DemandProductController.php

@ -0,0 +1,139 @@
<?php
namespace App\AdminSupplier\Controllers;
use App\AdminSupplier\Repositories\DemandProduct;
use App\Common\ProductStatus;
use App\Models\AgentProduct;
use App\Models\Category;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Repositories\EloquentRepository;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Support\Facades\DB;
class DemandProductController extends AdminController
{
protected $title = '产品';
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new DemandProduct(['category:id,name']), function (Grid $grid) {
$grid->model()->where('supplier_id', Admin::user()->id);
$grid->column('id')->sortable();
$grid->column('category.name', '产品分类');
$grid->column('title');
$grid->column('picture')->image('', 60, 60);
$grid->column('price');
$grid->column('original_price');
$grid->column('stock');
$grid->column('sale');
$grid->column('status')->using(ProductStatus::array());
$grid->column('created_at');
$grid->column('updated_at');
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new DemandProduct(), function (Show $show) {
$show->field('id');
$show->field('supplier_id');
$show->field('category_id');
$show->field('title');
$show->field('price');
$show->field('original_price');
$show->field('pictures')->image('', 80, 80);
$show->field('stock');
$show->field('sale');
$show->field('status');
$show->field('know')->unescape()->as(fn($v) => preg_replace('/<script.*?>.*?<\/script>/is', '', $v));
$show->field('content')->unescape()->as(fn($v) => preg_replace('/<script.*?>.*?<\/script>/is', '', $v));
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new DemandProduct(), function (Form $form) {
//不允许编辑非自己数据
if ($form->isEditing() && $form->model()->supplier_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
}
$form->display('id');
$options = Category::selectOptions(fn($query) => $query->where('agent_id', 0));
$form->select('category_id')->options(array_slice($options, 1, null, true))->required();
$form->text('title')->required();
$form->text('price')->required();
$form->text('original_price')->required();
$form->multipleImage('pictures')->required()->removable(false)->retainable()->uniqueName();
$form->text('stock')->default(9999)->required();
$form->editor('know');
$form->editor('content')->required();
if ($form->isEditing()) {
$form->confirm('提示', '编辑产品需要重新审核,同时<span class="btn-danger">下架所有</span>关联的代理商产品,是否继续?');
}
})->saving(function (Form $form) {
//不允许编辑非自己数据
if ($form->isEditing() && $form->model()->supplier_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
}
//不允许编辑的字段 TODO 忽略字段不起作用
$form->ignore(['id', 'supplier_id', 'sale', 'status', 'created_at', 'updated_at', 'deleted_at']);
//null字段转为''
foreach ($form->input() as $k => $v) {
if (is_null($v)) {
$form->$k = '';
}
}
//特殊字段处理
$form->hidden(['status', 'supplier_id']); //表单没有的字段,必须加上这句才能重置值
$form->status = ProductStatus::UNAUDITED;
$form->supplier_id = Admin::user()->id;
})->saved(function (Form $form, $result) {
//下架代理商产品
if ($result) {
$id = $form->getKey();
AgentProduct::where('product_id', $id)
->orWhere(DB::raw('FIND_IN_SET(' . $id . ', product_ids)')) //TODO product_ids字段可能会去掉
->update(['status' => ProductStatus::SOLD_OUT]);
}
})->deleting(function (Form $form) {
//不允许删除非自己的数据
if (array_filter($form->model()->toArray(), fn($v) => $v['supplier_id'] != Admin::user()->id)) {
return $form->response()->error('数据不存在');
}
});
}
}

48
app/AdminSupplier/Renderable/SelectProduct.php

@ -0,0 +1,48 @@
<?php
namespace App\AdminSupplier\Renderable;
use App\Common\ProductStatus;
use App\AdminAgent\Repositories\Product;
use App\Models\DemandProduct;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\LazyRenderable;
/**
* 选择产品
* Class SelectProduct
* @package App\AdminAgent\Renderable
*/
class SelectProduct extends LazyRenderable
{
public function grid(): Grid
{
// 获取外部传递的参数
// $id = $this->id;
Admin::translation('product');
return Grid::make(new DemandProduct(['supplier:id,name']), function (Grid $grid) {
$grid->disableActions();
$grid->disableBatchDelete();
$grid->disableBatchActions();
//$grid->model()->where('status', ProductStatus::ON_SALE);
$grid->model()->where('supplier_id',Admin::user()->id)->where('agent_id',0);
$grid->quickSearch(['title', 'supplier.name'])->placeholder('搜索产品名称、供应商');
$grid->column('id');
$grid->column('supplier.name', '供应商');
$grid->column('title');
$grid->column('picture')->image('',60, 60);
$grid->column('sale');
$grid->column('stock');
$grid->column('updated_at');
$grid->paginate(15);
$grid->filter(function (Grid\Filter $filter) {
$filter->like('title')->width(4);
$filter->like('supplier.name', '供应商名称')->width(4);
});
});
}
}

16
app/AdminSupplier/Repositories/Demand.php

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

16
app/AdminSupplier/Repositories/DemandBidding.php

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

16
app/AdminSupplier/Repositories/DemandProduct.php

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

7
app/AdminSupplier/routes.php

@ -19,4 +19,11 @@ Route::group([
$router->resource('order/list', 'OrderController');
$router->resource('agent/list', 'AgentController');
$router->resource('supplier_info', 'SupplierInfoController');
$router->resource('demand', 'DemandController');
$router->resource('demand_bidding', 'DemandBiddingController');
$router->resource('demand_product', 'DemandProductController');
//api
$router->any('/api/demand/binding', 'DemandController@binding');
});

5
app/Models/DemandBidding.php

@ -16,4 +16,9 @@ class DemandBidding extends BaseModel
{
return $this->morphTo();
}
public function demand()
{
return $this->belongsTo(Demand::class,'demand_id','id');
}
}

52
app/Models/DemandProduct.php

@ -0,0 +1,52 @@
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;
class DemandProduct extends Model
{
use HasDateTimeFormatter;
use SoftDeletes;
protected $table = 'demand_products';
use HasFactory, SoftDeletes;
protected $guarded = ['id']; //不允许编辑的字段
// 获取所有产品图片
public function getPicturesAttribute($value): array
{
if (is_string($value)) {
$value = $value ? json_decode($value, true) : [];
}
$this->append('picture');
return $value ?? [];
}
// 获取第一张产品图片
public function getPictureAttribute($value): string
{
return $this->pictures[0] ?? '';
}
public function setPicturesAttribute($value)
{
if (is_array($value)) {
$this->attributes['pictures'] = json_encode(array_filter($value));
}
}
public function supplier()
{
return $this->belongsTo(Supplier::class);
}
public function category()
{
return $this->belongsTo(Category::class);
}
}

6
app/Traits/DemandTraits.php

@ -28,4 +28,10 @@ trait DemandTraits
2 => '已竞标' ,
3 => '流拍'
];
public static $biddingState = [
'待竞标' ,
'已中标' ,
'未中标'
];
}

23
resources/lang/zh_CN/demand-product.php

@ -0,0 +1,23 @@
<?php
return [
'labels' => [
'DemandProduct' => 'DemandProduct',
'demand-product' => 'DemandProduct',
],
'fields' => [
'agent_id' => '代理商id 竞标特供',
'category_id' => '产品分类ID',
'content' => '产品详情',
'know' => '旅客须知',
'original_price' => '原价',
'pictures' => '产品图片,可能有多张,JSON格式',
'price' => '价格',
'sale' => '销量',
'status' => '0:下架,1:在售',
'stock' => '库存量',
'supplier_id' => '供应商ID',
'title' => '标题',
],
'options' => [
],
];
Loading…
Cancel
Save