diff --git a/app/Admin/Controllers/AfterSaleController.php b/app/Admin/Controllers/AfterSaleController.php
index dc069b7b..1ff97cc9 100644
--- a/app/Admin/Controllers/AfterSaleController.php
+++ b/app/Admin/Controllers/AfterSaleController.php
@@ -136,6 +136,7 @@ class AfterSaleController extends AdminController
AfterSaleModel::STATE_SHIPPING=>'primary',
AfterSaleModel::STATE_FINANCE=>'primary',
AfterSaleModel::STATE_FINISH=>'success',
+ AfterSaleModel::STATE_CANCEL=>'#b3b9bf',
]);
// $show->field('order_product.cover')->image();
$show->field('created_at');
diff --git a/app/Admin/Controllers/OrderController.php b/app/Admin/Controllers/OrderController.php
index 83f23177..3b835800 100644
--- a/app/Admin/Controllers/OrderController.php
+++ b/app/Admin/Controllers/OrderController.php
@@ -5,11 +5,15 @@ namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\CreateOrderPackage;
use App\Admin\Repositories\Order;
use App\Models\Order as OrderModel;
+use App\Models\OrderLog;
+use App\Models\OrderPackage;
use App\Models\OrderProduct;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
+use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
+use Dcat\Admin\Widgets\Box;
use Illuminate\Http\Request;
class OrderController extends AdminController
@@ -21,35 +25,75 @@ class OrderController extends AdminController
*/
protected function grid()
{
- $order = Order::with('user');
- return Grid::make(new Order(), function (Grid $grid) {
+ $builder = Order::with('user');
+ return Grid::make($builder, function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('sn');
$grid->column('user.phone');
// $grid->column('user_coupon_id');
// $grid->column('coupon_discount_amount');
- $grid->column('products_total_amount');
- $grid->column('vip_discount_amount');
- $grid->column('coupon_discount_amount');
- $grid->column('reduced_amount');
- $grid->column('weight');
- $grid->column('shipping_fee');
- $grid->column('total_amount');
+ // $grid->column('products_total_amount')->display(function ($value) {
+ // return bcdiv($value, 100, 2);
+ // })->prepend('¥');
+ // $grid->column('vip_discount_amount')->display(function ($value) {
+ // return bcdiv($value, 100, 2);
+ // })->prepend('¥');
+ // $grid->column('coupon_discount_amount')->display(function ($value) {
+ // return bcdiv($value, 100, 2);
+ // })->prepend('¥');
+ // $grid->column('reduced_amount')->display(function ($value) {
+ // return bcdiv($value, 100, 2);
+ // })->prepend('¥');
+ // $grid->column('weight');
+ // $grid->column('shipping_fee')->display(function ($value) {
+ // return bcdiv($value, 100, 2);
+ // })->prepend('¥');
+ $grid->column('total_amount')->display(function ($value) {
+ return bcdiv($value, 100, 2);
+ })->prepend('¥');
// $grid->column('note');
// $grid->column('remark');
// $grid->column('pay_sn');
$grid->column('pay_way');
- // $grid->column('pay_at');
+ $grid->column('pay_at');
// $grid->column('consignee_name');
// $grid->column('consignee_telephone');
// $grid->column('consignee_zone');
// $grid->column('consignee_address');
- $grid->column('status');
+ $grid->column('status')->using([
+ 0=>'待支付',
+ 1=>'待收货',
+ 9=>'已完成',
+ 10=>'已取消',
+ ])->dot([
+ 0=>'primary',
+ 1=>'danger',
+ 9=>'success',
+ 10=>'#b3b9bf',
+ ]);
+ $grid->column('shipping_state')->display(function ($v) {
+ if ($this->status <1) {
+ return -1;
+ }
+ return $v;
+ })->using([
+ -1=> '-',
+ 0 => '待发货',
+ 1 => '发货中',
+ 2 => '已完成',
+ ])->dot([
+ 0 => 'primary',
+ 1 => 'danger',
+ 2 => 'success',
+ ]);
// $grid->column('completed_at');
$grid->column('created_at')->sortable();
+ $grid->model()->orderBy('created_at', 'desc');
+
$grid->actions(function (Grid\Displayers\Actions $actions) {
- $actions->append(new CreateOrderPackage());
+ $actions->disableView(false);
+ // $actions->append(new CreateOrderPackage());
});
$grid->filter(function (Grid\Filter $filter) {
@@ -67,32 +111,103 @@ class OrderController extends AdminController
*/
protected function detail($id)
{
- return Show::make($id, new Order(), function (Show $show) {
- $show->field('id');
- $show->field('user_id');
- $show->field('sn');
- $show->field('user_coupon_id');
- $show->field('coupon_discount_amount');
- $show->field('vip_discount_amount');
- $show->field('reduced_amount');
- $show->field('shipping_fee');
- $show->field('products_total_amount');
- $show->field('total_amount');
- $show->field('weight');
- $show->field('note');
- $show->field('remark');
- $show->field('pay_sn');
- $show->field('pay_way');
- $show->field('pay_at');
- $show->field('consignee_name');
- $show->field('consignee_telephone');
- $show->field('consignee_zone');
- $show->field('consignee_address');
- $show->field('status');
- $show->field('completed_at');
- $show->field('created_at');
- $show->field('updated_at');
- });
+ return function (Row $row) use ($id) {
+ $row->column(5, function ($column) use ($id) {
+ $builder = Order::with(['user', 'userCoupon']);
+ $column->row(Show::make($id, $builder, function (Show $show) {
+ $show->field('id');
+ $show->field('sn');
+ $show->field('total_amount')->as(function ($v) {
+ return bcdiv($v, 100, 2);
+ })->prepend('¥');
+ $show->field('created_at');
+ $show->field('pay_way');
+ $show->field('pay_at');
+
+ $show->field('user.phone');
+ $show->field('products_total_amount')->as(function ($v) {
+ return bcdiv($v, 100, 2);
+ })->prepend('¥');
+ $show->field('vip_discount_amount')->as(function ($v) {
+ return bcdiv($v, 100, 2);
+ })->prepend('¥');
+ $show->field('userCoupon.coupon_name')->label();
+ $show->field('coupon_discount_amount')->as(function ($v) {
+ return bcdiv($v, 100, 2);
+ })->prepend('¥');
+ $show->field('reduced_amount')->as(function ($v) {
+ return bcdiv($v, 100, 2);
+ })->prepend('¥');
+ $show->field('shipping_fee')->as(function ($v) {
+ return bcdiv($v, 100, 2);
+ })->prepend('¥');
+
+
+ $show->panel()
+ ->tools(function (Show\Tools $tools) use ($show) {
+ $tools->disableEdit();
+ $tools->disableDelete();
+ });
+ }));
+ });
+ $row->column(7, function ($column) use ($id) {
+ $builder = OrderProduct::where('order_id', $id);
+ $productGrid = Grid::make($builder, function (Grid $grid) {
+ $grid->column('name');
+ $grid->column('cover')->image(50, 50);
+ $grid->column('sell_price')->display(function ($value) {
+ return bcdiv($value, 100, 2);
+ })->prepend('¥');
+ $grid->column('quantity');
+ $grid->column('product_total_amount')->display(function () {
+ return bcdiv($this->sell_price * $this->quantity, 100, 2);
+ })->prepend('¥');
+ $grid->column('after_sale_state')->using([
+ 0=>'正常',
+ 1=>'售后中',
+ 2=>'售后完成',
+ ])->dot([
+ 0=>'success',
+ 1=>'danger',
+ 2=>'primary',
+ ]);
+ $grid->disableActions();
+ $grid->disablePagination();
+ $grid->disableRefreshButton();
+ });
+ $packageBuilder = OrderPackage::with('packageProducts')->where('order_id', $id);
+ $packageGrid = Grid::make($packageBuilder, function (Grid $grid) {
+ $grid->column('shipping_company', '物流公司');
+ $grid->column('shipping_number', '物流单号');
+ $grid->column('packageProducts', '包裹商品')->setHeaderAttributes(['style' => 'color:#5b69bc']);
+ $grid->column('created_at', '发货时间');
+
+ $grid->disableActions();
+ $grid->disablePagination();
+ $grid->disableRefreshButton();
+ });
+ $logBuilder = OrderLog::with('administrator')->where('order_id', $id);
+ $orderLogoGrid = Grid::make($logBuilder, function (Grid $grid) {
+ $grid->column('administrator', '操作人');
+ $grid->column('content', '操作明细');
+ $grid->column('craeted_at', '操作时间');
+
+ $grid->disableActions();
+ $grid->disablePagination();
+ $grid->disableRefreshButton();
+ });
+
+ $column->row(Box::make('订单商品', $productGrid));
+ $packagesBox = Box::make('发货包裹', $packageGrid);
+ $packagesBox->tool('');
+ $column->row($packagesBox->collapsable());
+ $logsBox = Box::make('操作记录', $orderLogoGrid);
+ $logsBox->tool('');
+ $logsBox->tool('');
+ $logsBox->tool('');
+ $column->row($logsBox->collapsable());
+ });
+ };
}
/**
diff --git a/app/Models/Order.php b/app/Models/Order.php
index 41178ede..1d01f1bf 100644
--- a/app/Models/Order.php
+++ b/app/Models/Order.php
@@ -3,12 +3,14 @@
namespace App\Models;
use App\Helpers\Numeric;
+use Dcat\Admin\Traits\HasDateTimeFormatter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
use Filterable;
+ use HasDateTimeFormatter;
public const STATUS_PENDING = 0; // 待付款
public const STATUS_PAID = 1; // 已付款
@@ -75,6 +77,26 @@ class Order extends Model
self::PAY_WAY_BALANCE => '余额',
];
+ /**
+ * 下单人
+ *
+ * @return void
+ */
+ public function user()
+ {
+ return $this->belongsTo(User::class, 'user_id');
+ }
+
+ /**
+ * 使用的优惠券
+ *
+ * @return void
+ */
+ public function userCoupon()
+ {
+ return $this->hasOne(UserCoupon::class, 'id', 'user_coupon_id');
+ }
+
/**
* 仅查询支付过期的订单
*/
diff --git a/app/Models/OrderLog.php b/app/Models/OrderLog.php
new file mode 100644
index 00000000..2016243e
--- /dev/null
+++ b/app/Models/OrderLog.php
@@ -0,0 +1,24 @@
+belongsTo(Administrator::class, 'administrator_id');
+ }
+
+ public function order()
+ {
+ return $this->belongsTo(Order::class, 'order_id');
+ }
+}
diff --git a/database/migrations/2021_12_16_210143_create_order_logs_table.php b/database/migrations/2021_12_16_210143_create_order_logs_table.php
new file mode 100644
index 00000000..3d77a992
--- /dev/null
+++ b/database/migrations/2021_12_16_210143_create_order_logs_table.php
@@ -0,0 +1,34 @@
+id();
+ $table->unsignedBigInteger('order_id')->comment('订单ID');
+ $table->unsignedBigInteger('administrator_id')->comment('操作人');
+ $table->string('content')->nullable()->comment('操作内容');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('order_logs');
+ }
+}
diff --git a/resources/lang/zh_CN/order.php b/resources/lang/zh_CN/order.php
index f763dba8..b35b53e7 100644
--- a/resources/lang/zh_CN/order.php
+++ b/resources/lang/zh_CN/order.php
@@ -10,6 +10,9 @@ return [
'user'=>[
'phone' => '手机号',
],
+ 'userCoupon'=>[
+ 'coupon_name' => '优惠券',
+ ],
'sn' => '订单编号',
'user_coupon_id' => '使用优惠券',
'coupon_discount_amount' => '优惠券金额',
@@ -29,8 +32,15 @@ return [
'consignee_zone' => '收货地区',
'consignee_address' => '收货地址',
'status' => '订单状态',
+ 'shipping_state'=>'物流状态',
'completed_at' => '完成时间',
'created_at' => '下单时间',
+ 'name'=>'商品名称',
+ 'cover'=>'商品图',
+ 'sell_price'=>'价格',
+ 'quantity' => '数量',
+ 'after_sale_state'=>'售后状态',
+ 'product_total_amount'=>'总价',
],
'options' => [
],