mirror of
https://github.com/v2board/v2board.git
synced 2024-11-10 09:39:10 +08:00
update: backend language and order result page
This commit is contained in:
parent
edee396c9b
commit
f7a7c21c16
@ -20,6 +20,7 @@ class AuthController extends Controller
|
|||||||
{
|
{
|
||||||
public function register(AuthRegister $request)
|
public function register(AuthRegister $request)
|
||||||
{
|
{
|
||||||
|
abort(500, __('passport.auth.register.verify_incorrect'));
|
||||||
if ((int)config('v2board.recaptcha_enable', 0)) {
|
if ((int)config('v2board.recaptcha_enable', 0)) {
|
||||||
$recaptcha = new ReCaptcha(config('v2board.recaptcha_key'));
|
$recaptcha = new ReCaptcha(config('v2board.recaptcha_key'));
|
||||||
$recaptchaResp = $recaptcha->verify($request->input('recaptcha_data'));
|
$recaptchaResp = $recaptcha->verify($request->input('recaptcha_data'));
|
||||||
|
@ -11,25 +11,25 @@ class CouponController extends Controller
|
|||||||
public function check(Request $request)
|
public function check(Request $request)
|
||||||
{
|
{
|
||||||
if (empty($request->input('code'))) {
|
if (empty($request->input('code'))) {
|
||||||
abort(500, '优惠券码不能为空');
|
abort(500, __('user.coupon.check.coupon_not_empty'));
|
||||||
}
|
}
|
||||||
$coupon = Coupon::where('code', $request->input('code'))->first();
|
$coupon = Coupon::where('code', $request->input('code'))->first();
|
||||||
if (!$coupon) {
|
if (!$coupon) {
|
||||||
abort(500, '优惠券无效');
|
abort(500, __('user.coupon.check.coupon_invalid'));
|
||||||
}
|
}
|
||||||
if ($coupon->limit_use <= 0 && $coupon->limit_use !== NULL) {
|
if ($coupon->limit_use <= 0 && $coupon->limit_use !== NULL) {
|
||||||
abort(500, '优惠券已无可用次数');
|
abort(500, __('user.coupon.check.coupon_not_available_by_number'));
|
||||||
}
|
}
|
||||||
if (time() < $coupon->started_at) {
|
if (time() < $coupon->started_at) {
|
||||||
abort(500, '优惠券还未到可用时间');
|
abort(500, __('user.coupon.check.coupon_not_available_by_time'));
|
||||||
}
|
}
|
||||||
if (time() > $coupon->ended_at) {
|
if (time() > $coupon->ended_at) {
|
||||||
abort(500, '优惠券已过期');
|
abort(500, __('user.coupon.check.coupon_expired'));
|
||||||
}
|
}
|
||||||
if ($coupon->limit_plan_ids) {
|
if ($coupon->limit_plan_ids) {
|
||||||
$limitPlanIds = json_decode($coupon->limit_plan_ids);
|
$limitPlanIds = json_decode($coupon->limit_plan_ids);
|
||||||
if (!in_array($request->input('plan_id'), $limitPlanIds)) {
|
if (!in_array($request->input('plan_id'), $limitPlanIds)) {
|
||||||
abort(500, '这个计划无法使用该优惠码');
|
abort(500, __('user.coupon.check.coupon_limit_plan'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
|
@ -14,7 +14,7 @@ class InviteController extends Controller
|
|||||||
public function save(Request $request)
|
public function save(Request $request)
|
||||||
{
|
{
|
||||||
if (InviteCode::where('user_id', $request->session()->get('id'))->where('status', 0)->count() >= config('v2board.invite_gen_limit', 5)) {
|
if (InviteCode::where('user_id', $request->session()->get('id'))->where('status', 0)->count() >= config('v2board.invite_gen_limit', 5)) {
|
||||||
abort(500, '已达到创建数量上限');
|
abort(500, __('user.invite.save.invite_create_limit'));
|
||||||
}
|
}
|
||||||
$inviteCode = new InviteCode();
|
$inviteCode = new InviteCode();
|
||||||
$inviteCode->user_id = $request->session()->get('id');
|
$inviteCode->user_id = $request->session()->get('id');
|
||||||
|
@ -17,11 +17,11 @@ class KnowledgeController extends Controller
|
|||||||
->where('show', 1)
|
->where('show', 1)
|
||||||
->first()
|
->first()
|
||||||
->toArray();
|
->toArray();
|
||||||
if (!$knowledge) abort(500, '知识不存在');
|
if (!$knowledge) abort(500, __('user.knowledge.fetch.knowledge_not_exist'));
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
$userService = new UserService();
|
$userService = new UserService();
|
||||||
$appleId = $userService->isAvailable($user) ? config('v2board.apple_id') : '没有有效订阅无法使用本站提供的AppleID';
|
$appleId = $userService->isAvailable($user) ? config('v2board.apple_id') : __('user.knowledge.fetch.apple_id_must_be_plan');
|
||||||
$appleIdPassword = $userService->isAvailable($user) ? config('v2board.apple_id_password') : '没有有效订阅无法使用本站提供的AppleID';
|
$appleIdPassword = $userService->isAvailable($user) ? config('v2board.apple_id_password') : __('user.knowledge.fetch.apple_id_must_be_plan');
|
||||||
$subscribeUrl = config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'];
|
$subscribeUrl = config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'];
|
||||||
$knowledge['body'] = str_replace('{{siteName}}', config('v2board.app_name', 'V2Board'), $knowledge['body']);
|
$knowledge['body'] = str_replace('{{siteName}}', config('v2board.app_name', 'V2Board'), $knowledge['body']);
|
||||||
$knowledge['body'] = str_replace('{{appleId}}', $appleId, $knowledge['body']);
|
$knowledge['body'] = str_replace('{{appleId}}', $appleId, $knowledge['body']);
|
||||||
|
@ -50,12 +50,12 @@ class OrderController extends Controller
|
|||||||
->where('trade_no', $request->input('trade_no'))
|
->where('trade_no', $request->input('trade_no'))
|
||||||
->first();
|
->first();
|
||||||
if (!$order) {
|
if (!$order) {
|
||||||
abort(500, '订单不存在');
|
abort(500, __('user.order.details.order_not_exist'));
|
||||||
}
|
}
|
||||||
$order['plan'] = Plan::find($order->plan_id);
|
$order['plan'] = Plan::find($order->plan_id);
|
||||||
$order['try_out_plan_id'] = (int)config('v2board.try_out_plan_id');
|
$order['try_out_plan_id'] = (int)config('v2board.try_out_plan_id');
|
||||||
if (!$order['plan']) {
|
if (!$order['plan']) {
|
||||||
abort(500, '订阅不存在');
|
abort(500, __('user.order.details.plan_not_exist'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => $order
|
'data' => $order
|
||||||
@ -66,38 +66,38 @@ class OrderController extends Controller
|
|||||||
{
|
{
|
||||||
$userService = new UserService();
|
$userService = new UserService();
|
||||||
if ($userService->isNotCompleteOrderByUserId($request->session()->get('id'))) {
|
if ($userService->isNotCompleteOrderByUserId($request->session()->get('id'))) {
|
||||||
abort(500, '您有未付款或开通中的订单,请稍后或取消再试');
|
abort(500, __('user.order.save.exist_open_order'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$plan = Plan::find($request->input('plan_id'));
|
$plan = Plan::find($request->input('plan_id'));
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
|
|
||||||
if (!$plan) {
|
if (!$plan) {
|
||||||
abort(500, '该订阅不存在');
|
abort(500, __('user.order.save.plan_not_exist'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!$plan->show && !$plan->renew) || (!$plan->show && $user->plan_id !== $plan->id)) {
|
if ((!$plan->show && !$plan->renew) || (!$plan->show && $user->plan_id !== $plan->id)) {
|
||||||
if ($request->input('cycle') !== 'reset_price') {
|
if ($request->input('cycle') !== 'reset_price') {
|
||||||
abort(500, '该订阅已售罄,请更换其他订阅');
|
abort(500, __('user.order.save.plan_stop_sell'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$plan->renew && $user->plan_id == $plan->id && $request->input('cycle') !== 'reset_price') {
|
if (!$plan->renew && $user->plan_id == $plan->id && $request->input('cycle') !== 'reset_price') {
|
||||||
abort(500, '该订阅无法续费,请更换其他订阅');
|
abort(500, __('user.order.save.plan_stop_renew'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($plan[$request->input('cycle')] === NULL) {
|
if ($plan[$request->input('cycle')] === NULL) {
|
||||||
abort(500, '该订阅周期无法进行购买,请选择其他周期');
|
abort(500, __('user.order.save.plan_stop'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->input('cycle') === 'reset_price') {
|
if ($request->input('cycle') === 'reset_price') {
|
||||||
if ($user->expired_at <= time() || !$user->plan_id) {
|
if ($user->expired_at <= time() || !$user->plan_id) {
|
||||||
abort(500, '订阅已过期或无有效订阅,无法购买重置包');
|
abort(500, __('user.order.save.plan_exist_not_buy_package'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$plan->show && $plan->renew && !$userService->isAvailable($user)) {
|
if (!$plan->show && $plan->renew && !$userService->isAvailable($user)) {
|
||||||
abort(500, '订阅已过期,请更换其他订阅');
|
abort(500, __('user.order.save.plan_expired'));
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
@ -113,7 +113,7 @@ class OrderController extends Controller
|
|||||||
$couponService = new CouponService($request->input('coupon_code'));
|
$couponService = new CouponService($request->input('coupon_code'));
|
||||||
if (!$couponService->use($order)) {
|
if (!$couponService->use($order)) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
abort(500, '优惠券使用失败');
|
abort(500, __('user.order.save.coupon_use_failed'));
|
||||||
}
|
}
|
||||||
$order->coupon_id = $couponService->getId();
|
$order->coupon_id = $couponService->getId();
|
||||||
}
|
}
|
||||||
@ -128,14 +128,14 @@ class OrderController extends Controller
|
|||||||
if ($remainingBalance > 0) {
|
if ($remainingBalance > 0) {
|
||||||
if (!$userService->addBalance($order->user_id, - $order->total_amount)) {
|
if (!$userService->addBalance($order->user_id, - $order->total_amount)) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
abort(500, '余额不足');
|
abort(500, __('user.order.save.insufficient_balance'));
|
||||||
}
|
}
|
||||||
$order->balance_amount = $order->total_amount;
|
$order->balance_amount = $order->total_amount;
|
||||||
$order->total_amount = 0;
|
$order->total_amount = 0;
|
||||||
} else {
|
} else {
|
||||||
if (!$userService->addBalance($order->user_id, - $user->balance)) {
|
if (!$userService->addBalance($order->user_id, - $user->balance)) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
abort(500, '余额不足');
|
abort(500, __('user.order.save.insufficient_balance'));
|
||||||
}
|
}
|
||||||
$order->balance_amount = $user->balance;
|
$order->balance_amount = $user->balance;
|
||||||
$order->total_amount = $order->total_amount - $user->balance;
|
$order->total_amount = $order->total_amount - $user->balance;
|
||||||
@ -144,7 +144,7 @@ class OrderController extends Controller
|
|||||||
|
|
||||||
if (!$order->save()) {
|
if (!$order->save()) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '订单创建失败');
|
abort(500, __('user.order.save.order_create_failed'));
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
@ -163,7 +163,7 @@ class OrderController extends Controller
|
|||||||
->where('status', 0)
|
->where('status', 0)
|
||||||
->first();
|
->first();
|
||||||
if (!$order) {
|
if (!$order) {
|
||||||
abort(500, '订单不存在或已支付');
|
abort(500, __('user.order.checkout.order_not_exist_or_paid'));
|
||||||
}
|
}
|
||||||
// free process
|
// free process
|
||||||
if ($order->total_amount <= 0) {
|
if ($order->total_amount <= 0) {
|
||||||
@ -180,7 +180,7 @@ class OrderController extends Controller
|
|||||||
case 0:
|
case 0:
|
||||||
// alipayF2F
|
// alipayF2F
|
||||||
if (!(int)config('v2board.alipay_enable')) {
|
if (!(int)config('v2board.alipay_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 0,
|
'type' => 0,
|
||||||
@ -189,7 +189,7 @@ class OrderController extends Controller
|
|||||||
case 2:
|
case 2:
|
||||||
// stripeAlipay
|
// stripeAlipay
|
||||||
if (!(int)config('v2board.stripe_alipay_enable')) {
|
if (!(int)config('v2board.stripe_alipay_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
@ -198,7 +198,7 @@ class OrderController extends Controller
|
|||||||
case 3:
|
case 3:
|
||||||
// stripeWepay
|
// stripeWepay
|
||||||
if (!(int)config('v2board.stripe_wepay_enable')) {
|
if (!(int)config('v2board.stripe_wepay_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 0,
|
'type' => 0,
|
||||||
@ -207,7 +207,7 @@ class OrderController extends Controller
|
|||||||
case 4:
|
case 4:
|
||||||
// bitpayX
|
// bitpayX
|
||||||
if (!(int)config('v2board.bitpayx_enable')) {
|
if (!(int)config('v2board.bitpayx_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
@ -215,7 +215,7 @@ class OrderController extends Controller
|
|||||||
]);
|
]);
|
||||||
case 5:
|
case 5:
|
||||||
if (!(int)config('v2board.mgate_enable')) {
|
if (!(int)config('v2board.mgate_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
@ -223,7 +223,7 @@ class OrderController extends Controller
|
|||||||
]);
|
]);
|
||||||
case 6:
|
case 6:
|
||||||
if (!(int)config('v2board.stripe_card_enable')) {
|
if (!(int)config('v2board.stripe_card_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 2,
|
'type' => 2,
|
||||||
@ -231,14 +231,14 @@ class OrderController extends Controller
|
|||||||
]);
|
]);
|
||||||
case 7:
|
case 7:
|
||||||
if (!(int)config('v2board.epay_enable')) {
|
if (!(int)config('v2board.epay_enable')) {
|
||||||
abort(500, '支付方式不可用');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
'data' => $this->epay($order)
|
'data' => $this->epay($order)
|
||||||
]);
|
]);
|
||||||
default:
|
default:
|
||||||
abort(500, '支付方式不存在');
|
abort(500, __('user.order.checkout.pay_method_not_use'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ class OrderController extends Controller
|
|||||||
->where('user_id', $request->session()->get('id'))
|
->where('user_id', $request->session()->get('id'))
|
||||||
->first();
|
->first();
|
||||||
if (!$order) {
|
if (!$order) {
|
||||||
abort(500, '订单不存在');
|
abort(500, __('user.order.check.order_not_exist'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => $order->status
|
'data' => $order->status
|
||||||
@ -323,20 +323,20 @@ class OrderController extends Controller
|
|||||||
public function cancel(Request $request)
|
public function cancel(Request $request)
|
||||||
{
|
{
|
||||||
if (empty($request->input('trade_no'))) {
|
if (empty($request->input('trade_no'))) {
|
||||||
abort(500, '参数有误');
|
abort(500, __('user.order.cancel.params_wrong'));
|
||||||
}
|
}
|
||||||
$order = Order::where('trade_no', $request->input('trade_no'))
|
$order = Order::where('trade_no', $request->input('trade_no'))
|
||||||
->where('user_id', $request->session()->get('id'))
|
->where('user_id', $request->session()->get('id'))
|
||||||
->first();
|
->first();
|
||||||
if (!$order) {
|
if (!$order) {
|
||||||
abort(500, '订单不存在');
|
abort(500, __('user.order.cancel.order_not_exist'));
|
||||||
}
|
}
|
||||||
if ($order->status !== 0) {
|
if ($order->status !== 0) {
|
||||||
abort(500, '只可以取消待支付订单');
|
abort(500, __('user.order.cancel.only_cancel_pending_order'));
|
||||||
}
|
}
|
||||||
$orderService = new OrderService($order);
|
$orderService = new OrderService($order);
|
||||||
if (!$orderService->cancel()) {
|
if (!$orderService->cancel()) {
|
||||||
abort(500, '取消失败');
|
abort(500, __('user.order.cancel.cancel_failed'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => true
|
'data' => true
|
||||||
@ -372,7 +372,7 @@ class OrderController extends Controller
|
|||||||
$currency = config('v2board.stripe_currency', 'hkd');
|
$currency = config('v2board.stripe_currency', 'hkd');
|
||||||
$exchange = Helper::exchange('CNY', strtoupper($currency));
|
$exchange = Helper::exchange('CNY', strtoupper($currency));
|
||||||
if (!$exchange) {
|
if (!$exchange) {
|
||||||
abort(500, '货币转换超时,请稍后再试');
|
abort(500, __('user.order.stripeAlipay.currency_convert_timeout'));
|
||||||
}
|
}
|
||||||
Stripe::setApiKey(config('v2board.stripe_sk_live'));
|
Stripe::setApiKey(config('v2board.stripe_sk_live'));
|
||||||
$source = Source::create([
|
$source = Source::create([
|
||||||
@ -390,7 +390,7 @@ class OrderController extends Controller
|
|||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
if (!$source['redirect']['url']) {
|
if (!$source['redirect']['url']) {
|
||||||
abort(500, '支付网关请求失败');
|
abort(500, __('user.order.stripeAlipay.gateway_request_failed'));
|
||||||
}
|
}
|
||||||
return $source['redirect']['url'];
|
return $source['redirect']['url'];
|
||||||
}
|
}
|
||||||
@ -400,7 +400,7 @@ class OrderController extends Controller
|
|||||||
$currency = config('v2board.stripe_currency', 'hkd');
|
$currency = config('v2board.stripe_currency', 'hkd');
|
||||||
$exchange = Helper::exchange('CNY', strtoupper($currency));
|
$exchange = Helper::exchange('CNY', strtoupper($currency));
|
||||||
if (!$exchange) {
|
if (!$exchange) {
|
||||||
abort(500, '货币转换超时,请稍后再试');
|
abort(500, __('user.order.stripeWepay.currency_convert_timeout'));
|
||||||
}
|
}
|
||||||
Stripe::setApiKey(config('v2board.stripe_sk_live'));
|
Stripe::setApiKey(config('v2board.stripe_sk_live'));
|
||||||
$source = Source::create([
|
$source = Source::create([
|
||||||
@ -417,7 +417,7 @@ class OrderController extends Controller
|
|||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
if (!$source['wechat']['qr_code_url']) {
|
if (!$source['wechat']['qr_code_url']) {
|
||||||
abort(500, '支付网关请求失败');
|
abort(500, __('user.order.stripeWepay.gateway_request_failed'));
|
||||||
}
|
}
|
||||||
return $source['wechat']['qr_code_url'];
|
return $source['wechat']['qr_code_url'];
|
||||||
}
|
}
|
||||||
@ -427,7 +427,7 @@ class OrderController extends Controller
|
|||||||
$currency = config('v2board.stripe_currency', 'hkd');
|
$currency = config('v2board.stripe_currency', 'hkd');
|
||||||
$exchange = Helper::exchange('CNY', strtoupper($currency));
|
$exchange = Helper::exchange('CNY', strtoupper($currency));
|
||||||
if (!$exchange) {
|
if (!$exchange) {
|
||||||
abort(500, '货币转换超时,请稍后再试');
|
abort(500, __('user.order.stripeCard.currency_convert_timeout'));
|
||||||
}
|
}
|
||||||
Stripe::setApiKey(config('v2board.stripe_sk_live'));
|
Stripe::setApiKey(config('v2board.stripe_sk_live'));
|
||||||
try {
|
try {
|
||||||
@ -442,11 +442,11 @@ class OrderController extends Controller
|
|||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
abort(500, '遇到了点问题,请刷新页面稍后再试');
|
abort(500, __('user.order.stripeCard.was_problem'));
|
||||||
}
|
}
|
||||||
info($charge);
|
info($charge);
|
||||||
if (!$charge->paid) {
|
if (!$charge->paid) {
|
||||||
abort(500, '扣款失败,请检查信用卡信息');
|
abort(500, __('user.order.stripeCard.deduction_failed'));
|
||||||
}
|
}
|
||||||
return $charge->paid;
|
return $charge->paid;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ class PlanController extends Controller
|
|||||||
$plan = Plan::where('id', $request->input('id'))
|
$plan = Plan::where('id', $request->input('id'))
|
||||||
->first();
|
->first();
|
||||||
if (!$plan) {
|
if (!$plan) {
|
||||||
abort(500, '该订阅不存在');
|
abort(500, __('user.plan.fetch.plan_not_exist'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => $plan
|
'data' => $plan
|
||||||
|
@ -23,7 +23,7 @@ class TicketController extends Controller
|
|||||||
->where('user_id', $request->session()->get('id'))
|
->where('user_id', $request->session()->get('id'))
|
||||||
->first();
|
->first();
|
||||||
if (!$ticket) {
|
if (!$ticket) {
|
||||||
abort(500, '工单不存在');
|
abort(500, __('user.ticket.fetch.ticket_not_exist'));
|
||||||
}
|
}
|
||||||
$ticket['message'] = TicketMessage::where('ticket_id', $ticket->id)->get();
|
$ticket['message'] = TicketMessage::where('ticket_id', $ticket->id)->get();
|
||||||
for ($i = 0; $i < count($ticket['message']); $i++) {
|
for ($i = 0; $i < count($ticket['message']); $i++) {
|
||||||
@ -56,7 +56,7 @@ class TicketController extends Controller
|
|||||||
{
|
{
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
if ((int)Ticket::where('status', 0)->where('user_id', $request->session()->get('id'))->count()) {
|
if ((int)Ticket::where('status', 0)->where('user_id', $request->session()->get('id'))->count()) {
|
||||||
abort(500, '存在其他工单尚未处理');
|
abort(500, __('user.ticket.save.exist_other_open_ticket'));
|
||||||
}
|
}
|
||||||
$ticket = Ticket::create(array_merge($request->only([
|
$ticket = Ticket::create(array_merge($request->only([
|
||||||
'subject',
|
'subject',
|
||||||
@ -67,7 +67,7 @@ class TicketController extends Controller
|
|||||||
]));
|
]));
|
||||||
if (!$ticket) {
|
if (!$ticket) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '工单创建失败');
|
abort(500, __('user.ticket.save.ticket_create_failed'));
|
||||||
}
|
}
|
||||||
$ticketMessage = TicketMessage::create([
|
$ticketMessage = TicketMessage::create([
|
||||||
'user_id' => $request->session()->get('id'),
|
'user_id' => $request->session()->get('id'),
|
||||||
@ -76,7 +76,7 @@ class TicketController extends Controller
|
|||||||
]);
|
]);
|
||||||
if (!$ticketMessage) {
|
if (!$ticketMessage) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '工单创建失败');
|
abort(500, __('user.ticket.save.ticket_create_failed'));
|
||||||
}
|
}
|
||||||
DB::commit();
|
DB::commit();
|
||||||
$this->sendNotify($ticket, $ticketMessage);
|
$this->sendNotify($ticket, $ticketMessage);
|
||||||
@ -88,22 +88,22 @@ class TicketController extends Controller
|
|||||||
public function reply(Request $request)
|
public function reply(Request $request)
|
||||||
{
|
{
|
||||||
if (empty($request->input('id'))) {
|
if (empty($request->input('id'))) {
|
||||||
abort(500, '参数错误');
|
abort(500, __('user.ticket.reply.params_wrong'));
|
||||||
}
|
}
|
||||||
if (empty($request->input('message'))) {
|
if (empty($request->input('message'))) {
|
||||||
abort(500, '消息不能为空');
|
abort(500, __('user.ticket.reply.message_not_empty'));
|
||||||
}
|
}
|
||||||
$ticket = Ticket::where('id', $request->input('id'))
|
$ticket = Ticket::where('id', $request->input('id'))
|
||||||
->where('user_id', $request->session()->get('id'))
|
->where('user_id', $request->session()->get('id'))
|
||||||
->first();
|
->first();
|
||||||
if (!$ticket) {
|
if (!$ticket) {
|
||||||
abort(500, '工单不存在');
|
abort(500, __('user.ticket.reply.ticket_not_exist'));
|
||||||
}
|
}
|
||||||
if ($ticket->status) {
|
if ($ticket->status) {
|
||||||
abort(500, '工单已关闭,无法回复');
|
abort(500, __('user.ticket.reply.ticket_close_not_reply'));
|
||||||
}
|
}
|
||||||
if ($request->session()->get('id') == $this->getLastMessage($ticket->id)->user_id) {
|
if ($request->session()->get('id') == $this->getLastMessage($ticket->id)->user_id) {
|
||||||
abort(500, '请等待技术支持回复');
|
abort(500, __('user.ticket.reply.wait_reply'));
|
||||||
}
|
}
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
$ticketMessage = TicketMessage::create([
|
$ticketMessage = TicketMessage::create([
|
||||||
@ -114,7 +114,7 @@ class TicketController extends Controller
|
|||||||
$ticket->last_reply_user_id = $request->session()->get('id');
|
$ticket->last_reply_user_id = $request->session()->get('id');
|
||||||
if (!$ticketMessage || !$ticket->save()) {
|
if (!$ticketMessage || !$ticket->save()) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '工单回复失败');
|
abort(500, __('user.ticket.reply.ticket_reply_failed'));
|
||||||
}
|
}
|
||||||
DB::commit();
|
DB::commit();
|
||||||
$this->sendNotify($ticket, $ticketMessage);
|
$this->sendNotify($ticket, $ticketMessage);
|
||||||
@ -127,17 +127,17 @@ class TicketController extends Controller
|
|||||||
public function close(Request $request)
|
public function close(Request $request)
|
||||||
{
|
{
|
||||||
if (empty($request->input('id'))) {
|
if (empty($request->input('id'))) {
|
||||||
abort(500, '参数错误');
|
abort(500, __('user.ticket.close.params_wrong'));
|
||||||
}
|
}
|
||||||
$ticket = Ticket::where('id', $request->input('id'))
|
$ticket = Ticket::where('id', $request->input('id'))
|
||||||
->where('user_id', $request->session()->get('id'))
|
->where('user_id', $request->session()->get('id'))
|
||||||
->first();
|
->first();
|
||||||
if (!$ticket) {
|
if (!$ticket) {
|
||||||
abort(500, '工单不存在');
|
abort(500, __('user.ticket.close.ticket_not_exist'));
|
||||||
}
|
}
|
||||||
$ticket->status = 1;
|
$ticket->status = 1;
|
||||||
if (!$ticket->save()) {
|
if (!$ticket->save()) {
|
||||||
abort(500, '关闭失败');
|
abort(500, __('user.ticket.close.close_failed'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => true
|
'data' => true
|
||||||
@ -160,15 +160,15 @@ class TicketController extends Controller
|
|||||||
Dict::WITHDRAW_METHOD_WHITELIST_DEFAULT
|
Dict::WITHDRAW_METHOD_WHITELIST_DEFAULT
|
||||||
)
|
)
|
||||||
)) {
|
)) {
|
||||||
abort(500, '不支持的提现方式');
|
abort(500, __('user.ticket.withdraw.not_support_withdraw_method'));
|
||||||
}
|
}
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
$limit = config('v2board.commission_withdraw_limit', 100);
|
$limit = config('v2board.commission_withdraw_limit', 100);
|
||||||
if ($limit > ($user->commission_balance / 100)) {
|
if ($limit > ($user->commission_balance / 100)) {
|
||||||
abort(500, "当前系统要求的提现门槛佣金需为{$limit}CNY");
|
abort(500, __('user.ticket.withdraw.system_require_withdraw_limit', ['limit' => $limit]));
|
||||||
}
|
}
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
$subject = '[提现申请]本工单由系统发出';
|
$subject = __('user.ticket.withdraw.ticket_subject');
|
||||||
$ticket = Ticket::create([
|
$ticket = Ticket::create([
|
||||||
'subject' => $subject,
|
'subject' => $subject,
|
||||||
'level' => 2,
|
'level' => 2,
|
||||||
@ -177,9 +177,12 @@ class TicketController extends Controller
|
|||||||
]);
|
]);
|
||||||
if (!$ticket) {
|
if (!$ticket) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '工单创建失败');
|
abort(500, __('user.ticket.withdraw.ticket_create_failed'));
|
||||||
}
|
}
|
||||||
$message = "提现方式:{$request->input('withdraw_method')}\r\n提现账号:{$request->input('withdraw_account')}\r\n";
|
$message = __('user.ticket.withdraw.ticket_message', [
|
||||||
|
'method' => $request->input('withdraw_method'),
|
||||||
|
'account' => $request->input('withdraw_account')
|
||||||
|
]);
|
||||||
$ticketMessage = TicketMessage::create([
|
$ticketMessage = TicketMessage::create([
|
||||||
'user_id' => $request->session()->get('id'),
|
'user_id' => $request->session()->get('id'),
|
||||||
'ticket_id' => $ticket->id,
|
'ticket_id' => $ticket->id,
|
||||||
@ -187,7 +190,7 @@ class TicketController extends Controller
|
|||||||
]);
|
]);
|
||||||
if (!$ticketMessage) {
|
if (!$ticketMessage) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '工单创建失败');
|
abort(500, __('user.ticket.withdraw.ticket_create_failed'));
|
||||||
}
|
}
|
||||||
DB::commit();
|
DB::commit();
|
||||||
$this->sendNotify($ticket, $ticketMessage);
|
$this->sendNotify($ticket, $ticketMessage);
|
||||||
|
@ -28,19 +28,19 @@ class UserController extends Controller
|
|||||||
{
|
{
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
abort(500, '该用户不存在');
|
abort(500, __('user.user.changePassword.user_not_exist'));
|
||||||
}
|
}
|
||||||
if (!Helper::multiPasswordVerify(
|
if (!Helper::multiPasswordVerify(
|
||||||
$user->password_algo,
|
$user->password_algo,
|
||||||
$request->input('old_password'),
|
$request->input('old_password'),
|
||||||
$user->password)
|
$user->password)
|
||||||
) {
|
) {
|
||||||
abort(500, '旧密码有误');
|
abort(500, __('user.user.changePassword.old_password_wrong'));
|
||||||
}
|
}
|
||||||
$user->password = password_hash($request->input('new_password'), PASSWORD_DEFAULT);
|
$user->password = password_hash($request->input('new_password'), PASSWORD_DEFAULT);
|
||||||
$user->password_algo = NULL;
|
$user->password_algo = NULL;
|
||||||
if (!$user->save()) {
|
if (!$user->save()) {
|
||||||
abort(500, '保存失败');
|
abort(500, __('user.user.changePassword.save_failed'));
|
||||||
}
|
}
|
||||||
$request->session()->flush();
|
$request->session()->flush();
|
||||||
return response([
|
return response([
|
||||||
@ -69,7 +69,7 @@ class UserController extends Controller
|
|||||||
])
|
])
|
||||||
->first();
|
->first();
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
abort(500, '该用户不存在');
|
abort(500, __('user.user.info.user_not_exist'));
|
||||||
}
|
}
|
||||||
$user['avatar_url'] = 'https://cdn.v2ex.com/gravatar/' . md5($user->email) . '?s=64&d=identicon';
|
$user['avatar_url'] = 'https://cdn.v2ex.com/gravatar/' . md5($user->email) . '?s=64&d=identicon';
|
||||||
return response([
|
return response([
|
||||||
@ -109,12 +109,12 @@ class UserController extends Controller
|
|||||||
])
|
])
|
||||||
->first();
|
->first();
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
abort(500, '该用户不存在');
|
abort(500, __('user.user.getSubscribe.user_not_exist'));
|
||||||
}
|
}
|
||||||
if ($user->plan_id) {
|
if ($user->plan_id) {
|
||||||
$user['plan'] = Plan::find($user->plan_id);
|
$user['plan'] = Plan::find($user->plan_id);
|
||||||
if (!$user['plan']) {
|
if (!$user['plan']) {
|
||||||
abort(500, '订阅计划不存在');
|
abort(500, __('user.user.getSubscribe.plan_not_exist'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$user['subscribe_url'] = config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'];
|
$user['subscribe_url'] = config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'];
|
||||||
@ -128,12 +128,12 @@ class UserController extends Controller
|
|||||||
{
|
{
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
abort(500, '该用户不存在');
|
abort(500, __('user.user.resetSecurity.user_not_exist'));
|
||||||
}
|
}
|
||||||
$user->uuid = Helper::guid(true);
|
$user->uuid = Helper::guid(true);
|
||||||
$user->token = Helper::guid();
|
$user->token = Helper::guid();
|
||||||
if (!$user->save()) {
|
if (!$user->save()) {
|
||||||
abort(500, '重置失败');
|
abort(500, __('user.user.resetSecurity.reset_failed'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user->token
|
'data' => config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user->token
|
||||||
@ -149,12 +149,12 @@ class UserController extends Controller
|
|||||||
|
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
abort(500, '该用户不存在');
|
abort(500, __('user.user.update.user_not_exist'));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$user->update($updateData);
|
$user->update($updateData);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
abort(500, '保存失败');
|
abort(500, __('user.user.update.save_failed'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return response([
|
return response([
|
||||||
@ -166,18 +166,18 @@ class UserController extends Controller
|
|||||||
{
|
{
|
||||||
$user = User::find($request->session()->get('id'));
|
$user = User::find($request->session()->get('id'));
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
abort(500, '该用户不存在');
|
abort(500, __('user.user.transfer.user_not_exist'));
|
||||||
}
|
}
|
||||||
if ($request->input('transfer_amount') <= 0) {
|
if ($request->input('transfer_amount') <= 0) {
|
||||||
abort(500, '参数错误');
|
abort(500, __('user.user.transfer.params_wrong'));
|
||||||
}
|
}
|
||||||
if ($request->input('transfer_amount') > $user->commission_balance) {
|
if ($request->input('transfer_amount') > $user->commission_balance) {
|
||||||
abort(500, '推广佣金余额不足');
|
abort(500, __('user.user.transfer.insufficient_commission_balance'));
|
||||||
}
|
}
|
||||||
$user->commission_balance = $user->commission_balance - $request->input('transfer_amount');
|
$user->commission_balance = $user->commission_balance - $request->input('transfer_amount');
|
||||||
$user->balance = $user->balance + $request->input('transfer_amount');
|
$user->balance = $user->balance + $request->input('transfer_amount');
|
||||||
if (!$user->save()) {
|
if (!$user->save()) {
|
||||||
abort(500, '划转失败');
|
abort(500, __('user.user.transfer.transfer_failed'));
|
||||||
}
|
}
|
||||||
return response([
|
return response([
|
||||||
'data' => true
|
'data' => true
|
||||||
|
@ -43,6 +43,7 @@ class Kernel extends HttpKernel
|
|||||||
\Illuminate\Session\Middleware\StartSession::class,
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
\App\Http\Middleware\ForceJson::class,
|
\App\Http\Middleware\ForceJson::class,
|
||||||
\App\Http\Middleware\CORS::class,
|
\App\Http\Middleware\CORS::class,
|
||||||
|
\App\Http\Middleware\Language::class,
|
||||||
'bindings',
|
'bindings',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
17
app/Http/Middleware/Language.php
Executable file
17
app/Http/Middleware/Language.php
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
|
||||||
|
class Language
|
||||||
|
{
|
||||||
|
public function handle($request, Closure $next)
|
||||||
|
{
|
||||||
|
if ($request->header('content-language')) {
|
||||||
|
App::setLocale($request->header('content-language'));
|
||||||
|
}
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
@ -22,6 +22,12 @@ class User
|
|||||||
$request->session()->put('id', $user->id);
|
$request->session()->put('id', $user->id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if ($request->input('lang')) {
|
||||||
|
// $request->session()->put('lang', $request->input('lang'));
|
||||||
|
// }
|
||||||
|
// if ($request->session()->get('lang')) {
|
||||||
|
// App::setLocale($request->session()->get('lang'));
|
||||||
|
// }
|
||||||
if (!$request->session()->get('id')) {
|
if (!$request->session()->get('id')) {
|
||||||
abort(403, '未登录或登陆已过期');
|
abort(403, '未登录或登陆已过期');
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'locale' => 'en',
|
'locale' => 'zh-CN',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -93,7 +93,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'fallback_locale' => 'en',
|
'fallback_locale' => 'zh-CN',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -106,7 +106,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'faker_locale' => 'en_US',
|
'faker_locale' => 'zh-CN',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
2
public/assets/user/components.async.js
vendored
2
public/assets/user/components.async.js
vendored
File diff suppressed because one or more lines are too long
1
public/assets/user/components.chunk.css
vendored
1
public/assets/user/components.chunk.css
vendored
File diff suppressed because one or more lines are too long
2
public/assets/user/umi.js
vendored
2
public/assets/user/umi.js
vendored
File diff suppressed because one or more lines are too long
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Authentication Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used during authentication for various
|
|
||||||
| messages that we need to display to the user. You are free to modify
|
|
||||||
| these language lines according to your application's requirements.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'failed' => 'These credentials do not match our records.',
|
|
||||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
|
||||||
|
|
||||||
];
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Pagination Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used by the paginator library to build
|
|
||||||
| the simple pagination links. You are free to change them to anything
|
|
||||||
| you want to customize your views to better match your application.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'previous' => '« Previous',
|
|
||||||
'next' => 'Next »',
|
|
||||||
|
|
||||||
];
|
|
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Password Reset Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are the default lines which match reasons
|
|
||||||
| that are given by the password broker for a password update attempt
|
|
||||||
| has failed, such as for an invalid token or invalid new password.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'reset' => 'Your password has been reset!',
|
|
||||||
'sent' => 'We have e-mailed your password reset link!',
|
|
||||||
'token' => 'This password reset token is invalid.',
|
|
||||||
'user' => "We can't find a user with that e-mail address.",
|
|
||||||
|
|
||||||
];
|
|
@ -1,150 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Validation Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines contain the default error messages used by
|
|
||||||
| the validator class. Some of these rules have multiple versions such
|
|
||||||
| as the size rules. Feel free to tweak each of these messages here.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'accepted' => 'The :attribute must be accepted.',
|
|
||||||
'active_url' => 'The :attribute is not a valid URL.',
|
|
||||||
'after' => 'The :attribute must be a date after :date.',
|
|
||||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
|
||||||
'alpha' => 'The :attribute may only contain letters.',
|
|
||||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
|
|
||||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
|
||||||
'array' => 'The :attribute must be an array.',
|
|
||||||
'before' => 'The :attribute must be a date before :date.',
|
|
||||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
|
||||||
'between' => [
|
|
||||||
'numeric' => 'The :attribute must be between :min and :max.',
|
|
||||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
|
||||||
'string' => 'The :attribute must be between :min and :max characters.',
|
|
||||||
'array' => 'The :attribute must have between :min and :max items.',
|
|
||||||
],
|
|
||||||
'boolean' => 'The :attribute field must be true or false.',
|
|
||||||
'confirmed' => 'The :attribute confirmation does not match.',
|
|
||||||
'date' => 'The :attribute is not a valid date.',
|
|
||||||
'date_equals' => 'The :attribute must be a date equal to :date.',
|
|
||||||
'date_format' => 'The :attribute does not match the format :format.',
|
|
||||||
'different' => 'The :attribute and :other must be different.',
|
|
||||||
'digits' => 'The :attribute must be :digits digits.',
|
|
||||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
|
||||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
|
||||||
'distinct' => 'The :attribute field has a duplicate value.',
|
|
||||||
'email' => 'The :attribute must be a valid email address.',
|
|
||||||
'ends_with' => 'The :attribute must end with one of the following: :values',
|
|
||||||
'exists' => 'The selected :attribute is invalid.',
|
|
||||||
'file' => 'The :attribute must be a file.',
|
|
||||||
'filled' => 'The :attribute field must have a value.',
|
|
||||||
'gt' => [
|
|
||||||
'numeric' => 'The :attribute must be greater than :value.',
|
|
||||||
'file' => 'The :attribute must be greater than :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be greater than :value characters.',
|
|
||||||
'array' => 'The :attribute must have more than :value items.',
|
|
||||||
],
|
|
||||||
'gte' => [
|
|
||||||
'numeric' => 'The :attribute must be greater than or equal :value.',
|
|
||||||
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be greater than or equal :value characters.',
|
|
||||||
'array' => 'The :attribute must have :value items or more.',
|
|
||||||
],
|
|
||||||
'image' => 'The :attribute must be an image.',
|
|
||||||
'in' => 'The selected :attribute is invalid.',
|
|
||||||
'in_array' => 'The :attribute field does not exist in :other.',
|
|
||||||
'integer' => 'The :attribute must be an integer.',
|
|
||||||
'ip' => 'The :attribute must be a valid IP address.',
|
|
||||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
|
||||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
|
||||||
'json' => 'The :attribute must be a valid JSON string.',
|
|
||||||
'lt' => [
|
|
||||||
'numeric' => 'The :attribute must be less than :value.',
|
|
||||||
'file' => 'The :attribute must be less than :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be less than :value characters.',
|
|
||||||
'array' => 'The :attribute must have less than :value items.',
|
|
||||||
],
|
|
||||||
'lte' => [
|
|
||||||
'numeric' => 'The :attribute must be less than or equal :value.',
|
|
||||||
'file' => 'The :attribute must be less than or equal :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be less than or equal :value characters.',
|
|
||||||
'array' => 'The :attribute must not have more than :value items.',
|
|
||||||
],
|
|
||||||
'max' => [
|
|
||||||
'numeric' => 'The :attribute may not be greater than :max.',
|
|
||||||
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
|
||||||
'string' => 'The :attribute may not be greater than :max characters.',
|
|
||||||
'array' => 'The :attribute may not have more than :max items.',
|
|
||||||
],
|
|
||||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
|
||||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
|
||||||
'min' => [
|
|
||||||
'numeric' => 'The :attribute must be at least :min.',
|
|
||||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
|
||||||
'string' => 'The :attribute must be at least :min characters.',
|
|
||||||
'array' => 'The :attribute must have at least :min items.',
|
|
||||||
],
|
|
||||||
'not_in' => 'The selected :attribute is invalid.',
|
|
||||||
'not_regex' => 'The :attribute format is invalid.',
|
|
||||||
'numeric' => 'The :attribute must be a number.',
|
|
||||||
'present' => 'The :attribute field must be present.',
|
|
||||||
'regex' => 'The :attribute format is invalid.',
|
|
||||||
'required' => 'The :attribute field is required.',
|
|
||||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
|
||||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
|
||||||
'required_with' => 'The :attribute field is required when :values is present.',
|
|
||||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
|
||||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
|
||||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
|
||||||
'same' => 'The :attribute and :other must match.',
|
|
||||||
'size' => [
|
|
||||||
'numeric' => 'The :attribute must be :size.',
|
|
||||||
'file' => 'The :attribute must be :size kilobytes.',
|
|
||||||
'string' => 'The :attribute must be :size characters.',
|
|
||||||
'array' => 'The :attribute must contain :size items.',
|
|
||||||
],
|
|
||||||
'starts_with' => 'The :attribute must start with one of the following: :values',
|
|
||||||
'string' => 'The :attribute must be a string.',
|
|
||||||
'timezone' => 'The :attribute must be a valid zone.',
|
|
||||||
'unique' => 'The :attribute has already been taken.',
|
|
||||||
'uploaded' => 'The :attribute failed to upload.',
|
|
||||||
'url' => 'The :attribute format is invalid.',
|
|
||||||
'uuid' => 'The :attribute must be a valid UUID.',
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Custom Validation Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may specify custom validation messages for attributes using the
|
|
||||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
|
||||||
| specify a specific custom language line for a given attribute rule.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'custom' => [
|
|
||||||
'attribute-name' => [
|
|
||||||
'rule-name' => 'custom-message',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Custom Validation Attributes
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used to swap our attribute placeholder
|
|
||||||
| with something more reader friendly such as "E-Mail Address" instead
|
|
||||||
| of "email". This simply helps us make our message more expressive.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'attributes' => [],
|
|
||||||
|
|
||||||
];
|
|
37
resources/lang/zh-CN/passport.php
Normal file
37
resources/lang/zh-CN/passport.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'auth' => [
|
||||||
|
'register' => [
|
||||||
|
'verify_incorrect' => '验证码有误',
|
||||||
|
'email_suffix_not_in_whitelist' => '邮箱后缀不处于白名单中',
|
||||||
|
'no_support_gmail_alias' => '不支持Gmail别名邮箱',
|
||||||
|
'close_register' => '本站已关闭注册',
|
||||||
|
'must_use_invite_code' => '必须使用邀请码才可以注册',
|
||||||
|
'email_code_not_empty' => '邮箱验证码不能为空',
|
||||||
|
'email_code_incorrect' => '邮箱验证码有误',
|
||||||
|
'email_exist_system' => '邮箱已存在系统中',
|
||||||
|
'invalid_invite_code' => '邀请码无效',
|
||||||
|
'register_failed' => '注册失败'
|
||||||
|
],
|
||||||
|
'login' => [
|
||||||
|
'wrong_email_or_password' => '邮箱或密码错误',
|
||||||
|
'account_been_discontinued' => '该账户已被停止使用'
|
||||||
|
],
|
||||||
|
'getQuickLoginUrl' => [
|
||||||
|
'wrong_token' => '令牌有误'
|
||||||
|
],
|
||||||
|
'forget' => [
|
||||||
|
'email_verification_code_incorrect' => '邮箱验证码有误',
|
||||||
|
'email_not_exist_system' => '该邮箱不存在系统中',
|
||||||
|
'reset_failed' => '重置失败'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'comm' => [
|
||||||
|
'sendEmailVerify' => [
|
||||||
|
'verification_code_incorrect.' => '验证码有误',
|
||||||
|
'code_sent_request_later' => '验证码已发送,请过一会再请求',
|
||||||
|
'email_verification_code' => '邮箱验证码'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
131
resources/lang/zh-CN/user.php
Normal file
131
resources/lang/zh-CN/user.php
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'user' => [
|
||||||
|
'changePassword' => [
|
||||||
|
'user_not_exist' => '该用户不存在',
|
||||||
|
'old_password_wrong' => '旧密码有误',
|
||||||
|
'save_failed' => '保存失败'
|
||||||
|
],
|
||||||
|
'info' => [
|
||||||
|
'user_not_exist' => '该用户不存在'
|
||||||
|
],
|
||||||
|
'getSubscribe' => [
|
||||||
|
'user_not_exist' => '该用户不存在',
|
||||||
|
'plan_not_exist' => '订阅计划不存在',
|
||||||
|
],
|
||||||
|
'resetSecurity' => [
|
||||||
|
'user_not_exist' => '该用户不存在',
|
||||||
|
'reset_failed' => '重置失败'
|
||||||
|
],
|
||||||
|
'update' => [
|
||||||
|
'user_not_exist' => '该用户不存在',
|
||||||
|
'save_failed' => '保存失败',
|
||||||
|
],
|
||||||
|
'transfer' => [
|
||||||
|
'user_not_exist' => '该用户不存在',
|
||||||
|
'params_wrong' => '参数错误',
|
||||||
|
'insufficient_commission_balance' => '推广佣金余额不足',
|
||||||
|
'transfer_failed' => '划转失败'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'ticket' => [
|
||||||
|
'fetch' => [
|
||||||
|
'ticket_not_exist' => '工单不存在',
|
||||||
|
],
|
||||||
|
'save' => [
|
||||||
|
'exist_other_open_ticket' => '存在其他工单尚未处理',
|
||||||
|
'ticket_create_failed' => '工单创建失败',
|
||||||
|
],
|
||||||
|
'reply' => [
|
||||||
|
'params_wrong' => '参数错误',
|
||||||
|
'message_not_empty' => '消息不能为空',
|
||||||
|
'ticket_not_exist' => '工单不存在',
|
||||||
|
'ticket_close_not_reply' => '工单已关闭,无法回复',
|
||||||
|
'wait_reply' => '请等待技术支持回复',
|
||||||
|
'ticket_reply_failed' => '工单回复失败',
|
||||||
|
],
|
||||||
|
'close' => [
|
||||||
|
'params_wrong' => '参数错误',
|
||||||
|
'ticket_not_exist' => '工单不存在',
|
||||||
|
'close_failed' => '关闭失败',
|
||||||
|
],
|
||||||
|
'withdraw' => [
|
||||||
|
'not_support_withdraw_method' => '不支持的提现方式',
|
||||||
|
'system_require_withdraw_limit' => '当前系统要求的提现门槛佣金需为:limitCNY',
|
||||||
|
'ticket_subject' => '[提现申请]本工单由系统发出',
|
||||||
|
'ticket_create_failed' => '工单创建失败',
|
||||||
|
'ticket_message' => "提现方式::method\r\n提现账号::account\r\n"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'plan' => [
|
||||||
|
'fetch' => [
|
||||||
|
'plan_not_exist' => '订阅计划不存在'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'order' => [
|
||||||
|
'details' => [
|
||||||
|
'order_not_exist' => '订单不存在',
|
||||||
|
'plan_not_exist' => '订阅计划不存在',
|
||||||
|
],
|
||||||
|
'save' => [
|
||||||
|
'plan_not_exist' => '订阅计划不存在',
|
||||||
|
'exist_open_order' => '您有未付款或开通中的订单,请稍后或取消再试',
|
||||||
|
'plan_stop_sell' => '该订阅已售罄,请更换其他订阅',
|
||||||
|
'plan_stop_renew' => '该订阅无法续费,请更换其他订阅',
|
||||||
|
'plan_stop' => '该订阅周期无法进行购买,请选择其他周期',
|
||||||
|
'plan_exist_not_buy_package' => '订阅已过期或无有效订阅,无法购买重置包',
|
||||||
|
'plan_expired' => '订阅已过期,请更换其他订阅',
|
||||||
|
'coupon_use_failed' => '优惠券使用失败',
|
||||||
|
'insufficient_balance' => '余额不足',
|
||||||
|
'order_create_failed' => '订单创建失败'
|
||||||
|
],
|
||||||
|
'checkout' => [
|
||||||
|
'order_not_exist_or_paid' => '订单不存在或已支付',
|
||||||
|
'pay_method_not_use' => '支付方式不可用',
|
||||||
|
],
|
||||||
|
'check' => [
|
||||||
|
'order_not_exist' => '订单不存在'
|
||||||
|
],
|
||||||
|
'cancel' => [
|
||||||
|
'params_wrong' => '参数有误',
|
||||||
|
'order_not_exist' => '订单不存在',
|
||||||
|
'only_cancel_pending_order' => '只可以取消待支付订单',
|
||||||
|
'cancel_failed' => '取消失败',
|
||||||
|
],
|
||||||
|
'stripeAlipay' => [
|
||||||
|
'currency_convert_timeout' => '货币转换超时,请稍后再试',
|
||||||
|
'gateway_request_failed' => '支付网关请求失败',
|
||||||
|
],
|
||||||
|
'stripeWepay' => [
|
||||||
|
'currency_convert_timeout' => '货币转换超时,请稍后再试',
|
||||||
|
'gateway_request_failed' => '支付网关请求失败',
|
||||||
|
],
|
||||||
|
'stripeCard' => [
|
||||||
|
'currency_convert_timeout' => '货币转换超时,请稍后再试',
|
||||||
|
'was_problem' => '遇到了点问题,请刷新页面稍后再试',
|
||||||
|
'deduction_failed' => '扣款失败,请检查信用卡信息'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'knowledge' => [
|
||||||
|
'fetch' => [
|
||||||
|
'knowledge_not_exist' => '知识不存在',
|
||||||
|
'apple_id_must_be_plan' => '没有有效订阅无法使用本站提供的AppleID'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'invite' => [
|
||||||
|
'save' => [
|
||||||
|
'invite_create_limit' => '已达到创建数量上限'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'coupon' => [
|
||||||
|
'check' => [
|
||||||
|
'coupon_not_empty' => '优惠券码不能为空',
|
||||||
|
'coupon_invalid' => '优惠券无效',
|
||||||
|
'coupon_not_available_by_number' => '优惠券已无可用次数',
|
||||||
|
'coupon_not_available_by_time' => '优惠券还未到可用时间',
|
||||||
|
'coupon_expired' => '优惠券已过期',
|
||||||
|
'coupon_limit_plan' => '这个计划无法使用该优惠码'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
Loading…
Reference in New Issue
Block a user