From 491c5d36882c6ff9d5afeabe2443e284a0a65cab Mon Sep 17 00:00:00 2001 From: winzer Date: Wed, 3 Feb 2021 12:41:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8E=9F=E5=A7=8B=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=EF=BC=8C=E5=B8=82=E5=9C=BA=E4=BB=B7=E6=94=B9=E5=90=8D?= =?UTF-8?q?=E4=B8=BA=E4=BC=98=E6=83=A0=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Caches/PackageCourseList.php | 1 + app/Http/Admin/Services/Course.php | 1 + app/Http/Admin/Views/course/edit_sale.volt | 11 +++++++- app/Http/Admin/Views/course/list.volt | 5 ++-- app/Http/Admin/Views/order/macro.volt | 4 +-- app/Http/Admin/Views/package/edit.volt | 2 +- app/Http/Admin/Views/package/guiding.volt | 4 +-- app/Http/Admin/Views/package/list.volt | 2 +- app/Http/Home/Views/course/packages.volt | 2 +- app/Http/Home/Views/course/show_meta.volt | 5 ++-- app/Http/Home/Views/macros/order.volt | 4 +-- app/Http/Home/Views/order/confirm.volt | 3 ++- app/Models/Course.php | 14 +++++++++- app/Models/Package.php | 2 +- app/Services/Logic/Course/BasicInfo.php | 1 + app/Services/Logic/Course/PackageList.php | 2 +- app/Services/Logic/Order/OrderConfirm.php | 5 ++-- app/Validators/Course.php | 11 ++++++++ config/errors.php | 7 ++--- db/migrations/20200827063842_init_table.php | 4 +-- .../20210203081614_schema_202102031615.php | 27 +++++++++++++++++++ db/migrations/schema.php | 4 +-- public/static/admin/js/xm-course.js | 2 +- public/static/home/css/common.css | 8 ++++++ 24 files changed, 103 insertions(+), 28 deletions(-) create mode 100644 db/migrations/20210203081614_schema_202102031615.php diff --git a/app/Caches/PackageCourseList.php b/app/Caches/PackageCourseList.php index 74f005e5..144e4481 100644 --- a/app/Caches/PackageCourseList.php +++ b/app/Caches/PackageCourseList.php @@ -46,6 +46,7 @@ class PackageCourseList extends Cache 'id' => $course->id, 'title' => $course->title, 'cover' => $course->cover, + 'origin_price' => $course->origin_price, 'market_price' => $course->market_price, 'vip_price' => $course->vip_price, 'model' => $course->model, diff --git a/app/Http/Admin/Services/Course.php b/app/Http/Admin/Services/Course.php index 94525b17..59e06038 100644 --- a/app/Http/Admin/Services/Course.php +++ b/app/Http/Admin/Services/Course.php @@ -164,6 +164,7 @@ class Course extends Service $data['market_price'] = 0; $data['vip_price'] = 0; } else { + $data['origin_price'] = $validator->checkMarketPrice($post['origin_price']); $data['market_price'] = $validator->checkMarketPrice($post['market_price']); $data['vip_price'] = $validator->checkVipPrice($post['vip_price']); $validator->checkComparePrice($post['market_price'], $post['vip_price']); diff --git a/app/Http/Admin/Views/course/edit_sale.volt b/app/Http/Admin/Views/course/edit_sale.volt index 071da233..039907e7 100644 --- a/app/Http/Admin/Views/course/edit_sale.volt +++ b/app/Http/Admin/Views/course/edit_sale.volt @@ -12,7 +12,16 @@
- + +
+ +
+
+
+
+
+
+
diff --git a/app/Http/Admin/Views/course/list.volt b/app/Http/Admin/Views/course/list.volt index 4a2a84ce..ed9d18dc 100644 --- a/app/Http/Admin/Views/course/list.volt +++ b/app/Http/Admin/Views/course/list.volt @@ -100,8 +100,9 @@ -

市场:{{ '¥%0.2f'|format(item.market_price) }}

-

会员:{{ '¥%0.2f'|format(item.vip_price) }}

+

原始价:{{ '¥%0.2f'|format(item.origin_price) }}

+

优惠价:{{ '¥%0.2f'|format(item.market_price) }}

+

会员价:{{ '¥%0.2f'|format(item.vip_price) }}

diff --git a/app/Http/Admin/Views/order/macro.volt b/app/Http/Admin/Views/order/macro.volt index 6424d9f7..7aa625bc 100644 --- a/app/Http/Admin/Views/order/macro.volt +++ b/app/Http/Admin/Views/order/macro.volt @@ -3,7 +3,7 @@ {% set course = order.item_info['course'] %}

课程名称:{{ course['title'] }}

-

市场价格:{{ '¥%0.2f'|format(course['market_price']) }},会员价格:{{ '¥%0.2f'|format(course['vip_price']) }}

+

优惠价格:{{ '¥%0.2f'|format(course['market_price']) }},会员价格:{{ '¥%0.2f'|format(course['vip_price']) }}

学习期限:{{ date('Y-m-d H:i:s',course['study_expiry_time']) }},退款期限:{{ date('Y-m-d H:i:s',course['refund_expiry_time']) }}

{% elseif order.item_type == 2 %} @@ -11,7 +11,7 @@ {% for course in courses %}

课程名称:{{ course['title'] }}

-

市场价格:{{ '¥%0.2f'|format(course['market_price']) }},会员价格:{{ '¥%0.2f'|format(course['vip_price']) }}

+

优惠价格:{{ '¥%0.2f'|format(course['market_price']) }},会员价格:{{ '¥%0.2f'|format(course['vip_price']) }}

学习期限:{{ date('Y-m-d H:i:s',course['study_expiry_time']) }},退款期限:{{ date('Y-m-d H:i:s',course['refund_expiry_time']) }}

{% endfor %} diff --git a/app/Http/Admin/Views/package/edit.volt b/app/Http/Admin/Views/package/edit.volt index 61432b1d..deb2ceed 100644 --- a/app/Http/Admin/Views/package/edit.volt +++ b/app/Http/Admin/Views/package/edit.volt @@ -26,7 +26,7 @@
- +
diff --git a/app/Http/Admin/Views/package/guiding.volt b/app/Http/Admin/Views/package/guiding.volt index c3ab1c8d..5d881d72 100644 --- a/app/Http/Admin/Views/package/guiding.volt +++ b/app/Http/Admin/Views/package/guiding.volt @@ -26,7 +26,7 @@ {{ item.lesson_count }} {{ study_expiry_info(item.study_expiry) }} -

市场价:{{ '¥%0.2f'|format(item.market_price) }}

+

优惠价:{{ '¥%0.2f'|format(item.market_price) }}

会员价:{{ '¥%0.2f'|format(item.vip_price) }}

@@ -37,7 +37,7 @@
- 建议市场价:¥{{ guiding_price.market_price }} + 建议优惠价:¥{{ guiding_price.market_price }}    建议会员价:¥{{ guiding_price.vip_price }}
diff --git a/app/Http/Admin/Views/package/list.volt b/app/Http/Admin/Views/package/list.volt index e319bd11..e23a17d8 100644 --- a/app/Http/Admin/Views/package/list.volt +++ b/app/Http/Admin/Views/package/list.volt @@ -25,7 +25,7 @@ 编号 标题 课程数 - 市场价 + 优惠价 会员价 发布 操作 diff --git a/app/Http/Home/Views/course/packages.volt b/app/Http/Home/Views/course/packages.volt index 02230648..509a5edd 100644 --- a/app/Http/Home/Views/course/packages.volt +++ b/app/Http/Home/Views/course/packages.volt @@ -9,7 +9,7 @@ 总价 {{ '¥%0.2f'|format(package.origin_price) }}
- 市场价 {{ '¥%0.2f'|format(package.market_price) }} + 优惠价 {{ '¥%0.2f'|format(package.market_price) }}
会员价 {{ '¥%0.2f'|format(package.vip_price) }} diff --git a/app/Http/Home/Views/course/show_meta.volt b/app/Http/Home/Views/course/show_meta.volt index 201dc99b..6355000c 100644 --- a/app/Http/Home/Views/course/show_meta.volt +++ b/app/Http/Home/Views/course/show_meta.volt @@ -34,10 +34,11 @@ {%- macro meta_price_info(course) %}

+ 原始价格{{ '¥%0.2f'|format(course.origin_price) }} {% if course.market_price > 0 %} - 市场价格{{ '¥%0.2f'|format(course.market_price) }} + 优惠价格{{ '¥%0.2f'|format(course.market_price) }} {% else %} - 市场价格免费 + 优惠价格免费 {% endif %} {% if course.vip_price > 0 %} 会员价格{{ '¥%0.2f'|format(course.vip_price) }} diff --git a/app/Http/Home/Views/macros/order.volt b/app/Http/Home/Views/macros/order.volt index 1f963258..ed29ab31 100644 --- a/app/Http/Home/Views/macros/order.volt +++ b/app/Http/Home/Views/macros/order.volt @@ -3,7 +3,7 @@ {% set course = order.item_info.course %}

课程名称:{{ course.title }}

-

市场价格:{{ '¥%0.2f'|format(course.market_price) }}会员价格:{{ '¥%0.2f'|format(course.vip_price) }}

+

优惠价格:{{ '¥%0.2f'|format(course.market_price) }}会员价格:{{ '¥%0.2f'|format(course.vip_price) }}

学习期限:{{ date('Y-m-d',course.study_expiry_time) }}退款期限:{{ date('Y-m-d',course.refund_expiry_time) }}

{% elseif order.item_type == 2 %} @@ -11,7 +11,7 @@ {% for course in courses %}

课程名称:{{ course.title }}

-

市场价格:{{ '¥%0.2f'|format(course.market_price) }}会员价格:{{ '¥%0.2f'|format(course.vip_price) }}

+

优惠价格:{{ '¥%0.2f'|format(course.market_price) }}会员价格:{{ '¥%0.2f'|format(course.vip_price) }}

学习期限:{{ date('Y-m-d',course.study_expiry_time) }}退款期限:{{ date('Y-m-d',course.refund_expiry_time) }}

{% endfor %} diff --git a/app/Http/Home/Views/order/confirm.volt b/app/Http/Home/Views/order/confirm.volt index e0df3869..365c2a18 100644 --- a/app/Http/Home/Views/order/confirm.volt +++ b/app/Http/Home/Views/order/confirm.volt @@ -13,7 +13,8 @@

{{ course.title }}

- 市场价格 {{ '¥%0.2f'|format(course.market_price) }} + 原始价格 {{ '¥%0.2f'|format(course.origin_price) }} + 优惠价格 {{ '¥%0.2f'|format(course.market_price) }} 会员价格 {{ '¥%0.2f'|format(course.vip_price) }}

diff --git a/app/Models/Course.php b/app/Models/Course.php index 474ae0d8..f8420cc7 100644 --- a/app/Models/Course.php +++ b/app/Models/Course.php @@ -104,7 +104,14 @@ class Course extends Model public $teacher_id; /** - * 市场价格 + * 原始价格 + * + * @var float + */ + public $origin_price; + + /** + * 优惠价格 * * @var float */ @@ -323,6 +330,10 @@ class Course extends Model $this->attrs = kg_json_encode($this->attrs); } + if (empty($this->origin_price)) { + $this->origin_price = 1.5 * $this->market_price; + } + if ($this->deleted == 1) { $this->published = 0; } @@ -339,6 +350,7 @@ class Course extends Model public function afterFetch() { + $this->origin_price = (float)$this->origin_price; $this->market_price = (float)$this->market_price; $this->vip_price = (float)$this->vip_price; $this->rating = (float)$this->rating; diff --git a/app/Models/Package.php b/app/Models/Package.php index 9205112f..583a3c0a 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -30,7 +30,7 @@ class Package extends Model public $summary; /** - * 市场价格 + * 优惠价格 * * @var float */ diff --git a/app/Services/Logic/Course/BasicInfo.php b/app/Services/Logic/Course/BasicInfo.php index 8630c637..f0e6efad 100644 --- a/app/Services/Logic/Course/BasicInfo.php +++ b/app/Services/Logic/Course/BasicInfo.php @@ -34,6 +34,7 @@ class BasicInfo extends Service 'summary' => $course->summary, 'details' => $course->details, 'keywords' => $course->keywords, + 'origin_price' => $course->origin_price, 'market_price' => $course->market_price, 'vip_price' => $course->vip_price, 'study_expiry' => $course->study_expiry, diff --git a/app/Services/Logic/Course/PackageList.php b/app/Services/Logic/Course/PackageList.php index 5f220045..d7c5c2e4 100644 --- a/app/Services/Logic/Course/PackageList.php +++ b/app/Services/Logic/Course/PackageList.php @@ -40,7 +40,7 @@ class PackageList extends Service if ($courses) { foreach ($courses as $course) { - $package['origin_price'] += $course['market_price']; + $package['origin_price'] += $course['origin_price']; } $package['courses'] = $this->sortCourses($courses, $firstCourseId); } diff --git a/app/Services/Logic/Order/OrderConfirm.php b/app/Services/Logic/Order/OrderConfirm.php index 27198bd5..47870448 100644 --- a/app/Services/Logic/Order/OrderConfirm.php +++ b/app/Services/Logic/Order/OrderConfirm.php @@ -33,7 +33,7 @@ class OrderConfirm extends Service $result['item_info']['course'] = $this->handleCourseInfo($course); - $result['total_amount'] = $course->market_price; + $result['total_amount'] = $course->origin_price; $result['pay_amount'] = $user->vip ? $course->vip_price : $course->market_price; $result['discount_amount'] = $result['total_amount'] - $result['pay_amount']; @@ -46,7 +46,7 @@ class OrderConfirm extends Service $result['total_amount'] = 0; foreach ($result['item_info']['package']['courses'] as $course) { - $result['total_amount'] += $course['market_price']; + $result['total_amount'] += $course['origin_price']; } $result['pay_amount'] = $user->vip ? $package->vip_price : $package->market_price; @@ -138,6 +138,7 @@ class OrderConfirm extends Service 'lesson_count' => $course->lesson_count, 'study_expiry' => $course->study_expiry, 'refund_expiry' => $course->refund_expiry, + 'origin_price' => $course->origin_price, 'market_price' => $course->market_price, 'vip_price' => $course->vip_price, ]; diff --git a/app/Validators/Course.php b/app/Validators/Course.php index efa5288f..83c1ab08 100644 --- a/app/Validators/Course.php +++ b/app/Validators/Course.php @@ -161,6 +161,17 @@ class Course extends Validator return implode(',', $list); } + public function checkGuidePrice($price) + { + $value = $this->filter->sanitize($price, ['trim', 'float']); + + if ($value < 0 || $value > 10000) { + throw new BadRequestException('course.invalid_origin_price'); + } + + return $value; + } + public function checkMarketPrice($price) { $value = $this->filter->sanitize($price, ['trim', 'float']); diff --git a/config/errors.php b/config/errors.php index d599a268..ef52ac82 100644 --- a/config/errors.php +++ b/config/errors.php @@ -109,9 +109,10 @@ $error['course.details_too_long'] = '详情太长(多于5000个字符)'; $error['course.invalid_model'] = '无效的模型类别'; $error['course.invalid_level'] = '无效的难度级别'; $error['course.invalid_cover'] = '无效的封面'; -$error['course.invalid_market_price'] = '无效的市场价格(范围:0-10000)'; +$error['course.invalid_origin_price'] = '无效的指导价格(范围:0-10000)'; +$error['course.invalid_market_price'] = '无效的优惠价格(范围:0-10000)'; $error['course.invalid_vip_price'] = '无效的会员价格(范围:0-10000)'; -$error['course.invalid_compare_price'] = '无效的比较定价(会员价格高于市场价格)'; +$error['course.invalid_compare_price'] = '无效的比较定价(会员价格高于优惠价格)'; $error['course.invalid_study_expiry'] = '无效的学习期限'; $error['course.invalid_refund_expiry'] = '无效的退款期限'; $error['course.invalid_feature_status'] = '无效的推荐状态'; @@ -135,7 +136,7 @@ $error['package.not_found'] = '套餐不存在'; $error['package.title_too_short'] = '标题太短(少于5个字符)'; $error['package.title_too_long'] = '标题太长(多于50个字符)'; $error['package.summary_too_long'] = '简介太长(多于255个字符)'; -$error['package.invalid_market_price'] = '无效的市场价格'; +$error['package.invalid_market_price'] = '无效的优惠价格'; $error['package.invalid_vip_price'] = '无效的会员价格'; $error['package.invalid_publish_status'] = '无效的发布状态'; diff --git a/db/migrations/20200827063842_init_table.php b/db/migrations/20200827063842_init_table.php index 456501ef..182f7e73 100644 --- a/db/migrations/20200827063842_init_table.php +++ b/db/migrations/20200827063842_init_table.php @@ -1236,7 +1236,7 @@ class InitTable extends Phinx\Migration\AbstractMigration 'default' => '0.00', 'precision' => '10', 'scale' => '2', - 'comment' => '市场价格', + 'comment' => '优惠价格', 'after' => 'teacher_id', ]) ->addColumn('vip_price', 'decimal', [ @@ -3124,7 +3124,7 @@ class InitTable extends Phinx\Migration\AbstractMigration 'default' => '0.00', 'precision' => '10', 'scale' => '2', - 'comment' => '市场价格', + 'comment' => '优惠价格', 'after' => 'summary', ]) ->addColumn('vip_price', 'decimal', [ diff --git a/db/migrations/20210203081614_schema_202102031615.php b/db/migrations/20210203081614_schema_202102031615.php new file mode 100644 index 00000000..5ded7189 --- /dev/null +++ b/db/migrations/20210203081614_schema_202102031615.php @@ -0,0 +1,27 @@ +table('kg_course') + ->addColumn('origin_price', 'decimal', [ + 'null' => false, + 'default' => '0.00', + 'precision' => '10', + 'scale' => '2', + 'comment' => '原始价格', + 'after' => 'teacher_id', + ]) + ->save(); + + $this->updateOriginPrice(); + } + + protected function updateOriginPrice() + { + $this->execute("UPDATE kg_course SET origin_price = round(1.5 * market_price)"); + } + +} diff --git a/db/migrations/schema.php b/db/migrations/schema.php index e564699d..9ff9aefc 100644 --- a/db/migrations/schema.php +++ b/db/migrations/schema.php @@ -4130,7 +4130,7 @@ return array( 'COLUMN_KEY' => '', 'EXTRA' => '', 'PRIVILEGES' => 'select,insert,update,references', - 'COLUMN_COMMENT' => '市场价格', + 'COLUMN_COMMENT' => '优惠价格', 'GENERATION_EXPRESSION' => '', 'SRS_ID' => NULL, ), @@ -10669,7 +10669,7 @@ return array( 'COLUMN_KEY' => '', 'EXTRA' => '', 'PRIVILEGES' => 'select,insert,update,references', - 'COLUMN_COMMENT' => '市场价格', + 'COLUMN_COMMENT' => '优惠价格', 'GENERATION_EXPRESSION' => '', 'SRS_ID' => NULL, ), diff --git a/public/static/admin/js/xm-course.js b/public/static/admin/js/xm-course.js index 5e360cce..4b823dae 100644 --- a/public/static/admin/js/xm-course.js +++ b/public/static/admin/js/xm-course.js @@ -71,7 +71,7 @@ function xmCourse(data, url) { } }, { - field: 'market_price', title: '市场价', width: 50, templet: function (d) { + field: 'market_price', title: '优惠价', width: 50, templet: function (d) { return '¥' + d.market_price; } }, diff --git a/public/static/home/css/common.css b/public/static/home/css/common.css index 012b786f..25ffe190 100644 --- a/public/static/home/css/common.css +++ b/public/static/home/css/common.css @@ -501,6 +501,10 @@ color: red; } +.course-meta .info .origin-price { + text-decoration: line-through; +} + .course-meta .info .free { color: green; } @@ -1071,6 +1075,10 @@ margin: 0 5px; } +.cart-course-card .origin-price { + text-decoration: line-through; +} + .cart-course-card .price { color: red; }