Files
xk-client-wx/pages/index/platform-info.vue
2026-05-15 16:42:32 +08:00

281 lines
8.1 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="content safe-area-inset-bottom">
<MessageNotification />
<!-- 资质证明 -->
<view class="section">
<view class="section-title">{{ storeName || (isPlatform ? '萧康云医' : '店铺') }} - 资质证明</view>
<view class="qualifications-list">
<view class="qualification-item" v-for="(item, index) in qualifications" :key="index" @click="previewImage(index)">
<view class="qualification-content">
<text class="qualification-name">{{ item.name }}</text>
<image :src="item.image || 'https://xiaokang88.oss-cn-hangzhou.aliyuncs.com/xk-client-wx/static/mine/avatar_1.png'" mode="aspectFit" class="qualification-img"></image>
</view>
</view>
</view>
</view>
<!-- 联系方式 - 暂时隐藏 -->
<!-- <view class="section" v-if="contactInfo">
<view class="section-title">联系方式</view>
<view class="info-card">
<view class="info-item" v-if="contactInfo.phone">
<text class="label">客服电话</text>
<text class="value" @click="makeCall(contactInfo.phone)">{{ contactInfo.phone }}</text>
</view>
<view class="info-item" v-if="contactInfo.email">
<text class="label">邮箱</text>
<text class="value">{{ contactInfo.email }}</text>
</view>
<view class="info-item" v-if="contactInfo.address">
<text class="label">地址</text>
<text class="value">{{ contactInfo.address }}</text>
</view>
</view>
</view> -->
<!-- 投诉举报方式 - 暂时隐藏 -->
<!-- <view class="section" v-if="complaintInfo">
<view class="section-title">投诉举报方式</view>
<view class="info-card">
<view class="info-item" v-if="complaintInfo.phone">
<text class="label">投诉电话</text>
<text class="value" @click="makeCall(complaintInfo.phone)">{{ complaintInfo.phone }}</text>
</view>
<view class="info-item" v-if="complaintInfo.email">
<text class="label">投诉邮箱</text>
<text class="value">{{ complaintInfo.email }}</text>
</view>
<view class="info-item" v-if="complaintInfo.address">
<text class="label">投诉地址</text>
<text class="value">{{ complaintInfo.address }}</text>
</view>
</view>
</view> -->
</view>
</template>
<script>
import { getPlatformQualificationsApi, getPlatformInfoApi } from '../../request/api/platform'
export default {
data() {
return {
storeId: '', // 店铺ID0表示平台
isPlatform: false, // 是否为平台资质
storeName: '', // 店铺名称
qualifications: [],
contactInfo: {
phone: '',
email: '',
address: ''
},
complaintInfo: {
phone: '',
email: '',
address: ''
}
}
},
onLoad(options) {
// 接收store_id参数如果传入0则显示平台资质否则显示店铺资质
if (options.store_id !== undefined) {
this.storeId = options.store_id;
this.isPlatform = options.store_id === '0' || options.store_id === 0;
} else {
// 默认使用当前店铺ID
this.storeId = uni.getStorageSync('store_id') || '11001';
this.isPlatform = false;
}
// 动态设置页面标题
uni.setNavigationBarTitle({
title: this.isPlatform ? '平台资质' : '店铺资质'
});
this.getQualifications();
this.getPlatformInfoData();
},
methods: {
// 获取资质证明
getQualifications() {
getPlatformQualificationsApi({
store_id: this.storeId,
}).then((res) => {
if (res.data.code == 0 || res.data.errcode == 0) {
const result = res.data.data || res.data.result || {};
// 适配新的返回格式(包含 store_name 和 list
if (result.store_name !== undefined) {
this.storeName = result.store_name || '';
this.qualifications = result.list || [];
} else {
// 兼容旧格式(直接返回数组)
this.qualifications = Array.isArray(result) ? result : [];
}
}
}).catch(() => {
// 如果接口不存在,使用默认数据
this.qualifications = [
{ name: '互联网药品经营许可证', image: '', type: 1 },
{ name: '营业执照', image: '', type: 2 },
{ name: '医疗器械经营许可证', image: '', type: 3 },
{ name: '食品经营许可证', image: '', type: 4 },
{ name: '药师资格证', image: '', type: 5 }
];
})
},
// 获取平台信息
getPlatformInfoData() {
getPlatformInfoApi({
store_id: this.storeId,
}).then((res) => {
if (res.data.code == 0 || res.data.errcode == 0) {
const data = res.data.data || res.data.result || {};
if (data.contact) {
this.contactInfo = data.contact;
}
if (data.complaint) {
this.complaintInfo = data.complaint;
}
}
}).catch(() => {
// 接口不存在时使用空数据
})
},
// 预览资质图片,支持滑动查看所有资质
previewImage(index) {
// 获取所有有图片的资质
const allImages = this.qualifications
.filter(q => q.image)
.map(q => q.image);
if (allImages.length > 0) {
const currentImage = this.qualifications[index]?.image;
uni.previewImage({
urls: allImages,
current: currentImage || allImages[0]
});
}
},
// 拨打电话
makeCall(phone) {
if (phone) {
uni.makePhoneCall({
phoneNumber: phone,
fail: (err) => {
console.error('拨打电话失败:', err);
}
});
}
}
}
}
</script>
<style lang="scss" scoped>
.content {
width: 750rpx;
min-height: 100vh;
padding-bottom: env(safe-area-inset-bottom);
background: #F5F5F5;
padding: 20rpx;
.section {
background: #fff;
border-radius: 24rpx;
padding: 40rpx 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.04);
.section-title {
font-size: 40rpx;
font-weight: bold;
color: #232323;
margin-bottom: 32rpx;
padding-bottom: 24rpx;
border-bottom: 2rpx solid #F0F0F0;
position: relative;
&::after {
content: '';
position: absolute;
left: 0;
bottom: -2rpx;
width: 80rpx;
height: 2rpx;
background: linear-gradient(90deg, #4175EE 0%, #6B9EFF 100%);
border-radius: 2rpx;
}
}
.qualifications-list {
display: flex;
flex-direction: column;
gap: 24rpx;
.qualification-item {
background: #fff;
border-radius: 20rpx;
overflow: hidden;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.06);
transition: all 0.3s ease;
&:active {
transform: scale(0.98);
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
}
.qualification-content {
display: flex;
flex-direction: column;
padding: 32rpx;
}
.qualification-name {
font-size: 36rpx;
font-weight: bold;
color: #232323;
margin-bottom: 24rpx;
line-height: 1.5;
letter-spacing: 1rpx;
}
.qualification-img {
width: 100%;
height: 500rpx;
border-radius: 16rpx;
background: #F7F8FA;
}
}
}
.info-card {
.info-item {
display: flex;
align-items: flex-start;
padding: 20rpx 0;
border-bottom: 1rpx solid #F0F0F0;
&:last-child {
border-bottom: none;
}
.label {
font-size: 28rpx;
color: #666;
width: 160rpx;
flex-shrink: 0;
}
.value {
font-size: 28rpx;
color: #232323;
flex: 1;
word-break: break-all;
&:active {
opacity: 0.7;
}
}
}
}
}
}
</style>