diff --git a/app/Admin/Controllers/DemandProductController.php b/app/Admin/Controllers/DemandProductController.php index 0b51f17..d8ee9ee 100644 --- a/app/Admin/Controllers/DemandProductController.php +++ b/app/Admin/Controllers/DemandProductController.php @@ -34,7 +34,7 @@ class DemandProductController extends AdminController $grid->column('category.name', '分类'); $grid->column('picture')->image('', 60, 60); $grid->column('title'); - $grid->column('sale'); + //$grid->column('sale'); $grid->column('supplier.name', '供应商'); $grid->column('status') ->if(fn() => $this->status == ProductStatus::UNAUDITED) diff --git a/app/AdminSupplier/Controllers/DemandBiddingController.php b/app/AdminSupplier/Controllers/DemandBiddingController.php index cdc5483..45175a6 100755 --- a/app/AdminSupplier/Controllers/DemandBiddingController.php +++ b/app/AdminSupplier/Controllers/DemandBiddingController.php @@ -178,6 +178,9 @@ class DemandBiddingController extends AdminController $product->know = $demandProduct->know; $product->content = $demandProduct->content; $product->agent_id = $form->model()->bidding_user_id; + $product->type = $demandProduct->type; + $product->extends = $demandProduct->extends; + $product->service_persons = $demandProduct->service_persons; $product->save(); //处理需求 $demand = Demand::find($form->model()->demand_id); diff --git a/app/AdminSupplier/Controllers/DemandProductController.php b/app/AdminSupplier/Controllers/DemandProductController.php index da463e3..b1871dd 100755 --- a/app/AdminSupplier/Controllers/DemandProductController.php +++ b/app/AdminSupplier/Controllers/DemandProductController.php @@ -3,11 +3,14 @@ namespace App\AdminSupplier\Controllers; use App\AdminSupplier\Repositories\DemandProduct; +use App\AdminSupplier\Repositories\Product; use App\Common\ProductStatus; use App\Models\AgentProduct; +use App\Models\AgentProductItem; use App\Models\Category; use Dcat\Admin\Admin; use Dcat\Admin\Form; +use Dcat\Admin\Form\NestedForm; use Dcat\Admin\Grid; use Dcat\Admin\Repositories\EloquentRepository; use Dcat\Admin\Show; @@ -28,20 +31,20 @@ class DemandProductController extends AdminController $grid->model()->where('supplier_id', Admin::user()->id); $grid->column('id')->sortable(); + $grid->column('type')->using(admin_trans('product.options.publish_type')); $grid->column('category.name', '产品分类'); - $grid->column('title'); + $grid->column('title')->limit(15); $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('created_at'); $grid->column('updated_at'); - $grid->disableRowSelector(); + $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) { - 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('supplier_id'); - $show->field('category_id'); + $show->field('category.name','分类'); $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('service_persons','涉及用户数'); + $show->field('status')->using(ProductStatus::array()); $show->field('know')->unescape()->as(fn($v) => preg_replace('/.*?<\/script>/is', '', $v)); $show->field('content')->unescape()->as(fn($v) => preg_replace('/.*?<\/script>/is', '', $v)); $show->field('created_at'); @@ -80,6 +79,8 @@ class DemandProductController extends AdminController */ protected function form() { + + Admin::user()->publish_type = json_decode(Admin::user()->publish_type, true); return Form::make(new DemandProduct(), function (Form $form) { //不允许编辑非自己数据 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)); $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->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->text('stock')->default(9999)->required(); $form->editor('know'); $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()) { - $form->confirm('提示', '编辑产品需要重新审核,同时下架所有关联的代理商产品,是否继续?'); + $form->confirm('提示', '修改标题、价格、产品图片、旅游须知、产品详情、产品类型及信息需要重新审核,同时下架所有关联的代理商产品,是否继续?'); } })->saving(function (Form $form) { //不允许编辑非自己数据 @@ -107,7 +174,11 @@ class DemandProductController extends AdminController 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']); //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) { //不允许删除非自己的数据 diff --git a/database/migrations/2021_09_17_182618_update_demand_product_table.php b/database/migrations/2021_09_17_182618_update_demand_product_table.php new file mode 100644 index 0000000..eda8433 --- /dev/null +++ b/database/migrations/2021_09_17_182618_update_demand_product_table.php @@ -0,0 +1,32 @@ +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() + { + // + } +}