diff --git a/app/Admin/Controllers/AgentController.php b/app/Admin/Controllers/AgentController.php
index d5f5299..8fb23bb 100644
--- a/app/Admin/Controllers/AgentController.php
+++ b/app/Admin/Controllers/AgentController.php
@@ -169,9 +169,9 @@ class AgentController extends AdminController
}
}
- //分成比例
+ //抽成比例
if ($form->rate < 0 || $form->rate > 100) {
- return $form->response()->error('分成比例在 0 ~ 100 之间');
+ return $form->response()->error('抽成比例在 0 ~ 100 之间');
}
//不允许编辑的字段
diff --git a/app/Admin/Controllers/GuideController.php b/app/Admin/Controllers/GuideController.php
index fd90af5..071ac00 100644
--- a/app/Admin/Controllers/GuideController.php
+++ b/app/Admin/Controllers/GuideController.php
@@ -123,9 +123,9 @@ class GuideController extends AdminController
}
}
- //分成比例
+ //抽成比例
if ($form->rate < 0 || $form->rate > 100) {
- return $form->response()->error('分成比例在 0 ~ 100 之间');
+ return $form->response()->error('抽成比例在 0 ~ 100 之间');
}
//不允许编辑的字段
diff --git a/app/Admin/Controllers/SupplierController.php b/app/Admin/Controllers/SupplierController.php
index 3f0efd0..0dbe5dc 100644
--- a/app/Admin/Controllers/SupplierController.php
+++ b/app/Admin/Controllers/SupplierController.php
@@ -130,7 +130,7 @@ class SupplierController extends AdminController
$form->select('status', '状态')
->options(UserStatus::array())
->default(UserStatus::NORMAL)
- ->help('如果禁用供应商将同时下架供应商的所有产品,需要供应商手动上架后才能销售,请谨慎!')
+ ->help('如果禁用供应商,其下的所有产品都会跟着下架,包括代理商在售的产品')
->required();
$form->text('company_name');
$form->image('logo')->removable(false)->uniqueName();
diff --git a/app/AdminAgent/Controllers/AgentProductController.php b/app/AdminAgent/Controllers/AgentProductController.php
index a3c04dc..9d600ef 100644
--- a/app/AdminAgent/Controllers/AgentProductController.php
+++ b/app/AdminAgent/Controllers/AgentProductController.php
@@ -413,7 +413,11 @@ class AgentProductController extends AdminController
['is_cloud', '=', 1],
['type', '=', 1],
['agent_id', '<>', Admin::user()->id],
- ])->find($form->agent_cloud_pid);
+ ])->whereDoesntHave('agentProductItem', function ($query) {
+ return $query->whereHas('product', function ($query) {
+ return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE);
+ });
+ })->find($form->agent_cloud_pid);
if (!$cloud_product) {
return $form->response()->error('你选择的组团云产品库存不足或已下架,请重新选择');
diff --git a/app/AdminAgent/Renderable/SelectAgentCloudProduct.php b/app/AdminAgent/Renderable/SelectAgentCloudProduct.php
index 18cf4fb..acb45fe 100644
--- a/app/AdminAgent/Renderable/SelectAgentCloudProduct.php
+++ b/app/AdminAgent/Renderable/SelectAgentCloudProduct.php
@@ -30,7 +30,12 @@ class SelectAgentCloudProduct extends LazyRenderable
['is_cloud', '=', 1],
['type', '=', 1],
['agent_id', '<>', Admin::user()->id],
- ]);
+ ])->whereDoesntHave('agentProductItem', function ($query) {
+ return $query->whereHas('product', function ($query) {
+ return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE);
+ });
+ });
+
$grid->quickSearch(['title'])->placeholder('搜索产品名称');
diff --git a/app/AdminAgent/Renderable/SelectAgentProduct.php b/app/AdminAgent/Renderable/SelectAgentProduct.php
index d29861f..51f7807 100644
--- a/app/AdminAgent/Renderable/SelectAgentProduct.php
+++ b/app/AdminAgent/Renderable/SelectAgentProduct.php
@@ -25,7 +25,12 @@ class SelectAgentProduct extends LazyRenderable
$grid->disableBatchActions();
$grid->model()->where('stock', '>', 0)
- ->where(['agent_id' => Admin::user()->id, 'status' => ProductStatus::ON_SALE]);
+ ->where(['agent_id' => Admin::user()->id, 'status' => ProductStatus::ON_SALE])
+ ->whereDoesntHave('agentProductItem', function ($query) {
+ return $query->whereHas('product', function ($query) {
+ return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE);
+ });
+ });
$grid->quickSearch(['title'])->placeholder('搜索产品名称');
$grid->column('id');
diff --git a/app/AdminSupplier/Controllers/ProductController.php b/app/AdminSupplier/Controllers/ProductController.php
index 0a54671..8126d08 100644
--- a/app/AdminSupplier/Controllers/ProductController.php
+++ b/app/AdminSupplier/Controllers/ProductController.php
@@ -6,7 +6,6 @@ use App\AdminSupplier\Repositories\Product;
use App\Common\ProductStatus;
use App\Models\AgentProduct;
use App\Models\AgentProductItem;
-use App\Models\AgentSetting;
use App\Models\Category;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
@@ -14,11 +13,9 @@ use Dcat\Admin\Form\NestedForm;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
-use Dcat\Admin\Widgets\Alert;
use Dcat\Admin\Widgets\Card;
use Dcat\Admin\Widgets\Table;
use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Log;
class ProductController extends AdminController
{
@@ -31,21 +28,10 @@ class ProductController extends AdminController
protected function grid()
{
return Grid::make(new Product(['category:id,name']), function (Grid $grid) {
- $type = request()->input('type');
-
- if (isset($type) && isset(admin_trans('product.options.publish_type')[$type])) {
- $grid->model()->where(['supplier_id' => Admin::user()->id, 'type' => $type]);
- Admin::script('$(function(){
- $(".pull-right a").each(function() {
- var href = $(this).attr("href");
- $(this).attr("href", href + "?type='.$type.'")
- });
- });');
- } else {
- $grid->model()->where('supplier_id', Admin::user()->id);
- }
+ $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('picture')->image('', 60, 60);
@@ -62,6 +48,7 @@ class ProductController extends AdminController
$filter->panel();
$filter->equal('id')->width(2);
+ $filter->equal('type')->select(admin_trans('product.options.publish_type'))->width(2);
});
});
}
@@ -76,13 +63,6 @@ class ProductController extends AdminController
protected function detail($id)
{
return Show::make($id, new Product(), function (Show $show) {
- Admin::script('$(function(){
- $(".pull-right a").each(function() {
- var href = $(this).attr("href");
- $(this).attr("href", href + "?type='.request()->input('type').'")
- });
- });');
-
$show->field('id');
$show->field('supplier_id');
$show->field('category_id');
@@ -124,24 +104,15 @@ class ProductController extends AdminController
*/
protected function form()
{
+ Form\Field\Map::requireAssets(); //地图
Admin::user()->publish_type = json_decode(Admin::user()->publish_type, true);
return Form::make(new Product(), function (Form $form) {
- Admin::script('$(function(){
- $(".pull-right a").each(function() {
- var href = $(this).attr("href");
- $(this).attr("href", href + "?type='.request()->input('type').'")
- });
- });');
-
//不允许编辑非自己数据
if ($form->isEditing() && $form->model()->supplier_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
}
- $type = request()->input('type');
-
$form->display('id');
- $form->hidden('type')->value($type);
$options = Category::selectOptions(fn($query) => $query->where('agent_id', 0));
$form->select('category_id')->options(array_slice($options, 1, null, true))->required();
@@ -155,64 +126,67 @@ class ProductController extends AdminController
$form->text('verify_mobile','核销员手机');
//扩展字段
- if ($type == 0) { //旅游线路
- $form->table('extends.project', '包含项目', function (NestedForm $table) {
- $table->text('name', '项目名称');
- $table->text('num', '数量');
- $table->text('price', '费用');
- });
- $form->dateRange('extends.date.start', 'extends.date.end', '行程时间');
- } else if ($type == 1) { //酒店
- $default = ['行李寄存', '24小时前台', '前台保险柜', '唤醒服务', '早餐', '送餐服务', '电梯', '空调',
- '新风系统', '24小时热水', '吹风机', '加湿器', '自动售货机', '健身房', '桌球室', '洗衣服务'];
- $form->table('extends.tags', '酒店设施', function (NestedForm $table) {
- $table->text('tag', '包含项目')->placeholder('如:24小时热水、干洗服务等');
- });
- } else if ($type == 2) { //景区
- $form->table('extends.open_time', '开放时间', function (NestedForm $table) {
- $table->text('week', '星期')->placeholder('如:周一至周五');
- $table->text('section', '时段')->placeholder('如:上午/下午');
- $table->text('time', '时间')->placeholder('如:08:00~18:00');
- });
- $form->table('extends.project', '包含项目', function (NestedForm $table) {
- $table->text('name', '项目名称');
- $table->text('num', '数量');
- $table->text('price', '费用');
- });
- } else if ($type == 3) { //餐厅
- $form->table('extends.open_time', '开放时间', function (NestedForm $table) {
- $table->text('week', '星期')->placeholder('如:周一至周五');
- $table->text('section', '时段')->placeholder('如:上午/下午');
- $table->text('time', '时间')->placeholder('如:08:00~18:00');
- });
- $form->table('extends.package', '包含套餐', function (NestedForm $table) {
- $table->text('name', '名称')->placeholder('如:清蒸鱿鱼');
- $table->text('num', '数量')->placeholder('如:1条');
- $table->text('price', '价格')->placeholder('如:99元');
+ $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', '项目名称');
+ $table->text('num', '数量');
+ $table->text('price', '费用');
+ });
+ $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);
+ $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', '节点')->placeholder('如:周一至周五');
+ $table->text('summer', '夏季')->placeholder('如:08:00~19:00');
+ $table->text('winter', '冬季')->placeholder('如:08:00~18:00');
+ });
+ $form->table('extends.field_2.project', '包含项目', function (NestedForm $table) {
+ $table->text('name', '项目名称');
+ $table->text('num', '数量');
+ $table->text('price', '费用');
+ });
+ $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', '星期')->placeholder('如:周一至周五');
+ $table->text('section', '时段')->placeholder('如:上午/下午');
+ $table->text('time', '时间')->placeholder('如:08:00~18:00');
+ });
+ $form->table('extends.field_3.package', '包含套餐', function (NestedForm $table) {
+ $table->text('name', '名称')->placeholder('如:清蒸鱿鱼');
+ $table->text('num', '数量')->placeholder('如:1条');
+ $table->text('price', '价格')->placeholder('如:99元');
+ });
+ $form->map('extends.field_3.latitude', 'extends.field_3.longitude', '位置');
});
- }
if ($form->isEditing()) {
$form->confirm('提示', '修改标题、价格、产品图片、旅游须知、产品详情需要重新审核,同时下架所有关联的代理商产品,是否继续?');
}
- })->creating(function (Form $form) {
- $type = request()->input('type');
- if ($form->isCreating()) {
- if ($type == null) {
- Admin::exit('请选择要发布的产品类型');
- }
- if (!Admin::user()->publish_type || !in_array($type, Admin::user()->publish_type)) {
- Admin::exit(Alert::make('对不起,你没有此类产品的发布权限', '权限不足')->danger());
- }
- }
})->saving(function (Form $form) {
//不允许编辑非自己数据
if ($form->isEditing() && $form->model()->supplier_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
}
- $type = $form->isCreating() ? $form->type : $form->model()->type;
- if (!Admin::user()->publish_type || !in_array($type, Admin::user()->publish_type)) {
+ if (!Admin::user()->publish_type || !in_array($form->type, Admin::user()->publish_type)) {
return $form->response()->error('对不起,你没有此类产品的发布、编辑权限');
}
diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php
index f13be9c..4390758 100644
--- a/app/Http/Controllers/Api/AgentProductController.php
+++ b/app/Http/Controllers/Api/AgentProductController.php
@@ -5,6 +5,7 @@ use App\Common\ProductStatus;
use App\Http\Controllers\Controller;
use App\Models\Advertising;
use App\Models\AgentProduct;
+use App\Models\Product;
use App\Models\UserFav;
use Illuminate\Support\Facades\Storage;
@@ -59,8 +60,7 @@ class AgentProductController extends Controller
// TODO 优惠券查询待优化
$agent_product = AgentProduct::query()
- ->with('coupon:tag,agent_product_id')
- ->with('fav:agent_product_id')
+ ->with(['coupon:tag,agent_product_id', 'fav:agent_product_id'])
->whereDoesntHave('agentProductItem', function ($query) {
return $query->whereHas('product', function ($query) {
return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE);
@@ -85,6 +85,13 @@ class AgentProductController extends Controller
$agent_product->cost = '';
}
+ //如果是单品销售,显示附加信息字段,组合产品和组团产品不显示
+ if ($agent_product->type == 0) {
+ $agent_product->product = Product::query()->where('id', $agent_product->product_id)->first(['type', 'extends']);
+ } else {
+ $agent_product->product = null;
+ }
+
unset($agent_product->agent_id, $agent_product->status, $agent_product->deleted_at);
return $this->success($agent_product);
}
diff --git a/config/admin-supplier.php b/config/admin-supplier.php
index da01013..8a9c1fc 100644
--- a/config/admin-supplier.php
+++ b/config/admin-supplier.php
@@ -343,4 +343,12 @@ return [
| Whether enable default breadcrumb for every page content.
*/
'enable_default_breadcrumb' => true,
+
+ //地图配置
+ 'map_provider' => 'tencent',
+ 'map' => [
+ 'keys' => [
+ 'tencent' => env('TENCENT_MAP_KEY','')
+ ]
+ ]
];
diff --git a/resources/lang/zh_CN/agent.php b/resources/lang/zh_CN/agent.php
index 5027c61..d48df6f 100644
--- a/resources/lang/zh_CN/agent.php
+++ b/resources/lang/zh_CN/agent.php
@@ -21,7 +21,7 @@ return [
'license_pic' => '营业执照',
'director' => '负责人',
'contact_phone' => '联系电话',
- 'rate' => '分成比例',
+ 'rate' => '抽成比例',
'agentInfo' => trans('agent-info.fields'),
],
'options' => [
diff --git a/resources/lang/zh_CN/guide.php b/resources/lang/zh_CN/guide.php
index 29d3889..a5eb6f6 100644
--- a/resources/lang/zh_CN/guide.php
+++ b/resources/lang/zh_CN/guide.php
@@ -13,7 +13,7 @@ return [
'license_pic' => '地接资格证件',
'contact_phone' => '联系电话',
'status' => '状态',
- 'rate' => '分成比例',
+ 'rate' => '抽成比例',
],
'options' => [
],
diff --git a/resources/lang/zh_CN/supplier.php b/resources/lang/zh_CN/supplier.php
index fbaab4f..ec5030b 100644
--- a/resources/lang/zh_CN/supplier.php
+++ b/resources/lang/zh_CN/supplier.php
@@ -15,7 +15,7 @@ return [
'license_pic' => '营业执照',
'director' => '负责人',
'contact_phone' => '联系电话',
- 'rate' => '分成比例',
+ 'rate' => '抽成比例',
'publish_type' => '可发布产品类型',
],
'options' => [