Merge remote-tracking branch 'origin/master' into 1.1
This commit is contained in:
@@ -1,301 +1,299 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Admin\Controllers\User;
|
namespace App\Admin\Controllers\User;
|
||||||
|
|
||||||
use App\Admin\Actions\User\Callback;
|
use App\Admin\Actions\User\Callback;
|
||||||
use App\Admin\Actions\User\Profit;
|
use App\Admin\Actions\User\Profit;
|
||||||
use App\Admin\Actions\User\ReCode;
|
use App\Admin\Actions\User\ReCode;
|
||||||
use App\Admin\Actions\User\RefD3Key;
|
use App\Admin\Actions\User\RefD3Key;
|
||||||
use App\Admin\Exporters\UsersExport;
|
use App\Admin\Exporters\UsersExport;
|
||||||
use App\Models\Area;
|
use App\Models\Area;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Auth;
|
use Auth;
|
||||||
use Encore\Admin\Controllers\AdminController;
|
use Encore\Admin\Controllers\AdminController;
|
||||||
use Encore\Admin\Form;
|
use Encore\Admin\Form;
|
||||||
use Encore\Admin\Grid;
|
use Encore\Admin\Grid;
|
||||||
use Encore\Admin\Widgets\Table;
|
use Encore\Admin\Widgets\Table;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use RuLong\Identity\Models\Identity;
|
use RuLong\Identity\Models\Identity;
|
||||||
|
|
||||||
class IndexController extends AdminController
|
class IndexController extends AdminController
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $title = '用户管理';
|
protected $title = '用户管理';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notes:
|
* Notes:
|
||||||
* @Author: <C.Jason>
|
* @Author: <C.Jason>
|
||||||
* @Date : 2019/9/18 14:50
|
* @Date : 2019/9/18 14:50
|
||||||
* @return Grid
|
* @return Grid
|
||||||
*/
|
*/
|
||||||
protected function grid()
|
protected function grid()
|
||||||
{
|
{
|
||||||
$user = Auth::guard('admin')->user();
|
$user = Auth::guard('admin')->user();
|
||||||
$grid = new Grid(new User);
|
$grid = new Grid(new User);
|
||||||
|
|
||||||
$grid->actions(function ($actions) use ($user) {
|
$grid->actions(function ($actions) use ($user) {
|
||||||
$actions->disableDelete();
|
$actions->disableDelete();
|
||||||
$actions->disableView();
|
$actions->disableView();
|
||||||
|
|
||||||
if ($actions->row->identity_id == 1) {
|
if ($actions->row->identity_id == 1) {
|
||||||
$actions->add(new RefD3Key);
|
$actions->add(new RefD3Key);
|
||||||
$actions->add(new ReCode);
|
$actions->add(new ReCode);
|
||||||
$actions->add(new Callback);
|
$actions->add(new Callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($actions->row->identity_id == 1 && $user->id == 1) {
|
if ($actions->row->identity_id == 1 && $user->id == 1) {
|
||||||
$actions->add(new Profit);
|
$actions->add(new Profit);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->tools(function (Grid\Tools $tools) {
|
$grid->tools(function (Grid\Tools $tools) {
|
||||||
// $tools->append(new UserImport);
|
// $tools->append(new UserImport);
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->model()->orderBy('id', 'desc');
|
$grid->model()->orderBy('id', 'desc');
|
||||||
|
|
||||||
$grid->quickSearch('username')->placeholder('登录账户');
|
$grid->quickSearch('username')->placeholder('登录账户');
|
||||||
|
|
||||||
$grid->filter(function ($filter) {
|
$grid->filter(function ($filter) {
|
||||||
$filter->column(1 / 2, function ($filter) {
|
$filter->column(1 / 2, function ($filter) {
|
||||||
$filter->like('username', '登录账户');
|
$filter->like('username', '登录账户');
|
||||||
$filter->like('server_id', '渠道编号');
|
$filter->like('server_id', '渠道编号');
|
||||||
$filter->like('outlet_id', '网点编号');
|
$filter->like('outlet_id', '网点编号');
|
||||||
$filter->like('PaOutletId', '平安网点id');
|
$filter->like('PaOutletId', '平安网点id');
|
||||||
$filter->between('created_at', '注册时间')->datetime();
|
$filter->between('created_at', '注册时间')->datetime();
|
||||||
});
|
});
|
||||||
$filter->column(1 / 2, function ($filter) {
|
$filter->column(1 / 2, function ($filter) {
|
||||||
$filter->like('info.nickname', '渠道/网点');
|
$filter->like('info.nickname', '渠道/网点');
|
||||||
$filter->like('server_key', '服务秘钥');
|
$filter->like('server_key', '服务秘钥');
|
||||||
$filter->equal('identity.identity_id', '用户身份')->select([
|
$filter->equal('identity.identity_id', '用户身份')->select([
|
||||||
' ' => '全部',
|
' ' => '全部',
|
||||||
'1' => '渠道商',
|
'1' => '渠道商',
|
||||||
'2' => '网点',
|
'2' => '网点',
|
||||||
]);
|
]);
|
||||||
$filter->equal('type', '所属项目')->select([
|
$filter->equal('type', '所属项目')->select([
|
||||||
' ' => '全部',
|
' ' => '全部',
|
||||||
'pingan' => '平安券',
|
'pingan' => '平安券',
|
||||||
'wo' => '沃支付',
|
'wo' => '沃支付',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('id', '#ID#');
|
$grid->column('id', '#ID#');
|
||||||
$grid->column('username', '登录账户');
|
$grid->column('username', '登录账户');
|
||||||
$grid->column('渠道编号')->display(function () {
|
$grid->column('渠道编号')->display(function () {
|
||||||
return $this->server_id;
|
return $this->server_id;
|
||||||
});
|
});
|
||||||
$grid->column('网点编号')->display(function () {
|
$grid->column('网点编号')->display(function () {
|
||||||
return $this->outlet_id ?? '---';
|
return $this->outlet_id ?? '---';
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('平安网点id')->display(function () {
|
$grid->column('平安网点id')->display(function () {
|
||||||
return $this->PaOutletId ?? '---';
|
return $this->PaOutletId ?? '---';
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('所属项目')->display(function () {
|
$grid->column('所属项目')->display(function () {
|
||||||
return $this->type_text;
|
return $this->type_text;
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('回调地址')->display(function ($title, $column) {
|
$grid->column('回调地址')->display(function ($title, $column) {
|
||||||
return '点击查看';
|
return '点击查看';
|
||||||
})->modal(function ($model) {
|
})->modal(function ($model) {
|
||||||
$data = [
|
$data = [
|
||||||
[
|
[
|
||||||
$this->callback,
|
$this->callback,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
return new Table(['url'], $data);
|
return new Table(['url'], $data);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('密钥')->display(function ($title, $column) {
|
$grid->column('密钥')->display(function ($title, $column) {
|
||||||
return '点击查看';
|
return '点击查看';
|
||||||
})->modal(function ($model) {
|
})->modal(function ($model) {
|
||||||
$data = [
|
$data = [
|
||||||
[
|
[
|
||||||
'服务秘钥', $model->server_key ?? '---',
|
'服务秘钥', $model->server_key ?? '---',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'DES3秘钥', $model->des3key ?? '---',
|
'DES3秘钥', $model->des3key ?? '---',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
return new Table(['名称', '参数'], $data);
|
return new Table(['名称', '参数'], $data);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('nickname', '渠道/网点');
|
$grid->column('nickname', '渠道/网点');
|
||||||
$grid->column('用户身份')->display(function () {
|
$grid->column('用户身份')->display(function () {
|
||||||
if ($this->identity_id == 1) {
|
if ($this->identity_id == 1) {
|
||||||
return "<p style='color:green'>" . $this->identity_text . "</p>";
|
return "<p style='color:green'>" . $this->identity_text . "</p>";
|
||||||
} else {
|
} else {
|
||||||
return $this->identity_text;
|
return $this->identity_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$grid->column('隶属渠道')->display(function () {
|
$grid->column('隶属渠道')->display(function () {
|
||||||
return $this->parent ? $this->parent->nickname : '---';
|
return $this->parent ? $this->parent->nickname : '---';
|
||||||
});
|
});
|
||||||
|
|
||||||
if ($user->id == 1) {
|
$grid->column('分润规则')->display(function ($title, $column) {
|
||||||
$grid->column('分润规则')->display(function ($title, $column) {
|
return '点击展开';
|
||||||
return '点击展开';
|
})->modal(function ($model) {
|
||||||
})->modal(function ($model) {
|
if ($model->code) {
|
||||||
if ($model->code) {
|
$codes = $model->code->map(function ($code) {
|
||||||
$codes = $model->code->map(function ($code) {
|
return $code->only(['name', 'code', 'profit']);
|
||||||
return $code->only(['name', 'code', 'profit']);
|
});
|
||||||
});
|
|
||||||
|
return new Table(['名称', '规则项', '分润金额(元)'], $codes->toArray());
|
||||||
return new Table(['名称', '规则项', '分润金额(元)'], $codes->toArray());
|
}
|
||||||
}
|
|
||||||
|
});
|
||||||
});
|
|
||||||
}
|
$grid->column('created_at', '注册时间');
|
||||||
|
$grid->disableExport(false);
|
||||||
$grid->column('created_at', '注册时间');
|
|
||||||
$grid->disableExport(false);
|
$grid->export(function ($export) {
|
||||||
|
$export->except(['密钥', '分润规则']);
|
||||||
$grid->export(function ($export) {
|
$export->column('用户身份', function ($value, $original) {
|
||||||
$export->except(['密钥', '分润规则']);
|
return strip_tags($value);
|
||||||
$export->column('用户身份', function ($value, $original) {
|
});
|
||||||
return strip_tags($value);
|
$export->column('渠道编号', function ($value, $original) {
|
||||||
});
|
return $value . "\t";
|
||||||
$export->column('渠道编号', function ($value, $original) {
|
});
|
||||||
return $value . "\t";
|
$export->column('网点编号', function ($value, $original) {
|
||||||
});
|
return $value . "\t";
|
||||||
$export->column('网点编号', function ($value, $original) {
|
});
|
||||||
return $value . "\t";
|
$export->filename('用户管理' . date("YmdHis"));
|
||||||
});
|
});
|
||||||
$export->filename('用户管理' . date("YmdHis"));
|
|
||||||
});
|
return $grid;
|
||||||
|
}
|
||||||
return $grid;
|
|
||||||
}
|
/**
|
||||||
|
* Notes:
|
||||||
/**
|
* @Author: <C.Jason>
|
||||||
* Notes:
|
* @Date : 2019/9/18 14:50
|
||||||
* @Author: <C.Jason>
|
* @return Form
|
||||||
* @Date : 2019/9/18 14:50
|
*/
|
||||||
* @return Form
|
protected function form()
|
||||||
*/
|
{
|
||||||
protected function form()
|
$province = Area::where('parent_id', 1)->pluck('name', 'code');
|
||||||
{
|
|
||||||
$province = Area::where('parent_id', 1)->pluck('name', 'code');
|
$form = new Form(new User);
|
||||||
|
$identity = Identity::find(1);
|
||||||
$form = new Form(new User);
|
|
||||||
$identity = Identity::find(1);
|
$form->text('username', '登录账户')
|
||||||
|
->creationRules(['required', "unique:users", 'max:11'], ['max' => '小于11个字符'])
|
||||||
$form->text('username', '登录账户')
|
->updateRules(['required', "unique:users,username,{{id}}"])->required();
|
||||||
->creationRules(['required', "unique:users", 'max:11'], ['max' => '小于11个字符'])
|
|
||||||
->updateRules(['required', "unique:users,username,{{id}}"])->required();
|
$form->password('password', '登录密码')
|
||||||
|
->creationRules('required|min:6', [
|
||||||
$form->password('password', '登录密码')
|
'required' => '必填',
|
||||||
->creationRules('required|min:6', [
|
'min' => '密码不能少于6个字符',
|
||||||
'required' => '必填',
|
]);
|
||||||
'min' => '密码不能少于6个字符',
|
|
||||||
]);
|
$form->text('PaOutletId', '平安网点id');
|
||||||
|
|
||||||
$form->text('PaOutletId', '平安网点id');
|
$form->select('type', '项目')
|
||||||
|
->options(['pingan' => '平安券和自有券', 'wo' => '沃支付'])
|
||||||
$form->select('type', '项目')
|
->load('parent_id', '/admin/user/parent')
|
||||||
->options(['pingan' => '平安券和自有券', 'wo' => '沃支付'])
|
->required();
|
||||||
->load('parent_id', '/admin/user/parent')
|
|
||||||
->required();
|
$form->select('parent_id', '隶属渠道')
|
||||||
|
->options(function ($option, $info) {
|
||||||
$form->select('parent_id', '隶属渠道')
|
$user = $this;
|
||||||
->options(function ($option, $info) {
|
if (!$option || ($user && $user->identity_id == 2)) {
|
||||||
$user = $this;
|
return User::with('info')->whereHas('identity', function ($q) {
|
||||||
if (!$option || ($user && $user->identity_id == 2)) {
|
$q->where('identity_id', 1);
|
||||||
return User::with('info')->whereHas('identity', function ($q) {
|
})->when(isset($user->id), function ($q) use ($user) {
|
||||||
$q->where('identity_id', 1);
|
$q->where('type', $user->type);
|
||||||
})->when(isset($user->id), function ($q) use ($user) {
|
})->orderBy('id', 'desc')->get()->pluck('nickname', 'id');
|
||||||
$q->where('type', $user->type);
|
} else {
|
||||||
})->orderBy('id', 'desc')->get()->pluck('nickname', 'id');
|
return [0 => '没有隶属渠道'];
|
||||||
} else {
|
}
|
||||||
return [0 => '没有隶属渠道'];
|
})
|
||||||
}
|
->default(function ($info) {
|
||||||
})
|
if ($info->model() && $info->model()->parent) {
|
||||||
->default(function ($info) {
|
return $info->model()->parent_id;
|
||||||
if ($info->model() && $info->model()->parent) {
|
} else {
|
||||||
return $info->model()->parent_id;
|
return 0;
|
||||||
} else {
|
}
|
||||||
return 0;
|
})
|
||||||
}
|
->help('未选择隶属渠道创建渠道账号,选择隶属渠道创建网点账号');
|
||||||
})
|
|
||||||
->help('未选择隶属渠道创建渠道账号,选择隶属渠道创建网点账号');
|
$form->select('province_id', '行政省份')
|
||||||
|
->options($province)
|
||||||
$form->select('province_id', '行政省份')
|
->load('city_id', '/admin/ajax/areas/children')
|
||||||
->options($province)
|
->required();
|
||||||
->load('city_id', '/admin/ajax/areas/children')
|
|
||||||
->required();
|
$form->select('city_id', '行政城市')->options(function ($option, $info) {
|
||||||
|
if ($option) {
|
||||||
$form->select('city_id', '行政城市')->options(function ($option, $info) {
|
return Area::whereHas('parent', function ($q) use ($info) {
|
||||||
if ($option) {
|
$q->where('code', $this->province_id);
|
||||||
return Area::whereHas('parent', function ($q) use ($info) {
|
})->pluck('name', 'code');
|
||||||
$q->where('code', $this->province_id);
|
}
|
||||||
})->pluck('name', 'code');
|
})->load('district_id', '/admin/ajax/areas/children')->required();
|
||||||
}
|
|
||||||
})->load('district_id', '/admin/ajax/areas/children')->required();
|
$form->select('district_id', '行政区域')->options(function ($option, $info) {
|
||||||
|
if ($option) {
|
||||||
$form->select('district_id', '行政区域')->options(function ($option, $info) {
|
return Area::whereHas('parent', function ($q) use ($info) {
|
||||||
if ($option) {
|
$q->where('code', $this->city_id);
|
||||||
return Area::whereHas('parent', function ($q) use ($info) {
|
})->pluck('name', 'code');
|
||||||
$q->where('code', $this->city_id);
|
}
|
||||||
})->pluck('name', 'code');
|
})->required();
|
||||||
}
|
|
||||||
})->required();
|
$form->divider('用户资料');
|
||||||
|
$form->text('info.nickname', '渠道/网点')->placeholder('请输入渠道/网点名称')->required();
|
||||||
$form->divider('用户资料');
|
|
||||||
$form->text('info.nickname', '渠道/网点')->placeholder('请输入渠道/网点名称')->required();
|
$form->saved(function (Form $form) {
|
||||||
|
$user_id = $form->model()->id;
|
||||||
$form->saved(function (Form $form) {
|
$user = User::find($user_id);
|
||||||
$user_id = $form->model()->id;
|
if ($user->identity_id == 1 && $user->code()->count() === 0) {
|
||||||
$user = User::find($user_id);
|
$userCodes = Identity::find(1)->codes->map(function ($code) {
|
||||||
if ($user->identity_id == 1 && $user->code()->count() === 0) {
|
return $code->only(['name', 'code', 'profit']);
|
||||||
$userCodes = Identity::find(1)->codes->map(function ($code) {
|
});
|
||||||
return $code->only(['name', 'code', 'profit']);
|
$user->code()->createMany($userCodes);
|
||||||
});
|
}
|
||||||
$user->code()->createMany($userCodes);
|
|
||||||
}
|
if ($user->parent_id) {
|
||||||
|
if ($user->server_id != $user->parent->server_id) {
|
||||||
if ($user->parent_id) {
|
$user->server_id = $user->parent->server_id;
|
||||||
if ($user->server_id != $user->parent->server_id) {
|
$user->save();
|
||||||
$user->server_id = $user->parent->server_id;
|
}
|
||||||
$user->save();
|
}
|
||||||
}
|
|
||||||
}
|
});
|
||||||
|
|
||||||
});
|
return $form;
|
||||||
|
}
|
||||||
return $form;
|
|
||||||
}
|
/**
|
||||||
|
* 获取隶属
|
||||||
/**
|
* @author 玄尘 2020-03-12
|
||||||
* 获取隶属
|
* @param Request $request [description]
|
||||||
* @author 玄尘 2020-03-12
|
* @return [type] [description]
|
||||||
* @param Request $request [description]
|
*/
|
||||||
* @return [type] [description]
|
public function getParent(Request $request)
|
||||||
*/
|
{
|
||||||
public function getParent(Request $request)
|
$type = $request->get('q');
|
||||||
{
|
|
||||||
$type = $request->get('q');
|
$users = User::whereHas('identity', function ($query) {
|
||||||
|
$query->where('identity_id', 1);
|
||||||
$users = User::whereHas('identity', function ($query) {
|
})->get();
|
||||||
$query->where('identity_id', 1);
|
|
||||||
})->get();
|
$userRet = $users->map(function ($code) {
|
||||||
|
return [
|
||||||
$userRet = $users->map(function ($code) {
|
'id' => $code->id,
|
||||||
return [
|
'text' => $code->info->nickname,
|
||||||
'id' => $code->id,
|
];
|
||||||
'text' => $code->info->nickname,
|
});
|
||||||
];
|
$userRet->prepend(['id' => '', 'text' => '']);
|
||||||
});
|
|
||||||
$userRet->prepend(['id' => '', 'text' => '']);
|
return $userRet;
|
||||||
|
}
|
||||||
return $userRet;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ return [
|
|||||||
*/
|
*/
|
||||||
'route' => [
|
'route' => [
|
||||||
|
|
||||||
'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
|
'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
|
||||||
|
|
||||||
'namespace' => 'App\\Admin\\Controllers',
|
'namespace' => 'App\\Admin\\Controllers',
|
||||||
|
|
||||||
'middleware' => ['web', 'admin'],
|
'middleware' => ['web', 'admin'],
|
||||||
],
|
],
|
||||||
@@ -110,11 +110,11 @@ return [
|
|||||||
*/
|
*/
|
||||||
'auth' => [
|
'auth' => [
|
||||||
|
|
||||||
'controller' => App\Admin\Controllers\AuthController::class,
|
'controller' => App\Admin\Controllers\AuthController::class,
|
||||||
|
|
||||||
'guard' => 'admin',
|
'guard' => 'admin',
|
||||||
|
|
||||||
'guards' => [
|
'guards' => [
|
||||||
'admin' => [
|
'admin' => [
|
||||||
'driver' => 'session',
|
'driver' => 'session',
|
||||||
'provider' => 'admin',
|
'provider' => 'admin',
|
||||||
|
|||||||
305
config/excel.php
Normal file
305
config/excel.php
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Maatwebsite\Excel\Excel;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'exports' => [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Chunk size
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When using FromQuery, the query is automatically chunked.
|
||||||
|
| Here you can specify how big the chunk should be.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'chunk_size' => 1000,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Pre-calculate formulas during export
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
'pre_calculate_formulas' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| CSV Settings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. delimiter, enclosure and line ending for CSV exports.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'csv' => [
|
||||||
|
'delimiter' => ',',
|
||||||
|
'enclosure' => '"',
|
||||||
|
'line_ending' => PHP_EOL,
|
||||||
|
'use_bom' => false,
|
||||||
|
'include_separator_line' => false,
|
||||||
|
'excel_compatibility' => false,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Worksheet properties
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. default title, creator, subject,...
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'properties' => [
|
||||||
|
'creator' => '',
|
||||||
|
'lastModifiedBy' => '',
|
||||||
|
'title' => '',
|
||||||
|
'description' => '',
|
||||||
|
'subject' => '',
|
||||||
|
'keywords' => '',
|
||||||
|
'category' => '',
|
||||||
|
'manager' => '',
|
||||||
|
'company' => '',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'imports' => [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Read Only
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with imports, you might only be interested in the
|
||||||
|
| data that the sheet exists. By default we ignore all styles,
|
||||||
|
| however if you want to do some logic based on style data
|
||||||
|
| you can enable it by setting read_only to false.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'read_only' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Heading Row Formatter
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure the heading row formatter.
|
||||||
|
| Available options: none|slug|custom
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'heading_row' => [
|
||||||
|
'formatter' => 'slug',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| CSV Settings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. delimiter, enclosure and line ending for CSV imports.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'csv' => [
|
||||||
|
'delimiter' => ',',
|
||||||
|
'enclosure' => '"',
|
||||||
|
'escape_character' => '\\',
|
||||||
|
'contiguous' => false,
|
||||||
|
'input_encoding' => 'UTF-8',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Worksheet properties
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. default title, creator, subject,...
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'properties' => [
|
||||||
|
'creator' => '',
|
||||||
|
'lastModifiedBy' => '',
|
||||||
|
'title' => '',
|
||||||
|
'description' => '',
|
||||||
|
'subject' => '',
|
||||||
|
'keywords' => '',
|
||||||
|
'category' => '',
|
||||||
|
'manager' => '',
|
||||||
|
'company' => '',
|
||||||
|
],
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Extension detector
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure here which writer/reader type should be used when the package
|
||||||
|
| needs to guess the correct type based on the extension alone.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'extension_detector' => [
|
||||||
|
'xlsx' => Excel::XLSX,
|
||||||
|
'xlsm' => Excel::XLSX,
|
||||||
|
'xltx' => Excel::XLSX,
|
||||||
|
'xltm' => Excel::XLSX,
|
||||||
|
'xls' => Excel::XLS,
|
||||||
|
'xlt' => Excel::XLS,
|
||||||
|
'ods' => Excel::ODS,
|
||||||
|
'ots' => Excel::ODS,
|
||||||
|
'slk' => Excel::SLK,
|
||||||
|
'xml' => Excel::XML,
|
||||||
|
'gnumeric' => Excel::GNUMERIC,
|
||||||
|
'htm' => Excel::HTML,
|
||||||
|
'html' => Excel::HTML,
|
||||||
|
'csv' => Excel::CSV,
|
||||||
|
'tsv' => Excel::TSV,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| PDF Extension
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure here which Pdf driver should be used by default.
|
||||||
|
| Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'pdf' => Excel::DOMPDF,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Value Binder
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| PhpSpreadsheet offers a way to hook into the process of a value being
|
||||||
|
| written to a cell. In there some assumptions are made on how the
|
||||||
|
| value should be formatted. If you want to change those defaults,
|
||||||
|
| you can implement your own default value binder.
|
||||||
|
|
|
||||||
|
| Possible value binders:
|
||||||
|
|
|
||||||
|
| [x] Maatwebsite\Excel\DefaultValueBinder::class
|
||||||
|
| [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
|
||||||
|
| [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'value_binder' => [
|
||||||
|
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
'cache' => [
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Default cell caching driver
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| By default PhpSpreadsheet keeps all cell values in memory, however when
|
||||||
|
| dealing with large files, this might result into memory issues. If you
|
||||||
|
| want to mitigate that, you can configure a cell caching driver here.
|
||||||
|
| When using the illuminate driver, it will store each value in a the
|
||||||
|
| cache store. This can slow down the process, because it needs to
|
||||||
|
| store each value. You can use the "batch" store if you want to
|
||||||
|
| only persist to the store when the memory limit is reached.
|
||||||
|
|
|
||||||
|
| Drivers: memory|illuminate|batch
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'driver' => 'memory',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Batch memory caching
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with the "batch" caching driver, it will only
|
||||||
|
| persist to the store when the memory limit is reached.
|
||||||
|
| Here you can tweak the memory limit to your liking.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'batch' => [
|
||||||
|
'memory_limit' => 60000,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Illuminate cache
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When using the "illuminate" caching driver, it will automatically use
|
||||||
|
| your default cache store. However if you prefer to have the cell
|
||||||
|
| cache on a separate store, you can configure the store name here.
|
||||||
|
| You can use any store defined in your cache config. When leaving
|
||||||
|
| at "null" it will use the default store.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'illuminate' => [
|
||||||
|
'store' => null,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Transaction Handler
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| By default the import is wrapped in a transaction. This is useful
|
||||||
|
| for when an import may fail and you want to retry it. With the
|
||||||
|
| transactions, the previous import gets rolled-back.
|
||||||
|
|
|
||||||
|
| You can disable the transaction handler by setting this to null.
|
||||||
|
| Or you can choose a custom made transaction handler here.
|
||||||
|
|
|
||||||
|
| Supported handlers: null|db
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'transactions' => [
|
||||||
|
'handler' => 'db',
|
||||||
|
],
|
||||||
|
|
||||||
|
'temporary_files' => [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Local Temporary Path
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When exporting and importing files, we use a temporary file, before
|
||||||
|
| storing reading or downloading. Here you can customize that path.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'local_path' => storage_path('framework/laravel-excel'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Remote Temporary Disk
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with a multi server setup with queues in which you
|
||||||
|
| cannot rely on having a shared local temporary path, you might
|
||||||
|
| want to store the temporary file on a shared disk. During the
|
||||||
|
| queue executing, we'll retrieve the temporary file from that
|
||||||
|
| location instead. When left to null, it will always use
|
||||||
|
| the local path. This setting only has effect when using
|
||||||
|
| in conjunction with queued imports and exports.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'remote_disk' => null,
|
||||||
|
'remote_prefix' => null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Force Resync
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with a multi server setup as above, it's possible
|
||||||
|
| for the clean up that occurs after entire queue has been run to only
|
||||||
|
| cleanup the server that the last AfterImportJob runs on. The rest of the server
|
||||||
|
| would still have the local temporary file stored on it. In this case your
|
||||||
|
| local storage limits can be exceeded and future imports won't be processed.
|
||||||
|
| To mitigate this you can set this config value to be true, so that after every
|
||||||
|
| queued chunk is processed the local temporary file is deleted on the server that
|
||||||
|
| processed it.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'force_resync_remote' => null,
|
||||||
|
],
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user