From 3014ef22602f16c8343276fce867c2b8eaa4e09a Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Wed, 13 May 2020 21:20:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Tasks/OrderTask.php | 67 ++++++---- app/Http/Admin/Services/Student.php | 2 + app/Http/Admin/Views/index.volt | 3 +- app/Http/Admin/Views/order/show.volt | 6 +- app/Http/Admin/Views/refund/show.volt | 6 +- app/Http/Admin/Views/student/list.volt | 8 +- app/Http/Admin/Views/student/search.volt | 6 +- app/Http/Admin/Views/trade/show.volt | 12 +- app/Http/Admin/Views/user/list.volt | 25 ++-- app/Http/Admin/Views/user/search.volt | 4 +- app/Http/Web/Controllers/OrderController.php | 5 +- app/Http/Web/Controllers/RefundController.php | 6 +- app/Library/CsrfToken.php | 52 ++++++++ app/Models/CourseUser.php | 10 +- app/Models/Learning.php | 9 +- app/Providers/{Security.php => CsrfToken.php} | 8 +- app/Repos/Learning.php | 4 + app/Services/Frontend/Order/OrderConfirm.php | 5 +- .../Frontend/Refund/RefundConfirm.php | 7 +- app/Services/RefundCalculator.php | 120 ++++++++++++++++++ app/Validators/Security.php | 5 +- app/Validators/Trade.php | 4 +- bootstrap/HttpKernel.php | 4 +- config/errors.php | 8 +- public/static/admin/js/common.js | 6 +- 25 files changed, 294 insertions(+), 98 deletions(-) create mode 100644 app/Library/CsrfToken.php rename app/Providers/{Security.php => CsrfToken.php} (50%) create mode 100644 app/Services/RefundCalculator.php diff --git a/app/Console/Tasks/OrderTask.php b/app/Console/Tasks/OrderTask.php index bc384afd..9f938b5b 100644 --- a/app/Console/Tasks/OrderTask.php +++ b/app/Console/Tasks/OrderTask.php @@ -2,12 +2,13 @@ namespace App\Console\Tasks; +use App\Models\ChapterUser as ChapterUserModel; use App\Models\CourseUser as CourseUserModel; +use App\Models\Learning as LearningModel; use App\Models\Order as OrderModel; use App\Models\Refund as RefundModel; use App\Models\Task as TaskModel; use App\Models\Trade as TradeModel; -use App\Repos\Course as CourseRepo; use App\Repos\CourseUser as CourseUserRepo; use App\Repos\Order as OrderRepo; use App\Repos\User as UserRepo; @@ -87,9 +88,6 @@ class OrderTask extends Task } } - /** - * @param OrderModel $order - */ protected function handleCourseOrder(OrderModel $order) { /** @@ -114,9 +112,6 @@ class OrderTask extends Task $this->handleCourseHistory($data['course_id'], $data['user_id']); } - /** - * @param OrderModel $order - */ protected function handlePackageOrder(OrderModel $order) { /** @@ -144,9 +139,6 @@ class OrderTask extends Task } } - /** - * @param OrderModel $order - */ protected function handleVipOrder(OrderModel $order) { $userRepo = new UserRepo(); @@ -165,17 +157,11 @@ class OrderTask extends Task } } - /** - * @param OrderModel $order - */ protected function handleRewardOrder(OrderModel $order) { } - /** - * @param OrderModel $order - */ protected function handleOrderNotice(OrderModel $order) { $smser = new OrderSmser(); @@ -183,9 +169,6 @@ class OrderTask extends Task $smser->handle($order); } - /** - * @param OrderModel $order - */ protected function handleOrderRefund(OrderModel $order) { $trade = $this->findFinishedTrade($order->id); @@ -205,10 +188,6 @@ class OrderTask extends Task $refund->create(); } - /** - * @param int $courseId - * @param int $userId - */ protected function handleCourseHistory($courseId, $userId) { $courseUserRepo = new CourseUserRepo(); @@ -219,17 +198,49 @@ class OrderTask extends Task $courseUser->update(['deleted' => 1]); } - $courseRepo = new CourseRepo(); + $chapterUsers = $this->findPlanChapterUsers($courseId, $userId); - $userLearnings = $courseRepo->findUserLearnings($courseId, $userId); + if ($chapterUsers->count() > 0) { + $chapterUsers->update(['deleted' => 1]); + } - if ($userLearnings->count() > 0) { - $userLearnings->update(['deleted' => 1]); + $learnings = $this->findPlanLearnings($courseId, $userId); + + if ($learnings->count() > 0) { + $learnings->update(['deleted' => 1]); } } /** - * @param $orderId + * @param int $courseId + * @param int $userId + * @return ResultsetInterface|Resultset|TaskModel[] + */ + protected function findPlanChapterUsers($courseId, $userId) + { + return ChapterUserModel::query() + ->where('course_id = :course_id:', ['course_id' => $courseId]) + ->andWhere('user_id = :user_id:', ['user_id' => $userId]) + ->andWhere('deleted = 0') + ->execute(); + } + + /** + * @param int $courseId + * @param int $userId + * @return ResultsetInterface|Resultset|TaskModel[] + */ + protected function findPlanLearnings($courseId, $userId) + { + return LearningModel::query() + ->where('course_id = :course_id:', ['course_id' => $courseId]) + ->andWhere('user_id = :user_id:', ['user_id' => $userId]) + ->andWhere('deleted = 0') + ->execute(); + } + + /** + * @param int $orderId * @return Model|TradeModel */ protected function findFinishedTrade($orderId) diff --git a/app/Http/Admin/Services/Student.php b/app/Http/Admin/Services/Student.php index fade2193..9b2f8bb1 100644 --- a/app/Http/Admin/Services/Student.php +++ b/app/Http/Admin/Services/Student.php @@ -56,6 +56,8 @@ class Student extends Service $params = $pagerQuery->getParams(); + $params['deleted'] = 0; + $sort = $pagerQuery->getSort(); $page = $pagerQuery->getPage(); $limit = $pagerQuery->getLimit(); diff --git a/app/Http/Admin/Views/index.volt b/app/Http/Admin/Views/index.volt index 4d357c6f..47b62dba 100644 --- a/app/Http/Admin/Views/index.volt +++ b/app/Http/Admin/Views/index.volt @@ -3,8 +3,7 @@ - - + 管理后台 {{ icon_link("favicon.ico") }} {{ css_link('lib/layui/css/layui.css') }} diff --git a/app/Http/Admin/Views/order/show.volt b/app/Http/Admin/Views/order/show.volt index cfbd82c7..f2195dc2 100644 --- a/app/Http/Admin/Views/order/show.volt +++ b/app/Http/Admin/Views/order/show.volt @@ -95,14 +95,14 @@ 编号 昵称 - 邮箱 手机 + 邮箱 {{ user.id }} {{ user.name }} - {% if account.phone %}{{ account.phone }}{% else %}N/A{% endif %} - {% if account.email %}{{ account.email }}{% else %}N/A{% endif %} + {% if account.phone %} {{ account.phone }} {% else %} 未知 {% endif %} + {% if account.email %} {{ account.email }} {% else %} 未知 {% endif %} diff --git a/app/Http/Admin/Views/refund/show.volt b/app/Http/Admin/Views/refund/show.volt index 791139d1..aa4347aa 100644 --- a/app/Http/Admin/Views/refund/show.volt +++ b/app/Http/Admin/Views/refund/show.volt @@ -111,13 +111,13 @@ 编号 昵称 - 邮箱 手机 + 邮箱 {{ user.id }} {{ user.name }} - {% if account.phone %}{{ account.phone }}{% else %}N/A{% endif %} - {% if account.email %}{{ account.email }}{% else %}N/A{% endif %} + {% if account.phone %} {{ account.phone }} {% else %} 未知 {% endif %} + {% if account.email %} {{ account.email }} {% else %} 未知 {% endif %} \ No newline at end of file diff --git a/app/Http/Admin/Views/student/list.volt b/app/Http/Admin/Views/student/list.volt index f26327e7..b5ff839d 100644 --- a/app/Http/Admin/Views/student/list.volt +++ b/app/Http/Admin/Views/student/list.volt @@ -1,9 +1,9 @@ {%- macro source_type_info(value) %} - {% if value == 'free' %} + {% if value == 1 %} 免费 - {% elseif value == 'charge' %} + {% elseif value == 2 %} 付费 - {% elseif value == 'import' %} + {% elseif value == 3 %} 导入 {% endif %} {%- endmacro %} @@ -72,7 +72,7 @@ diff --git a/app/Http/Admin/Views/student/search.volt b/app/Http/Admin/Views/student/search.volt index 5506b130..46ee8cdf 100644 --- a/app/Http/Admin/Views/student/search.volt +++ b/app/Http/Admin/Views/student/search.volt @@ -23,9 +23,9 @@
- - - + + +
diff --git a/app/Http/Admin/Views/trade/show.volt b/app/Http/Admin/Views/trade/show.volt index c0d087b7..933842d8 100644 --- a/app/Http/Admin/Views/trade/show.volt +++ b/app/Http/Admin/Views/trade/show.volt @@ -27,10 +27,10 @@
{% if trade.status == 'pending' %} - + {% endif %} {% if trade.status == 'finished' %} - + {% endif %}
@@ -92,14 +92,14 @@ 编号 昵称 - 邮箱 手机 + 邮箱 {{ user.id }} {{ user.name }} - {% if account.phone %}{{ account.phone }}{% else %}N/A{% endif %} - {% if account.email %}{{ account.email }}{% else %}N/A{% endif %} + {% if account.phone %} {{ account.phone }} {% else %} 未知 {% endif %} + {% if account.email %} {{ account.email }} {% else %} 未知 {% endif %} @@ -116,7 +116,7 @@ $.ajax({ type: 'POST', url: url, - finished: function (res) { + success: function (res) { layer.msg(res.msg, {icon: 1}); setTimeout(function () { window.location.reload(); diff --git a/app/Http/Admin/Views/user/list.volt b/app/Http/Admin/Views/user/list.volt index 64213641..be080e94 100644 --- a/app/Http/Admin/Views/user/list.volt +++ b/app/Http/Admin/Views/user/list.volt @@ -1,25 +1,26 @@ -{%- macro location_info(value) %} - {% if value %} - {{ value }} - {% else %} - N/A +{%- macro last_login_info(user) %} + {% if user.last_login_ip %} + 学员 + {% endif %} + {% if user.last_login_time %} + 学员 {% endif %} {%- endmacro %} {%- macro gender_info(value) %} - {% if value == 'male' %} + {% if value == 1 %} - {% elseif value == 'female' %} + {% elseif value == 2 %} - {% elseif value == 'none' %} + {% elseif value == 3 %} {% endif %} {%- endmacro %} {%- macro edu_role_info(user) %} - {% if user.edu_role.id == 'student' %} + {% if user.edu_role.id == 1 %} 学员 - {% elseif user.edu_role.id == 'teacher' %} + {% elseif user.edu_role.id == 2 %} 讲师 {% endif %} {%- endmacro %} @@ -70,8 +71,8 @@ 编号 昵称 - 地区 性别 + 最后登录 教学角色 后台角色 注册时间 @@ -83,8 +84,8 @@ {{ item.id }} {{ item.name }}{{ status_info(item) }} - {{ location_info(item.location) }} {{ gender_info(item.gender) }} + {{ last_login_info(item) }} {{ edu_role_info(item) }} {{ admin_role_info(item) }} {{ date('Y-m-d H:i',item.create_time) }} diff --git a/app/Http/Admin/Views/user/search.volt b/app/Http/Admin/Views/user/search.volt index 64cc3fd1..8bc38c0d 100644 --- a/app/Http/Admin/Views/user/search.volt +++ b/app/Http/Admin/Views/user/search.volt @@ -21,8 +21,8 @@
- - + +
diff --git a/app/Http/Web/Controllers/OrderController.php b/app/Http/Web/Controllers/OrderController.php index 80f019cd..0549c921 100644 --- a/app/Http/Web/Controllers/OrderController.php +++ b/app/Http/Web/Controllers/OrderController.php @@ -18,9 +18,12 @@ class OrderController extends Controller */ public function confirmAction() { + $itemId = $this->request->getQuery('item_id'); + $itemType = $this->request->getQuery('item_type'); + $service = new OrderConfirmService(); - $info = $service->handle(); + $info = $service->handle($itemId, $itemType); $this->view->setVar('info', $info); } diff --git a/app/Http/Web/Controllers/RefundController.php b/app/Http/Web/Controllers/RefundController.php index 7bc197c4..1f4fab55 100644 --- a/app/Http/Web/Controllers/RefundController.php +++ b/app/Http/Web/Controllers/RefundController.php @@ -18,9 +18,13 @@ class RefundController extends Controller */ public function confirmAction() { + $sn = $this->request->getQuery('order_sn'); + $service = new RefundConfirmService(); - $info = $service->handle(); + $info = $service->handle($sn); + + return $this->jsonSuccess(['info' => $info]); $this->view->setVar('info', $info); } diff --git a/app/Library/CsrfToken.php b/app/Library/CsrfToken.php new file mode 100644 index 00000000..f9877eb6 --- /dev/null +++ b/app/Library/CsrfToken.php @@ -0,0 +1,52 @@ +crypt = Di::getDefault()->get('crypt'); + } + + public function getToken() + { + $text = implode($this->delimiter, [time(), $this->fixed, Text::random(8)]); + + return $this->crypt->encryptBase64($text); + } + + public function checkToken($token) + { + $text = $this->crypt->decryptBase64($token); + + list($time, $fixed, $random) = explode($this->delimiter, $text); + + if ($time != intval($time) || $fixed != $this->fixed || strlen($random) != 8) { + return false; + } + + if (time() - $time > $this->lifetime) { + return false; + } + + return true; + } + +} \ No newline at end of file diff --git a/app/Models/CourseUser.php b/app/Models/CourseUser.php index 2883e456..c3d38774 100644 --- a/app/Models/CourseUser.php +++ b/app/Models/CourseUser.php @@ -10,15 +10,15 @@ class CourseUser extends Model /** * 角色类型 */ - const ROLE_STUDENT = 'student'; // 学员 - const ROLE_TEACHER = 'teacher'; // 讲师 + const ROLE_STUDENT = 1; // 学员 + const ROLE_TEACHER = 2; // 讲师 /** * 来源类型 */ - const SOURCE_FREE = 'free'; // 免费 - const SOURCE_CHARGE = 'charge'; // 付费 - const SOURCE_IMPORT = 'import'; // 导入 + const SOURCE_FREE = 1; // 免费 + const SOURCE_CHARGE = 2; // 付费 + const SOURCE_IMPORT = 3; // 导入 /** * 主键编号 diff --git a/app/Models/Learning.php b/app/Models/Learning.php index 936cb753..8098f922 100644 --- a/app/Models/Learning.php +++ b/app/Models/Learning.php @@ -69,11 +69,18 @@ class Learning extends Model /** * 客户端IP - * + * * @var string */ public $client_ip; + /** + * 删除标识 + * + * @var int + */ + public $deleted; + /** * 创建时间 * diff --git a/app/Providers/Security.php b/app/Providers/CsrfToken.php similarity index 50% rename from app/Providers/Security.php rename to app/Providers/CsrfToken.php index 0ce21a81..90042937 100644 --- a/app/Providers/Security.php +++ b/app/Providers/CsrfToken.php @@ -2,17 +2,17 @@ namespace App\Providers; -use App\Library\Security as AppSecurity; +use App\Library\CsrfToken as MyCsrfToken; -class Security extends Provider +class CsrfToken extends Provider { - protected $serviceName = 'security'; + protected $serviceName = 'csrfToken'; public function register() { $this->di->setShared($this->serviceName, function () { - return new AppSecurity(); + return new MyCsrfToken(); }); } diff --git a/app/Repos/Learning.php b/app/Repos/Learning.php index 44dad7e5..fdc32181 100644 --- a/app/Repos/Learning.php +++ b/app/Repos/Learning.php @@ -29,6 +29,10 @@ class Learning extends Repository $builder->andWhere('user_id = :user_id:', ['user_id' => $where['user_id']]); } + if (isset($where['deleted'])) { + $builder->andWhere('deleted = :deleted:', ['deleted' => $where['deleted']]); + } + switch ($sort) { default: $orderBy = 'id DESC'; diff --git a/app/Services/Frontend/Order/OrderConfirm.php b/app/Services/Frontend/Order/OrderConfirm.php index f7212b48..075f2a2d 100644 --- a/app/Services/Frontend/Order/OrderConfirm.php +++ b/app/Services/Frontend/Order/OrderConfirm.php @@ -14,11 +14,8 @@ use App\Validators\Order as OrderValidator; class OrderConfirm extends Service { - public function handle() + public function handle($itemId, $itemType) { - $itemId = $this->request->getQuery('item_id'); - $itemType = $this->request->getQuery('item_type'); - $user = $this->getLoginUser(); $validator = new OrderValidator(); diff --git a/app/Services/Frontend/Refund/RefundConfirm.php b/app/Services/Frontend/Refund/RefundConfirm.php index cd32744d..b309b329 100644 --- a/app/Services/Frontend/Refund/RefundConfirm.php +++ b/app/Services/Frontend/Refund/RefundConfirm.php @@ -5,19 +5,20 @@ namespace App\Services\Frontend\Refund; use App\Models\Refund as RefundModel; use App\Services\Frontend\OrderTrait; use App\Services\Frontend\Service; +use App\Services\RefundCalculator; class RefundConfirm extends Service { use OrderTrait; - public function handle() + public function handle($sn) { - $sn = $this->request->getQuery('order_sn'); - $order = $this->checkOrderBySn($sn); + $service = new RefundCalculator(); + return $service->handle($order); } protected function handleRefund(RefundModel $refund) diff --git a/app/Services/RefundCalculator.php b/app/Services/RefundCalculator.php new file mode 100644 index 00000000..f8a49fdf --- /dev/null +++ b/app/Services/RefundCalculator.php @@ -0,0 +1,120 @@ +item_type) { + case OrderModel::ITEM_COURSE: + $result = $this->handleCourseRefund($order); + break; + case OrderModel::ITEM_PACKAGE: + $result = $this->handlePackageRefund($order); + break; + } + + return $result; + } + + protected function handleCourseRefund(OrderModel $order) + { + /** + * @var array $itemInfo + */ + $itemInfo = $order->item_info; + + $refundPercent = 0.00; + $refundAmount = 0.00; + + if ($itemInfo['course']['refund_expiry_time'] > time()) { + $refundPercent = $this->getCourseRefundPercent($order->item_id, $order->user_id); + $refundAmount = $order->amount * $refundPercent; + } + + $itemInfo['course']['refund_percent'] = $refundPercent; + $itemInfo['course']['refund_amount'] = $refundAmount; + + return [ + 'item_type' => $order->item_type, + 'item_info' => $itemInfo, + 'refund_amount' => $refundAmount, + ]; + } + + protected function handlePackageRefund(OrderModel $order) + { + /** + * @var array $itemInfo + */ + $itemInfo = $order->item_info; + + $totalMarketPrice = 0.00; + + foreach ($itemInfo['courses'] as $course) { + $totalMarketPrice += $course['market_price']; + } + + $totalRefundAmount = 0.00; + + /** + * 按照占比方式计算退款 + */ + foreach ($itemInfo['courses'] as &$course) { + + $refundPercent = 0.00; + $refundAmount = 0.00; + + if ($course['refund_expiry_time'] > time()) { + $pricePercent = round($course['market_price'] / $totalMarketPrice, 4); + $refundPercent = $this->getCourseRefundPercent($order->user_id, $course['id']); + $refundAmount = round($order->amount * $pricePercent * $refundPercent, 2); + $totalRefundAmount += $refundAmount; + } + + $course['item_info']['refund_percent'] = $refundPercent; + $course['item_info']['refund_amount'] = $refundAmount; + } + + return [ + 'item_type' => $order->item_type, + 'item_info' => $itemInfo, + 'refund_amount' => $totalRefundAmount, + ]; + } + + protected function getCourseRefundPercent($courseId, $userId) + { + $courseRepo = new CourseRepo(); + + $courseLessons = $courseRepo->findLessons($courseId); + + if ($courseLessons->count() == 0) { + return 1.00; + } + + $userLearnings = $courseRepo->findConsumedUserLearnings($courseId, $userId); + + if ($userLearnings->count() == 0) { + return 1.00; + } + + $courseLessonIds = kg_array_column($courseLessons->toArray(), 'id'); + $userLessonIds = kg_array_column($userLearnings->toArray(), 'chapter_id'); + $consumedLessonIds = array_intersect($courseLessonIds, $userLessonIds); + + $totalCount = count($courseLessonIds); + $consumedCount = count($consumedLessonIds); + $refundCount = $totalCount - $consumedCount; + + return round($refundCount / $totalCount, 4); + } + +} diff --git a/app/Validators/Security.php b/app/Validators/Security.php index 85799db3..7a061ac5 100644 --- a/app/Validators/Security.php +++ b/app/Validators/Security.php @@ -11,10 +11,9 @@ class Security extends Validator public function checkCsrfToken() { - $tokenKey = $this->request->getHeader('X-Csrf-Token-Key'); - $tokenValue = $this->request->getHeader('X-Csrf-Token-Value'); + $token = $this->request->getHeader('X-Csrf-Token'); - $result = $this->security->checkToken($tokenKey, $tokenValue); + $result = $this->csrfToken->checkToken($token); if (!$result) { throw new BadRequestException('security.invalid_csrf_token'); diff --git a/app/Validators/Trade.php b/app/Validators/Trade.php index 160c2dd2..1203a030 100644 --- a/app/Validators/Trade.php +++ b/app/Validators/Trade.php @@ -50,14 +50,14 @@ class Trade extends Validator } } - public function checkIfAllowClose($trade) + public function checkIfAllowClose(TradeModel $trade) { if ($trade->status != TradeModel::STATUS_PENDING) { throw new BadRequestException('trade.close_not_allowed'); } } - public function checkIfAllowRefund($trade) + public function checkIfAllowRefund(TradeModel $trade) { if ($trade->status != TradeModel::STATUS_FINISHED) { throw new BadRequestException('trade.refund_not_allowed'); diff --git a/bootstrap/HttpKernel.php b/bootstrap/HttpKernel.php index 8f8e20f6..242720ca 100644 --- a/bootstrap/HttpKernel.php +++ b/bootstrap/HttpKernel.php @@ -7,6 +7,7 @@ use App\Providers\Cache as CacheProvider; use App\Providers\Config as ConfigProvider; use App\Providers\Cookie as CookieProvider; use App\Providers\Crypt as CryptProvider; +use App\Providers\CsrfToken as CsrfTokenProvider; use App\Providers\Database as DatabaseProvider; use App\Providers\EventsManager as EventsManagerProvider; use App\Providers\Logger as LoggerProvider; @@ -15,7 +16,6 @@ use App\Providers\Provider as AppProvider; use App\Providers\Request as RequestProvider; use App\Providers\Response as ResponseProvider; use App\Providers\Router as RouterProvider; -use App\Providers\Security as SecurityProvider; use App\Providers\Session as SessionProvider; use App\Providers\Url as UrlProvider; use App\Providers\View as ViewProvider; @@ -71,6 +71,7 @@ class HttpKernel extends Kernel CookieProvider::class, ConfigProvider::class, CryptProvider::class, + CsrfTokenProvider::class, DatabaseProvider::class, EventsManagerProvider::class, LoggerProvider::class, @@ -78,7 +79,6 @@ class HttpKernel extends Kernel RequestProvider::class, ResponseProvider::class, RouterProvider::class, - SecurityProvider::class, SessionProvider::class, UrlProvider::class, ViewProvider::class, diff --git a/config/errors.php b/config/errors.php index fd74a4fc..755cb997 100644 --- a/config/errors.php +++ b/config/errors.php @@ -38,7 +38,7 @@ $error['captcha.invalid_code'] = '无效的验证码'; * 帐号相关 */ $error['account.not_found'] = '账号不存在'; -$error['account.login_locked'] = '账号被锁定,无法登录'; +$error['account.login_block'] = '账号被锁定,无法登录'; $error['account.login_name_incorrect'] = '登录账号不正确'; $error['account.login_password_incorrect'] = '登录密码不正确'; $error['account.invalid_email'] = '无效的电子邮箱'; @@ -60,7 +60,7 @@ $error['user.invalid_edu_role'] = '无效的教学角色'; $error['user.invalid_admin_role'] = '无效的后台角色'; $error['user.invalid_vip_status'] = '无效的会员状态'; $error['user.invalid_vip_expiry_time'] = '无效的会员期限'; -$error['user.invalid_lock_status'] = '无效的锁定状态'; +$error['user.invalid_block_status'] = '无效的锁定状态'; $error['user.invalid_lock_expiry_time'] = '无效的锁定期限'; /** @@ -266,8 +266,8 @@ $error['order.trade_expired'] = '交易已过期'; $error['trade.not_found'] = '交易不存在'; $error['trade.create_failed'] = '创建交易失败'; $error['trade.invalid_channel'] = '无效的平台类型'; -$error['trade.invalid_close_action'] = '当前不允许关闭交易'; -$error['trade.invalid_refund_action'] = '当前不允许交易退款'; +$error['trade.close_not_allowed'] = '当前不允许关闭交易'; +$error['trade.refund_not_allowed'] = '当前不允许交易退款'; $error['trade.refund_existed'] = '退款申请已经存在'; /** diff --git a/public/static/admin/js/common.js b/public/static/admin/js/common.js index 85335258..7c169bae 100644 --- a/public/static/admin/js/common.js +++ b/public/static/admin/js/common.js @@ -12,11 +12,7 @@ layui.use(['jquery', 'form', 'element', 'layer', 'dropdown'], function () { $.ajaxSetup({ beforeSend: function (xhr) { - var csrfTokenKey = $('meta[name="csrf-token-key"]').attr('content'); - var csrfTokenValue = $('meta[name="csrf-token-value"]').attr('content'); - xhr.setRequestHeader('X-Csrf-Token-Key', csrfTokenKey); - xhr.setRequestHeader('X-Csrf-Token-Value', csrfTokenValue); - xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.setRequestHeader('X-Csrf-Token', $('meta[name="csrf-token"]').attr('content')); } });