fix: 首页UI重构设计
This commit is contained in:
@@ -74,7 +74,7 @@
|
||||
<view class="list_nums">
|
||||
<view class="txt">问诊量 <text>{{item.inquiry_num }}</text></view>
|
||||
<view class="txt">接诊率 <text>{{item.accept_percent}}</text></view>
|
||||
<!-- <view class="txt">综合评分 <text>{{item.overall_score}}</text></view> -->
|
||||
<view class="txt">综合评分 <text>{{item.overall_score}}</text></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -129,6 +129,7 @@
|
||||
import {
|
||||
dDropdown
|
||||
} from '@/components/d-dropdown/d-dropdown'
|
||||
import { isGuestMode } from '@/common/utils/auth.js'
|
||||
export default {
|
||||
components: {
|
||||
dDropdown
|
||||
@@ -272,8 +273,16 @@
|
||||
}
|
||||
}).then((res) => {
|
||||
// console.log(res, 'res');
|
||||
if (res.data.errcode == 0) {
|
||||
this.doctorList = res.data.data.list
|
||||
// 使用 guest_mode 判断 + code/errcode 双重保险
|
||||
const isGuest = isGuestMode();
|
||||
const isNewFormat = isGuest && (res.data.code === 0 || res.data.code === '0');
|
||||
const isOldFormat = !isGuest && (res.data.errcode === 0 || res.data.errcode === '0');
|
||||
|
||||
if (isNewFormat || isOldFormat) {
|
||||
// 新接口格式:从 result 取值
|
||||
// 老接口格式:从 data 取值
|
||||
const responseData = isGuest && res.data.result ? res.data.result : res.data.data;
|
||||
this.doctorList = responseData.list || []
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -287,8 +296,16 @@
|
||||
}
|
||||
}).then((res) => {
|
||||
// console.log(res, 'ks');
|
||||
if (res.data.errcode == 0) {
|
||||
this.officeList = res.data.data
|
||||
// 使用 guest_mode 判断 + code/errcode 双重保险
|
||||
const isGuest = isGuestMode();
|
||||
const isNewFormat = isGuest && (res.data.code === 0 || res.data.code === '0');
|
||||
const isOldFormat = !isGuest && (res.data.errcode === 0 || res.data.errcode === '0');
|
||||
|
||||
if (isNewFormat || isOldFormat) {
|
||||
// 新接口格式:从 result 取值
|
||||
// 老接口格式:从 data 取值
|
||||
const responseData = isGuest && res.data.result ? res.data.result : res.data.data;
|
||||
this.officeList = responseData || [];
|
||||
} else if (res.data.errcode != 0) {
|
||||
// uni.showToast({
|
||||
// title: res.data.msg,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<!-- 1. 自定义吸顶导航栏 -->
|
||||
<view class="custom-nav"
|
||||
:class="[
|
||||
storeType === '1' ? 'header-pharmacy' : 'header-clinic',
|
||||
(storeType === '1' || storeType === 1) ? 'header-pharmacy' : 'header-clinic',
|
||||
{ 'nav-sticky': isSticky }
|
||||
]"
|
||||
:style="{ paddingTop: statusBarHeight + 'px', height: (statusBarHeight + 44) + 'px' }">
|
||||
@@ -14,7 +14,7 @@
|
||||
<view class="nav-content">
|
||||
<view class="store-info" @click="toStore">
|
||||
<text class="store-name u-line-1">{{infoList.store['name'] || storeinfo[0].store['name'] || info.name || '请选择门店'}}</text>
|
||||
<view class="switch-badge">
|
||||
<view v-if="!isGuestMode()" class="switch-badge">
|
||||
<text class="iconfont icon-qiehuan"></text> 切换
|
||||
</view>
|
||||
</view>
|
||||
@@ -22,7 +22,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 2. 头部背景与定位区域 -->
|
||||
<view class="header" :class="storeType === '1' ? 'header-pharmacy' : 'header-clinic'"
|
||||
<view class="header" :class="(storeType === '1' || storeType === 1) ? 'header-pharmacy' : 'header-clinic'"
|
||||
:style="{ paddingTop: (statusBarHeight + 44 + 10) + 'px' }">
|
||||
<view class="bg-circle"></view>
|
||||
<view class="location-bar">
|
||||
@@ -52,7 +52,7 @@
|
||||
<view v-for="(item, index) in homeZones" :key="index" class="zone-item" @click="goZoneList(item)">
|
||||
<view class="zone-icon-box">
|
||||
<image
|
||||
:src="item.icon || (storeType === '1' ? 'https://img.icons8.com/fluency/48/pill.png' : 'https://img.icons8.com/fluency/48/doctor-male.png')"
|
||||
:src="item.icon || ((storeType === '1' || storeType === 1) ? 'https://img.icons8.com/fluency/48/pill.png' : 'https://img.icons8.com/fluency/48/doctor-male.png')"
|
||||
class="zone-img"
|
||||
mode="aspectFit"
|
||||
></image>
|
||||
@@ -64,7 +64,7 @@
|
||||
<!-- 3. 核心功能导航 (Nav) -->
|
||||
<view class="nav-grid">
|
||||
<!-- 诊所模式:2列布局 -->
|
||||
<view v-if="storeType === '0'" class="nav-clinic-grid">
|
||||
<view v-if="storeType === '0' || storeType === 0" class="nav-clinic-grid">
|
||||
<view class="nav-card" @click="goYard(1)">
|
||||
<view class="nav-content">
|
||||
<view class="nav-title" style="color:#4175EE">到店挂号</view>
|
||||
@@ -82,7 +82,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 药店模式:单列铺满 -->
|
||||
<view v-if="storeType === '1'" class="nav-pharmacy-grid">
|
||||
<view v-if="storeType === '1' || storeType === 1" class="nav-pharmacy-grid">
|
||||
<view class="nav-card" @click="golist(3)">
|
||||
<view class="nav-content">
|
||||
<view class="nav-title" style="color:#298DFF">预约购药</view>
|
||||
@@ -94,7 +94,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 4. 诊所模式内容:医生列表 -->
|
||||
<view v-if="storeType === '0'">
|
||||
<view v-if="storeType === '0' || storeType === 0">
|
||||
<view class="section-header">
|
||||
<view class="section-title">医生推荐</view>
|
||||
<view class="section-more" @click="goYard(1)">更多 <text class="iconfont icon-jiantou1" style="font-size: 20rpx;"></text></view>
|
||||
@@ -129,7 +129,7 @@
|
||||
<view class="stat-label">接诊率</view>
|
||||
</view>
|
||||
<view class="stat-item">
|
||||
<text class="stat-num">10分钟</text>
|
||||
<text class="stat-num">{{item.average_response_time || 5}}分钟</text>
|
||||
<view class="stat-label">平均响应</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -137,7 +137,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 5. 药店模式内容:热销好药 -->
|
||||
<view v-if="storeType === '1'">
|
||||
<view v-if="storeType === '1' || storeType === 1">
|
||||
<view class="section-header">
|
||||
<view class="section-title">{{ topProductsTitle || '热销好药' }}</view>
|
||||
<view class="section-more" @click="golist(3)">更多 <text class="iconfont icon-jiantou1" style="font-size: 20rpx;"></text></view>
|
||||
@@ -212,6 +212,7 @@ import { getPlatformQualificationsApi } from '../../request/api/platform'
|
||||
import { getStoreDrugListBySalespersonApi, getHomeTopProductsApi, getHomeZonesApi, checkOnlineConsultationConfigApi } from "@/request/api/product";
|
||||
import request from "@/request/api/request";
|
||||
import MessageNotification from "@/components/MessageNotification/MessageNotification.vue";
|
||||
import { setGuestMode, isGuestMode, isLoggedIn } from '@/common/utils/auth.js';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -250,16 +251,19 @@ export default {
|
||||
// 解决 template 中复杂表达式导致的渲染错误
|
||||
displayProductList() {
|
||||
return this.topProductsList.length > 0 ? this.topProductsList : this.productList;
|
||||
},
|
||||
// 判断是否为guest模式(用于模板)
|
||||
isGuestMode() {
|
||||
return isGuestMode;
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
const token = uni.getStorageSync('token')
|
||||
const userInfo = uni.getStorageSync('userinfo')
|
||||
if (!token || !userInfo) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/home/index'
|
||||
})
|
||||
// 判断是否已登录
|
||||
if (!isLoggedIn()) {
|
||||
// 未登录时设置guest模式标记和store_id
|
||||
setGuestMode();
|
||||
}
|
||||
|
||||
this.isShow_envVersion = uni.getStorageSync('isShow_envVersion')
|
||||
if (this.isShow_envVersion === false) {
|
||||
this.getList();
|
||||
@@ -273,6 +277,10 @@ export default {
|
||||
}
|
||||
},
|
||||
onReady() {
|
||||
// 未登录时也允许访问,使用默认store_id=11001
|
||||
if (!uni.getStorageSync('store_id')) {
|
||||
uni.setStorageSync('store_id', '11001');
|
||||
}
|
||||
if (uni.getStorageSync('store_id')) {
|
||||
this.getStore();
|
||||
} else {
|
||||
@@ -353,12 +361,23 @@ export default {
|
||||
method: "post",
|
||||
data: { store_id: uni.getStorageSync('store_id') || '11001' }
|
||||
}).then((res) => {
|
||||
if (res.data.errcode == 0) {
|
||||
this.storeType = res.data.data.store['type']
|
||||
uni.setStorageSync('store_type', res.data.data.store['type']) // 存储门店类型
|
||||
this.infoList = res.data.data
|
||||
this.headerTitle = res.data.data.store['name']
|
||||
// 使用 guest_mode 判断 + code/errcode 双重保险
|
||||
const isGuest = isGuestMode();
|
||||
const isNewFormat = isGuest && (res.data.code === 0 || res.data.code === '0');
|
||||
const isOldFormat = !isGuest && (res.data.errcode === 0 || res.data.errcode === '0');
|
||||
|
||||
if (isNewFormat || isOldFormat) {
|
||||
// 新接口格式:从 result 取值
|
||||
// 老接口格式:从 data 取值
|
||||
const responseData = isGuest && res.data.result ? res.data.result : res.data.data;
|
||||
|
||||
if (responseData && responseData.store) {
|
||||
this.storeType = responseData.store['type']
|
||||
uni.setStorageSync('store_type', responseData.store['type']) // 存储门店类型
|
||||
this.infoList = responseData
|
||||
this.headerTitle = responseData.store['name']
|
||||
this.getBannered();
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
@@ -383,7 +402,9 @@ export default {
|
||||
this.getBannered();
|
||||
}
|
||||
} else {
|
||||
uni.navigateTo({ url: '/pages/home/index' })
|
||||
// 未登录时不跳转,使用默认store_id=11001
|
||||
uni.setStorageSync('store_id', '11001');
|
||||
this.getBannered();
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -393,8 +414,16 @@ export default {
|
||||
method: "post",
|
||||
data: { store_id: uni.getStorageSync('store_id') || '11001' }
|
||||
}).then((res) => {
|
||||
if (res.data.errcode === 0) {
|
||||
this.doctorList = (res.data.data.list).slice(0, 5)
|
||||
// 使用 guest_mode 判断 + code/errcode 双重保险
|
||||
const isGuest = isGuestMode();
|
||||
const isNewFormat = isGuest && (res.data.code === 0 || res.data.code === '0');
|
||||
const isOldFormat = !isGuest && (res.data.errcode === 0 || res.data.errcode === '0');
|
||||
|
||||
if (isNewFormat || isOldFormat) {
|
||||
// 新接口格式:从 result 取值
|
||||
// 老接口格式:从 data 取值
|
||||
const responseData = isGuest && res.data.result ? res.data.result : res.data.data;
|
||||
this.doctorList = (responseData.list || []).slice(0, 5)
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -411,11 +440,22 @@ export default {
|
||||
method: "post",
|
||||
data: { store_id: uni.getStorageSync('store_id') || '11001' }
|
||||
}).then((res) => {
|
||||
if (res.data.errcode == 0) {
|
||||
this.info = res.data.data
|
||||
this.urlInfo = res.data.data.nav
|
||||
this.storeType = res.data.data.type
|
||||
this.list = (res.data.data.nav).map((item) => { return item.pic })
|
||||
// 使用 guest_mode 判断 + code/errcode 双重保险
|
||||
const isGuest = isGuestMode();
|
||||
const isNewFormat = isGuest && (res.data.code === 0 || res.data.code === '0');
|
||||
const isOldFormat = !isGuest && (res.data.errcode === 0 || res.data.errcode === '0');
|
||||
|
||||
if (isNewFormat || isOldFormat) {
|
||||
// 新接口格式:从 result 取值
|
||||
// 老接口格式:从 data 取值
|
||||
const responseData = isGuest && res.data.result ? res.data.result : res.data.data;
|
||||
|
||||
if (responseData) {
|
||||
this.info = responseData
|
||||
this.urlInfo = responseData.nav || []
|
||||
this.storeType = responseData.type
|
||||
this.list = (responseData.nav || []).map((item) => { return item.pic })
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
<view class="list_nums">
|
||||
<view class="txt">问诊量 <text>{{item.inquiry_num }}</text></view>
|
||||
<view class="txt">接诊率 <text>{{item.accept_percent}}</text></view>
|
||||
<!-- <view class="txt">综合评分 <text>{{item.overall_score}}</text></view> -->
|
||||
<view class="txt">综合评分 <text>{{item.overall_score}}</text></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -146,6 +146,7 @@
|
||||
getBanner,
|
||||
getOpen
|
||||
} from '../../request/api/api'
|
||||
import { isGuestMode } from '@/common/utils/auth.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -208,8 +209,16 @@
|
||||
}
|
||||
}).then((res) => {
|
||||
// console.log(res, 'list');
|
||||
if (res.data.errcode == 0) {
|
||||
this.doctorList = (res.data.data.list).slice(0, 3)
|
||||
// 使用 guest_mode 判断 + code/errcode 双重保险
|
||||
const isGuest = isGuestMode();
|
||||
const isNewFormat = isGuest && (res.data.code === 0 || res.data.code === '0');
|
||||
const isOldFormat = !isGuest && (res.data.errcode === 0 || res.data.errcode === '0');
|
||||
|
||||
if (isNewFormat || isOldFormat) {
|
||||
// 新接口格式:从 result 取值
|
||||
// 老接口格式:从 data 取值
|
||||
const responseData = isGuest && res.data.result ? res.data.result : res.data.data;
|
||||
this.doctorList = (responseData.list || []).slice(0, 3)
|
||||
}
|
||||
})
|
||||
this.getBannered()
|
||||
|
||||
@@ -65,6 +65,8 @@ import {
|
||||
getsLogin, storeChange
|
||||
} from '../../request/api/api.js'
|
||||
import {bindUserApi} from "@/request/api/salesperson";
|
||||
import { clearGuestMode, getRedirectInfo, clearRedirectInfo, buildUrlWithParams } from '@/common/utils/auth.js';
|
||||
import { performLogin } from '@/utils/login.js';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
@@ -95,8 +97,8 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
back() {
|
||||
uni.navigateTo({
|
||||
url: "/pages/home/index",
|
||||
uni.reLaunch({
|
||||
url: "/pages/home/home",
|
||||
fail: (e) => {
|
||||
// console.log(e);
|
||||
},
|
||||
@@ -162,69 +164,15 @@ export default {
|
||||
})
|
||||
},
|
||||
|
||||
getToLogin(e) {
|
||||
uni.showLoading({
|
||||
title: "登录中"
|
||||
async getToLogin(e) {
|
||||
// 使用抽离的登录函数,非静默模式(显示提示,执行跳转)
|
||||
const result = await performLogin({
|
||||
silent: false,
|
||||
toastRef: this.$refs.uToast
|
||||
});
|
||||
|
||||
uni.login({
|
||||
provider: 'weixin',
|
||||
success: (loginRes) => {
|
||||
this.code = loginRes.code
|
||||
getsLogin({
|
||||
method: "post",
|
||||
data: {
|
||||
code: this.code,
|
||||
status: 1
|
||||
}
|
||||
}).then((res) => {
|
||||
|
||||
uni.hideLoading();
|
||||
if (res.data.errcode == 0) {
|
||||
uni.setStorageSync('token', res.data.data.token) //存储token
|
||||
uni.setStorageSync('user_id', res.data.data.data.user.id)
|
||||
uni.setStorageSync('userinfo', res.data.data.data['user'])
|
||||
|
||||
|
||||
if (uni.getStorageSync('salesperson_id')) {
|
||||
bindUserApi({
|
||||
user_id: res.data.data.data.user.id,
|
||||
salesperson_id: uni.getStorageSync('salesperson_id'),
|
||||
}).then((res) => {
|
||||
console.log(res, 'bindUserApi', res);
|
||||
})
|
||||
}
|
||||
if (uni.getStorageSync('store_id')) {
|
||||
|
||||
storeChange({
|
||||
method: "post",
|
||||
data: {
|
||||
store_id: uni.getStorageSync('store_id')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
uni.setStorageSync('store_id', res.data.data.data.store_id)
|
||||
}
|
||||
if (res.data.data.data.user.mobile != '') {
|
||||
setTimeout(function () {
|
||||
uni.reLaunch({
|
||||
url: '/pages/home/home'
|
||||
})
|
||||
}, 500)
|
||||
} else {
|
||||
// this.getPhoneNumber(e);
|
||||
}
|
||||
|
||||
} else if (res.data.errcode != 0) {
|
||||
this.$refs.uToast.show({
|
||||
title: res.data.msg,
|
||||
type: 'default',
|
||||
icon: false
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
// 登录成功后的处理已在 performLogin 中完成
|
||||
// 这里可以添加额外的处理逻辑(如果需要)
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
|
||||
Reference in New Issue
Block a user