Compare commits

..

No commits in common. "main" and "Branch_新手指引" have entirely different histories.

12 changed files with 478 additions and 1118 deletions

12
App.vue
View File

@ -69,8 +69,8 @@ export default {
}
}
});
uni.removeStorageSync('getCouponCodeTime'); //
// //
//
listenNetworkChange();
uni.hideTabBar()
const { setTheme, getUserInfo, storeState,logOut } = useMainStore();
@ -86,12 +86,9 @@ export default {
this.globalData.statusBarHeight = statusBarHeight || 20;
// #endif
// authCode url
console.log(window.location.href,"window.location.href")
const authCode = getQueryParam('authCode');
const sfId = getQueryParam('sfId');
const lockerId = getQueryParam('lockerId');
if(lockerId) {
uni.setStorageSync("lockerId", lockerId);
}
if(sfId) {
uni.setStorageSync("sfId", sfId);
}
@ -183,9 +180,6 @@ page {
:deep(.uv-radio__icon-wrap){
border-width: 5rpx!important;
}
:deep(.uv-checkbox__icon-wrap){
border-width: 5rpx!important;
}
.uni-tabbar{
display: none;

View File

@ -1,9 +1,9 @@
<template>
<view class="coupon" :class="[`${themeInfo.theme}-theme`, `${themeInfo.language}`]">
<myPopup v-model="modelValue" mode='bottom' bgColor='none' zIndex="999" closeable customStyle='height:70vh;border-radius: 24px 24px 0 0;' :closeOnClickOverlay='true'>
<myPopup v-model="modelValue" mode='bottom' bgColor='none' customStyle='height:70vh;border-radius: 18px 18px 0 0;' :closeOnClickOverlay='true'>
<view class="couponContent">
<view class="header">
<!-- <view class="line"></view> -->
<view class="line"></view>
<view class="title">
{{ $t('coupon.coupon') }} {{dataList.length + unusableDataList.length}}
</view>
@ -66,32 +66,26 @@
</view>
</view>
<view class="right">
<!-- <view class="desc">
<view class="desc">
{{ $t('coupon.storewide') }}
</view>
<view class="desc">
{{ $t('coupon.limitedtimeoffer') }}
</view> -->
</view>
<view>
<uv-button :customStyle="{
color: '#fff',
}" :textStyle="{
fontSize: '32rpx',
fontWeight: 'bold',
}" shape="circle" color="#FB322E" class="btn" @click="getCouponCode">
<button class="btn" @click="getCouponCode">
{{ $t("coupon.redeemNow") }}
</uv-button>
</button>
</view>
</view>
</view>
</view>
<view class="couponUl couponUl2">
<uv-checkbox-group style="width: 100%;" v-model="state.checkboxCouponValue" shape="circle" activeColor="#fb322e" size="40rpx" iconSize="24rpx" inactiveColor="#D8D8D8" @change="couponChange">
<uv-checkbox-group style="width: 100%;" v-model="state.checkboxCouponValue" @change="couponChange">
<view class="couponLi" v-for="(item,index) in dataList" :key="index" @click="chooseCoupon(item)" :style="{opacity:disabledFunc(item)?0.5:1}">
<view class="left">
<view class="name">
<!-- {{ item.couponCode }} -->
{{ couponTitle(item) }}
{{ item.couponCode }} {{ couponTitle(item) }}
<!-- <text style="letter-spacing: 0;">{{ item.discountLimit }}</text> -->
</view>
<view class="desc">
@ -102,12 +96,12 @@
</view>
</view>
<view class="right">
<!-- <view class="desc">
<view class="desc">
{{ item.siteName.length ?`${item.siteName.length>1?$t('coupon.multiStoreUse'):item.siteName[0]}`: $t('coupon.storewide') }}
</view>
<view class="desc">
{{ $t('coupon.limitedtimeoffer') }}
</view> -->
</view>
<view style="display: flex;justify-content: center;margin-top: 4px;">
<uv-checkbox
v-if="props.siteData?.lockerId"
@ -131,8 +125,7 @@
<view v-show="state.showUnusableCoupons" class="couponLi" v-for="(item,index) in unusableDataList" :key="index">
<view class="left">
<view class="name">
<!-- {{ item.couponCode }} -->
{{ couponTitle(item) }}
{{ item.couponCode }} {{ couponTitle(item) }}
<!-- <text style="letter-spacing: 0;">{{ item.discountLimit }}</text> -->
</view>
<view class="desc">
@ -160,15 +153,9 @@
</view>
<view class="confirm" v-if="props.siteData?.lockerId">
<!-- @click="submit" -->
<uv-button class="next-btn" :customStyle="{
height: '86rpx',
color: '#fff',
}" :textStyle="{
fontSize: '32rpx',
fontWeight: 'bold',
}" shape="circle" color="#FB322E" @click="confirm">
<button class="next-btn" @click="confirm">
{{ $t("common.confirm") }}
</uv-button>
</button>
</view>
</view>
</myPopup>
@ -679,17 +666,23 @@ defineExpose({
.confirm{
height: 100rpx;
width: 100%;
background-color: #F1F2F7;
background-color: #fff;
display: flex;
justify-content: center;
.next-btn{
position: absolute;
bottom:30upx;
width: 90%;
padding: 4px 0;
font-size: 28rpx;
font-weight: bold;
color: var(--text-color);
background: var(--active-color);
border-radius: 16rpx;
}
}
height: 100%;
background-color: #F1F2F7;
background-color: #fff;
border-radius: 18upx 18upx 0 0;
padding-bottom: 40upx;
display: flex;
@ -711,7 +704,6 @@ defineExpose({
font-size: 36rpx;
align-self: self-start;
margin-left: 40rpx;
font-weight: 600;
}
}
.content{
@ -727,25 +719,24 @@ defineExpose({
display: flex;
padding: 40upx;
width: 100%;
margin-bottom: 20upx;
margin: 20upx 0;
border-radius: 18upx;
color: #9D9FA2;
background-color: #FFFFFF;
// background: linear-gradient(90deg, var(--left-linear), var(--right-linear));
color: #fff;
background: linear-gradient(90deg, var(--left-linear), var(--right-linear));
box-shadow: 0px -2px 5px 0px rgba(0, 0, 0, 0.13);
font-size: 22upx;
// &::after{
// content: "";
// position: absolute;
// top: 2px;
// right: -7px;
// width: 14px; /* */
// height: 100%; /* */
// background: radial-gradient(#ffffff 0px, #ffffff 5px, transparent 5px, transparent);
// background-size: 14px 14px; /* */
// background-repeat: repeat-y; /* */
// z-index: 9;
// }
&::after{
content: "";
position: absolute;
top: 2px;
right: -7px;
width: 14px; /* 调整宽度 */
height: 100%; /* 调整高度以适应圆形的垂直排列 */
background: radial-gradient(#ffffff 0px, #ffffff 5px, transparent 5px, transparent);
background-size: 14px 14px; /* 保持圆形的大小 */
background-repeat: repeat-y; /* 垂直重复 */
z-index: 9;
}
.left{
width: 68%;
display: flex;
@ -755,18 +746,16 @@ defineExpose({
font-size: 36upx;
letter-spacing: 4upx;
font-weight: bold;
color: #000;
}
.desc{
margin-top: 10upx;
}
.input{
background-color: #FFFFFF;
border: 1px solid #E5E5E5;
color: #000;
background-color: var(--bg-popup);
text-align: center;
width: 220upx;
border-radius: 12upx;
color: var(--text-color);
margin-top: 20upx;
}
&::before{
@ -775,7 +764,7 @@ defineExpose({
height: 32upx;
width: 32upx;
border-radius: 99rpx;
background-color: #F1F2F7;
background-color: #fff;
position: absolute;
bottom: 0;
top: -56upx;
@ -787,12 +776,12 @@ defineExpose({
height: 32upx;
width: 32upx;
border-radius: 99rpx;
background-color: #F1F2F7;
background-color: #fff;
position: absolute;
bottom: -56upx;
right: -18upx;
}
// border-right: 1px solid #fff;
border-right: 1px solid #fff;
}
.right{
width: 32%;
@ -819,14 +808,7 @@ defineExpose({
letter-spacing: 4upx;
}
&::before{
content: ' ';
display: block;
height: calc(100% + 20rpx);
border: 1px dashed #F1F2F7;
position: absolute;
left: 0;
}
}
}
}

View File

@ -9,7 +9,6 @@
:closeable="props.closeable"
@change="handleChange"
:safeAreaInsetBottom="false"
zIndex="999"
>
<slot></slot>
</uv-popup>
@ -49,10 +48,8 @@
emit('update:modelValue', e.show);
}
const maskClick = () => {
if (props.closeOnClickOverlay) {
modelValue.value = false;
}
}
const emit = defineEmits(['close', 'confirm', 'update:modelValue']);
const modelValue = computed({
get() {

View File

@ -44,10 +44,7 @@
"path": "videoTutorial/index"
},
{
"path": "reserve/index",
"style": {
"navigationBarTitleText": "城市迷你仓"
}
"path": "reserve/index"
},
{
"path": "validationInfo/index",

File diff suppressed because one or more lines are too long

View File

@ -40,14 +40,6 @@
<text @click.stop="makePhoneCall">电话: 400-818-1813</text>
</view>
</view>
<view class="box3" @click.stop>
<uv-button color="#FB322E" shape="circle" @click="goReserve">
<image src="/static/site/yuyuekancang.svg"></image> 预约看仓
</uv-button>
<uv-button color="#FB322E" shape="circle" @click="goVr">
<image src="/static/site/shijingtu.svg"></image> 实景图
</uv-button>
</view>
</view>
</view>
<uvPickerSlef ref="cityPicker" confirmColor="#FB322E" round="24px" title="选择城市" :columns="[state.cityData]" @confirm="cityConfirm"></uvPickerSlef>
@ -96,14 +88,16 @@ let siteData = reactive({
});
// 线
const handleNavigate = (item) => {
// const { latitude, longitude } = wgs84ToGcj02(item.latitude, item.longitude);
wx.openLocation({
latitude:Number(item.latitude),
longitude:Number(item.longitude),
name: item.name,
address: item.address,
const handleNavigate = async (item) => {
const { latitude, longitude } = wgs84ToGcj02(item.latitude, item.longitude);
const { success, errorMessage } = await SFUIP.openLocation({
latitude:"113.330713",
longitude:"23.113539",
name: "广州",
address: "广州天河",
})
console.log((window || global).UIP_WX);
console.log(success,errorMessage, "openLocationerr");
};
const toHome = (item) => {
@ -198,19 +192,6 @@ const getCityData = () => {
;
}
const goVr = (e) => {
e?.stopPropagation?.()
uni.navigateTo({
url: "/pages/webview/web?url=" + encodeURIComponent("https://elitesys.kingkongcang.com/tour/index.html"),
});
}
const goReserve= (e) => {
e?.stopPropagation?.()
uni.navigateTo({
url: "/pagesb/reserve/index",
});
}
onShow(() => {
uni.showLoading({
mask: true,
@ -275,23 +256,6 @@ onShow(() => {
.siteList{
display: flex;
flex-direction: column;
.box3{
display: flex;
margin-top: 10rpx;
gap: 20rpx;
:deep(.uv-button){
height: 42rpx;
line-height: 42rpx;
min-width: 180rpx;
font-size: 24rpx;
display: flex;
align-items: center;
}
image {
width: 30rpx;
margin-right: 8rpx;
}
}
.box2{
display: flex;
flex-direction: column;
@ -304,7 +268,6 @@ onShow(() => {
margin-bottom: 10rpx;
}
}
.box{
display: flex;
width: 100%;

View File

@ -312,18 +312,6 @@
<image src="/static/home/jiantou.svg" style="width: 24rpx;height: 24rpx;" class="icon"></image>
</view>
</view>
<view class="garyBox font28 card20" @click="openCoupon">
<view style="display: flex;align-items: center;">优惠劵</view>
<view class="select"><text :style="{color:!state.couponItem.length?'#A8AAAC':'#000'}" style="margin-right: 10rpx;font-weight: bold;">
<template v-for="(item, index) in state.couponItem" :key="index">{{ couponDesc(item) }}</template>
<!-- {{$t("detail.noselect") }} -->
<template v-if="!state.couponItem.length &&!state.couponOtherItem.length">{{
$t("detail.noselect")
}}</template></text>
<image src="/static/home/jiantou.svg" style="width: 24rpx;height: 24rpx;" class="icon"></image>
</view>
</view>
<view class="title2 font32 fontb">
<text>租赁体积</text> <text>{{ `${state.lockData?.volume}` }}</text>
</view>
@ -354,12 +342,6 @@
<view class="title2 font32 fontb">
<text>优惠信息</text> <text style="color: #FB322E;">- {{ state.priceData.favorable }}</text>
</view>
<view class="title2 textGary2 fontb font28">
<text>优惠劵优惠</text><text style="color: #FB322E;">- {{
state.priceData.codeFavorable
}}</text>
</view>
<view class="title2 textGary2 fontb font28">
<text>租期优惠{{ state.month }}个月长租</text><text style="color: #FB322E;">- {{
state.priceData.leaseDiscount
@ -567,20 +549,6 @@
</view>
</view>
</uv-popup>
<coupon
ref="couponRef"
v-model="state.couponShow"
:priceData="state.priceData"
:month="state.month"
:couponItem="state.couponItem"
:couponOtherItem="state.couponOtherItem"
:isRenew="true"
:siteData="state.lockData"
:disabledFunc="disabledFunc"
@chooseOtherCoupon="chooseOtherCoupon"
@chooseCoupon="chooseCoupon"
@confirm="confirmCoupon"
></coupon>
</view>
</template>
@ -594,7 +562,6 @@ import { useCountDown } from "@/hooks/index";
import { onLoad, onShow, onShareAppMessage, onHide } from '@dcloudio/uni-app'
import { useLockApi } from '@/Apis/lock.js';
import myPopup from '@/components/myPopup.vue';
import coupon from "@/components/coupon.vue";
//
import { useMainStore } from "@/store/index.js";
import { navbarHeightAndStatusBarHeight, shareParam } from "@/utils/common.js";
@ -624,7 +591,6 @@ const devicePopupRef = ref(null);
const pawPopupRef = ref(null);
const detailPopupRef = ref(null);
const cancelOrderPopupRef = ref(null);
const couponRef = ref(null);
uni.hideTabBar();
const state = ref({
orderList: [],
@ -641,9 +607,6 @@ const state = ref({
refundLoading: false,
current: 0,
cancelOrderList: [],
couponShow:false, //
couponItem:[], //
couponOtherItem:[],
});
const list = [{
name: '在租',
@ -652,112 +615,7 @@ const list = [{
}, {
name: '待支付'
},
]//
const couponDesc = (item)=>{
let detail = ''
switch(item.couponType){
case 1:
detail = `${t('discountMomey',{discount:item.discountLimit})}`
break
case 2:
detail = `${t('couponDiscount',{percent: 100 - item.discountRange * 100,discount: (item.discountRange * 100) / 10,})}`
break
case 3:
detail = `${t('firstMonthRent',{discount:item.firstMonthAmount})}`
break
case 4:
detail = `${t('couponDiscount',{percent: 100 - item.monthDiscount * 100,discount: (item.monthDiscount * 100) / 10})}`
break
case 5:
detail = `${t('freeMonth',{discount:item.freeMonth})}`
break
case 6:
detail = `${t('BonusMonth',{discount:item.freeMonth})}`
break
default:
detail = `${t('discountMomey',{discount:item.discountLimit})}`
break
}
return `${detail}`
}
function canAddValue(arr, value) {
//
const allowedNumbers = new Set([1, 3, 4]);
//
if (arr.length === 0) {
return true;
}
// 134
const hasInvalidNumber = arr.some(num => !allowedNumbers.has(num));
if (hasInvalidNumber) {
return false; // 134
}
// 134
if (allowedNumbers.has(value) && !arr.includes(value)) {
return true;
}
//
return false;
}
const disabledFunc = (item)=>{
if(!item) {return true}
// item.siteIds
const isSite = item.siteIds.length?item.siteIds.includes(state.value.lockData.siteId):true
const isUnit = item.unitTypeIds.length?item.unitTypeIds.includes(state.value.lockData.unitTypeId):true
let isPrice = item.satisfyAmount?state.value.priceData.expense>=item.satisfyAmount:true
const canAdd = canAddValue(state.value.couponItem.map(x=>x.couponType),item.couponType)
if([3,4,5,6].includes(item.couponType)){
isPrice = state.value.month>=item.fullMonth
}
// Date
const start = new Date(item.startDate);
const end = new Date(item.endDate);
//
const now = new Date();
//
const isDate = now >= start && now <= end;
return !(isSite&&isUnit&&isPrice&&item.renewUsable&&isDate&&canAdd)
}
const openCoupon = ()=>{
couponRef.value.open();
}
const chooseOtherCoupon= (item) => {
state.value.couponOtherItem = [item];
getLockerExpense();
}
const confirmCoupon = (data)=>{
const { couponItem, couponOtherItem } = data;
state.value.couponItem = couponItem;
state.value.couponOtherItem = couponOtherItem;
getLockerExpense();
couponRef.value.close();
}
const chooseCoupon = (item)=>{
//
if(item.isSuperposition){
if(state.value.couponItem.every((x)=>item.couponDispositionId != x.couponDispositionId)){
if(state.value.couponItem.every(x=>item.couponType != x.couponType)){
state.value.couponItem.push(item);
}else{
uni.showToast({
title: `相同优惠卷类型不能叠加使用!`,
icon: "none",
duration: 2000,
})
}
}
}else{
state.value.couponItem = [item]
}
getLockerExpense()
}
]
const currentOrderList = computed(() => {
const isType1 = (item) =>
@ -907,15 +765,6 @@ const goOrder = async () => {
.ContinuationOrder({
orderId: state.value.selectItem.orderId,
month: state.value.month,
couponIds: state.value.couponItem.map((item) => item.couponDispositionId),
serialNumber: state.value.couponOtherItem.map(x => {
return {
dealGroupId: x.dealGroupId,
number: x.number,
marketPrice: x.marketPrice,
purchasePrice: x.price
}
}),
source
})
.then((res) => {
@ -1040,15 +889,9 @@ const confirmMonth = () => {
} else {
state.value.month = state.value.radioMonthvalue;
}
clearCoupon();
getLockerExpense();
hideMonthPopup();
}
const clearCoupon = () => {
state.value.couponItem = [];
state.value.couponOtherItem = [];
};
const selfDiscount = computed(() =>
state.value.lockData.discountList
.sort((a, b) => b.month - a.month)
@ -1084,15 +927,6 @@ const getLockerExpense = () => {
.ContinuationOrderPricePost({
orderId: state.value.selectItem.orderId,
month: state.value.month,
couponIds: state.value.couponItem.map((item) => item.couponDispositionId),
serialNumber: state.value.couponOtherItem.map(x => {
return {
dealGroupId: x.dealGroupId,
number: x.number,
marketPrice: x.marketPrice,
purchasePrice: x.price
}
}),
// couponIds: state.value.couponItem.map((item) => item.couponDispositionId),
// point:state.value.point,
// serialNumber: state.value.couponOtherItem.map(x => {
@ -1116,7 +950,7 @@ const getLockerExpense = () => {
showCancel: false,
success: function () {
clearCoupon();
// state.value.point = 0;
state.value.point = 0;
},
});
}

View File

@ -1,131 +1,172 @@
<template>
<!-- <nav-bar></nav-bar> -->
<view
class="container"
:class="[`${themeInfo.theme}-theme`, `${themeInfo.language}`]"
>
<nav-bar></nav-bar>
<view class="content">
<view class="formBox card">
<uv-form labelPosition="left" labelWidth="190rpx" :model="state.formData" ref="formRef">
<!-- 姓名 -->
<uv-form-item :label="$t('reserve.FULLNAME')" borderBottom>
<uv-input
<view class="info">
<view class="i-header">
<view class="tabbox">
<view class="li">
{{ $t("home.reserve") }}
</view>
</view>
</view>
<view class="infobox">
<view class="personal">
<view class="select">
<view class="label"> * {{ $t("reserve.FULLNAME") }} </view>
<view class="inputBox">
<view class="value">
<input
type="text"
v-model="state.formData.userName"
border="none"
placeholder="请填写"
/>
</uv-form-item>
</view>
</view>
</view>
<!-- 区域 -->
<uv-form-item :label="$t('reserve.REGION')" borderBottom @click="openRegionPicker">
<view class="select">
<view class="label"> * {{ $t("reserve.REGION") }} </view>
<view class="inputBox" @click="openRegionPicker">
<view class="value">
<uv-input
type="text"
v-model="state.formData.region"
border="none"
readonly
placeholder="请选择"
/>
<template #right>
<uv-icon name="arrow-right" size="16"></uv-icon>
</template>
</uv-form-item>
</view>
<uv-icon
class="arrow"
name="arrow-down-fill"
color="#000000"
size="14"
></uv-icon>
</view>
</view>
<!-- 类型 -->
<uv-form-item :label="$t('reserve.TYPE')" borderBottom>
<view class="select">
<view class="label"> * {{ $t("reserve.TYPE") }} </view>
<view class="inputBox">
<view class="value">
<uv-radio-group
v-model="state.formData.type"
placement="row"
activeColor="#fb322e" size="40rpx" inactiveColor="#D8D8D8"
size="12"
iconSize="14"
:activeColor="themeInfo.activeColor"
>
<uv-radio :customStyle="{
margin: '4px',
}" :name="$t('reserve.Individual & Family')" :label="$t('reserve.Individual & Family')" />
<uv-radio :customStyle="{
margin: '4px',
}" :name="$t('reserve.Business & E-commerce')" :label="$t('reserve.Business & E-commerce')" />
<uv-radio :customStyle="{
margin: '4px',
}" :name="$t('reserve.Retail & Store')" :label="$t('reserve.Retail & Store')" />
<uv-radio
:customStyle="{
margin: '8px 8px 8px 0',
}"
:name="$t('reserve.Individual & Family')"
:label="$t('reserve.Individual & Family')"
></uv-radio>
<uv-radio
:customStyle="{
margin: '8px 8px 8px 0',
}"
:name="$t('reserve.Business & E-commerce')"
:label="$t('reserve.Business & E-commerce')"
></uv-radio>
<uv-radio
:customStyle="{ margin: '8px 0' }"
:name="$t('reserve.Retail & Store')"
:label="$t('reserve.Retail & Store')"
></uv-radio>
</uv-radio-group>
</uv-form-item>
</view>
</view>
</view>
<!-- 手机号 -->
<uv-form-item :label="$t('reserve.PHONE NUMBER')" borderBottom>
<view style="display:flex;align-items:center;width:100%">
<uv-input
<view class="select">
<view class="label"> * {{ $t("reserve.PHONE NUMBER") }} </view>
<view class="inputBox">
<view class="value">
<input
type="text"
v-model="state.formData.phone"
border="none"
placeholder="请填写"
style="flex:1"
/>
</view>
</uv-form-item>
<!-- 需求 -->
<uv-form-item :label="$t('common.Requirement')">
<!-- #ifdef MP-WEIXIN -->
<uv-button
size="small"
:text="$t('validation.bind')"
open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber"
>
</uv-button>
<!-- #endif -->
</view>
</view>
<view class="select">
<view class="label"> * {{ $t("common.Requirement")}} </view>
<view class="inputBox">
<view class="value">
<uv-radio-group
v-model="state.formData.tag"
placement="row"
activeColor="#fb322e" size="40rpx" inactiveColor="#D8D8D8"
size="12"
iconSize="14"
:activeColor="themeInfo.activeColor"
>
<uv-radio :customStyle="{
margin: '4px',
}" :name="2" :label="$t('common.ConsultationQuotation')" />
<uv-radio :customStyle="{
margin: '4px',
}" :name="1" :label="$t('common.OnSiteAssessment')" />
<uv-radio
:customStyle="{ margin: '8px 0' }"
:name="2"
:label="$t('common.ConsultationQuotation')"
></uv-radio>
<uv-radio
:customStyle="{
margin: '8px',
}"
:name="1"
:label="$t('common.OnSiteAssessment')"
></uv-radio>
</uv-radio-group>
</uv-form-item>
</uv-form>
</view>
</view>
</view>
<!-- 按钮 -->
<view class="btn">
<uv-button
shape="circle"
color="#FB322E"
@click="submit"
>
<button class="next-btn" @click="submit">
{{ $t("common.submit") }}
</uv-button>
</view>
</button>
</view>
<!-- 地区选择 -->
<!-- 选择地区 -->
<uv-picker
ref="regionPickerRef"
:columns="state.columns"
keyName="label"
:confirmText="$t('common.confirm')"
:cancelText="$t('common.cancel')"
@confirm="selectRegion"
@change="changeRegion"
/>
></uv-picker>
</view>
</view>
</view>
</view>
<!-- 是否验证成功 -->
<myModal
v-model="state.showAuthModal"
:content="state.contentTips"
:cancelShow="false"
/>
<uv-popup ref="typeSelectRef" mode="center" round="24px" :safeAreaInsetTop="false" :safeAreaInsetBottom="false" :close-on-click-overlay="false">
></myModal>
<uv-popup ref="typeSelectRef" mode="center" :safeAreaInsetTop="false" :safeAreaInsetBottom="false" :close-on-click-overlay="false">
<view style="min-width:450rpx;padding: 40rpx;display: flex;flex-direction: column;justify-content: center;">
<view class="typeSelectBox">
<uv-button shape="circle"
color="#FB322E" @click="typeSelect(2)">{{ $t('common.ConsultationQuotation')}}</uv-button>
<button @click="typeSelect(2)">{{ $t('common.ConsultationQuotation')}}</button>
</view>
<view style="margin-top: 40rpx;" class="typeSelectBox">
<uv-button shape="circle"
color="#FB322E" @click="typeSelect(1)" >{{ $t('common.OnSiteAssessment')}}</uv-button>
<button @click="typeSelect(1)" >{{ $t('common.OnSiteAssessment')}}</button>
</view>
</view>
</uv-popup>
<view class="footer">
<view @click="toHome">
返回主页
</view>
<view @click="goOrder">
返回订单
</view>
</view>
</view>
</template>
@ -140,7 +181,7 @@ import { useLoginApi as homeApi } from "/Apis/home.js";
import { ClientSite } from "@/Apis/book.js";
import { isXiaohongshu } from '@/config/index.js';
const { themeInfo,storeState } = useMainStore();
const { themeInfo } = useMainStore();
const { t } = useI18n();
const getLoginApi = useLoginApi();
@ -218,7 +259,7 @@ const verifyPerson = () => {
phone: state.formData.phone,
remark: state.formData.region,
type: state.formData.type,
channel: 18,
channel: isXiaohongshu ? 17 : 1,
tag: state.formData.tag,
})
.then((res) => {
@ -276,92 +317,214 @@ const selectCity = (city, parentIndex) => {
}
});
}
const toHome = (item) => {
uni.switchTab({
url: `/pages/index/index`,
});
}
const goOrder = () => {
uni.switchTab({
url: `/pages/unlock/index`,
});
}
onMounted(() => {
state.formData.phone = storeState.userInfo.phone;
state.formData.userName = storeState.userInfo.customerName;
getCityData();
// setTimeout(()=>{
// typeSelectRef.value?.open();
// },500)
setTimeout(()=>{
typeSelectRef.value?.open();
},500)
});
</script>
<style lang="scss" scoped>
@import "@/static/style/theme.scss";
.back{
margin-bottom: 0;
.typeSelectBox{
button {
font-size: 32rpx;
padding: 12rpx 0;
color: var(--text-color);
background: var(--active-color);
border-radius: 10rpx;
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.13);
}
.footer{
position: fixed;
bottom: 0;
}
.container {
margin: 0;
padding: 0 20upx;
width: 100%;
min-height: 100vh;
padding-bottom: 80rpx;
display: flex;
flex-direction: column;
align-items: center;
background: linear-gradient(
to bottom,
var(--right-linear),
var(--left-linear2)
);
background-attachment: fixed;
.content {
width: 100%;
.infobox {
width: 100%;
padding: 10upx 6% 60upx;
background-color: #ffffff;
position: relative;
&::before {
content: "";
z-index: 9;
position: absolute;
bottom: -7px;
left: 0;
width: 100%;
height: 100rpx;
height: 14px;
background: radial-gradient(
var(--left-linear2) 0px,
var(--left-linear2) 5px,
transparent 5px,
transparent
);
background-size: 14px 14px;
}
}
.btn {
margin-top: 60rpx;
margin-bottom: 20rpx;
button {
font-size: 28rpx;
padding: 12rpx 0;
color: var(--text-color);
background: var(--active-color);
border-radius: 10rpx;
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.13);
}
}
.select {
border-bottom: 1px solid #bec2ce;
margin: 30rpx 0;
.label {
color: #bec2ce;
font-size: 26rpx;
font-weight: bold;
}
.info {
color: #242e42;
font-size: 22rpx;
display: flex;
justify-content: space-between;
font-weight: bold;
padding: 0 18rpx;
opacity: 0.7;
&.Total {
margin-top: 10rpx;
color: #242e42;
opacity: 1;
}
}
.garyBox {
background-color: rgba(216, 216, 216, 0.3);
border-radius: 8rpx;
padding: 2rpx 10rpx;
font-size: 20rpx;
font-weight: bold;
color: rgb(36, 46, 66);
display: flex;
justify-content: space-around;
align-items: center;
background-color: #fff;
view{
width: 50%;
height: 80rpx;
line-height: 80rpx;
justify-content: space-between;
margin: 10rpx 4rpx;
}
.inputBox {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx;
margin-left: 5px;
.ImgUpload {
display: flex;
margin: 10upx 0;
::v-deep .uv-upload {
margin-right: 40rpx;
border-radius: 18rpx;
border: 2px solid #9797974f;
.uv-upload__wrap__preview {
margin: 0;
}
}
.upLoadText {
font-size: 28upx;
text-align: center;
color: #000;
padding: 10upx 0;
background: var(--active-color);
border-radius: 0 0 18upx 18upx;
margin: -1px;
}
}
.value {
flex: 1;
display: flex;
flex-wrap: wrap;
color: #242e42;
font-size: 30rpx;
font-weight: bold;
}
.arrow {
width: auto;
font-size: 24rpx;
.codeBtn {
font-size: 24rpx;
background-color: #d1cbcb2d;
}
.container{
min-height:100vh;
background:#f5f6f8;
}
image {
width: 20rpx;
height: 12rpx;
}
}
}
}
.i-header {
position: relative;
&::before {
content: "";
position: absolute;
top: -7px;
left: 0;
width: 100%;
height: 14px;
background: radial-gradient(
var(--right-linear) 0px,
var(--right-linear) 5px,
transparent 5px,
transparent
);
background-size: 14px 14px;
z-index: 9;
}
padding: 40upx 0;
width: 100%;
background-color: #f7f7f7;
color: #242e42;
.tabbox {
position: relative;
padding-top: 10upx;
display: flex;
justify-content: space-around;
.li {
width: 50%;
background-color: transparent;
font-size: 34upx;
outline: none;
text-align: center;
}
.li.active {
font-weight: bold;
}
.bottom-line {
position: absolute;
left: calc(50% - 220rpx);
bottom: 0;
width: 160rpx;
height: 2.5px;
border-radius: 20px;
background: var(--main-color);
transition: left 0.5s ease;
.formBox{
background:#fff;
border-radius:16rpx;
padding:10rpx 20rpx;
:deep(.uv-form-item__body){
padding:20rpx 0;
}
:deep(.uni-input-wrapper){
text-align:right;
font-weight:600;
font-size:28rpx;
.uv-radio-group--row{
justify-content: end;
&.right {
left: calc(50% + 60rpx);
}
}
:deep(.uv-form-item__body__right__content__slot){
text-align:right;
}
:deep(.uv-form-item__body__left__content__label){
font-size:26rpx;
font-weight:600;
}
:deep(.uv-line){
border-color:#f0f0f0 !important;
}
}
.btn{
margin-top:40rpx;
padding:0 20rpx;
}
</style>

View File

@ -1,3 +0,0 @@
<svg width="24" height="20" viewBox="0 0 24 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.3138 20H3.22983C2.34642 19.9723 1.51015 19.595 0.904801 18.951C0.299457 18.307 -0.025425 17.449 0.0015557 16.5655V3.40501C-0.0174213 2.52263 0.314215 1.66872 0.923773 1.03045C1.53333 0.392186 2.37108 0.0216266 3.2534 0H20.3373C21.2155 0.0277349 22.0473 0.400967 22.6518 1.03857C23.2563 1.67617 23.5847 2.5266 23.5656 3.40501V16.5655C23.579 17.0049 23.5053 17.4426 23.3488 17.8534C23.1924 18.2641 22.9563 18.6399 22.654 18.9591C22.3518 19.2783 21.9895 19.5346 21.5878 19.7132C21.1862 19.8919 20.7532 19.9893 20.3138 20ZM3.22983 1.79676C2.82566 1.82401 2.44774 2.00672 2.17535 2.30656C1.90297 2.6064 1.75728 3.00008 1.76886 3.40501V16.5655C1.75532 16.7728 1.78313 16.9807 1.85066 17.1772C1.9182 17.3736 2.02411 17.5546 2.16225 17.7098C2.30039 17.8649 2.468 17.991 2.65532 18.0808C2.84264 18.1706 3.04594 18.2222 3.2534 18.2327H20.3373C20.5428 18.2192 20.7435 18.1654 20.9281 18.0743C21.1127 17.9832 21.2776 17.8566 21.4132 17.7018C21.5489 17.547 21.6528 17.367 21.7188 17.172C21.7849 16.977 21.8119 16.7709 21.7983 16.5655V3.40501C21.8176 2.99125 21.6722 2.5867 21.394 2.27981C21.1158 1.97292 20.7274 1.78866 20.3138 1.7673L3.22983 1.79676ZM9.77475 16.1708C9.65298 16.1716 9.53241 16.1468 9.4208 16.0981C9.30919 16.0494 9.20902 15.9778 9.12674 15.8881C8.14025 14.8376 6.92697 14.0263 5.57938 13.5158C4.23179 13.0054 2.78545 12.8093 1.3506 12.9426L1.18565 11.1753C2.68799 11.0318 4.20383 11.1921 5.64296 11.6465C7.0821 12.1009 8.41511 12.8402 9.56267 13.8203C10.6908 12.0945 12.2323 10.678 14.0472 9.6996C15.862 8.72118 17.8926 8.21187 19.9544 8.21797C20.7275 8.21488 21.499 8.28788 22.2578 8.43594L21.9161 10.1679C21.2698 10.0431 20.6127 9.98194 19.9544 9.98527C18.016 9.97585 16.1127 10.503 14.4554 11.5084C12.7981 12.5139 11.4513 13.9583 10.5641 15.6819C10.5003 15.8095 10.4064 15.9197 10.2904 16.0029C10.1744 16.086 10.0399 16.1396 9.89846 16.1591C9.85799 16.1688 9.81634 16.1728 9.77475 16.1708ZM7.07077 9.39617C6.48821 9.39617 5.91873 9.22342 5.43434 8.89976C4.94995 8.57611 4.57242 8.11608 4.34948 7.57786C4.12654 7.03964 4.06821 6.4474 4.18186 5.87602C4.29552 5.30465 4.57605 4.77981 4.98799 4.36787C5.39992 3.95594 5.92476 3.6754 6.49613 3.56175C7.06751 3.4481 7.65975 3.50643 8.19797 3.72937C8.73619 3.95231 9.19622 4.32984 9.51988 4.81423C9.84353 5.29861 10.0163 5.8681 10.0163 6.45066C10.0163 6.83747 9.94009 7.22049 9.79207 7.57786C9.64404 7.93523 9.42708 8.25994 9.15356 8.53345C8.88005 8.80697 8.55534 9.02393 8.19797 9.17196C7.84061 9.31998 7.45758 9.39617 7.07077 9.39617ZM7.07077 5.27246C6.83775 5.27246 6.60996 5.34156 6.4162 5.47102C6.22245 5.60048 6.07143 5.78449 5.98226 5.99978C5.89308 6.21507 5.86975 6.45197 5.91521 6.68052C5.96067 6.90907 6.07289 7.119 6.23766 7.28378C6.40243 7.44855 6.61237 7.56077 6.84092 7.60623C7.06947 7.65169 7.30637 7.62836 7.52165 7.53918C7.73694 7.45001 7.92095 7.29899 8.05042 7.10524C8.17988 6.91148 8.24898 6.68369 8.24898 6.45066C8.24898 6.13818 8.12485 5.8385 7.90389 5.61755C7.68293 5.39659 7.38325 5.27246 7.07077 5.27246Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,3 +0,0 @@
<svg width="24" height="23" viewBox="0 0 24 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.2801 9.5438V5.32868C20.2801 3.35183 18.678 1.74961 16.701 1.74961H16.3146V0.893552C16.3146 0.400141 15.9145 0 15.4195 0C15.1825 0 14.9553 0.0941418 14.7877 0.261715C14.6201 0.429289 14.526 0.656567 14.526 0.893552V1.74961H6.17536V0.893552C6.17536 0.400141 5.77368 0 5.28026 0C4.78519 0 4.38517 0.400141 4.38517 0.893552V1.74961H3.57907C1.6021 1.74961 0 3.35183 0 5.32868V19.0469C0 21.0238 1.6021 22.6259 3.57907 22.6259H10.3868C10.5206 22.6669 10.6622 22.6759 10.8001 22.6523C10.9381 22.6286 11.0685 22.5729 11.181 22.4896C11.2935 22.4064 11.3849 22.2978 11.4478 22.1728C11.5107 22.0478 11.5434 21.9098 11.5432 21.7698C11.5432 21.3283 11.2226 20.9611 10.8005 20.8886C10.7904 20.8831 10.7799 20.8785 10.7691 20.8747C10.4973 20.7862 3.57919 20.8357 3.57919 20.8357C2.59237 20.8357 1.79055 20.0337 1.79055 19.0469V9.54297H19.595M3.57907 3.53825H4.38517V5.06868C4.38506 5.18626 4.40814 5.3027 4.45308 5.41135C4.49803 5.52 4.56395 5.61872 4.64709 5.70186C4.73023 5.78499 4.82895 5.85092 4.9376 5.89587C5.04624 5.94081 5.16269 5.96389 5.28026 5.96378C5.51764 5.96372 5.74527 5.86939 5.91312 5.70154C6.08097 5.53369 6.1753 5.30606 6.17536 5.06868V3.53825H14.526V5.06868C14.526 5.56376 14.9261 5.96378 15.4195 5.96378C15.5371 5.96389 15.6536 5.94081 15.7622 5.89587C15.8708 5.85092 15.9696 5.78499 16.0527 5.70186C16.1358 5.61872 16.2018 5.52 16.2467 5.41135C16.2917 5.3027 16.3147 5.18626 16.3146 5.06868V3.53825H16.701C17.6878 3.53825 18.4913 4.34174 18.4913 5.32856V7.75254H1.79031V5.32868C1.79031 4.34186 2.59225 3.53825 3.57907 3.53825ZM17.5071 10.7354C14.2128 10.7354 11.5431 13.4066 11.5431 16.6995C11.5431 19.9937 14.2127 22.665 17.5071 22.665C20.8014 22.665 23.4727 19.9939 23.4727 16.6995C23.4727 13.4066 20.8015 10.7354 17.5071 10.7354ZM17.5071 20.8746C15.2061 20.8746 13.3318 19.002 13.3318 16.6993C13.3318 14.3981 15.2059 12.5256 17.5071 12.5256C19.8098 12.5256 21.6823 14.3981 21.6823 16.6993C21.6823 19.002 19.8099 20.8746 17.5071 20.8746ZM19.2974 17.2972H17.5071V15.507C17.507 15.3489 17.4442 15.1973 17.3324 15.0854C17.2206 14.9736 17.069 14.9107 16.9109 14.9106C16.7528 14.9107 16.6012 14.9736 16.4894 15.0854C16.3776 15.1973 16.3148 15.3489 16.3146 15.507V17.8935C16.3147 18.0516 16.3776 18.2032 16.4894 18.315C16.6012 18.4268 16.7528 18.4897 16.9109 18.4898H19.2974C19.4555 18.4896 19.6071 18.4268 19.7189 18.315C19.8307 18.2032 19.8936 18.0516 19.8937 17.8935C19.8936 17.7354 19.8307 17.5838 19.7189 17.472C19.6071 17.3602 19.4555 17.2973 19.2974 17.2972ZM7.96413 11.9279H4.38517C4.22683 11.9279 4.07498 11.9908 3.96302 12.1028C3.85106 12.2147 3.78816 12.3666 3.78816 12.5249C3.78816 12.6833 3.85106 12.8351 3.96302 12.9471C4.07498 13.059 4.22683 13.1219 4.38517 13.1219H7.96424C8.12234 13.1218 8.27393 13.0589 8.38571 12.9471C8.49749 12.8353 8.56033 12.6837 8.56042 12.5256C8.56051 12.4472 8.54517 12.3696 8.51525 12.2971C8.48533 12.2246 8.44144 12.1588 8.38606 12.1033C8.33069 12.0478 8.26493 12.0037 8.19254 11.9736C8.12014 11.9435 8.04253 11.928 7.96413 11.9279ZM7.96413 16.103H4.38517C4.30675 16.1032 4.22913 16.1187 4.15672 16.1488C4.08432 16.1789 4.01855 16.223 3.96318 16.2785C3.90781 16.3341 3.86392 16.3999 3.83401 16.4724C3.8041 16.5449 3.78877 16.6226 3.78887 16.701C3.789 16.8591 3.85187 17.0107 3.96367 17.1225C4.07547 17.2342 4.22707 17.2971 4.38517 17.2972H7.96424C8.12233 17.2971 8.27392 17.2342 8.3857 17.1225C8.49749 17.0107 8.56033 16.8591 8.56042 16.701C8.56053 16.6226 8.54519 16.5449 8.51529 16.4724C8.48538 16.3999 8.44149 16.3341 8.38611 16.2785C8.33074 16.223 8.26498 16.1789 8.19257 16.1488C8.12017 16.1187 8.04254 16.1032 7.96413 16.103Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -47,7 +47,6 @@ export const useMainStore = defineStore('main', () => {
return getApi.GetUserInfo().then(res=>{
if(res.code == 200){
storeState.value.userInfo = res.data ?? {}
storeState.value.hasTrytoLogin = true
uni.setStorage({
key:'userInfo',
data:res.data
@ -68,13 +67,10 @@ export const useMainStore = defineStore('main', () => {
const logOut = ()=>{
storeState.value.token = ''
storeState.value.userInfo = {}
// 如果是开发环境 就不清token 避免开发的时候后端服务没起来 每次都要重新登录
if(process.env.NODE_ENV !== 'development'){
uni.removeStorage({
key:'token'
}); // 清除缓存
}
}
const setLocation = (location) => {
storeState.value.location = location;

View File

@ -14,7 +14,7 @@
<slot name="icon">
<uv-icon
class="uv-checkbox__icon-wrap__icon"
name="checkmark"
name="checkbox-mark"
:size="elIconSize"
:color="elIconColor"
/>