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 @@
市场:{{ '¥%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) }}
课程名称:{{ 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']) }}
课程名称:{{ 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']) }}
市场价:{{ '¥%0.2f'|format(item.market_price) }}
+优惠价:{{ '¥%0.2f'|format(item.market_price) }}
会员价:{{ '¥%0.2f'|format(item.vip_price) }}
+ 原始价格{{ '¥%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) }}
课程名称:{{ 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) }}
- 市场价格 {{ '¥%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; }