更新 1. 订单列表 2. H5 套餐筛选 3. UI 优化

wenjuan
鹿和sa0ChunLuyu 1 year ago
parent 4aa34eaef9
commit 17dc26fa5c

@ -21,6 +21,7 @@ class ApiMapController extends Controller
{
$base_url = env('APP_URL');
return [
'OrderList' => $base_url . '/api/H5/Order/list',
'ComboList' => $base_url . '/api/H5/Combo/list',
'ComboSelect' => $base_url . '/api/H5/Combo/select',
'UserInfo' => $base_url . '/api/H5/User/info',

@ -70,7 +70,7 @@ class ComboController extends Controller
$info = [
'name' => '演示用户',
'sex' => '2',
'count' => 2
'count' => 1
];
$doctor_info = [

@ -11,7 +11,7 @@ class HomeController extends Controller
// 获取配置更新时间
public function config_version()
{
$version = '2024-08-13 18:00:02';
$version = '2024-08-14 18:00:00';
return \Yz::Return(true, '获取成功', [
'version' => $version
]);
@ -33,7 +33,7 @@ class HomeController extends Controller
'order' => [[
'message' => '',
'name' => '个人体检预约',
'jump' => '/pages/main/combo/combo',
'jump' => '/pages/main/order/order',
'icon' => '/assets/h5/gejianyuyue.png'
], [
'message' => '暂未开放',

@ -0,0 +1,74 @@
<?php
namespace App\Http\Controllers\API\H5;
use App\Http\Controllers\Controller;
use App\Services\ConfigService;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function list(Request $request)
{
// status 1-待支付 2-已预约 3-交易关闭 4-已完成 5-已退款
$openid = $request->post('openid');
$list = [[
'id' => 1,
'title' => '测试套餐1',
'status' => 1,
'name' => '陆予',
'time' => '2024-08-05 08:00:00',
'order' => '1234567890987654321',
'type' => '个检',
'price' => '4999.99',
'true_price' => '4999.99',
'end_time' => time() + (60 * 20)
], [
'id' => 1,
'title' => '测试套餐2',
'status' => 2,
'name' => '陆予',
'time' => '2024-08-05 08:00:00',
'order' => '1234567890987654321',
'type' => '个检',
'price' => '4999.99',
'true_price' => '4999.99',
'pay_time' => '2024-08-06 08:00:00'
], [
'id' => 1,
'title' => '测试套餐2',
'status' => 3,
'name' => '陆予',
'time' => '2024-08-05 08:00:00',
'order' => '1234567890987654321',
'type' => '个检'
], [
'id' => 1,
'title' => '测试套餐2',
'status' => 4,
'name' => '陆予',
'time' => '2024-08-05 08:00:00',
'order' => '1234567890987654321',
'type' => '团检',
'price' => '4999.99',
'true_price' => '0.01',
'pay_time' => '2024-08-06 08:00:00',
'report' => true,
'decode' => 0,
], [
'id' => 1,
'title' => '测试套餐2',
'status' => 5,
'name' => '陆予',
'time' => '2024-08-05 08:00:00',
'order' => '1234567890987654321',
'type' => '团检',
'price' => '4999.99',
'true_price' => '0.01',
'refund_time' => '2024-08-06 08:00:00'
]];
return \Yz::Return(true, '获取成功', [
'list' => $list
]);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.more_item_name_wrapper[data-v-543ed61d]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.4375rem}.more_item_wrapper[data-v-543ed61d]{width:50%}.more_item_icon_wrapper[data-v-543ed61d]{width:2.59375rem;height:2.59375rem;margin:.46875rem auto 0}.more_item_icon_wrapper uni-image[data-v-543ed61d]{width:2.59375rem;height:2.59375rem;display:block;object-fit:contain}.more_item_name_wrapper[data-v-543ed61d]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.8125rem}.ad_button_wrapper[data-v-543ed61d]{width:5.125rem;height:1.5rem;background:#fff;border-radius:.75rem;font-weight:500;font-size:.78125rem;color:#35acb2;line-height:1.5rem;text-align:center;position:absolute;right:.875rem;bottom:.8125rem}.ad_title_wrapper[data-v-543ed61d]{font-weight:500;font-size:1.5625rem;color:#fff;line-height:1;margin-top:1.15625rem;margin-left:1.90625rem}.check_item_desc_wrapper[data-v-543ed61d]{font-weight:500;font-size:.625rem;color:#b7b7b7;line-height:1;text-align:center;margin-top:.34375rem}.check_item_name_wrapper[data-v-543ed61d]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.4375rem}.check_item_wrapper[data-v-543ed61d]{width:50%}.check_item_icon_wrapper[data-v-543ed61d]{width:2.59375rem;height:2.59375rem;margin:0 auto}.check_item_icon_wrapper uni-image[data-v-543ed61d]{width:2.59375rem;height:2.59375rem;display:block;object-fit:contain}.order_item_name_wrapper[data-v-543ed61d]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.8125rem}.order_item_wrapper[data-v-543ed61d]{width:50%;border-right:.03125rem #E8E8E8 solid}.order_item_wrapper[data-v-543ed61d]:last-child{border-right:none}.order_item_icon_wrapper[data-v-543ed61d]{width:2.4375rem;height:2.4375rem;margin:0 auto}.order_item_icon_wrapper uni-image[data-v-543ed61d]{width:2.4375rem;height:2.4375rem;display:block;object-fit:contain}.button_wrapper[data-v-543ed61d]{width:3rem;height:1.6875rem;background:#35acb2;border-radius:.84375rem;font-weight:500;font-size:.6875rem;color:#fff;text-align:center;line-height:1.6875rem;position:absolute;right:.3125rem;bottom:1.1875rem}.content_tip_wrapper[data-v-543ed61d]{font-weight:400;font-size:.75rem;color:#939393;line-height:1;margin-top:.71875rem}.user_name_wrapper[data-v-543ed61d]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1}.user_sex_wrapper[data-v-543ed61d]{font-size:.6875rem;color:#939393;line-height:1;margin-left:.625rem}.user_info_wrapper[data-v-543ed61d]{display:flex;align-items:center}.logo_wrapper[data-v-543ed61d]{width:2.8125rem;height:2.8125rem;margin-left:.84375rem}.content_wrapper[data-v-543ed61d]{margin-left:.78125rem}.logo_wrapper uni-image[data-v-543ed61d]{width:2.8125rem;height:2.8125rem;display:block;object-fit:contain}.map_wrapper[data-v-543ed61d]{position:absolute;height:1.6875rem;background:#35acb2;border-radius:.84375rem;top:-2.25rem;right:0;display:flex;align-items:center;justify-content:center;padding-left:.5rem;padding-right:.625rem}.map_icon_wrapper[data-v-543ed61d]{width:.78125rem;height:.875rem}.map_icon_wrapper uni-image[data-v-543ed61d]{width:.78125rem;height:.875rem;display:block;object-fit:contain}.map_name_wrapper[data-v-543ed61d]{height:.6875rem;font-weight:500;font-size:.6875rem;color:#fff;line-height:1;margin-left:.4375rem}.map_long_wrapper[data-v-543ed61d]{font-weight:500;font-size:.6875rem;color:#fff;line-height:1;margin-left:.53125rem;padding-left:.53125rem;border-left:.03125rem solid #ffffff}.more_item_wrapper[data-v-543ed61d]{width:5.3125rem;height:4.90625rem;background:#fff;border-radius:.28125rem}.more_wrapper[data-v-543ed61d]{width:21.21875rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}.ad_wrapper[data-v-543ed61d]{position:relative;overflow:hidden;width:21.21875rem;height:4.84375rem;background:linear-gradient(-90deg,#b4dada,#13848c 90%);border-radius:.3125rem;margin:.46875rem auto 0}.check_wrapper[data-v-543ed61d]{width:21.1875rem;height:6.71875rem;background:#fff;border-radius:.3125rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}.bannder_wrapper[data-v-543ed61d]{width:23.4375rem;height:14.25rem;position:relative;z-index:1;margin:0 auto}.bannder_wrapper uni-image[data-v-543ed61d]{width:23.4375rem;height:14.25rem;display:block;object-fit:contain}.user_wrapper[data-v-543ed61d]{width:21.1875rem;height:2.34375rem;margin:0 auto;position:relative}.user_box_wrapper[data-v-543ed61d]{z-index:2;position:absolute;width:21.1875rem;height:4.8125rem;background:#fff;border-radius:.3125rem;bottom:0;display:flex;align-items:center}.order_wrapper[data-v-543ed61d]{width:21.1875rem;height:6.09375rem;background:#fff;border-radius:.3125rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
.more_item_name_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.4375rem}.more_item_wrapper[data-v-2c7127b1]{width:50%}.more_item_icon_wrapper[data-v-2c7127b1]{width:2.59375rem;height:2.59375rem;margin:.46875rem auto 0}.more_item_icon_wrapper uni-image[data-v-2c7127b1]{width:2.59375rem;height:2.59375rem;display:block;object-fit:contain}.more_item_name_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.8125rem}.ad_button_wrapper[data-v-2c7127b1]{width:5.125rem;height:1.5rem;background:#fff;border-radius:.75rem;font-weight:500;font-size:.78125rem;color:#35acb2;line-height:1.5rem;text-align:center;position:absolute;right:.875rem;bottom:.8125rem}.ad_title_wrapper[data-v-2c7127b1]{font-weight:500;font-size:1.5625rem;color:#fff;line-height:1;margin-top:1.15625rem;margin-left:1.90625rem}.check_item_desc_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.625rem;color:#b7b7b7;line-height:1;text-align:center;margin-top:.34375rem}.check_item_name_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.4375rem}.check_item_wrapper[data-v-2c7127b1]{width:50%}.check_item_icon_wrapper[data-v-2c7127b1]{width:2.59375rem;height:2.59375rem;margin:0 auto}.check_item_icon_wrapper uni-image[data-v-2c7127b1]{width:2.59375rem;height:2.59375rem;display:block;object-fit:contain}.order_item_name_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.8125rem}.order_item_wrapper[data-v-2c7127b1]{width:50%;border-right:.03125rem #E8E8E8 solid}.order_item_wrapper[data-v-2c7127b1]:last-child{border-right:none}.order_item_icon_wrapper[data-v-2c7127b1]{width:2.4375rem;height:2.4375rem;margin:0 auto}.order_item_icon_wrapper uni-image[data-v-2c7127b1]{width:2.4375rem;height:2.4375rem;display:block;object-fit:contain}.button_wrapper[data-v-2c7127b1]{width:3rem;height:1.6875rem;background:#35acb2;border-radius:.84375rem;font-weight:500;font-size:.6875rem;color:#fff;text-align:center;line-height:1.6875rem;position:absolute;right:.3125rem;bottom:1.1875rem}.content_tip_wrapper[data-v-2c7127b1]{font-weight:400;font-size:.75rem;color:#939393;line-height:1;margin-top:.71875rem}.user_name_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1}.user_sex_wrapper[data-v-2c7127b1]{font-size:.6875rem;color:#939393;line-height:1;margin-left:.625rem}.user_info_wrapper[data-v-2c7127b1]{display:flex;align-items:center}.logo_wrapper[data-v-2c7127b1]{width:2.8125rem;height:2.8125rem;margin-left:.84375rem}.content_wrapper[data-v-2c7127b1]{margin-left:.78125rem}.logo_wrapper uni-image[data-v-2c7127b1]{width:2.8125rem;height:2.8125rem;display:block;object-fit:contain}.map_wrapper[data-v-2c7127b1]{position:absolute;height:1.6875rem;background:#35acb2;border-radius:.84375rem;top:-2.25rem;right:0;display:flex;align-items:center;justify-content:center;padding-left:.5rem;padding-right:.625rem}.map_icon_wrapper[data-v-2c7127b1]{width:.78125rem;height:.875rem}.map_icon_wrapper uni-image[data-v-2c7127b1]{width:.78125rem;height:.875rem;display:block;object-fit:contain}.map_name_wrapper[data-v-2c7127b1]{height:.6875rem;font-weight:500;font-size:.6875rem;color:#fff;line-height:1;margin-left:.4375rem}.map_long_wrapper[data-v-2c7127b1]{font-weight:500;font-size:.6875rem;color:#fff;line-height:1;margin-left:.53125rem;padding-left:.53125rem;border-left:.03125rem solid #ffffff}.more_item_wrapper[data-v-2c7127b1]{width:5.3125rem;height:4.90625rem;background:#fff;border-radius:.28125rem}.more_wrapper[data-v-2c7127b1]{width:21.21875rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}.ad_wrapper[data-v-2c7127b1]{position:relative;overflow:hidden;width:21.21875rem;height:4.84375rem;background:linear-gradient(-90deg,#b4dada,#13848c 90%);border-radius:.3125rem;margin:.46875rem auto 0}.check_wrapper[data-v-2c7127b1]{width:21.1875rem;height:6.71875rem;background:#fff;border-radius:.3125rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}.bannder_wrapper[data-v-2c7127b1]{width:100%;height:14.25rem;position:relative;z-index:1}.bannder_wrapper uni-image[data-v-2c7127b1]{width:100%;height:14.25rem;display:block;object-fit:contain}.user_wrapper[data-v-2c7127b1]{width:21.1875rem;height:2.34375rem;margin:0 auto;position:relative}.user_box_wrapper[data-v-2c7127b1]{z-index:2;position:absolute;width:21.1875rem;height:4.8125rem;background:#fff;border-radius:.3125rem;bottom:0;display:flex;align-items:center}.order_wrapper[data-v-2c7127b1]{width:21.1875rem;height:6.09375rem;background:#fff;border-radius:.3125rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}

@ -0,0 +1 @@
.order_pay_button_wrapper[data-v-6f24c5bf]{display:flex;align-items:center}.button_item_wrapper[data-v-6f24c5bf]{width:5.625rem;height:1.875rem;border-radius:.9375rem;line-height:1.875rem;text-align:center;font-weight:400;font-size:.75rem;margin-left:.625rem}.pay_button_wrapper[data-v-6f24c5bf]{background:#239ea3;color:#fff}.change_button_wrapper[data-v-6f24c5bf]{background:#e1ecee;color:#239ea3}.refund_button_wrapper[data-v-6f24c5bf]{background:#239ea3;color:#fff}.report_button_wrapper[data-v-6f24c5bf]{background:#e1ecee;color:#239ea3}.decode_button_wrapper[data-v-6f24c5bf]{background:#239ea3;color:#fff}.order_pay_blank_wrapper[data-v-6f24c5bf]{height:.9375rem}.order_pay_time_wrapper[data-v-6f24c5bf]{font-weight:500;font-size:.625rem;color:#8b8b8b;line-height:.8125rem}.time_red[data-v-6f24c5bf]{color:#ec4d15;margin:0 .15625rem}.order_pay_wrapper[data-v-6f24c5bf]{display:flex;align-items:center;justify-content:space-between;width:calc(100% - 1.875rem);margin:0 auto;height:3.125rem}.order_line_wrapper[data-v-6f24c5bf]{width:20.625rem;height:.03125rem;background:#ebeaea;margin:.59375rem auto 0}.order_price_wrapper[data-v-6f24c5bf]{font-weight:400;color:#111;line-height:1;margin-top:.875rem;text-align:right;margin-right:.9375rem;font-size:.8125rem}.price_text[data-v-6f24c5bf]{margin-left:.3125rem}.price_true[data-v-6f24c5bf]{font-size:.375rem}.order_info_wrapper[data-v-6f24c5bf]{margin-top:.4375rem}.order_info_line_wrapper[data-v-6f24c5bf]{display:flex;align-items:center;margin-top:.75rem}.order_info_line_label_wrapper[data-v-6f24c5bf]{width:3.75rem;font-weight:400;font-size:.75rem;color:#8b8b8b;line-height:1;margin-left:.9375rem}.order_info_line_value_wrapper[data-v-6f24c5bf]{font-weight:400;font-size:.75rem;color:#333;line-height:1;margin-left:.3125rem}.combo_name_wrapper[data-v-6f24c5bf]{width:16.25rem;font-weight:700;font-size:1rem;color:#0e0e0e;line-height:1;margin-left:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.order_status_wrapper[data-v-6f24c5bf]{position:absolute;top:.9375rem;right:.84375rem;font-size:.8125rem}.order_status_wrapper.status1[data-v-6f24c5bf]{color:#ec4d15}.order_status_wrapper.status2[data-v-6f24c5bf]{color:#239ea3}.order_status_wrapper.status3[data-v-6f24c5bf]{color:#ec4d15}.order_status_wrapper.status4[data-v-6f24c5bf]{color:#131313}.order_status_wrapper.status5[data-v-6f24c5bf]{color:#ec4d15}.order_wrapper[data-v-6f24c5bf]{position:relative;width:22.1875rem;background:#fff;box-shadow:0 0 .3125rem rgba(0,0,0,.05);border-radius:.3125rem;margin:0 auto;padding-top:1.09375rem;margin-top:.5rem}.order_list_wrapper[data-v-801fae33]{height:calc(100vh - 4.0625rem);width:23.4375rem;overflow-y:auto;padding-bottom:.9375rem;margin:0 auto;overflow-x:hidden;background:#f8f8f8;-ms-overflow-style:none;scrollbar-width:none;overflow:-moz-scrollbars-none;overflow-y:scroll}.order_list_wrapper[data-v-801fae33]::-webkit-scrollbar{display:none}.order_select_item_line_wrapper[data-v-801fae33]{position:absolute;width:2.96875rem;height:.3125rem;background:linear-gradient(to bottom,rgba(255,255,255,0),#1b9a9f);border-radius:.15625rem;bottom:0;left:50%;transform:translate(-50%);opacity:0}.order_select_item_wrapper[data-v-801fae33]{width:20%;height:3.125rem;text-align:center;line-height:3.125rem;position:relative;font-weight:400;font-size:.9375rem;color:#2f2f2f}.order_select_item_wrapper.active[data-v-801fae33]{color:#239ea3}.order_select_item_wrapper.active .order_select_item_line_wrapper[data-v-801fae33]{opacity:1}.order_select_wrapper[data-v-801fae33]{width:23.4375rem;height:3.125rem;background:#fff;box-shadow:0 -.03125rem .03125rem rgba(0,0,0,.1);margin:0 auto;display:flex;align-items:center;justify-content:space-between}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
import{r as e,o as a,c as s,w as t,z as o,A as p,i as n,d as r,h as d,t as i}from"./index-DZ-bgQ02.js";import{_ as l}from"./_plugin-vue_export-helper.BCo6x5W8.js";const u=l({__name:"login",props:{openid:{type:String,default:""}},setup(l){const u=l,_=e("授权登录中,请稍候...");return a((()=>{(()=>{let e="";u.openid&&(e=decodeURIComponent(u.openid)),e?(o("OPENID",e),p({url:"/pages/main/index/index"})):_.value="未获取到授权信息,请从小程序进入"})()})),(e,a)=>{const o=n;return r(),s(o,{class:"tip_wrapper"},{default:t((()=>[d(i(_.value),1)])),_:1})}}},[["__scopeId","data-v-0b58075f"]]);export{u as default};
import{r as e,o as a,c as s,w as t,L as o,M as p,i as n,d as r,h as d,t as i}from"./index-DekUPms8.js";import{_ as l}from"./_plugin-vue_export-helper.BCo6x5W8.js";const u=l({__name:"login",props:{openid:{type:String,default:""}},setup(l){const u=l,_=e("授权登录中,请稍候...");return a((()=>{(()=>{let e="";u.openid&&(e=decodeURIComponent(u.openid)),e?(o("OPENID",e),p({url:"/pages/main/index/index"})):_.value="未获取到授权信息,请从小程序进入"})()})),(e,a)=>{const o=n;return r(),s(o,{class:"tip_wrapper"},{default:t((()=>[d(i(_.value),1)])),_:1})}}},[["__scopeId","data-v-0b58075f"]]);export{u as default};

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
import{c as a,w as s,i as r,d as e,h as t,f as n}from"./index-DZ-bgQ02.js";const d={__name:"order",setup:d=>(d,l)=>{const o=r;return e(),a(o,null,{default:s((()=>[t(" Order "),n(o,{class:"blank_wrapper"})])),_:1})}};export{d as default};

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/h5/assets/uni.41f11072.css">
<link rel="stylesheet" href="/h5/assets/uni.82829527.css">
<meta charset="UTF-8" />
<script>
@ -13,7 +13,7 @@
</script><title>海南现代妇女儿童医院</title>
<!--preload-links-->
<!--app-context-->
<script type="module" crossorigin src="/h5/assets/index-DZ-bgQ02.js"></script>
<script type="module" crossorigin src="/h5/assets/index-DekUPms8.js"></script>
<link rel="stylesheet" crossorigin href="/h5/assets/index-rHNUTrAz.css">
</head>
<body>

@ -2,6 +2,7 @@
use Illuminate\Support\Facades\Route;
Route::any("/api/H5/Order/list", [\App\Http\Controllers\API\H5\OrderController::class, 'list']);
Route::any("/api/H5/Combo/list", [\App\Http\Controllers\API\H5\ComboController::class, 'list']);
Route::any("/api/H5/Combo/select", [\App\Http\Controllers\API\H5\ComboController::class, 'select']);

@ -5,7 +5,8 @@
* date2024年8月7日 20:05:05
*/
import {
ref
ref,
computed
} from 'vue'
import {
$image,
@ -22,13 +23,25 @@
const combo_active = ref('')
const person_active = ref('')
const selectItemClick = (type, value) => {
select_active.value[type] = value
}
const selectDone = () => {
combo_active.value = select_active.value.combo
person_active.value = select_active.value.person
select_drawer_ref.value.close()
}
const clearSelectClick = () => {
combo_active.value = ''
person_active.value = ''
}
const combo_select = ref({
combo: [],
person: [],
})
const comboActiveName = () => {
for (let i in combo_select.value.combo) {
if (combo_select.value.combo[i].value) {
if (combo_select.value.combo[i].value === combo_active.value) {
return combo_select.value.combo[i].label
}
}
@ -36,7 +49,7 @@
}
const personActiveName = () => {
for (let i in combo_select.value.person) {
if (combo_select.value.person[i].value) {
if (combo_select.value.person[i].value === person_active.value) {
return combo_select.value.person[i].label
}
}
@ -44,7 +57,9 @@
}
const getComboSelect = async () => {
uni.showLoading()
const response = await $api('ComboSelect')
uni.hideLoading()
$response(response, () => {
combo_select.value = response.data
getComboList()
@ -63,11 +78,41 @@
name: ''
},
})
const combo_list_computed = computed(() => {
let list = []
for (let i in combo_list.value.list) {
let push = false
if (!combo_active.value) {
push = true
} else {
if (combo_list.value.list[i].combo_type === combo_active.value) {
push = true
}
}
if (!!push) {
if (!person_active.value) {
push = true
} else {
if (combo_list.value.list[i].person_type === person_active.value) {
push = true
} else {
push = false
}
}
}
if (!!push) {
list.push(combo_list.value.list[i])
}
}
return list
})
const getComboList = async () => {
uni.showLoading()
const response = await $api('ComboList', {
doctor: $store.save.doctor,
hospital: hospital_active.value,
})
uni.hideLoading()
$response(response, () => {
combo_list.value = response.data
})
@ -94,6 +139,22 @@
}
}
const select_drawer_ref = ref(null)
const selectDrawerRef = (e) => {
select_drawer_ref.value = e
}
const select_active = ref({
combo: '',
person: '',
})
const selectShow = () => {
select_active.value = {
combo: combo_active.value,
person: person_active.value,
}
select_drawer_ref.value.open()
}
onShow(() => {
if (!!config_ref.value) {
checkHospital()
@ -105,6 +166,7 @@
<view v-if="!!$store.config">
<view :ref="configRef"></view>
</view>
<view class="header_wrapper">
<view v-if="!!combo_list.hospital.id" class="hospital_wrapper">
<view class="hospital_icon_wrapper">
@ -118,7 +180,7 @@
<view v-if="!!combo_list.info.name" class="user_wrapper">
<view class="user_title_wrapper">就诊人</view>
<view class="user_name_wrapper">{{ combo_list.info.name }}</view>
<view class="user_choose_wrapper">
<view v-if="combo_list.info.count > 1" class="user_choose_wrapper">
<image src="@/static/assets/qiehuan@2x.png"></image>
</view>
</view>
@ -134,7 +196,7 @@
<view class="doctor_tip_wrapper">自动筛选匹配套餐</view>
</view>
<view class="select_wrapper">
<view class="select_item_wrapper" :class="[
<view @click="clearSelectClick()" class="select_item_wrapper" :class="[
(!combo_active && !person_active) ? 'active' : ''
]">
<view class="select_item_name_wrapper">综合排序</view>
@ -143,7 +205,7 @@
</view>
<view class="select_item_line_wrapper"></view>
</view>
<view class="select_item_wrapper" :class="[
<view @click="selectShow()" class="select_item_wrapper" :class="[
!!combo_active ? 'active' : ''
]">
<view class="select_item_name_wrapper">{{ !!combo_active ? comboActiveName() : '套餐类型' }}</view>
@ -152,7 +214,7 @@
</view>
<view class="select_item_line_wrapper"></view>
</view>
<view class="select_item_wrapper" :class="[
<view @click="selectShow()" class="select_item_wrapper" :class="[
!!person_active ? 'active' : ''
]">
<view class="select_item_name_wrapper">{{ !!person_active ? personActiveName() : '适用人群' }}</view>
@ -161,7 +223,7 @@
</view>
<view class="select_item_line_wrapper"></view>
</view>
<view class="select_item_wrapper">
<view @click="selectShow()" class="select_item_wrapper">
<view class="select_item_name_wrapper">筛选</view>
<view class="select_item_icon2_wrapper">
<image src="@/static/assets/shaixuan@2x.png"></image>
@ -169,7 +231,7 @@
</view>
</view>
<view class="list_wrapper">
<view class="combo_wrapper" v-for="(i,k) in combo_list.list" :key="k">
<view class="combo_wrapper" v-for="(i,k) in combo_list_computed" :key="k">
<view class="combo_info_wrapper">
<view class="combo_cover_wrapper">
<image :src="$image(i.cover)"></image>
@ -206,15 +268,107 @@
<view class="combo_line_wrapper"></view>
</view>
</view>
<uni-drawer :ref="selectDrawerRef" mode="right" :mask-click="false">
<view>
<scroll-view scroll-y="true">
<view>
<view class="select_group_wrapper">
<view class="select_group_title_wrapper">套餐类型</view>
<view class="select_group_line_wrapper">
<view @click="selectItemClick('combo','')" class="select_group_item_wrapper" :class="[
select_active.combo === '' ? 'active' : ''
]">
全部
</view>
<view @click="selectItemClick('combo',i.value)" class="select_group_item_wrapper"
v-for="(i,k) in combo_select.combo" :key="k" :class="[
select_active.combo === i.value ? 'active' : ''
]">
{{ i.label }}
</view>
</view>
</view>
<view class="select_group_wrapper">
<view class="select_group_title_wrapper">适用人群</view>
<view class="select_group_line_wrapper">
<view @click="selectItemClick('person','')" class="select_group_item_wrapper" :class="[
select_active.person === '' ? 'active' : ''
]">
全部
</view>
<view @click="selectItemClick('person',i.value)" class="select_group_item_wrapper"
v-for="(i,k) in combo_select.person" :key="k" :class="[
select_active.person === i.value ? 'active' : ''
]">
{{ i.label }}
</view>
</view>
</view>
<view class="select_done_wrapper" @click="selectDone()"></view>
</view>
</scroll-view>
</view>
</uni-drawer>
</view>
</template>
<style scoped>
.select_done_wrapper {
color: #ffffff;
background: #239EA3;
width: calc(100% - 60rpx);
margin: 50rpx auto 0;
height: 50rpx;
line-height: 50rpx;
text-align: center;
border-radius: 6rpx;
}
.select_group_item_wrapper {
padding: 10rpx 20rpx;
border: 1rpx solid #239EA3;
font-size: 22rpx;
margin: 20rpx 20rpx 0 0;
border-radius: 6rpx;
color: #239EA3;
}
.select_group_item_wrapper.active {
color: #ffffff;
background: #239EA3;
}
.select_group_line_wrapper {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.select_group_title_wrapper {
font-size: 30rpx;
font-weight: bold;
}
.select_group_wrapper {
margin: 20rpx;
}
.list_wrapper {
padding-top: 30rpx;
height: calc(100vh - 100rpx - 10rpx - 70rpx - 80rpx - 30rpx - 30rpx);
width: 100%;
width: 750rpx;
overflow-y: auto;
padding-bottom: 30rpx;
margin: 0 auto;
overflow-x: hidden;
-ms-overflow-style: none;
scrollbar-width: none;
overflow: -moz-scrollbars-none;
overflow-y: scroll;
}
.list_wrapper::-webkit-scrollbar {
display: none;
}
.combo_line_wrapper {
@ -299,6 +453,7 @@
.combo_wrapper {
height: 307rpx;
width: 750rpx;
margin: 0 auto;
}
.combo_tags_wrapper {
@ -336,13 +491,14 @@
.combo_content_wrapper {
margin-left: 30rpx;
width: calc(100% - 190rpx - 30rpx - 20rpx - 55rpx);
width: calc(750rpx - 190rpx - 30rpx - 20rpx - 55rpx);
}
.combo_info_wrapper {
display: flex;
align-items: center;
width: 100%;
width: 750rpx;
margin: 0 auto;
}
.combo_cover_wrapper {
@ -374,10 +530,11 @@
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
width: 750rpx;
height: 80rpx;
background: #F1F7F7;
box-shadow: 0rpx -1rpx 1rpx 0rpx rgba(0, 0, 0, 0.1);
margin: 0 auto;
}
.select_item_icon_wrapper {
@ -490,8 +647,9 @@
}
.user_wrapper {
width: 342rpx;
height: 80rpx;
padding-left: 40rpx;
padding-right: 20rpx;
background: #FFFFFF;
border-radius: 40rpx 0 0 40rpx;
display: flex;
@ -503,9 +661,10 @@
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
width: 750rpx;
height: 100rpx;
background: #D8EDF2;
margin: 0 auto;
}
.hospital_wrapper {

@ -518,14 +518,15 @@
}
.bannder_wrapper {
width: 100%;
width: 750rpx;
height: 456rpx;
position: relative;
z-index: 1;
z-index: 1;
margin: 0 auto;
}
.bannder_wrapper image {
width: 100%;
width: 750rpx;
height: 456rpx;
display: block;
object-fit: contain;

@ -5,21 +5,173 @@
* date2024年8月7日 20:05:05
*/
import {
ref
ref,
computed,
nextTick
} from 'vue'
import {
$api,
$response
} from '@/api'
import {
onShow
} from '@dcloudio/uni-app'
import OrderComponent from './src/order.vue'
import {
useStore
} from '@/store'
const $store = useStore()
const order_list = ref([])
const getOrderList = async () => {
uni.showLoading()
const response = await $api('OrderList')
uni.hideLoading()
$response(response, () => {
order_list.value = response.data.list
})
}
const order_list_computed = computed(() => {
let list = []
let status_allow = []
switch (status_active.value) {
case '0':
status_allow = [1, 2, 3, 4, 5]
break;
case '1':
status_allow = [1]
break;
case '2':
status_allow = [2]
break;
case '3':
status_allow = [3, 5]
break;
case '4':
status_allow = [4]
break;
}
for (let i in order_list.value) {
if (status_allow.includes(order_list.value[i].status)) {
list.push(order_list.value[i])
}
}
return list
})
const config_ref = ref(null)
const configRef = (e) => {
if (!config_ref.value) {
config_ref.value = e
getOrderList()
}
}
const status_active = ref('0')
const status_arr = ref([{
label: '全部',
value: '0'
}, {
label: '待支付',
value: '1'
}, {
label: '进行中',
value: '2'
}, {
label: '已完成',
value: '4'
}, {
label: '已关闭',
value: '3'
}])
const statusClick = (status) => {
status_active.value = '-1'
nextTick(() => {
status_active.value = status
})
}
onShow(() => {
if (!!config_ref.value) {
getOrderList()
}
})
</script>
<template>
<view>
Order
<view>
<view v-if="!!$store.config">
<view :ref="configRef"></view>
</view>
<view class="order_select_wrapper">
<view v-for="(i,k) in status_arr" :key="k" class="order_select_item_wrapper" :class="[
i.value === status_active ? 'active' : ''
]" @click="statusClick(i.value)">
{{ i.label }}
<view class="order_select_item_line_wrapper"></view>
</view>
</view>
<view class="order_list_wrapper">
<OrderComponent v-for="(i,k) in order_list_computed" :key="k" :info="i"></OrderComponent>
</view>
<view class="blank_wrapper"></view>
</view>
</template>
<style scoped>
</style>
.order_list_wrapper {
height: calc(100vh - 100rpx - 30rpx);
width: 750rpx;
overflow-y: auto;
padding-bottom: 30rpx;
margin: 0 auto;
overflow-x: hidden;
background: #F8F8F8;
-ms-overflow-style: none;
scrollbar-width: none;
overflow: -moz-scrollbars-none;
overflow-y: scroll;
}
.order_list_wrapper::-webkit-scrollbar {
display: none;
}
.order_select_item_line_wrapper {
position: absolute;
width: 95rpx;
height: 10rpx;
background: linear-gradient(to bottom, #ffffff00, #1B9A9F);
border-radius: 5rpx;
bottom: 0;
left: 50%;
transform: translateX(-50%);
opacity: 0;
}
.order_select_item_wrapper {
width: calc(100% / 5);
height: 100rpx;
text-align: center;
line-height: 100rpx;
position: relative;
font-weight: 400;
font-size: 30rpx;
color: #2F2F2F;
}
.order_select_item_wrapper.active {
color: #239EA3;
}
.order_select_item_wrapper.active .order_select_item_line_wrapper {
opacity: 1;
}
.order_select_wrapper {
width: 750rpx;
height: 100rpx;
background: #FFFFFF;
box-shadow: 0rpx -1rpx 1rpx 0rpx rgba(0, 0, 0, 0.1);
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>

@ -0,0 +1,304 @@
<script setup>
/**
* name
* usersa0ChunLuyu
* date2024年8月14日 20:38:40
*/
import {
ref,
onMounted
} from 'vue'
import {
$response
} from '@/api'
import {
onShow
} from '@dcloudio/uni-app'
const $props = defineProps({
info: {
type: Object,
default: () => {
return {
id: 0
}
}
}
});
const order_info = ref(false)
const deepInfo = () => {
order_info.value = JSON.parse(JSON.stringify($props.info))
checkStatus()
}
const countdown = ref(null)
const checkStatus = () => {
if (order_info.value.status === 1) {
countdown.value = setInterval(() => {
countdownRun()
}, 500)
}
}
const count_down_text = ref('限制时间')
const countdownRun = () => {
let seconds = Math.floor((order_info.value.end_time - (new Date() / 1000)) % 60)
let minutes = Math.floor((order_info.value.end_time - (new Date() / 1000)) / 60)
count_down_text.value = `${minutes}${seconds}`
if (order_info.value.end_time <= new Date() / 1000) {
clearInterval(countdown.value)
order_info.value.status = 3
}
}
onMounted(() => {
deepInfo()
})
</script>
<template>
<view>
<view v-if="!!order_info" class="order_wrapper">
<view class="order_status_wrapper" :class="[`status${order_info.status}`]">
<view v-if="[1].includes(order_info.status)">
待支付
</view>
<view v-if="[2].includes(order_info.status)">
已预约
</view>
<view v-if="[3,5].includes(order_info.status)">
交易关闭
</view>
<view v-if="[4].includes(order_info.status)">
已完成
</view>
</view>
<view class="combo_name_wrapper">{{ order_info.title }}</view>
<view class="order_info_wrapper">
<view class="order_info_line_wrapper">
<view class="order_info_line_label_wrapper">体检人</view>
<view class="order_info_line_value_wrapper">{{ order_info.name }}</view>
</view>
<view class="order_info_line_wrapper">
<view class="order_info_line_label_wrapper">预约时间</view>
<view class="order_info_line_value_wrapper">{{ order_info.time }}</view>
</view>
<view class="order_info_line_wrapper">
<view class="order_info_line_label_wrapper">订单号</view>
<view class="order_info_line_value_wrapper">{{ order_info.order }}</view>
</view>
<view class="order_info_line_wrapper">
<view class="order_info_line_label_wrapper">类型</view>
<view class="order_info_line_value_wrapper">{{ order_info.type }}</view>
</view>
<view v-if="[1,2,4,5].includes(order_info.status)" class="order_price_wrapper">
<text v-if="[1].includes(order_info.status)"></text>
<text v-if="[2,4].includes(order_info.status)"></text>
<text v-if="[5].includes(order_info.status)">退</text>
<text class="price_true"
v-if="order_info.true_price !== order_info.price">(测试:{{ order_info.true_price }})</text>
<text class="price_text">{{ order_info.price }}</text>
</view>
<view class="order_line_wrapper"></view>
<view v-if="![3].includes(order_info.status)" class="order_pay_wrapper">
<view class="order_pay_time_wrapper">
<view v-if="[1].includes(order_info.status)">
<text>请在</text>
<text class="time_red">{{ count_down_text }}</text>
<text>内完成支付</text>
</view>
<view v-if="[2,4].includes(order_info.status)">
<view>支付时间</view>
<view>{{ order_info.pay_time }}</view>
</view>
<view v-if="[5].includes(order_info.status)">
<view>退款时间</view>
<view>{{ order_info.refund_time }}</view>
</view>
</view>
<view class="order_pay_button_wrapper">
<view v-if="[1].includes(order_info.status)" class="button_item_wrapper pay_button_wrapper"></view>
<view v-if="[2].includes(order_info.status)" class="button_item_wrapper change_button_wrapper"></view>
<view v-if="[2].includes(order_info.status)" class="button_item_wrapper refund_button_wrapper">退</view>
<view v-if="[4].includes(order_info.status) && order_info.report"
class="button_item_wrapper report_button_wrapper">
查看报告
</view>
<view v-if="[4].includes(order_info.status) && order_info.report && !order_info.decode"
class="button_item_wrapper decode_button_wrapper">报告解读</view>
</view>
</view>
<view v-else class="order_pay_blank_wrapper"></view>
</view>
</view>
</view>
</template>
<style scoped>
.order_pay_button_wrapper {
display: flex;
align-items: center;
}
.button_item_wrapper {
width: 180rpx;
height: 60rpx;
border-radius: 30rpx;
line-height: 60rpx;
text-align: center;
font-weight: 400;
font-size: 24rpx;
margin-left: 20rpx;
}
.pay_button_wrapper {
background: #239EA3;
color: #FFFFFF;
}
.change_button_wrapper {
background: #E1ECEE;
color: #239EA3;
}
.refund_button_wrapper {
background: #239EA3;
color: #FFFFFF;
}
.report_button_wrapper {
background: #E1ECEE;
color: #239EA3;
}
.decode_button_wrapper {
background: #239EA3;
color: #FFFFFF;
}
.order_pay_blank_wrapper {
height: 30rpx;
}
.order_pay_time_wrapper {
font-weight: 500;
font-size: 20rpx;
color: #8B8B8B;
line-height: 26rpx;
}
.time_red {
color: #EC4D15;
margin: 0 5rpx;
}
.order_pay_wrapper {
display: flex;
align-items: center;
justify-content: space-between;
width: calc(100% - 60rpx);
margin: 0 auto;
height: 100rpx;
}
.order_line_wrapper {
width: 660rpx;
height: 1rpx;
background: #EBEAEA;
margin: 19rpx auto 0;
}
.order_price_wrapper {
font-weight: 400;
color: #111111;
line-height: 1;
margin-top: 28rpx;
text-align: right;
margin-right: 30rpx;
font-size: 26rpx;
}
.price_text {
margin-left: 10rpx;
}
.price_true {
font-size: 12rpx;
}
.order_info_wrapper {
margin-top: 14rpx;
}
.order_info_line_wrapper {
display: flex;
align-items: center;
margin-top: 24rpx;
}
.order_info_line_label_wrapper {
width: 120rpx;
font-weight: 400;
font-size: 24rpx;
color: #8B8B8B;
line-height: 1;
margin-left: 30rpx;
}
.order_info_line_value_wrapper {
font-weight: 400;
font-size: 24rpx;
color: #333333;
line-height: 1;
margin-left: 10rpx;
}
.combo_name_wrapper {
width: calc(550rpx - 30rpx);
font-weight: bold;
font-size: 32rpx;
color: #0E0E0E;
line-height: 1;
margin-left: 30rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.order_status_wrapper {
position: absolute;
top: 30rpx;
right: 27rpx;
font-size: 26rpx;
}
.order_status_wrapper.status1 {
color: #EC4D15;
}
.order_status_wrapper.status2 {
color: #239EA3;
}
.order_status_wrapper.status3 {
color: #EC4D15;
}
.order_status_wrapper.status4 {
color: #131313;
}
.order_status_wrapper.status5 {
color: #EC4D15;
}
.order_wrapper {
position: relative;
width: 710rpx;
background: #FFFFFF;
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 0, 0, 0.05);
border-radius: 10rpx;
margin: 0 auto;
padding-top: 35rpx;
margin-top: 16rpx;
}
</style>
Loading…
Cancel
Save