Browse Source

Merge branch 'develop' of ssh://8.134.10.79:222/Leadfyy.co/hainan into develop

develop
lemon 4 years ago
parent
commit
d001085b92
  1. 12
      MySQL_change.sql
  2. 191
      app/AdminAgent/Controllers/AgentProductController.php
  3. 9
      app/AdminAgent/Controllers/ArticleController.php
  4. 121
      app/AdminAgent/Controllers/GroupOrderController.php
  5. 7
      app/AdminAgent/Controllers/NoticeController.php
  6. 12
      app/AdminAgent/Controllers/OrderController.php
  7. 2
      app/AdminAgent/Renderable/SelectProduct.php
  8. 1
      app/AdminAgent/routes.php
  9. 11
      app/Http/Controllers/Api/AgentProductController.php
  10. 3
      app/Http/Controllers/Api/LoginController.php
  11. 33
      app/Http/Controllers/Api/OrderController.php
  12. 1
      app/Http/Controllers/Api/WxpayController.php
  13. 1
      app/Http/Controllers/Controller.php
  14. 2
      app/Http/Middleware/ApiAuth.php
  15. 19
      app/Models/AgentProduct.php
  16. 10
      app/Models/AgentProductItem.php
  17. 23
      app/Models/Order.php
  18. 472
      dcat_admin_ide_helper.php
  19. 2
      resources/lang/zh_CN/order.php

12
MySQL_change.sql

@ -249,3 +249,15 @@ 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`);
# 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`;

191
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,30 @@ class AgentProductController extends AdminController
->dialogWidth('50%;min-width:600px;') //不起作用
->from(SelectGuide::make())
->model(Guide::class, 'id', 'name');
$form->confirm('提示', '如果修改了标题、价格、产品图片、旅游须知、产品详情需要重新审核,同时<span class="btn-danger">下架所有</span>关联的代理商产品,是否继续?');
} 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->tree('channel_id', '所属频道')
->expand(false)
->nodes(Channel::where('agent_id', Admin::user()->id)->get()->toArray())
->setIdColumn('id')
->setTitleColumn('name')
->setParentColumn('pid');*/
//->exceptParentNode(); //禁止过滤父节点的值
}
$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 +315,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 +512,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 +523,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) {
//不允许删除非自己的数据

9
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']);

121
app/AdminAgent/Controllers/GroupOrderController.php

@ -0,0 +1,121 @@
<?php
namespace App\AdminAgent\Controllers;
use App\Common\OrderStatus;
use App\Common\PayType;
use App\Models\Order;
use App\Models\Supplier;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class GroupOrderController extends AdminController
{
protected $translation = 'order';
protected $title = '订单列表';
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Order(['guide', 'agentCloud:id,agent_id']), function (Grid $grid) {
$grid->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('操作禁止');
});
}
}

7
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 ?? '';
}
//不允许编辑的字段

12
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,13 +26,15 @@ 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();
$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,11 +113,10 @@ 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);
$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');

2
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');

1
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');
});

11
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('');
@ -94,7 +96,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);

3
app/Http/Controllers/Api/LoginController.php

@ -48,13 +48,12 @@ 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());
}
// TODO 登录部分待优化
$userModel = User::query()->firstOrCreate([
'openid' => $res['openid'] ?? '',
'agent_id' => $agent->id,

33
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;
@ -29,8 +30,6 @@ use Illuminate\Support\Facades\Storage;
*/
class OrderController extends Controller
{
private $earnest = 200; //定金和首款默认金额 TODO 定金支付和首款支付暂定为200
//订单列表
public function index(Request $request)
{
@ -80,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 { //此部分由定时处理
@ -127,17 +129,13 @@ class OrderController extends Controller
]);
$ap = AgentProduct::query()
->where('id', $formData['id'])
->with('coupon')
->with('product')
->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('产品不存在或已下架');
}
//TODO 供应商产品需要判断组合产品库存
if ($ap->stock < $formData['num'] || $ap->product->stock < $formData['num']) {
$this->error('对不起,库存不足');
return $this->error('产品已下架或库存不足');
}
$coupon_ids = [];
@ -150,7 +148,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 +181,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 +191,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 ?? 0,
]);
//存入订单产品表
@ -387,7 +386,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)

1
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();

1
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');

2
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([

19
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;
@ -84,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);
}
}

10
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);
}
}

23
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
{
@ -94,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');
}
}

472
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 {}

2
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' => [

Loading…
Cancel
Save