- 董事
+ 默认用户
{$director}
diff --git a/app/Admin/Renderable/DealerSubordinateCard.php b/app/Admin/Renderable/DealerSubordinateCard.php
new file mode 100644
index 00000000..6f35767f
--- /dev/null
+++ b/app/Admin/Renderable/DealerSubordinateCard.php
@@ -0,0 +1,59 @@
+id;
+ // dd($id);
+ $query = DB::table('users')
+ ->join('user_infos', 'users.id', '=', 'user_infos.user_id')
+ ->join('dealers', 'users.id', '=', 'dealers.user_id');
+ $userInfo = UserInfo::where('user_id', $id)->first();
+ // 查询数据逻辑
+ $data = [
+ 'top'=> (clone $query)->whereNotNull('users.phone')->where('dealers.lvl', 6)->where('user_infos.path', 'like', $userInfo->full_path.'%')->count(),
+ 'secondary'=> (clone $query)->whereNotNull('users.phone')->where('dealers.lvl', 5)->where('user_infos.path', 'like', $userInfo->full_path.'%')->count(),
+ 'contracted'=> (clone $query)->whereNotNull('users.phone')->where('dealers.lvl', 4)->where('user_infos.path', 'like', $userInfo->full_path.'%')->count(),
+ 'special'=> (clone $query)->whereNotNull('users.phone')->where('dealers.lvl', 3)->where('user_infos.path', 'like', $userInfo->full_path.'%')->count(),
+ 'gold'=> (clone $query)->whereNotNull('users.phone')->where('dealers.lvl', 2)->where('user_infos.path', 'like', $userInfo->full_path.'%')->count(),
+ ];
+
+ // 这里可以返回内置组件,也可以返回视图文件或HTML字符串
+ return
+ <<
+
+
+
{$data['top']}
+ 一级经销商
+
+
+
{$data['secondary']}
+ 二级经销商
+
+
+
{$data['contracted']}
+ 签约经销商
+
+
+
+
+
{$data['special']}
+ 特邀经销商
+
+
+
{$data['gold']}
+ 金牌经销商
+
+
+HTML;
+ }
+}
diff --git a/app/Admin/Renderable/Grid/Filter/DealerOrderPayWayIn.php b/app/Admin/Renderable/Grid/Filter/DealerOrderPayWayIn.php
new file mode 100644
index 00000000..f8e87f17
--- /dev/null
+++ b/app/Admin/Renderable/Grid/Filter/DealerOrderPayWayIn.php
@@ -0,0 +1,77 @@
+options = $options;
+
+ $this->class = [
+ 'all' => uniqid('column-filter-all-'),
+ 'item' => uniqid('column-filter-item-'),
+ ];
+ }
+
+ /**
+ * Add a binding to the query.
+ *
+ * @param array $value
+ * @param Model $model
+ */
+ public function addBinding($value, Model $model)
+ {
+ if (empty($value)) {
+ return;
+ }
+ $all = [
+ PayWay::Offline->value => '线下打款',
+ PayWay::Wallet->value => '余额支付',
+ PayWay::WxpayH5->value => '微信支付',
+ ''=>'Unknown',
+ ];
+
+ if (array_diff($all, $value)) {//无差别则直接跳过
+ //判断查询的状态有哪些;
+ $model->where(function ($query) use ($value) {
+ foreach ($value as $payWay) {
+ switch ($payWay) {
+ case '':
+ $query->orWhereNull('pay_way');
+ break;
+ default:
+ $query->orWhere('pay_way', $payWay);
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * Render this filter.
+ *
+ * @return string
+ */
+ public function render()
+ {
+ return $this->renderCheckbox();
+ }
+}
diff --git a/app/Admin/Renderable/UserFansSimpleTable.php b/app/Admin/Renderable/UserFansSimpleTable.php
index 7657508f..013d209a 100644
--- a/app/Admin/Renderable/UserFansSimpleTable.php
+++ b/app/Admin/Renderable/UserFansSimpleTable.php
@@ -17,7 +17,7 @@ class UserFansSimpleTable extends LazyRenderable
$grid->column('user.phone', '手机号')->link(function ($value) {
return admin_url('users/'.$this->user_id);
});
- $grid->column('agent_level', '管理级别')->display(function ($value) {
+ $grid->column('agent_level', '身份')->display(function ($value) {
return $this->agent_level_name??'未知';
})->label();
diff --git a/app/Admin/Renderable/UserInviterSimpleTable.php b/app/Admin/Renderable/UserInviterSimpleTable.php
index f9d7f703..5c861926 100644
--- a/app/Admin/Renderable/UserInviterSimpleTable.php
+++ b/app/Admin/Renderable/UserInviterSimpleTable.php
@@ -18,7 +18,7 @@ class UserInviterSimpleTable extends LazyRenderable
$grid->column('user.phone', '手机号')->link(function ($value) {
return admin_url('users/'.$this->user_id);
});
- $grid->column('agent_level', '管理级别')->display(function ($value) {
+ $grid->column('agent_level', '身份')->display(function ($value) {
return $this->agent_level_name??'未知';
})->label();
diff --git a/app/Admin/Renderable/UserSalesValueLogSimpleTable.php b/app/Admin/Renderable/UserSalesValueLogSimpleTable.php
new file mode 100644
index 00000000..5d44c41e
--- /dev/null
+++ b/app/Admin/Renderable/UserSalesValueLogSimpleTable.php
@@ -0,0 +1,56 @@
+payload['id'] ?? 0;
+ $builder = SalesValueLog::query();
+ return Grid::make($builder, function (Grid $grid) use ($userId) {
+ $grid->model()->where('user_id', $userId);
+ $grid->column('type')->using([
+ 1=>'个人',
+ 2=>'团队',
+ ]);
+ $grid->column('change_sales_value', '变动');
+ $grid->column('remarks', '备注');
+ $grid->column('created_at', '创建时间')->sortable();
+ // $grid->column('updated_at')
+ // $grid->withBorder();
+ $grid->model()->orderBy('created_at', 'desc');
+ // $grid->disableRefreshButton();
+ $grid->disableActions();
+ $grid->disableCreateButton();
+ $grid->header(function ($collection) use ($grid) {
+ $query = SalesValueLog::query();
+
+ // 拿到表格筛选 where 条件数组进行遍历
+ $grid->model()->getQueries()->unique()->each(function ($value) use (&$query) {
+ // dd($value);
+ if (in_array($value['method'], ['paginate', 'get', 'orderBy', 'orderByDesc'], true)) {
+ return;
+ }
+
+ $query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
+ });
+ // 查出统计数据
+ $salesValue1 = (clone $query)->where('type', '1')->sum('change_sales_value');
+ $salesValue2 = (clone $query)->where('type', '2')->sum('change_sales_value');
+ // 自定义组件
+ return "
个人消费值:".$salesValue1.'
团队消费值:'.$salesValue2.'
';
+ });
+ $grid->filter(function (Grid\Filter $filter) {
+ $filter->between('created_at', '时间')->date()->default([
+ 'start'=>now()->subDays(30)->toDateString(),
+ 'end'=>now()->toDateString(),
+ ]);
+ });
+ });
+ }
+}
diff --git a/app/Admin/Repositories/SalesValueLog.php b/app/Admin/Repositories/SalesValueLog.php
new file mode 100644
index 00000000..85a10305
--- /dev/null
+++ b/app/Admin/Repositories/SalesValueLog.php
@@ -0,0 +1,16 @@
+get('import-job-logs', 'ImportJobLogController@index')->name('import_job_logs.index');
+ $router->resource('sales-value-logs', 'SalesValueLogController')->only(
+ ['index']
+ )->names('sales_value_logs');
+
//经销商
$router->resource('dealer-products', 'DealerProductController')->names('dealer_products');
diff --git a/app/Console/Commands/Distribution/PreIncomeJobCommand.php b/app/Console/Commands/Distribution/PreIncomeJobCommand.php
index d65d01db..9cabe193 100644
--- a/app/Console/Commands/Distribution/PreIncomeJobCommand.php
+++ b/app/Console/Commands/Distribution/PreIncomeJobCommand.php
@@ -55,20 +55,22 @@ class PreIncomeJobCommand extends Command
//发送商家端预收益进帐消息
try {
DB::beginTransaction();
+
switch (get_class($job->jobable)) {
- case Order::class://如果是订单类型,则发送预收益消息
- $order = $job->jobable;
- $incomesLogs = DistributionPreIncome::where('order_id', $order->id)->get();
- foreach ($incomesLogs as $log) {
- MerchantMessage::createDistributionMessage($log->user_id, [
- 'title'=>'恭喜收入'.$log->total_revenue.'元',
- 'content'=>'您有新的预收益产生,共'.$log->total_revenue.'元。',
- ]);
- }
- break;
- default:
- break;
- }
+ case Order::class://如果是订单类型,则发送预收益消息
+ $order = $job->jobable;
+ $incomesLogs = DistributionPreIncome::where('order_id', $order->id)->get();
+ foreach ($incomesLogs as $log) {
+ MerchantMessage::createDistributionMessage($log->user_id, [
+ 'title'=>'恭喜收入'.$log->total_revenue.'元',
+ 'content'=>'您有新的预收益产生,共'.$log->total_revenue.'元。',
+ ]);
+ }
+ break;
+ default:
+ break;
+ }
+
DB::commit();
} catch (Throwable $e) {
DB::rollBack();
diff --git a/app/Console/Commands/Distribution/PreIncomeSettleCommand.php b/app/Console/Commands/Distribution/PreIncomeSettleCommand.php
index e456ad83..c8166a91 100644
--- a/app/Console/Commands/Distribution/PreIncomeSettleCommand.php
+++ b/app/Console/Commands/Distribution/PreIncomeSettleCommand.php
@@ -44,33 +44,33 @@ class PreIncomeSettleCommand extends Command
DB::beginTransaction();
$walletService->changeBalance(
- $preIncome->user,
- bcmul($preIncome->total_revenue, 100),
- WalletLog::ACTION_DISTRIBUTION_PRE_INCOME,
- $preIncome->remarks,
- $preIncome
- );
+ $preIncome->user,
+ bcmul($preIncome->total_revenue, 100),
+ WalletLog::ACTION_DISTRIBUTION_PRE_INCOME,
+ $preIncome->remarks,
+ $preIncome
+ );
// 计算配额
$changeQuota = bcmul($preIncome->total_revenue, app_settings('distribution.quota_v2_rate', 0), 4);
$changeQuota = round($changeQuota, 3);
$preIncome->user->userInfo()->update([
- 'quota_v2' => DB::raw("quota_v2+{$changeQuota}"),
- ]);
+ 'quota_v2' => DB::raw("quota_v2+{$changeQuota}"),
+ ]);
$preIncome->user->quotaLogs()->create([
- 'loggable_id' => $preIncome->id,
- 'loggable_type' => $preIncome->getMorphClass(),
- 'change_quota' => $changeQuota,
- 'remarks' => $preIncome->type_text.'得配额',
- ]);
+ 'loggable_id' => $preIncome->id,
+ 'loggable_type' => $preIncome->getMorphClass(),
+ 'change_quota' => $changeQuota,
+ 'remarks' => $preIncome->type_text.'得配额',
+ ]);
// 将预收益标记为已结算
$preIncome->update([
- 'completed_at' => now(),
- 'status' => DistributionPreIncome::STATUS_PROCESSED,
- ]);
+ 'completed_at' => now(),
+ 'status' => DistributionPreIncome::STATUS_PROCESSED,
+ ]);
DB::commit();
} catch (Throwable $e) {
diff --git a/app/Console/Commands/OrderRefundCommand.php b/app/Console/Commands/OrderRefundCommand.php
index 14457001..92614003 100644
--- a/app/Console/Commands/OrderRefundCommand.php
+++ b/app/Console/Commands/OrderRefundCommand.php
@@ -2,14 +2,15 @@
namespace App\Console\Commands;
+use App\Enums\PayWay;
use App\Exceptions\BizException;
use App\Models\BalanceLog;
use App\Models\OrderRefundLog;
use App\Models\WalletLog;
use App\Services\AlipayService;
use App\Services\BalanceService;
+use App\Services\Payment\WxpayService;
use App\Services\WalletService;
-use App\Services\WeChatPayService;
use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Throwable;
@@ -43,7 +44,11 @@ class OrderRefundCommand extends Command
OrderRefundLog::pending()->chunkById(200, function ($logs) use (&$page) {
foreach ($logs as $log) {
try {
- $method = 'refundBy'.Str::studly($log->order->pay_way->value);
+ $method = match ($log->order->pay_way) {
+ PayWay::WxpayApp, PayWay::WxpayH5, PayWay::WxpayJsApi, PayWay::WxpayMiniProgram => 'refundByWxpay',
+ PayWay::AlipayApp => 'refundByAlipay',
+ default => 'refundBy'.Str::studly($log->order->pay_way->value),
+ };
if (! method_exists($this, $method)) {
throw new BizException('退款方式暂不支持');
@@ -79,20 +84,22 @@ class OrderRefundCommand extends Command
* @param \App\Models\OrderRefundLog $log
* @return void
*/
- protected function refundByWxpayApp(OrderRefundLog $log)
+ protected function refundByWxpay(OrderRefundLog $log)
{
$order = $log->order;
- (new WeChatPayService())->refundByOutTradeNumber(
- $order->pay_sn,
- $log->sn,
- $order->total_amount,
- $log->amount,
- [
+ (new WxpayService())->refundByOutTradeNumber([
+ 'number' => $order->pay_sn,
+ 'refund_number' => $log->sn,
+ 'total_fee' => $order->total_amount,
+ 'refund_fee' => $log->amount,
+ 'optional' => [
'refund_desc' => $log->reason,
- 'notify_url' => url(route('wxpay.order_refund_notify', [], false), [], true),
- ]
- );
+ ],
+ ], match ($order->pay_way) {
+ PayWay::WxpayMiniProgram => 'mini_program',
+ default => 'default',
+ });
$log->update([
'status' => OrderRefundLog::STATUS_SUCCESS,
@@ -106,7 +113,7 @@ class OrderRefundCommand extends Command
* @param \App\Models\OrderRefundLog $log
* @return void
*/
- protected function refundByAlipayApp(OrderRefundLog $log)
+ protected function refundByAlipay(OrderRefundLog $log)
{
$order = $log->order;
diff --git a/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php b/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php
new file mode 100644
index 00000000..0eba4040
--- /dev/null
+++ b/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php
@@ -0,0 +1,338 @@
+validate([
+ 'code' => ['bail', 'required', 'string'],
+ ]);
+ $code = $input['code'];
+
+ //获取第三方用户信息
+ $socialite = $this->getSocialiteUserByCode($provider, $code);
+
+ //通过第三方用户信息登录已绑定账号
+ $token = null;
+ $socialiteUser = SocialiteUser::firstOrCreate([
+ 'socialite_type' => $provider,
+ 'socialite_id' => $socialite?->id,
+ ]);
+ $user = $socialiteUser->user;
+ if ($user) {
+ $token = $this->loginUser($user, $request);
+ }
+
+ return response()->json([
+ 'token' => $token?->plainTextToken,
+ ]);
+ }
+
+ public function codeBindUser($provider, Request $request)
+ {
+ $type = $request->input('type', 'default');
+
+ $rules = [
+ 'code' => ['bail', 'required', 'string'],
+ 'inviter_code' => ['bail', 'nullable', 'string'],
+ ];
+ switch ($type) {
+ case 'default'://手机号+密码
+ $rules = array_merge($rules, [
+ 'phone' => ['bail', 'required', 'string'],
+ 'password' => ['bail', 'required', 'string'],
+ ]);
+ break;
+ case 'sms-code'://手机号+验证码
+ $rules = array_merge($rules, [
+ 'phone' => ['bail', 'required', new PhoneNumberRule()],
+ 'verify_code' => ['bail', 'required', 'string'],
+ ]);
+ break;
+ case 'wechat-mini'://微信小程序解密手机号
+ $rules = array_merge($rules, [
+ 'data' => ['bail', 'required', 'string'],
+ 'iv' => ['bail', 'required', 'string'],
+ ]);
+ break;
+ default://默认手机号+密码
+ $rules = array_merge($rules, [
+ 'phone' => ['bail', 'required', 'string'],
+ 'password' => ['bail', 'required', 'string'],
+ ]);
+ break;
+ }
+
+ $input = $request->validate($rules);
+ $code = $input['code'];
+
+ //获取第三方用户信息
+ $socialite = $this->getSocialiteUserByCode($provider, $code);
+
+ //绑定用户,并返回token
+ $token = $this->bindUser([
+ 'socialite_type'=>$provider,
+ 'socialite_id'=>$socialite?->id,
+ ], $type ?? 'default', $request);
+
+ return response()->json([
+ 'token' => $token?->plainTextToken,
+ ]);
+ }
+
+ /**
+ * 第三方登录的解绑
+ *
+ * @param [type] $provider
+ * @param Request $request
+ */
+ public function unbindUser($provider, Request $request)
+ {
+ if ($user = $request->user()) {
+ //解绑三方的关系
+ SocialiteUser::where([
+ 'user_id' => $user->id,
+ 'socialite_type' => $provider,
+ ])->update([
+ 'user_id' => null,
+ ]);
+ }
+
+ return response()->noContent();
+ }
+
+ /**
+ * [目前支持:微信小程序]
+ */
+ protected function getSocialiteUserByCode($provider, $code)
+ {
+ //获取第三方用户信息
+ $user = null;
+ $config = config('socialite', []);
+ $socialite = new SocialiteManager($config);
+
+ switch ($provider) {
+ case SocialiteType::WechatMiniProgram->value: //微信小程序
+ $user = $socialite->create(SocialiteType::WechatMiniProgram->value)->userFromCode($code);
+ break;
+
+ default:
+ throw new BizException(404);
+ }
+
+ return $user;
+ }
+
+ /**
+ * 第三方绑定用户
+ *
+ * @param [array] $socialite
+ * @param [Request] $request
+ */
+ protected function bindUser(array $socialite, string $type, Request $request)
+ {
+ $token = null;
+ $socialiteUser = SocialiteUser::firstOrCreate($socialite);
+ $user = null;
+ $input = $request->input();
+ $phone = $input['phone'] ?? '';
+ switch ($type) {
+ case 'default'://手机号+密码
+ $user = User::where('phone', $phone)->first();
+ //手机号不存在,或者密码错误
+ if (! $user?->verifyPassword($input['password'])) {
+ throw new BizException(__('Incorrect account or password'));
+ }
+ break;
+ case 'sms-code'://手机号+验证码
+ app(SmsCodeService::class)->validate(
+ $input['phone'],
+ SmsCode::TYPE_REGISTER,
+ $input['verify_code']
+ );
+ $user = User::where('phone', $phone)->first();
+ break;
+ case 'wechat-mini'://微信小程序解密手机号
+ //解密失败
+ $app = EasyWeChatFactory::miniProgram([
+ 'app_id' => config('wechat.mini_program.default.app_id', ''),
+ 'secret' => config('wechat.mini_program.default.secret', ''),
+
+ // 下面为可选项
+ // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+ 'response_type' => 'array',
+
+ 'log' => [
+ 'level' => 'debug',
+ 'file' => storage_path('logs/wechat-mini.log'),
+ ],
+ ]);
+ $session = Cache::get($socialite['socialite_id']);
+ try {
+ $decryptedData = $app->encryptor->decryptData($session, $input['iv'], $input['data']);
+ } catch (\EasyWeChat\Kernel\Exceptions\DecryptException $e) {
+ return $this->error('系统错误, 请重新进入小程序');
+ }
+ $phone = data_get($decryptedData, 'phoneNumber');
+ //解密成功,$user
+ $user = User::where('phone', $phone)->first();
+ break;
+ }
+ if (empty($phone)) {
+ throw new BizException('系统错误,未找到手机号');
+ }
+ //走登录逻辑
+ if ($user) {
+ $token = $this->loginUser($user, $request);
+ } else {//走注册逻辑
+ $time = now();
+ $ip = $request->realIp();
+ $inviter = $this->findUserByCode((string) Arr::get($input, 'inviter_code'));
+ try {
+ DB::beginTransaction();
+ $user = User::create([
+ 'phone' => $phone,
+ 'password' => Str::random(6), //先随机一个密码
+ 'phone_verified_at' => $time,
+ 'register_ip' => $ip,
+ 'last_login_at' => $time,
+ 'last_login_ip' => $ip,
+ ],
+ $inviter
+ );
+
+ DB::commit();
+ } catch (Throwable $e) {
+ DB::rollBack();
+
+ report($e);
+
+ throw new BizException(__('Registration failed, please try again'));
+ }
+
+ // 获取登录设备
+ $device = $request->header('client-app', Device::UNIAPP);
+
+ switch ($device) {
+ case Device::DEALER:
+ $token = $user->createToken(Device::DEALER);
+ break;
+ default:
+ $token = $user->createToken(Device::UNIAPP, ['mall']);
+ break;
+ }
+ }
+ //解绑对应三方以前的关系
+ SocialiteUser::where([
+ 'user_id' => $user->id,
+ 'socialite_type' => $socialite['socialite_type'],
+ ])->update([
+ 'user_id' => null,
+ ]);
+ //绑定用户和三方信息关系
+ $socialiteUser->update([
+ 'user_id' => $user->id,
+ ]);
+
+ return $token;
+ }
+
+ /**
+ * 第三方登录现有绑定的用户
+ *
+ * @param [User] $user
+ * @param [Request] $request
+ */
+ protected function loginUser(User $user, Request $request)
+ {
+ $token = null;
+ $user->last_login_at = now();
+ $user->last_login_ip = $request->realIp();
+ $user->save();
+ // 获取登录设备
+ $device = $request->header('client-app', Device::UNIAPP);
+
+ switch ($device) {
+ case Device::MERCHANT:
+ if ($user->userInfo?->agent_level < UserInfo::AGENT_LEVEL_VIP) {
+ throw new BizException('账户没有权限');
+ }
+
+ // 清理此用户的商户端令牌
+ $user->tokens()->where('name', $device)->delete();
+ // 颁发新的商户端令牌
+ $token = $user->createToken($device);
+ break;
+ case Device::DEALER:
+ if (!$user->isDealer()) {
+ throw new BizException('账户没有权限');
+ }
+
+ // 清理此用户的商户端令牌
+ $user->tokens()->where('name', $device)->delete();
+ // 颁发新的商户端令牌
+ $token = $user->createToken($device);
+ break;
+ default:
+ $device = Device::UNIAPP;
+ // 清理此用户的商城端令牌
+ $user->tokens()->where('name', $device)->delete();
+ // 颁发新的商城端令牌
+ $token = $user->createToken($device, ['mall']);
+ break;
+ }
+ return $token;
+ }
+
+ /**
+ * 通过邀请码搜索用户
+ *
+ * @param string $code
+ * @return \App\Models\User|null
+ *
+ * @throws \App\Exceptions\BizException
+ */
+ protected function findUserByCode(string $code): ?User
+ {
+ if ($code === '') {
+ return null;
+ }
+
+ $user = User::when(PhoneNumber::validate($code), function ($query) use ($code) {
+ $query->where('phone', $code);
+ }, function ($query) use ($code) {
+ $query->whereRelation('userInfo', 'code', $code);
+ })->first();
+
+ if ($user === null) {
+ throw new BizException(__('Inviter does not exist'));
+ }
+
+ return $user;
+ }
+}
diff --git a/app/Endpoint/Api/Http/Controllers/Merchant/AgentController.php b/app/Endpoint/Api/Http/Controllers/Merchant/AgentController.php
index 767b7eac..2133aaaf 100644
--- a/app/Endpoint/Api/Http/Controllers/Merchant/AgentController.php
+++ b/app/Endpoint/Api/Http/Controllers/Merchant/AgentController.php
@@ -34,7 +34,7 @@ class AgentController extends Controller
],
// 代理
'agents_count' => [
- 'label' => '店铺',
+ 'label' => '会员',
'current_agents_count' => $userInfo->getVipAgentsCount(),
'upgrade_agents_count' => $rules['community']['vips_agents_count'],
],
@@ -50,7 +50,7 @@ class AgentController extends Controller
'upgrade_team_sales_value' => (string) $rules['district']['team_sales_value'],
],
'agents_count' => [
- 'label' => '店铺',
+ 'label' => '会员',
'current_agents_count' => $userInfo->getVipAgentsCount(),
'upgrade_agents_count' => $rules['district']['vips_agents_count'],
],
@@ -66,7 +66,7 @@ class AgentController extends Controller
'upgrade_team_sales_value' => (string) $rules['city']['team_sales_value'],
],
'agents_count' => [
- 'label' => '区代',
+ 'label' => '铜牌会员',
'current_agents_count' => $userInfo->getDistrictAgentsCountOnDifferentLines(),
'upgrade_agents_count' => $rules['city']['district_agents_count'],
],
@@ -82,7 +82,7 @@ class AgentController extends Controller
'upgrade_team_sales_value' => (string) $rules['province']['team_sales_value'],
],
'agents_count' => [
- 'label' => '市代',
+ 'label' => '银牌会员',
'current_agents_count' => $userInfo->getCityAgentsCountOnDifferentLines(),
'upgrade_agents_count' => $rules['province']['city_agents_count'],
],
@@ -98,7 +98,7 @@ class AgentController extends Controller
'upgrade_team_sales_value' => (string) $rules['branch']['team_sales_value'],
],
'agents_count' => [
- 'label' => '省代',
+ 'label' => '金牌会员',
'current_agents_count' => $userInfo->getProvinceAgentsCountOnDifferentLines(),
'upgrade_agents_count' => $rules['branch']['province_agents_count'],
],
diff --git a/app/Endpoint/Api/Http/Resources/Dealer/DealerFansResource.php b/app/Endpoint/Api/Http/Resources/Dealer/DealerFansResource.php
index 09450b61..3c8b9ab7 100644
--- a/app/Endpoint/Api/Http/Resources/Dealer/DealerFansResource.php
+++ b/app/Endpoint/Api/Http/Resources/Dealer/DealerFansResource.php
@@ -27,7 +27,7 @@ class DealerFansResource extends JsonResource
return $this->dealer->team_sales_value;
}, 0),
'lvl_name' => (string) $this->whenLoaded('dealer', function () {
- return $this->dealer->lvl_text;
+ return $this->dealer->lvl->text();
}, '未知'),
];
}
diff --git a/app/Endpoint/Api/Http/Resources/Dealer/DealerResource.php b/app/Endpoint/Api/Http/Resources/Dealer/DealerResource.php
index f6c3b74e..b1bce8f2 100644
--- a/app/Endpoint/Api/Http/Resources/Dealer/DealerResource.php
+++ b/app/Endpoint/Api/Http/Resources/Dealer/DealerResource.php
@@ -16,7 +16,8 @@ class DealerResource extends JsonResource
{
return [
'lvl' => $this->lvl,
- 'lvl_name'=> $this->lvl_text,
+ 'lvl_icon' => $this->lvl->icon(),
+ 'lvl_name'=> $this->lvl->text(),
'is_sale' => $this->is_sale,
'guanli_values'=> bcdiv($this->calculate_total_amount, '1', 2), //预计管理津贴
'team_sales_value' => $this->team_sales_value, // 团队业绩
diff --git a/app/Endpoint/Api/Http/Resources/Merchant/UserInfoResource.php b/app/Endpoint/Api/Http/Resources/Merchant/UserInfoResource.php
index 8eff3b9d..f59ff200 100644
--- a/app/Endpoint/Api/Http/Resources/Merchant/UserInfoResource.php
+++ b/app/Endpoint/Api/Http/Resources/Merchant/UserInfoResource.php
@@ -23,6 +23,8 @@ class UserInfoResource extends JsonResource
'points' => (int) $this->points,
'quota_v2' => $this->quota_v2,
'quota_v1' => $this->quota_v1,
+ 'agent_level' => $this->agent_level,
+ 'agent_level_icon' => $this->agent_level_icon,
'agent_level_name' => $this->agent_level_name,
];
}
diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php
index cb939393..ee6afac7 100644
--- a/app/Endpoint/Api/routes.php
+++ b/app/Endpoint/Api/routes.php
@@ -10,6 +10,7 @@ use App\Endpoint\Api\Http\Controllers\AfterSaleController;
use App\Endpoint\Api\Http\Controllers\AliOssController;
use App\Endpoint\Api\Http\Controllers\AppVersionController;
use App\Endpoint\Api\Http\Controllers\ArticleController;
+use App\Endpoint\Api\Http\Controllers\Auth;
use App\Endpoint\Api\Http\Controllers\Auth\LoginController;
use App\Endpoint\Api\Http\Controllers\Auth\LogoutController;
use App\Endpoint\Api\Http\Controllers\Auth\RegisterController;
@@ -85,6 +86,15 @@ Route::group([
//获取配置
Route::get('configs', [SettingController::class, 'index']);
+ //三方登录聚合
+ Route::group([
+ 'prefix' =>'socialite',
+ ], function () {
+ Route::post('code-auth/{provider}', [Auth\SocialiteAuthController::class, 'codeAuth']);
+ Route::post('code-bind-user/{provider}', [Auth\SocialiteAuthController::class, 'codeBindUser']);
+ Route::post('unbind-user/{provider}', [Auth\SocialiteAuthController::class, 'unbindUser']);
+ });
+
Route::middleware(['auth:api'])->group(function () {
// 我的信息
Route::get('me', [UserController::class, 'show']);
diff --git a/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php b/app/Endpoint/Callback/Http/Controllers/WxpayController.php
similarity index 83%
rename from app/Endpoint/Callback/Http/Controllers/WeChatPayController.php
rename to app/Endpoint/Callback/Http/Controllers/WxpayController.php
index 336806cf..e22cff92 100644
--- a/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php
+++ b/app/Endpoint/Callback/Http/Controllers/WxpayController.php
@@ -6,25 +6,26 @@ use App\Events\OrderPaid;
use App\Exceptions\BizException;
use App\Models\Order;
use App\Models\OrderRefundLog;
+use App\Services\Payment\WxpayService;
use App\Services\PayService;
-use App\Services\WeChatPayService;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Throwable;
-class WeChatPayController extends Controller
+class WxpayController extends Controller
{
/**
* 支付结果通知
*
- * @param \App\Services\WeChatPayService $weChatPayService
+ * @param string $payment
+ * @param \App\Services\Payment\WxpayService $wxpayService
* @return \Illuminate\Http\Response
*/
- public function paidNotify(WeChatPayService $weChatPayService)
+ public function paidNotify($payment, WxpayService $wxpayService)
{
- return $weChatPayService->handlePaidNotify(function ($message, $fail) {
+ return $wxpayService->payment($payment)->handlePaidNotify(function ($message, $fail) {
$this->log('paid notify', $message);
// 通信失败
@@ -66,12 +67,13 @@ class WeChatPayController extends Controller
/**
* 订单退款结果通知
*
- * @param \App\Services\WeChatPayService $weChatPayService
+ * @param string $payment
+ * @param \App\Services\Payment\WxpayService $wxpayService
* @return \Illuminate\Http\Response
*/
- public function orderRefundedNotify(WeChatPayService $weChatPayService)
+ public function orderRefundedNotify($payment, WxpayService $wxpayService)
{
- return $weChatPayService->handleRefundedNotify(function ($message, $reqInfo, $fail) {
+ return $wxpayService->payment($payment)->handleRefundedNotify(function ($message, $reqInfo, $fail) {
$this->log('refund notify', $reqInfo);
// 通信失败
diff --git a/app/Endpoint/Callback/Http/Controllers/YzkWeChatPayController.php b/app/Endpoint/Callback/Http/Controllers/YzkWeChatPayController.php
deleted file mode 100644
index ca5387d4..00000000
--- a/app/Endpoint/Callback/Http/Controllers/YzkWeChatPayController.php
+++ /dev/null
@@ -1,73 +0,0 @@
-handlePaidNotify(function ($message, $fail) {
- $this->log('paid notify', $message);
-
- // 通信失败
- if (data_get($message, 'return_code') !== 'SUCCESS') {
- return $fail('通信失败');
- }
-
- try {
- DB::transaction(function () use ($message) {
- $payService = new PayService();
-
- if (data_get($message, 'result_code') === 'SUCCESS') {
- return $payService->handleSuccessByPaySerialNumber($message['out_trade_no'], [
- 'out_trade_no' => $message['transaction_id'],
- 'pay_at' => Carbon::parse($message['time_end']),
- ]);
- } elseif (data_get($message, 'result_code') === 'FAIL') {
- return $payService->handleFailedByPaySerialNumber($message['out_trade_no'], [
- 'out_trade_no' => $message['transaction_id'] ?? null,
- 'failed_reason' => '['.$message['err_code'].']'.$message['err_code_des'],
- ]);
- }
- });
- } catch (ModelNotFoundException | BizException $e) {
- } catch (Throwable $e) {
- throw $e;
- }
-
- return true;
- });
- }
-
- /**
- * 微信回调日志
- *
- * @param string $message
- * @param array $context
- * @return void
- */
- protected function log(string $message, array $context = [])
- {
- return Log::build([
- 'driver' => 'daily',
- 'path' => storage_path('logs/yzk-wxpay-notify.log'),
- ])->info($message, $context);
- }
-}
diff --git a/app/Endpoint/Callback/routes.php b/app/Endpoint/Callback/routes.php
index 871c05c5..50d2f0f3 100644
--- a/app/Endpoint/Callback/routes.php
+++ b/app/Endpoint/Callback/routes.php
@@ -2,16 +2,14 @@
use App\Endpoint\Callback\Http\Controllers\AlipayController;
use App\Endpoint\Callback\Http\Controllers\Kuaidi100Controller;
-use App\Endpoint\Callback\Http\Controllers\WeChatPayController;
-use App\Endpoint\Callback\Http\Controllers\YzkWeChatPayController;
+use App\Endpoint\Callback\Http\Controllers\WxpayController;
use Illuminate\Support\Facades\Route;
//快递100物流推送
Route::post('kuaidi100', [Kuaidi100Controller::class, 'notify']);
+
// 微信支付通知
-Route::post('wxpay/paid-notify', [WeChatPayController::class, 'paidNotify'])->name('wxpay.paid_notify');
-Route::post('wxpay/order-refund-notify', [WeChatPayController::class, 'orderRefundedNotify'])->name('wxpay.order_refund_notify');
+Route::post('wxpay/{payment}/paid-notify', [WxpayController::class, 'paidNotify'])->name('wxpay.paid_notify');
+Route::post('wxpay/{payment}/order-refund-notify', [WxpayController::class, 'orderRefundedNotify'])->name('wxpay.order_refund_notify');
Route::post('alipay', AlipayController::class)->name('alipay.notify');
-
-Route::post('yzk-wxpay/paid-notify', [YzkWeChatPayController::class, 'paidNotify'])->name('yzk_wxpay.paid_notify');
diff --git a/app/Endpoint/Wap/routes.php b/app/Endpoint/Wap/routes.php
index 79c6d40b..f4d3fb93 100644
--- a/app/Endpoint/Wap/routes.php
+++ b/app/Endpoint/Wap/routes.php
@@ -5,3 +5,6 @@ use Illuminate\Support\Facades\Route;
//快递100物流推送
Route::get('articles/{id}', [ArticleController::class, 'show']);
+
+// 53 客服
+Route::view('53kf', 'endpoint.kf.index');
diff --git a/app/Enums/DealerLvl.php b/app/Enums/DealerLvl.php
index 9570ce7f..69f8424d 100644
--- a/app/Enums/DealerLvl.php
+++ b/app/Enums/DealerLvl.php
@@ -25,6 +25,18 @@ enum DealerLvl: int {
};
}
+ /**
+ * @return string
+ */
+ public function icon()
+ {
+ return match ($this) {
+ static::Secondary => 'https://cdn.zichunsheng.cn/statics/icons/dealer_lvl_5.png',
+ static::Top => 'https://cdn.zichunsheng.cn/statics/icons/dealer_lvl_6.png',
+ default => '',
+ };
+ }
+
/**
* @return string
*/
@@ -35,8 +47,8 @@ enum DealerLvl: int {
static::Gold => '金牌经销商',
static::Special => '特邀经销商',
static::Contracted => '签约经销商',
- static::Secondary => '二级经销商',
- static::Top => '一级经销商',
+ static::Secondary => '签约经销商II',
+ static::Top => '签约经销商I',
};
}
@@ -50,8 +62,8 @@ enum DealerLvl: int {
static::Gold->value => '金牌经销商',
static::Special->value => '特邀经销商',
static::Contracted->value => '签约经销商',
- static::Secondary->value => '二级经销商',
- static::Top->value => '一级经销商',
+ static::Secondary->value => '签约经销商II',
+ static::Top->value => '签约经销商I',
];
}
}
diff --git a/app/Enums/PayWay.php b/app/Enums/PayWay.php
index 27eab37b..d296c6e9 100644
--- a/app/Enums/PayWay.php
+++ b/app/Enums/PayWay.php
@@ -9,8 +9,8 @@ enum PayWay: string {
// 微信支付
case WxpayApp = 'wxpay_app';
case WxpayH5 = 'wxpay_h5';
- case WxpayJs = 'wxpay_jsapi';
- case WxpayMp = 'wxpay_mini_program';
+ case WxpayJsApi = 'wxpay_jsapi';
+ case WxpayMiniProgram = 'wxpay_mp';
// 阿里支付
case AlipayApp = 'alipay_app';
@@ -20,7 +20,7 @@ enum PayWay: string {
static::Offline => '#5b69bc',
static::Balance => '#dda451',
static::Wallet => '#ff8acc',
- static::WxpayApp, static::WxpayH5, static::WxpayJs, static::WxpayMp => '#21b978',
+ static::WxpayApp, static::WxpayH5, static::WxpayJsApi, static::WxpayMiniProgram => '#21b978',
static::AlipayApp => '#3085d6',
default => '#ea5455',
};
@@ -32,7 +32,7 @@ enum PayWay: string {
static::Offline => 'offline',
static::Balance => 'balance',
static::Wallet => 'wallet',
- static::WxpayApp, static::WxpayH5, static::WxpayJs, static::WxpayMp => 'wxpay',
+ static::WxpayApp, static::WxpayH5, static::WxpayJsApi, static::WxpayMiniProgram => 'wxpay',
static::AlipayApp => 'alipay',
};
}
@@ -43,7 +43,7 @@ enum PayWay: string {
static::Offline => '线下',
static::Balance => '余额',
static::Wallet => '可提',
- static::WxpayApp, static::WxpayH5, static::WxpayJs, static::WxpayMp => '微信支付',
+ static::WxpayApp, static::WxpayH5, static::WxpayJsApi, static::WxpayMiniProgram => '微信支付',
static::AlipayApp => '支付宝',
default => 'Unknown',
};
@@ -58,4 +58,16 @@ enum PayWay: string {
default => 'Unknown',
};
}
+
+ /**
+ * @return string
+ */
+ public static function dealerOrderTexts(): array
+ {
+ return [
+ static::Offline->value => '线下打款',
+ static::Wallet->value => '余额支付',
+ static::WxpayH5->value => '微信支付',
+ ];
+ }
}
diff --git a/app/Enums/SocialiteType.php b/app/Enums/SocialiteType.php
new file mode 100644
index 00000000..e404f5f2
--- /dev/null
+++ b/app/Enums/SocialiteType.php
@@ -0,0 +1,7 @@
+ static::App,
PayWay::WxpayH5 => static::H5,
- PayWay::WxpayJs, PayWay::WxpayMp => static::JSAPI,
+ PayWay::WxpayJsApi, PayWay::WxpayMiniProgram => static::JSAPI,
default => null,
};
}
diff --git a/app/Models/PayLog.php b/app/Models/PayLog.php
index 3f0b269e..8d4bda76 100644
--- a/app/Models/PayLog.php
+++ b/app/Models/PayLog.php
@@ -66,9 +66,9 @@ class PayLog extends Model
{
return in_array($this->pay_way, [
PayWay::WxpayApp,
- PayWay::WxpayJs,
+ PayWay::WxpayJsApi,
PayWay::WxpayH5,
- PayWay::WxpayMp,
+ PayWay::WxpayMiniProgram,
]);
}
diff --git a/app/Models/QuotaV1Log.php b/app/Models/QuotaV1Log.php
new file mode 100644
index 00000000..6271df3d
--- /dev/null
+++ b/app/Models/QuotaV1Log.php
@@ -0,0 +1,14 @@
+belongsTo(User::class);
+ }
}
diff --git a/app/Models/SocialiteUser.php b/app/Models/SocialiteUser.php
new file mode 100644
index 00000000..3c030195
--- /dev/null
+++ b/app/Models/SocialiteUser.php
@@ -0,0 +1,22 @@
+belongsTo(User::class);
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
index 0a0b16dd..fe8e0d74 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -224,6 +224,11 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
return $this->hasMany(DealerUserProductLog::class, 'user_id');
}
+ public function socialites()
+ {
+ return $this->hasMany(SocialiteUser::class, 'user_id');
+ }
+
/**
* 确认此用户是否是 VIP
*
diff --git a/app/Models/UserInfo.php b/app/Models/UserInfo.php
index 425f166e..7e443486 100644
--- a/app/Models/UserInfo.php
+++ b/app/Models/UserInfo.php
@@ -116,13 +116,26 @@ class UserInfo extends Model
*/
public static $agentLevelTexts = [
self::AGENT_LEVEL_CIVILIAN => '粉丝',
- self::AGENT_LEVEL_VIP => '店铺',
- self::AGENT_LEVEL_COMMUNITY => '社区',
- self::AGENT_LEVEL_DISTRICT => '区级',
- self::AGENT_LEVEL_CITY => '市级',
- self::AGENT_LEVEL_PROVINCE => '省级',
- self::AGENT_LEVEL_BRANCH => '分公司',
- self::AGENT_LEVEL_DIRECTOR => '董事',
+ self::AGENT_LEVEL_VIP => '会员',
+ self::AGENT_LEVEL_COMMUNITY => '铁牌会员',
+ self::AGENT_LEVEL_DISTRICT => '铜牌会员',
+ self::AGENT_LEVEL_CITY => '银牌会员',
+ self::AGENT_LEVEL_PROVINCE => '金牌会员',
+ self::AGENT_LEVEL_BRANCH => '钻石会员',
+ self::AGENT_LEVEL_DIRECTOR => '默认用户',
+ ];
+
+ /**
+ * 代理等级图标
+ *
+ * @var array
+ */
+ public static $agentLevelIcons = [
+ self::AGENT_LEVEL_COMMUNITY => 'https://cdn.zichunsheng.cn/statics/icons/lvl_2.png',
+ self::AGENT_LEVEL_DISTRICT => 'https://cdn.zichunsheng.cn/statics/icons/lvl_3.png',
+ self::AGENT_LEVEL_CITY => 'https://cdn.zichunsheng.cn/statics/icons/lvl_4.png',
+ self::AGENT_LEVEL_PROVINCE => 'https://cdn.zichunsheng.cn/statics/icons/lvl_5.png',
+ self::AGENT_LEVEL_BRANCH => 'https://cdn.zichunsheng.cn/statics/icons/lvl_6.png',
];
/**
@@ -458,6 +471,11 @@ class UserInfo extends Model
return static::$agentLevelTexts[$this->agent_level] ?? '未知';
}
+ public function getAgentLevelIconAttribute(): string
+ {
+ return static::$agentLevelIcons[$this->agent_level] ?? '';
+ }
+
/**
* 获取完整的邀请路径
*
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index fd94ce88..be546720 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -9,6 +9,7 @@ use EasyWeChat\Payment\Application as EasyWeChatPaymentApplication;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use Overtrue\EasySms\EasySms;
use Symfony\Component\HttpFoundation\HeaderUtils;
diff --git a/app/Providers/Socialite/WechatMini.php b/app/Providers/Socialite/WechatMini.php
new file mode 100644
index 00000000..16da36cd
--- /dev/null
+++ b/app/Providers/Socialite/WechatMini.php
@@ -0,0 +1,76 @@
+ $this->config->get('client_id'),
+ 'secret' => $this->config->get('client_secret'),
+
+ // 下面为可选项
+ // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+ 'response_type' => 'array',
+
+ 'log' => [
+ 'level' => 'debug',
+ 'file' => storage_path('logs/wechat-mini.log'),
+ ],
+ ]);
+ $result = $app->auth->session($code);
+ if ($result) {
+ if (data_get($result, 'errcode')) {
+ throw new BizException(data_get($result, 'errmsg'));
+ }
+ //缓存微信小程序会话密钥(48小时)
+ Cache::put($result['openid'], $result['session_key'], 48 * 60 * 60);
+
+ return $this->mapUserToObject([
+ 'openid'=>$result['openid'],
+ // 'unionid'=>$result['unionid'],
+ ]);
+ } else {
+ throw new BizException('解析失败');
+ }
+ }
+
+ protected function getAuthUrl(): string
+ {
+ return '';
+ }
+
+ protected function getTokenUrl(): string
+ {
+ return '';
+ }
+
+ protected function getUserByToken(string $token): array
+ {
+ return [];
+ }
+
+ protected function mapUserToObject(array $user): User
+ {
+ return new User([
+ 'id' => $user['openid'] ?? null,
+ 'name' => $user['nickname'] ?? null,
+ 'nickname' => $user['nickname'] ?? null,
+ 'avatar' => $user['headimgurl'] ?? null,
+ 'email' => null,
+ ]);
+ }
+}
diff --git a/app/Services/Dealer/OrderService.php b/app/Services/Dealer/OrderService.php
index 4ddbba4c..558b586e 100644
--- a/app/Services/Dealer/OrderService.php
+++ b/app/Services/Dealer/OrderService.php
@@ -15,9 +15,8 @@ use App\Models\DealerProduct;
use App\Models\DealerUserProductLog;
use App\Models\ShippingAddress;
use App\Models\User;
+use App\Services\Payment\WxpayService;
use App\Services\PayService;
-use App\Services\WeChatPayService;
-use EasyWeChat\Factory as EasyWeChatFactory;
use Illuminate\Database\QueryException;
class OrderService
@@ -351,15 +350,15 @@ class OrderService
throw new BizException('支付方式 非法');
}
- $app = EasyWeChatFactory::payment(config('wechat.payment.yzk'));
-
- $data = (new WeChatPayService($app))->pay([
+ $params = [
'body' => app_settings('app.app_name').'-批零订单',
'out_trade_no' => $payLog->pay_sn,
'total_fee' => bcmul($order->total_amount, '100'),
'trade_type' => $tradeType->value,
- 'notify_url' => url(route('yzk_wxpay.paid_notify', [], false), [], true),
- ]);
+ ];
+
+ $data = (new WxpayService())->pay($params, 'yzk_h5');
+
break;
default:
diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php
index 58bcb29c..99fa04cf 100644
--- a/app/Services/OrderService.php
+++ b/app/Services/OrderService.php
@@ -6,6 +6,7 @@ use App\Endpoint\Api\Http\Resources\ProductSkuSimpleResource;
use App\Endpoint\Api\Http\Resources\ShippingAddressResource;
use App\Endpoint\Api\Http\Resources\UserCouponResource;
use App\Enums\PayWay;
+use App\Enums\SocialiteType;
use App\Enums\WxpayTradeType;
use App\Exceptions\BizException;
use App\Exceptions\ShippingNotSupportedException;
@@ -15,8 +16,10 @@ use App\Models\OrderProduct;
use App\Models\ProductGift;
use App\Models\ProductSku;
use App\Models\ShippingAddress;
+use App\Models\SocialiteUser;
use App\Models\User;
use App\Models\UserCoupon;
+use App\Services\Payment\WxpayService;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
@@ -796,18 +799,40 @@ class OrderService
throw new BizException('支付方式 非法');
}
- $data = (new WeChatPayService())->pay([
+ $params = [
'body' => app_settings('app.app_name').'-商城订单',
'out_trade_no' => $payLog->pay_sn,
'total_fee' => $order->total_amount,
'trade_type' => $tradeType->value,
- ]);
+ ];
+
+ if ($tradeType === WxpayTradeType::JSAPI) {
+ $socialite = match ($payLog->pay_way) {
+ PayWay::WxpayMiniProgram => SocialiteUser::where([
+ 'user_id' => $order->user_id,
+ 'socialite_type' => SocialiteType::WechatMiniProgram,
+ ])->first(),
+ };
+
+ if ($socialite === null) {
+ throw new BizException('未绑定微信小程序');
+ }
+
+ $params['openid'] = $socialite->socialite_id;
+ }
+
+ $data = (new WxpayService())->pay($params, match ($payLog->pay_way) {
+ PayWay::WxpayMiniProgram => 'mini_program',
+ default => 'default',
+ });
} elseif ($payLog->isAlipay()) {
- $data = app(AlipayService::class)->pay([
+ $params = [
'subject' => app_settings('app.app_name').'-商城订单',
'out_trade_no' => $payLog->pay_sn,
'total_amount' => bcdiv($order->total_amount, 100, 2),
- ]);
+ ];
+
+ $data = app(AlipayService::class)->pay($params);
}
return [
diff --git a/app/Services/Payment/WxpayService.php b/app/Services/Payment/WxpayService.php
new file mode 100644
index 00000000..7b6de61f
--- /dev/null
+++ b/app/Services/Payment/WxpayService.php
@@ -0,0 +1,149 @@
+
+ */
+ protected $payments = [];
+
+ /**
+ * 支付
+ *
+ * @param array $params
+ * @param string|null $payment
+ * @return array
+ */
+ public function pay(array $params, ?string $payment = null): array
+ {
+ if (! isset($params['notify_url'])) {
+ $path = route('wxpay.paid_notify', ['payment' => $payment ?: 'default'], false);
+
+ $params['notify_url'] = url($path, [], true);
+ }
+
+ if (! isset($params['trade_type'])) {
+ $params['trade_type'] = WxpayTradeType::App->value;
+ }
+
+ $app = $this->payment($payment);
+
+ $result = $app->order->unify($params);
+
+ $this->validateResult($result, $params);
+
+ return match ($params['trade_type']) {
+ WxpayTradeType::App->value => $app->jssdk->appConfig($result['prepay_id']),
+ WxpayTradeType::H5->value => Arr::only($result, ['mweb_url']),
+ default => $app->jssdk->bridgeConfig($result['prepay_id'], false),
+ };
+ }
+
+ /**
+ * 根据商户订单号退款
+ *
+ * @param string $number
+ * @param string $refundNumber
+ * @param int $totalFee
+ * @param int $refundFee
+ * @param array $optional
+ * @return array
+ */
+ public function refundByOutTradeNumber(array $params, ?string $payment = null)
+ {
+ $optional = Arr::get($params, 'optional', []);
+
+ if (! is_array($optional)) {
+ $optional = [];
+ }
+
+ if (! isset($optional['notify_url'])) {
+ $path = route('wxpay.order_refund_notify', [
+ 'payment' => $payment ?: 'default',
+ ], false);
+
+ $optional['notify_url'] = url($path, [], true);
+ }
+
+ $result = $this->payment($payment)->refund->byOutTradeNumber(
+ $params['number'],
+ $params['refund_number'],
+ $params['total_fee'],
+ $params['refund_fee'],
+ $optional,
+ );
+
+ $this->validateResult($result, $params);
+
+ return $result;
+ }
+
+ /**
+ * @param string|null $name
+ * @return \EasyWeChat\Payment\Application
+ */
+ public function payment(?string $name = null): Application
+ {
+ $name = $name ?: 'default';
+
+ return $this->payments[$name] = $this->get($name);
+ }
+
+ /**
+ * @param string $name
+ * @return \EasyWeChat\Payment\Application
+ */
+ protected function get(string $name): Application
+ {
+ return $this->payments[$name] ?? $this->resolve($name);
+ }
+
+ /**
+ * @param string $name
+ * @return \EasyWeChat\Payment\Application
+ *
+ * @throws \App\Exceptions\WeChatPayException
+ */
+ protected function resolve(string $name): Application
+ {
+ $config = config("wechat.payment.{$name}");
+
+ if (empty($config)) {
+ throw new WeChatPayException("支付 [{$name}] 配置未找到");
+ }
+
+ return Factory::payment($config);
+ }
+
+ /**
+ * 校验响应结果
+ *
+ * @param array $result
+ * @param array $raw
+ * @return void
+ *
+ * @throws \App\Exceptions\WeChatPayException
+ */
+ protected function validateResult(array $result, array $raw = [])
+ {
+ if (Arr::get($result, 'return_code') !== 'SUCCESS') {
+ throw new WeChatPayException(Arr::get($result, 'return_msg', '请求失败'), $raw);
+ }
+
+ if (Arr::get($result, 'result_code') !== 'SUCCESS') {
+ throw new WeChatPayException(sprintf(
+ '[%s] %s',
+ Arr::get($result, 'err_code', '-1'),
+ Arr::get($result, 'err_code_des', '交易失败')
+ ), $raw);
+ }
+ }
+}
diff --git a/app/Services/QuotaV1Service.php b/app/Services/QuotaV1Service.php
new file mode 100644
index 00000000..afab09a4
--- /dev/null
+++ b/app/Services/QuotaV1Service.php
@@ -0,0 +1,57 @@
+userInfo()->lockForUpdate()->first();
+
+ if ($userInfo === null) {
+ throw new BizException('系统错误');
+ }
+
+ // 变更前余额
+ $beforeBalance = $userInfo->quota_v1;
+ $_changeBalance = abs($changeBalance);
+
+ if ($changeBalance > 0) {
+ // 收入
+ $user->userInfo()->increment('quota_v1', $_changeBalance);
+ } else {
+ // 支出
+ if ($userInfo->quota_v1 < $_changeBalance) {
+ throw new BizException('老配额不足');
+ }
+
+ $user->userInfo()->decrement('quota_v1', $_changeBalance);
+ }
+
+ $user->walletLogs()->create([
+ 'loggable_id' => $loggable?->id,
+ 'loggable_type' => $loggable?->getMorphClass(),
+ 'before_balance' => $beforeBalance,
+ 'change_balance' => $changeBalance,
+ 'action' => $action,
+ 'remarks' => $remarks,
+ ]);
+ }
+}
diff --git a/app/Services/WeChatPayService.php b/app/Services/WeChatPayService.php
deleted file mode 100644
index 978432d1..00000000
--- a/app/Services/WeChatPayService.php
+++ /dev/null
@@ -1,172 +0,0 @@
-app = $app;
- }
-
- /**
- * 支付
- *
- * @param array $params
- * @return array
- *
- * @throws \App\Exceptions\WeChatPayException
- */
- public function pay(array $params)
- {
- if (! isset($params['notify_url'])) {
- $params['notify_url'] = url(route('wxpay.paid_notify', [], false), [], true);
- }
-
- // 如果交易类型不存在,则使用 App 支付
- if (! isset($params['trade_type'])) {
- $params['trade_type'] = static::TRADE_TYPE_APP;
- }
-
- $result = $this->app->order->unify($params);
-
- if (data_get($result, 'return_code') !== 'SUCCESS') {
- throw new WeChatPayException(
- data_get($result, 'return_msg', '请求失败'),
- $params
- );
- }
-
- if (data_get($result, 'result_code') !== 'SUCCESS') {
- throw new WeChatPayException(
- sprintf(
- '[%s] %s',
- data_get($result, 'err_code', '-1'),
- data_get($result, 'err_code_des', '交易失败')
- ),
- $params
- );
- }
-
- return match ($params['trade_type']) {
- static::TRADE_TYPE_APP => $this->app->jssdk->appConfig($result['prepay_id']),
- static::TRADE_TYPE_H5 => Arr::only($result, ['mweb_url']),
- default => $this->app->jssdk->bridgeConfig($result['prepay_id'], false),
- };
- }
-
- /**
- * 支付结果通知
- *
- * @param \Closure $closure
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function handlePaidNotify(Closure $closure)
- {
- return $this->app->handlePaidNotify($closure);
- }
-
- /**
- * 根据微信订单号退款
- *
- * @param string $transactionId
- * @param string $refundNumber
- * @param int $totalFee
- * @param int $refundFee
- * @param array $optional
- * @return array
- */
- public function refundByTransactionId(string $transactionId, string $refundNumber, int $totalFee, int $refundFee, array $optional = [])
- {
- $result = $this->app->refund->byTransactionId($transactionId, $refundNumber, $totalFee, $refundFee, $optional);
-
- if (data_get($result, 'return_code') !== 'SUCCESS') {
- throw new WeChatPayException(
- data_get($result, 'return_msg', '请求失败')
- );
- }
-
- if (data_get($result, 'result_code') !== 'SUCCESS') {
- throw new WeChatPayException(
- sprintf(
- '[%s] %s',
- data_get($result, 'err_code', '-1'),
- data_get($result, 'err_code_des', '退款失败')
- )
- );
- }
-
- return $result;
- }
-
- /**
- * 根据商户订单号退款
- *
- * @param string $number
- * @param string $refundNumber
- * @param int $totalFee
- * @param int $refundFee
- * @param array $optional
- * @return array
- */
- public function refundByOutTradeNumber(string $number, string $refundNumber, int $totalFee, int $refundFee, array $optional = [])
- {
- $result = $this->app->refund->byOutTradeNumber($number, $refundNumber, $totalFee, $refundFee, $optional);
-
- if (data_get($result, 'return_code') !== 'SUCCESS') {
- throw new WeChatPayException(
- data_get($result, 'return_msg', '请求失败')
- );
- }
-
- if (data_get($result, 'result_code') !== 'SUCCESS') {
- throw new WeChatPayException(
- sprintf(
- '[%s] %s',
- data_get($result, 'err_code', '-1'),
- data_get($result, 'err_code_des', '退款失败')
- )
- );
- }
-
- return $result;
- }
-
- /**
- * 退款结果通知
- *
- * @param \Closure $closure
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function handleRefundedNotify(Closure $closure)
- {
- return $this->app->handleRefundedNotify($closure);
- }
-}
diff --git a/composer.json b/composer.json
index e0a990dd..d831fe6c 100644
--- a/composer.json
+++ b/composer.json
@@ -26,6 +26,7 @@
"laravel/sanctum": "^2.12",
"laravel/tinker": "^2.5",
"overtrue/easy-sms": "^2.0",
+ "overtrue/socialite": "*",
"simplesoftwareio/simple-qrcode": "^4.2",
"tucker-eric/eloquentfilter": "^3.0",
"w7corp/easywechat": "^5.10"
diff --git a/composer.lock b/composer.lock
index 0a534fbe..ef988496 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "f53d3bea81e27c131da9f29019c886a1",
+ "content-hash": "5ea856539b7c9cb2093859052437846e",
"packages": [
{
"name": "adbario/php-dot-notation",
diff --git a/config/socialite.php b/config/socialite.php
new file mode 100644
index 00000000..5f5739f0
--- /dev/null
+++ b/config/socialite.php
@@ -0,0 +1,12 @@
+[
+ 'provider' => WechatMini::class,
+ 'client_id' => env('WECHAT_MINI_PROGRAM_APPID', ''),
+ 'client_secret' => env('WECHAT_MINI_PROGRAM_SECRET', ''),
+ 'redirect' =>'',
+ ],
+];
diff --git a/config/wechat.php b/config/wechat.php
index 6cb7b26d..60af8281 100644
--- a/config/wechat.php
+++ b/config/wechat.php
@@ -1,7 +1,56 @@
[
+ 'default' => [
+ 'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'), // AppID
+ 'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'), // AppSecret
+ 'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'), // Token
+ 'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''), // EncodingAESKey
+
+ /*
+ * OAuth 配置
+ *
+ * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
+ * callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)
+ * enforce_https:是否强制使用 HTTPS 跳转
+ */
+ 'oauth' => [
+ 'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),
+ 'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
+ 'enforce_https' => true,
+ ],
+ ],
+ ],
+
+ /*
+ * 开放平台第三方平台
+ */
+ // 'open_platform' => [
+ // 'default' => [
+ // 'app_id' => env('WECHAT_OPEN_PLATFORM_APPID', ''),
+ // 'secret' => env('WECHAT_OPEN_PLATFORM_SECRET', ''),
+ // 'token' => env('WECHAT_OPEN_PLATFORM_TOKEN', ''),
+ // 'aes_key' => env('WECHAT_OPEN_PLATFORM_AES_KEY', ''),
+ // ],
+ // ],
+
+ /*
+ * 小程序
+ */
+ 'mini_program' => [
+ 'default' => [
+ 'app_id' => env('WECHAT_MINI_PROGRAM_APPID', ''),
+ 'secret' => env('WECHAT_MINI_PROGRAM_SECRET', ''),
+ 'token' => env('WECHAT_MINI_PROGRAM_TOKEN', ''),
+ 'aes_key' => env('WECHAT_MINI_PROGRAM_AES_KEY', ''),
+ ],
+ ],
'payment' => [
+ // 商城 - 微信 App支付
'default' => [
'sandbox' => env('WECHAT_PAYMENT_SANDBOX', false),
'app_id' => env('WECHAT_PAYMENT_APPID'),
@@ -23,7 +72,29 @@ return [
],
],
],
- 'yzk' => [
+ // 商城 - 微信小程序支付
+ 'mini_program' => [
+ 'sandbox' => env('WECHAT_PAYMENT_SANDBOX', false),
+ 'app_id' => env('WECHAT_MINI_PROGRAM_APPID'),
+ 'mch_id' => env('WECHAT_PAYMENT_MCH_ID'),
+ 'key' => env('WECHAT_PAYMENT_KEY'),
+ 'cert_path' => env('WECHAT_PAYMENT_CERT_PATH'), // 绝对地址
+ 'key_path' => env('WECHAT_PAYMENT_KEY_PATH'), // 绝对地址
+ 'notify_url' => env('WECHAT_PAYMENT_NOTIFY_URL'),
+
+ // 日志
+ 'log' => [
+ 'default' => 'daily',
+ 'channels' => [
+ 'daily' => [
+ 'driver' => 'daily',
+ 'path' => storage_path('logs/wxpay-mini-program.log'),
+ 'level' => 'info',
+ ],
+ ],
+ ],
+ ],
+ 'yzk_h5' => [
'sandbox' => env('WECHAT_PAYMENT_SANDBOX_YZK', false),
'app_id' => env('WECHAT_PAYMENT_APPID_YZK'),
'mch_id' => env('WECHAT_PAYMENT_MCH_ID_YZK'),
diff --git a/database/migrations/2022_02_22_142257_create_socialite_users_table.php b/database/migrations/2022_02_22_142257_create_socialite_users_table.php
new file mode 100644
index 00000000..d28a02fc
--- /dev/null
+++ b/database/migrations/2022_02_22_142257_create_socialite_users_table.php
@@ -0,0 +1,37 @@
+id();
+ $table->string('socialite_type')->comment('平台');
+ $table->string('socialite_id')->comment('三方唯一ID');
+ $table->unsignedBigInteger('user_id')->nullable()->comment('绑定的用户ID');
+ $table->timestamps();
+
+ $table->index(['socialite_type', 'socialite_id']);
+ $table->index('user_id');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('socialite_users');
+ }
+}
diff --git a/database/migrations/2022_02_28_161649_create_quota_v1_logs_table.php b/database/migrations/2022_02_28_161649_create_quota_v1_logs_table.php
new file mode 100644
index 00000000..2f14c0f9
--- /dev/null
+++ b/database/migrations/2022_02_28_161649_create_quota_v1_logs_table.php
@@ -0,0 +1,39 @@
+id();
+ $table->unsignedBigInteger('user_id')->comment('用户ID');
+ $table->nullableMorphs('loggable');
+ $table->tinyInteger('action')->comment('操作类型');
+ $table->unsignedDecimal('before_balance')->default(0)->comment('变更前的余额');
+ $table->unsignedDecimal('change_balance', 12, 3)->default(0)->comment('变动余额');
+ $table->string('remarks')->nullable()->comment('备注');
+ $table->timestamps();
+
+ $table->index('user_id');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('quota_v1_logs');
+ }
+}
diff --git a/database/seeders/AdAddressSeeder.php b/database/seeders/AdAddressSeeder.php
index 9e01f826..fc5ce97e 100644
--- a/database/seeders/AdAddressSeeder.php
+++ b/database/seeders/AdAddressSeeder.php
@@ -60,11 +60,6 @@ class AdAddressSeeder extends Seeder
'dimensions'=> '',
'is_show' => true,
],
- 'app_start_page_banner'=>[
- 'name' => 'APP启动页广告位',
- 'dimensions'=> '',
- 'is_show' => true,
- ],
'vip_will_cheap_banner'=> [
'name' => '会员就是省',
'dimensions'=> '710*382',
@@ -90,11 +85,6 @@ class AdAddressSeeder extends Seeder
'dimensions'=> '600*700',
'is_show' => true,
],
- 'merchant_notice'=>[
- 'name' =>'商户公告弹窗',
- 'dimensions'=> '600*700',
- 'is_show'=> true,
- ],
'article_banner'=>[
'name' =>'文章广告位',
'dimensions'=> '',
@@ -105,36 +95,136 @@ class AdAddressSeeder extends Seeder
'dimensions'=> '750*524',
'is_show'=> true,
],
- 'mall_notice'=>[
- 'name' =>'商城公告广告位',
- 'dimensions'=> '600*700',
- 'is_show'=> true,
- ],
- 'merchant_notice'=>[
- 'name' =>'商户公告广告位',
- 'dimensions'=> '600*700',
- 'is_show'=> true,
- ],
'homepage_popup'=>[
'name' =>'首页弹窗广告位',
'dimensions'=> '608*735',
'is_show'=> true,
],
- 'wholesale_homepage_banner'=>[
- 'name' =>'批零首页广告位',
- 'dimensions'=> '750*550',
- 'is_show'=> true,
- ],
'vip_coupon_bottom_banner'=>[
'name' =>'VIP优惠券底部广告位',
'dimensions'=> '213*246',
'is_show'=> true,
],
+
+ /** 商城小程序广告位 start **/
+ 'wechat_mini_top_navigation_banner' => [
+ 'name' => '【小程序】首页顶部导航',
+ 'dimensions'=> '50*50',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_floor_banner' => [
+ 'name' => '【小程序】首页楼层广告位',
+ 'dimensions'=> '710*220',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_recommend_banner' => [
+ 'name' => '【小程序】首页精品推荐广告位',
+ 'dimensions'=> '670*260',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_top_banner' => [
+ 'name' => '【小程序】首页顶部广告位',
+ 'dimensions'=> '750*450',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_vip_banner' => [
+ 'name' => '【小程序】VIP会员积分权益',
+ 'dimensions'=> '710*196',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_vip_award_banner' => [
+ 'name' => '【小程序】VIP会员推广奖励',
+ 'dimensions'=> '226*289',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_vip_car_banner' => [
+ 'name' => '【小程序】VIP直通车广告位',
+ 'dimensions'=> '375*200',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_share_register_banner' => [
+ 'name' => '【小程序】分享注册位',
+ 'dimensions'=> '',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_share_download_banner' => [
+ 'name' => '【小程序】分享下载位',
+ 'dimensions'=> '',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_vip_will_cheap_banner'=> [
+ 'name' => '【小程序】会员就是省',
+ 'dimensions'=> '710*382',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_vip_award_bottom_banner'=> [
+ 'name' => '【小程序】会员推广奖励底部广告位',
+ 'dimensions'=> '470*202',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_show_vip_banner'=> [
+ 'name' => '【小程序】查看会员权益广告位',
+ 'dimensions'=> '710*382',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_become_vip_banner'=> [
+ 'name' => '【小程序】成为会员广告位',
+ 'dimensions'=> '710*382',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_mall_notice'=>[
+ 'name' => '【小程序】商城公告弹窗',
+ 'dimensions'=> '600*700',
+ 'is_show' => true,
+ ],
+ 'wechat_mini_article_banner'=>[
+ 'name' =>'【小程序】文章广告位',
+ 'dimensions'=> '',
+ 'is_show'=> true,
+ ],
+ 'wechat_mini_vip_coupon_banner'=>[
+ 'name' =>'【小程序】会员优惠券广告位',
+ 'dimensions'=> '750*524',
+ 'is_show'=> true,
+ ],
+ 'wechat_mini_homepage_popup'=>[
+ 'name' =>'【小程序】首页弹窗广告位',
+ 'dimensions'=> '608*735',
+ 'is_show'=> true,
+ ],
+ 'wechat_mini_vip_coupon_bottom_banner'=>[
+ 'name' =>'【小程序】VIP优惠券底部广告位',
+ 'dimensions'=> '213*246',
+ 'is_show'=> true,
+ ],
+ /** 商城小程序广告位 end **/
+
+ //商城APP端广告位
+ 'app_start_page_banner'=>[
+ 'name' => 'APP启动页广告位',
+ 'dimensions'=> '',
+ 'is_show' => true,
+ ],
+ /** 商户特殊广告位 start **/
+ 'merchant_notice'=>[
+ 'name' =>'商户公告广告位',
+ 'dimensions'=> '600*700',
+ 'is_show'=> true,
+ ],
'merchant_top_navigation_banner'=>[
'name' =>'商户端首页顶部导航',
'dimensions'=> '58*58',
'is_show' =>true,
],
+ /** 商户特殊广告位 end **/
+
+ /** 批零特殊广告位 start **/
+ 'wholesale_homepage_banner'=>[
+ 'name' =>'批零首页广告位',
+ 'dimensions'=> '750*550',
+ 'is_show'=> true,
+ ],
+ /** 批零特殊广告位 end **/
] as $key => $values) {
AdAddress::firstOrCreate(['key' => $key], $values);
}
diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php
index 54fdfa66..8e6103e6 100644
--- a/database/seeders/AdminPermissionSeeder.php
+++ b/database/seeders/AdminPermissionSeeder.php
@@ -305,6 +305,8 @@ class AdminPermissionSeeder extends Seeder
'curd' => ['index', 'create', 'store', 'edit', 'update', 'destroy'],
'children' => [
'log_list'=>['name' =>'分红记录'],
+ 'recharge'=>['name' =>'增加配额'],
+ 'deduction'=>['name' =>'扣减配额'],
],
],
'dealers' =>[
diff --git a/dcat_admin_ide_helper.php b/dcat_admin_ide_helper.php
index 6bc8486a..a2d41b6c 100644
--- a/dcat_admin_ide_helper.php
+++ b/dcat_admin_ide_helper.php
@@ -11,6 +11,7 @@ namespace Dcat\Admin {
use Illuminate\Support\Collection;
/**
+ * @property Grid\Column|Collection width
* @property Grid\Column|Collection created_at
* @property Grid\Column|Collection dimensions
* @property Grid\Column|Collection id
@@ -18,13 +19,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection key
* @property Grid\Column|Collection name
* @property Grid\Column|Collection updated_at
- * @property Grid\Column|Collection address
- * @property Grid\Column|Collection consignee
- * @property Grid\Column|Collection is_default
- * @property Grid\Column|Collection telephone
- * @property Grid\Column|Collection user_id
- * @property Grid\Column|Collection zone
- * @property Grid\Column|Collection zone_id
* @property Grid\Column|Collection detail
* @property Grid\Column|Collection type
* @property Grid\Column|Collection version
@@ -40,6 +34,7 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection http_path
* @property Grid\Column|Collection slug
* @property Grid\Column|Collection role_id
+ * @property Grid\Column|Collection user_id
* @property Grid\Column|Collection value
* @property Grid\Column|Collection avatar
* @property Grid\Column|Collection password
@@ -64,6 +59,7 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection tracking_number
* @property Grid\Column|Collection before_agent_level
* @property Grid\Column|Collection change_agent_level
+ * @property Grid\Column|Collection remark
* @property Grid\Column|Collection apk_link
* @property Grid\Column|Collection cate
* @property Grid\Column|Collection context
@@ -96,9 +92,10 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection continue_click_times
* @property Grid\Column|Collection last_click_at
* @property Grid\Column|Collection coupon_id
+ * @property Grid\Column|Collection is_enable
* @property Grid\Column|Collection ranges
- * @property Grid\Column|Collection status
* @property Grid\Column|Collection administrator_id
+ * @property Grid\Column|Collection status
* @property Grid\Column|Collection task_id
* @property Grid\Column|Collection limit
* @property Grid\Column|Collection sent
@@ -109,20 +106,20 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection use_start_at
* @property Grid\Column|Collection lvl
* @property Grid\Column|Collection order_completed_at
- * @property Grid\Column|Collection remark
* @property Grid\Column|Collection total_amount
* @property Grid\Column|Collection earningable_id
* @property Grid\Column|Collection earningable_type
* @property Grid\Column|Collection fee
* @property Grid\Column|Collection fee_rate
- * @property Grid\Column|Collection is_manager
* @property Grid\Column|Collection pay_at
* @property Grid\Column|Collection pay_image
* @property Grid\Column|Collection pay_info
+ * @property Grid\Column|Collection pay_way
* @property Grid\Column|Collection payer_id
* @property Grid\Column|Collection settle_at
* @property Grid\Column|Collection total_earnings
* @property Grid\Column|Collection end_at
+ * @property Grid\Column|Collection is_manager
* @property Grid\Column|Collection is_settle
* @property Grid\Column|Collection real_amount
* @property Grid\Column|Collection start_at
@@ -133,13 +130,16 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection price
* @property Grid\Column|Collection qty
* @property Grid\Column|Collection sale_price
+ * @property Grid\Column|Collection reason
* @property Grid\Column|Collection allocated_at
* @property Grid\Column|Collection consignee_address
* @property Grid\Column|Collection consignee_name
* @property Grid\Column|Collection consignee_telephone
* @property Grid\Column|Collection consignee_zone
* @property Grid\Column|Collection consignor_id
+ * @property Grid\Column|Collection out_trade_no
* @property Grid\Column|Collection paied_time
+ * @property Grid\Column|Collection pay_sn
* @property Grid\Column|Collection pay_time
* @property Grid\Column|Collection settle_state
* @property Grid\Column|Collection shipping_time
@@ -160,8 +160,12 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection change_from_purchase_subsidy_id
* @property Grid\Column|Collection purchase_subsidy_id
* @property Grid\Column|Collection change_sales_value
+ * @property Grid\Column|Collection dealer_price
+ * @property Grid\Column|Collection quantity
+ * @property Grid\Column|Collection sell_price
* @property Grid\Column|Collection before_lvl
* @property Grid\Column|Collection change_lvl
+ * @property Grid\Column|Collection revoke_id
* @property Grid\Column|Collection account_amount
* @property Grid\Column|Collection rate
* @property Grid\Column|Collection service_amount
@@ -187,7 +191,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection queue
* @property Grid\Column|Collection uuid
* @property Grid\Column|Collection job_id
- * @property Grid\Column|Collection reason
* @property Grid\Column|Collection fails
* @property Grid\Column|Collection file
* @property Grid\Column|Collection success
@@ -197,7 +200,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection is_push
* @property Grid\Column|Collection message_id
* @property Grid\Column|Collection order_package_id
- * @property Grid\Column|Collection quantity
* @property Grid\Column|Collection checked_at
* @property Grid\Column|Collection is_failed
* @property Grid\Column|Collection last_news
@@ -210,7 +212,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection gift_for_sku_id
* @property Grid\Column|Collection reduced_amount
* @property Grid\Column|Collection remain_quantity
- * @property Grid\Column|Collection sell_price
* @property Grid\Column|Collection sku_id
* @property Grid\Column|Collection specs
* @property Grid\Column|Collection spu_id
@@ -220,10 +221,8 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection max
* @property Grid\Column|Collection auto_complete_at
* @property Grid\Column|Collection is_change
+ * @property Grid\Column|Collection is_settlable
* @property Grid\Column|Collection note
- * @property Grid\Column|Collection out_trade_no
- * @property Grid\Column|Collection pay_sn
- * @property Grid\Column|Collection pay_way
* @property Grid\Column|Collection products_total_amount
* @property Grid\Column|Collection shipping_fee
* @property Grid\Column|Collection shipping_state
@@ -244,7 +243,6 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection reviewer_id
* @property Grid\Column|Collection buynote_id
* @property Grid\Column|Collection cost_price
- * @property Grid\Column|Collection growth_value
* @property Grid\Column|Collection market_price
* @property Grid\Column|Collection media
* @property Grid\Column|Collection release_at
@@ -262,14 +260,20 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection size
* @property Grid\Column|Collection x
* @property Grid\Column|Collection y
+ * @property Grid\Column|Collection address
+ * @property Grid\Column|Collection consignee
+ * @property Grid\Column|Collection is_default
+ * @property Grid\Column|Collection telephone
+ * @property Grid\Column|Collection zone
+ * @property Grid\Column|Collection zone_id
* @property Grid\Column|Collection rule_id
* @property Grid\Column|Collection template_id
* @property Grid\Column|Collection zones
* @property Grid\Column|Collection expires_at
* @property Grid\Column|Collection phone
+ * @property Grid\Column|Collection socialite_id
+ * @property Grid\Column|Collection socialite_type
* @property Grid\Column|Collection tag_id
- * @property Grid\Column|Collection tag_log_id
- * @property Grid\Column|Collection tag_log_type
* @property Grid\Column|Collection taggable_id
* @property Grid\Column|Collection taggable_type
* @property Grid\Column|Collection bank_description
@@ -289,6 +293,7 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection depth
* @property Grid\Column|Collection gender
* @property Grid\Column|Collection group_sales_value
+ * @property Grid\Column|Collection growth_value
* @property Grid\Column|Collection inviter_id
* @property Grid\Column|Collection nickname
* @property Grid\Column|Collection pre_growth_value
@@ -305,6 +310,7 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection register_ip
* @property Grid\Column|Collection status_remark
*
+ * @method Grid\Column|Collection width(string $label = null)
* @method Grid\Column|Collection created_at(string $label = null)
* @method Grid\Column|Collection dimensions(string $label = null)
* @method Grid\Column|Collection id(string $label = null)
@@ -312,13 +318,6 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection key(string $label = null)
* @method Grid\Column|Collection name(string $label = null)
* @method Grid\Column|Collection updated_at(string $label = null)
- * @method Grid\Column|Collection address(string $label = null)
- * @method Grid\Column|Collection consignee(string $label = null)
- * @method Grid\Column|Collection is_default(string $label = null)
- * @method Grid\Column|Collection telephone(string $label = null)
- * @method Grid\Column|Collection user_id(string $label = null)
- * @method Grid\Column|Collection zone(string $label = null)
- * @method Grid\Column|Collection zone_id(string $label = null)
* @method Grid\Column|Collection detail(string $label = null)
* @method Grid\Column|Collection type(string $label = null)
* @method Grid\Column|Collection version(string $label = null)
@@ -334,6 +333,7 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection http_path(string $label = null)
* @method Grid\Column|Collection slug(string $label = null)
* @method Grid\Column|Collection role_id(string $label = null)
+ * @method Grid\Column|Collection user_id(string $label = null)
* @method Grid\Column|Collection value(string $label = null)
* @method Grid\Column|Collection avatar(string $label = null)
* @method Grid\Column|Collection password(string $label = null)
@@ -358,6 +358,7 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection tracking_number(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 remark(string $label = null)
* @method Grid\Column|Collection apk_link(string $label = null)
* @method Grid\Column|Collection cate(string $label = null)
* @method Grid\Column|Collection context(string $label = null)
@@ -390,9 +391,10 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection continue_click_times(string $label = null)
* @method Grid\Column|Collection last_click_at(string $label = null)
* @method Grid\Column|Collection coupon_id(string $label = null)
+ * @method Grid\Column|Collection is_enable(string $label = null)
* @method Grid\Column|Collection ranges(string $label = null)
- * @method Grid\Column|Collection status(string $label = null)
* @method Grid\Column|Collection administrator_id(string $label = null)
+ * @method Grid\Column|Collection status(string $label = null)
* @method Grid\Column|Collection task_id(string $label = null)
* @method Grid\Column|Collection limit(string $label = null)
* @method Grid\Column|Collection sent(string $label = null)
@@ -403,20 +405,20 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection use_start_at(string $label = null)
* @method Grid\Column|Collection lvl(string $label = null)
* @method Grid\Column|Collection order_completed_at(string $label = null)
- * @method Grid\Column|Collection remark(string $label = null)
* @method Grid\Column|Collection total_amount(string $label = null)
* @method Grid\Column|Collection earningable_id(string $label = null)
* @method Grid\Column|Collection earningable_type(string $label = null)
* @method Grid\Column|Collection fee(string $label = null)
* @method Grid\Column|Collection fee_rate(string $label = null)
- * @method Grid\Column|Collection is_manager(string $label = null)
* @method Grid\Column|Collection pay_at(string $label = null)
* @method Grid\Column|Collection pay_image(string $label = null)
* @method Grid\Column|Collection pay_info(string $label = null)
+ * @method Grid\Column|Collection pay_way(string $label = null)
* @method Grid\Column|Collection payer_id(string $label = null)
* @method Grid\Column|Collection settle_at(string $label = null)
* @method Grid\Column|Collection total_earnings(string $label = null)
* @method Grid\Column|Collection end_at(string $label = null)
+ * @method Grid\Column|Collection is_manager(string $label = null)
* @method Grid\Column|Collection is_settle(string $label = null)
* @method Grid\Column|Collection real_amount(string $label = null)
* @method Grid\Column|Collection start_at(string $label = null)
@@ -427,13 +429,16 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection price(string $label = null)
* @method Grid\Column|Collection qty(string $label = null)
* @method Grid\Column|Collection sale_price(string $label = null)
+ * @method Grid\Column|Collection reason(string $label = null)
* @method Grid\Column|Collection allocated_at(string $label = null)
* @method Grid\Column|Collection consignee_address(string $label = null)
* @method Grid\Column|Collection consignee_name(string $label = null)
* @method Grid\Column|Collection consignee_telephone(string $label = null)
* @method Grid\Column|Collection consignee_zone(string $label = null)
* @method Grid\Column|Collection consignor_id(string $label = null)
+ * @method Grid\Column|Collection out_trade_no(string $label = null)
* @method Grid\Column|Collection paied_time(string $label = null)
+ * @method Grid\Column|Collection pay_sn(string $label = null)
* @method Grid\Column|Collection pay_time(string $label = null)
* @method Grid\Column|Collection settle_state(string $label = null)
* @method Grid\Column|Collection shipping_time(string $label = null)
@@ -454,8 +459,12 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection change_from_purchase_subsidy_id(string $label = null)
* @method Grid\Column|Collection purchase_subsidy_id(string $label = null)
* @method Grid\Column|Collection change_sales_value(string $label = null)
+ * @method Grid\Column|Collection dealer_price(string $label = null)
+ * @method Grid\Column|Collection quantity(string $label = null)
+ * @method Grid\Column|Collection sell_price(string $label = null)
* @method Grid\Column|Collection before_lvl(string $label = null)
* @method Grid\Column|Collection change_lvl(string $label = null)
+ * @method Grid\Column|Collection revoke_id(string $label = null)
* @method Grid\Column|Collection account_amount(string $label = null)
* @method Grid\Column|Collection rate(string $label = null)
* @method Grid\Column|Collection service_amount(string $label = null)
@@ -481,7 +490,6 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection queue(string $label = null)
* @method Grid\Column|Collection uuid(string $label = null)
* @method Grid\Column|Collection job_id(string $label = null)
- * @method Grid\Column|Collection reason(string $label = null)
* @method Grid\Column|Collection fails(string $label = null)
* @method Grid\Column|Collection file(string $label = null)
* @method Grid\Column|Collection success(string $label = null)
@@ -491,7 +499,6 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection is_push(string $label = null)
* @method Grid\Column|Collection message_id(string $label = null)
* @method Grid\Column|Collection order_package_id(string $label = null)
- * @method Grid\Column|Collection quantity(string $label = null)
* @method Grid\Column|Collection checked_at(string $label = null)
* @method Grid\Column|Collection is_failed(string $label = null)
* @method Grid\Column|Collection last_news(string $label = null)
@@ -504,7 +511,6 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection gift_for_sku_id(string $label = null)
* @method Grid\Column|Collection reduced_amount(string $label = null)
* @method Grid\Column|Collection remain_quantity(string $label = null)
- * @method Grid\Column|Collection sell_price(string $label = null)
* @method Grid\Column|Collection sku_id(string $label = null)
* @method Grid\Column|Collection specs(string $label = null)
* @method Grid\Column|Collection spu_id(string $label = null)
@@ -514,10 +520,8 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection max(string $label = null)
* @method Grid\Column|Collection auto_complete_at(string $label = null)
* @method Grid\Column|Collection is_change(string $label = null)
+ * @method Grid\Column|Collection is_settlable(string $label = null)
* @method Grid\Column|Collection note(string $label = null)
- * @method Grid\Column|Collection out_trade_no(string $label = null)
- * @method Grid\Column|Collection pay_sn(string $label = null)
- * @method Grid\Column|Collection pay_way(string $label = null)
* @method Grid\Column|Collection products_total_amount(string $label = null)
* @method Grid\Column|Collection shipping_fee(string $label = null)
* @method Grid\Column|Collection shipping_state(string $label = null)
@@ -538,7 +542,6 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection reviewer_id(string $label = null)
* @method Grid\Column|Collection buynote_id(string $label = null)
* @method Grid\Column|Collection cost_price(string $label = null)
- * @method Grid\Column|Collection growth_value(string $label = null)
* @method Grid\Column|Collection market_price(string $label = null)
* @method Grid\Column|Collection media(string $label = null)
* @method Grid\Column|Collection release_at(string $label = null)
@@ -556,14 +559,20 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection size(string $label = null)
* @method Grid\Column|Collection x(string $label = null)
* @method Grid\Column|Collection y(string $label = null)
+ * @method Grid\Column|Collection address(string $label = null)
+ * @method Grid\Column|Collection consignee(string $label = null)
+ * @method Grid\Column|Collection is_default(string $label = null)
+ * @method Grid\Column|Collection telephone(string $label = null)
+ * @method Grid\Column|Collection zone(string $label = null)
+ * @method Grid\Column|Collection zone_id(string $label = null)
* @method Grid\Column|Collection rule_id(string $label = null)
* @method Grid\Column|Collection template_id(string $label = null)
* @method Grid\Column|Collection zones(string $label = null)
* @method Grid\Column|Collection expires_at(string $label = null)
* @method Grid\Column|Collection phone(string $label = null)
+ * @method Grid\Column|Collection socialite_id(string $label = null)
+ * @method Grid\Column|Collection socialite_type(string $label = null)
* @method Grid\Column|Collection tag_id(string $label = null)
- * @method Grid\Column|Collection tag_log_id(string $label = null)
- * @method Grid\Column|Collection tag_log_type(string $label = null)
* @method Grid\Column|Collection taggable_id(string $label = null)
* @method Grid\Column|Collection taggable_type(string $label = null)
* @method Grid\Column|Collection bank_description(string $label = null)
@@ -583,6 +592,7 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection depth(string $label = null)
* @method Grid\Column|Collection gender(string $label = null)
* @method Grid\Column|Collection group_sales_value(string $label = null)
+ * @method Grid\Column|Collection growth_value(string $label = null)
* @method Grid\Column|Collection inviter_id(string $label = null)
* @method Grid\Column|Collection nickname(string $label = null)
* @method Grid\Column|Collection pre_growth_value(string $label = null)
@@ -604,6 +614,7 @@ namespace Dcat\Admin {
class MiniGrid extends Grid {}
/**
+ * @property Show\Field|Collection width
* @property Show\Field|Collection created_at
* @property Show\Field|Collection dimensions
* @property Show\Field|Collection id
@@ -611,13 +622,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection key
* @property Show\Field|Collection name
* @property Show\Field|Collection updated_at
- * @property Show\Field|Collection address
- * @property Show\Field|Collection consignee
- * @property Show\Field|Collection is_default
- * @property Show\Field|Collection telephone
- * @property Show\Field|Collection user_id
- * @property Show\Field|Collection zone
- * @property Show\Field|Collection zone_id
* @property Show\Field|Collection detail
* @property Show\Field|Collection type
* @property Show\Field|Collection version
@@ -633,6 +637,7 @@ namespace Dcat\Admin {
* @property Show\Field|Collection http_path
* @property Show\Field|Collection slug
* @property Show\Field|Collection role_id
+ * @property Show\Field|Collection user_id
* @property Show\Field|Collection value
* @property Show\Field|Collection avatar
* @property Show\Field|Collection password
@@ -657,6 +662,7 @@ namespace Dcat\Admin {
* @property Show\Field|Collection tracking_number
* @property Show\Field|Collection before_agent_level
* @property Show\Field|Collection change_agent_level
+ * @property Show\Field|Collection remark
* @property Show\Field|Collection apk_link
* @property Show\Field|Collection cate
* @property Show\Field|Collection context
@@ -689,9 +695,10 @@ namespace Dcat\Admin {
* @property Show\Field|Collection continue_click_times
* @property Show\Field|Collection last_click_at
* @property Show\Field|Collection coupon_id
+ * @property Show\Field|Collection is_enable
* @property Show\Field|Collection ranges
- * @property Show\Field|Collection status
* @property Show\Field|Collection administrator_id
+ * @property Show\Field|Collection status
* @property Show\Field|Collection task_id
* @property Show\Field|Collection limit
* @property Show\Field|Collection sent
@@ -702,20 +709,20 @@ namespace Dcat\Admin {
* @property Show\Field|Collection use_start_at
* @property Show\Field|Collection lvl
* @property Show\Field|Collection order_completed_at
- * @property Show\Field|Collection remark
* @property Show\Field|Collection total_amount
* @property Show\Field|Collection earningable_id
* @property Show\Field|Collection earningable_type
* @property Show\Field|Collection fee
* @property Show\Field|Collection fee_rate
- * @property Show\Field|Collection is_manager
* @property Show\Field|Collection pay_at
* @property Show\Field|Collection pay_image
* @property Show\Field|Collection pay_info
+ * @property Show\Field|Collection pay_way
* @property Show\Field|Collection payer_id
* @property Show\Field|Collection settle_at
* @property Show\Field|Collection total_earnings
* @property Show\Field|Collection end_at
+ * @property Show\Field|Collection is_manager
* @property Show\Field|Collection is_settle
* @property Show\Field|Collection real_amount
* @property Show\Field|Collection start_at
@@ -726,13 +733,16 @@ namespace Dcat\Admin {
* @property Show\Field|Collection price
* @property Show\Field|Collection qty
* @property Show\Field|Collection sale_price
+ * @property Show\Field|Collection reason
* @property Show\Field|Collection allocated_at
* @property Show\Field|Collection consignee_address
* @property Show\Field|Collection consignee_name
* @property Show\Field|Collection consignee_telephone
* @property Show\Field|Collection consignee_zone
* @property Show\Field|Collection consignor_id
+ * @property Show\Field|Collection out_trade_no
* @property Show\Field|Collection paied_time
+ * @property Show\Field|Collection pay_sn
* @property Show\Field|Collection pay_time
* @property Show\Field|Collection settle_state
* @property Show\Field|Collection shipping_time
@@ -753,8 +763,12 @@ namespace Dcat\Admin {
* @property Show\Field|Collection change_from_purchase_subsidy_id
* @property Show\Field|Collection purchase_subsidy_id
* @property Show\Field|Collection change_sales_value
+ * @property Show\Field|Collection dealer_price
+ * @property Show\Field|Collection quantity
+ * @property Show\Field|Collection sell_price
* @property Show\Field|Collection before_lvl
* @property Show\Field|Collection change_lvl
+ * @property Show\Field|Collection revoke_id
* @property Show\Field|Collection account_amount
* @property Show\Field|Collection rate
* @property Show\Field|Collection service_amount
@@ -780,7 +794,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection queue
* @property Show\Field|Collection uuid
* @property Show\Field|Collection job_id
- * @property Show\Field|Collection reason
* @property Show\Field|Collection fails
* @property Show\Field|Collection file
* @property Show\Field|Collection success
@@ -790,7 +803,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection is_push
* @property Show\Field|Collection message_id
* @property Show\Field|Collection order_package_id
- * @property Show\Field|Collection quantity
* @property Show\Field|Collection checked_at
* @property Show\Field|Collection is_failed
* @property Show\Field|Collection last_news
@@ -803,7 +815,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection gift_for_sku_id
* @property Show\Field|Collection reduced_amount
* @property Show\Field|Collection remain_quantity
- * @property Show\Field|Collection sell_price
* @property Show\Field|Collection sku_id
* @property Show\Field|Collection specs
* @property Show\Field|Collection spu_id
@@ -813,10 +824,8 @@ namespace Dcat\Admin {
* @property Show\Field|Collection max
* @property Show\Field|Collection auto_complete_at
* @property Show\Field|Collection is_change
+ * @property Show\Field|Collection is_settlable
* @property Show\Field|Collection note
- * @property Show\Field|Collection out_trade_no
- * @property Show\Field|Collection pay_sn
- * @property Show\Field|Collection pay_way
* @property Show\Field|Collection products_total_amount
* @property Show\Field|Collection shipping_fee
* @property Show\Field|Collection shipping_state
@@ -837,7 +846,6 @@ namespace Dcat\Admin {
* @property Show\Field|Collection reviewer_id
* @property Show\Field|Collection buynote_id
* @property Show\Field|Collection cost_price
- * @property Show\Field|Collection growth_value
* @property Show\Field|Collection market_price
* @property Show\Field|Collection media
* @property Show\Field|Collection release_at
@@ -855,14 +863,20 @@ namespace Dcat\Admin {
* @property Show\Field|Collection size
* @property Show\Field|Collection x
* @property Show\Field|Collection y
+ * @property Show\Field|Collection address
+ * @property Show\Field|Collection consignee
+ * @property Show\Field|Collection is_default
+ * @property Show\Field|Collection telephone
+ * @property Show\Field|Collection zone
+ * @property Show\Field|Collection zone_id
* @property Show\Field|Collection rule_id
* @property Show\Field|Collection template_id
* @property Show\Field|Collection zones
* @property Show\Field|Collection expires_at
* @property Show\Field|Collection phone
+ * @property Show\Field|Collection socialite_id
+ * @property Show\Field|Collection socialite_type
* @property Show\Field|Collection tag_id
- * @property Show\Field|Collection tag_log_id
- * @property Show\Field|Collection tag_log_type
* @property Show\Field|Collection taggable_id
* @property Show\Field|Collection taggable_type
* @property Show\Field|Collection bank_description
@@ -882,6 +896,7 @@ namespace Dcat\Admin {
* @property Show\Field|Collection depth
* @property Show\Field|Collection gender
* @property Show\Field|Collection group_sales_value
+ * @property Show\Field|Collection growth_value
* @property Show\Field|Collection inviter_id
* @property Show\Field|Collection nickname
* @property Show\Field|Collection pre_growth_value
@@ -898,6 +913,7 @@ namespace Dcat\Admin {
* @property Show\Field|Collection register_ip
* @property Show\Field|Collection status_remark
*
+ * @method Show\Field|Collection width(string $label = null)
* @method Show\Field|Collection created_at(string $label = null)
* @method Show\Field|Collection dimensions(string $label = null)
* @method Show\Field|Collection id(string $label = null)
@@ -905,13 +921,6 @@ namespace Dcat\Admin {
* @method Show\Field|Collection key(string $label = null)
* @method Show\Field|Collection name(string $label = null)
* @method Show\Field|Collection updated_at(string $label = null)
- * @method Show\Field|Collection address(string $label = null)
- * @method Show\Field|Collection consignee(string $label = null)
- * @method Show\Field|Collection is_default(string $label = null)
- * @method Show\Field|Collection telephone(string $label = null)
- * @method Show\Field|Collection user_id(string $label = null)
- * @method Show\Field|Collection zone(string $label = null)
- * @method Show\Field|Collection zone_id(string $label = null)
* @method Show\Field|Collection detail(string $label = null)
* @method Show\Field|Collection type(string $label = null)
* @method Show\Field|Collection version(string $label = null)
@@ -927,6 +936,7 @@ namespace Dcat\Admin {
* @method Show\Field|Collection http_path(string $label = null)
* @method Show\Field|Collection slug(string $label = null)
* @method Show\Field|Collection role_id(string $label = null)
+ * @method Show\Field|Collection user_id(string $label = null)
* @method Show\Field|Collection value(string $label = null)
* @method Show\Field|Collection avatar(string $label = null)
* @method Show\Field|Collection password(string $label = null)
@@ -951,6 +961,7 @@ namespace Dcat\Admin {
* @method Show\Field|Collection tracking_number(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 remark(string $label = null)
* @method Show\Field|Collection apk_link(string $label = null)
* @method Show\Field|Collection cate(string $label = null)
* @method Show\Field|Collection context(string $label = null)
@@ -983,9 +994,10 @@ namespace Dcat\Admin {
* @method Show\Field|Collection continue_click_times(string $label = null)
* @method Show\Field|Collection last_click_at(string $label = null)
* @method Show\Field|Collection coupon_id(string $label = null)
+ * @method Show\Field|Collection is_enable(string $label = null)
* @method Show\Field|Collection ranges(string $label = null)
- * @method Show\Field|Collection status(string $label = null)
* @method Show\Field|Collection administrator_id(string $label = null)
+ * @method Show\Field|Collection status(string $label = null)
* @method Show\Field|Collection task_id(string $label = null)
* @method Show\Field|Collection limit(string $label = null)
* @method Show\Field|Collection sent(string $label = null)
@@ -996,20 +1008,20 @@ namespace Dcat\Admin {
* @method Show\Field|Collection use_start_at(string $label = null)
* @method Show\Field|Collection lvl(string $label = null)
* @method Show\Field|Collection order_completed_at(string $label = null)
- * @method Show\Field|Collection remark(string $label = null)
* @method Show\Field|Collection total_amount(string $label = null)
* @method Show\Field|Collection earningable_id(string $label = null)
* @method Show\Field|Collection earningable_type(string $label = null)
* @method Show\Field|Collection fee(string $label = null)
* @method Show\Field|Collection fee_rate(string $label = null)
- * @method Show\Field|Collection is_manager(string $label = null)
* @method Show\Field|Collection pay_at(string $label = null)
* @method Show\Field|Collection pay_image(string $label = null)
* @method Show\Field|Collection pay_info(string $label = null)
+ * @method Show\Field|Collection pay_way(string $label = null)
* @method Show\Field|Collection payer_id(string $label = null)
* @method Show\Field|Collection settle_at(string $label = null)
* @method Show\Field|Collection total_earnings(string $label = null)
* @method Show\Field|Collection end_at(string $label = null)
+ * @method Show\Field|Collection is_manager(string $label = null)
* @method Show\Field|Collection is_settle(string $label = null)
* @method Show\Field|Collection real_amount(string $label = null)
* @method Show\Field|Collection start_at(string $label = null)
@@ -1020,13 +1032,16 @@ namespace Dcat\Admin {
* @method Show\Field|Collection price(string $label = null)
* @method Show\Field|Collection qty(string $label = null)
* @method Show\Field|Collection sale_price(string $label = null)
+ * @method Show\Field|Collection reason(string $label = null)
* @method Show\Field|Collection allocated_at(string $label = null)
* @method Show\Field|Collection consignee_address(string $label = null)
* @method Show\Field|Collection consignee_name(string $label = null)
* @method Show\Field|Collection consignee_telephone(string $label = null)
* @method Show\Field|Collection consignee_zone(string $label = null)
* @method Show\Field|Collection consignor_id(string $label = null)
+ * @method Show\Field|Collection out_trade_no(string $label = null)
* @method Show\Field|Collection paied_time(string $label = null)
+ * @method Show\Field|Collection pay_sn(string $label = null)
* @method Show\Field|Collection pay_time(string $label = null)
* @method Show\Field|Collection settle_state(string $label = null)
* @method Show\Field|Collection shipping_time(string $label = null)
@@ -1047,8 +1062,12 @@ namespace Dcat\Admin {
* @method Show\Field|Collection change_from_purchase_subsidy_id(string $label = null)
* @method Show\Field|Collection purchase_subsidy_id(string $label = null)
* @method Show\Field|Collection change_sales_value(string $label = null)
+ * @method Show\Field|Collection dealer_price(string $label = null)
+ * @method Show\Field|Collection quantity(string $label = null)
+ * @method Show\Field|Collection sell_price(string $label = null)
* @method Show\Field|Collection before_lvl(string $label = null)
* @method Show\Field|Collection change_lvl(string $label = null)
+ * @method Show\Field|Collection revoke_id(string $label = null)
* @method Show\Field|Collection account_amount(string $label = null)
* @method Show\Field|Collection rate(string $label = null)
* @method Show\Field|Collection service_amount(string $label = null)
@@ -1074,7 +1093,6 @@ namespace Dcat\Admin {
* @method Show\Field|Collection queue(string $label = null)
* @method Show\Field|Collection uuid(string $label = null)
* @method Show\Field|Collection job_id(string $label = null)
- * @method Show\Field|Collection reason(string $label = null)
* @method Show\Field|Collection fails(string $label = null)
* @method Show\Field|Collection file(string $label = null)
* @method Show\Field|Collection success(string $label = null)
@@ -1084,7 +1102,6 @@ namespace Dcat\Admin {
* @method Show\Field|Collection is_push(string $label = null)
* @method Show\Field|Collection message_id(string $label = null)
* @method Show\Field|Collection order_package_id(string $label = null)
- * @method Show\Field|Collection quantity(string $label = null)
* @method Show\Field|Collection checked_at(string $label = null)
* @method Show\Field|Collection is_failed(string $label = null)
* @method Show\Field|Collection last_news(string $label = null)
@@ -1097,7 +1114,6 @@ namespace Dcat\Admin {
* @method Show\Field|Collection gift_for_sku_id(string $label = null)
* @method Show\Field|Collection reduced_amount(string $label = null)
* @method Show\Field|Collection remain_quantity(string $label = null)
- * @method Show\Field|Collection sell_price(string $label = null)
* @method Show\Field|Collection sku_id(string $label = null)
* @method Show\Field|Collection specs(string $label = null)
* @method Show\Field|Collection spu_id(string $label = null)
@@ -1107,10 +1123,8 @@ namespace Dcat\Admin {
* @method Show\Field|Collection max(string $label = null)
* @method Show\Field|Collection auto_complete_at(string $label = null)
* @method Show\Field|Collection is_change(string $label = null)
+ * @method Show\Field|Collection is_settlable(string $label = null)
* @method Show\Field|Collection note(string $label = null)
- * @method Show\Field|Collection out_trade_no(string $label = null)
- * @method Show\Field|Collection pay_sn(string $label = null)
- * @method Show\Field|Collection pay_way(string $label = null)
* @method Show\Field|Collection products_total_amount(string $label = null)
* @method Show\Field|Collection shipping_fee(string $label = null)
* @method Show\Field|Collection shipping_state(string $label = null)
@@ -1131,7 +1145,6 @@ namespace Dcat\Admin {
* @method Show\Field|Collection reviewer_id(string $label = null)
* @method Show\Field|Collection buynote_id(string $label = null)
* @method Show\Field|Collection cost_price(string $label = null)
- * @method Show\Field|Collection growth_value(string $label = null)
* @method Show\Field|Collection market_price(string $label = null)
* @method Show\Field|Collection media(string $label = null)
* @method Show\Field|Collection release_at(string $label = null)
@@ -1149,14 +1162,20 @@ namespace Dcat\Admin {
* @method Show\Field|Collection size(string $label = null)
* @method Show\Field|Collection x(string $label = null)
* @method Show\Field|Collection y(string $label = null)
+ * @method Show\Field|Collection address(string $label = null)
+ * @method Show\Field|Collection consignee(string $label = null)
+ * @method Show\Field|Collection is_default(string $label = null)
+ * @method Show\Field|Collection telephone(string $label = null)
+ * @method Show\Field|Collection zone(string $label = null)
+ * @method Show\Field|Collection zone_id(string $label = null)
* @method Show\Field|Collection rule_id(string $label = null)
* @method Show\Field|Collection template_id(string $label = null)
* @method Show\Field|Collection zones(string $label = null)
* @method Show\Field|Collection expires_at(string $label = null)
* @method Show\Field|Collection phone(string $label = null)
+ * @method Show\Field|Collection socialite_id(string $label = null)
+ * @method Show\Field|Collection socialite_type(string $label = null)
* @method Show\Field|Collection tag_id(string $label = null)
- * @method Show\Field|Collection tag_log_id(string $label = null)
- * @method Show\Field|Collection tag_log_type(string $label = null)
* @method Show\Field|Collection taggable_id(string $label = null)
* @method Show\Field|Collection taggable_type(string $label = null)
* @method Show\Field|Collection bank_description(string $label = null)
@@ -1176,6 +1195,7 @@ namespace Dcat\Admin {
* @method Show\Field|Collection depth(string $label = null)
* @method Show\Field|Collection gender(string $label = null)
* @method Show\Field|Collection group_sales_value(string $label = null)
+ * @method Show\Field|Collection growth_value(string $label = null)
* @method Show\Field|Collection inviter_id(string $label = null)
* @method Show\Field|Collection nickname(string $label = null)
* @method Show\Field|Collection pre_growth_value(string $label = null)
diff --git a/deploy/config/deploy/staging.rb b/deploy/config/deploy/staging.rb
index fcb531bf..59323fec 100644
--- a/deploy/config/deploy/staging.rb
+++ b/deploy/config/deploy/staging.rb
@@ -32,7 +32,7 @@ server "47.108.227.246", user: "deployer", roles: %w{admin supervisor}
# http://capistranorb.com/documentation/getting-started/configuration/
# Feel free to add new variables to customise your setup.
-set :branch, "develop"
+set :branch, "1.x"
set :deploy_to, "/www/wwwroot/test.zichunsheng.cn"
diff --git a/resources/lang/zh_CN/dealer.php b/resources/lang/zh_CN/dealer.php
index 9d1802df..74f4c61d 100644
--- a/resources/lang/zh_CN/dealer.php
+++ b/resources/lang/zh_CN/dealer.php
@@ -14,7 +14,7 @@ return [
'userInfo'=>[
'avatar' => '头像',
'nickname' => '昵称',
- 'agent_level'=>'管理级别',
+ 'agent_level'=>'身份',
'growth_value'=>'消费值',
'group_sales_value'=>'业绩',
'inviterInfo'=>[
diff --git a/resources/lang/zh_CN/sales-value-log.php b/resources/lang/zh_CN/sales-value-log.php
new file mode 100644
index 00000000..11fe9654
--- /dev/null
+++ b/resources/lang/zh_CN/sales-value-log.php
@@ -0,0 +1,17 @@
+ [
+ 'SalesValueLog' => 'SalesValueLog',
+ 'sales-value-log' => 'SalesValueLog',
+ ],
+ 'fields' => [
+ 'user_id' => '用户',
+ 'order_id' => '订单',
+ 'order_user_id' => '下单用户',
+ 'type' => '类型',
+ 'change_sales_value' => '变更销售值',
+ 'remarks' => '备注',
+ ],
+ 'options' => [
+ ],
+];
diff --git a/resources/lang/zh_CN/user.php b/resources/lang/zh_CN/user.php
index 6c38ca8e..a182054d 100644
--- a/resources/lang/zh_CN/user.php
+++ b/resources/lang/zh_CN/user.php
@@ -25,7 +25,7 @@ return [
'avatar' => '头像',
'nickname' => '昵称',
'code' => '邀请码',
- 'agent_level'=>'管理级别',
+ 'agent_level'=>'身份',
'growth_value'=>'消费值',
'group_sales_value'=>'业绩',
'inviterInfo'=>[
@@ -37,7 +37,7 @@ return [
'user_info'=>[
'avatar' => '头像',
'nickname' => '昵称',
- 'agent_level'=>'管理级别',
+ 'agent_level'=>'身份',
'growth_value'=>'消费值',
'group_sales_value'=>'业绩',
'points'=>'积分',
diff --git a/resources/views/endpoint/kf/index.blade.php b/resources/views/endpoint/kf/index.blade.php
new file mode 100644
index 00000000..2327584f
--- /dev/null
+++ b/resources/views/endpoint/kf/index.blade.php
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+