From d9bdf77196f6529fa570f90eed4dffc71e1f7d87 Mon Sep 17 00:00:00 2001 From: liapples Date: Fri, 3 Sep 2021 17:35:11 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=81=94=E7=B3=BB=E4=BA=BA=E5=92=8C=E7=94=B5?= =?UTF-8?q?=E8=AF=9D=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/OrderController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index 9df1145..cb79d1e 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -387,7 +387,7 @@ class OrderController extends Controller { $id = (int)request()->input('id'); - $fields = ['id', 'agent_id', 'order_no', 'agent_product_id', 'num', 'price', 'title', 'picture', 'status', + $fields = ['id', 'agent_id', 'order_no', 'agent_product_id', 'num', 'price', 'name', 'mobile', 'title', 'picture', 'status', 'pay_type', 'coupon_id', 'paid_money', 'paid_at', 'refund_info', 'verify_code', 'created_at']; $order = Order::with('agent:id,appid,appsecret') ->where('user_id', $this->user_id) From df5c426a91a1487241c25f27237f1b72da2e5926 Mon Sep 17 00:00:00 2001 From: liapples Date: Fri, 3 Sep 2021 17:41:19 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0pay=5Ftype=5Ftext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/Order.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Models/Order.php b/app/Models/Order.php index f4b13cf..0b31746 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Common\PayType; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\SoftDeletes; use App\Common\OrderStatus as Status; @@ -28,6 +29,17 @@ class Order extends BaseModel return Status::array()[$this->attributes['status']] ?? '未知'; } + public function getPayTypeAttribute($value) + { + $this->append('pay_type_text'); + return $value; + } + + public function getPayTypeTextAttribute() + { + return PayType::array()[$this->attributes['pay_type']] ?? '未知'; + } + //退款信息 public function getRefundInfoAttribute($value): array { From a51deabab8602854655049ede0f74c67654e8e41 Mon Sep 17 00:00:00 2001 From: liapples Date: Fri, 3 Sep 2021 18:16:54 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E7=BB=84=E5=9B=A2=E4=BA=91=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=8F=91=E5=B8=83=E7=9A=84=E7=9B=B8=E5=85=B3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AgentProductController.php | 183 ++++++++++-------- 1 file changed, 106 insertions(+), 77 deletions(-) diff --git a/app/AdminAgent/Controllers/AgentProductController.php b/app/AdminAgent/Controllers/AgentProductController.php index 067d52d..84989a2 100644 --- a/app/AdminAgent/Controllers/AgentProductController.php +++ b/app/AdminAgent/Controllers/AgentProductController.php @@ -19,7 +19,6 @@ use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Show; use Dcat\Admin\Http\Controllers\AdminController; -use Dcat\Admin\Widgets\Alert; class AgentProductController extends AdminController { @@ -75,7 +74,9 @@ class AgentProductController extends AdminController ->switch() ->else() ->using(ProductStatus::array()); - $grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示'); + if (Admin::user()->type != AgentType::CLUSTER) { + $grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示'); + } $grid->column('updated_at'); $grid->filter(function (Grid\Filter $filter) { @@ -102,7 +103,7 @@ class AgentProductController extends AdminController */ protected function detail($id) { - return Show::make($id, new AgentProduct(['agent:id,name', 'product.supplier:id,name', 'user:id,nickname', 'guide:id,name']), function (Show $show) { + return Show::make($id, new AgentProduct(['agent:id,name', 'category:id,name', 'product.supplier:id,name', 'guide:id,name']), function (Show $show) { //不允许查看非自己的数据 if ($show->model()->agent_id != Admin::user()->id) { Admin::exit('数据不存在'); @@ -115,26 +116,27 @@ class AgentProductController extends AdminController $show->field('original_price'); $show->field('sale'); $show->field('stock'); - $show->field('channel_id'); - $show->field('category_id'); + $show->field('category.name', '分类'); $show->field('status')->using(ProductStatus::array()); - $show->field('verifier.nickname', '核销人员'); if (Admin::user()->type == AgentType::CLUSTER) { $show->field('guide.name', '地接'); } - $show->field('is_rec')->using(['未推荐', '已推荐']); $show->field('title'); $show->field('pictures')->image('', 80, 80); $show->field('know')->unescape(); $show->field('content')->unescape(); - $show->field('earnest'); - $show->field('earnest_timeout'); - $show->field('deposit'); - $show->field('deposit_timeout'); + if (Admin::user()->type != AgentType::CLUSTER) { + $show->field('is_rec')->using(['未推荐', '已推荐']); + $show->field('channel_id'); + $show->field('earnest'); + $show->field('earnest_timeout'); + $show->field('deposit'); + $show->field('deposit_timeout'); + } $show->field('created_at'); $show->field('updated_at'); - $show->html(Alert::make(null, '供应商产品详情')->info()); + /*$show->html(Alert::make(null, '供应商产品详情')->info()); 因为可能是组合销售多个产品,这里暂时不显示 $show->field('product.id', '供应商产品ID'); $show->field('product.supplier.name'); @@ -145,7 +147,7 @@ class AgentProductController extends AdminController $show->field('product.sale'); $show->field('product.stock'); $show->field('product.created_at', '创建时间'); - $show->field('product.updated_at', '更新时间'); + $show->field('product.updated_at', '更新时间');*/ }); } @@ -166,55 +168,63 @@ class AgentProductController extends AdminController $form->display('id'); //组团版旅行社不允许选择组团云产品 - $options = Admin::user()->type == AgentType::CLUSTER ? [1 => '组合销售'] : ['单品销售', '组合销售', '组团云产品']; - $form->radio('type') - ->options($options) - ->default(Admin::user()->type == AgentType::CLUSTER ? 1 : 0)->required() - ->help('单品销售无需审核,组合销售需要审核才能上架') - ->when(0, function (Form $form) { - //组团版没有单品选择功能 - if (Admin::user()->type == AgentType::CLUSTER) return; - - /** 单品销售 **/ - $form->selectTable('product_id', '供应商产品') - ->help('产品列表显示的是该产品的标题和图片') - ->title('选择产品') - ->dialogWidth('80%;min-width:825px;') - ->from(SelectProduct::make()) - ->model(Product::class); - })->when(1, function (Form $form) { - /** 组合销售 **/ - $form->multipleSelectTable('product_ids', '供应商产品') - ->help('可单选或多选组合销售') - ->title('选择产品') - ->dialogWidth('80%;min-width:825px;') - ->from(SelectProduct::make()) - ->model(Product::class); - - /** 自定义内容 **/ - $form->text('title'); - $form->multipleImage('pictures')->removable(false)->uniqueName(); - $form->editor('know'); - $form->editor('content'); - })->when(2, function (Form $form) { - //组团版旅行社不允许选择组团云产品 - if (Admin::user()->type == AgentType::CLUSTER) return; - - /** 组团云产品 **/ - $form->selectTable('agent_cloud_pid', '组团云产品') - ->help('产品列表显示的是该产品的标题和图片') - ->title('选择产品') - ->dialogWidth('80%;min-width:825px;') - ->from(SelectAgentCloudProduct::make()) - ->model(Product::class); - }); - $form->text('price')->required(); - $form->text('original_price')->required(); - $form->text('sale')->default(0); - $form->text('stock')->default(8888)->required(); - - $options = Channel::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); - $form->multipleSelect('channel_id')->options(array_slice($options, 1, null, true)); + if (Admin::user()->type == AgentType::CLUSTER) { + $form->hidden('product_id')->value(0)->default(0); + $form->hidden('type')->value(1)->default(1); + /** 组合销售 **/ + $form->multipleSelectTable('product_ids', '供应商产品') + ->help('请选择两个或两个以上的产品组合销售') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectProduct::make()) + ->model(Product::class); + + /** 自定义内容 **/ + $form->text('title'); + $form->multipleImage('pictures')->removable(false)->uniqueName(); + $form->editor('know'); + $form->editor('content'); + } else { + $form->radio('type') + ->options(['单品销售', '组合销售', '组团云产品']) + ->default(Admin::user()->type == AgentType::CLUSTER ? 1 : 0)->required() + ->help('单品销售无需审核,组合销售需要审核才能上架') + ->when(0, function (Form $form) { + /** 单品销售 **/ + $form->selectTable('product_id', '供应商产品') + ->help('产品列表显示的是该产品的标题和图片') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectProduct::make()) + ->model(Product::class); + })->when(1, function (Form $form) { + /** 组合销售 **/ + $form->multipleSelectTable('product_ids', '供应商产品') + ->help('可单选或多选组合销售') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectProduct::make()) + ->model(Product::class); + + /** 自定义内容 **/ + $form->text('title'); + $form->multipleImage('pictures')->removable(false)->uniqueName(); + $form->editor('know'); + $form->editor('content'); + })->when(2, function (Form $form) { + /** 组团云产品 **/ + $form->selectTable('agent_cloud_pid', '组团云产品') + ->help('产品列表显示的是该产品的标题和图片') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectAgentCloudProduct::make()) + ->model(\App\Models\AgentProduct::class); + }); + } + $form->number('price')->min(0)->required(); + $form->number('original_price')->min(0)->required(); + $form->number('sale')->min(0)->default(0); + $form->number('stock')->min(0)->default(8888)->required(); $options = Category::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); $form->select('category_id') @@ -232,7 +242,6 @@ class AgentProductController extends AdminController ]) ->required(); } - $form->switch('is_rec')->help('推荐后将在小程序“我的”页面下方显示'); //$form->selectTable('verifier') // ->title('选择核销人员') // ->dialogWidth('50%;min-width:600px;') //不起作用 @@ -248,16 +257,22 @@ class AgentProductController extends AdminController ->dialogWidth('50%;min-width:600px;') //不起作用 ->from(SelectGuide::make()) ->model(Guide::class, 'id', 'name'); + $form->confirm('提示', '如果修改了标题、价格、产品图片、旅游须知、产品详情需要重新审核,同时下架所有关联的代理商产品,是否继续?'); + } else { + $form->switch('is_rec')->help('推荐后将在小程序“我的”页面下方显示'); + + $options = Channel::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); + $form->multipleSelect('channel_id')->options(array_slice($options, 1, null, true)); + + $form->number('earnest')->min(0) + ->default(0)->help('单位:元。不输入或输入 0 则不支持定金支付,必须和定金超时时间同时设置才会生效'); + $form->number('earnest_timeout')->min(0) + ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); + $form->number('deposit')->min(0) + ->default(0)->help('单位:元。不输入或输入 0 则不支持订金支付,必须和订金超时时间同时设置才会生效'); + $form->number('deposit_timeout')->min(0) + ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); } - - $form->number('earnest')->min(0) - ->default(0)->help('单位:元。不输入或输入 0 则不支持定金支付,必须和定金超时时间同时设置才会生效'); - $form->number('earnest_timeout')->min(0) - ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); - $form->number('deposit')->min(0) - ->default(0)->help('单位:元。不输入或输入 0 则不支持订金支付,必须和订金超时时间同时设置才会生效'); - $form->number('deposit_timeout')->min(0) - ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); })->saving(function (Form $form) { //不允许修改非自己的数据 if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { @@ -292,6 +307,15 @@ class AgentProductController extends AdminController if (in_array($form->model()->status, [ProductStatus::UNAUDITED, ProductStatus::REFUSE])) { return $form->response()->error('产品待审核或审核拒绝,不允许修改!'); } + + //组团云产品处理 + if ($form->type == 2) { + $cloud_product = AgentProduct::find($form->agent_cloud_pid); + if (!$cloud_product || $cloud_product->status != ProductStatus::ON_SALE) { + return $form->response()->error('你选择的组团云产品状态异常,上架失败!'); + } + } + $form->model()->status = $form->status == 1 ? ProductStatus::ON_SALE : ProductStatus::SOLD_OUT; $form->model()->save(); return $form->response()->success('更新成功!'); @@ -480,11 +504,10 @@ class AgentProductController extends AdminController } } - //如果是组团云产品,同步信息到其它产品 + //如果是组团云产品,且处于上架状态,同步信息到其它产品,否则下架所有关联的产品 if ($form->is_cloud) { - \App\Models\AgentProduct::query() - ->where(['agent_cloud_pid' => $form->getKey(), 'type' => 2]) - ->update([ + if ($form->status == ProductStatus::ON_SALE) { + $data = [ 'product_id' => $form->product_id, 'product_ids' => $form->product_ids, 'guide_id' => $form->guide_id, @@ -492,7 +515,13 @@ class AgentProductController extends AdminController 'pictures' => explode(',', $form->pictures), 'know' => $form->know, 'content' => $form->content, - ]); + ]; + } else { + $data = ['status' => ProductStatus::SOLD_OUT]; + } + \App\Models\AgentProduct::query() + ->where(['agent_cloud_pid' => $form->getKey(), 'type' => 2]) + ->update($data); } })->deleting(function (Form $form) { //不允许删除非自己的数据 From 72c611d8f77c26b0dffdf052e9993636cd228e7a Mon Sep 17 00:00:00 2001 From: liapples Date: Fri, 3 Sep 2021 19:12:05 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=84=E5=9B=A2?= =?UTF-8?q?=E7=89=88=E6=97=85=E8=A1=8C=E7=A4=BE=E8=AE=A2=E5=8D=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MySQL_change.sql | 8 + .../Controllers/GroupOrderController.php | 121 +++++ .../Controllers/OrderController.php | 5 +- app/AdminAgent/routes.php | 1 + app/Models/Order.php | 11 + dcat_admin_ide_helper.php | 472 +++++++++--------- resources/lang/zh_CN/order.php | 2 + 7 files changed, 388 insertions(+), 232 deletions(-) create mode 100644 app/AdminAgent/Controllers/GroupOrderController.php diff --git a/MySQL_change.sql b/MySQL_change.sql index 5b00304..b725cd8 100644 --- a/MySQL_change.sql +++ b/MySQL_change.sql @@ -249,3 +249,11 @@ ALTER TABLE `agent_products` ADD COLUMN `agent_cloud_pid` INT(10) NOT NULL DEFAULT '0' COMMENT '组团版旅行社的云产品ID' AFTER `is_cloud`, ADD INDEX `agent_cloud_pid` (`agent_cloud_pid`); UPDATE `agent_products` ap SET `is_cloud`=1 WHERE EXISTS(SELECT 1 FROM `agents` WHERE `id`=ap.`agent_id` AND `type`=3); + +# 18:15 2021/9/3 +ALTER TABLE `orders` + ADD COLUMN `agent_cloud_pid` INT NOT NULL DEFAULT 0 COMMENT '组团云产品ID' AFTER `verify_code`, + ADD COLUMN `agent_cloud_price` DECIMAL(20,2) NOT NULL DEFAULT '0' COMMENT '组团云产品销售价格' AFTER `agent_cloud_pid`, + ADD INDEX `agent_cloud_pid` (`agent_cloud_pid`); + + diff --git a/app/AdminAgent/Controllers/GroupOrderController.php b/app/AdminAgent/Controllers/GroupOrderController.php new file mode 100644 index 0000000..752ae70 --- /dev/null +++ b/app/AdminAgent/Controllers/GroupOrderController.php @@ -0,0 +1,121 @@ +disableDeleteButton(); + $grid->disableBatchDelete(); + $grid->disableCreateButton(); + $grid->disableRowSelector(); + $grid->disableEditButton(); + + $grid->model()->whereHas('agentCloud', function ($query) { + return $query->where('agent_id', Admin::user()->id); + }); + + $grid->column('id')->sortable(); + $grid->column('order_no')->limit(10); + $grid->column('name'); + $grid->column('mobile'); + $grid->column('title'); + $grid->column('picture')->image('', 60, 60); + $grid->column('agent_cloud_pid', '产品ID'); + $grid->column('agent_cloud_price', '售价'); + $grid->column('guide.name', '地接名称')->display(fn() => $this->guide->name); + $grid->column('guide.contact_phone', '地接电话')->display(fn() => $this->guide->contact_phone); + $grid->column('paid_at'); + $grid->column('paid_money'); + $grid->column('pay_type')->using(PayType::array()); + $grid->column('price'); + $grid->column('status')->using(OrderStatus::array()); + $grid->column('created_at'); + + $grid->filter(function (Grid\Filter $filter) { + $filter->panel(); + + $filter->equal('id')->width(2); + $filter->equal('mobile')->width(2); + $filter->equal('order_no')->width(3); + $filter->equal('status')->select(OrderStatus::array())->width(2); + + $option = Supplier::query()->pluck('name', 'id'); + $filter->equal('product.supplier_id', '供应商')->select($option)->width(3); + + $filter->between('created_at')->datetime()->width(4); + }); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + return Show::make($id, new Order(['guide:id,name']), function (Show $show) { + $show->disableDeleteButton(); + $show->disableEditButton(); + + $show->field('id'); + $show->field('order_no'); + $show->field('name'); + $show->field('mobile'); + $show->field('title'); + $show->field('picture')->image('', 80, 80); + $show->field('agent_cloud_pid'); + $show->field('agent_cloud_price'); + $show->field('guide.name', '地接名称')->as(fn() => $this->guide->name); + $show->field('guide.contact_phone', '地接电话')->as(fn() => $this->guide->contact_phone); + $show->field('paid_at'); + $show->field('paid_money'); + $show->field('pay_type')->using(PayType::array()); + $show->field('price'); + $show->field('status')->using(OrderStatus::array()); + $show->field('created_at'); + $show->field('updated_at'); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new Order(), function (Form $form) { + $form->disableDeleteButton(); + + $form->display('id'); + })->saving(function (Form $form) { + return $form->response()->error('操作禁止'); + })->deleting(function (Form $form) { + return $form->response()->error('操作禁止'); + }); + } +} diff --git a/app/AdminAgent/Controllers/OrderController.php b/app/AdminAgent/Controllers/OrderController.php index 12771c5..ad82ced 100644 --- a/app/AdminAgent/Controllers/OrderController.php +++ b/app/AdminAgent/Controllers/OrderController.php @@ -8,7 +8,6 @@ use App\AdminAgent\Repositories\Order; use App\Common\OrderStatus; use App\Common\PayType; use App\Models\OrderProductItem; -use App\Models\Product; use App\Models\Supplier; use Dcat\Admin\Admin; use Dcat\Admin\Form; @@ -27,7 +26,7 @@ class OrderController extends AdminController */ protected function grid() { - return Grid::make(new Order(['agent:id,name', 'product']), function (Grid $grid) { + return Grid::make(new Order(['product']), function (Grid $grid) { $grid->disableDeleteButton(); $grid->disableBatchDelete(); $grid->disableCreateButton(); @@ -112,8 +111,6 @@ class OrderController extends AdminController $grid->filter(function (Grid\Filter $filter) { $filter->panel(); - $filter->model()->where('agent_id', Admin::user()->id); - $filter->equal('id')->width(2); $filter->equal('mobile')->width(2); $filter->equal('order_no')->width(3); diff --git a/app/AdminAgent/routes.php b/app/AdminAgent/routes.php index 1f98d86..c375c7d 100644 --- a/app/AdminAgent/routes.php +++ b/app/AdminAgent/routes.php @@ -36,5 +36,6 @@ Route::group([ $router->resource('article/list', 'ArticleController'); $router->resource('setting', 'SettingController'); $router->resource('channel/list', 'ChannelController'); + $router->resource('group_order/list', 'GroupOrderController'); $router->resource('finance_statistics', 'FinanceStatisticsController'); }); diff --git a/app/Models/Order.php b/app/Models/Order.php index 0b31746..d6ccb67 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -106,4 +106,15 @@ class Order extends BaseModel { return $this->hasMany(OrderProductItem::class); } + + public function guide() + { + return $this->belongsTo(Guide::class); + } + + //关联的组团云产品 + public function agentCloud() + { + return $this->belongsTo(AgentProduct::class, 'agent_cloud_pid', 'id'); + } } diff --git a/dcat_admin_ide_helper.php b/dcat_admin_ide_helper.php index c44c581..5ab0935 100644 --- a/dcat_admin_ide_helper.php +++ b/dcat_admin_ide_helper.php @@ -11,490 +11,506 @@ namespace Dcat\Admin { use Illuminate\Support\Collection; /** - * @property Grid\Column|Collection id * @property Grid\Column|Collection agent_id - * @property Grid\Column|Collection picture + * @property Grid\Column|Collection created_at + * @property Grid\Column|Collection desc + * @property Grid\Column|Collection id * @property Grid\Column|Collection name + * @property Grid\Column|Collection picture * @property Grid\Column|Collection tag - * @property Grid\Column|Collection desc - * @property Grid\Column|Collection created_at * @property Grid\Column|Collection updated_at - * @property Grid\Column|Collection product_id - * @property Grid\Column|Collection know * @property Grid\Column|Collection content + * @property Grid\Column|Collection know + * @property Grid\Column|Collection product_id + * @property Grid\Column|Collection detail * @property Grid\Column|Collection type * @property Grid\Column|Collection version - * @property Grid\Column|Collection detail * @property Grid\Column|Collection is_enabled - * @property Grid\Column|Collection parent_id - * @property Grid\Column|Collection order + * @property Grid\Column|Collection extension * @property Grid\Column|Collection icon + * @property Grid\Column|Collection order + * @property Grid\Column|Collection parent_id * @property Grid\Column|Collection uri - * @property Grid\Column|Collection extension - * @property Grid\Column|Collection permission_id * @property Grid\Column|Collection menu_id - * @property Grid\Column|Collection slug + * @property Grid\Column|Collection permission_id * @property Grid\Column|Collection http_method * @property Grid\Column|Collection http_path + * @property Grid\Column|Collection slug * @property Grid\Column|Collection role_id * @property Grid\Column|Collection user_id * @property Grid\Column|Collection value - * @property Grid\Column|Collection username - * @property Grid\Column|Collection password * @property Grid\Column|Collection avatar + * @property Grid\Column|Collection password * @property Grid\Column|Collection remember_token - * @property Grid\Column|Collection status + * @property Grid\Column|Collection username + * @property Grid\Column|Collection display * @property Grid\Column|Collection sort + * @property Grid\Column|Collection status * @property Grid\Column|Collection url - * @property Grid\Column|Collection display * @property Grid\Column|Collection about - * @property Grid\Column|Collection reg_protocol * @property Grid\Column|Collection buy_protocol - * @property Grid\Column|Collection supplier_id + * @property Grid\Column|Collection reg_protocol * @property Grid\Column|Collection agent_product_id - * @property Grid\Column|Collection product_ids - * @property Grid\Column|Collection price - * @property Grid\Column|Collection original_price - * @property Grid\Column|Collection sale - * @property Grid\Column|Collection stock - * @property Grid\Column|Collection channel_id + * @property Grid\Column|Collection supplier_id + * @property Grid\Column|Collection agent_cloud_pid * @property Grid\Column|Collection category_id - * @property Grid\Column|Collection guide_id - * @property Grid\Column|Collection verifier - * @property Grid\Column|Collection is_rec - * @property Grid\Column|Collection pictures + * @property Grid\Column|Collection channel_id + * @property Grid\Column|Collection deleted_at * @property Grid\Column|Collection deposit * @property Grid\Column|Collection deposit_timeout * @property Grid\Column|Collection earnest * @property Grid\Column|Collection earnest_timeout - * @property Grid\Column|Collection deleted_at + * @property Grid\Column|Collection guide_id + * @property Grid\Column|Collection is_cloud + * @property Grid\Column|Collection is_rec + * @property Grid\Column|Collection original_price + * @property Grid\Column|Collection pictures + * @property Grid\Column|Collection price + * @property Grid\Column|Collection product_ids + * @property Grid\Column|Collection sale + * @property Grid\Column|Collection stock + * @property Grid\Column|Collection verifier * @property Grid\Column|Collection setting + * @property Grid\Column|Collection address * @property Grid\Column|Collection appid * @property Grid\Column|Collection appsecret - * @property Grid\Column|Collection mchid - * @property Grid\Column|Collection mchkey * @property Grid\Column|Collection company_name - * @property Grid\Column|Collection logo - * @property Grid\Column|Collection address - * @property Grid\Column|Collection license_pic - * @property Grid\Column|Collection director * @property Grid\Column|Collection contact_phone + * @property Grid\Column|Collection director + * @property Grid\Column|Collection license_pic + * @property Grid\Column|Collection logo + * @property Grid\Column|Collection mchid + * @property Grid\Column|Collection mchkey * @property Grid\Column|Collection rate + * @property Grid\Column|Collection agent_product_ids * @property Grid\Column|Collection author * @property Grid\Column|Collection image - * @property Grid\Column|Collection agent_product_ids * @property Grid\Column|Collection pid * @property Grid\Column|Collection template - * @property Grid\Column|Collection start_at * @property Grid\Column|Collection end_at + * @property Grid\Column|Collection start_at + * @property Grid\Column|Collection bidding_id + * @property Grid\Column|Collection bidding_user_id + * @property Grid\Column|Collection bidding_user_type * @property Grid\Column|Collection comment * @property Grid\Column|Collection deadline - * @property Grid\Column|Collection publisher_type + * @property Grid\Column|Collection demand_product_id + * @property Grid\Column|Collection images * @property Grid\Column|Collection publisher_id + * @property Grid\Column|Collection publisher_type * @property Grid\Column|Collection state - * @property Grid\Column|Collection bidding_user_type - * @property Grid\Column|Collection bidding_user_id - * @property Grid\Column|Collection bidding_id - * @property Grid\Column|Collection images * @property Grid\Column|Collection demand_id - * @property Grid\Column|Collection uuid * @property Grid\Column|Collection connection - * @property Grid\Column|Collection queue - * @property Grid\Column|Collection payload * @property Grid\Column|Collection exception * @property Grid\Column|Collection failed_at + * @property Grid\Column|Collection payload + * @property Grid\Column|Collection queue + * @property Grid\Column|Collection uuid * @property Grid\Column|Collection photo - * @property Grid\Column|Collection order_id - * @property Grid\Column|Collection order_no * @property Grid\Column|Collection num - * @property Grid\Column|Collection mobile - * @property Grid\Column|Collection pay_type + * @property Grid\Column|Collection order_id + * @property Grid\Column|Collection agent_cloud_price * @property Grid\Column|Collection coupon_id - * @property Grid\Column|Collection paid_money + * @property Grid\Column|Collection mobile + * @property Grid\Column|Collection order_no * @property Grid\Column|Collection paid_at + * @property Grid\Column|Collection paid_money + * @property Grid\Column|Collection pay_type * @property Grid\Column|Collection refund_info - * @property Grid\Column|Collection verify_code * @property Grid\Column|Collection timeout + * @property Grid\Column|Collection verify_code * @property Grid\Column|Collection email * @property Grid\Column|Collection token * @property Grid\Column|Collection verify_mobile * @property Grid\Column|Collection channels * @property Grid\Column|Collection money * @property Grid\Column|Collection transaction_id - * @property Grid\Column|Collection nickname - * @property Grid\Column|Collection openid - * @property Grid\Column|Collection unionid - * @property Grid\Column|Collection country - * @property Grid\Column|Collection province * @property Grid\Column|Collection city + * @property Grid\Column|Collection country * @property Grid\Column|Collection gender - * @property Grid\Column|Collection language * @property Grid\Column|Collection is_verify + * @property Grid\Column|Collection language + * @property Grid\Column|Collection nickname + * @property Grid\Column|Collection openid + * @property Grid\Column|Collection province + * @property Grid\Column|Collection unionid * - * @method Grid\Column|Collection id(string $label = null) * @method Grid\Column|Collection agent_id(string $label = null) - * @method Grid\Column|Collection picture(string $label = null) + * @method Grid\Column|Collection created_at(string $label = null) + * @method Grid\Column|Collection desc(string $label = null) + * @method Grid\Column|Collection id(string $label = null) * @method Grid\Column|Collection name(string $label = null) + * @method Grid\Column|Collection picture(string $label = null) * @method Grid\Column|Collection tag(string $label = null) - * @method Grid\Column|Collection desc(string $label = null) - * @method Grid\Column|Collection created_at(string $label = null) * @method Grid\Column|Collection updated_at(string $label = null) - * @method Grid\Column|Collection product_id(string $label = null) - * @method Grid\Column|Collection know(string $label = null) * @method Grid\Column|Collection content(string $label = null) + * @method Grid\Column|Collection know(string $label = null) + * @method Grid\Column|Collection product_id(string $label = null) + * @method Grid\Column|Collection detail(string $label = null) * @method Grid\Column|Collection type(string $label = null) * @method Grid\Column|Collection version(string $label = null) - * @method Grid\Column|Collection detail(string $label = null) * @method Grid\Column|Collection is_enabled(string $label = null) - * @method Grid\Column|Collection parent_id(string $label = null) - * @method Grid\Column|Collection order(string $label = null) + * @method Grid\Column|Collection extension(string $label = null) * @method Grid\Column|Collection icon(string $label = null) + * @method Grid\Column|Collection order(string $label = null) + * @method Grid\Column|Collection parent_id(string $label = null) * @method Grid\Column|Collection uri(string $label = null) - * @method Grid\Column|Collection extension(string $label = null) - * @method Grid\Column|Collection permission_id(string $label = null) * @method Grid\Column|Collection menu_id(string $label = null) - * @method Grid\Column|Collection slug(string $label = null) + * @method Grid\Column|Collection permission_id(string $label = null) * @method Grid\Column|Collection http_method(string $label = null) * @method Grid\Column|Collection http_path(string $label = null) + * @method Grid\Column|Collection slug(string $label = null) * @method Grid\Column|Collection role_id(string $label = null) * @method Grid\Column|Collection user_id(string $label = null) * @method Grid\Column|Collection value(string $label = null) - * @method Grid\Column|Collection username(string $label = null) - * @method Grid\Column|Collection password(string $label = null) * @method Grid\Column|Collection avatar(string $label = null) + * @method Grid\Column|Collection password(string $label = null) * @method Grid\Column|Collection remember_token(string $label = null) - * @method Grid\Column|Collection status(string $label = null) + * @method Grid\Column|Collection username(string $label = null) + * @method Grid\Column|Collection display(string $label = null) * @method Grid\Column|Collection sort(string $label = null) + * @method Grid\Column|Collection status(string $label = null) * @method Grid\Column|Collection url(string $label = null) - * @method Grid\Column|Collection display(string $label = null) * @method Grid\Column|Collection about(string $label = null) - * @method Grid\Column|Collection reg_protocol(string $label = null) * @method Grid\Column|Collection buy_protocol(string $label = null) - * @method Grid\Column|Collection supplier_id(string $label = null) + * @method Grid\Column|Collection reg_protocol(string $label = null) * @method Grid\Column|Collection agent_product_id(string $label = null) - * @method Grid\Column|Collection product_ids(string $label = null) - * @method Grid\Column|Collection price(string $label = null) - * @method Grid\Column|Collection original_price(string $label = null) - * @method Grid\Column|Collection sale(string $label = null) - * @method Grid\Column|Collection stock(string $label = null) - * @method Grid\Column|Collection channel_id(string $label = null) + * @method Grid\Column|Collection supplier_id(string $label = null) + * @method Grid\Column|Collection agent_cloud_pid(string $label = null) * @method Grid\Column|Collection category_id(string $label = null) - * @method Grid\Column|Collection guide_id(string $label = null) - * @method Grid\Column|Collection verifier(string $label = null) - * @method Grid\Column|Collection is_rec(string $label = null) - * @method Grid\Column|Collection pictures(string $label = null) + * @method Grid\Column|Collection channel_id(string $label = null) + * @method Grid\Column|Collection deleted_at(string $label = null) * @method Grid\Column|Collection deposit(string $label = null) * @method Grid\Column|Collection deposit_timeout(string $label = null) * @method Grid\Column|Collection earnest(string $label = null) * @method Grid\Column|Collection earnest_timeout(string $label = null) - * @method Grid\Column|Collection deleted_at(string $label = null) + * @method Grid\Column|Collection guide_id(string $label = null) + * @method Grid\Column|Collection is_cloud(string $label = null) + * @method Grid\Column|Collection is_rec(string $label = null) + * @method Grid\Column|Collection original_price(string $label = null) + * @method Grid\Column|Collection pictures(string $label = null) + * @method Grid\Column|Collection price(string $label = null) + * @method Grid\Column|Collection product_ids(string $label = null) + * @method Grid\Column|Collection sale(string $label = null) + * @method Grid\Column|Collection stock(string $label = null) + * @method Grid\Column|Collection verifier(string $label = null) * @method Grid\Column|Collection setting(string $label = null) + * @method Grid\Column|Collection address(string $label = null) * @method Grid\Column|Collection appid(string $label = null) * @method Grid\Column|Collection appsecret(string $label = null) - * @method Grid\Column|Collection mchid(string $label = null) - * @method Grid\Column|Collection mchkey(string $label = null) * @method Grid\Column|Collection company_name(string $label = null) - * @method Grid\Column|Collection logo(string $label = null) - * @method Grid\Column|Collection address(string $label = null) - * @method Grid\Column|Collection license_pic(string $label = null) - * @method Grid\Column|Collection director(string $label = null) * @method Grid\Column|Collection contact_phone(string $label = null) + * @method Grid\Column|Collection director(string $label = null) + * @method Grid\Column|Collection license_pic(string $label = null) + * @method Grid\Column|Collection logo(string $label = null) + * @method Grid\Column|Collection mchid(string $label = null) + * @method Grid\Column|Collection mchkey(string $label = null) * @method Grid\Column|Collection rate(string $label = null) + * @method Grid\Column|Collection agent_product_ids(string $label = null) * @method Grid\Column|Collection author(string $label = null) * @method Grid\Column|Collection image(string $label = null) - * @method Grid\Column|Collection agent_product_ids(string $label = null) * @method Grid\Column|Collection pid(string $label = null) * @method Grid\Column|Collection template(string $label = null) - * @method Grid\Column|Collection start_at(string $label = null) * @method Grid\Column|Collection end_at(string $label = null) + * @method Grid\Column|Collection start_at(string $label = null) + * @method Grid\Column|Collection bidding_id(string $label = null) + * @method Grid\Column|Collection bidding_user_id(string $label = null) + * @method Grid\Column|Collection bidding_user_type(string $label = null) * @method Grid\Column|Collection comment(string $label = null) * @method Grid\Column|Collection deadline(string $label = null) - * @method Grid\Column|Collection publisher_type(string $label = null) + * @method Grid\Column|Collection demand_product_id(string $label = null) + * @method Grid\Column|Collection images(string $label = null) * @method Grid\Column|Collection publisher_id(string $label = null) + * @method Grid\Column|Collection publisher_type(string $label = null) * @method Grid\Column|Collection state(string $label = null) - * @method Grid\Column|Collection bidding_user_type(string $label = null) - * @method Grid\Column|Collection bidding_user_id(string $label = null) - * @method Grid\Column|Collection bidding_id(string $label = null) - * @method Grid\Column|Collection images(string $label = null) * @method Grid\Column|Collection demand_id(string $label = null) - * @method Grid\Column|Collection uuid(string $label = null) * @method Grid\Column|Collection connection(string $label = null) - * @method Grid\Column|Collection queue(string $label = null) - * @method Grid\Column|Collection payload(string $label = null) * @method Grid\Column|Collection exception(string $label = null) * @method Grid\Column|Collection failed_at(string $label = null) + * @method Grid\Column|Collection payload(string $label = null) + * @method Grid\Column|Collection queue(string $label = null) + * @method Grid\Column|Collection uuid(string $label = null) * @method Grid\Column|Collection photo(string $label = null) - * @method Grid\Column|Collection order_id(string $label = null) - * @method Grid\Column|Collection order_no(string $label = null) * @method Grid\Column|Collection num(string $label = null) - * @method Grid\Column|Collection mobile(string $label = null) - * @method Grid\Column|Collection pay_type(string $label = null) + * @method Grid\Column|Collection order_id(string $label = null) + * @method Grid\Column|Collection agent_cloud_price(string $label = null) * @method Grid\Column|Collection coupon_id(string $label = null) - * @method Grid\Column|Collection paid_money(string $label = null) + * @method Grid\Column|Collection mobile(string $label = null) + * @method Grid\Column|Collection order_no(string $label = null) * @method Grid\Column|Collection paid_at(string $label = null) + * @method Grid\Column|Collection paid_money(string $label = null) + * @method Grid\Column|Collection pay_type(string $label = null) * @method Grid\Column|Collection refund_info(string $label = null) - * @method Grid\Column|Collection verify_code(string $label = null) * @method Grid\Column|Collection timeout(string $label = null) + * @method Grid\Column|Collection verify_code(string $label = null) * @method Grid\Column|Collection email(string $label = null) * @method Grid\Column|Collection token(string $label = null) * @method Grid\Column|Collection verify_mobile(string $label = null) * @method Grid\Column|Collection channels(string $label = null) * @method Grid\Column|Collection money(string $label = null) * @method Grid\Column|Collection transaction_id(string $label = null) - * @method Grid\Column|Collection nickname(string $label = null) - * @method Grid\Column|Collection openid(string $label = null) - * @method Grid\Column|Collection unionid(string $label = null) - * @method Grid\Column|Collection country(string $label = null) - * @method Grid\Column|Collection province(string $label = null) * @method Grid\Column|Collection city(string $label = null) + * @method Grid\Column|Collection country(string $label = null) * @method Grid\Column|Collection gender(string $label = null) - * @method Grid\Column|Collection language(string $label = null) * @method Grid\Column|Collection is_verify(string $label = null) + * @method Grid\Column|Collection language(string $label = null) + * @method Grid\Column|Collection nickname(string $label = null) + * @method Grid\Column|Collection openid(string $label = null) + * @method Grid\Column|Collection province(string $label = null) + * @method Grid\Column|Collection unionid(string $label = null) */ class Grid {} class MiniGrid extends Grid {} /** - * @property Show\Field|Collection id * @property Show\Field|Collection agent_id - * @property Show\Field|Collection picture + * @property Show\Field|Collection created_at + * @property Show\Field|Collection desc + * @property Show\Field|Collection id * @property Show\Field|Collection name + * @property Show\Field|Collection picture * @property Show\Field|Collection tag - * @property Show\Field|Collection desc - * @property Show\Field|Collection created_at * @property Show\Field|Collection updated_at - * @property Show\Field|Collection product_id - * @property Show\Field|Collection know * @property Show\Field|Collection content + * @property Show\Field|Collection know + * @property Show\Field|Collection product_id + * @property Show\Field|Collection detail * @property Show\Field|Collection type * @property Show\Field|Collection version - * @property Show\Field|Collection detail * @property Show\Field|Collection is_enabled - * @property Show\Field|Collection parent_id - * @property Show\Field|Collection order + * @property Show\Field|Collection extension * @property Show\Field|Collection icon + * @property Show\Field|Collection order + * @property Show\Field|Collection parent_id * @property Show\Field|Collection uri - * @property Show\Field|Collection extension - * @property Show\Field|Collection permission_id * @property Show\Field|Collection menu_id - * @property Show\Field|Collection slug + * @property Show\Field|Collection permission_id * @property Show\Field|Collection http_method * @property Show\Field|Collection http_path + * @property Show\Field|Collection slug * @property Show\Field|Collection role_id * @property Show\Field|Collection user_id * @property Show\Field|Collection value - * @property Show\Field|Collection username - * @property Show\Field|Collection password * @property Show\Field|Collection avatar + * @property Show\Field|Collection password * @property Show\Field|Collection remember_token - * @property Show\Field|Collection status + * @property Show\Field|Collection username + * @property Show\Field|Collection display * @property Show\Field|Collection sort + * @property Show\Field|Collection status * @property Show\Field|Collection url - * @property Show\Field|Collection display * @property Show\Field|Collection about - * @property Show\Field|Collection reg_protocol * @property Show\Field|Collection buy_protocol - * @property Show\Field|Collection supplier_id + * @property Show\Field|Collection reg_protocol * @property Show\Field|Collection agent_product_id - * @property Show\Field|Collection product_ids - * @property Show\Field|Collection price - * @property Show\Field|Collection original_price - * @property Show\Field|Collection sale - * @property Show\Field|Collection stock - * @property Show\Field|Collection channel_id + * @property Show\Field|Collection supplier_id + * @property Show\Field|Collection agent_cloud_pid * @property Show\Field|Collection category_id - * @property Show\Field|Collection guide_id - * @property Show\Field|Collection verifier - * @property Show\Field|Collection is_rec - * @property Show\Field|Collection pictures + * @property Show\Field|Collection channel_id + * @property Show\Field|Collection deleted_at * @property Show\Field|Collection deposit * @property Show\Field|Collection deposit_timeout * @property Show\Field|Collection earnest * @property Show\Field|Collection earnest_timeout - * @property Show\Field|Collection deleted_at + * @property Show\Field|Collection guide_id + * @property Show\Field|Collection is_cloud + * @property Show\Field|Collection is_rec + * @property Show\Field|Collection original_price + * @property Show\Field|Collection pictures + * @property Show\Field|Collection price + * @property Show\Field|Collection product_ids + * @property Show\Field|Collection sale + * @property Show\Field|Collection stock + * @property Show\Field|Collection verifier * @property Show\Field|Collection setting + * @property Show\Field|Collection address * @property Show\Field|Collection appid * @property Show\Field|Collection appsecret - * @property Show\Field|Collection mchid - * @property Show\Field|Collection mchkey * @property Show\Field|Collection company_name - * @property Show\Field|Collection logo - * @property Show\Field|Collection address - * @property Show\Field|Collection license_pic - * @property Show\Field|Collection director * @property Show\Field|Collection contact_phone + * @property Show\Field|Collection director + * @property Show\Field|Collection license_pic + * @property Show\Field|Collection logo + * @property Show\Field|Collection mchid + * @property Show\Field|Collection mchkey * @property Show\Field|Collection rate + * @property Show\Field|Collection agent_product_ids * @property Show\Field|Collection author * @property Show\Field|Collection image - * @property Show\Field|Collection agent_product_ids * @property Show\Field|Collection pid * @property Show\Field|Collection template - * @property Show\Field|Collection start_at * @property Show\Field|Collection end_at + * @property Show\Field|Collection start_at + * @property Show\Field|Collection bidding_id + * @property Show\Field|Collection bidding_user_id + * @property Show\Field|Collection bidding_user_type * @property Show\Field|Collection comment * @property Show\Field|Collection deadline - * @property Show\Field|Collection publisher_type + * @property Show\Field|Collection demand_product_id + * @property Show\Field|Collection images * @property Show\Field|Collection publisher_id + * @property Show\Field|Collection publisher_type * @property Show\Field|Collection state - * @property Show\Field|Collection bidding_user_type - * @property Show\Field|Collection bidding_user_id - * @property Show\Field|Collection bidding_id - * @property Show\Field|Collection images * @property Show\Field|Collection demand_id - * @property Show\Field|Collection uuid * @property Show\Field|Collection connection - * @property Show\Field|Collection queue - * @property Show\Field|Collection payload * @property Show\Field|Collection exception * @property Show\Field|Collection failed_at + * @property Show\Field|Collection payload + * @property Show\Field|Collection queue + * @property Show\Field|Collection uuid * @property Show\Field|Collection photo - * @property Show\Field|Collection order_id - * @property Show\Field|Collection order_no * @property Show\Field|Collection num - * @property Show\Field|Collection mobile - * @property Show\Field|Collection pay_type + * @property Show\Field|Collection order_id + * @property Show\Field|Collection agent_cloud_price * @property Show\Field|Collection coupon_id - * @property Show\Field|Collection paid_money + * @property Show\Field|Collection mobile + * @property Show\Field|Collection order_no * @property Show\Field|Collection paid_at + * @property Show\Field|Collection paid_money + * @property Show\Field|Collection pay_type * @property Show\Field|Collection refund_info - * @property Show\Field|Collection verify_code * @property Show\Field|Collection timeout + * @property Show\Field|Collection verify_code * @property Show\Field|Collection email * @property Show\Field|Collection token * @property Show\Field|Collection verify_mobile * @property Show\Field|Collection channels * @property Show\Field|Collection money * @property Show\Field|Collection transaction_id - * @property Show\Field|Collection nickname - * @property Show\Field|Collection openid - * @property Show\Field|Collection unionid - * @property Show\Field|Collection country - * @property Show\Field|Collection province * @property Show\Field|Collection city + * @property Show\Field|Collection country * @property Show\Field|Collection gender - * @property Show\Field|Collection language * @property Show\Field|Collection is_verify + * @property Show\Field|Collection language + * @property Show\Field|Collection nickname + * @property Show\Field|Collection openid + * @property Show\Field|Collection province + * @property Show\Field|Collection unionid * - * @method Show\Field|Collection id(string $label = null) * @method Show\Field|Collection agent_id(string $label = null) - * @method Show\Field|Collection picture(string $label = null) + * @method Show\Field|Collection created_at(string $label = null) + * @method Show\Field|Collection desc(string $label = null) + * @method Show\Field|Collection id(string $label = null) * @method Show\Field|Collection name(string $label = null) + * @method Show\Field|Collection picture(string $label = null) * @method Show\Field|Collection tag(string $label = null) - * @method Show\Field|Collection desc(string $label = null) - * @method Show\Field|Collection created_at(string $label = null) * @method Show\Field|Collection updated_at(string $label = null) - * @method Show\Field|Collection product_id(string $label = null) - * @method Show\Field|Collection know(string $label = null) * @method Show\Field|Collection content(string $label = null) + * @method Show\Field|Collection know(string $label = null) + * @method Show\Field|Collection product_id(string $label = null) + * @method Show\Field|Collection detail(string $label = null) * @method Show\Field|Collection type(string $label = null) * @method Show\Field|Collection version(string $label = null) - * @method Show\Field|Collection detail(string $label = null) * @method Show\Field|Collection is_enabled(string $label = null) - * @method Show\Field|Collection parent_id(string $label = null) - * @method Show\Field|Collection order(string $label = null) + * @method Show\Field|Collection extension(string $label = null) * @method Show\Field|Collection icon(string $label = null) + * @method Show\Field|Collection order(string $label = null) + * @method Show\Field|Collection parent_id(string $label = null) * @method Show\Field|Collection uri(string $label = null) - * @method Show\Field|Collection extension(string $label = null) - * @method Show\Field|Collection permission_id(string $label = null) * @method Show\Field|Collection menu_id(string $label = null) - * @method Show\Field|Collection slug(string $label = null) + * @method Show\Field|Collection permission_id(string $label = null) * @method Show\Field|Collection http_method(string $label = null) * @method Show\Field|Collection http_path(string $label = null) + * @method Show\Field|Collection slug(string $label = null) * @method Show\Field|Collection role_id(string $label = null) * @method Show\Field|Collection user_id(string $label = null) * @method Show\Field|Collection value(string $label = null) - * @method Show\Field|Collection username(string $label = null) - * @method Show\Field|Collection password(string $label = null) * @method Show\Field|Collection avatar(string $label = null) + * @method Show\Field|Collection password(string $label = null) * @method Show\Field|Collection remember_token(string $label = null) - * @method Show\Field|Collection status(string $label = null) + * @method Show\Field|Collection username(string $label = null) + * @method Show\Field|Collection display(string $label = null) * @method Show\Field|Collection sort(string $label = null) + * @method Show\Field|Collection status(string $label = null) * @method Show\Field|Collection url(string $label = null) - * @method Show\Field|Collection display(string $label = null) * @method Show\Field|Collection about(string $label = null) - * @method Show\Field|Collection reg_protocol(string $label = null) * @method Show\Field|Collection buy_protocol(string $label = null) - * @method Show\Field|Collection supplier_id(string $label = null) + * @method Show\Field|Collection reg_protocol(string $label = null) * @method Show\Field|Collection agent_product_id(string $label = null) - * @method Show\Field|Collection product_ids(string $label = null) - * @method Show\Field|Collection price(string $label = null) - * @method Show\Field|Collection original_price(string $label = null) - * @method Show\Field|Collection sale(string $label = null) - * @method Show\Field|Collection stock(string $label = null) - * @method Show\Field|Collection channel_id(string $label = null) + * @method Show\Field|Collection supplier_id(string $label = null) + * @method Show\Field|Collection agent_cloud_pid(string $label = null) * @method Show\Field|Collection category_id(string $label = null) - * @method Show\Field|Collection guide_id(string $label = null) - * @method Show\Field|Collection verifier(string $label = null) - * @method Show\Field|Collection is_rec(string $label = null) - * @method Show\Field|Collection pictures(string $label = null) + * @method Show\Field|Collection channel_id(string $label = null) + * @method Show\Field|Collection deleted_at(string $label = null) * @method Show\Field|Collection deposit(string $label = null) * @method Show\Field|Collection deposit_timeout(string $label = null) * @method Show\Field|Collection earnest(string $label = null) * @method Show\Field|Collection earnest_timeout(string $label = null) - * @method Show\Field|Collection deleted_at(string $label = null) + * @method Show\Field|Collection guide_id(string $label = null) + * @method Show\Field|Collection is_cloud(string $label = null) + * @method Show\Field|Collection is_rec(string $label = null) + * @method Show\Field|Collection original_price(string $label = null) + * @method Show\Field|Collection pictures(string $label = null) + * @method Show\Field|Collection price(string $label = null) + * @method Show\Field|Collection product_ids(string $label = null) + * @method Show\Field|Collection sale(string $label = null) + * @method Show\Field|Collection stock(string $label = null) + * @method Show\Field|Collection verifier(string $label = null) * @method Show\Field|Collection setting(string $label = null) + * @method Show\Field|Collection address(string $label = null) * @method Show\Field|Collection appid(string $label = null) * @method Show\Field|Collection appsecret(string $label = null) - * @method Show\Field|Collection mchid(string $label = null) - * @method Show\Field|Collection mchkey(string $label = null) * @method Show\Field|Collection company_name(string $label = null) - * @method Show\Field|Collection logo(string $label = null) - * @method Show\Field|Collection address(string $label = null) - * @method Show\Field|Collection license_pic(string $label = null) - * @method Show\Field|Collection director(string $label = null) * @method Show\Field|Collection contact_phone(string $label = null) + * @method Show\Field|Collection director(string $label = null) + * @method Show\Field|Collection license_pic(string $label = null) + * @method Show\Field|Collection logo(string $label = null) + * @method Show\Field|Collection mchid(string $label = null) + * @method Show\Field|Collection mchkey(string $label = null) * @method Show\Field|Collection rate(string $label = null) + * @method Show\Field|Collection agent_product_ids(string $label = null) * @method Show\Field|Collection author(string $label = null) * @method Show\Field|Collection image(string $label = null) - * @method Show\Field|Collection agent_product_ids(string $label = null) * @method Show\Field|Collection pid(string $label = null) * @method Show\Field|Collection template(string $label = null) - * @method Show\Field|Collection start_at(string $label = null) * @method Show\Field|Collection end_at(string $label = null) + * @method Show\Field|Collection start_at(string $label = null) + * @method Show\Field|Collection bidding_id(string $label = null) + * @method Show\Field|Collection bidding_user_id(string $label = null) + * @method Show\Field|Collection bidding_user_type(string $label = null) * @method Show\Field|Collection comment(string $label = null) * @method Show\Field|Collection deadline(string $label = null) - * @method Show\Field|Collection publisher_type(string $label = null) + * @method Show\Field|Collection demand_product_id(string $label = null) + * @method Show\Field|Collection images(string $label = null) * @method Show\Field|Collection publisher_id(string $label = null) + * @method Show\Field|Collection publisher_type(string $label = null) * @method Show\Field|Collection state(string $label = null) - * @method Show\Field|Collection bidding_user_type(string $label = null) - * @method Show\Field|Collection bidding_user_id(string $label = null) - * @method Show\Field|Collection bidding_id(string $label = null) - * @method Show\Field|Collection images(string $label = null) * @method Show\Field|Collection demand_id(string $label = null) - * @method Show\Field|Collection uuid(string $label = null) * @method Show\Field|Collection connection(string $label = null) - * @method Show\Field|Collection queue(string $label = null) - * @method Show\Field|Collection payload(string $label = null) * @method Show\Field|Collection exception(string $label = null) * @method Show\Field|Collection failed_at(string $label = null) + * @method Show\Field|Collection payload(string $label = null) + * @method Show\Field|Collection queue(string $label = null) + * @method Show\Field|Collection uuid(string $label = null) * @method Show\Field|Collection photo(string $label = null) - * @method Show\Field|Collection order_id(string $label = null) - * @method Show\Field|Collection order_no(string $label = null) * @method Show\Field|Collection num(string $label = null) - * @method Show\Field|Collection mobile(string $label = null) - * @method Show\Field|Collection pay_type(string $label = null) + * @method Show\Field|Collection order_id(string $label = null) + * @method Show\Field|Collection agent_cloud_price(string $label = null) * @method Show\Field|Collection coupon_id(string $label = null) - * @method Show\Field|Collection paid_money(string $label = null) + * @method Show\Field|Collection mobile(string $label = null) + * @method Show\Field|Collection order_no(string $label = null) * @method Show\Field|Collection paid_at(string $label = null) + * @method Show\Field|Collection paid_money(string $label = null) + * @method Show\Field|Collection pay_type(string $label = null) * @method Show\Field|Collection refund_info(string $label = null) - * @method Show\Field|Collection verify_code(string $label = null) * @method Show\Field|Collection timeout(string $label = null) + * @method Show\Field|Collection verify_code(string $label = null) * @method Show\Field|Collection email(string $label = null) * @method Show\Field|Collection token(string $label = null) * @method Show\Field|Collection verify_mobile(string $label = null) * @method Show\Field|Collection channels(string $label = null) * @method Show\Field|Collection money(string $label = null) * @method Show\Field|Collection transaction_id(string $label = null) - * @method Show\Field|Collection nickname(string $label = null) - * @method Show\Field|Collection openid(string $label = null) - * @method Show\Field|Collection unionid(string $label = null) - * @method Show\Field|Collection country(string $label = null) - * @method Show\Field|Collection province(string $label = null) * @method Show\Field|Collection city(string $label = null) + * @method Show\Field|Collection country(string $label = null) * @method Show\Field|Collection gender(string $label = null) - * @method Show\Field|Collection language(string $label = null) * @method Show\Field|Collection is_verify(string $label = null) + * @method Show\Field|Collection language(string $label = null) + * @method Show\Field|Collection nickname(string $label = null) + * @method Show\Field|Collection openid(string $label = null) + * @method Show\Field|Collection province(string $label = null) + * @method Show\Field|Collection unionid(string $label = null) */ class Show {} diff --git a/resources/lang/zh_CN/order.php b/resources/lang/zh_CN/order.php index 787770a..fac16ba 100644 --- a/resources/lang/zh_CN/order.php +++ b/resources/lang/zh_CN/order.php @@ -23,6 +23,8 @@ return [ 'status' => '订单状态', 'title' => '产品名称', 'user_id' => '用户ID', + 'agent_cloud_pid' => '组团云产品ID', + 'agent_cloud_price' => '组团云产品售价', 'created_at' => '下单时间', ], 'options' => [ From 70fea770c648b63aae068ed1364e2c874f23a6fb Mon Sep 17 00:00:00 2001 From: liapples Date: Sat, 4 Sep 2021 00:34:40 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0agent=5Fcloud=5Fpid=E5=92=8Cagent=5Fcloud=5Fp?= =?UTF-8?q?rice=E5=AD=97=E6=AE=B5=E7=9A=84=E4=BF=9D=E5=AD=98=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E5=BA=93=E5=AD=98=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/OrderController.php | 12 ++++-------- app/Models/AgentProduct.php | 5 +++++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index cb79d1e..a74eb59 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -128,17 +128,12 @@ class OrderController extends Controller $ap = AgentProduct::query() ->where('id', $formData['id']) - ->with('coupon') - ->with('product') + ->with(['coupon', 'product', 'agentCloudProduct:id,price']) ->has('product') ->first(); if (!$ap || !$ap->product) { $this->error('产品不存在或已下架'); } - //TODO 供应商产品需要判断组合产品库存 - if ($ap->stock < $formData['num'] || $ap->product->stock < $formData['num']) { - $this->error('对不起,库存不足'); - } $coupon_ids = []; if ($ap->coupon) { @@ -150,7 +145,6 @@ class OrderController extends Controller DB::beginTransaction(); try { $price = $this->calc($ap->price, $formData['num'], $formData['pay_type'], $ap); - $title = $ap->title; //产品标题 //供应商产品表减库存 $product_ids = explode(',', $ap->product_ids); @@ -184,7 +178,7 @@ class OrderController extends Controller 'price' => $price, 'name' => $formData['name'], 'mobile' => $formData['mobile'], - 'title' => $title, + 'title' => $ap->title, 'picture' => $ap->picture, 'agent_product_id' => $ap->id, 'product_id' => $ap->product_id, @@ -194,6 +188,8 @@ class OrderController extends Controller 'coupon_id' => join(',', $coupon_ids), 'guide_id' => $ap->guide_id, 'timeout' => $timeout, + 'agent_cloud_pid' => $ap->agent_cloud_pid, + 'agent_cloud_price' => $ap->agentCloudProduct->price, ]); //存入订单产品表 diff --git a/app/Models/AgentProduct.php b/app/Models/AgentProduct.php index a8c4d7f..c2733ca 100644 --- a/app/Models/AgentProduct.php +++ b/app/Models/AgentProduct.php @@ -52,6 +52,11 @@ class AgentProduct extends BaseModel return $this->hasMany(AgentProductItem::class); } + public function agentCloudProduct() + { + return $this->belongsTo(self::class, 'agent_cloud_pid', 'id'); + } + public function setChannelIdAttribute($value) { $this->attributes['channel_id'] = is_array($value) ? join(',', array_filter($value)) : $value; From e6a8848bf52ff0f10bca420e7027db961dd77871 Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 10:49:04 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E4=BD=9C=E8=80=85=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=92=8C=E6=8E=92=E5=BA=8F=E5=AD=97=E6=AE=B5=E5=88=A4=E6=96=AD?= =?UTF-8?q?=EF=BC=8C=E6=96=87=E7=AB=A0=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=A4=A7=E5=9B=BE=E5=88=87=E6=8D=A2switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/AdminAgent/Controllers/ArticleController.php | 9 +++++++-- app/AdminAgent/Controllers/NoticeController.php | 7 ++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/AdminAgent/Controllers/ArticleController.php b/app/AdminAgent/Controllers/ArticleController.php index 2e9478d..024bc32 100644 --- a/app/AdminAgent/Controllers/ArticleController.php +++ b/app/AdminAgent/Controllers/ArticleController.php @@ -29,7 +29,7 @@ class ArticleController extends AdminController $grid->column('title'); $grid->column('image')->image('', 60, 60); $grid->column('sort')->editable()->width(120)->help('数字超小越靠前'); - $grid->column('type')->using(['普通列表', '大图显示']); + $grid->column('type')->switch()->help('开启将以大图方式显示,关闭以普通列表显示'); $grid->column('created_at'); $grid->column('updated_at')->sortable(); @@ -102,7 +102,12 @@ class ArticleController extends AdminController //特殊字段处理 $form->hidden(['agent_id']); $form->agent_id = Admin::user()->id; - $form->sort = $form->sort ?? 255; + if (array_key_exists('sort', $form->input())) { + $form->sort = $form->sort ?? 255; + } + if (array_key_exists('author', $form->input())) { + $form->author = $form->author ?? ''; + } //不允许编辑的字段 $form->ignore(['id', 'created_at', 'updated_at']); diff --git a/app/AdminAgent/Controllers/NoticeController.php b/app/AdminAgent/Controllers/NoticeController.php index ca7c1ce..080f5c7 100644 --- a/app/AdminAgent/Controllers/NoticeController.php +++ b/app/AdminAgent/Controllers/NoticeController.php @@ -91,11 +91,8 @@ class NoticeController extends AdminController $form->hidden(['agent_id']); $form->agent_id = Admin::user()->id; $form->sort = $form->sort ?? 255; - - foreach ($form->input() as $k => $v) { - if (is_null($v)) { - $form->$k = ''; - } + if (array_key_exists('author', $form->input())) { + $form->author = $form->author ?? ''; } //不允许编辑的字段 From 4d0c9cc03eedf61510436a769708efb6b1f4ef07 Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 10:49:24 +0800 Subject: [PATCH 07/16] return $this->error --- app/Http/Controllers/Api/LoginController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/LoginController.php b/app/Http/Controllers/Api/LoginController.php index 17d3d69..fdc7381 100644 --- a/app/Http/Controllers/Api/LoginController.php +++ b/app/Http/Controllers/Api/LoginController.php @@ -48,7 +48,7 @@ class LoginController extends Controller return $this->error($msg); } if (empty($res['session_key'])) { - $this->error('获取session_key失败'); + return $this->error('获取session_key失败'); } } catch (InvalidConfigException $e) { return $this->error($e->getMessage()); From fc0d73e55fa07a4d459b243b7eb9dac861ab0f32 Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 10:52:06 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E5=88=A4=E6=96=ADwhere=E5=92=8Creturn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/OrderController.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index a74eb59..48f1504 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Api; use App\Common\PayType; +use App\Common\ProductStatus; use App\Http\Controllers\Controller; use App\Models\Agent; use App\Models\AgentProduct; @@ -127,12 +128,13 @@ class OrderController extends Controller ]); $ap = AgentProduct::query() - ->where('id', $formData['id']) + ->where(['id' => $formData['id'], 'status' => ProductStatus::ON_SALE]) + ->where('stock', '>=', $formData['num']) ->with(['coupon', 'product', 'agentCloudProduct:id,price']) ->has('product') ->first(); if (!$ap || !$ap->product) { - $this->error('产品不存在或已下架'); + return $this->error('产品已下架或库存不足'); } $coupon_ids = []; @@ -189,7 +191,7 @@ class OrderController extends Controller 'guide_id' => $ap->guide_id, 'timeout' => $timeout, 'agent_cloud_pid' => $ap->agent_cloud_pid, - 'agent_cloud_price' => $ap->agentCloudProduct->price, + 'agent_cloud_price' => $ap->agentCloudProduct->price ?? 0, ]); //存入订单产品表 From a5b024d91553d698f90a6faca5ed5499abb62ebd Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 11:03:03 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=92=8C=E5=BF=AB=E9=80=9F=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/AdminAgent/Controllers/OrderController.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/AdminAgent/Controllers/OrderController.php b/app/AdminAgent/Controllers/OrderController.php index ad82ced..ec0e50a 100644 --- a/app/AdminAgent/Controllers/OrderController.php +++ b/app/AdminAgent/Controllers/OrderController.php @@ -33,6 +33,8 @@ class OrderController extends AdminController $grid->disableRowSelector(); $grid->disableEditButton(); $grid->disableQuickEditButton(false); + $grid->quickSearch(['mobile', 'order_no', 'title']) + ->placeholder('搜索手机号、订单号、产品名称')->width(20); $grid->model()->where('agent_id', Admin::user()->id); @@ -112,8 +114,9 @@ class OrderController extends AdminController $filter->panel(); $filter->equal('id')->width(2); - $filter->equal('mobile')->width(2); - $filter->equal('order_no')->width(3); + $filter->like('mobile')->width(2); + $filter->like('order_no')->width(3); + $filter->like('title')->width(3); $filter->equal('status')->select(OrderStatus::array())->width(2); $option = Supplier::query()->pluck('name', 'id'); From 5baf26b642873385fac7cd03b9944ec420b9b50c Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 11:07:51 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E4=BA=BA=E6=B0=94=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=94=80=E9=87=8F=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/AgentProductController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php index f44b4de..b274951 100644 --- a/app/Http/Controllers/Api/AgentProductController.php +++ b/app/Http/Controllers/Api/AgentProductController.php @@ -94,7 +94,8 @@ class AgentProductController extends Controller //人气爆款列表,销量排序 public function hotList() { - $list = AgentProduct::list($this->agent_id)->orderBy('id', 'DESC')->simplePaginate(); + $list = AgentProduct::list($this->agent_id) + ->orderBy('sale', 'DESC')->orderBy('id', 'DESC')->simplePaginate(); $list = $this->paginatePicAddHost($list); $list = $this->insertAd($list); From f49d60057acac6d61832104a3e1cb8cafe4a590f Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 12:05:32 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=84=E5=90=88?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=BA=93=E5=AD=98=E5=92=8C=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/AgentProductController.php | 8 +++++--- app/Models/AgentProduct.php | 14 +++++++++++--- app/Models/AgentProductItem.php | 10 ++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php index b274951..34f3cc6 100644 --- a/app/Http/Controllers/Api/AgentProductController.php +++ b/app/Http/Controllers/Api/AgentProductController.php @@ -40,14 +40,16 @@ class AgentProductController extends Controller $agent_product = AgentProduct::query() ->with('coupon:tag,agent_product_id') ->with('fav:agent_product_id') - ->whereHas('product', function ($query) { - return $query->where('status', ProductStatus::ON_SALE)->where('stock', '>', 0); + ->whereDoesntHave('agentProductItem', function ($query) { + return $query->whereHas('product', function ($query) { + return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE); + }); }) ->where('stock', '>', 0) ->firstWhere(['id' => $id, 'agent_id' => $this->agent_id, 'status' => ProductStatus::ON_SALE]); if (!$agent_product) { - return $this->error('产品不存在或已下架'); + return $this->error('产品已下架或库存不足'); } $prefix = Storage::disk('public')->url(''); diff --git a/app/Models/AgentProduct.php b/app/Models/AgentProduct.php index c2733ca..b35ab09 100644 --- a/app/Models/AgentProduct.php +++ b/app/Models/AgentProduct.php @@ -89,12 +89,20 @@ class AgentProduct extends BaseModel } //列表查询统一查询条件 - public function scopeList($query, $agent_id) + public static function list($agent_id) { - return $query->whereHas('product', function ($query) { - return $query->where('status', ProductStatus::ON_SALE)->where('stock', '>', 0); + return static::withoutGlobalScope('orderById') + ->whereDoesntHave('agentProductItem', function ($query) { + return $query->whereHas('product', function ($query) { + return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE); + }); }) ->where(['agent_id' => $agent_id, 'status' => ProductStatus::ON_SALE])->where('stock', '>', 0) ->select('id', 'sale', 'product_id', 'price', 'original_price', 'title', 'pictures'); } + + public function agentProductItem() + { + return $this->hasOne(AgentProductItem::class); + } } diff --git a/app/Models/AgentProductItem.php b/app/Models/AgentProductItem.php index 24015db..6a6a049 100644 --- a/app/Models/AgentProductItem.php +++ b/app/Models/AgentProductItem.php @@ -15,4 +15,14 @@ class AgentProductItem extends BaseModel parent::__construct($attributes); $this->timestamps = false; } + + public function product() + { + return $this->belongsTo(Product::class); + } + + public function agentProduct() + { + return $this->belongsTo(AgentProduct::class); + } } From a7544e01c56be6e9b01c7a9d746a2cf71fa1d5bf Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 12:08:25 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E5=8E=BB=E6=8E=89TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/LoginController.php | 1 - app/Http/Controllers/Api/OrderController.php | 2 -- app/Http/Controllers/Controller.php | 1 - app/Http/Middleware/ApiAuth.php | 2 +- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/app/Http/Controllers/Api/LoginController.php b/app/Http/Controllers/Api/LoginController.php index fdc7381..3c80b7b 100644 --- a/app/Http/Controllers/Api/LoginController.php +++ b/app/Http/Controllers/Api/LoginController.php @@ -54,7 +54,6 @@ class LoginController extends Controller return $this->error($e->getMessage()); } - // TODO 登录部分待优化 $userModel = User::query()->firstOrCreate([ 'openid' => $res['openid'] ?? '', 'agent_id' => $agent->id, diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index 48f1504..61dbc38 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -30,8 +30,6 @@ use Illuminate\Support\Facades\Storage; */ class OrderController extends Controller { - private $earnest = 200; //定金和首款默认金额 TODO 定金支付和首款支付暂定为200 - //订单列表 public function index(Request $request) { diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index d2b2fd7..ae32b86 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -17,7 +17,6 @@ class Controller extends BaseController public function __construct() { - // TODO 登录部分待优化 $auth = request()->header('Authentication'); $appid = request()->header('appid'); diff --git a/app/Http/Middleware/ApiAuth.php b/app/Http/Middleware/ApiAuth.php index f3e8f26..b820dc7 100644 --- a/app/Http/Middleware/ApiAuth.php +++ b/app/Http/Middleware/ApiAuth.php @@ -29,7 +29,7 @@ class ApiAuth ]); } - //检查用户 TODO 登录部分待优化 + //检查用户 $user_id = Cache::get($auth); if (empty($user_id) || $user_id != User::query()->where(['id' => $user_id, 'status' => 1])->value('id')) { return response()->json([ From 04e0bee129c790eab3aabcdf3786880ef7304a18 Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 12:44:21 +0800 Subject: [PATCH 13/16] =?UTF-8?q?tree=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/AdminAgent/Controllers/AgentProductController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/AdminAgent/Controllers/AgentProductController.php b/app/AdminAgent/Controllers/AgentProductController.php index 84989a2..17621d4 100644 --- a/app/AdminAgent/Controllers/AgentProductController.php +++ b/app/AdminAgent/Controllers/AgentProductController.php @@ -272,6 +272,14 @@ class AgentProductController extends AdminController ->default(0)->help('单位:元。不输入或输入 0 则不支持订金支付,必须和订金超时时间同时设置才会生效'); $form->number('deposit_timeout')->min(0) ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); + + /*$form->tree('channel_id', '所属频道') + ->expand(false) + ->nodes(Channel::where('agent_id', Admin::user()->id)->get()->toArray()) + ->setIdColumn('id') + ->setTitleColumn('name') + ->setParentColumn('pid');*/ + //->exceptParentNode(); //禁止过滤父节点的值 } })->saving(function (Form $form) { //不允许修改非自己的数据 From 97a7936cae4e7a9c7cdba17a5796cb17d590dfeb Mon Sep 17 00:00:00 2001 From: liapples Date: Sun, 5 Sep 2021 21:49:14 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E4=BB=98=E5=B0=BE=E6=AC=BE=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/OrderController.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index 61dbc38..483645c 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -79,10 +79,13 @@ class OrderController extends Controller if ($v['timeout'] !== null) { $second = strtotime($v['timeout']) - $time; - if ($second > 0 && $v['status'] == Status::UNPAID) { - $v['status_text'] = '请在' . ceil($second / 60) . "分钟内付款"; - } else if ($second > 0 && $v['status'] == Status::OFFLINE_UNPAID) { - $v['status_text'] = '请在' . ceil($second / 60) . "分钟内线下付款"; + if ($second > 0) { + $text_arr = [ + Status::UNPAID => '付款', + Status::OFFLINE_UNPAID => '线下付款', + Status::PAY_EARNEST => '付尾款', + ]; + $v['status_text'] = '请在' . ceil($second / 60) . "分钟内" . ($text_arr[$v['status']] ?? '付款'); } else if ($second < 0 && $v['status'] == Status::PAY_EARNEST) { $v['status_text'] = '尾款支付已超时'; } /*else { //此部分由定时处理 From 5f91fa31b19f9d6b99830b4027bad8e184460cb2 Mon Sep 17 00:00:00 2001 From: liapples Date: Mon, 6 Sep 2021 09:30:39 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0out=5Ftrade=5Fno?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MySQL_change.sql | 4 ++++ app/Http/Controllers/Api/WxpayController.php | 1 + 2 files changed, 5 insertions(+) diff --git a/MySQL_change.sql b/MySQL_change.sql index b725cd8..37b495d 100644 --- a/MySQL_change.sql +++ b/MySQL_change.sql @@ -256,4 +256,8 @@ ALTER TABLE `orders` ADD COLUMN `agent_cloud_price` DECIMAL(20,2) NOT NULL DEFAULT '0' COMMENT '组团云产品销售价格' AFTER `agent_cloud_pid`, ADD INDEX `agent_cloud_pid` (`agent_cloud_pid`); +# 9:26 2021/9/6 +ALTER TABLE `user_money_logs` + ADD COLUMN `out_trade_no` CHAR(24) NOT NULL DEFAULT '' COMMENT '发起支付时传给微信的订单号(格式:order_no-status)' AFTER `transaction_id`; + diff --git a/app/Http/Controllers/Api/WxpayController.php b/app/Http/Controllers/Api/WxpayController.php index f292242..3ddf8ab 100644 --- a/app/Http/Controllers/Api/WxpayController.php +++ b/app/Http/Controllers/Api/WxpayController.php @@ -115,6 +115,7 @@ class WxpayController 'desc' => DB::raw("LEFT('购买产品:{$order->title}', 250)"), 'transaction_id' => $message['transaction_id'], //微信支付订单号 'created_at' => now(), //模型没有updated_at,无法自动写入时间 + 'out_trade_no' => $message['out_trade_no'] ?? '', ]); DB::commit(); From f017fc993831fe3772c1f1514f471fff983ff5cd Mon Sep 17 00:00:00 2001 From: liapples Date: Mon, 6 Sep 2021 09:35:19 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0whereIn=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E7=AB=9E=E6=A0=87=E4=BA=A7=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/AdminAgent/Renderable/SelectProduct.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/AdminAgent/Renderable/SelectProduct.php b/app/AdminAgent/Renderable/SelectProduct.php index e8194bb..ec52e5d 100644 --- a/app/AdminAgent/Renderable/SelectProduct.php +++ b/app/AdminAgent/Renderable/SelectProduct.php @@ -24,7 +24,7 @@ class SelectProduct extends LazyRenderable $grid->disableBatchDelete(); $grid->disableBatchActions(); - $grid->model()->where('status', ProductStatus::ON_SALE); + $grid->model()->where('status', ProductStatus::ON_SALE)->whereIn('agent_id', [0, Admin::user()->id]); $grid->quickSearch(['title', 'supplier.name'])->placeholder('搜索产品名称、供应商'); $grid->column('id');