更新 1. H5 套餐列表 2. 流程缓存逻辑

wenjuan
鹿和sa0ChunLuyu 1 year ago
parent 4def18e8dd
commit 4aa34eaef9

@ -21,6 +21,8 @@ class ApiMapController extends Controller
{
$base_url = env('APP_URL');
return [
'ComboList' => $base_url . '/api/H5/Combo/list',
'ComboSelect' => $base_url . '/api/H5/Combo/select',
'UserInfo' => $base_url . '/api/H5/User/info',
'ConfigVersion' => $base_url . '/api/H5/Config/version',
'ConfigConfig' => $base_url . '/api/H5/Config/config',

@ -0,0 +1,88 @@
<?php
namespace App\Http\Controllers\API\H5;
use App\Http\Controllers\Controller;
use App\Services\ConfigService;
use Illuminate\Http\Request;
class ComboController extends Controller
{
public function select(Request $request)
{
$combo = [[
'label' => '类型一',
'value' => '1',
], [
'label' => '类型二',
'value' => '2',
]];
$person = [[
'label' => '类型一',
'value' => '1',
], [
'label' => '类型二',
'value' => '2',
]];
return \Yz::Return(true, '获取成功', [
'combo' => $combo,
'person' => $person
]);
}
public function list(Request $request)
{
$hospital = $request->post('hospital');
$doctor = $request->post('doctor');
$openid = $request->post('openid');
$item = [
'cover' => '/assets/h5/combo.png',
'name' => '中老年体检套餐(女)',
'sex' => 2,
'combo_type' => '1',
'person_type' => '1',
'tag' => [[
'text' => '女已婚',
'text_color' => '#47ABD8',
'color' => '#EBF5FC',
], [
'text' => '22个项目',
'text_color' => '#34C292',
'color' => '#E9F8F3',
]],
'desc' => ['血糖', '腹部超声', '心电图'],
'price' => '1229.00',
'original_price' => '2048.88',
'count' => '77'
];
$list = [];
for ($i = 0; $i < 20; $i++) {
$list[] = $item;
}
$hospital_info = [
'id' => $hospital,
'name' => '秀英院区',
'address' => '秀英院区秀英院区秀英院区地址',
'latitude' => '39.867671',
'longitude' => '119.514223',
];
$info = [
'name' => '演示用户',
'sex' => '2',
'count' => 2
];
$doctor_info = [
'id' => $doctor,
'name' => '张大夫'
];
return \Yz::Return(true, '获取成功', [
'list' => $list,
'hospital' => $hospital_info,
'doctor' => $doctor_info,
'info' => $info,
]);
}
}

@ -11,7 +11,7 @@ class HomeController extends Controller
// 获取配置更新时间
public function config_version()
{
$version = '2024-08-12 19:15:54';
$version = '2024-08-13 18:00:02';
return \Yz::Return(true, '获取成功', [
'version' => $version
]);
@ -21,15 +21,19 @@ class HomeController extends Controller
public function config()
{
$config = [
'latitude' => '39.867671',
'longitude' => '119.514223',
'hospital' => [[
'id' => 1,
'name' => '秀英院区',
'latitude' => '39.867671',
'longitude' => '119.514223',
]],
'tip' => '海南现代妇女儿童医院体检中心欢迎您',
'logo' => '/assets/h5/logo.png',
'banner' => '/assets/h5/banner.png',
'order' => [[
'message' => '',
'name' => '个人体检预约',
'jump' => '/pages/main/choose/choose?type=self',
'jump' => '/pages/main/combo/combo',
'icon' => '/assets/h5/gejianyuyue.png'
], [
'message' => '暂未开放',

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
.more_item_name_wrapper[data-v-55786203]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.4375rem}.more_item_wrapper[data-v-55786203]{width:50%}.more_item_icon_wrapper[data-v-55786203]{width:2.59375rem;height:2.59375rem;margin:.46875rem auto 0}.more_item_icon_wrapper uni-image[data-v-55786203]{width:2.59375rem;height:2.59375rem;display:block;object-fit:contain}.more_item_name_wrapper[data-v-55786203]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.8125rem}.ad_button_wrapper[data-v-55786203]{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-55786203]{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-55786203]{font-weight:500;font-size:.625rem;color:#b7b7b7;line-height:1;text-align:center;margin-top:.34375rem}.check_item_name_wrapper[data-v-55786203]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.4375rem}.check_item_wrapper[data-v-55786203]{width:50%}.check_item_icon_wrapper[data-v-55786203]{width:2.59375rem;height:2.59375rem;margin:0 auto}.check_item_icon_wrapper uni-image[data-v-55786203]{width:2.59375rem;height:2.59375rem;display:block;object-fit:contain}.order_item_name_wrapper[data-v-55786203]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1;text-align:center;margin-top:.8125rem}.order_item_wrapper[data-v-55786203]{width:50%;border-right:.03125rem #E8E8E8 solid}.order_item_wrapper[data-v-55786203]:last-child{border-right:none}.order_item_icon_wrapper[data-v-55786203]{width:2.4375rem;height:2.4375rem;margin:0 auto}.order_item_icon_wrapper uni-image[data-v-55786203]{width:2.4375rem;height:2.4375rem;display:block;object-fit:contain}.button_wrapper[data-v-55786203]{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-55786203]{font-weight:400;font-size:.75rem;color:#939393;line-height:1;margin-top:.71875rem}.user_name_wrapper[data-v-55786203]{font-weight:500;font-size:.8125rem;color:#323232;line-height:1}.user_sex_wrapper[data-v-55786203]{font-size:.6875rem;color:#939393;line-height:1;margin-left:.625rem}.user_info_wrapper[data-v-55786203]{display:flex;align-items:center}.logo_wrapper[data-v-55786203]{width:2.8125rem;height:2.8125rem;margin-left:.84375rem}.content_wrapper[data-v-55786203]{margin-left:.78125rem}.logo_wrapper uni-image[data-v-55786203]{width:2.8125rem;height:2.8125rem;display:block;object-fit:contain}.map_wrapper[data-v-55786203]{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-55786203]{width:.78125rem;height:.875rem}.map_icon_wrapper uni-image[data-v-55786203]{width:.78125rem;height:.875rem;display:block;object-fit:contain}.map_name_wrapper[data-v-55786203]{height:.6875rem;font-weight:500;font-size:.6875rem;color:#fff;line-height:1;margin-left:.4375rem}.map_long_wrapper[data-v-55786203]{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-55786203]{width:5.3125rem;height:4.90625rem;background:#fff;border-radius:.28125rem}.more_wrapper[data-v-55786203]{width:21.21875rem;margin:.46875rem auto 0;display:flex;align-items:center;justify-content:space-around}.ad_wrapper[data-v-55786203]{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-55786203]{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-55786203]{width:100%;height:14.25rem;position:relative;z-index:1}.bannder_wrapper uni-image[data-v-55786203]{width:100%;height:14.25rem;display:block;object-fit:contain}.user_wrapper[data-v-55786203]{width:21.1875rem;height:2.34375rem;margin:0 auto;position:relative}.user_box_wrapper[data-v-55786203]{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-55786203]{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 @@
.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 @@
.tip_wrapper[data-v-0b58075f]{height:100vh;width:100%;display:flex;align-items:center;justify-content:center}

@ -1 +0,0 @@
.tip_wrapper[data-v-98c97285]{height:100vh;width:100%;display:flex;align-items:center;justify-content:center}

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

File diff suppressed because one or more lines are too long

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 @@
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};

@ -1 +0,0 @@
import{r as e,o as a,c as s,w as p,v as t,p as o,i as n,d as r,h as d,t as i}from"./index-kKqG3HBi.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?(t("OPENID",e),o({url:"/pages/main/index/index"})):_.value="未获取到授权信息,请从小程序进入"})()})),(e,a)=>{const t=n;return r(),s(t,{class:"tip_wrapper"},{default:p((()=>[d(i(_.value),1)])),_:1})}}},[["__scopeId","data-v-98c97285"]]);export{u as default};

@ -0,0 +1 @@
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 +0,0 @@
import{c as a,w as s,i as r,d as e,h as t,f as n}from"./index-kKqG3HBi.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};

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/h5/assets/uni.86c29f22.css">
<link rel="stylesheet" href="/h5/assets/uni.41f11072.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-kKqG3HBi.js"></script>
<script type="module" crossorigin src="/h5/assets/index-DZ-bgQ02.js"></script>
<link rel="stylesheet" crossorigin href="/h5/assets/index-rHNUTrAz.css">
</head>
<body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

@ -2,6 +2,9 @@
use Illuminate\Support\Facades\Route;
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']);
Route::any("/api/H5/User/info", [\App\Http\Controllers\API\H5\UserController::class, 'info']);
Route::any("/api/H5/Config/version", [\App\Http\Controllers\API\H5\HomeController::class, 'config_version']);
Route::any("/api/H5/Config/config", [\App\Http\Controllers\API\H5\HomeController::class, 'config']);

@ -37,6 +37,12 @@
})
}
}
const save_info_str = uni.getStorageSync('SAVE_INFO')
if (!!save_info_str) {
$store.save_info = JSON.parse(save_info_str)
} else {
$store.resetSaveInfo()
}
}
const getConfigConfig = async () => {
@ -80,22 +86,23 @@
@import '@/uni_modules/uni-scss/index.scss';
/* #ifndef APP-NVUE */
@import '@/static/customicons.css';
/* #endif */
.grayscale {
filter: grayscale(100%);
}
//
page {
background-color: #f5f5f5;
}
.bottom_blank_wrapper {
/* #endif */
.grayscale {
filter: grayscale(100%);
}
//
page {
background-color: #f5f5f5;
}
.bottom_blank_wrapper {
height: calc(20rpx + var(--safe-area-inset-bottom));
}
.botm_blank_wrapper {
width: 100%;
}
.botm_blank_wrapper {
width: 100%;
height: 20rpx;
}

@ -36,6 +36,10 @@ export const $api = async (url_key, data = {}, opt = {}) => {
uni.$lu.toast(`接口不存在 [${url_key}]`)
return false
}
const openid = uni.getStorageSync('OPENID')
if (!!openid) {
data.openid = openid
}
return await $post({
url: $store.api_map[url_key],
data

@ -8,18 +8,543 @@
ref
} from 'vue'
import {
$image,
$api,
$response
} from '@/api'
import {
onShow
} from '@dcloudio/uni-app'
import {
useStore
} from '@/store'
const $store = useStore()
const combo_active = ref('')
const person_active = ref('')
const combo_select = ref({
combo: [],
person: [],
})
const comboActiveName = () => {
for (let i in combo_select.value.combo) {
if (combo_select.value.combo[i].value) {
return combo_select.value.combo[i].label
}
}
return '套餐类型'
}
const personActiveName = () => {
for (let i in combo_select.value.person) {
if (combo_select.value.person[i].value) {
return combo_select.value.person[i].label
}
}
return '适用人群'
}
const getComboSelect = async () => {
const response = await $api('ComboSelect')
$response(response, () => {
combo_select.value = response.data
getComboList()
})
}
const combo_list = ref({
list: [],
hospital: {
id: 0
},
doctor: {
id: 0
},
info: {
name: ''
},
})
const getComboList = async () => {
const response = await $api('ComboList', {
doctor: $store.save.doctor,
hospital: hospital_active.value,
})
$response(response, () => {
combo_list.value = response.data
})
}
const hospital_active = ref(0)
const checkHospital = () => {
let hospital_id = $store.save.hospital
if (!hospital_id) {
hospital_id = $store.config.hospital[0].id
}
hospital_active.value = hospital_id
$store.saveInfo({
hospital: hospital_id
})
getComboSelect()
}
const config_ref = ref(null)
const configRef = (e) => {
if (!config_ref.value) {
config_ref.value = e
checkHospital()
}
}
onShow(() => {
if (!!config_ref.value) {
checkHospital()
}
})
</script>
<template>
<view>
Combo
<view class="blank_wrapper"></view>
<view>
<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">
<image src="@/static/assets/dingwei@2x.png"></image>
</view>
<view class="hospital_name_wrapper">{{ combo_list.hospital.name }}</view>
<view class="hospital_select_wrapper">
<image src="@/static/assets/gengduo@2x.png"></image>
</view>
</view>
<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">
<image src="@/static/assets/qiehuan@2x.png"></image>
</view>
</view>
</view>
<view class="doctor_wrapper">
<view class="doctor_tip_wrapper">
<text v-if="!!combo_list.doctor.id"></text>
<text v-else></text>
</view>
<view class="doctor_name_wrapper">
{{ !!combo_list.doctor.id ? combo_list.doctor.name : '前往选择' }}
</view>
<view class="doctor_tip_wrapper">自动筛选匹配套餐</view>
</view>
<view class="select_wrapper">
<view class="select_item_wrapper" :class="[
(!combo_active && !person_active) ? 'active' : ''
]">
<view class="select_item_name_wrapper">综合排序</view>
<view class="select_item_icon_wrapper">
<image src="@/static/assets/xuanzegengduo@2x.png"></image>
</view>
<view class="select_item_line_wrapper"></view>
</view>
<view class="select_item_wrapper" :class="[
!!combo_active ? 'active' : ''
]">
<view class="select_item_name_wrapper">{{ !!combo_active ? comboActiveName() : '套餐类型' }}</view>
<view class="select_item_icon_wrapper">
<image src="@/static/assets/xuanzegengduo@2x.png"></image>
</view>
<view class="select_item_line_wrapper"></view>
</view>
<view class="select_item_wrapper" :class="[
!!person_active ? 'active' : ''
]">
<view class="select_item_name_wrapper">{{ !!person_active ? personActiveName() : '适用人群' }}</view>
<view class="select_item_icon_wrapper">
<image src="@/static/assets/xuanzegengduo@2x.png"></image>
</view>
<view class="select_item_line_wrapper"></view>
</view>
<view 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>
</view>
</view>
</view>
<view class="list_wrapper">
<view class="combo_wrapper" v-for="(i,k) in combo_list.list" :key="k">
<view class="combo_info_wrapper">
<view class="combo_cover_wrapper">
<image :src="$image(i.cover)"></image>
</view>
<view class="combo_content_wrapper">
<view class="combo_name_wrapper">{{ i.name }}</view>
<view class="combo_tags_wrapper">
<view class="combo_tag_wrapper" v-for="(ii,kk) in i.tag" :key="kk" :style="{
color:ii.text_color,
background:ii.color,
}">
{{ ii.text }}
</view>
</view>
<view class="combo_desc_wrapper">
{{ i.desc.join(" | ") }}
</view>
<view class="combo_price_wrapper">
<view class="combo_price_box_wrapper">
<view class="combo_true_price_wrapper">
<text class="combo_true_price_icon_wrapper">¥</text>
<text class="combo_true_price_number_wrapper">{{ i.price }}</text>
</view>
<view class="combo_original_price_wrapper">¥{{ i.original_price }}</view>
</view>
<view class="combo_count_wrapper">已售{{ i.count }}</view>
</view>
</view>
</view>
<view class="combo_button_wrapper">
<view class="combo_pick_button_wrapper">对比</view>
<view class="combo_buy_button_wrapper">预约</view>
</view>
<view class="combo_line_wrapper"></view>
</view>
</view>
</view>
</template>
<style scoped>
</style>
.list_wrapper {
padding-top: 30rpx;
height: calc(100vh - 100rpx - 10rpx - 70rpx - 80rpx - 30rpx - 30rpx);
width: 100%;
overflow-y: auto;
padding-bottom: 30rpx;
}
.combo_line_wrapper {
width: 710rpx;
height: 1rpx;
background: #E1ECEE;
margin: 15rpx auto 0;
}
.combo_pick_button_wrapper {
width: 160rpx;
height: 60rpx;
background: #E1ECEE;
border-radius: 30rpx;
font-weight: 400;
font-size: 28rpx;
color: #239EA3;
text-align: center;
line-height: 60rpx;
}
.combo_buy_button_wrapper {
width: 160rpx;
height: 60rpx;
background: #239EA3;
border-radius: 30rpx;
font-weight: 400;
font-size: 28rpx;
color: #ffffff;
text-align: center;
line-height: 60rpx;
margin-left: 32rpx;
margin-right: 20rpx;
}
.combo_button_wrapper {
display: flex;
align-items: center;
justify-content: end;
margin-top: 27rpx;
}
.combo_count_wrapper {
font-weight: 500;
font-size: 18rpx;
color: #8B8B8B;
line-height: 1;
}
.combo_original_price_wrapper {
font-weight: 500;
font-size: 18rpx;
color: #8B8B8B;
line-height: 1;
text-decoration-line: line-through;
margin-left: 10rpx;
}
.combo_true_price_wrapper {
font-weight: 500;
font-size: 18rpx;
color: #EC3D15;
line-height: 1;
}
.combo_true_price_number_wrapper {
font-size: 38rpx;
}
.combo_price_wrapper {
display: flex;
align-items: end;
justify-content: space-between;
margin-top: 21rpx;
}
.combo_price_box_wrapper {
display: flex;
align-items: end;
}
.combo_wrapper {
height: 307rpx;
width: 750rpx;
}
.combo_tags_wrapper {
display: flex;
align-items: center;
margin-top: 13rpx;
}
.combo_desc_wrapper {
font-weight: 500;
font-size: 20rpx;
color: #8B8B8B;
line-height: 1;
margin-top: 18rpx;
}
.combo_tag_wrapper {
padding-left: 13rpx;
padding-right: 13rpx;
height: 30rpx;
line-height: 30rpx;
border-radius: 5rpx;
font-weight: 400;
font-size: 18rpx;
color: #47ABD8;
margin-right: 8rpx;
}
.combo_name_wrapper {
font-weight: 400;
font-size: 32rpx;
color: #0E0E0E;
line-height: 1;
}
.combo_content_wrapper {
margin-left: 30rpx;
width: calc(100% - 190rpx - 30rpx - 20rpx - 55rpx);
}
.combo_info_wrapper {
display: flex;
align-items: center;
width: 100%;
}
.combo_cover_wrapper {
width: 190rpx;
height: 190rpx;
margin-left: 20rpx;
}
.combo_cover_wrapper image {
width: 190rpx;
height: 190rpx;
display: block;
object-fit: contain;
}
.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(calc(-50% - 8px));
opacity: 0;
}
.select_wrapper {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 80rpx;
background: #F1F7F7;
box-shadow: 0rpx -1rpx 1rpx 0rpx rgba(0, 0, 0, 0.1);
}
.select_item_icon_wrapper {
width: 18rpx;
height: 9rpx;
margin-left: 9rpx;
filter: grayscale(100%);
}
.select_item_icon_wrapper image {
width: 18rpx;
height: 9rpx;
display: block;
object-fit: contain;
}
.select_item_icon2_wrapper {
width: 26rpx;
height: 23rpx;
margin-left: 7rpx;
}
.select_item_icon2_wrapper image {
width: 26rpx;
height: 23rpx;
display: block;
object-fit: contain;
}
.select_item_name_wrapper {
font-weight: 400;
font-size: 26rpx;
color: #2F2F2F;
line-height: 1;
}
.select_item_wrapper {
width: 25%;
display: flex;
align-items: center;
justify-content: center;
position: relative;
height: 80rpx;
}
.select_item_wrapper.active .select_item_name_wrapper {
color: #239EA3;
font-weight: bold;
}
.select_item_wrapper.active .select_item_icon_wrapper {
filter: grayscale(0%);
}
.select_item_wrapper.active .select_item_line_wrapper {
opacity: 1;
}
.doctor_name_wrapper {
font-weight: 400;
font-size: 24rpx;
line-height: 1;
color: #FFFFFF;
border-bottom: 1rpx solid #FFFFFF;
}
.doctor_tip_wrapper {
font-weight: 400;
font-size: 22rpx;
line-height: 1;
color: #FFFFFF;
}
.doctor_wrapper {
display: flex;
align-items: center;
width: 710rpx;
height: 70rpx;
background: #28B7C1;
border-radius: 15rpx 15rpx 0rpx 0rpx;
padding-left: 24rpx;
margin: 10rpx auto 0;
}
.user_choose_wrapper {
width: 50rpx;
height: 50rpx;
margin-left: 30rpx;
}
.user_choose_wrapper image {
width: 50rpx;
height: 50rpx;
display: block;
object-fit: contain;
}
.user_title_wrapper {
font-weight: 400;
font-size: 28rpx;
color: #239EA3;
line-height: 1;
}
.user_name_wrapper {
font-weight: 400;
font-size: 28rpx;
color: #0d0d0d;
line-height: 1;
}
.user_wrapper {
width: 342rpx;
height: 80rpx;
background: #FFFFFF;
border-radius: 40rpx 0 0 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
.header_wrapper {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 100rpx;
background: #D8EDF2;
}
.hospital_wrapper {
display: flex;
align-items: center;
width: 50%;
}
.hospital_icon_wrapper {
width: 48rpx;
height: 48rpx;
margin-left: 20rpx;
}
.hospital_icon_wrapper image {
width: 48rpx;
height: 48rpx;
display: block;
object-fit: contain;
}
.hospital_name_wrapper {
font-weight: 400;
font-size: 28rpx;
color: #484747;
margin-left: 9rpx;
line-height: 1;
}
.hospital_select_wrapper {
width: 24rpx;
height: 14rpx;
margin-left: 19rpx;
}
.hospital_select_wrapper image {
width: 24rpx;
height: 14rpx;
display: block;
object-fit: contain;
}
</style>

@ -69,33 +69,113 @@
const lola = ref({
longitude: 0,
latitude: 0,
long: 0
latitude: 0
})
onShow(() => {
const getHospital = () => {
if ($store.config.hospital.length > 0) {
if (lola.value.longitude + lola.value.latitude > 0) {
for (let i = 0; i < $store.config.hospital.length; i++) {
let long = calculateDistance(
lola.value.latitude,
lola.value.longitude,
$store.config.hospital[i].latitude,
$store.config.hospital[i].longitude)
if (long === 'NaN') {
$store.config.hospital[i].long = 0
} else {
$store.config.hospital[i].long = long
}
}
let list = $store.config.hospital
list.sort((a, b) => {
if (a.long === b.long) {
return a.id - b.id
}
return a.long - b.long
})
const hospital_id = $store.save.hospital
if (!!hospital_id) {
hospital_id = ''
for (let i in list) {
if (list[i].id === hospital_id) {
hospital_info.value = {
id: list[i].id,
name: list[i].name,
long: list[i].long
}
hospital_id = list[i].id
$store.saveInfo({
hospital: list[i].id
})
break
}
}
if (!hospital_id) {
hospital_info.value = {
id: list[0].id,
name: list[0].name,
long: list[0].long
}
$store.saveInfo({
hospital: list[0].id
})
}
} else {
hospital_info.value = {
id: list[0].id,
name: list[0].name,
long: list[0].long
}
$store.saveInfo({
hospital: list[0].id
})
}
} else {
hospital_info.value = {
id: $store.config.hospital[0].id,
name: $store.config.hospital[0].name,
long: 0,
}
}
}
}
const hospital_info = ref(false)
const getLong = (time = 0) => {
uni.getLocation({
type: 'wgs84',
success: (res) => {
let long = calculateDistance(
res.latitude,
res.longitude,
$store.config.latitude,
$store.config.longitude)
lola.value = {
longitude: res.longitude,
latitude: res.latitude,
long: long || 0
latitude: res.latitude
}
getHospital()
},
fail: (e) => {
lola.value = {
longitude: 0,
latitude: 0,
long: 0
latitude: 0
}
getHospital()
}
});
}
const user_box_ref = ref(null)
const userBoxRef = (e) => {
if (!user_box_ref.value) {
user_box_ref.value = e
getLong()
getUserInfo()
}
}
onShow(() => {
if (!!user_box_ref.value) {
getLong()
}
getUserInfo()
})
</script>
@ -106,13 +186,13 @@
<image :src="$image($store.config.banner)"></image>
</view>
<view v-if="!!$store.user" class="user_wrapper">
<view class="user_box_wrapper">
<view class="map_wrapper">
<view class="user_box_wrapper" :ref="userBoxRef">
<view v-if="!!hospital_info" class="map_wrapper">
<view class="map_icon_wrapper">
<image src="@/static/assets/dingwei.png"></image>
</view>
<view class="map_name_wrapper">秀英院区</view>
<view v-if="!!lola.long" class="map_long_wrapper">{{ lola.long }}km</view>
<view class="map_name_wrapper">{{ hospital_info.name }}</view>
<view v-if="!!hospital_info.long" class="map_long_wrapper">{{ hospital_info.long }}km</view>
</view>
<view class="logo_wrapper">
<image :src="$image($store.config.logo)"></image>

@ -27,7 +27,7 @@
}
if (!!openid) {
uni.setStorageSync('OPENID', openid)
uni.navigateTo({
uni.redirectTo({
url: "/pages/main/index/index"
})
} else {

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

@ -4,13 +4,30 @@ import {
export const useStore = defineStore('counter', {
state: () => ({
user: false,
user: false,
config: false,
save: {
hospital: 0,
doctor: 1,
},
api_map: {},
count: 0,
loading: 0,
}),
actions: {
resetSaveInfo() {
this.save = {
hospital: 0,
doctor: 1,
}
uni.setStorageSync('SAVE_INFO', JSON.stringify(this.save))
},
saveInfo(data) {
for (let i in data) {
this.save[i] = data[i]
}
uni.setStorageSync('SAVE_INFO', JSON.stringify(this.save))
},
loadingStart() {
this.loading++
},

Loading…
Cancel
Save