完善功能

This commit is contained in:
wangxiaowei
2026-04-13 14:17:04 +08:00
parent 6262eb10a2
commit ee209bdb7b
10 changed files with 212 additions and 31 deletions

View File

@ -236,4 +236,13 @@ export function addJoinCooperation(data: IAddJoinCooperationParams) {
*/
export function getJoinCooperationStatus() {
return http.Post<any>('/api/submitForm/StoreRealStatus')
}
/**
* 获取配置项
*/
export function getConfig() {
return http.Post<any>('/api/setting/get' , null , {
meta: { ignoreAuth: true }
})
}

View File

@ -48,7 +48,7 @@
<view class="fixed left-0 right-0 bottom-0 z-2 bg-[#fff] flex items-center justify-center"
:style="{ height: '140rpx' }">
<view class="text-32rpx flex items-center justify-center leading-90rpx text-center w-full px-60rpx">
<view class="flex-1 w-full h-90rpx bg-[#4C9F44] rounded-8rpx text-[#fff]" @click="ClaimCoupon.handleSubmit">提交</view>
<view class="flex-1 w-full h-90rpx bg-[#4C9F44] rounded-8rpx text-[#fff]" @click="hasToken ? ClaimCoupon.handleSubmit() : router.navigateTo('/pages/login/login')">{{ hasToken ? '提交' : '去登录' }}</view>
</view>
</view>
</view>
@ -69,6 +69,7 @@ const form = reactive({
})
const id = ref<number>(0)
const hasToken = ref<boolean>(false)
onLoad((args) => {
const scene = args?.scene
@ -80,9 +81,7 @@ onLoad((args) => {
onShow(() => {
const token = uni.getStorageSync('token')
if (!token) {
router.navigateTo('/pages/login/login')
}
hasToken.value = !!token
})
const ClaimCoupon = {

View File

@ -119,7 +119,7 @@
<view class="flex justify-end">
<view class="flex items-center">
<view class="font-400 text-[#303133] text-30rpx leading-42rpx">
2.14.8
2.14.9
</view>
</view>
</view>

View File

@ -0,0 +1,56 @@
<route lang="jsonc" type="page">
{
"needLogin": true,
"layout": "default",
"style": {
"navigationStyle": "custom"
}
}
</route>
<template>
<view>
<navbar title="资质证书" custom-class='!bg-[#fff]' :leftArrow="false"></navbar>
<view class="mt-40rpx mx-30rpx">
<view class="mb-20rpx">
<view class="font-400 text-36rpx text-[#303133] leading-50rpx">资格证</view>
<view class="w-624rpx h-420rpx mt-34rpx mx-auto">
<wd-img width="100%" height="100%" :src="info.license_img" @click="previewImage(info.license_img, [info.license_img])" v-if="info.license_img"></wd-img>
<view class="text-center font-400 text-32rpx text-[#606266]" v-if="!info.license_img">暂未上传</view>
</view>
</view>
<view>
<view class="font-400 text-36rpx text-[#303133] leading-50rpx">健康证</view>
<view class="w-624rpx h-420rpx mt-34rpx mx-auto">
<wd-img width="624rpx" height="420rpx" :src="info.health_certificate" @click="previewImage(info.health_certificate, [info.health_certificate])" v-if="info.health_certificate"></wd-img>
<view class="text-center font-400 text-32rpx text-[#606266]" v-if="!info.health_certificate">暂未上传</view>
</view>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import { previewImage } from '@/utils/tools'
const info = ref({
license_img: '', // 营业执照图片
health_certificate: '', // 健康证图片
})
onLoad((args) => {
if (args.info) {
info.value = JSON.parse(decodeURIComponent(args.info))
console.log("🚀 ~ info.value:", info.value)
}
})
</script>
<style lang="scss" scoped>
page {
background-color: #fff;
}
</style>

View File

@ -114,9 +114,14 @@
<view class="flex items-center mt-24rpx">
<view class="flex items-center">
<wd-img :src="`${OSS}icon/icon_store_cert.png`" width="36rpx" height="36rpx"></wd-img>
<wd-img :src="`${OSS}icon/icon_store_cert2.png`" width="30rpx" height="30rpx"></wd-img>
</view>
<text class="ml-8rpx font-400 text-24rpx leading-4rpx text-#303133" @click="Detail.handlePreviewInfo">{{ info.company_abv }}</text>
<view class="ml-8rpx font-400 text-24rpx leading-4rpx text-#303133" @click="Detail.handlePreviewInfo">
{{ info.company_status ? '查看资质' : '暂无认证信息' }}
</view>
<!-- <view class="flex items-center mt-4rpx">
<wd-icon name="chevron-right" size="32rpx"></wd-icon>
</view> -->
</view>
<view class="bg-[#EBFBF7] w-692rpx h-64rpx rounded-12rpx p-14rpx flex items-center mt-22rpx text-[#35C1A0]">
@ -194,9 +199,18 @@
<view class="h-20rpx bg-#F6F7F9 mt-42rpx mb-40rpx"></view>
<view class="content-tab">
<wd-tabs v-model="tab">
<wd-tab title="费用说明"></wd-tab>
<wd-tab title="项目介绍"></wd-tab>
<wd-tab title="禁忌说明"></wd-tab>
<wd-tab title="下单须知"></wd-tab>
</wd-tabs>
</view>
<view class="mx-30rpx mt-40rpx">
<!-- 费用说明 -->
<view>
<view v-if="tab === 0">
<view class="font-bold text-32rpx leading-44rpx text-#303133">
费用说明
</view>
@ -256,12 +270,82 @@
</view>
</view>
</view>
</view>
<view class="h-1rpx bg-[#F6F7F9] mt-40rpx mb-24rpx"></view>
<!-- 项目介绍 -->
<view v-if="tab === 1">
<view class="font-bold text-32rpx leading-44rpx text-#303133">
项目介绍
</view>
<view class="mt-24rpx">
<view>
<view class="font-bold text-28rpx leading-48rpx text-[#303133]">自饮七步</view>
<view class="mt-24rpx font-500 text-[#303133] text-26rpx leading-48rpx">
<view>
<text class="mr-20rpx"> 选茶</text>
<text class="mr-20rpx"> 择器</text>
<text class="mr-20rpx"> 备水</text>
</view>
<view>
<text class="mr-20rpx"> 入境</text>
<text class="mr-20rpx"> 冲泡</text>
<text class="mr-20rpx"> 品茗</text>
<text class="mr-20rpx"> 回味</text>
</view>
</view>
</view>
<view class="mt-24rpx">
<view class="font-bold text-28rpx leading-48rpx text-[#303133]">茶品介绍</view>
<view class="mt-24rpx font-500 text-[#303133] text-26rpx leading-48rpx">
<view>
<text class="mr-20rpx">1. 产地介绍</text>
<text class="mr-20rpx">2. 基础属性</text>
<text class="mr-20rpx">3. 外形品相</text>
<text class="mr-20rpx">4. 色香表现</text>
</view>
<view>
<text class="mr-20rpx">5.工艺特点</text>
<text class="mr-20rpx">6. 滋味口感</text>
</view>
</view>
</view>
</view>
</view>
<view class="flex items-center">
<view class="w-8rpx h-8rpx bg-[#6A6363] rounded-full mr-12rpx"></view>
<view class="font-500 text-26rpx leading-48rpx text-[#F29747]">茶艺师需提前一小时预约两小时起订</view>
<!-- 禁忌说明 -->
<view v-if="tab === 2">
<view class="font-bold text-32rpx leading-44rpx text-#303133">
禁忌说明
</view>
<view class="mt-24rpx font-500 text-26rpx leading-48rpx text-[#303133]">
<view>绿色正规茶艺师综合服务平台</view>
<view>为确保平台营运的合法合规和避免不必要的纠纷禁止茶师私添加客户微信</view>
<view>禁止茶师私自收款(现金微信支付宝红包或转帐等)</view>
<view>禁止茶师私下接受宴请</view>
<view>以及从事除平台项目之外的其它内容和活动</view>
</view>
</view>
<!-- 下单须知 -->
<view v-if="tab === 3">
<view class="font-bold text-32rpx leading-44rpx text-#303133">
下单须知
</view>
<view class="mt-24rpx font-500 text-26rpx leading-48rpx text-[#303133]">
茶艺师出发后客户取消订单车费不予返还敬请谅解
</view>
<view class="mt-24rpx">
<view class="flex items-center">
<view class="mr-14rpx">
<wd-icon name="info-circle" size="36rpx" color="#707070"></wd-icon>
</view>
<view class="font-bold text-28rpx leading-48rpx text-#303133">温馨提示</view>
</view>
<view class="flex items-center mt-24rpx">
<view class="w-8rpx h-8rpx rounded-8rpx bg-#6A6363 mr-12rpx"></view>
<view class="font-500 text-26rpx leading-48rpx text-#F29747">茶艺师需提前一小时预约两小时起订</view>
</view>
</view>
</view>
</view>
@ -334,6 +418,9 @@ const info = ref({
company_abv: '', // 公司简称
company_url: '', // 图片链接
company_status: 0, // 是否有公司信息
license_img: '', // 营业执照图片
health_certificate: '', // 健康证图片
state: 0, // 茶艺师状态 0可约 1工作中 2不可约
})
const latitude = ref<number>(0) // 纬度
const longitude = ref<number>(0) // 经度
@ -495,8 +582,13 @@ const Detail = {
* 立即邀约
*/
handleReserveTeaspecialist: () => {
// id.value - 茶艺师的ID
router.navigateTo(`/bundle_b/pages/tea-specialist/reserve?id=${id.value}`)
if (info.value.state == 0) {
// id.value - 茶艺师的ID
router.navigateTo(`/bundle_b/pages/tea-specialist/reserve?id=${id.value}`)
} else {
toast.info('当前茶艺师不可预约')
return
}
},
/**
@ -520,9 +612,14 @@ const Detail = {
*/
handlePreviewInfo: () => {
if (info.value.company_status) {
previewImage(info.value.company_url, [info.value.company_url])
const obj = {
license_img: info.value.license_img,
health_certificate: info.value.health_certificate,
}
const infoStr = encodeURIComponent(JSON.stringify(obj))
router.navigateTo(`/bundle_b/pages/tea-specialist/cert?info=${infoStr}`)
} else {
toast.info('暂无商家信息')
toast.info('暂无认证信息')
}
}
}

View File

@ -114,10 +114,12 @@
<view class="mr-20rpx w-200rpx">
<view class="flex items-center">
<view class="flex items-center">
<wd-img :src="`${OSS}icon/icon_store_cert.png`" width="36rpx"
height="36rpx"></wd-img>
<wd-img :src="`${OSS}icon/icon_store_cert2.png`" width="30rpx"
height="30rpx"></wd-img>
</view>
<text class="ml-8rpx font-400 text-24rpx leading-4rpx text-#303133">商家认证</text>
<text class="ml-8rpx font-400 text-24rpx leading-4rpx" :class="item.company_status ? 'text-#4C9F44' : 'text-#303133'">
{{ item.company_abv }}
</text>
</view>
</view>

View File

@ -659,6 +659,15 @@
{
"root": "bundle_b",
"pages": [
{
"path": "pages/tea-specialist/cert",
"type": "page",
"needLogin": true,
"layout": "default",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/tea-specialist/coupon",
"type": "page",

View File

@ -49,7 +49,7 @@
</wd-navbar>
</view>
<view class="bg-white rounded-b-20rpx" :style="{ paddingTop: navbarHeight + 'px' }">
<view class="bg-white rounded-b-20rpx pb-30rpx" :style="{ paddingTop: navbarHeight + 'px' }">
<view class="mt-32rpx mx-30rpx">
<wd-swiper
height="320rpx"
@ -61,12 +61,9 @@
></wd-swiper>
</view>
<!-- 专属定制 -->
<view class="flex justify-center mt-30rpx mb-26rpx" @click="router.navigateTo(`/bundle_b/pages/tea-specialist/list`)">
<wd-img :src="`${OSS}images/home/home_image_15.png`" width="690rpx" height="148rpx" mode="scaleToFill" />
</view>
<view class="text-36rpx text-[#303133] leading-50rpx mx-30rpx mt-40rpx mb-32rpx font-bold">热门场景</view>
<view class="package-row px-30rpx pb-30rpx">
<view class="package-row px-30rpx">
<view class="grid grid-cols-3 gap-x-0 gap-y-20rpx">
<view
v-for="(item, idx) in teaPackageList"
@ -93,10 +90,15 @@
</view>
</view>
</view>
<!-- 专属定制 -->
<view class="flex justify-center mt-24rpx" @click="router.navigateTo(`/bundle_b/pages/tea-specialist/list`)">
<wd-img :src="`${OSS}images/home/home_image_19.png`" width="690rpx" height="200rpx" mode="scaleToFill" />
</view>
</view>
<view>
<view class="mx-30rpx mt-36rpx mb-10rpx">
<view class="mx-30rpx mt-20rpx">
<scroll-view class="w-[100%] whitespace-nowrap " :scroll-x="true" :show-scrollbar="false" :enhanced="true">
<!-- <view class="scroll-item text-26rpx text-#333 mr-16rpx" :class="distance === 1 ? 'active' : ''" @click="Index.handleSort('distance')">距离优先</view> -->
<view class="scroll-item text-26rpx text-#333 mr-16rpx" :class="sort.smart === 1 ? 'active' : ''" @click="Index.handleSort('smart')">智能排序</view>
@ -107,7 +109,7 @@
</view>
<view>
<mescroll-body @init="mescrollInit" :down="downOption" @down="downCallback" :up="upOption" @up="Index.upCallback" top="28rpx"
<mescroll-body @init="mescrollInit" :down="downOption" @down="downCallback" :up="upOption" @up="Index.upCallback" top="20rpx"
:fixed="true">
<view class="relative p-20rp mb-24rpx" v-for="(item, index) in list" :key="index" @click="Index.handleToReserveRoom(item.id, item.operation_type)">
<!-- <view class="absolute top--28rpx left-0 z-1" v-if="item.operation_type == 1">

View File

@ -268,7 +268,7 @@
import { toast } from '@/utils/toast'
import { router } from '@/utils/tools'
import { useUserStore } from '@/store'
import { getUserInfo, getMyCoupon, claimMyCoupon, getUserMember } from '@/api/user'
import { getUserInfo, getMyCoupon, claimMyCoupon, getUserMember, getConfig } from '@/api/user'
import type { IUserResult } from '@/api/types/user'
const OSS = inject('OSS')
@ -394,6 +394,14 @@
getUserMember().then(res => {
expireTime.value = res?.data?.expiration_time
})
// 获取配置项
getConfig().then(res => {
const serviceMobile = res.service_telephone
if (serviceMobile) {
sheetMenu.value = [{ name: serviceMobile }]
}
})
},
/**
@ -424,9 +432,6 @@
// 点击显示客服电话
handleShowService: () => {
showServiceMobile.value = true
sheetMenu.value = [
{ name: '13000000000' },
]
},
// 选择菜单-拨打客服电话