Browse Source

需求市场产品

master
lemon 4 years ago
parent
commit
9b67cedf90
  1. 2
      app/Admin/Controllers/DemandProductController.php
  2. 3
      app/AdminSupplier/Controllers/DemandBiddingController.php
  3. 125
      app/AdminSupplier/Controllers/DemandProductController.php
  4. 32
      database/migrations/2021_09_17_182618_update_demand_product_table.php

2
app/Admin/Controllers/DemandProductController.php

@ -34,7 +34,7 @@ class DemandProductController extends AdminController
$grid->column('category.name', '分类'); $grid->column('category.name', '分类');
$grid->column('picture')->image('', 60, 60); $grid->column('picture')->image('', 60, 60);
$grid->column('title'); $grid->column('title');
$grid->column('sale');
//$grid->column('sale');
$grid->column('supplier.name', '供应商'); $grid->column('supplier.name', '供应商');
$grid->column('status') $grid->column('status')
->if(fn() => $this->status == ProductStatus::UNAUDITED) ->if(fn() => $this->status == ProductStatus::UNAUDITED)

3
app/AdminSupplier/Controllers/DemandBiddingController.php

@ -178,6 +178,9 @@ class DemandBiddingController extends AdminController
$product->know = $demandProduct->know; $product->know = $demandProduct->know;
$product->content = $demandProduct->content; $product->content = $demandProduct->content;
$product->agent_id = $form->model()->bidding_user_id; $product->agent_id = $form->model()->bidding_user_id;
$product->type = $demandProduct->type;
$product->extends = $demandProduct->extends;
$product->service_persons = $demandProduct->service_persons;
$product->save(); $product->save();
//处理需求 //处理需求
$demand = Demand::find($form->model()->demand_id); $demand = Demand::find($form->model()->demand_id);

125
app/AdminSupplier/Controllers/DemandProductController.php

@ -3,11 +3,14 @@
namespace App\AdminSupplier\Controllers; namespace App\AdminSupplier\Controllers;
use App\AdminSupplier\Repositories\DemandProduct; use App\AdminSupplier\Repositories\DemandProduct;
use App\AdminSupplier\Repositories\Product;
use App\Common\ProductStatus; use App\Common\ProductStatus;
use App\Models\AgentProduct; use App\Models\AgentProduct;
use App\Models\AgentProductItem;
use App\Models\Category; use App\Models\Category;
use Dcat\Admin\Admin; use Dcat\Admin\Admin;
use Dcat\Admin\Form; use Dcat\Admin\Form;
use Dcat\Admin\Form\NestedForm;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
use Dcat\Admin\Repositories\EloquentRepository; use Dcat\Admin\Repositories\EloquentRepository;
use Dcat\Admin\Show; use Dcat\Admin\Show;
@ -28,20 +31,20 @@ class DemandProductController extends AdminController
$grid->model()->where('supplier_id', Admin::user()->id); $grid->model()->where('supplier_id', Admin::user()->id);
$grid->column('id')->sortable(); $grid->column('id')->sortable();
$grid->column('type')->using(admin_trans('product.options.publish_type'));
$grid->column('category.name', '产品分类'); $grid->column('category.name', '产品分类');
$grid->column('title');
$grid->column('title')->limit(15);
$grid->column('picture')->image('', 60, 60); $grid->column('picture')->image('', 60, 60);
//$grid->column('price');
//$grid->column('original_price');
//$grid->column('stock');
$grid->column('sale');
//$grid->column('sale');
$grid->column('status')->using(ProductStatus::array()); $grid->column('status')->using(ProductStatus::array());
$grid->column('created_at'); $grid->column('created_at');
$grid->column('updated_at'); $grid->column('updated_at');
$grid->disableRowSelector();
$grid->filter(function (Grid\Filter $filter) { $grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->panel();
$filter->equal('id')->width(2);
$filter->equal('type')->select(admin_trans('product.options.publish_type'))->width(2);
}); });
}); });
} }
@ -55,17 +58,13 @@ class DemandProductController extends AdminController
*/ */
protected function detail($id) protected function detail($id)
{ {
return Show::make($id, new DemandProduct(), function (Show $show) {
return Show::make($id, new DemandProduct(['category:id,name']), function (Show $show) {
$show->field('id'); $show->field('id');
$show->field('supplier_id');
$show->field('category_id');
$show->field('category.name','分类');
$show->field('title'); $show->field('title');
//$show->field('price');
//$show->field('original_price');
$show->field('pictures')->image('', 80, 80); $show->field('pictures')->image('', 80, 80);
//$show->field('stock');
$show->field('sale');
$show->field('status');
$show->field('service_persons','涉及用户数');
$show->field('status')->using(ProductStatus::array());
$show->field('know')->unescape()->as(fn($v) => preg_replace('/<script.*?>.*?<\/script>/is', '', $v)); $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('content')->unescape()->as(fn($v) => preg_replace('/<script.*?>.*?<\/script>/is', '', $v));
$show->field('created_at'); $show->field('created_at');
@ -80,6 +79,8 @@ class DemandProductController extends AdminController
*/ */
protected function form() protected function form()
{ {
Admin::user()->publish_type = json_decode(Admin::user()->publish_type, true);
return Form::make(new DemandProduct(), function (Form $form) { return Form::make(new DemandProduct(), function (Form $form) {
//不允许编辑非自己数据 //不允许编辑非自己数据
if ($form->isEditing() && $form->model()->supplier_id != Admin::user()->id) { if ($form->isEditing() && $form->model()->supplier_id != Admin::user()->id) {
@ -91,15 +92,81 @@ class DemandProductController extends AdminController
$options = Category::selectOptions(fn($query) => $query->where('agent_id', 0)); $options = Category::selectOptions(fn($query) => $query->where('agent_id', 0));
$form->select('category_id')->options(array_slice($options, 1, null, true))->required(); $form->select('category_id')->options(array_slice($options, 1, null, true))->required();
$form->text('title')->required(); $form->text('title')->required();
//$form->text('price')->required();
//$form->text('original_price')->required();
//$form->currency('price')->symbol('¥')->required();
//$form->currency('original_price')->symbol('¥')->required();
$form->number('service_persons','涉及用户数')->required();
//$form->number('stock')->required();
$form->multipleImage('pictures')->required()->removable(false)->retainable()->uniqueName(); $form->multipleImage('pictures')->required()->removable(false)->retainable()->uniqueName();
//$form->text('stock')->default(9999)->required();
$form->editor('know'); $form->editor('know');
$form->editor('content')->required(); $form->editor('content')->required();
//扩展字段
$publish_type = array_intersect_key(
admin_trans('product.options.publish_type'),
array_flip(Admin::user()->publish_type)
);
$form->radio('type', '产品类型')
->options($publish_type)
->default(current(Admin::user()->publish_type))
->when(0, function (Form $form) { //旅游线路
$form->table('extends.field_0.project', '包含项目', function (NestedForm $table) {
$table->text('name', '字段1');
$table->text('num', '字段2');
$table->text('price', '字段3');
})->help('第一行数据默认是表头,如:项目名称、数量、额外费用');
$form->dateRange('extends.field_0.date.start', 'extends.field_0.date.end', '行程时间');
})->when(1, function (Form $form) { //酒店
$default = [
['tag' => '行李寄存'], ['tag' => '24小时前台'], ['tag' => '前台保险柜'], ['tag' => '唤醒服务'],
['tag' => '早餐'], ['tag' => '送餐服务'], ['tag' => '电梯'], ['tag' => '空调'],
['tag' => '新风系统'], ['tag' => '24小时热水'], ['tag' => '吹风机'], ['tag' => '加湿器'],
['tag' => '自动售货机'], ['tag' => '健身房'], ['tag' => '桌球室'], ['tag' => '洗衣服务']
];
$form->table('extends.field_1.tags', '酒店设施', function (NestedForm $table) {
$table->text('tag', '包含项目')->placeholder('如:24小时热水、干洗服务等');
})->value($default)->help('首次创建时,系统会默认填充基本服务,请根据本酒店情况进行删减或新增');
$form->text('extends.field_1.name', '酒店名');
$form->text('extends.field_1.address', '地址');
$form->map('extends.field_1.latitude', 'extends.field_1.longitude', '位置');
})->when(2, function (Form $form) { //景区
$form->table('extends.field_2.open_time', '开放时间', function (NestedForm $table) {
$table->text('node', '字段1')->placeholder('如:周一至周五');
$table->text('summer', '字段2')->placeholder('如:08:00~19:00');
$table->text('winter', '字段3')->placeholder('如:08:00~18:00');
})->help('第一行数据默认是表头,如:项目名称、数量、额外费用');
$form->table('extends.field_2.project', '包含项目', function (NestedForm $table) {
$table->text('name', '字段1');
$table->text('num', '字段2');
$table->text('price', '字段3');
})->help('第一行数据默认是表头,如:项目名称、数量、额外费用');
$form->text('extends.field_2.name', '景区名');
$form->text('extends.field_2.address', '地址');
$form->map('extends.field_2.latitude', 'extends.field_2.longitude', '位置');
})->when(3, function (Form $form) { //餐厅
$form->table('extends.field_3.open_time', '开放时间', function (NestedForm $table) {
$table->text('week', '字段1')->placeholder('如:周一至周五');
$table->text('section', '字段2')->placeholder('如:上午/下午');
$table->text('time', '字段3')->placeholder('如:08:00~18:00');
})->help('第一行数据默认是表头,如:项目名称、数量、额外费用');
$form->table('extends.field_3.package', '包含套餐', function (NestedForm $table) {
$table->text('name', '字段1')->placeholder('如:清蒸鱿鱼');
$table->text('num', '字段2')->placeholder('如:1条');
$table->text('price', '字段3')->placeholder('如:99元');
})->help('第一行数据默认是表头,如:项目名称、数量、额外费用');
$form->text('extends.field_3.name', '餐厅名');
$form->text('extends.field_3.address', '地址');
$form->map('extends.field_3.latitude', 'extends.field_3.longitude', '位置');
});
if ($form->isEditing()) { if ($form->isEditing()) {
$form->confirm('提示', '编辑产品需要重新审核,同时<span class="btn-danger">下架所有</span>关联的代理商产品,是否继续?');
$form->confirm('提示', '修改标题、价格、产品图片、旅游须知、产品详情、产品类型及信息需要重新审核,同时<span class="btn-danger">下架所有</span>关联的代理商产品,是否继续?');
} }
})->saving(function (Form $form) { })->saving(function (Form $form) {
//不允许编辑非自己数据 //不允许编辑非自己数据
@ -107,7 +174,11 @@ class DemandProductController extends AdminController
return $form->response()->error('数据不存在'); return $form->response()->error('数据不存在');
} }
//不允许编辑的字段 TODO 忽略字段不起作用
if (!Admin::user()->publish_type || !in_array($form->type, Admin::user()->publish_type)) {
return $form->response()->error('对不起,你没有此类产品的发布、编辑权限');
}
//不允许编辑的字段,忽略字段不起作用?
$form->ignore(['id', 'supplier_id', 'sale', 'status', 'created_at', 'updated_at', 'deleted_at']); $form->ignore(['id', 'supplier_id', 'sale', 'status', 'created_at', 'updated_at', 'deleted_at']);
//null字段转为'' //null字段转为''
@ -118,16 +189,10 @@ class DemandProductController extends AdminController
} }
//特殊字段处理 //特殊字段处理
$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]);
if ($form->isCreating()) {
$form->hidden(['status', 'supplier_id']); //表单没有的字段,必须加上这句才能重置值
$form->supplier_id = Admin::user()->id;
$form->status = ProductStatus::UNAUDITED;
} }
})->deleting(function (Form $form) { })->deleting(function (Form $form) {
//不允许删除非自己的数据 //不允许删除非自己的数据

32
database/migrations/2021_09_17_182618_update_demand_product_table.php

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateDemandProductTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('demand_products', function (Blueprint $table) {
$table->json('extends')->default(null)->comment('扩展字段,根据type不同,字段名不同');
$table->tinyInteger('type')->default(0)->comment('0:旅游线路、1:洒店、2:景区、3:餐厅、4:车队、5:单项');
$table->integer('service_persons')->default(1)->comment('service_persons');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
Loading…
Cancel
Save