Browse Source

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

develop
lemon 4 years ago
parent
commit
8d9f5d4518
  1. 35
      MySQL_change.sql
  2. 2
      app/Admin/Controllers/SupplierController.php
  3. 1
      app/Admin/bootstrap.php
  4. 37
      app/AdminAgent/Controllers/AgentProductController.php
  5. 6
      app/AdminAgent/Controllers/ArticleController.php
  6. 127
      app/AdminAgent/Controllers/ChannelController.php
  7. 13
      app/AdminAgent/Controllers/MessageController.php
  8. 11
      app/AdminAgent/Controllers/NoticeController.php
  9. 17
      app/AdminAgent/Controllers/OrderController.php
  10. 18
      app/AdminAgent/Controllers/SettingController.php
  11. 2
      app/AdminAgent/Controllers/SpecialController.php
  12. 1
      app/AdminAgent/Controllers/UserController.php
  13. 4
      app/AdminAgent/Extensions/Grid/AuditRefund.php
  14. 46
      app/AdminAgent/Extensions/Grid/ChangeOrderStatus.php
  15. 49
      app/AdminAgent/Forms/Setting.php
  16. 16
      app/AdminAgent/Repositories/Channel.php
  17. 8
      app/AdminAgent/bootstrap.php
  18. 3
      app/AdminAgent/routes.php
  19. 8
      app/AdminGuide/bootstrap.php
  20. 1
      app/AdminSettled/Controllers/AgentController.php
  21. 1
      app/AdminSettled/Controllers/GuideController.php
  22. 1
      app/AdminSettled/Controllers/SupplierController.php
  23. 1
      app/AdminSettled/bootstrap.php
  24. 8
      app/AdminSupplier/bootstrap.php
  25. 11
      app/Common/AgentType.php
  26. 44
      app/Common/OrderStatus.php
  27. 23
      app/Common/PayType.php
  28. 15
      app/Common/ProductStatus.php
  29. 15
      app/Common/UserStatus.php
  30. 11
      app/Http/Controllers/Api/AgentProductController.php
  31. 14
      app/Http/Controllers/Api/ArticleController.php
  32. 2
      app/Http/Controllers/Api/ChannelController.php
  33. 19
      app/Http/Controllers/Api/IndexController.php
  34. 31
      app/Http/Controllers/Api/LoginController.php
  35. 2
      app/Http/Controllers/Api/MessageController.php
  36. 15
      app/Http/Controllers/Api/OrderController.php
  37. 3
      app/Http/Controllers/Api/SpecialController.php
  38. 4
      app/Http/Controllers/Api/TestController.php
  39. 3
      app/Http/Controllers/Api/UserChannelController.php
  40. 38
      app/Http/Controllers/Api/VerificationController.php
  41. 19
      app/Http/Controllers/Api/WxpayController.php
  42. 4
      app/Http/Middleware/ApiAuth.php
  43. 4
      app/Models/AgentProduct.php
  44. 24
      app/Models/AgentSetting.php
  45. 2
      app/Models/Article.php
  46. 5
      app/Models/Channel.php
  47. 88
      dcat_admin_ide_helper.php
  48. 3
      ready.md
  49. 1
      resources/lang/zh_CN/article.php
  50. 16
      resources/lang/zh_CN/channel.php
  51. 3
      resources/lang/zh_CN/message.php
  52. 1
      resources/lang/zh_CN/notice.php
  53. 13
      resources/lang/zh_CN/setting.php
  54. 39
      resources/views/admin/layouts/container.blade.php

35
MySQL_change.sql

@ -117,7 +117,6 @@ COMMENT='瀑布流内嵌广告'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
#################################################################
# 12:39 2021/8/24
ALTER TABLE `notices`
ADD COLUMN `sort` SMALLINT NOT NULL DEFAULT '255' COMMENT '排序,越小越靠前' AFTER `content`;
@ -177,3 +176,37 @@ ALTER TABLE `agent_products`
# 11:07 2021/8/26
DROP TABLE `waterfall_ads`;
# 19:25 2021/8/26
CREATE TABLE `pay_debugs` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`agent_id` INT(10) NOT NULL DEFAULT '0' COMMENT '代理商ID',
`type` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '1:支付;2:退款;',
`content` TEXT NULL DEFAULT NULL COMMENT '回调内容' COLLATE 'utf8_general_ci',
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX `agent_id` (`agent_id`) USING BTREE
)
COMMENT='微信支付回调记录'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
CREATE TABLE `agent_settings` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`agent_id` INT(10) NOT NULL COMMENT '代理商ID',
`setting` JSON NOT NULL COMMENT '设置值,JSON格式',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `agent_id` (`agent_id`) USING BTREE
)
COMMENT='代理商设置配置'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
#################################################################
# 15:19 2021/8/27
ALTER TABLE `messages`
ADD COLUMN `author` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '作者' COLLATE 'utf8_general_ci' AFTER `content`;
ALTER TABLE `notices`
ADD COLUMN `author` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '作者' COLLATE 'utf8_general_ci' AFTER `sort`;
ALTER TABLE `articles`
ADD COLUMN `agent_product_ids` TEXT NULL DEFAULT NULL COMMENT '绑定产品' AFTER `sort`;

2
app/Admin/Controllers/SupplierController.php

@ -126,8 +126,6 @@ class SupplierController extends AdminController
$form->image('license_pic')->removable(false)->uniqueName();
$form->text('director');
$form->mobile('contact_phone');
})->editing(function (Form $form) {
$form->responseValidationMessages('111111111111111111111', 'title格式错误');
})->saving(function (Form $form) {
//判断账号是否唯一
if ($form->isCreating()) {

1
app/Admin/bootstrap.php

@ -24,3 +24,4 @@ use Dcat\Admin\Show;
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
app('view')->prependNamespace('admin', resource_path('views/admin'));

37
app/AdminAgent/Controllers/AgentProductController.php

@ -70,14 +70,9 @@ class AgentProductController extends AdminController
return Table::make($titles, $data);
});*/
$grid->column('status')
->using(ProductStatus::array())
->dot([
ProductStatus::ON_SALE => 'success',
ProductStatus::UNAUDITED => '',
ProductStatus::REFUSE => 'danger',
ProductStatus::SOLD_OUT => 'warning',
], 'primary');
$grid->column('status')
->using([ProductStatus::SOLD_OUT => 0, ProductStatus::ON_SALE => 1])
->switch();
$grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示');
$grid->column('updated_at');
@ -234,11 +229,19 @@ class AgentProductController extends AdminController
return $form->response()->error('数据不存在');
}
//推荐按钮开关
if ($form->product_id === null && $form->product_ids === null && $form->is_rec !== null) {
$form->model()->is_rec = $form->is_rec ? 1 : 0;
$form->model()->save();
return $form->response()->success('更新成功');
if ($form->product_id === null && $form->product_ids === null) {
//推荐按钮开关
if ($form->is_rec !== null) {
$form->model()->is_rec = $form->is_rec ? 1 : 0;
$form->model()->save();
return $form->response()->success('更新成功!');
}
//上下架状态按钮开关
if ($form->status !== null) {
$form->model()->status = $form->status == 1 ? ProductStatus::ON_SALE : ProductStatus::SOLD_OUT;
$form->model()->save();
return $form->response()->success('更新成功!');
}
}
//单品销售
@ -300,8 +303,12 @@ class AgentProductController extends AdminController
//处理特殊字段
$form->hidden(['agent_id', 'status']); //表单没有的字段,必须加这句才能够重写
$form->agent_id = $agent_id;
$form->status = $form->status == ProductStatus::ON_SALE ? ProductStatus::ON_SALE : ProductStatus::SOLD_OUT;
$form->guide_id = $form->guide_id ?? 0;
if (array_key_exists($form->status, $form->input())) {
$form->status = $form->status == ProductStatus::ON_SALE ? ProductStatus::ON_SALE : ProductStatus::SOLD_OUT;
}
if (array_key_exists($form->guide_id, $form->input())) {
$form->guide_id = $form->guide_id ?? 0;
}
//不允许编辑的字段
$form->ignore(['id', 'agent_id', 'status', 'created_at', 'updated_at', 'deleted_at']);

6
app/AdminAgent/Controllers/ArticleController.php

@ -2,7 +2,9 @@
namespace App\AdminAgent\Controllers;
use App\AdminAgent\Renderable\SelectAgentProduct;
use App\AdminAgent\Repositories\Article;
use App\Models\AgentProduct;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
@ -87,6 +89,10 @@ class ArticleController extends AdminController
$form->editor('content')->required();
$form->text('sort')->default(255);
$form->select('type')->options(['普通列表', '大图显示'])->default(0)->required();
$form->multipleSelectTable('agent_product_ids')
->dialogWidth('80%;min-width:825px;')
->from(new SelectAgentProduct)
->model(AgentProduct::class);
})->saving(function (Form $form) {
//不允许修改非自己的数据
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {

127
app/AdminAgent/Controllers/ChannelController.php

@ -0,0 +1,127 @@
<?php
namespace App\AdminAgent\Controllers;
use App\AdminAgent\Repositories\Channel;
use App\Models\Channel as ChannelModel;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Tree;
use Illuminate\Support\Facades\Storage;
class ChannelController extends AdminController
{
public function index(Content $content)
{
return $content->header('产品频道')
->body(function (Row $row) {
$tree = new Tree(new ChannelModel());
$tree->query(function ($model) {
//agent_id为0是系统分类,其它是代理商分类
return $model->where('agent_id', Admin::user()->id)->orderBy('sort')->orderBy('id');
});
/*$prefix = Storage::disk('public')->url('');
$tree->branch(function ($branch) use ($prefix) {
$src = $prefix . $branch['icon'] ;
$logo = '<img data-action="preview-img" src="'.$src.'" style="max-width:30px;max-height:30px;cursor:pointer;margin-left:20px;" class="img">';
return "{$branch['id']} - {$branch['name']} $logo";
});*/
$row->column(12, $tree);
});
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Channel(['parent']), function (Grid $grid) {
$grid->model()->where('agent_id', Admin::user()->id)
->orderBy('sort')->orderBy('id', 'desc');
$grid->column('id')->sortable();
$grid->column('icon')->image('', 60, 60);
$grid->column('name');
$grid->column('parent.name');
$grid->column('sort')->editable()->width(120);
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->equal('id')->width(2);
$filter->like('name')->width(3);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Channel(['parent']), function (Show $show) {
//不允许查看非自己的数据
if ($show->model()->agent_id != Admin::user()->id) {
Admin::exit('数据不存在');
}
$show->field('id');
$show->field('icon')->image('', 80, 80);
$show->field('name');
$show->field('parent.name');
$show->field('sort');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Channel(), function (Form $form) {
//不允许修改非自己的数据
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
}
$form->display('id');
$form->image('icon')->uniqueName()->removable(false);
$form->text('name')->required();
$form->select('pid')->options(\App\Models\Channel::selectOptions())->default(0)->required();
$form->text('sort')->default(255);
})->saving(function (Form $form) {
//不允许修改非自己的数据
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
}
//处理特殊字段
$form->hidden(['agent_id']);
$form->agent_id = Admin::user()->id;
$form->sort = $form->sort ?? 255;
//不允许编辑的字段
$form->ignore(['id', 'deleted_at']);
})->deleting(function (Form $form) {
//不允许删除非自己的数据
if (array_filter($form->model()->toArray(), fn($v) => $v['agent_id'] != Admin::user()->id)) {
return $form->response()->error('数据不存在');
}
});
}
}

13
app/AdminAgent/Controllers/MessageController.php

@ -24,7 +24,10 @@ class MessageController extends AdminController
$grid->model()->where('agent_id', Admin::user()->id);
$grid->column('id')->sortable();
$grid->column('user_id');
$grid->column('author');
$grid->column('user_id')
->if(fn() => $this->user_id == 0)
->display('所有人');
$grid->column('title');
// $grid->column('is_read')->if(fn($v) => $this->user_id != 0)->bool()->else()->display('所有人接收');
$grid->column('created_at');
@ -55,6 +58,7 @@ class MessageController extends AdminController
}
$show->field('id');
$show->field('author');
$show->field('user_id');
$show->field('title');
$show->field('content')->unescape();
@ -83,6 +87,7 @@ class MessageController extends AdminController
}
$form->display('id');
$form->text('author')->default(Admin::user()->name);
$form->selectTable('user_id')
->from(new SelectUser())
->model(User::class, 'id', 'nickname')
@ -115,6 +120,12 @@ class MessageController extends AdminController
$form->agent_id = Admin::user()->id;
$form->user_id = $form->user_id ?? 0;
foreach ($form->input() as $k => $v) {
if (is_null($v)) {
$form->$k = '';
}
}
//不允许编辑的字段
$form->ignore(['id', 'status', 'created_at', 'updated_at', 'deleted_at']);
})->deleting(function (Form $form) {

11
app/AdminAgent/Controllers/NoticeController.php

@ -23,6 +23,7 @@ class NoticeController extends AdminController
->orderBy('sort')->orderBy('id', 'DESC');
$grid->column('id')->sortable();
$grid->column('author');
$grid->column('title');
$grid->column('sort')->editable()->width(120);
$grid->column('created_at');
@ -53,6 +54,7 @@ class NoticeController extends AdminController
}
$show->field('id');
$show->field('author');
$show->field('title');
$show->field('content')->unescape();
$show->field('sort');
@ -75,7 +77,8 @@ class NoticeController extends AdminController
}
$form->display('id');
$form->text('title');
$form->text('author')->default(Admin::user()->name);
$form->text('title')->required();
$form->editor('content');
$form->text('sort')->default(255);
})->saving(function (Form $form) {
@ -89,6 +92,12 @@ class NoticeController extends AdminController
$form->agent_id = Admin::user()->id;
$form->sort = $form->sort ?? 255;
foreach ($form->input() as $k => $v) {
if (is_null($v)) {
$form->$k = '';
}
}
//不允许编辑的字段
$form->ignore(['id', 'created_at', 'updated_at']);
})->deleting(function (Form $form) {

17
app/AdminAgent/Controllers/OrderController.php

@ -3,6 +3,7 @@
namespace App\AdminAgent\Controllers;
use App\AdminAgent\Extensions\Grid\AuditRefund;
use App\AdminAgent\Extensions\Grid\ChangeOrderStatus;
use App\AdminAgent\Repositories\Order;
use App\Common\OrderStatus;
use App\Common\PayType;
@ -49,8 +50,8 @@ class OrderController extends AdminController
//状态及退款处理
$grid->column('status')
->using(OrderStatus::array())
->if(fn() => in_array($this->status, [OrderStatus::REFUNDING, OrderStatus::REFUNDED, OrderStatus::REFUSED_REFUND]))
->display('<a style="cursor: pointer;" class="btn btn-sm btn-info" href="javascript:;">查看</a>&nbsp;')
->modal('查看退款详情', function (Grid\Displayers\Modal $modal) {
$modal->icon('');
if (!$this->refund_info) {
@ -73,6 +74,7 @@ class OrderController extends AdminController
];
return Table::make($refund_info);
})
->display('<a style="cursor: pointer;" class="btn btn-sm btn-info" href="javascript:;">退款详情</a>&nbsp;') //放在modal下面可以去掉空格
->then(function (Grid\Column $column) {
if ($this->status == OrderStatus::REFUNDING) {
$column->append((new AuditRefund(null, 1))->setKey($this->id))->append('&nbsp;');
@ -83,8 +85,10 @@ class OrderController extends AdminController
$column->append('<a style="cursor: pointer;" class="btn btn-sm btn-danger" href="javascript:;">已拒绝退款</a>');
}
})
->else()
->select(OrderStatus::array());
->if(fn() => $this->status == OrderStatus::OFFLINE_UNPAID)
->then(function (Grid\Column $column) {
return $column->action(new ChangeOrderStatus);
});
$grid->column('pay_type')->using(PayType::array());
$grid->column('price');
@ -165,11 +169,10 @@ class OrderController extends AdminController
$form->display('id');
$form->text('name');
$form->text('mobile');
$form->select('status')->options(OrderStatus::array());
})->saving(function (Form $form) {
//不允许修改非自己的数据
if ($form->isCreating()) {
return $form->response()->error('不允许此操作');
return $form->response()->error('操作禁止');
}
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
return $form->response()->error('数据不存在');
@ -182,7 +185,11 @@ class OrderController extends AdminController
//退款不能直接编辑
if (in_array($form->status, [OrderStatus::REFUNDED, OrderStatus::REFUSED_REFUND])) {
return $form->response()->error('请通过订单列表的”通过“和”拒绝“按钮来审核退款');
} else if ($form->status != OrderStatus::OFFLINE_PAID) {
return $form->response()->error('操作禁止');
}
})->saved(function (Form $form) {
return $form->response()->success('更新成功')->refresh();
})->deleting(function (Form $form) {
return $form->response()->error('操作禁止');
});

18
app/AdminAgent/Controllers/SettingController.php

@ -0,0 +1,18 @@
<?php
namespace App\AdminAgent\Controllers;
use App\AdminAgent\Forms\Setting;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Card;
class SettingController extends AdminController
{
public function index(Content $content)
{
return $content
->title('系统设置')
->body(new Card('&nbsp;', new Setting()));
}
}

2
app/AdminAgent/Controllers/SpecialController.php

@ -46,6 +46,8 @@ class SpecialController extends AdminController
}
return Table::make(['产品ID', '标题', '图片', '销量', '库存'], $result);
});
$grid->column('url', '专题链接')
->display(fn() => '/pages/activityList/index?special_id=' . $this->id)->copyable();
$grid->column('created_at');
$grid->column('updated_at')->sortable();

1
app/AdminAgent/Controllers/UserController.php

@ -46,6 +46,7 @@ class UserController extends AdminController
$filter->equal('id')->width(2);
$filter->equal('mobile')->width(2);
$filter->equal('is_verify')->select(['否', '是'])->width(2);
});
});
}

4
app/AdminAgent/Extensions/Grid/AuditRefund.php

@ -49,7 +49,7 @@ class AuditRefund extends RowAction
//修改订单状态
$order = Order::firstWhere(['id' => $this->getKey(), 'agent_id' => $agent->id, 'status' => OrderStatus::REFUNDING]);
if (!$order) {
$this->response()->error("退款订单不存在或已处理过了")->refresh();
return $this->response()->error("退款订单不存在或已处理过了")->refresh();
}
$order->status = OrderStatus::REFUNDED;
$order->save();
@ -95,7 +95,7 @@ class AuditRefund extends RowAction
try {
$order = Order::firstWhere(['id' => $this->getKey(), 'agent_id' => Admin::user()->id, 'status' => OrderStatus::REFUNDING]);
if (!$order) {
$this->response()->error("退款订单不存在或已处理过了")->refresh();
return $this->response()->error("退款订单不存在或已处理过了")->refresh();
}
$order->status = OrderStatus::REFUSED_REFUND;
$order->save();

46
app/AdminAgent/Extensions/Grid/ChangeOrderStatus.php

@ -0,0 +1,46 @@
<?php
namespace App\AdminAgent\Extensions\Grid;
use App\Common\OrderStatus;
use App\Models\Order;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid\RowAction;
/**
* 改变订单状态
* Class ChangeOrderStatus
* @package App\AdminAgent\Extensions\Grid
*/
class ChangeOrderStatus extends RowAction
{
protected $title = '设为 [线下]已付款';
protected function html()
{
$this->appendHtmlAttribute('class', 'btn btn-sm btn-success');
$this->defaultHtmlAttribute('href', 'javascript:;');
return "<a {$this->formatHtmlAttributes()}>{$this->title}</a>";
}
public function handle()
{
try {
$order = Order::firstWhere(['id' => $this->getKey(), 'agent_id' => Admin::user()->id, 'status' => OrderStatus::OFFLINE_UNPAID]);
if (!$order) {
return $this->response()->error("订单不存在或已处理过了")->refresh();
}
$order->status = OrderStatus::OFFLINE_PAID;
$order->save();
return $this->response()->success("操作成功,已设置为“线下已付款”")->refresh();
} catch (\Exception $e) {
return $this->response()->error($e->getMessage());
}
}
public function confirm()
{
return ['确定要设置为已付款吗?', ''];
}
}

49
app/AdminAgent/Forms/Setting.php

@ -0,0 +1,49 @@
<?php
namespace App\AdminAgent\Forms;
use App\Models\AgentSetting;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Form;
class Setting extends Form
{
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
// dump($input);
AgentSetting::updateOrCreate(
['agent_id' => Admin::user()->id],
['setting' => json_encode($input), 'agent_id' => Admin::user()->id],
);
return $this->response()->success('保存成功')->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->text('earnest')->required()->help('用户支付订金、定金、首付款的金额');
$this->text('earnest_timeout')->required()->help('单位:分钟。当通过订金、定金、首付款支付时,用户超过该时间未支付将关闭订单,且定金不退');
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
$setting = AgentSetting::where('agent_id', Admin::user()->id)->value('setting');
return is_string($setting) ? json_decode($setting, true) : [];
}
}

16
app/AdminAgent/Repositories/Channel.php

@ -0,0 +1,16 @@
<?php
namespace App\AdminAgent\Repositories;
use App\Models\Channel as Model;
use Dcat\Admin\Repositories\EloquentRepository;
class Channel extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
}

8
app/AdminAgent/bootstrap.php

@ -24,3 +24,11 @@ use Dcat\Admin\Show;
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
app('view')->prependNamespace('admin', resource_path('views/admin'));
/**
* 过滤器初始化
*/
Filter::resolving(function (Filter $filter) {
$filter->panel();
});

3
app/AdminAgent/routes.php

@ -27,14 +27,13 @@ Route::group([
$router->resource('demand', 'DemandController');
$router->resource('demand_bidding', 'DemandBiddingController');
$router->resource('message/list', 'MessageController');
$router->resource('notice/list', 'NoticeController');
$router->resource('agent_info', 'AgentInfoController');
$router->resource('supplier/list', 'SupplierController');
$router->resource('article/list', 'ArticleController');
$router->resource('setting', 'SettingController');
$router->resource('channel/list', 'ChannelController');
//api
$router->any('/api/demand/binding', 'DemandController@binding');

8
app/AdminGuide/bootstrap.php

@ -24,3 +24,11 @@ use Dcat\Admin\Show;
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
app('view')->prependNamespace('admin', resource_path('views/admin'));
/**
* 过滤器初始化
*/
Filter::resolving(function (Filter $filter) {
$filter->panel();
});

1
app/AdminSettled/Controllers/AgentController.php

@ -18,6 +18,7 @@ class AgentController extends AdminController
public function __construct()
{
admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_MENU'], '');
app('view')->prependNamespace('admin', resource_path('views/admin'));
}
protected function grid()

1
app/AdminSettled/Controllers/GuideController.php

@ -17,6 +17,7 @@ class GuideController extends AdminController
public function __construct()
{
admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_MENU'], '');
app('view')->prependNamespace('admin', resource_path('views/admin'));
}
protected function grid()

1
app/AdminSettled/Controllers/SupplierController.php

@ -17,6 +17,7 @@ class SupplierController extends AdminController
public function __construct()
{
admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_MENU'], '');
app('view')->prependNamespace('admin', resource_path('views/admin'));
}
protected function grid()

1
app/AdminSettled/bootstrap.php

@ -24,3 +24,4 @@ use Dcat\Admin\Show;
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
app('view')->prependNamespace('admin', resource_path('views/admin'));

8
app/AdminSupplier/bootstrap.php

@ -24,3 +24,11 @@ use Dcat\Admin\Show;
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
app('view')->prependNamespace('admin', resource_path('views/admin'));
/**
* 过滤器初始化
*/
Filter::resolving(function (Filter $filter) {
$filter->panel();
});

11
app/Common/AgentType.php

@ -9,9 +9,14 @@ namespace App\Common;
*/
class AgentType
{
const OPERATOR = 1; //计调版旅行社
const SUPPLIER = 2; //供应商旅行社
const CLUSTER = 3; //组团版旅行社
/** @var int 计调版旅行社 */
const OPERATOR = 1;
/** @var int 供应商旅行社 */
const SUPPLIER = 2;
/** @var int 组团版旅行社 */
const CLUSTER = 3;
public static function array(): array
{

44
app/Common/OrderStatus.php

@ -9,17 +9,39 @@ namespace App\Common;
*/
class OrderStatus
{
const CANCEL = -1; //取消
const UNPAID = 0; //待付款
const PAY_EARNEST = 1; //已付定金
const PAID = 2; //已付全款
const PAID_RETAINAGE= 3; //已付尾款
const OFFLINE_UNPAID= 4; //线下支付未付款
const OFFLINE_PAID = 5; //线下支付已收款
const REFUNDING = 6; //申请退款
const REFUNDED = 7; //退款完成
const REFUSED_REFUND= 8; //退款拒绝
const SUCCESS = 16; //已完成
/** @var int 取消 */
const CANCEL = -1;
/** @var int 待付款 */
const UNPAID = 0;
/** @var int 已付定金 */
const PAY_EARNEST = 1;
/** @var int 已付全款 */
const PAID = 2;
/** @var int 已付尾款 */
const PAID_RETAINAGE= 3;
/** @var int 线下支付未付款 */
const OFFLINE_UNPAID= 4;
/** @var int 线下支付已收款 */
const OFFLINE_PAID = 5;
/** @var int 申请退款 */
const REFUNDING = 6;
/** @var int 退款完成 */
const REFUNDED = 7;
/** @var int 退款拒绝 */
const REFUSED_REFUND= 8;
/** @var int 已完成 */
const SUCCESS = 16;
public static function array(): array
{

23
app/Common/PayType.php

@ -9,12 +9,23 @@ namespace App\Common;
*/
class PayType
{
const ONLINE = 0; //在线全款支付
const OFFLINE = 1; //线下支付
const SUBSCRIPTION = 2; //订金支付
const DEPOSIT = 3; //定金支付
const DOWN_PAYMENT = 4; //尾款/多加支付
const BALANCE_PAY = 5; //尾款/多加支付
/** @var int 在线全款支付 */
const ONLINE = 0;
/** @var int 线下支付 */
const OFFLINE = 1;
/** @var int 订金支付 */
const SUBSCRIPTION = 2;
/** @var int 定金支付 */
const DEPOSIT = 3;
/** @var int 尾款/多加支付 */
const DOWN_PAYMENT = 4;
/** @var int 尾款/多加支付 */
const BALANCE_PAY = 5;
public static function array()
{

15
app/Common/ProductStatus.php

@ -9,10 +9,17 @@ namespace App\Common;
*/
class ProductStatus
{
const ON_SALE = 1; //正常在售状态
const UNAUDITED = 0; //未审核状态
const REFUSE = -1; //审核拒绝
const SOLD_OUT = -2; //下架
/** @var int 正常在售状态 */
const ON_SALE = 1;
/** @var int 未审核状态 */
const UNAUDITED = 0;
/** @var int 审核拒绝 */
const REFUSE = -1;
/** @var int 下架 */
const SOLD_OUT = -2;
public static function array(): array
{

15
app/Common/UserStatus.php

@ -9,10 +9,17 @@ namespace App\Common;
*/
class UserStatus
{
const NORMAL = 1; //正常启用状态
const UNAUDITED = 0; //未审核状态
const REFUSE = -1; //拒绝
const DISABLED = -2; //禁用
/** @var int 正常启用状态 */
const NORMAL = 1;
/** @var int 未审核状态 */
const UNAUDITED = 0;
/** @var int 拒绝 */
const REFUSE = -1;
/** @var int 禁用 */
const DISABLED = -2;
public static function array(): array
{

11
app/Http/Controllers/Api/AgentProductController.php

@ -19,13 +19,12 @@ class AgentProductController extends Controller
public function index()
{
$category_id = request()->input('category_id');
$where = [];
if ($category_id) {
$where['category_id'] = $category_id;
}
$where['agent_id'] = $this->agent_id;
$list = AgentProduct::list()->where($where)->orderBy('id', 'DESC')->simplePaginate();
$list = AgentProduct::list($this->agent_id)->where($where)->orderBy('id', 'DESC')->simplePaginate();
$list = $this->paginatePicAddHost($list);
$list = $this->insertAd($list);
@ -70,7 +69,7 @@ class AgentProductController extends Controller
// 猜你喜欢
public function guessLike()
{
$list = AgentProduct::list()->where('agent_id', $this->agent_id)->orderBy('id', 'DESC')->simplePaginate();
$list = AgentProduct::list($this->agent_id)->orderBy('id', 'DESC')->simplePaginate();
$list = $this->paginatePicAddHost($list);
$list = $list->toArray();
if (!empty($list['data']) && is_array($list['data'])) {
@ -84,7 +83,7 @@ class AgentProductController extends Controller
//【我的】页面下方推荐
public function recommendList()
{
$list = AgentProduct::list()->where(['agent_id' => $this->agent_id, 'is_rec' => 1])
$list = AgentProduct::list($this->agent_id)->where(['is_rec' => 1])
->orderBy('id', 'DESC')->simplePaginate();
$list = $this->paginatePicAddHost($list);
$list = $this->insertAd($list);
@ -95,7 +94,7 @@ class AgentProductController extends Controller
//人气爆款列表,销量排序
public function hotList()
{
$list = AgentProduct::list()->where('agent_id', $this->agent_id)->orderBy('id', 'DESC')->simplePaginate();
$list = AgentProduct::list($this->agent_id)->orderBy('id', 'DESC')->simplePaginate();
$list = $this->paginatePicAddHost($list);
$list = $this->insertAd($list);

14
app/Http/Controllers/Api/ArticleController.php

@ -3,6 +3,7 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\AgentProduct;
use App\Models\Article;
use Illuminate\Support\Facades\Storage;
@ -53,6 +54,19 @@ class ArticleController extends Controller
return $this->error('文章不存在或已被删除');
}
$article->image = Storage::disk('public')->url('') . $article->image;
if ($article->agent_product_ids) {
$product = AgentProduct::list($this->agent_id)
->whereIn('id', $article->agent_product_ids)
->get();
if (!$product->isEmpty()) {
$prefix = Storage::disk('public')->url('');
foreach ($product as &$v) {
$v->pictures = array_map(fn($item) => $prefix . $item, $v->pictures);
}
}
}
$article->product = $product ?? [];
return $this->success($article);
}
}

2
app/Http/Controllers/Api/ChannelController.php

@ -42,7 +42,7 @@ class ChannelController extends Controller
{
$channel_id = (int)request()->input('channel_id');
$list = AgentProduct::list()->where('agent_id', $this->agent_id)
$list = AgentProduct::list($this->agent_id)
->whereRaw("FIND_IN_SET($channel_id, `channel_id`)")
->orderBy('id', 'DESC')
->simplePaginate();

19
app/Http/Controllers/Api/IndexController.php

@ -38,23 +38,6 @@ class IndexController extends Controller
# 我的频道
if ($this->user_id) {
$channel_ids = UserChannel::where('user_id', $this->user_id)->value('channels');
//如果不存在则存入初始数据
if (!$channel_ids) {
$channel_ids = Channel::where([
['agent_id', '=', $this->agent_id],
['pid', '<>', 0],
])
->orderBy('id')
->limit(8)
->pluck('id')
->toArray();
//存入user_channel
UserChannel::where('user_id', $this->user_id)
->insert([
'user_id' => $this->user_id,
'channels' => json_encode($channel_ids)
]);
}
$my_channels = Channel::where('agent_id', $this->agent_id)
->whereIn('id', $channel_ids)
->get(['id', 'name', 'icon']);
@ -82,7 +65,7 @@ class IndexController extends Controller
}
# 人气爆款
$hots = AgentProduct::list()->where('agent_id', $this->agent_id)
$hots = AgentProduct::list($this->agent_id)
->orderBy('sale', 'desc')->orderBy('id', 'desc')
->limit(6)->get();
if (!$hots->isEmpty()) {

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

@ -4,7 +4,9 @@ namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Agent;
use App\Models\Channel;
use App\Models\User;
use App\Models\UserChannel;
use EasyWeChat\Factory;
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use Illuminate\Support\Facades\Cache;
@ -53,19 +55,38 @@ class LoginController extends Controller
}
// TODO 登录部分待优化
$userModel = User::firstOrCreate([
$userModel = User::query()->firstOrCreate([
'openid' => $res['openid'] ?? '',
'unionid' => $res['unionid'] ?? '',
'agent_id' => $agent->id,
], [
//'nickname' => uniqid(), 根据前端判断,不设置默认值
//'avatar' => '/static/images/avatar.png'
'unionid' => $res['unionid'] ?? '',
]);
//保存session_key
Cache::put('session_key_' . $userModel->id, $res['session_key']);
//TODO 存入初始化数据 user_channel
//如果是新增,插入初始数据
if ($userModel->wasRecentlyCreated) {
$channel_ids = UserChannel::where('user_id', $userModel->id)->first();
//如果不存在则存入初始数据
if (!$channel_ids) {
$channel_ids = Channel::where([
['agent_id', '=', $this->agent_id],
['pid', '<>', 0],
])
->orderBy('id')
->limit(8)
->pluck('id')
->toArray();
//存入user_channel
UserChannel::where('user_id', $userModel->id)
->insert([
'user_id' => $userModel->id,
'channels' => json_encode($channel_ids)
]);
}
}
$token_key = md5($userModel->id . env('APP_KEY'));
Cache::put($token_key, $userModel->id);

2
app/Http/Controllers/Api/MessageController.php

@ -23,7 +23,7 @@ class MessageController extends Controller
->simplePaginate(15);
if (!empty($list->items())) {
foreach ($list->items() as &$v) {
$v->is_read = (int)MessageRead::where(['id' => $v->id, 'user_id' => $v->user_id])->exists();
$v->is_read = (int)MessageRead::where(['id' => $v->id, 'user_id' => $this->user_id])->exists();
}
}
return $this->success($list);

15
app/Http/Controllers/Api/OrderController.php

@ -34,19 +34,22 @@ class OrderController extends Controller
$formData = $request->only(['page', 'status']);
$request->validate([
'page' => 'regex:/^\d+$/',
'status' => 'nullable|integer'
'status' => 'nullable|regex:/^\d+(,\d+)*$/'
], [
'page.regex' => '页码错误',
'status.integer' => '订单状态错误'
'status.regex' => '订单状态错误'
]);
$order_list = Order::where('user_id', $this->user_id);
if (isset($formData['status'])) {
$where['status'] = $formData['status'];
if (preg_match('/^\d+$/', $formData['status'])) {
$order_list = $order_list->where('status', $formData['status']);
} else {
$order_list = $order_list->whereIn('status', explode(',', $formData['status']));
}
}
$where['user_id'] = $this->user_id;
$order_list = Order::where($where)
->select('id', 'agent_product_id', 'product_id', 'title', 'picture', 'price', 'num', 'status', 'created_at')
$order_list = $order_list->select('id', 'agent_product_id', 'product_id', 'title', 'picture', 'price', 'num', 'status', 'created_at')
->orderBy('id', 'DESC')
->simplePaginate(15)
->toArray();

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

@ -19,8 +19,7 @@ class SpecialController extends Controller
->find($id);
$detail->picture = array_map(fn($v) => $prefix . $v, $detail->picture);
$detail->product = AgentProduct::list()
->where('agent_id', $this->agent_id)
$detail->product = AgentProduct::list($this->agent_id)
->whereIn('id', $detail->agent_product_id)
->orderBy('id', 'DESC')->limit(6)->get();
foreach ($detail->product as $k => &$v) {

4
app/Http/Controllers/Api/TestController.php

@ -3,6 +3,8 @@
namespace App\Http\Controllers\Api;
use App\Models\Agent;
use App\Models\AgentSetting;
use Illuminate\Support\Facades\DB;
/**
* 仅用于测试
@ -14,6 +16,6 @@ class TestController
public function index()
{
//test
return Agent::query()->where(['appid' => 'wxb35ef055a4dd8ad4', 'status' => 1])->value('id');
return AgentSetting::val(1, 'earnest') ?? 198.88;
}
}

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

@ -19,9 +19,8 @@ class UserChannelController extends Controller
{
$formData = $request->only(['channels']);
$request->validate([
'channels' => 'required|array',
'channels' => 'nullable|array',
], [
'channels.required' => '未选择任何频道',
'channels.array' => 'channels必须是数组',
]);

38
app/Http/Controllers/Api/VerificationController.php

@ -2,9 +2,12 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Agent;
use App\Models\Order;
use App\Models\User;
use App\Common\OrderStatus;
use EasyWeChat\Factory;
use Illuminate\Support\Facades\Storage;
class VerificationController extends Controller
{
@ -15,7 +18,7 @@ class VerificationController extends Controller
$code_arr = explode('-', $input_verify_code);
if (count($code_arr) != 2) {
$this->error('参数错误');
return $this->error('参数错误');
}
list($id, $verify_code) = $code_arr;
@ -37,4 +40,37 @@ class VerificationController extends Controller
return $this->success();
}
public function qrcode()
{
$id = request()->input('id'); //订单ID
$order = Order::where(['agent_id' => $this->agent_id, 'user_id' => $this->user_id])->find($id);
if (!$order) {
return $this->error('订单不存在!');
} else if (!in_array($order->status, [OrderStatus::PAID, OrderStatus::PAID_RETAINAGE, OrderStatus::REFUSED_REFUND])) {
return $this->error('当前订单状态不允许核销!');
} else if (!$order->verify_code) {
$order->verify_code = uniqid();
$order->save();
}
$verify_code = $order->id . '-' . $order->verify_code;
$agent = Agent::find($this->agent_id);
$config = [
'app_id' => $agent->appid,
'secret' => $agent->appsecret,
];
$app = Factory::miniProgram($config);
$response = $app->app_code->getUnlimit($verify_code, ['path' => 'pages/index/index']);
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
$filename = $response->saveAs(storage_path('app/public/verify_code'), $verify_code);
}
$prefix = Storage::disk('public')->url('verify_code/');
return $this->success(['qrcode' => $prefix . $filename]);
}
}

19
app/Http/Controllers/Api/WxpayController.php

@ -29,9 +29,9 @@ class WxpayController
]);
$app = Factory::payment($config);
try {
$response = $app->handlePaidNotify(function ($message, $fail) {
$response = $app->handlePaidNotify(function ($message, $fail) use ($agent_id) {
//TODO 仅测试用
DB::table('pay_debugs')->insert(['content' => json_encode($message)]);
DB::table('pay_debugs')->insert(['agent_id' => $agent_id, 'type' => 1, 'content' => json_encode($message)]);
$this->log($message);
// 请求成功
@ -70,17 +70,11 @@ class WxpayController
if ($status == OrderStatus::UNPAID) {
$order->status = OrderStatus::PAY_EARNEST;
} else if ($status == OrderStatus::PAY_EARNEST) {
//只有支付的金额大于等于订单总价,才将订单状态修改为PAID_RETAINAGE
if ($order->paid_money + $money >= $order->price) {
$order->status = OrderStatus::PAID_RETAINAGE;
}
$order->status = OrderStatus::PAID_RETAINAGE;
$order->verify_code = uniqid(); //生成核销码
}
} else if ($pay_type == 0) {
$order->status = OrderStatus::PAID;
}
//支付金额>=订单金额之后生成核销码
if ($order->paid_money + $money >= $order->price) {
$order->verify_code = uniqid(); //生成核销码
}
@ -145,7 +139,10 @@ class WxpayController
]);
$app = Factory::payment($config);
try {
$response = $app->handleRefundedNotify(function ($message, $reqInfo, $fail) {
$response = $app->handleRefundedNotify(function ($message, $reqInfo, $fail) use ($agent_id) {
//TODO 仅测试用
DB::table('pay_debugs')->insert(['agent_id' => $agent_id, 'type' => 2, 'content' => json_encode($message)]);
// 记录一下本地调试
$this->log(['message' => $message, 'reqInfo' => $reqInfo], 'refund');
// 请求成功

4
app/Http/Middleware/ApiAuth.php

@ -22,7 +22,7 @@ class ApiAuth
if (empty($auth)) {
return response()->json([
'code' => -1,
'code' => -2,
'msg' => '关键认证参数缺失',
'data' => [],
'status' => 500,
@ -33,7 +33,7 @@ class ApiAuth
$user_id = Cache::get($auth);
if (empty($user_id) || $user_id != User::query()->where(['id' => $user_id, 'status' => 1])->value('id')) {
return response()->json([
'code' => -1,
'code' => -2,
'msg' => '用户不存在或登录已超时,请重新登录',
'data' => [],
'status' => 403,

4
app/Models/AgentProduct.php

@ -90,12 +90,12 @@ class AgentProduct extends BaseModel
}
//列表查询统一查询条件
public function scopeList($query)
public function scopeList($query, $agent_id)
{
return $query->whereHas('product', function ($query) {
return $query->where('status', ProductStatus::ON_SALE)->where('stock', '>', 0);
})
->where('status', ProductStatus::ON_SALE)->where('stock', '>', 0)
->where(['agent_id' => $agent_id, 'status' => ProductStatus::ON_SALE])->where('stock', '>', 0)
->select('id', 'sale', 'product_id', 'price', 'original_price', 'title', 'pictures');
}
}

24
app/Models/AgentSetting.php

@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class AgentSetting extends BaseModel
{
use HasFactory;
protected $fillable = ['agent_id', 'setting'];
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->timestamps = false;
}
public function scopeVal($query, $agent_id, $key)
{
$setting = json_decode($query->where('agent_id', $agent_id)->value('setting'), true);
return $setting[$key] ?? null;
}
}

2
app/Models/Article.php

@ -8,4 +8,6 @@ use Illuminate\Database\Eloquent\SoftDeletes;
class Article extends BaseModel
{
use HasFactory, SoftDeletes;
protected $casts = ['agent_product_ids' => 'json'];
}

5
app/Models/Channel.php

@ -26,4 +26,9 @@ class Channel extends BaseModel
parent::__construct($attributes);
$this->timestamps = false;
}
public function parent()
{
return $this->hasOne(self::class, 'id', 'pid');
}
}

88
dcat_admin_ide_helper.php

@ -43,6 +43,10 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection password
* @property Grid\Column|Collection remember_token
* @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 about
* @property Grid\Column|Collection buy_protocol
* @property Grid\Column|Collection reg_protocol
@ -52,11 +56,12 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection channel_id
* @property Grid\Column|Collection deleted_at
* @property Grid\Column|Collection guide_id
* @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 status
* @property Grid\Column|Collection stock
* @property Grid\Column|Collection verifier
* @property Grid\Column|Collection address
@ -72,11 +77,20 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection rate
* @property Grid\Column|Collection author
* @property Grid\Column|Collection image
* @property Grid\Column|Collection sort
* @property Grid\Column|Collection pid
* @property Grid\Column|Collection template
* @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 images
* @property Grid\Column|Collection publisher_id
* @property Grid\Column|Collection publisher_type
* @property Grid\Column|Collection state
* @property Grid\Column|Collection demand_id
* @property Grid\Column|Collection connection
* @property Grid\Column|Collection exception
* @property Grid\Column|Collection failed_at
@ -84,7 +98,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection queue
* @property Grid\Column|Collection uuid
* @property Grid\Column|Collection photo
* @property Grid\Column|Collection is_read
* @property Grid\Column|Collection coupon_id
* @property Grid\Column|Collection mobile
* @property Grid\Column|Collection num
@ -96,9 +109,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection verify_code
* @property Grid\Column|Collection email
* @property Grid\Column|Collection token
* @property Grid\Column|Collection pictures
* @property Grid\Column|Collection url
* @property Grid\Column|Collection picture_ad
* @property Grid\Column|Collection channels
* @property Grid\Column|Collection money
* @property Grid\Column|Collection order_id
@ -140,6 +150,10 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection password(string $label = null)
* @method Grid\Column|Collection remember_token(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 about(string $label = null)
* @method Grid\Column|Collection buy_protocol(string $label = null)
* @method Grid\Column|Collection reg_protocol(string $label = null)
@ -149,11 +163,12 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection channel_id(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_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 status(string $label = null)
* @method Grid\Column|Collection stock(string $label = null)
* @method Grid\Column|Collection verifier(string $label = null)
* @method Grid\Column|Collection address(string $label = null)
@ -169,11 +184,20 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection rate(string $label = null)
* @method Grid\Column|Collection author(string $label = null)
* @method Grid\Column|Collection image(string $label = null)
* @method Grid\Column|Collection sort(string $label = null)
* @method Grid\Column|Collection pid(string $label = null)
* @method Grid\Column|Collection template(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 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 demand_id(string $label = null)
* @method Grid\Column|Collection connection(string $label = null)
* @method Grid\Column|Collection exception(string $label = null)
* @method Grid\Column|Collection failed_at(string $label = null)
@ -181,7 +205,6 @@ namespace Dcat\Admin {
* @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 is_read(string $label = null)
* @method Grid\Column|Collection coupon_id(string $label = null)
* @method Grid\Column|Collection mobile(string $label = null)
* @method Grid\Column|Collection num(string $label = null)
@ -193,9 +216,6 @@ namespace Dcat\Admin {
* @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 pictures(string $label = null)
* @method Grid\Column|Collection url(string $label = null)
* @method Grid\Column|Collection picture_ad(string $label = null)
* @method Grid\Column|Collection channels(string $label = null)
* @method Grid\Column|Collection money(string $label = null)
* @method Grid\Column|Collection order_id(string $label = null)
@ -242,6 +262,10 @@ namespace Dcat\Admin {
* @property Show\Field|Collection password
* @property Show\Field|Collection remember_token
* @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 about
* @property Show\Field|Collection buy_protocol
* @property Show\Field|Collection reg_protocol
@ -251,11 +275,12 @@ namespace Dcat\Admin {
* @property Show\Field|Collection channel_id
* @property Show\Field|Collection deleted_at
* @property Show\Field|Collection guide_id
* @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 status
* @property Show\Field|Collection stock
* @property Show\Field|Collection verifier
* @property Show\Field|Collection address
@ -271,11 +296,20 @@ namespace Dcat\Admin {
* @property Show\Field|Collection rate
* @property Show\Field|Collection author
* @property Show\Field|Collection image
* @property Show\Field|Collection sort
* @property Show\Field|Collection pid
* @property Show\Field|Collection template
* @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 images
* @property Show\Field|Collection publisher_id
* @property Show\Field|Collection publisher_type
* @property Show\Field|Collection state
* @property Show\Field|Collection demand_id
* @property Show\Field|Collection connection
* @property Show\Field|Collection exception
* @property Show\Field|Collection failed_at
@ -283,7 +317,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection queue
* @property Show\Field|Collection uuid
* @property Show\Field|Collection photo
* @property Show\Field|Collection is_read
* @property Show\Field|Collection coupon_id
* @property Show\Field|Collection mobile
* @property Show\Field|Collection num
@ -295,9 +328,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection verify_code
* @property Show\Field|Collection email
* @property Show\Field|Collection token
* @property Show\Field|Collection pictures
* @property Show\Field|Collection url
* @property Show\Field|Collection picture_ad
* @property Show\Field|Collection channels
* @property Show\Field|Collection money
* @property Show\Field|Collection order_id
@ -339,6 +369,10 @@ namespace Dcat\Admin {
* @method Show\Field|Collection password(string $label = null)
* @method Show\Field|Collection remember_token(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 about(string $label = null)
* @method Show\Field|Collection buy_protocol(string $label = null)
* @method Show\Field|Collection reg_protocol(string $label = null)
@ -348,11 +382,12 @@ namespace Dcat\Admin {
* @method Show\Field|Collection channel_id(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_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 status(string $label = null)
* @method Show\Field|Collection stock(string $label = null)
* @method Show\Field|Collection verifier(string $label = null)
* @method Show\Field|Collection address(string $label = null)
@ -368,11 +403,20 @@ namespace Dcat\Admin {
* @method Show\Field|Collection rate(string $label = null)
* @method Show\Field|Collection author(string $label = null)
* @method Show\Field|Collection image(string $label = null)
* @method Show\Field|Collection sort(string $label = null)
* @method Show\Field|Collection pid(string $label = null)
* @method Show\Field|Collection template(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 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 demand_id(string $label = null)
* @method Show\Field|Collection connection(string $label = null)
* @method Show\Field|Collection exception(string $label = null)
* @method Show\Field|Collection failed_at(string $label = null)
@ -380,7 +424,6 @@ namespace Dcat\Admin {
* @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 is_read(string $label = null)
* @method Show\Field|Collection coupon_id(string $label = null)
* @method Show\Field|Collection mobile(string $label = null)
* @method Show\Field|Collection num(string $label = null)
@ -392,9 +435,6 @@ namespace Dcat\Admin {
* @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 pictures(string $label = null)
* @method Show\Field|Collection url(string $label = null)
* @method Show\Field|Collection picture_ad(string $label = null)
* @method Show\Field|Collection channels(string $label = null)
* @method Show\Field|Collection money(string $label = null)
* @method Show\Field|Collection order_id(string $label = null)

3
ready.md

@ -74,4 +74,7 @@ INSERT INTO `channels` (`id`, `agent_id`, `pid`, `name`, `icon`, `sort`, `delete
INSERT INTO `channels` (`id`, `agent_id`, `pid`, `name`, `icon`, `sort`, `deleted_at`) VALUES (40, 0, 5, '有问必答', 'images/icon.jpg', 255, NULL);
INSERT INTO `channels` (`id`, `agent_id`, `pid`, `name`, `icon`, `sort`, `deleted_at`) VALUES (41, 0, 5, '热门笔记', 'images/icon.jpg', 255, NULL);
ALTER TABLE `products`
AUTO_INCREMENT=1000;
```

1
resources/lang/zh_CN/article.php

@ -12,6 +12,7 @@ return [
'content' => '文章内容',
'sort' => '排序',
'type' => '显示方式',
'agent_product_ids' => '绑定产品',
],
'options' => [
'type' => [

16
resources/lang/zh_CN/channel.php

@ -0,0 +1,16 @@
<?php
return [
'labels' => [
'Channel' => '频道',
'channel' => '频道',
],
'fields' => [
'agent_id' => '代理商ID',
'icon' => '频道图标',
'name' => '频道名称',
'pid' => '父级ID',
'sort' => '排序',
],
'options' => [
],
];

3
resources/lang/zh_CN/message.php

@ -1,4 +1,4 @@
<?php
<?php
return [
'labels' => [
'Message' => '系统消息',
@ -10,6 +10,7 @@ return [
'title' => '消息标题',
'content' => '消息内容',
'is_read' => '是否已读',
'author' => '作者',
],
'options' => [
],

1
resources/lang/zh_CN/notice.php

@ -8,6 +8,7 @@ return [
'agent_id' => '发布者ID',
'title' => '公告标题',
'sort' => '排序',
'author' => '作者',
'content' => '公告内容',
],
'options' => [

13
resources/lang/zh_CN/setting.php

@ -0,0 +1,13 @@
<?php
return [
'labels' => [
'Setting' => '系统设置',
'setting' => '系统设置',
],
'fields' => [
'earnest' => '定金金额',
'earnest_timeout' => '定金支付超时时间',
],
'options' => [
],
];

39
resources/views/admin/layouts/container.blade.php

@ -0,0 +1,39 @@
<body
class="dcat-admin-body sidebar-mini layout-fixed {{ $configData['body_class']}} {{ $configData['sidebar_class'] }}
{{ $configData['navbar_class'] === 'fixed-top' ? 'navbar-fixed-top' : '' }} " >
<script>
var Dcat = CreateDcat({!! Dcat\Admin\Admin::jsVariables() !!});
</script>
{!! admin_section(Dcat\Admin\Admin::SECTION['BODY_INNER_BEFORE']) !!}
<div class="wrapper">
@include('admin::partials.sidebar')
@include('admin::partials.navbar')
<div class="app-content content">
<div class="content-wrapper" id="{{ $pjaxContainerId }}" style="top: 0;min-height: 900px;">
@yield('app')
</div>
</div>
</div>
<footer class="main-footer pt-1">
<p class="clearfix blue-grey lighten-2 mb-0 text-center">
<button class="btn btn-primary btn-icon scroll-top pull-right" style="position: fixed;bottom: 2%; right: 10px;display: none">
<i class="feather icon-arrow-up"></i>
</button>
</p>
</footer>
{!! admin_section(Dcat\Admin\Admin::SECTION['BODY_INNER_AFTER']) !!}
{!! Dcat\Admin\Admin::asset()->jsToHtml() !!}
<script>Dcat.boot();</script>
</body>
</html>
Loading…
Cancel
Save