Commit 74024957 by lizhilin

更新

parents
/node_modules
/public
/vendor
.env
.env.backup
.env.production
.phpunit.result.cache
Homestead.json
Homestead.yaml
auth.json
npm-debug.log
yarn-error.log
/.fleet
/.idea
/.vscode
<?php
namespace App\Admin\Controllers;
use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
class AuthController extends BaseAuthController
{
protected $view = 'admin.login';
}
<?php
namespace App\Admin\Controllers;
use App\Admin\Repositories\Covenant;
use App\Models\Covenant as ModelsCovenant;
use App\Models\Lawyer as ModelLawyer;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class CovenantController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(ModelsCovenant::with(['principal', 'lawyer']), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('number');
$grid->column('cname');
$grid->column('ctype')->display(function ($val) {
return Covenant::CTYPE[$val];
});
$grid->column('sign_at');
$grid->column('principal.name', '委托人');
$grid->column('lawyer.name', '办案律师');
$grid->column('amount');
$grid->column('payment_method')->display(function ($val) {
return $val == 1 ? '开票付款' : '付款开票';
});
$grid->column('reserve_fee', '预留结案费');
$grid->column('is_closed', '结案状态')->display(function ($val) {
return $val ? '已结案' : '未结案';
});
$grid->column('is_return', '退还状态')->display(function ($val) {
return $val ? '已退还' : '未退还';
});
$grid->column('return_fee', '退还结案费');
// $grid->column('created_at');
// $grid->column('updated_at')->sortable();
$grid->disableViewButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('number')->width(3);
$filter->like('cname')->width(3);
$filter->like('principal.name', '委托人')->width(3);
$filter->like('lawyer.name', '办案律师')->width(3);
$filter->equal('ctype')->select(Covenant::CTYPE)->width(3);
$filter->equal('payment_method')->select(Covenant::PAYMENT_METHOD)->width(3);
$filter->between('sign_at', '签约日期')->date()->width(4);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Covenant(), function (Show $show) {
$show->field('id');
$show->field('number');
$show->field('cname');
$show->field('ctype');
$show->field('sign_at');
$show->field('principal_id');
$show->field('lawyer_id');
$show->field('amount');
$show->field('payment_method');
$show->field('case_reason');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$list = ModelLawyer::select(['id', 'number', 'name'])->limit(1000)->get()->toArray();
$lawyers = [];
if ($list) {
foreach ($list as $item) {
$lawyers[$item['id']] = $item['number'] . ' ' . $item['name'];
}
}
return Form::make(new Covenant(), function (Form $form) use ($lawyers) {
$form->display('id');
$form->text('number')->required();
$form->select('ctype')->options(Covenant::CTYPE)->default(1);
$form->text('cname')->required();
$form->date('sign_at')->format('YYYY-MM-DD')->default(date("Y-m-d"));
$form->select('principal_type')->options([1 => '单位', 2 => '个人'])->default(1)->load('principal_id', '/principal-list');;
$form->select('principal_id');
$form->text('case_reason');
$form->select('lawyer_id')->options($lawyers);
$form->text('amount');
$form->select('payment_method')->options(Covenant::PAYMENT_METHOD)->default(1);
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Admin\Controllers;
use App\Admin\Metrics\Examples;
use App\Http\Controllers\Controller;
use Dcat\Admin\Http\Controllers\Dashboard;
use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
class HomeController extends Controller
{
public function index(Content $content)
{
return $content
->header('Dashboard')
->description('Description...')
->body(function (Row $row) {
// $row->column(6, function (Column $column) {
// $column->row(Dashboard::title());
// $column->row(new Examples\Tickets());
// });
// $row->column(6, function (Column $column) {
// $column->row(function (Row $row) {
// $row->column(6, new Examples\NewUsers());
// $row->column(6, new Examples\NewDevices());
// });
// $column->row(new Examples\Sessions());
// $column->row(new Examples\ProductOrders());
// });
$row->column(12, '欢迎登录');
});
}
}
<?php
namespace App\Admin\Controllers;
use App\Admin\Repositories\Lawyer;
use App\Models\Lawyer as ModelLawyer;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Support\Facades\DB;
class LawyerController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Lawyer(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('number');
$grid->column('name');
$grid->column('sex')->display(function ($val) {
return $val == 1 ? '男' : '女';
});
$grid->column('identity_card');
$grid->column('phone');
$grid->column('bank_account');
$grid->column('sign_at');
$grid->column('commission_rate');
$grid->column('settlement_period')->display(function ($val) {
return $val == 1 ? '月' : '年';
});
$grid->column('ticket_ratio', '贴票比例(%)');
$grid->column('settlement_method', '结算方式')->display(function ($val) {
return $val == 1 ? '贴票' : '个税';
});
// $grid->column('created_at');
// $grid->column('updated_at')->sortable();
$grid->disableViewButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('name')->width(3);
$filter->like('identity_card')->width(3);
$filter->like('phone')->width(3);
$filter->equal('settlement_period')->select(Lawyer::SETTLEMENT_PERIOD)->width(3);
$filter->equal('settlement_method')->select(Lawyer::SETTLEMENT_METHOD)->width(3);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Lawyer(), function (Show $show) {
$show->field('id');
$show->field('number');
$show->field('name');
$show->field('sex');
$show->field('identity_card');
$show->field('phone');
$show->field('bank_account');
$show->field('sign_at');
$show->field('commission_rate');
$show->field('settlement_period');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$form = Form::make(new Lawyer(), function (Form $form) {
$form->display('id');
//$form->text('number');
$form->text('name')->required();
$form->select('sex')->options([1 => '男', 2 => '女'])->default(1);
$form->text('identity_card')->required();
$form->text('phone')->required();
$form->text('bank_account')->required();
$form->date('sign_at')->format('YYYY-MM-DD')->required();
$form->text('commission_rate')->required();
$form->select('settlement_period')->options([1 => '月', 2 => '年'])->default(1);
$form->text('ticket_ratio', '贴票比例')->required();
$form->select('settlement_method', '结算方式')->options([1 => '贴票', 2 => '个税'])->default(1);
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$number = $form->number;
$form->hidden('number');
if (!$number) {
$form->saving(function (Form $form) {
$form->number = self::getRandNumber();
});
}
// $form->display('created_at');
// $form->display('updated_at');
});
return $form;
}
//生成编号
public static function getRandNumber()
{
$rndnumber = '';
$flag = 0;
do {
$rndnumber = mt_rand(10000, 99999);
$rowObj = ModelLawyer::where('number', $rndnumber)->count();
$flag = $rowObj ? 0 : 1;
} while ($flag < 1);
return $rndnumber;
}
}
<?php
namespace App\Admin\Controllers;
use App\Models\LawyerCost as ModelLawyerCost;
use App\Admin\Repositories\LawyerCost;
use App\Models\Lawyer as ModelsLawyer;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class LawyerCostCollectController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new LawyerCost(), function (Grid $grid) {
$number = $grid->model()->filter()->input('no') ?? ''; //律师编号
$nowyear = date("Y");
$year = $grid->model()->filter()->input('year') ?? '';
$monthNum = ($year && $year < $nowyear) ? 12 : date('m');
// $where = [];
// if ($number) {
// $where['number'] = $number;
// }
// if ($year) {
// $where['year'] = $year;
// }
// $grid->model()->where($where);
$grid->column('title', '项目名称')->width('10%');
for ($i = 1; $i <= $monthNum; $i++) {
$grid->column($i, $i . '月');
}
$grid->column('total', '合计');
// $grid->disableViewButton();
// $grid->disableCreateButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('year', '年份')->width(3)->default(date("Y"));
});
$grid->disableRowSelector();
$grid->disableActions();
$grid->disableCreateButton();
$grid->disablePagination();
//文字信息
$grid->tools(function (Grid\Tools $tools) use ($grid, $number) {
$fullname = '';
if ($number) {
$obj = ModelsLawyer::where('number', $number)->first();
$fullname = $obj->name;
}
$card_info = "&nbsp;&nbsp;律师编号:{$number}&nbsp;&nbsp;&nbsp;律师姓名:{$fullname}";
$tools->append($card_info);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new ModelLawyerCost(), function (Show $show) {
$show->field('id');
$show->field('year');
$show->field('month');
$show->field('number');
$show->field('lname');
$show->field('basic_salary');
$show->field('social_person_fee');
$show->field('social_company_fee');
$show->field('accumulation_fund_person_fee');
$show->field('accumulation_fund_company_fee');
$show->field('annual_inspection_fee');
$show->field('annuity');
$show->field('office_rental_fee');
$show->field('noticket_cost');
$show->field('posting_tickets_fee');
$show->field('assistant_fee');
$show->field('special_additional');
$show->field('advance_fee');
$show->field('personal_income_tax');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new ModelLawyerCost(), function (Form $form) {
$form->display('id');
$form->text('year');
$form->select('month')->options(ModelLawyerCost::MONTH);
$form->display('number');
$form->text('lname');
$form->text('basic_salary');
$form->text('social_person_fee');
$form->text('social_company_fee');
//$form->display('social', '社保')->default(100);
$form->text('accumulation_fund_person_fee');
$form->text('accumulation_fund_company_fee');
$form->text('annual_inspection_fee');
$form->text('annuity');
$form->text('office_rental_fee');
//$form->text('noticket_cost');
//$form->text('posting_tickets_fee');
$form->text('assistant_fee');
$form->text('special_additional');
$form->text('advance_fee');
$form->text('personal_income_tax');
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Admin\Controllers;
//use App\Admin\Repositories\LawyerCost;
use App\Admin\Repositories\Lawyer;
use App\Models\LawyerCost as ModelLawyerCost;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class LawyerCostController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Lawyer(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('number', '律师编号');
$grid->column('name', '律师姓名');
$grid->column('basic_salary', '基本工资');
$grid->column('special_additional', '专项附加');
$grid->column('social', '社保');
$grid->column('accumulation_fund', '公积金');
$grid->column('annual_inspection_fee', '律所年检费');
$grid->column('annuity', '律所年金');
$grid->column('posting_tickets_fee', '贴票成本');
$grid->column('assistant_fee', '助理律师成本');
$grid->column('office_rental_fee', '办公租赁成本');
$grid->column('noticket_cost', '无票成本');
$grid->column('personal_income_tax', '个人所得税');
$grid->disableViewButton();
$grid->disableEditButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('number', '律师编号')->width(3);
$filter->like('name', '律师姓名')->width(3);
$filter->like('year', '年份')->width(3)->default(date("Y"));
//$filter->date('sign_at')->format('YYYY-MM-DD');
});
$grid->actions(function (Grid\Displayers\Actions $actions) {
//$actions->append(new UserBuyCode($actions->row->id));
//成本汇总
$actions->append('<a href="/lycost-collect?no=' . $this->number . '" alt="成本汇总" target="_blank">成本汇总</a>');
// 成本明细
$actions->append('<a href="/lycost-list?no=' . $this->number . '" alt="成本明细" target="_blank">成本明细</a>');
// 或者使用 RowAction 来添加按钮
//$actions->append(RowAction::make('自定义按钮')->route('custom.route'));
});
});
}
protected function grid2()
{
return Grid::make(new ModelLawyerCost(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('year');
$grid->column('month');
$grid->column('number');
$grid->column('lname');
$grid->column('basic_salary');
$grid->column('social_person_fee');
$grid->column('social_company_fee');
$grid->column('accumulation_fund_person_fee');
$grid->column('accumulation_fund_company_fee');
$grid->column('annual_inspection_fee');
$grid->column('annuity');
$grid->column('office_rental_fee');
$grid->column('noticket_cost');
$grid->column('posting_tickets_fee');
$grid->column('assistant_fee');
$grid->column('special_additional');
$grid->column('advance_fee');
$grid->column('personal_income_tax');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new ModelLawyerCost(), function (Show $show) {
$show->field('id');
$show->field('year');
$show->field('month');
$show->field('number');
$show->field('lname');
$show->field('basic_salary');
$show->field('social_person_fee');
$show->field('social_company_fee');
$show->field('accumulation_fund_person_fee');
$show->field('accumulation_fund_company_fee');
$show->field('annual_inspection_fee');
$show->field('annuity');
$show->field('office_rental_fee');
$show->field('noticket_cost');
$show->field('posting_tickets_fee');
$show->field('assistant_fee');
$show->field('special_additional');
$show->field('advance_fee');
$show->field('personal_income_tax');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new ModelLawyerCost(), function (Form $form) {
$form->display('id');
$form->text('year');
$form->select('month')->options(ModelLawyerCost::MONTH);
$form->text('number');
$form->text('lname');
$form->text('basic_salary');
$form->text('social_person_fee');
$form->text('social_company_fee');
//$form->display('social', '社保')->default(100);
$form->text('accumulation_fund_person_fee');
$form->text('accumulation_fund_company_fee');
$form->text('annual_inspection_fee');
$form->text('annuity');
$form->text('office_rental_fee');
//$form->text('noticket_cost');
//$form->text('posting_tickets_fee');
$form->text('assistant_fee');
$form->text('special_additional');
$form->text('advance_fee');
$form->text('personal_income_tax');
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Admin\Controllers;
use App\Models\LawyerCost as ModelLawyerCost;
use App\Admin\Repositories\Lawyer;
use App\Models\Lawyer as ModelsLawyer;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class LawyerCostListController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new ModelLawyerCost(), function (Grid $grid) {
$number = $grid->model()->filter()->input('no') ?? ''; //律师编号
$year = $grid->model()->filter()->input('year') ?? '';
$where = [];
if ($number) {
$where['number'] = $number;
}
if ($year) {
$where['year'] = $year;
}
$grid->model()->where($where);
$grid->column('id')->sortable();
$grid->column('year', '年份');
$grid->column('month', '月份');
$grid->column('basic_salary', '基本工资');
$grid->column('special_additional', '专项附加');
$grid->column('social', '社保');
$grid->column('social_person_fee', '社保个人部分');
$grid->column('social_company_fee', '社保公司部分');
$grid->column('accumulation_fund', '公积金');
$grid->column('accumulation_fund_person_fee', '公积金个人部分');
$grid->column('accumulation_fund_company_fee', '公积金公司部分');
$grid->column('annual_inspection_fee', '律所年检费');
$grid->column('annuity', '律所年金');
$grid->column('posting_tickets_fee', '贴票成本');
$grid->column('assistant_fee', '助理律师成本');
$grid->column('office_rental_fee', '办公租赁成本');
$grid->column('noticket_cost', '无票成本');
$grid->column('personal_income_tax', '个人所得税');
$grid->column('advance_fee', '预支款');
$grid->disableViewButton();
$grid->disableCreateButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('year', '年份')->width(3)->default(date("Y"));
});
//文字信息
$grid->tools(function (Grid\Tools $tools) use ($grid, $number) {
$fullname = '';
if ($number) {
$obj = ModelsLawyer::where('number', $number)->first();
$fullname = $obj->name;
}
$card_info = "&nbsp;&nbsp;律师编号:{$number}&nbsp;&nbsp;&nbsp;律师姓名:{$fullname}";
$tools->append($card_info);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new ModelLawyerCost(), function (Show $show) {
$show->field('id');
$show->field('year');
$show->field('month');
$show->field('number');
$show->field('lname');
$show->field('basic_salary');
$show->field('social_person_fee');
$show->field('social_company_fee');
$show->field('accumulation_fund_person_fee');
$show->field('accumulation_fund_company_fee');
$show->field('annual_inspection_fee');
$show->field('annuity');
$show->field('office_rental_fee');
$show->field('noticket_cost');
$show->field('posting_tickets_fee');
$show->field('assistant_fee');
$show->field('special_additional');
$show->field('advance_fee');
$show->field('personal_income_tax');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new ModelLawyerCost(), function (Form $form) {
$form->display('id');
$form->text('year');
$form->select('month')->options(ModelLawyerCost::MONTH);
$form->display('number');
$form->text('lname');
$form->text('basic_salary');
$form->text('social_person_fee');
$form->text('social_company_fee');
//$form->display('social', '社保')->default(100);
$form->text('accumulation_fund_person_fee');
$form->text('accumulation_fund_company_fee');
$form->text('annual_inspection_fee');
$form->text('annuity');
$form->text('office_rental_fee');
//$form->text('noticket_cost');
//$form->text('posting_tickets_fee');
$form->text('assistant_fee');
$form->text('special_additional');
$form->text('advance_fee');
$form->text('personal_income_tax');
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Admin\Controllers;
use App\Admin\Repositories\Covenant;
use App\Models\Covenant as ModelsCovenant;
use App\Models\Lawyer as ModelLawyer;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class LawyerCovenantIncomeController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(ModelsCovenant::with(['principal', 'lawyer']), function (Grid $grid) {
$number = $grid->model()->filter()->input('no') ?? ''; //律师编号
if ($number) {
$grid->model()->where('number', $number);
}
$grid->column('id')->sortable();
$grid->column('number');
$grid->column('cname');
$grid->column('ctype')->display(function ($val) {
return Covenant::CTYPE[$val];
});
$grid->column('sign_at');
$grid->column('principal.name', '委托人');
$grid->column('lawyer.name', '办案律师');
$grid->column('amount');
$grid->column('payment_method')->display(function ($val) {
return $val == 1 ? '开票付款' : '付款开票';
});
$grid->column('reserve_fee', '预留结案费');
$grid->column('is_closed', '结案状态')->display(function ($val) {
return $val ? '已结案' : '未结案';
});
$grid->column('is_return', '退还状态')->display(function ($val) {
return $val ? '已退还' : '未退还';
});
$grid->column('return_fee', '退还结案费');
// $grid->column('created_at');
// $grid->column('updated_at')->sortable();
$grid->disableViewButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('number')->width(3);
$filter->like('cname')->width(3);
$filter->like('principal.name', '委托人')->width(3);
$filter->like('lawyer.name', '办案律师')->width(3);
$filter->equal('ctype')->select(Covenant::CTYPE)->width(3);
$filter->equal('payment_method')->select(Covenant::PAYMENT_METHOD)->width(3);
$filter->between('sign_at', '签约日期')->date()->width(4);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Covenant(), function (Show $show) {
$show->field('id');
$show->field('number');
$show->field('cname');
$show->field('ctype');
$show->field('sign_at');
$show->field('principal_id');
$show->field('lawyer_id');
$show->field('amount');
$show->field('payment_method');
$show->field('case_reason');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$list = ModelLawyer::select(['id', 'number', 'name'])->limit(1000)->get()->toArray();
$lawyers = [];
if ($list) {
foreach ($list as $item) {
$lawyers[$item['id']] = $item['number'] . ' ' . $item['name'];
}
}
return Form::make(new Covenant(), function (Form $form) use ($lawyers) {
$form->display('id');
$form->text('number')->required();
$form->select('ctype')->options(Covenant::CTYPE)->default(1);
$form->text('cname')->required();
$form->date('sign_at')->format('YYYY-MM-DD')->default(date("Y-m-d"));
$form->select('principal_type')->options([1 => '单位', 2 => '个人'])->default(1)->load('principal_id', '/principal-list');;
$form->select('principal_id');
$form->text('case_reason');
$form->select('lawyer_id')->options($lawyers);
$form->text('amount');
$form->select('payment_method')->options(Covenant::PAYMENT_METHOD)->default(1);
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Admin\Controllers;
//use App\Admin\Repositories\LawyerCost;
use App\Models\Lawyer as ModelLawyer;
use App\Models\LawyerCost as ModelLawyerCost;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class LawyerIncomeController extends AdminController
{
/**
* 律师创收信息
* Make a grid builder.
* @return Grid
*/
protected function grid()
{
return Grid::make(new ModelLawyer(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('number', '律师编号111');
$grid->column('name', '律师姓名');
$grid->column('sex', '性别');
$grid->column('identity_card', '身份证号');
$grid->column('field1', '开票金额');
$grid->column('field2', '已收款');
$grid->column('field3', '已收款未开票');
$grid->column('field4', '已开票未收款')->display(function () {
$linkstr = '<a href="/lawyer-covenant-income?no="' . $this->number . ' target="_blank">创收收款表</a>&nbsp;&nbsp;';
$linkstr .= '<a href="http://baidu.com?no="' . $this->number . ' target="_blank">已收款/已开票汇总</a><br/>';
return $linkstr;
});
$grid->disableViewButton();
$grid->disableEditButton();
$grid->filter(function (Grid\Filter $filter) {
// 更改为 panel 布局
$filter->panel();
$filter->like('number', '律师编号')->width(3);
$filter->like('name', '律师姓名')->width(3);
$filter->like('year', '年份')->width(3)->default(date("Y"));
//$filter->date('sign_at')->format('YYYY-MM-DD');
});
$grid->actions(function (Grid\Displayers\Actions $actions) {
//$actions->append(new UserBuyCode($actions->row->id));
//成本汇总
$actions->append('<a href="/lycost-collect?no=' . $this->number . '" alt="成本汇总" target="_blank">成本汇总</a>');
// 成本明细
$actions->append('<a href="/lycost-list?no=' . $this->number . '" alt="成本明细" target="_blank">成本明细</a>');
// 或者使用 RowAction 来添加按钮
//$actions->append(RowAction::make('自定义按钮')->route('custom.route'));
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new ModelLawyerCost(), function (Show $show) {
$show->field('id');
$show->field('year');
$show->field('month');
$show->field('number');
$show->field('lname');
$show->field('basic_salary');
$show->field('social_person_fee');
$show->field('social_company_fee');
$show->field('accumulation_fund_person_fee');
$show->field('accumulation_fund_company_fee');
$show->field('annual_inspection_fee');
$show->field('annuity');
$show->field('office_rental_fee');
$show->field('noticket_cost');
$show->field('posting_tickets_fee');
$show->field('assistant_fee');
$show->field('special_additional');
$show->field('advance_fee');
$show->field('personal_income_tax');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new ModelLawyerCost(), function (Form $form) {
$form->display('id');
$form->text('year');
$form->select('month')->options(ModelLawyerCost::MONTH);
$form->text('number');
$form->text('lname');
$form->text('basic_salary');
$form->text('social_person_fee');
$form->text('social_company_fee');
//$form->display('social', '社保')->default(100);
$form->text('accumulation_fund_person_fee');
$form->text('accumulation_fund_company_fee');
$form->text('annual_inspection_fee');
$form->text('annuity');
$form->text('office_rental_fee');
//$form->text('noticket_cost');
//$form->text('posting_tickets_fee');
$form->text('assistant_fee');
$form->text('special_additional');
$form->text('advance_fee');
$form->text('personal_income_tax');
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Admin\Controllers;
use App\Admin\Repositories\Principal;
use App\Models\Principal as ModelsPrincipal;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class PrincipalController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Principal(), function (Grid $grid) {
$ptype = $grid->model()->filter()->input('wtype') ?? 1;
$grid->model()->where('wtype', $ptype)->orderBy("id", "desc");
$grid->column('id')->sortable();
$grid->column('number');
if ($ptype == 1) {
$grid->column('company');
$grid->column('tax_number');
$grid->column('address');
$grid->column('tel');
$grid->column('bank_name');
$grid->column('bank_account');
$grid->column('contacts');
} else {
$grid->column('name');
$grid->column('identity_card');
$grid->column('address', '联系地址');
}
$grid->column('phone');
// $grid->column('created_at');
// $grid->column('updated_at')->sortable();
$grid->disableViewButton();
$grid->filter(function (Grid\Filter $filter) use ($ptype) {
// 更改为 panel 布局
$filter->panel();
$filter->like('company')->width(3);
$filter->like('tax_number')->width(3);
$filter->like('name')->width(3);
$filter->like('identity_card')->width(3);
$filter->equal('wtype', '类型')->select([1 => '单位', 2 => '个人'])->width(3)->default(1);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Principal(), function (Show $show) {
$show->field('id');
$show->field('number');
$show->field('company');
$show->field('username');
$show->field('identity_card');
$show->field('tax_number');
$show->field('address');
$show->field('tel');
$show->field('bank_name');
$show->field('bank_account');
$show->field('contacts');
$show->field('phone');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$form = Form::make(new Principal(), function (Form $form) {
$form->display('id');
$form->radio('wtype', '类型')
->when(1, function (Form $form) {
$form->text('company');
$form->text('tax_number');
$form->text('address');
$form->text('tel');
$form->text('bank_name');
$form->text('bank_account');
$form->text('contacts');
})
->when(2, function (Form $form) {
$form->text('name');
$form->text('identity_card');
$form->text('address', '联系地址');
})
->options([
1 => '单位',
2 => '个人',
])
->default(1);
$form->text('phone');
$form->disableCreatingCheck();
$form->disableEditingCheck();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableViewButton();
$number = $form->number;
$form->hidden('number');
if (!$number) {
$form->saving(function (Form $form) {
$form->number = self::getRandNumber();
});
}
$form->display('created_at');
$form->display('updated_at');
});
return $form;
}
//生成编号
public static function getRandNumber()
{
$rndnumber = '';
$flag = 0;
do {
$rndnumber = mt_rand(10000, 99999);
$rowObj = ModelsPrincipal::where('number', $rndnumber)->count();
$flag = $rowObj ? 0 : 1;
} while ($flag < 1);
return $rndnumber;
}
public function getList(Request $request)
{
$wtype = $request->get('q'); //委托人类型
if ($wtype == 1) {
$list = ModelsPrincipal::where('wtype', $wtype)->limit(1000)->get(['id', 'company as text']);
} else {
$list = ModelsPrincipal::where('wtype', $wtype)->limit(1000)->get(['id', 'name as text']);
}
return $list->toArray() ? $list : new \stdClass;;
}
}
<?php
namespace App\Admin\Controllers;
use App\Handlers\AilOss;
use Dcat\Admin\Traits\HasUploadedFile;
use Intervention\Image\Facades\Image;
class UploadController{
use HasUploadedFile;
/**
* 删除OSS私有桶资源文件
*/
public function deleteOssFile(){
$ossPath = request()->post('key') ?? '';
$aliOss = new AilOss();
$res = $aliOss->delete($ossPath);
return $res ? $this->responseDeleted() : $this->responseDeleteFailed('文件删除失败');
}
/**
* 删除OSS公有桶资源文件
*/
public function deletePublicOssFile(){
$ossPath = request()->post('key') ?? '';
$aliOss = new AilOss();
$res = $aliOss->delete($ossPath,'OSS_PUBLIC_BUCKET');
return $res ? $this->responseDeleted() : $this->responseDeleteFailed('文件删除失败');
}
/**
* 上传用户头像
*/
public function uploadUserAvatar()
{
$aliOss = new AilOss();
// 获取上传的文件
$file = $this->file();;
//获取文件扩展名
$file = $this->file();;
Image::make($file->getRealPath())
->resize(640, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->encode('jpg', 90);
$fileName = md5(uniqid()) . '.jpg';
$date = date('Y_m_d');
$ossFilePath = 'userAvatar/'.$date.'/'.$fileName;
//获取文件的绝对路径
$path = $file->getRealPath();
$res = $aliOss->upload($ossFilePath, $path,'OSS_PUBLIC_BUCKET');
return $res
? $this->responseUploaded(env('OSS_PUBLIC_IMAGE_URL').$ossFilePath,'')
: $this->responseErrorMessage('文件上传失败');
}
/**
* 上传轮播图
*/
public function uploadCarousel()
{
$aliOss = new AilOss();
// 获取上传的文件
$file = $this->file();;
Image::make($file->getRealPath())
->resize(640, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->encode('jpg', 90);
$fileName = md5(uniqid()) . '.jpg';
$date = date('Y_m_d');
$ossFilePath = 'Carousel/'.$date.'/'.$fileName;
//获取文件的绝对路径
$path = $file->getRealPath();
$res = $aliOss->upload($ossFilePath, $path,'OSS_PUBLIC_BUCKET');
return $res
? $this->responseUploaded(env('OSS_PUBLIC_IMAGE_URL').$ossFilePath,'')
: $this->responseErrorMessage('文件上传失败');
}
/**
* 上传资源库图片
*/
public function uploadResourceImg()
{
$aliOss = new AilOss();
// 获取上传的文件
$file = $this->file();;
Image::make($file->getRealPath())
->resize(640, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->encode('jpg', 90);
$fileName = md5(uniqid()) . '.jpg';
$date = date('Y_m_d');
$ossFilePath = 'ResourceImg/'.$date.'/'.$fileName;
//获取文件的绝对路径
$path = $file->getRealPath();
$res = $aliOss->upload($ossFilePath, $path,'OSS_PUBLIC_BUCKET');
return $res
? $this->responseUploaded(env('OSS_PUBLIC_IMAGE_URL').$ossFilePath,'')
: $this->responseErrorMessage('文件上传失败');
}
//上传资源文件
public function uploadResourceFile()
{
$aliOss = new AilOss();
// 获取上传的文件
$file = $this->file();;
//获取文件扩展名
$ext = $file->getClientOriginalExtension();
$fileName = uniqid().'.'.$ext;
$date = date('Y_m_d');
$ossFilePath = 'ResourceFile/'.$date.'/'.$fileName;
//获取文件的绝对路径
$path = $file->getRealPath();
$res = $aliOss->upload($ossFilePath, $path,'OSS_PUBLIC_BUCKET');
return $res
? $this->responseUploaded(env('OSS_PUBLIC_IMAGE_URL').$ossFilePath,'')
: $this->responseErrorMessage('文件上传失败');
}
}
<?php
namespace App\Admin\Forms;
use App\Imports\ImportExcel as uImportExcel;
use App\Jobs\ansyImportExcel;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Dcat\Admin\Widgets\Form;
class ImportExcel extends Form implements LazyRenderable
{
use LazyWidget;
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
$file_path = storage_path('app/public' . $input['e_file']);
dispatch(new ansyImportExcel($this->payload['className'], $file_path));
return $this
->response()
->success('导入成功,请稍后刷新页面查看数据.')
->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->file('e_file', '数据文件')
->disk('public')
->accept('xls,xlsx')
->uniqueName()
->move('/import')
->autoUpload()
->help('仅支持xls,xlsx格式文件上传')
->required();
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
return [
'name' => 'John Doe',
'email' => 'John.Doe@gmail.com',
];
}
}
<?php
namespace App\Admin\Forms;
use App\Models\User;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Illuminate\Support\Facades\DB;
class TruncateTable extends Form implements LazyRenderable
{
use LazyWidget;
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
$status = (int)$input['status'];
$tablename = trim($this->payload['tablename']);
if ($status == 1 && $tablename) {
DB::table($tablename)->truncate(); // 清空数据表
}
return $this->response()->success('确认成功')->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->radio('status', '清空状态')->options([1 => '是', 0 => '否'])->default(0)->required();
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
// 获取外部传递参数
return [];
}
}
<?php
namespace App\Admin\Forms;
use App\Models\PersonalAccessToken;
use App\Models\User;
use App\Models\UserPermission;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Dcat\Admin\Widgets\Form;
class updatePassword extends Form implements LazyRenderable
{
use LazyWidget;
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
$user = User::find($this->payload['id']);
$user->password = bcrypt($input['password']);
if(!$user->save()){
return $this
->response()
->error('修改用户密码失败')
->refresh();
}
PersonalAccessToken::where(['tokenable_id'=>$user->id])->delete();
return $this
->response()
->success('修改用户密码成功.')
->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->display('name','姓名');
$this->display('phone','手机');
$this->text('password','密码')->required();
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
$user = User::find($this->payload['id']);
return [
'name' => $user->name,
'phone' => $user->phone,
];
}
}
<?php
namespace App\Admin\Metrics\Examples;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Donut;
class NewDevices extends Donut
{
protected $labels = ['Desktop', 'Mobile'];
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$color = Admin::color();
$colors = [$color->primary(), $color->alpha('blue2', 0.5)];
$this->title('New Devices');
$this->subTitle('Last 30 days');
$this->chartLabels($this->labels);
// 设置图表颜色
$this->chartColors($colors);
}
/**
* 渲染模板
*
* @return string
*/
public function render()
{
$this->fill();
return parent::render();
}
/**
* 写入数据.
*
* @return void
*/
public function fill()
{
$this->withContent(44.9, 28.6);
// 图表数据
$this->withChart([44.9, 28.6]);
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => $data
]);
}
/**
* 设置卡片头部内容.
*
* @param mixed $desktop
* @param mixed $mobile
*
* @return $this
*/
protected function withContent($desktop, $mobile)
{
$blue = Admin::color()->alpha('blue2', 0.5);
$style = 'margin-bottom: 8px';
$labelWidth = 120;
return $this->content(
<<<HTML
<div class="d-flex pl-1 pr-1 pt-1" style="{$style}">
<div style="width: {$labelWidth}px">
<i class="fa fa-circle text-primary"></i> {$this->labels[0]}
</div>
<div>{$desktop}</div>
</div>
<div class="d-flex pl-1 pr-1" style="{$style}">
<div style="width: {$labelWidth}px">
<i class="fa fa-circle" style="color: $blue"></i> {$this->labels[1]}
</div>
<div>{$mobile}</div>
</div>
HTML
);
}
}
<?php
namespace App\Admin\Metrics\Examples;
use Dcat\Admin\Widgets\Metrics\Line;
use Illuminate\Http\Request;
class NewUsers extends Line
{
/**
* 初始化卡片内容
*
* @return void
*/
protected function init()
{
parent::init();
$this->title('New Users');
$this->dropdown([
'7' => 'Last 7 Days',
'28' => 'Last 28 Days',
'30' => 'Last Month',
'365' => 'Last Year',
]);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
$generator = function ($len, $min = 10, $max = 300) {
for ($i = 0; $i <= $len; $i++) {
yield mt_rand($min, $max);
}
};
switch ($request->get('option')) {
case '365':
// 卡片内容
$this->withContent(mt_rand(1000, 5000).'k');
// 图表数据
$this->withChart(collect($generator(30))->toArray());
break;
case '30':
// 卡片内容
$this->withContent(mt_rand(400, 1000).'k');
// 图表数据
$this->withChart(collect($generator(30))->toArray());
break;
case '28':
// 卡片内容
$this->withContent(mt_rand(400, 1000).'k');
// 图表数据
$this->withChart(collect($generator(28))->toArray());
break;
case '7':
default:
// 卡片内容
$this->withContent('89.2k');
// 图表数据
$this->withChart([28, 40, 36, 52, 38, 60, 55,]);
}
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => [
[
'name' => $this->title,
'data' => $data,
],
],
]);
}
/**
* 设置卡片内容.
*
* @param string $content
*
* @return $this
*/
public function withContent($content)
{
return $this->content(
<<<HTML
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px">
<h2 class="ml-1 font-lg-1">{$content}</h2>
<span class="mb-0 mr-1 text-80">{$this->title}</span>
</div>
HTML
);
}
}
<?php
namespace App\Admin\Metrics\Examples;
use Dcat\Admin\Widgets\Metrics\Round;
use Illuminate\Http\Request;
class ProductOrders extends Round
{
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title('Product Orders');
$this->chartLabels(['Finished', 'Pending', 'Rejected']);
$this->dropdown([
'7' => 'Last 7 Days',
'28' => 'Last 28 Days',
'30' => 'Last Month',
'365' => 'Last Year',
]);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
switch ($request->get('option')) {
case '365':
case '30':
case '28':
case '7':
default:
// 卡片内容
$this->withContent(23043, 14658, 4758);
// 图表数据
$this->withChart([70, 52, 26]);
// 总数
$this->chartTotal('Total', 344);
}
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => $data,
]);
}
/**
* 卡片内容.
*
* @param int $finished
* @param int $pending
* @param int $rejected
*
* @return $this
*/
public function withContent($finished, $pending, $rejected)
{
return $this->content(
<<<HTML
<div class="col-12 d-flex flex-column flex-wrap text-center" style="max-width: 220px">
<div class="chart-info d-flex justify-content-between mb-1 mt-2" >
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-primary"></i>
<span class="text-bold-600 ml-50">Finished</span>
</div>
<div class="product-result">
<span>{$finished}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-warning"></i>
<span class="text-bold-600 ml-50">Pending</span>
</div>
<div class="product-result">
<span>{$pending}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-danger"></i>
<span class="text-bold-600 ml-50">Rejected</span>
</div>
<div class="product-result">
<span>{$rejected}</span>
</div>
</div>
</div>
HTML
);
}
}
<?php
namespace App\Admin\Metrics\Examples;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Bar;
use Illuminate\Http\Request;
class Sessions extends Bar
{
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$color = Admin::color();
$dark35 = $color->dark35();
// 卡片内容宽度
$this->contentWidth(5, 7);
// 标题
$this->title('Avg Sessions');
// 设置下拉选项
$this->dropdown([
'7' => 'Last 7 Days',
'28' => 'Last 28 Days',
'30' => 'Last Month',
'365' => 'Last Year',
]);
// 设置图表颜色
$this->chartColors([
$dark35,
$dark35,
$color->primary(),
$dark35,
$dark35,
$dark35
]);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
switch ($request->get('option')) {
case '7':
default:
// 卡片内容
$this->withContent('2.7k', '+5.2%');
// 图表数据
$this->withChart([
[
'name' => 'Sessions',
'data' => [75, 125, 225, 175, 125, 75, 25],
],
]);
}
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => $data,
]);
}
/**
* 设置卡片内容.
*
* @param string $title
* @param string $value
* @param string $style
*
* @return $this
*/
public function withContent($title, $value, $style = 'success')
{
// 根据选项显示
$label = strtolower(
$this->dropdown[request()->option] ?? 'last 7 days'
);
$minHeight = '183px';
return $this->content(
<<<HTML
<div class="d-flex p-1 flex-column justify-content-between" style="padding-top: 0;width: 100%;height: 100%;min-height: {$minHeight}">
<div class="text-left">
<h1 class="font-lg-2 mt-2 mb-0">{$title}</h1>
<h5 class="font-medium-2" style="margin-top: 10px;">
<span class="text-{$style}">{$value} </span>
<span>vs {$label}</span>
</h5>
</div>
<a href="#" class="btn btn-primary shadow waves-effect waves-light">View Details <i class="feather icon-chevrons-right"></i></a>
</div>
HTML
);
}
}
<?php
namespace App\Admin\Metrics\Examples;
use Dcat\Admin\Widgets\Metrics\RadialBar;
use Illuminate\Http\Request;
class Tickets extends RadialBar
{
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title('Tickets');
$this->height(400);
$this->chartHeight(300);
$this->chartLabels('Completed Tickets');
$this->dropdown([
'7' => 'Last 7 Days',
'28' => 'Last 28 Days',
'30' => 'Last Month',
'365' => 'Last Year',
]);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
switch ($request->get('option')) {
case '365':
case '30':
case '28':
case '7':
default:
// 卡片内容
$this->withContent(162);
// 卡片底部
$this->withFooter(29, 63, '1d');
// 图表数据
$this->withChart(83);
}
}
/**
* 设置图表数据.
*
* @param int $data
*
* @return $this
*/
public function withChart(int $data)
{
return $this->chart([
'series' => [$data],
]);
}
/**
* 卡片内容
*
* @param string $content
*
* @return $this
*/
public function withContent($content)
{
return $this->content(
<<<HTML
<div class="d-flex flex-column flex-wrap text-center">
<h1 class="font-lg-2 mt-2 mb-0">{$content}</h1>
<small>Tickets</small>
</div>
HTML
);
}
/**
* 卡片底部内容.
*
* @param string $new
* @param string $open
* @param string $response
*
* @return $this
*/
public function withFooter($new, $open, $response)
{
return $this->footer(
<<<HTML
<div class="d-flex justify-content-between p-1" style="padding-top: 0!important;">
<div class="text-center">
<p>New Tickets</p>
<span class="font-lg-1">{$new}</span>
</div>
<div class="text-center">
<p>Open Tickets</p>
<span class="font-lg-1">{$open}</span>
</div>
<div class="text-center">
<p>Response Time</p>
<span class="font-lg-1">{$response}</span>
</div>
</div>
HTML
);
}
}
<?php
namespace App\Admin\Metrics\Examples;
use Dcat\Admin\Widgets\Metrics\Card;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
class TotalUsers extends Card
{
/**
* 卡片底部内容.
*
* @var string|Renderable|\Closure
*/
protected $footer;
/**
* 初始化卡片.
*/
protected function init()
{
parent::init();
$this->title('Total Users');
$this->dropdown([
'7' => 'Last 7 Days',
'28' => 'Last 28 Days',
'30' => 'Last Month',
'365' => 'Last Year',
]);
}
/**
* 处理请求.
*
* @param Request $request
*
* @return void
*/
public function handle(Request $request)
{
switch ($request->get('option')) {
case '365':
$this->content(mt_rand(600, 1500));
$this->down(mt_rand(1, 30));
break;
case '30':
$this->content(mt_rand(170, 250));
$this->up(mt_rand(12, 50));
break;
case '28':
$this->content(mt_rand(155, 200));
$this->up(mt_rand(5, 50));
break;
case '7':
default:
$this->content(143);
$this->up(15);
}
}
/**
* @param int $percent
*
* @return $this
*/
public function up($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}% Increase"
);
}
/**
* @param int $percent
*
* @return $this
*/
public function down($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-down text-danger\"></i> {$percent}% Decrease"
);
}
/**
* 设置卡片底部内容.
*
* @param string|Renderable|\Closure $footer
*
* @return $this
*/
public function footer($footer)
{
$this->footer = $footer;
return $this;
}
/**
* 渲染卡片内容.
*
* @return string
*/
public function renderContent()
{
$content = parent::renderContent();
return <<<HTML
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px">
<h2 class="ml-1 font-lg-1">{$content}</h2>
</div>
<div class="ml-1 mt-1 font-weight-bold text-80">
{$this->renderFooter()}
</div>
HTML;
}
/**
* 渲染卡片底部内容.
*
* @return string
*/
public function renderFooter()
{
return $this->toString($this->footer);
}
}
<?php
namespace App\Admin\Repositories;
use App\Models\Covenant as Model;
use App\Models\Principal;
use Dcat\Admin\Repositories\EloquentRepository;
class Covenant extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
//合同类型
public const CTYPE = [
1 => '民事诉讼代理',
2 => '刑事诉讼辩护及代理',
3 => '行政诉讼代理',
4 => '非诉讼法律事务',
5 => '咨询和代写法律文书',
6 => '仲裁业务',
7 => '法律援助',
];
//结算方式
public const PAYMENT_METHOD = [
1 => '开票付款',
2 => '付款开票'
];
public function principal()
{
return $this->belongsTo(Principal::class, 'principal_id', 'id');
}
}
<?php
namespace App\Admin\Repositories;
use App\Models\Lawyer as Model;
use Dcat\Admin\Repositories\EloquentRepository;
class Lawyer extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
//
public const SETTLEMENT_METHOD = [
1 => '贴票',
2 => '个税',
];
public const SETTLEMENT_PERIOD = [
1 => ' 月',
2 => '年',
];
}
<?php
namespace App\Admin\Repositories;
use App\Models\Lawyer;
use App\Models\LawyerCost as ModelLawyerCost;
//use Dcat\Admin\Repositories\EloquentRepository;
use Dcat\Admin\Repositories\Repository;
use Dcat\Admin\Grid;
use Illuminate\Support\Collection;
class LawyerCost extends Repository
{
/**
* Model.
*
* @var string
*/
//protected $eloquentClass = Model::class;
/**
* 各学部申报情况
* 项目类型 数理 化学 生命 地学 工材 信息 管理 医学 交叉 其他 总计
*/
public function get(Grid\Model $model)
{
// 获取筛选条件
$year = $model->filter()->input('year') ?? date("Y");
$data = [];
$nowyear = date('Y');
$monthNum = $year >= $nowyear ? date('m') : 12;
$list = ModelLawyerCost::COSTiTEM; //Lawyer::all();
foreach ($list as $key => $val) {
$tmp = [];
$tmp['title'] = $val['name']; //项目名称
//总计
$total = 10;
for ($i = 1; $i <= $monthNum; $i++) {
$tmp[$i] = $i;
}
//总计
$tmp['total'] = $total;
array_push($data, $tmp);
}
return $data;
// $data = [
// ['id' => 1, 'year' => '2016', 'jzsqNum' => '100', 'jzhpNum' => '100', 'sbTotal' => '100'],
// ['id' => 2, 'year' => '2017', 'jzsqNum' => '100', 'jzhpNum' => '100', 'sbTotal' => '100']
// ];
// return $data;
}
}
<?php
namespace App\Admin\Repositories;
use App\Models\Principal as Model;
use Dcat\Admin\Repositories\EloquentRepository;
class Principal extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
}
<?php
use Dcat\Admin\Admin;
use Dcat\Admin\Grid;
use Dcat\Admin\Form;
use Dcat\Admin\Grid\Filter;
use Dcat\Admin\Show;
/**
* Dcat-admin - admin builder based on Laravel.
* @author jqh <https://github.com/jqhph>
*
* Bootstraper for Admin.
*
* Here you can remove builtin form field:
*
* extend custom field:
* Dcat\Admin\Form::extend('php', PHPEditor::class);
* Dcat\Admin\Grid\Column::extend('php', PHPEditor::class);
* Dcat\Admin\Grid\Filter::extend('php', PHPEditor::class);
*
* Or require js and css assets:
* Admin::css('/packages/prettydocs/css/styles.css');
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
use Dcat\Admin\Layout\Navbar;
admin_inject_section(Admin::SECTION['NAVBAR_USER_PANEL'], function () {
return view('admin.partials.navbar-user-panel', ['user' => Admin::user()]);
});
Admin::navbar(function (Navbar $navbar) {
$navbar->left('<div class="navbar-header">
<ul class="nav navbar-nav flex-row">
<li class="nav-item mr-auto">
<a href="/" class="navbar-brand waves-effect waves-light">
<span class="logo-lg"><img src="/vendor/dcat-admin/images/logo.jpg" width="40"> &nbsp;律所管理系统</span>
</a>
</li>
</ul>
</div>');
});
<?php
use Illuminate\Routing\Router;
use Illuminate\Support\Facades\Route;
use Dcat\Admin\Admin;
Admin::routes();
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace'),
'middleware' => config('admin.route.middleware'),
], function (Router $router) {
/****************************************************** 图片文件上传组件Start *********************************************************/
$router->match(['put', 'post'], 'upload/delete-oss-file', 'UploadController@deleteOssFile'); //删除OSS私有资源文件
$router->match(['put', 'post'], 'upload/delete-public-oss-file', 'UploadController@deletePublicOssFile'); //删除OSS公有资源文件
$router->match(['put', 'post'], 'upload/user-avatar', 'UploadController@uploadUserAvatar'); //上传用户头像
$router->match(['put', 'post'], 'upload/carousel', 'UploadController@uploadCarousel'); //上传轮播图
$router->match(['put', 'post'], 'upload/resource-img', 'UploadController@uploadResourceImg'); //上传资源图
$router->match(['put', 'post'], 'upload/resource-file', 'UploadController@uploadResourceFile'); //上传资源文件
/****************************************************** 图片文件上传组件end *********************************************************/
$router->get('/', 'HomeController@index');
$router->get('users/getUserType', 'UsersController@getUserType'); //人员类型列表(后台组件使用)
$router->get('users/getDepartmentType', 'UsersController@getDepartmentType'); //院系所类型列表(后台组件使用)
$router->get('users/getYearList', 'UsersController@getYearList'); //年度列表(后台组件使用)
$router->get('users/getProjectType', 'UsersController@getProjectType'); //项目类型列表(后台组件使用)
$router->get('department/getHospitalList', 'DepartmentController@getHospitalList'); //附属医院列表(后台组件使用)
//$router->resource('user', 'UserController'); //员工管理
$router->resource('principal', 'PrincipalController'); //委托人信息
$router->get('principal-list', 'PrincipalController@getList'); //委托人列表
$router->resource('lawyer', 'LawyerController'); //律师信息
$router->resource('covenant', 'CovenantController'); //合同信息
$router->resource('lawyer_cost', 'LawyerCostController'); //律师成本表
$router->resource('lycost-list', 'LawyerCostListController'); //律师成本明细
$router->resource('lycost-collect', 'LawyerCostCollectController'); //律师成本汇总
$router->resource('lawyer_income', 'LawyerIncomeController'); //律师创收表
$router->resource('lawyer-covenant-income', 'LawyerCovenantIncomeController'); //创收收款表
$router->resource('project_type', 'ProjectTypeController'); //项目类型
$router->resource('user_type', 'UserTypeController'); //人员类型
$router->resource('project_apply', 'ProjectApplyController'); //历年项目申请表
$router->resource('project_ratify', 'ProjectRatifyController'); //历年项目获批表
$router->resource('senior_professional', 'SeniorProfessionalController'); //高级职称参与表
/********************************** 历年 *****************************/
$router->resource('linian/declaration', 'DeclarationController'); //申报统计
Route::get('nd/declarationExport', 'DeclarationController@export'); //导出
$router->resource('linian/ratify', 'LnRatifyController'); //获批统计
Route::get('ln/ratifyExport', 'LnRatifyController@export'); //导出
$router->resource('linian/applyratify', 'LnApplyratifyController'); //申报获批汇总
Route::get('ln/applyRatifyExport', 'LnApplyratifyController@export'); //导出
$router->resource('linian/jyapplyratify', 'LnJyApplyratifyController'); //杰优、青优申报获批汇总
Route::get('ln/jyApplyratifyExport', 'LnJyApplyratifyController@export'); //导出
$router->resource('linian/department', 'LnDepartmentController'); //院系所历年获批
Route::get('ln/departmentExport', 'LnDepartmentController@export'); //导出
$router->resource('linian/hospital', 'LnHospitalController'); //院系所历年获批
Route::get('ln/hospitalExport', 'LnHospitalController@export'); //导出
$router->resource('linian/msratify', 'LnMsRatifyController'); //面上项目历年获批
Route::get('ln/msRatifyExport', 'LnMsRatifyController@export'); //导出
$router->resource('linian/qnratify', 'LnQnRatifyController'); //青年项目历年获批
Route::get('ln/qnRatifyExport', 'LnQnRatifyController@export'); //导出
});
<?php
namespace App\Command;
class Log{
static public function add(string $logKey, mixed $logInfo) :void{
//判断当天的日志文件是否存在
$day = date('Y-m-d');
$logFileName = 'runLog_'.$day.'.log';
$logPath = storage_path("logs/".$logFileName);
file_put_contents($logPath,date('【 H:i:s 】'.$logKey.': ').print_r($logInfo,true),FILE_APPEND);
}
}
<?php
namespace App\Command;
class Tools{
//计算俩地距离
function get_two_point_distance($lat1,$lng1,$lat2,$lng2)
{
$radLat1 = deg2rad($lat1);//deg2rad()函数将角度转换为弧度
$radLat2 = deg2rad($lat2);
$radLng1 = deg2rad($lng1);
$radLng2 = deg2rad($lng2);
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
return round($s,2);//返回公里数
}
}
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
<?php
namespace App\Exceptions;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Throwable;
class Handler extends ExceptionHandler
{
/**
* A list of exception types with their corresponding custom log levels.
*
* @var array<class-string<\Throwable>, \Psr\Log\LogLevel::*>
*/
protected $levels = [
//
];
/**
* A list of the exception types that are not reported.
*
* @var array<int, class-string<\Throwable>>
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed to the session on validation exceptions.
*
* @var array<int, string>
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
];
/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
$this->renderable(function (AuthenticationException $e) {
return [
'code' => 403,
'message' => "未通过身份验证",
'data'=>''
];
});
}
public function render($request, Throwable $exception)
{
/**
* Render an exception into an HTTP response.
*
* 替换渲染功能
* Request::isMethod('post') 请求方法为post
* $exception instanceof MethodNotAllowedHttpException $exception异常是MethodNotAllowedHttpException实例化的结果
* 此方式针对访问不存在的方法GET方法无用,将继续渲染一个404的页面,因此在api.php路由最后定义了一个回退路由,针对GET方法的
*/
// if (Request::isMethod('post') && $exception instanceof MethodNotAllowedHttpException) {
if ($exception instanceof MethodNotAllowedHttpException) {
return response()->json([
'code' => 404,
'msg' => '地址不存在',
'data' => null
], 200
);
}
return parent::render($request, $exception);
}
}
<?php
namespace App\Handlers;
use OSS\OssClient;
require_once '../vendor/aliyuncs/oss-sdk-php/autoload.php';
class AilOss
{
public static $oss;
/**
* @throws \OSS\Core\OssException
*/
public function __construct()
{
$accessKeyId = env('OSS_ACCESS_KEY_ID'); //获取阿里云oss的accessKeyId
$accessKeySecret = env('OSS_ACCESS_KEY_SECRET'); //获取阿里云oss的accessKeySecret
$endpoint = env('OSS_ENDPOINT'); //获取阿里云oss的endPoint
self::$oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); //实例化OssClient对象
}
/**
*
* 使用阿里云oss上传文件
* @param $object 保存到阿里云oss的文件名
* @param $filepath 文件在本地的绝对路径
* @return bool 上传是否成功
* @throws \OSS\Core\OssException
*/
public function upload($object, $filepath,$bucket ='OSS_BUCKET')
{
$res = false;
$bucket = env($bucket); //获取阿里云oss的bucket
if (self::$oss->uploadFile($bucket, $object, $filepath)) { //调用uploadFile方法把服务器文件上传到阿里云oss
$res = true;
}
return $res;
}
/**
* 删除指定文件
* @param $object string 被删除的文件名
* @return bool 删除是否成功
*/
public function delete(string $object,$bucket = 'OSS_BUCKET')
{
$res = false;
$bucket = env($bucket);
if (self::$oss->deleteObject($bucket, $object)){ //调用deleteObject方法把服务器文件上传到阿里云oss
$res = true;
}
return $res;
}
/**
* 删除指定文件
* @param $object 被删除的文件名
* @return bool 删除是否成功
*/
public function delete_array($objects,$bucket ='OSS_BUCKET')
{
$res = false;
$bucket = env($bucket);
if (self::$oss->deleteObjects($bucket, $objects)){ //调用deleteObject方法把服务器文件上传到阿里云oss
$res = true;
}
return $res;
}
/*获取文件的临时访问URL*/
public function getUrl($OssFilePath,$time = 1800,$bucket ='OSS_BUCKET')
{
// 生成一个带签名的URL,有效期是3600秒,可以直接使用浏览器访问。
$timeout = $time;
$bucket = env($bucket);
return self::$oss->signUrl($bucket,$OssFilePath,$timeout,"GET");
}
/**
* 在OSS中创建虚拟“文件夹”。名称不应以“/”结尾,因为该方法无论如何都会用“/”追加名称。
*
* Internal use only.
*
* @param string $dirName 文件夹名称
* @return bool
*/
public function createDir($dirName,$bucket = 'OSS_BUCKET')
{
$res = false;
$bucket = env($bucket);
if (self::$oss->createObjectDir($bucket, $dirName)) {
$res = true;
}
return $res;
}
/*获取指定目录下的目录与文件*/
public function fileList($dir, $maxKey = 1000, $delimiter = '/', $nextMarker = '') {
$fileList = []; // 获取的文件列表, 数组的一阶表示分页结果
$dirList = []; // 获取的目录列表, 数组的一阶表示分页结果
$storageList = [
'file' => [], // 真正的文件数组
'dir' => [], // 真正的目录数组
];
while (true) {
$options = [
'delimiter' => $delimiter,
'prefix' => $dir,
'max-keys' => $maxKey,
'marker' => $nextMarker,
];
$bucket = env('OSS_BUCKET');
try {
$fileListInfo = self::$oss->listObjects($bucket, $options);
// 得到nextMarker, 从上一次 listObjects 读到的最后一个文件的下一个文件开始继续获取文件列表, 类似分页
} catch (\Exception $e) {
return $e->getMessage(); // 发送错误信息
}
$nextMarker = $fileListInfo->getNextMarker();
$fileItem = $fileListInfo->getObjectList();
$dirItem = $fileListInfo->getPrefixList();
$fileList[] = $fileItem;
$dirList[] = $dirItem;
if ($nextMarker === '') break;
}
foreach ($fileList[0] as $item){
$storageList['file'][] = $this->objectInfoParse($item);
}
foreach ($dirList[0] as $item){
$storageList['dir'][] = $this->prefixInfoParse($item);
}
return $storageList; // 发送正确信息
}
/* 解析 prefixInfo 类 */
private function prefixInfoParse($prefixInfo){
return [
'dir' => $prefixInfo->getPrefix(),
];
}
/* 解析 objectInfo 类 */
public function objectInfoParse($objectInfo) {
return [
'name' => $objectInfo->getKey(),
'size' => $objectInfo->getSize(),
'update_at' => $objectInfo->getLastModified(),
];
}
}
<?php
namespace App\Handlers;
use Intervention\Image\Facades\Image;
use Illuminate\Support\Str;
class FileUploadHandler
{
// 只允许以下后缀名的图片文件上传
protected $allowed_ext = ["png", "jpg", 'jpeg', 'pdf'];
public function save($file)
{
$aliOss = new AilOss();
// 获取上传的文件
Image::make($file->getRealPath())
->resize(640, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->encode('jpg', 90);
$fileName = md5(uniqid()) . '.jpg';
$date = date('Y_m_d');
$ossFilePath = 'client/' . $date . '/' . $fileName;
//获取文件的绝对路径
$path = $file->getRealPath();
$res = $aliOss->upload($ossFilePath, $path, 'OSS_PUBLIC_BUCKET');
return $res ? env('OSS_PUBLIC_IMAGE_URL') . $ossFilePath : false;
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Response;
/**
* api基类
*/
class BaseController extends Controller
{
/**
* @param $data mixed 返回的数据
* @param $msg string 状态码
* @param $code int 返回的自定义信息
* @return Response
*/
protected function JsonResponse($data, string $msg='Success', int $code=200) :Response {
//组建返回结果
$result = [
'code' => $code,
'message' => $msg,
'data' => $data,
];
return response($result, 200);
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array<int, class-string|string>
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:10000,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array<string, class-string|string>
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'acceptJson' => \App\Http\Middleware\AcceptJson::class,
];
}
<?php
namespace App\Http\Middleware;
use Closure;
class AcceptJson
{
/**
* Change the Request headers to "application/json" activating wantsJson()
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
}
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array<int, string>
*/
protected $except = [
//
];
}
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
class PreventRequestsDuringMaintenance extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array<int, string>
*/
protected $except = [
//
];
}
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @param string|null ...$guards
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next, ...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array<int, string>
*/
protected $except = [
'current_password',
'password',
'password_confirmation',
];
}
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustHosts as Middleware;
class TrustHosts extends Middleware
{
/**
* Get the host patterns that should be trusted.
*
* @return array<int, string|null>
*/
public function hosts()
{
return [
$this->allSubdomainsOfApplicationUrl(),
];
}
}
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array<int, string>|string|null
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}
<?php
namespace App\Http\Middleware;
use Illuminate\Routing\Middleware\ValidateSignature as Middleware;
class ValidateSignature extends Middleware
{
/**
* The names of the query string parameters that should be ignored.
*
* @var array<int, string>
*/
protected $except = [
// 'fbclid',
// 'utm_campaign',
// 'utm_content',
// 'utm_medium',
// 'utm_source',
// 'utm_term',
];
}
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array<int, string>
*/
protected $except = [
//
];
}
<?php
namespace App\Imports;
use App\Command\Log;
use App\Models\Brand;
use App\Models\Category;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\ToCollection;
use function Matrix\trace;
class ImportExcel implements ToCollection
{
private $className = null;
public function __construct($className)
{
$this->className = $className;
}
public function sheets(): array
{
// 只处理第一个sheet
return [
0 => $this,
];
}
/**
* @param Collection $collection
*/
public function collection(Collection $rows)
{
set_time_limit(0);
// 去掉表头
unset($rows[0]);
unset($rows[1]);
$i = 0;
foreach ($rows as $k => &$item) {
if (!$item[1] || !$item[2] || !$item[3] || !$item[4]) {
continue;
}
$i++;
$item = array_slice($item->toArray(), 0, 21);
$result = $this->className::CreateImportData($item);
if (!$result) {
continue;
}
$insert[] = $result;
$key[] = $k;
if (is_int($i / 1000)) {
DB::table($this->className::getTableName())->insert($insert);
$insert = [];
unset($key);
$key = [];
}
}
if (!empty($insert)) {
DB::table($this->className::getTableName())->insert($insert);
}
}
public function getExt($filename)
{
$arr = explode('.', $filename);
return array_pop($arr);
}
}
<?php
namespace App\Jobs;
use App\Imports\ImportExcel;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
class ansyImportExcel implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private string $className;
private string $file_path;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($className, $file_path)
{
$this->className = $className;
$this->file_path = $file_path;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$toolOrder = new ImportExcel($this->className);
Excel::import($toolOrder, $this->file_path);
}
}
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Covenant extends Model
{
use HasDateTimeFormatter;
use SoftDeletes;
protected $table = 'covenant';
//合同类型
public const CTYPE = [
1 => '民事诉讼代理',
2 => '刑事诉讼辩护及代理',
3 => '行政诉讼代理',
4 => '非诉讼法律事务',
5 => '咨询和代写法律文书',
6 => '仲裁业务',
7 => '法律援助',
];
//结算方式
public const PAYMENT_METHOD = [
1 => '开票付款',
2 => '付款开票'
];
public function principal()
{
return $this->belongsTo(Principal::class, 'principal_id', 'id');
}
public function lawyer()
{
return $this->belongsTo(Lawyer::class, 'lawyer_id', 'id');
}
}
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class Lawyer extends Model
{
use HasDateTimeFormatter;
protected $table = 'lawyer';
}
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class LawyerCost extends Model
{
use HasDateTimeFormatter;
protected $table = 'lawyer_cost';
//月份
public const MONTH = [
1 => '1月',
2 => '2月',
3 => '3月',
4 => '4月',
5 => '5月',
6 => '6月',
7 => '7月',
8 => '8月',
9 => '9月',
10 => '10月',
11 => '11月',
12 => '12月',
];
//项目
public const COSTiTEM = [
['field' => 'basic_salary', 'name' => '基本工资'],
['field' => 'special_additional', 'name' => '专项附加'],
['field' => 'social_person_fee', 'name' => '社保'],
['field' => 'social_person_fee', 'name' => '社保个人部分'],
['field' => 'social_company_fee', 'name' => '社保单位部分'],
['field' => 'accumulation_fund', 'name' => '公积金'],
['field' => 'accumulation_fund_person_fee', 'name' => '公积金个人部分'],
['field' => 'accumulation_fund_company_fee', 'name' => '公积金单位部分'],
['field' => 'annual_inspection_fee', 'name' => '律所年检费'],
['field' => 'annuity', 'name' => '律所年金'],
['field' => 'posting_tickets_fee', 'name' => '贴票成本'],
['field' => 'assistant_fee', 'name' => '助理律师成本'],
['field' => 'office_rental_fee', 'name' => '办公室租赁成本'],
['field' => 'noticket_cost', 'name' => '无票成本'],
['field' => 'personal_income_tax', 'name' => '个人所得税'],
['field' => 'total', 'name' => '合计'],
];
}
<?php
// 表中存在软删除时,调用该模块,实现树行结构
namespace App\Models;
use Dcat\Admin\Traits\ModelTree;
trait NewModelTree
{
use ModelTree;
protected function buildSelectOptions(array $nodes = [], $parentId = 0, $prefix = '', $space = '&nbsp;', $cid = 0)
{
$d = '├─';
$prefix = $prefix ?: $d . $space;
$options = [];
if (empty($nodes)) {
if ($cid > 0) {
$where = ['deleted_at' => null, 'c_id' => $cid];
} else {
$where = ['deleted_at' => null];
}
$nodes = self::where($where)->orderBy('order', 'ASC')->get()->toArray();
}
foreach ($nodes as $index => $node) {
if ($node[$this->getParentColumn()] == $parentId) {
$currentPrefix = $this->hasNextSibling($nodes, $node[$this->getParentColumn()], $index) ? $prefix : str_replace($d, '└─', $prefix);
$node[$this->getTitleColumn()] = $currentPrefix . $space . $node[$this->getTitleColumn()];
$childrenPrefix = str_replace($d, str_repeat($space, 6), $prefix) . $d . str_replace([$d, $space], '', $prefix);
$children = $this->buildSelectOptions($nodes, $node[$this->getKeyName()], $childrenPrefix);
$options[$node[$this->getKeyName()]] = $node[$this->getTitleColumn()];
if ($children) {
$options += $children;
}
}
}
return $options;
}
}
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class PersonalAccessToken extends Model
{
use HasDateTimeFormatter;
protected $table = 'personal_access_tokens';
}
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class Principal extends Model
{
use HasDateTimeFormatter;
protected $table = 'principal';
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
Schema::defaultStringLength(191);
}
}
<?php
namespace App\Providers;
// use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The model to policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
}
}
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}
<?php
namespace App\Providers;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{
/**
* The event to listener mappings for the application.
*
* @var array<class-string, array<int, class-string>>
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
//
}
/**
* Determine if events and listeners should be automatically discovered.
*
* @return bool
*/
public function shouldDiscoverEvents()
{
return false;
}
}
<?php
namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/home';
/**
* Define your route model bindings, pattern filters, and other route configuration.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::domain(env('API_URL'))
->middleware('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
}
/**
* Configure the rate limiters for the application.
*
* @return void
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}
<?php
namespace App\Store\Actions\Grid;
use App\Store\Forms\IncomeApply as FormIncomeApply;
use Dcat\Admin\Grid\RowAction;
use Dcat\Admin\Traits\HasPermissions;
use Dcat\Admin\Widgets\Modal;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class IncomeApply extends RowAction
{
/**
* @return string
*/
protected $title = '<button class="btn btn-custom disable-outline "> 申请提现 </button>';
public function render()
{
$form = FormIncomeApply::make();
return Modal::make()
->lg()
->title('申请提现')
->body($form)
->scrollable(true)
->button($this->title);
}
/**
* @return string|array|void
*/
public function confirm()
{
// return ['Confirm?', 'contents'];
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}
<?php
namespace App\Store\Actions\Grid;
use App\Store\Forms\RefundToExamine as FormRefundToExamine;
use Dcat\Admin\Grid\RowAction;
use Dcat\Admin\Traits\HasPermissions;
use Dcat\Admin\Widgets\Modal;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class RefundToExamine extends RowAction
{
/**
* @return string
*/
protected $title = '<span>退款审核</span>';
public function render()
{
$form = FormRefundToExamine::make()->payload(['id' => $this->getKey()]);
return Modal::make()
->lg()
->title($this->title)
->body($form)
->scrollable(true)
->button($this->title);
}
/**
* @return string|array|void
*/
public function confirm()
{
// return ['Confirm?', 'contents'];
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}
<?php
namespace App\Store\Actions\Grid;
use App\Store\Forms\SendOutGoods as FormSendOutGoods;
use Dcat\Admin\Grid\RowAction;
use Dcat\Admin\Traits\HasPermissions;
use Dcat\Admin\Widgets\Modal;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class SendOutGoods extends RowAction
{
/**
* @return string
*/
protected $title = '<span>订单发货</span>';
public function render()
{
$form = FormSendOutGoods::make()->payload(['id' => $this->getKey()]);
return Modal::make()
->lg()
->title($this->title)
->body($form)
->scrollable(true)
->button($this->title);
}
/**
* @return string|array|void
*/
public function confirm()
{
// return ['Confirm?', 'contents'];
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}
<?php
namespace App\Store\Controllers;
use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
class AuthController extends BaseAuthController
{
protected $view = 'admin.login';
}
<?php
namespace App\Store\Controllers;
use App\Models\StoreInfo;
use App\Store\Metrics\Examples;
use App\Http\Controllers\Controller;
use Dcat\Admin\Admin;
use Dcat\Admin\Http\Controllers\Dashboard;
use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Widgets\Card;
class HomeController extends Controller
{
public function index(Content $content)
{
return $content
->header('主页')
->description('数据总览')
->body(function (Row $row) {
$row->column(6, function (Column $column) {
$column->row(new Examples\Revenue());
});
$row->column(6, function (Column $column) {
$store = StoreInfo::where(['store_id'=>Admin::user()->id])->first();
$total_revenue = $store->total_revenue > 1000 ? round(2,($store->total_revenue/1000)).' 千' : $store->total_revenue;
$balance = $store->balance > 1000 ? round(2,($store->balance/1000)).' 千' : $store->balance;
$freeze_balance = $store->freeze_balance > 1000 ? round(2,($store->freeze_balance/1000)).' 千' : $store->freeze_balance;
$content = '<div style="height: 135px;display: flex;align-items: center;text-align: center;">
<div style="flex: 1;display: flex;flex-direction: column;border-right: 1px solid #b9c3cd;">
<h2 style="font-size: 25px;margin-top: 25px;">总收益</h2>
<p style="color: orange;font-size: 45px;font-weight: bold;">'.$total_revenue.'</p>
</div>
<div style="flex: 1;display: flex;flex-direction: column;border-right: 1px solid #b9c3cd;">
<h2 style="font-size: 25px;margin-top: 25px;">余额(可提现)</h2><p style="color:#21b978;font-size: 45px;font-weight: bold;">'.$balance.'</p>
</div>
<div style="flex: 1;display: flex;flex-direction: column;">
<h2 style="font-size: 25px;margin-top: 25px;">冻结金额(提现中)</h2><p style="color: red;font-size: 45px;font-weight: bold;">'.$freeze_balance.'</p>
</div></div>';
$column->row(new Card('',$content));
});
$row->column(12, function (Column $column) {
$column->row(new Examples\StoreOrderChats());
});
});
}
}
<?php
namespace App\Store\Controllers;
use App\Models\StoreGood;
use App\Models\StoreGoodsCategory;
use App\Models\StoreGoodsTag;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class StoreGoodController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(StoreGood::with('store_category'), function (Grid $grid) {
$grid->addTableClass(['table-text-center']);
$grid->model()->where(['store_id'=>Admin::user()->id])->orderBy('created_at','DESC');
$grid->column('id')->sortable();
$grid->column('title');
$grid->column('store_category.title','商品类别')->label('default');
$grid->column('tags')->display(function ($vel) {
if ($vel) {
$html = '';
$rel = json_decode($vel,true);
foreach ($rel as $k=>$t) {
$html .= '<span class="badge" style="background:green">' . StoreGoodsTag::find($t)->title . '</span>';
if((($k+1)%2) == 0){
$html .= '<br />';
}
}
return $html;
} else {
return '未设置';
}
});
$grid->column('price');
$grid->column('sale_price');
$grid->column('small_cover')->image(env('IMAGE_URL'),50);
$grid->column('cover')->image(env('IMAGE_URL'),50);
$grid->column('intro')->if(function ($column){
return $column->getValue();
})->then(function (Grid\Column $column){
$column->display('点击查看')->modal(function (Grid\Displayers\Modal $modal){
$modal->title('商品描述');
$modal->xl();
return $this->intro;
});
})->else(function (Grid\Column $column) {
$column->display('未设置');
});
$grid->column('look_num');
$grid->column('inventory');
$grid->column('updated_at')->sortable();
$grid->simplePaginate();
$grid->setDialogFormDimensions('70%', '90%');
$grid->enableDialogCreate();
$grid->showQuickEditButton();
$grid->disableEditButton();
$grid->disableViewButton();
$grid->simplePaginate();
$grid->disableFilterButton();
$grid->quickSearch('title')->placeholder('搜索商品');
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new StoreGood(), function (Show $show) {
$show->field('id');
$show->field('title');
$show->field('tags');
$show->field('price');
$show->field('sale_price');
$show->field('small_cover');
$show->field('cover');
$show->field('category_id');
$show->field('intro');
$show->field('look_num');
$show->field('inventory');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new StoreGood(), function (Form $form) {
if($form->isCreating()){
$form->hidden('store_id')->value(Admin::user()->id);
}
$form->text('title');
$form->multipleSelect('tags')
->options(StoreGoodsTag::where(['store_id'=>Admin::user()->id])->get()->pluck('title','id'))
->saving(function ($value) {
return $value ? json_encode($value) : null;
});
$form->currency('price')->symbol('¥');
$form->currency('sale_price')->symbol('¥');
$form->image('small_cover')->accept('jpg,jpeg,png')
->maxSize(4096)
->url('upload/store')
->help('仅支持jpg、jpeg、png格式图片上传')
->autoUpload();
$form->image('cover')->accept('jpg,jpeg,png')
->maxSize(4096)
->url('upload/store')
->help('仅支持jpg、jpeg、png格式图片上传')
->autoUpload();
$form->select('category_id')
->options(StoreGoodsCategory::where(['store_id'=>Admin::user()->id])->get()->pluck('title','id'))
->default(0)->required();
$form->editor('intro') ->imageUrl('upload/store')
->height(400);
$form->number('inventory');
$form->disableDeleteButton();
$form->disableEditingCheck();
$form->disableViewButton();
$form->disableViewCheck();
$form->disableCreatingCheck();
});
}
}
<?php
namespace App\Store\Controllers;
use App\Models\StoreGoodsCategory;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class StoreGoodsCategoryController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new StoreGoodsCategory(), function (Grid $grid) {
$grid->addTableClass(['table-text-center']);
$grid->model()->where(['store_id'=>Admin::user()->id])->orderBy('created_at','DESC');
$grid->view('admin.grid.tags');
$grid->setActionClass(Grid\Displayers\Actions::class);
$grid->column('id')->sortable();
$grid->column('store_id');
$grid->column('title');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->enableDialogCreate();
$grid->showQuickEditButton();
$grid->disableEditButton();
$grid->disableViewButton();
$grid->disableBatchDelete();
$grid->simplePaginate();
$grid->disableFilterButton();
$grid->quickSearch('title')->placeholder('搜索分类');
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new StoreGoodsCategory(), function (Show $show) {
$show->field('id');
$show->field('store_id');
$show->field('title');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new StoreGoodsCategory(), function (Form $form) {
if($form->isCreating()){
$form->hidden('store_id')->value(Admin::user()->id);
}
$form->text('title');
});
}
}
<?php
namespace App\Store\Controllers;
use App\Models\StoreGoodsTag;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class StoreGoodsTagController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new StoreGoodsTag(), function (Grid $grid) {
$grid->addTableClass(['table-text-center']);
$grid->model()->where(['store_id'=>Admin::user()->id])->orderBy('created_at','DESC');
$grid->column('id')->sortable();
$grid->view('admin.grid.tags');
$grid->model()->where(['deleted_at' => null]);
$grid->setActionClass(Grid\Displayers\Actions::class);
$grid->column('title');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->enableDialogCreate();
$grid->showQuickEditButton();
$grid->disableEditButton();
$grid->disableViewButton();
//$grid->disableDeleteButton();
$grid->disableBatchDelete();
$grid->simplePaginate();
$grid->disableFilterButton();
$grid->quickSearch('title')->placeholder('搜索标签');
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new StoreGoodsTag(), function (Show $show) {
$show->field('id');
$show->field('title');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new StoreGoodsTag(), function (Form $form) {
if($form->isCreating()){
$form->hidden('store_id')->value(Admin::user()->id);
}
$form->text('title');
});
}
}
<?php
namespace App\Store\Controllers;
use App\Models\StoreIncome;
use App\Store\Actions\Grid\IncomeApply;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Card;
class StoreIncomeController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new StoreIncome(), function (Grid $grid) {
$grid->tools(new IncomeApply());
$grid->addTableClass(['table-text-center']);
$grid->model()->where(['store_id'=>Admin::user()->id])->orderBy('created_at','DESC');
$grid->column('id')->sortable();
$grid->column('amount','金额');
$grid->column('invoice')->if(function ($column){
return $column->getValue();
})->display('点击查看')->modal(function ($modal){
//设置弹窗标题
$modal->title('发票信息');
$content = '';
$invoice = json_decode($this->invoice);
foreach ($invoice as $item){
$content .= '<br/><img src="'.env("IMAGE_URL").$item.'">';
}
$card = new Card(null, $content);
return "<div style='padding:10px 10px 0;text-align: center'>$card</div>";
})->else(function ($column){
return '未设置';
});
$grid->column('feedback')->limit(20);
$grid->column('status')->using(StoreIncome::STATUS)->dot([
0 => 'primary',
1 => 'success',
2 => 'danger'
]);
$grid->column('created_at');
$grid->disableDeleteButton();
$grid->disableViewButton();
$grid->disableCreateButton();
$grid->disableBatchActions();
$grid->showQuickEditButton();
$grid->simplePaginate();
$grid->disableFilterButton();
$grid->selector(function (Grid\Tools\Selector $selector) {
$selector->selectOne('status', '状态',StoreIncome::STATUS);
});
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new StoreIncome(), function (Show $show) {
$show->field('id');
$show->field('amout');
$show->field('invoice');
$show->field('feedback');
$show->field('status');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new StoreIncome(), function (Form $form) {
$form->currency('amount','金额')->symbol('¥')->required();
$form->multipleImage('invoice','发票信息')
->accept('jpg,jpeg,png')
->maxSize(2048)
->limit(9)
->url('upload/store-invoice')
->help('仅支持jpg、jpeg、png格式图片上传')
->autoUpload()
->saveAsJson();
});
}
}
<?php
namespace App\Store\Controllers;
use App\Models\UserAddress;
use App\Models\UserRefund;
use App\Store\Actions\Grid\RefundToExamine;
use App\Store\Actions\Grid\SendOutGoods;
use App\Models\StoreOrder;
use App\Models\TotalOrder;
use App\Models\User;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Card;
class StoreOrderController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(StoreOrder::with(['order','store_info','store_goods']), function (Grid $grid) {
$grid->addTableClass(['table-text-center']);
$grid->model()->where(['store_id'=>Admin::user()->id])->orderBy('created_at','DESC');
$grid->column('id')->sortable();
$grid->column('store_goods.title','商品');
$grid->column('num');
$grid->column('order.pay_money','金额');
$grid->column('store_info.name','商户');
$grid->column('order.uid','用户')->display(function ($val){
return User::find($val)->name ?? '';
});
$grid->column('address_id','收货信息')->if(function ($column){
return $column->getValue();
})->display('点击查看')
->modal(function ($modal){
//设置弹窗标题
$modal->title('收货信息');
$address = UserAddress::find($this->address_id);
$name = $address->name ?? '';
$phone = $address->phone ?? '';
$area = $address->area ?? '';
$address = $address->address ?? '';
$content = '<p>收货人 :'. $name .'</p><br/><p>电话 :'.$phone.'</p><br/><p>所在地区 :'.$area.'</p><br/><p>详细地址 :'.$address.'</p>';
$card = new Card(null, $content);
return "<div style='padding:10px 10px 0'>$card</div>";
})->else(function (Grid\Column $column) {
return '';
});
$grid->column('status','流程状态')
->if(function ($column){
return $column->getValue() == 0 && $this->order->status == 1;
})->display('点击发货')
->expand(new SendOutGoods())
->if(function ($column){
return $column->getValue() == 3 && in_array($this->order->status,[1,2]);
})->display('退款审核')
->expand(new RefundToExamine())
->else(function ($column){
$column->using(StoreOrder::STATUS)->dot([
0=>'#b9c3cd',
1=>'#59a9f8',
2=>'#21b978',
3=>'#dda451',
4=>'#ea5455',
]);
});
$grid->column('order.status','订单状态')
->using(TotalOrder::STATUS)
->dot([
0 => '#b9c3cd',
1 => '#59a9f8',
2 => '#21b978',
7 => '#dda451',
8 => '#ea5455',
]);
$grid->column('发货物流')->display(function (){
if(!$this->logistics || !$this->logistics_code){
return '';
}
return $this->logistics_code . "[$this->logistics]";
});
$grid->column('退货物流')->display(function (){
if(!$this->refund_logistics || !$this->refund_logistics_code){
return '';
}
return $this->refund_logistics_code . "[$this->refund_logistics]";
});
$grid->column('退款申请信息') ->if(function ($column){
return $this->status == 3;
})->display('点击查看')->modal(function ($modal){
//设置弹窗标题
$modal->title('退款申请信息');
$userRefund = UserRefund::where(['order_id'=>$this->order->id,'son_order_id'=>$this->id])->first();
$phone = $userRefund->phone ??'';
$content = '<p>原因 :'. $this->order->refund_reason .'</p><br/><p>电话 :'.$phone.'</p>';
if($this->voucher){
$voucher = json_decode($this->voucher);
$content .= '<br/><p>凭证图片:</p>';
foreach ($voucher as $item){
$content .= '<br/><img src="'.env("IMAGE_URL").$item.'">';
}
}
$card = new Card(null, $content);
return "<div style='padding:10px 10px 0'>$card</div>";
})->else(function ($column){
return '';
});
$grid->column('created_at');
$grid->simplePaginate();
$grid->disableActions();
$grid->disableCreateButton();
$grid->disableBatchActions();
$grid->simplePaginate();
$grid->disableFilterButton();
$grid->quickSearch('store_goods.title')->placeholder('搜索商品');
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new StoreOrder(), function (Show $show) {
$show->field('id');
$show->field('order_id');
$show->field('goods_id');
$show->field('num');
$show->field('address_id');
$show->field('status');
$show->field('over_time');
$show->field('voucher');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new StoreOrder(), function (Form $form) {
$form->display('id');
$form->text('order_id');
$form->text('goods_id');
$form->text('num');
$form->text('address_id');
$form->text('status');
$form->text('over_time');
$form->text('voucher');
$form->display('created_at');
$form->display('updated_at');
});
}
}
<?php
namespace App\Store\Controllers;
use Dcat\Admin\Traits\HasUploadedFile;
use Intervention\Image\Facades\Image;
class UploadFileController{
use HasUploadedFile;
public function storeUpload()
{
$disk = $this->disk();
// 判断是否是删除文件请求
if ($this->isDeleteRequest()) {
// 删除文件并响应
return $this->deleteFileAndResponse();
}
// 获取上传的文件
$file = $this->file();
$img = Image::make($file->getRealPath())
->resize(640, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->encode('jpg', 90);
$dir = '/store';
$newName = md5(uniqid()) . '.jpg';
$path = "{$dir}/$newName";
$result = $disk->put($path, $img);
return $result
? $this->responseUploaded($path, $disk->url($path))
: $this->responseErrorMessage('文件上传失败');
}
public function storeInvoiceUpload()
{
$disk = $this->disk();
// 判断是否是删除文件请求
if ($this->isDeleteRequest()) {
// 删除文件并响应
return $this->deleteFileAndResponse();
}
// 获取上传的文件
$file = $this->file();
$img = Image::make($file->getRealPath())
->resize(640, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->encode('jpg', 90);
$dir = '/storeInvoice';
$newName = md5(uniqid()) . '.jpg';
$path = "{$dir}/$newName";
$result = $disk->put($path, $img);
return $result
? $this->responseUploaded($path, $disk->url($path))
: $this->responseErrorMessage('文件上传失败');
}
}
<?php
namespace App\Store\Forms;
use App\Command\Log;
use App\Models\StoreIncome;
use App\Models\StoreInfo;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Illuminate\Support\Facades\DB;
class IncomeApply extends Form implements LazyRenderable
{
use LazyWidget;
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
$store = StoreInfo::where(['store_id'=>Admin::user()->id]);
if($store->balance < $input['amount']){
return $this->response()->error('当前余额不足,提现申请失败')->refresh();
}
DB::beginTransaction();
try {
$model = new StoreIncome();
$model->store_id = Admin::user()->id;
$model->amount = $input['amount'];
$model->invoice = $input['invoice'] ??'';
$model->save();
$store->balance -= $input['amount'];
$store->freeze_balance += $input['amount'];
$store->save();
DB::commit();
Log::add('商城商户提现申请',$model->toArray());
}catch (\Exception $exception){
DB::rollBack();
Log::add('商城商户提现申请失败',$exception);
return $this->response()->error('提现申请失败')->refresh();
}
return $this->response()->success('提现申请成功')->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->currency('amount','金额')->symbol('¥')->required();
$this->multipleImage('invoice','发票信息')
->accept('jpg,jpeg,png')
->maxSize(2048)
->limit(9)
->url('upload/store-invoice')
->help('仅支持jpg、jpeg、png格式图片上传')
->autoUpload()
->saveAsJson();
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
// 获取外部传递参数
return [];
}
}
<?php
namespace App\Store\Forms;
use App\Command\Log;
use App\Models\Pay;
use App\Models\PaymentRecord;
use App\Models\StoreGood;
use App\Models\StoreInfo;
use App\Models\StoreOrder;
use App\Models\UserRefund;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Illuminate\Support\Facades\DB;
class RefundToExamine extends Form implements LazyRenderable
{
use LazyWidget;
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
$model = StoreOrder::find($this->payload['id']);
DB::beginTransaction();
try {
$userRefund = UserRefund::where([
'order_id'=>$model->order->id,
'son_order_id'=>$model->id
])->first();
if($input['refund_status']){
if($model->order->status == 2){
$store = StoreInfo::find($model->store_id);
$store->total_revenue -= $model->order->pay_money;
$store->balance -= $model->order->pay_money;
$store->save();
}
$wxOrderSn = PaymentRecord::where(['order_id'=>$model->order_id])->first()->other_order;
$r_sn = Pay::refund($wxOrderSn,$model->order->pay_money,$model->order->refund_amount);
$userRefund->refund_no = $r_sn;
$userRefund->status = 1;
$userRefund->save();
$model->status = 4;
$model->save();
$model->order->status = 8;
$model->order->save();
$goods = StoreGood::find($model->goods_id);
$goods->sale_num -= $model->num;
$goods->inventory += $model->num;
$goods->save();
Log::add('审批同意退款完成',$model->toArray());
DB::commit();
}else{
$userRefund->status = 2;
$userRefund->save();
$model->status = $userRefund->son_order_status;
$model->save();
}
DB::commit();
Log::add('退款审批',$model->toArray());
}catch (\Exception $exception){
DB::rollBack();
Log::add('退款审批失败',$exception);
return $this->response()->error('退款审批失败')->refresh();
}
return $this->response()->success('退款审批成功')->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->radio('refund_status','退款审批')->options([true=>'同意退款',false=>'拒绝退款'])->required();
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
// 获取外部传递参数
return [];
}
}
<?php
namespace App\Store\Forms;
use App\Jobs\AutoCompleteOrder;
use App\Models\StoreOrder;
use App\Models\TotalOrder;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
class SendOutGoods extends Form implements LazyRenderable
{
use LazyWidget;
/**
* Handle the form request.
*
* @param array $input
*
* @return mixed
*/
public function handle(array $input)
{
$model = StoreOrder::find($this->payload['id']);
if($input['logistics']=='' || $input['logistics_code']=='' ){
return $this->response()->error('确认发货失败')->refresh();
}
$model->logistics = $input['logistics'] ??'';
$model->logistics_code = $input['logistics_code'] ??'';
$model->status = 1;
if (!$model->save()) {
return $this->response()->error('确认发货失败')->refresh();
}
$order = TotalOrder::find($model->order_id);
//开启自动完成订单
dispatch(new AutoCompleteOrder($order,(7*24*3600)));
return $this->response()->success('确认发货成功')->refresh();
}
/**
* Build a form here.
*/
public function form()
{
$this->text('logistics','物流名称')->required();
$this->text('logistics_code','物流单号')->required();
}
/**
* The data of the form.
*
* @return array
*/
public function default()
{
// 获取外部传递参数
return [];
}
}
<?php
namespace App\Store\Metrics\Examples;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Donut;
class NewDevices extends Donut
{
protected $labels = ['Desktop', 'Mobile'];
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$color = Admin::color();
$colors = [$color->primary(), $color->alpha('blue2', 0.5)];
$this->title('New Devices');
$this->subTitle('Last 30 days');
$this->chartLabels($this->labels);
// 设置图表颜色
$this->chartColors($colors);
}
/**
* 渲染模板
*
* @return string
*/
public function render()
{
$this->fill();
return parent::render();
}
/**
* 写入数据.
*
* @return void
*/
public function fill()
{
$this->withContent(44.9, 28.6);
// 图表数据
$this->withChart([44.9, 28.6]);
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => $data
]);
}
/**
* 设置卡片头部内容.
*
* @param mixed $desktop
* @param mixed $mobile
*
* @return $this
*/
protected function withContent($desktop, $mobile)
{
$blue = Admin::color()->alpha('blue2', 0.5);
$style = 'margin-bottom: 8px';
$labelWidth = 120;
return $this->content(
<<<HTML
<div class="d-flex pl-1 pr-1 pt-1" style="{$style}">
<div style="width: {$labelWidth}px">
<i class="fa fa-circle text-primary"></i> {$this->labels[0]}
</div>
<div>{$desktop}</div>
</div>
<div class="d-flex pl-1 pr-1" style="{$style}">
<div style="width: {$labelWidth}px">
<i class="fa fa-circle" style="color: $blue"></i> {$this->labels[1]}
</div>
<div>{$mobile}</div>
</div>
HTML
);
}
}
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment