oil-station/gasStation-uni/pages/index/index.vue
2024-03-11 18:05:45 +08:00

991 lines
23 KiB
Vue
Raw 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">
<view class="container">
<!--外层 -->
<!-- 顶部 -->
<view class="conttainer-top">
<!-- 轮播图 -->
<view style="width: 100%;height: 300px;">
<swiper class="swiper" style="width: 100%;height: 300px;" circular :indicator-dots="indicatorDots"
:autoplay="autoplay" :interval="interval" :duration="duration">
<swiper-item v-for="(item,index) in list1" :key="index" @click="goPage(item.routeUrl)">
<view class="swiper-item uni-bg-red">
<image style="width: 100%;" :src="item.bannerUrl"></image>
</view>
<!-- <image style="width: 100%;" :src="getBannerUrl(item.bannerUrl)"></image> -->
</swiper-item>
</swiper>
</view>
<!-- 标题 -->
<view class="top-title">
出行服务 优惠加油
</view>
<view class="lan-gang">
<view class="lsiez"> <uni-icons type="checkbox" color="#ffffff" size="10"></uni-icons> 一键加油</view>
<view class="lsiez"> <uni-icons type="checkbox" color="#ffffff" size="10"></uni-icons> 最近油站</view>
<view class="lsiez"> <uni-icons type="checkbox" color="#ffffff" size="10"></uni-icons> 地址导航</view>
</view>
<!-- 金刚区 -->
<view class="conttainer-jg">
<view class="jg-box" @click="toQRcode">
<view class="jg-img">
<image src="../../static/imgs/viprwm.png" mode="aspectFit"></image>
</view>
<view class="jg-size">二维码</view>
</view>
<view class="jg-box" @click="goActivity()">
<view class="jg-img">
<image src="../../static/imgs/bzhd.png" mode="aspectFit"></image>
</view>
<view class="jg-size">本站活动</view>
</view>
<view class="jg-box" @click="goCard()">
<view class="jg-img">
<image src="../../static/imgs/ykcz.png" mode="aspectFit"></image>
</view>
<view class="jg-size">油卡充值</view>
</view>
<view class="jg-box" @click="goMall()">
<view class="jg-img">
<image src="../../static/imgs/jfsc.png" mode="aspectFit"></image>
</view>
<view class="jg-size">积分商城</view>
</view>
</view>
<!-- 金刚区结束 -->
</view>
<!-- 顶部结束 -->
<!-- centenr -->
<view class="conttainer-cetr">
<view class="conttainer-title">今日会员价</view>
<!-- <view class="conttainer-box" v-for="(item,index) in oilTypeList" :key="index">
<view class="c-box-box1">
<view class="">{{item.oilName||''}}</view>
</view>
<view class="c-box-box2">
<view class="xred">会员价</view>
<view class="dred"> <text class="xred">¥</text> {{item.oilPrice||0}}</view>
</view>
<view class="c-box-box3">
<view class="xblck">国标价</view>
<view class="dblck"> <text class="xblck">¥</text> {{item.gbPrice||0}}</view>
</view>
</view> -->
<swiper class="swiper" style="width: 100%;height: 70px;" circular
:autoplay="autoplay" :interval="interval" :vertical="true" :duration="duration">
<swiper-item class="conttainer-box" v-for="(item,index) in oilTypeList" :key="index">
<view class="c-box-box1">
<view class="">{{item.oilName||''}}</view>
</view>
<view class="c-box-box2">
<view class="xred">会员价</view>
<view class="dred"> <text class="xred">¥</text> {{item.oilPrice||0}}</view>
</view>
<view class="c-box-box3">
<view class="xblck">国标价</view>
<view class="dblck"> <text class="xblck">¥</text> {{item.gbPrice||0}}</view>
</view>
</swiper-item>
</swiper>
</view>
<!-- centenr结束 -->
<!-- 加油站卡片-->
<view class="station">
<view class="station-box">
<view class="station-title" style="display: flex;justify-content: space-between;">
{{store.name}}{{store.description ? "("+store.description+")" : ""}}
<!-- <view class="" @click="goChooseAddress" style="width: 22%;font-size: 14px;font-weight: 400;">
<view style="font-size: 12px;">切换位置 <uni-icons type="right" color="#304fff"
size="14"></uni-icons> </view>
</view> -->
</view><!--顺通石化加油站(工业南路站)-->
<view style="display: flex;">
<view class="bule-icon" v-if="welfare.length!=0" v-for="(item,index) in welfare" :key="index">
{{item}}
</view>
</view>
<view class="dis-bt">
<view class="">
<view class="hui1">{{ store.address }}</view>
<view class="hui2" v-if="distance">{{ distance }}km</view>
</view>
<view class="lananniu" @click="goGoGo" v-if="distance!=''">
<uni-icons type="paperplane-filled" color="#195ADA" size="16"></uni-icons>
{{ distance || "0" }}KM
</view>
</view>
<u-swiper :list="list3" previousMargin="30" nextMargin="30" circular :autoplay="false" radius="5"
bgColor="#ffffff"></u-swiper>
<view class="juanniu" @click="goOil()">
<view class="">一键加油</view>
</view>
</view>
<view style="height: 88px; width: 100%;"></view>
</view>
<!-- 加油站卡片结束-->
<u-picker :columns="columns" @confirm="confirm" :show="show" @cancel="show = false"
keyName="label"></u-picker>
<u-overlay :show="shows == true">
<image src="../../static/imgs/zzxryl.png"
style="width: 280px; height: 350px; margin: 20px auto; margin-top: 200px; ">
</image>
<view class="anniuprp" @click="drawDown()">
<text>立即领取</text>
</view>
</u-overlay>
<!--外层结束 -->
<tabbar :msg="msg"></tabbar>
</view>
</view>
</template>
<script>
import tabbar from "../../components/tabbar/tabbar.vue"
import config from '@/config'
import request from '../../utils/request'
import {
callWithErrorHandling
} from "vue"
export default {
data() {
return {
chainStoreId: '',
indicatorDots: true,
autoplay: true,
interval: 3000,
duration: 500,
joinmsg: '',
msg: "1",
show: false,
shows: '',
title: '',
oilTypeList: '',
columns: [],
oilInfo: {
oilName: '未添加',
oilPrice: '0',
gbPrice: '0'
},
AppToken: uni.getStorageSync("App-Token"),
list1: [],
list3: [
'http://47.95.206.185:83/topbj.png',
],
// 当前经度信息
longitude: "",
// 当前纬度信息
latitude: "",
// 店铺经度信息
lon: "",
// 店铺纬度信息
lat: "",
// 店铺信息
store: {
name: "测试油站",
description: "济南分店",
address: "济南槐荫区"
},
// 店铺福利信息
welfare: [],
distance: "",
storeId: "",
staffId: "",
baseUrl: this.$baseUrl,
}
},
async onLoad(query) {
if (query.storeId) {
// uni.setStorageSync("y_storeId", query.storeId)
uni.setStorageSync("storeId", query.storeId)
}
if (query.type) {
uni.setStorageSync("y_type", query.type)
}
if (query.userId) {
uni.setStorageSync("y_userId", query.userId)
}
uni.showToast({
title:"storeId"+uni.getStorageSync("storeId")
})
if (uni.getStorageSync("appltType") == "WECHAT") {
const q = decodeURIComponent(query.q) // 获取到二维码原始链接内容
if (query.q) {
let str = q.split("?")[1];
let storeId = "19";
let staffId = "";
console.log(111);
if (str.includes("&")) {
let arr = str.split("&");
arr.forEach(item => {
if (item.includes("storeId")) {
storeId = item.split("=")[1]
} else {
staffId = item.split("=")[1]
}
})
} else {
storeId = str.split("=")[1]
}
uni.setStorageSync("storeId", storeId)
uni.setStorageSync("inviteStaffId", staffId)
this.storeId = uni.getStorageSync("storeId")
this.chainStoreId = uni.getStorageSync("chainStoreId")
this.staffId = uni.getStorageSync("inviteStaffId")
await this.getUserAuthority();
// await this.getOilType();
} else {
if (uni.getStorageSync("storeId")) {
this.storeId = uni.getStorageSync("storeId")
} else {
let storeId = "34";
uni.setStorageSync("storeId", storeId)
}
await this.getUserAuthority();
// await this.getOilType();
}
await this.getTheJudgmentIsTheSame();
} else {
await this.getUserAuthority();
// await this.getOilType();
await this.getTheJudgmentIsTheSame();
}
},
onShow() {
this.isJoined()
// this.getIndexBanner()
},
components: {
tabbar
},
methods: {
// 返回图片路径
getBannerUrl(url) {
let imgurl = ""
if (url.includes("http")) {
imgurl = url
} else {
imgurl = this.baseUrl + url
}
return imgurl;
},
// 跳转banner图对应的页面
goPage(url) {
uni.navigateTo({
url: url,
})
},
// 获取首页轮播图信息
getIndexBanner() {
let _this = this
if (uni.getStorageSync("storeId")) {
request({
url: 'business/indexBanner/list/' + uni.getStorageSync("storeId"),
method: 'get',
}).then(res => {
_this.list1 = res.data
if (res.data.length > 0) {
for (let i = 0; i < res.data.length; i++) {
if (res.data[i].bannerUrl.includes("http")) {
_this.list1[i].bannerUrl = res.data[i].bannerUrl
} else {
_this.list1[i].bannerUrl = _this.baseUrl + res.data[i].bannerUrl
}
}
console.log(_this.list1);
}
})
}
},
//判断是否是新人
isJoined() {
// 判断是否登录
if (!this.AppToken) {
return;
}
request({
url: 'business/marketingActivity/activeNewlywedsRecords/applet',
method: 'get',
}).then(res => {
console.log("11111" + res)
if (res.code == 200 && res.data == 1) {
this.shows = true
} else {
this.shows = false
}
})
},
//立即领取
drawDown() {
/* this.shows = false */
request({
url: 'business/marketingActivity/activeNewlywedsRecords',
method: 'post',
data: {
storeId: this.storeId,
chainStoreId: this.chainStoreId,
}
}).then(res => {
console.log("11111" + res)
if (res.code == 200 && res.data == true) {
this.shows = false
uni.showToast({
title: '领取成功!'
})
} else {
this.shows = false
uni.showToast({
title: '领取失败!'
})
}
/* if (res.code == 200 && res.data == 1) {
this.shows = true
} else {
this.shows = false
} */
})
},
//查询新人有礼礼品
selectActiveNewlyweds() {
// 判断是否登录
if (!this.AppToken) {
return;
}
request({
url: 'business/marketingActivity/activeNewlyweds/applet',
method: 'get',
}).then(res => {
console.log("11111" + res)
})
},
isExistStoreId() {
if (uni.getStorageSync("storeId")) {
this.getStore(uni.getStorageSync("storeId"));
} else {
this.getAddress(uni.getStorageSync("storeId"));
}
},
// 获取定位信息
getUserAuthority() {
let _this = this;
// this.getAddress();
uni.getSetting({
async success(res) {
if (!res.authSetting['scope.userLocation']) {
// uni.authorize({
// scope: 'scope.userLocation',
// success() {
// // 用户同意获取位置信息
// // _this.isExistStoreId()
// },
// fail() {
// // 用户拒绝
// }
// })
await _this.getAddress(uni.getStorageSync("storeId"));
} else {
// 用户同意获取位置信息
// _this.isExistStoreId()
await _this.getAddress(uni.getStorageSync("storeId"));
}
},
fail(err) {
}
})
},
// 判断token是否与当前连锁店id相同
async getTheJudgmentIsTheSame() {
console.log(this.AppToken, 547);
// 判断是否登录
if (!this.AppToken) {
return;
}
await request({
url: 'chainStoreInfo/theJudgmentIsTheSame',
method: 'get',
data: {
"chainStoreId": uni.getStorageSync("chainStoreId")
}
}).then(res => {
if (!res.data) {
uni.removeStorageSync("App-Token");
}
})
// 判断当前登录的code是否相同
if (uni.getStorageSync("appltType") == "WECHAT") {
wx.login({
success(res) {
if (res.code) {
//发起网络请求
request({
url: 'clientApi/sign/mpWxLogin2',
method: "POST",
data: {
code: res.code
}
}).then(resp => {
if (!resp.data) {
uni.removeStorageSync("App-Token");
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
if (uni.getStorageSync("appltType") == "ALIPAY") {
my.getAuthCode({
scopes: 'auth_base',
success: res => {
const authCode = res.authCode;
console.log(res)
request({
url: "clientApi/sign/alipayLogin/getUserid2",
method: 'post',
data: {
authCode: authCode,
storeId: uni.getStorageSync("storeId"),
},
}).then((resp) => {
console.log(resp, 85412);
if (!resp.data) {
uni.removeStorageSync("App-Token");
}
})
},
fail: err => {
console.log('my.getAuthCode 调用失败', err)
}
});
}
},
// 获取门店信息
getStore(id) {
let _this = this;
request({
url: "business/storeInformation/store/queryStoreById",
method: 'post',
data: {
"storeId": id
},
}).then((response) => {
_this.store = response.data
let welfare = response.data.welfare
uni.setStorageSync("storeId", response.data.id)
uni.setStorageSync("chainStoreId", response.data.chainStoreId)
if (welfare) {
if (welfare.includes(",")) {
_this.welfare = response.data.welfare.split(",")
} else {
_this.welfare.push(response.data.welfare)
}
}
if (response.data.doorstepPhoto) {
let list = JSON.parse(response.data.doorstepPhoto)
_this.list3 = [];
list.forEach(item => {
_this.list3.push(_this.baseUrl + item)
})
}
}).catch((res) => {
})
},
// 获取当前位置
getAddress(storeId) {
let _this = this;
uni.getLocation({
// 谷歌使用wgs84 其他使用gcj02
type: 'gcj02', // 使用国测局坐标系
success: function(res) {
if (_this.longitude == "" && _this.latitude == "") {
_this.longitude = res.longitude;
_this.latitude = res.latitude
}
console.log('经度: ' + _this.longitude);
console.log('纬度: ' + _this.latitude);
request({
url: 'business/storeInformation/store/recentlyStore',
method: 'post',
data: {
"lon": _this.longitude,
"lat": _this.latitude,
"storeId": storeId,
"isLogin": _this.AppToken ? "0" : "1", // 0为登录
},
}).then((response) => {
console.log(response, "2154");
// uni.showToast({
// title:"121984:"+storeId
// })
if (response.data.store) {
_this.distance = (Math.ceil(response.data.distance))
.toFixed(1)
_this.store = response.data.store
uni.setStorageSync("storeId", response.data.store.id)
uni.setStorageSync("chainStoreId", response.data.store.chainStoreId)
console.log(uni.getStorageSync("chainStoreId"));
if (response.data.store.welfare) {
if (response.data.store.welfare.includes(",")) {
_this.welfare = response.data.store.welfare
.split(",")
} else {
_this.welfare.push(response.data.store.welfare)
}
}
if (response.data.store.doorstepPhoto) {
let list = JSON.parse(response.data.store.doorstepPhoto)
_this.list3 = [];
list.forEach(item => {
_this.list3.push(_this.baseUrl + item)
})
}
_this.lon = _this.store.longitude,
_this.lat = _this.store.latitude,
_this.getIndexBanner()
_this.getOilType();
} else {
uni.showToast({
title: "当前店铺已关闭!!!",
icon: "none"
})
}
}).catch(err => {})
// uni.showToast({
// title: "获取位置信息成功",
// icon: "none"
// })
},
fail: function(err) {
_this.getStore(2);
// uni.showToast({
// title: "获取位置信息失败"
// })
console.log('获取位置信息失败: ' + err.errMsg);
}
});
},
//获取油站的油号信息
getOilType() {
let params = {
storeId: uni.getStorageSync("storeId")
}
console.log(uni.getStorageSync("storeId"));
request({
url: 'business/petrolStationManagement/oilNumber/getList2',
method: 'get',
params: params
}).then((res) => {
if (res.code == 200) {
this.oilTypeList = res.data.records
// console.log("aaabbb", this.oilTypeList)
if (this.oilTypeList.length > 0) {
this.oilInfo.oilName = this.oilTypeList[0].oilName,
this.oilInfo.oilPrice = this.oilTypeList[0].oilPrice,
this.oilInfo.gbPrice = this.oilTypeList[0].gbPrice
}
let oilData = []
console.log(this.oilTypeList);
this.oilTypeList.forEach(res => {
let data = {
id: res.numberId,
label: res.oilName,
oilPrice: res.oilPrice,
gbPrice: res.gbPrice
}
oilData.push(data)
})
this.columns = [oilData]
}
})
},
confirm(e) {
console.log('选中的油号', e);
this.oilInfo.oilName = e.value[0].label,
this.oilInfo.oilPrice = e.value[0].oilPrice,
this.oilInfo.gbPrice = e.value[0].gbPrice
this.show = false
},
cancel() {
this.show = false
},
/* onOverlay() {
this.drawDown();
this.shows = false
uni.showToast({
title: '领取成功'
})
}, */
goActivity() {
// 去活动页
uni.navigateTo({
url: '/pagesHome/Activity/index'
})
},
goCard() {
uni.navigateTo({
url: '/pagesHome/MyCard/MyCard'
})
},
goOil() {
uni.navigateTo({
url: '/pages/refuel/refuel'
})
},
goChooseAddress() {
uni.chooseLocation({
success: ({
name,
address,
latitude,
longitude
}) => { // 选择位置完成后的处理
// this.addressName = address;
console.log(name, address, latitude, longitude);
this.longitude = longitude;
this.latitude = latitude;
this.getAddress()
},
});
},
goMall() {
uni.navigateTo({
url: '/pagesHome/PointsMall/PointsMall'
})
},
toQRcode() {
uni.navigateTo({
url: '/pagesHome/QRcode/QRcode'
})
},
goGoGo() {
let lat = Number(this.lat)
let lon = Number(this.lon)
uni.openLocation({
latitude: lat,
longitude: lon,
name: this.store.name,
address: this.store.address,
success: function() {
console.log('success');
},
complete: function(res) {
console.log(res);
}
});
},
}
}
</script>
<style scoped lang="scss">
.content {
background: #ebf5ff;
}
.container {
width: 100%;
height: 100vh;
}
.conttainer-top {
width: 100%;
height: 250px;
// background-color: #3da4df;
// background: url('http://47.95.206.185:83/topbj.png')center no-repeat;
background-size: 100% 100%;
position: relative;
margin-bottom: 60px;
}
.top-title {
font-size: 26px;
color: white;
font-weight: bold;
color: #FFFFFF;
line-height: 25px;
text-shadow: 0px 2px 0px #2F64CD;
position: absolute;
top: 120px;
left: 20px;
}
.lan-gang {
width: 200px;
height: 22px;
background: #2F43F7;
border-radius: 11px;
align-items: center;
display: flex;
justify-content: space-around;
position: absolute;
top: 155px;
left: 20px;
color: white;
}
.lsiez {
font-size: 10px;
display: flex;
}
.conttainer-jg {
width: 95%;
border-radius: 6px;
background: white;
box-sizing: border-box;
padding: 10px;
height: 90px;
margin: 0px auto;
position: absolute;
transform: translate(-50%, -50%);
left: 50%;
bottom: -90px;
display: flex;
}
.conttainer-cetr {
width: 95%;
border-radius: 6px;
background: white;
box-sizing: border-box;
padding: 10px;
margin: 10px auto;
}
.jg-box {
width: 25%;
text-align: center;
}
.jg-img {
width: 38px;
height: 38px;
image {
width: 38px;
height: 38px;
}
margin: 5px auto;
}
.jg-size {
font-size: 14px;
}
.conttainer-title {
font-size: 16px;
font-weight: bold;
}
.conttainer-box {
width: 100%;
box-sizing: border-box;
padding: 15px;
background: #F3F6F9;
display: flex;
align-items: center;
justify-content: space-between;
border-radius: 8px;
margin-top: 10px;
}
.c-box-box1 {
width: 33%;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
}
.c-box-box2 {
width: 33%;
height: 44px;
text-align: center;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
}
.c-box-box3 {
width: 33%;
height: 44px;
text-align: center;
}
.xblck {
font-size: 14px;
color: #333333;
}
.dblck {
font-size: 20px;
color: #333333;
font-weight: bold;
}
.xred {
font-size: 14px;
color: #ED2828;
}
.dred {
font-size: 20px;
color: #ED2828;
font-weight: bold;
}
.station {
width: 100%;
height: 120px;
background: url('http://47.95.206.185:83/centerbj.png')center no-repeat;
background-size: 100% 100%;
box-sizing: border-box;
padding-top: 30px;
}
.station-box {
width: 95%;
background-color: white;
border-radius: 8px;
box-sizing: border-box;
padding: 15px;
margin: 0px auto;
}
.station-title {
font-size: 16px;
font-weight: bold;
}
.bule-icon {
width: 85px;
font-size: 12px;
color: #195ADA;
box-sizing: border-box;
padding: 2px 5px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #195ADA;
border-radius: 4px;
margin: 5px 3px;
}
.dis-bt {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
.hui1 {
color: #666666;
font-size: 12px;
margin: 5px auto;
}
.hui2 {
color: #999999;
font-size: 12px;
margin: 5px auto;
}
.lananniu {
box-sizing: border-box;
padding: 3px 10px;
background: #DBE9FF;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
color: #195ADA;
}
.tabs {
width: 100%;
display: flex;
height: 44px;
}
.scrollbox {
display: flex;
}
.scrollbox-imgs {
width: 195px;
height: 100px;
border-radius: 4px;
background-color: #195ADA;
margin: 0px 10px;
}
.juanniu {
height: 36px;
background: linear-gradient(90deg, #FF7302 0%, #FF5210 100%);
border-radius: 42px;
justify-content: center;
display: flex;
align-items: center;
color: white;
margin-top: 20px;
}
.anniuprp {
width: 130px;
height: 36px;
background: linear-gradient(180deg, #FF6D3A 0%, #FF327A 100%);
box-shadow: inset 0px 0px 6px 3px rgba(255, 255, 255, 0.25);
border-radius: 18px;
display: flex;
align-items: center;
justify-content: center;
color: white;
margin: 0 auto;
}
</style>