diff --git a/app/Admin/Actions/Grid/QuotaV1SendJobStart.php b/app/Admin/Actions/Grid/QuotaV1SendJobStart.php new file mode 100644 index 00000000..08e6fd39 --- /dev/null +++ b/app/Admin/Actions/Grid/QuotaV1SendJobStart.php @@ -0,0 +1,65 @@ +'; + + public function title() + { + if ($this->title) { + return $this->title.' 开始任务'; + } + + return '开始任务'; + } + + /** + * @param Model|Authenticatable|HasPermissions|null $user + * + * @return bool + */ + protected function authorize($user): bool + { + return $user->can('dcat.admin.quota_v2_send_jobs.start'); + } + + /** + * Handle the action request. + * + * @param Request $request + * + * @return Response + */ + public function handle(Request $request) + { + try { + QuotaV1SendJob::findOrFail($this->getKey())->update([ + 'status' => QuotaV1SendJob::STATUS_DOING, + ]); + } catch (Throwable $th) { + report($th); + return $this->response()->error('开始失败,'.$th->getMessage())->refresh(); + } + + return $this->response()->success('操作成功')->refresh(); + } + + /** + * @return string|array|void + */ + public function confirm() + { + return ['确认开始执行当前任务?', '确认后将针对任务金额开始分红,无法逆转。']; + } +} diff --git a/app/Admin/Controllers/QuotaV1SendJobController.php b/app/Admin/Controllers/QuotaV1SendJobController.php new file mode 100644 index 00000000..672b45e5 --- /dev/null +++ b/app/Admin/Controllers/QuotaV1SendJobController.php @@ -0,0 +1,127 @@ +column('id')->sortable(); + $grid->column('amount')->display(function ($value) { + return bcdiv($value, 100, 2); + })->prepend('¥'); + $grid->column('administrator.name'); + $grid->column('status')->using(QuotaV1SendJobModel::$statusText)->dot([ + 0=>'primary', + 1=> 'warning', + 2=>'success', + ]); + $grid->column('remarks'); + $grid->column('created_at')->sortable(); + + $grid->model()->orderBy('created_at', 'desc'); + + /** 操作 **/ + //新增 + if (Admin::user()->can('dcat.admin.quota_v1_send_jobs.create')) { + $grid->disableCreateButton(false); + $grid->enableDialogCreate(); + } + //修改 + $grid->showQuickEditButton(Admin::user()->can('dcat.admin.quota_v1_send_jobs.edit')); + //删除以及自定义操作 + $grid->actions(function (Grid\Displayers\Actions $actions) { + if ($actions->row->status === 0) { + $actions->disableDelete(Admin::user()->cannot('dcat.admin.quota_v1_send_jobs.destroy')); + if (Admin::user()->can('dcat.admin.quota_v1_send_jobs.start')) { + $actions->append(new QuotaV1SendJobStart()); + } + } else { + if (Admin::user()->can('dcat.admin.quota_v1_send_jobs.log_list')) { + $actions->append(' 发放记录'); + } + } + }); + + /** 查询 **/ + $grid->filter(function (Grid\Filter $filter) { + $filter->panel(); + }); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + return Show::make($id, new QuotaV1SendJob(), function (Show $show) { + $show->field('id'); + $show->field('administrator_id'); + $show->field('amount'); + $show->field('status'); + $show->field('remarks'); + $show->field('created_at'); + $show->field('updated_at'); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new QuotaV1SendJob(), function (Form $form) { + $form->display('id'); + if ($form->isCreating()) { + $form->currency('amount')->symbol('¥')->customFormat(function ($amount) { + return bcdiv($amount, 100, 2); + })->saving(function ($amount) { + return bcmul($amount, 100); + })->required(); + } else { + $form->currency('amount')->symbol('¥')->customFormat(function ($amount) { + return bcdiv($amount, 100, 2); + })->saving(function ($amount) { + return bcmul($amount, 100); + })->disable(); + } + + $form->text('remarks'); + + $form->display('created_at'); + $form->display('updated_at'); + }); + } + + public function logList(Content $content, QuotaV1SendJobModel $job) + { + return $content->header(__('quota-v1-send-job.labels.quota-v1-send-jobs')) + ->description($job->id) + ->body(QuotaV1SendLogTable::grid($job->id)); + } +} diff --git a/app/Admin/Forms/BalanceDeduction.php b/app/Admin/Forms/BalanceDeduction.php index 77b533fb..2e55e88b 100644 --- a/app/Admin/Forms/BalanceDeduction.php +++ b/app/Admin/Forms/BalanceDeduction.php @@ -63,7 +63,7 @@ class BalanceDeduction extends Form implements LazyRenderable public function form() { $this->select('user_id', '用户手机号')->ajax(admin_route('api.users'))->required(); - $this->currency('change_balance', '扣减金额')->symbol('¥')->default(0)->saving(function ($value) { + $this->currency('change_balance', '扣减金额')->symbol('¥')->saving(function ($value) { return bcmul($value, 100); })->required(); $this->confirm('是否确认扣减可提?', '提交后该动作无法逆转'); diff --git a/app/Admin/Forms/BalanceRecharge.php b/app/Admin/Forms/BalanceRecharge.php index c796ff96..a32ce72d 100644 --- a/app/Admin/Forms/BalanceRecharge.php +++ b/app/Admin/Forms/BalanceRecharge.php @@ -63,7 +63,7 @@ class BalanceRecharge extends Form implements LazyRenderable public function form() { $this->select('user_id', '用户手机号')->ajax(admin_route('api.users'))->required(); - $this->currency('change_balance', '充值金额')->symbol('¥')->default(0)->saving(function ($value) { + $this->currency('change_balance', '充值金额')->symbol('¥')->saving(function ($value) { return bcmul($value, 100); })->required(); $this->confirm('是否确认充值余额?', '提交后该动作无法逆转'); diff --git a/app/Admin/Forms/Settings/Distribution.php b/app/Admin/Forms/Settings/Distribution.php index 9ddb3bbf..6442e88e 100644 --- a/app/Admin/Forms/Settings/Distribution.php +++ b/app/Admin/Forms/Settings/Distribution.php @@ -37,7 +37,7 @@ class Distribution extends Form { $appSettings = (array) Setting::where('key', 'distribution')->value('value'); - // dd(config('distribution'), app_settings('distribution')); + // dd($appSettings, app_settings('distribution')); $this->text('settle_days', '订单结算时间(天)') ->value($appSettings['settle_days'] ?? 0) @@ -49,7 +49,7 @@ class Distribution extends Form ->value($appSettings['price_diff_fee_rate'] ?? 0) ->rules('required|int|min:0|max:100') ->saving(function ($value) { - return bcdiv($value, 100); + return bcdiv($value, 100, 2); }) ->customFormat(function ($value) { return bcmul($value, 100); @@ -60,7 +60,7 @@ class Distribution extends Form ->value($appSettings['lvl_same_bonus_fee_rate'] ?? 0) ->rules('required|int|min:0|max:100') ->saving(function ($value) { - return bcdiv($value, 100); + return bcdiv($value, 100, 2); }) ->customFormat(function ($value) { return bcmul($value, 100); @@ -71,7 +71,7 @@ class Distribution extends Form ->value($appSettings['lvl_diff_bonus_fee_rate'] ?? 0) ->rules('required|int|min:0|max:100') ->saving(function ($value) { - return bcdiv($value, 100); + return bcdiv($value, 100, 2); }) ->customFormat(function ($value) { return bcmul($value, 100); @@ -82,7 +82,7 @@ class Distribution extends Form ->value($appSettings['quota_v2_rate'] ?? 0) ->rules('required|int|min:0|max:100') ->saving(function ($value) { - return bcdiv($value, 100); + return bcdiv($value, 100, 2); }) ->customFormat(function ($value) { return bcmul($value, 100); @@ -97,7 +97,7 @@ class Distribution extends Form ->prepend('%') ->rules('required|int|min:0|max:100') ->saving(function ($value) { - return bcdiv($value, 100); + return bcdiv($value, 100, 2); }) ->customFormat(function ($value) { return bcmul($value, 100); @@ -107,7 +107,7 @@ class Distribution extends Form ->prepend('%') ->rules('required|int|min:0|max:100') ->saving(function ($value) { - return bcdiv($value, 100); + return bcdiv($value, 100, 2); }) ->customFormat(function ($value) { return bcmul($value, 100); diff --git a/app/Admin/Forms/WalletDeduction.php b/app/Admin/Forms/WalletDeduction.php index 50f0b02c..db8a2259 100644 --- a/app/Admin/Forms/WalletDeduction.php +++ b/app/Admin/Forms/WalletDeduction.php @@ -63,7 +63,7 @@ class WalletDeduction extends Form implements LazyRenderable public function form() { $this->select('user_id', '用户手机号')->ajax(admin_route('api.users'))->required(); - $this->currency('change_balance', '扣减金额')->symbol('¥')->default(0)->saving(function ($value) { + $this->currency('change_balance', '扣减金额')->symbol('¥')->saving(function ($value) { return bcmul($value, 100); })->required(); $this->confirm('是否确认扣减可提?', '提交后该动作无法逆转'); diff --git a/app/Admin/Forms/WalletRecharge.php b/app/Admin/Forms/WalletRecharge.php index 4baca877..ea09039a 100644 --- a/app/Admin/Forms/WalletRecharge.php +++ b/app/Admin/Forms/WalletRecharge.php @@ -63,7 +63,7 @@ class WalletRecharge extends Form implements LazyRenderable public function form() { $this->select('user_id', '用户手机号')->ajax(admin_route('api.users'))->required(); - $this->currency('change_balance', '充值金额')->symbol('¥')->default(0)->saving(function ($value) { + $this->currency('change_balance', '充值金额')->symbol('¥')->saving(function ($value) { return bcmul($value, 100); })->required(); $this->confirm('是否确认充值可提?', '提交后该动作无法逆转'); diff --git a/app/Admin/Renderable/QuotaV1SendLogTable.php b/app/Admin/Renderable/QuotaV1SendLogTable.php new file mode 100644 index 00000000..06664802 --- /dev/null +++ b/app/Admin/Renderable/QuotaV1SendLogTable.php @@ -0,0 +1,38 @@ +column('user.phone', '手机号'); + $grid->column('amount', '分红金额')->display(function ($value) { + return bcdiv($value, 100, 2); + })->prepend('¥'); + $grid->column('status', '状态')->using(QuotaV1SendLog::$statusText)->dot([ + 0=>'warning', + 1=>'success', + ]); + $grid->column('created_at', '发放时间')->sortable(); + + $grid->model()->orderBy('created_at', 'desc'); + + $grid->filter(function (Grid\Filter $filter) { + $filter->panel(); + $filter->equal('user.phone', '手机号')->width(3); + }); + $grid->disableActions(); + $grid->disableCreateButton(); + }); + if ($jobId) { + $grid->model()->where('job_id', $jobId); + } + return $grid; + } +} diff --git a/app/Admin/Repositories/QuotaV1SendJob.php b/app/Admin/Repositories/QuotaV1SendJob.php new file mode 100644 index 00000000..15b353a6 --- /dev/null +++ b/app/Admin/Repositories/QuotaV1SendJob.php @@ -0,0 +1,95 @@ +model(); + + $updates = $form->updates(); + + [$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates); + + if ($relations) { + $updates = Arr::except($updates, array_keys($relationKeyMap)); + } + + foreach ($updates as $column => $value) { + $model->setAttribute($column, $value); + } + $model->setAttribute('administrator_id', Admin::user()->id); + + $result = $model->save(); + + $this->updateRelation($form, $model, $relations, $relationKeyMap); + }); + + return $this->model()->getKey(); + } + + /** + * 更新数据. + * + * @param Form $form + * @return bool + */ + public function update(Form $form) + { + /* @var EloquentModel $builder */ + $model = $this->model(); + + if (! $model->getKey()) { + $model->exists = true; + + $model->setAttribute($model->getKeyName(), $form->getKey()); + } + + $result = null; + + DB::transaction(function () use ($form, $model, &$result) { + $updates = $form->updates(); + + [$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates); + + if ($relations) { + $updates = Arr::except($updates, array_keys($relationKeyMap)); + } + + foreach ($updates as $column => $value) { + /* @var EloquentModel $model */ + $model->setAttribute($column, $value); + } + $model->setAttribute('administrator_id', Admin::user()->id); + $result = $model->update(); + + $this->updateRelation($form, $model, $relations, $relationKeyMap); + }); + + return $result; + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 5d47700c..14b63247 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -139,6 +139,11 @@ Route::group([ 'index', ])->names('points_logs'); + $router->resource('quota-v1-send-jobs', 'QuotaV1SendJobController')->only([ + 'index', 'create', 'store', 'edit', 'update', 'destroy', + ])->names('quota_v1_send_jobs'); + $router->get('quota-v1-send-jobs/{job}/log-list', 'QuotaV1SendJobController@logList')->name('quota_v1_send_jobs.log_list'); + /** api接口 **/ $router->get('api/product-categories', 'ProductCategoryController@categories')->name('api.product_categories'); $router->get('api/product-group-details', 'ProductGroupController@details')->name('api.product_group_details'); diff --git a/app/Console/Commands/QuotaV1SendCommand.php b/app/Console/Commands/QuotaV1SendCommand.php new file mode 100644 index 00000000..06a9f78e --- /dev/null +++ b/app/Console/Commands/QuotaV1SendCommand.php @@ -0,0 +1,67 @@ +cursor() as $job) { + $totalQuotaV1 = UserInfo::where('quota_v1', '>', 0)->sum('quota_v1'); + if ($totalQuotaV1 > 0) {//总配额大于0才开始分 + UserInfo::with('user')->where('quota_v1', '>', 0)->chunkById(100, function ($userInfos) use ($totalQuotaV1, $job) { + $walletService = new WalletService(); + //依次分红 + foreach ($userInfos as $userInfo) { + $log = new QuotaV1SendLog(); + $log->user_id = $userInfo->user_id; + $log->job_id = $job->id; + $log->amount = round(bcmul(bcdiv($job->amount, $totalQuotaV1, 5), $userInfo->quota_v1, 3)); + $log->save(); + try { + DB::beginTransaction(); + $log->update(['status'=>1]); + $walletService->changeBalance($userInfo->user, $log->amount, WalletLog::ACTION_QUOTA_V1, '老配额分红', $log); + DB::commit(); + } catch (Throwable $th) { + DB::rollBack(); + report($th); + } + } + }); + } + $job->update([ + 'status' => 2, + ]); + } + return Command::SUCCESS; + } +} diff --git a/app/Models/QuotaV1SendJob.php b/app/Models/QuotaV1SendJob.php new file mode 100644 index 00000000..70d7b443 --- /dev/null +++ b/app/Models/QuotaV1SendJob.php @@ -0,0 +1,38 @@ +'未开始', + self::STATUS_DOING=>'进行中', + self::STATUS_FINISHED=>'已完成', + ]; + + public function administrator() + { + return $this->belongsTo(Administrator::class, 'administrator_id'); + } + + public function logs() + { + return $this->hasMany(QuotaV1SendLog::class, 'job_id'); + } +} diff --git a/app/Models/QuotaV1SendLog.php b/app/Models/QuotaV1SendLog.php new file mode 100644 index 00000000..163e0efc --- /dev/null +++ b/app/Models/QuotaV1SendLog.php @@ -0,0 +1,34 @@ +0, + ]; + + protected $fillable = [ + 'status', + ]; + + public static $statusText = [ + self::STATUS_FAILED=>'失败', + self::STATUS_SUCCESS=>'成功', + ]; + + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Models/WalletLog.php b/app/Models/WalletLog.php index 7e2a6071..34a0a24c 100644 --- a/app/Models/WalletLog.php +++ b/app/Models/WalletLog.php @@ -19,6 +19,7 @@ class WalletLog extends Model public const ACTION_WITHDRAW_FAILED = 6; public const ACTION_ADMIN_RECHARGE = 7; public const ACTION_ADMIN_DEDUCTION = 8; + public const ACTION_QUOTA_V1 = 9; public const ACTION_DISTRIBUTION_PRE_INCOME = 10; /** diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f03386a3..28280dd0 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -42,6 +42,7 @@ class AppServiceProvider extends ServiceProvider 'balance_log' => \App\Models\BalanceLog::class, 'distribution_pre_income' => \App\Models\DistributionPreIncome::class, 'admin_users' => \App\Models\Admin\Administrator::class, + 'quota_v1_send_logs' => \App\Models\QuotaV1SendLog::class, ]); JsonResource::withoutWrapping(); diff --git a/database/migrations/2021_12_30_134633_create_quota_v1_send_jobs_table.php b/database/migrations/2021_12_30_134633_create_quota_v1_send_jobs_table.php new file mode 100644 index 00000000..3a5119e0 --- /dev/null +++ b/database/migrations/2021_12_30_134633_create_quota_v1_send_jobs_table.php @@ -0,0 +1,35 @@ +id(); + $table->unsignedBigInteger('administrator_id')->comment('管理员ID'); + $table->unsignedInteger('amount')->comment('金额(分)'); + $table->unsignedTinyInteger('status')->default(0)->comment('0未开始1分配中2分配完成'); + $table->string('remarks')->nullable()->comment('备注'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('quota_v1_send_jobs'); + } +} diff --git a/database/migrations/2021_12_30_135033_create_quota_v1_send_logs_table.php b/database/migrations/2021_12_30_135033_create_quota_v1_send_logs_table.php new file mode 100644 index 00000000..93327bea --- /dev/null +++ b/database/migrations/2021_12_30_135033_create_quota_v1_send_logs_table.php @@ -0,0 +1,36 @@ +id(); + $table->unsignedBigInteger('user_id')->comment('用户ID'); + $table->unsignedBigInteger('job_id')->comment('任务ID'); + $table->unsignedInteger('amount')->default(0)->comment('分红金额'); + $table->unsignedTinyInteger('status')->default(0)->comment('0失败,1成功'); + $table->string('remarks')->nullable()->comment('备注'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('quota_v1_send_logs'); + } +} diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index 70ebda1f..efd0b3f9 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -247,6 +247,11 @@ class AdminMenuSeeder extends Seeder 'icon' => '', 'uri' =>'after-sales?state=5', ], + [ + 'title' => '老配额分红', + 'icon' => '', + 'uri' => 'quota-v1-send-jobs', + ], ], ], [ diff --git a/dcat_admin_ide_helper.php b/dcat_admin_ide_helper.php index d5d241d5..0bde743c 100644 --- a/dcat_admin_ide_helper.php +++ b/dcat_admin_ide_helper.php @@ -62,6 +62,8 @@ namespace Dcat\Admin { * @property Grid\Column|Collection state * @property Grid\Column|Collection tracking_number * @property Grid\Column|Collection sales_value + * @property Grid\Column|Collection before_agent_level + * @property Grid\Column|Collection change_agent_level * @property Grid\Column|Collection v * @property Grid\Column|Collection cate * @property Grid\Column|Collection is_force @@ -168,6 +170,7 @@ namespace Dcat\Admin { * @property Grid\Column|Collection is_change * @property Grid\Column|Collection out_trade_no * @property Grid\Column|Collection auto_complete_at + * @property Grid\Column|Collection is_settle * @property Grid\Column|Collection payable_type * @property Grid\Column|Collection payable_id * @property Grid\Column|Collection tokenable_type @@ -196,6 +199,8 @@ namespace Dcat\Admin { * @property Grid\Column|Collection view_date * @property Grid\Column|Collection is_pushed * @property Grid\Column|Collection message_type + * @property Grid\Column|Collection change_quota + * @property Grid\Column|Collection job_id * @property Grid\Column|Collection x * @property Grid\Column|Collection y * @property Grid\Column|Collection size @@ -296,6 +301,8 @@ namespace Dcat\Admin { * @method Grid\Column|Collection state(string $label = null) * @method Grid\Column|Collection tracking_number(string $label = null) * @method Grid\Column|Collection sales_value(string $label = null) + * @method Grid\Column|Collection before_agent_level(string $label = null) + * @method Grid\Column|Collection change_agent_level(string $label = null) * @method Grid\Column|Collection v(string $label = null) * @method Grid\Column|Collection cate(string $label = null) * @method Grid\Column|Collection is_force(string $label = null) @@ -402,6 +409,7 @@ namespace Dcat\Admin { * @method Grid\Column|Collection is_change(string $label = null) * @method Grid\Column|Collection out_trade_no(string $label = null) * @method Grid\Column|Collection auto_complete_at(string $label = null) + * @method Grid\Column|Collection is_settle(string $label = null) * @method Grid\Column|Collection payable_type(string $label = null) * @method Grid\Column|Collection payable_id(string $label = null) * @method Grid\Column|Collection tokenable_type(string $label = null) @@ -430,6 +438,8 @@ namespace Dcat\Admin { * @method Grid\Column|Collection view_date(string $label = null) * @method Grid\Column|Collection is_pushed(string $label = null) * @method Grid\Column|Collection message_type(string $label = null) + * @method Grid\Column|Collection change_quota(string $label = null) + * @method Grid\Column|Collection job_id(string $label = null) * @method Grid\Column|Collection x(string $label = null) * @method Grid\Column|Collection y(string $label = null) * @method Grid\Column|Collection size(string $label = null) @@ -535,6 +545,8 @@ namespace Dcat\Admin { * @property Show\Field|Collection state * @property Show\Field|Collection tracking_number * @property Show\Field|Collection sales_value + * @property Show\Field|Collection before_agent_level + * @property Show\Field|Collection change_agent_level * @property Show\Field|Collection v * @property Show\Field|Collection cate * @property Show\Field|Collection is_force @@ -641,6 +653,7 @@ namespace Dcat\Admin { * @property Show\Field|Collection is_change * @property Show\Field|Collection out_trade_no * @property Show\Field|Collection auto_complete_at + * @property Show\Field|Collection is_settle * @property Show\Field|Collection payable_type * @property Show\Field|Collection payable_id * @property Show\Field|Collection tokenable_type @@ -669,6 +682,8 @@ namespace Dcat\Admin { * @property Show\Field|Collection view_date * @property Show\Field|Collection is_pushed * @property Show\Field|Collection message_type + * @property Show\Field|Collection change_quota + * @property Show\Field|Collection job_id * @property Show\Field|Collection x * @property Show\Field|Collection y * @property Show\Field|Collection size @@ -769,6 +784,8 @@ namespace Dcat\Admin { * @method Show\Field|Collection state(string $label = null) * @method Show\Field|Collection tracking_number(string $label = null) * @method Show\Field|Collection sales_value(string $label = null) + * @method Show\Field|Collection before_agent_level(string $label = null) + * @method Show\Field|Collection change_agent_level(string $label = null) * @method Show\Field|Collection v(string $label = null) * @method Show\Field|Collection cate(string $label = null) * @method Show\Field|Collection is_force(string $label = null) @@ -875,6 +892,7 @@ namespace Dcat\Admin { * @method Show\Field|Collection is_change(string $label = null) * @method Show\Field|Collection out_trade_no(string $label = null) * @method Show\Field|Collection auto_complete_at(string $label = null) + * @method Show\Field|Collection is_settle(string $label = null) * @method Show\Field|Collection payable_type(string $label = null) * @method Show\Field|Collection payable_id(string $label = null) * @method Show\Field|Collection tokenable_type(string $label = null) @@ -903,6 +921,8 @@ namespace Dcat\Admin { * @method Show\Field|Collection view_date(string $label = null) * @method Show\Field|Collection is_pushed(string $label = null) * @method Show\Field|Collection message_type(string $label = null) + * @method Show\Field|Collection change_quota(string $label = null) + * @method Show\Field|Collection job_id(string $label = null) * @method Show\Field|Collection x(string $label = null) * @method Show\Field|Collection y(string $label = null) * @method Show\Field|Collection size(string $label = null) diff --git a/resources/lang/zh_CN/quota-v1-send-job.php b/resources/lang/zh_CN/quota-v1-send-job.php new file mode 100644 index 00000000..9d8dd871 --- /dev/null +++ b/resources/lang/zh_CN/quota-v1-send-job.php @@ -0,0 +1,19 @@ + [ + 'QuotaV1SendJob' => '老配额分红', + 'quota-v1-send-jobs' => '老配额分红', + ], + 'fields' => [ + 'administrator_id' => '管理员ID', + 'administrator'=>[ + 'name' => '操作人', + ], + 'amount' => '金额', + 'status' => '状态', + 'remarks' => '备注', + ], + 'options' => [ + ], +];