oil-station/gasStation-uni/pages/refuel/refuel.vue

714 lines
17 KiB
Vue
Raw Normal View History

2023-11-27 09:24:16 +08:00
<template>
<view class="content">
<view class="container">
<view class="my-header">
<view class="my-text">一键加油</view>
</view>
<view class="top">
<view class="top-box">
2024-01-03 18:40:21 +08:00
<view class="dis" style="width: 78%;">
2023-11-27 09:24:16 +08:00
<view class="top-img">
2024-01-23 09:26:10 +08:00
<image v-if="!store.logo" src="../../static/logo.png" mode="aspectFit"></image>
2024-01-19 16:07:11 +08:00
<image v-else :src="baseUrl+store.logo" mode="aspectFit"></image>
2023-11-27 09:24:16 +08:00
</view>
2023-12-01 16:04:45 +08:00
<view style="width: 80%;">
<view class="top-title">{{store.name}}{{store.description ? "("+store.description+")" : ""}}
</view><!--九州加油站总站-->
2023-11-28 18:33:35 +08:00
<view class="top-hui">{{store.address}}</view><!--平安大道东200米-->
2024-01-03 18:40:21 +08:00
<view class="top-hong">{{oilPrice}}/{{oilUnit ? oilUnit : "L"}}</view>
2023-11-27 09:24:16 +08:00
</view>
</view>
2024-01-03 18:40:21 +08:00
<view class="" @click="goRefuel" style="width: 22%;font-size: 14px;">
2023-11-27 09:24:16 +08:00
<view class="bulu">切换站点 <uni-icons type="right" color="#304fff" size="16"></uni-icons> </view>
</view>
<!-- <view class="bulu-icon">
<view class=""></view>
<view class="">比国标降 0.22 </view>
</view> -->
</view>
<view class="fa-box">
<view class="fa-title">选择油号 <text class="top-hui"> 请务必与员工确认类型</text> </view>
<view class="wrap-box">
2023-11-30 18:30:46 +08:00
<!-- <view class="box-oil" :class=" {'xz' :hindex == index }" @click="getHIndex(index)"
2023-11-27 09:24:16 +08:00
v-for="(item,index) in 4" :key="index">
<text>92#</text>
2023-11-30 18:30:46 +08:00
</view> -->
2023-12-01 16:04:45 +08:00
<view class="box-oil" v-for="(item,index) in oilNumberList" :key="index"
:class=" {'xz' :hindex == index }" @click="getHIndex(index,item)">
2024-01-18 15:01:26 +08:00
<text>{{item.oilName}}</text>
2023-11-27 09:24:16 +08:00
</view>
</view>
</view>
<view class="fa-box">
<view class="fa-title">选择油枪 <text class="top-hui"> 请务必与员工确认枪号</text> </view>
<view class="wrap-box">
2023-11-30 18:30:46 +08:00
<!-- <view class="box-oil" :class=" {'xz' :qindex == index }" @click="getQIndex(index)"
2023-11-27 09:24:16 +08:00
v-for="(item,index) in 8" :key="index">
<text>{{index}}号枪</text>
2023-11-30 18:30:46 +08:00
</view> -->
<view class="box-oil" :class=" {'xz' :qindex == index }"
2023-11-30 18:30:46 +08:00
v-for="(item,index) in oilGunList" :key="index"
2023-12-01 15:40:43 +08:00
@click="getQIndex(index,item)">
2023-11-30 18:30:46 +08:00
<text>{{item.gunName}}</text>
2023-11-27 09:24:16 +08:00
</view>
</view>
</view>
<view class="fa-box">
<view class="fa-title">请输入加油金额</view>
2024-01-06 15:47:07 +08:00
<view class="inputkuang" @click="openKey">
2023-11-27 09:24:16 +08:00
<view class="sbox"></view>
<view class="sbox" style="text-align: center;font-weight: bold;">{{value}}</view>
2023-12-09 15:31:46 +08:00
<view class="sbox-hui">{{liters}}L</view>
2023-11-27 09:24:16 +08:00
</view>
2023-11-28 18:33:35 +08:00
<view class="wrap-box">
<view class="box-oil1" :class=" {'xz' :aindex == index }" @click="getAIndex(index,item)"
v-for="(item,index) in amountList" :key="index">
<text>{{item}}</text>
</view>
</view>
2023-11-27 09:24:16 +08:00
</view>
2023-12-01 16:26:25 +08:00
<view class="anniu" @click="submitAmount">
2023-11-27 09:24:16 +08:00
<text>立即加油</text>
</view>
</view>
2024-01-06 15:47:07 +08:00
<!-- <u-keyboard ref="uKeyboard" :tips="value" mode="number" @cancel="show = false" @confirm="submitAmount"
@change="valChange" @backspace="backspace" v-model="pic" :show="show"></u-keyboard> -->
<view style="margin-top: 50px;">
<uni-popup ref="popup1" type="bottom" background-color="white" mask-background-color="rgba(0,0,0,0.0)">
<keyboard :pApplt="appltType" @isPay="submitAmount" @amount="changeVal" @backVal="backspaceVal">
</keyboard>
</uni-popup>
</view>
2023-12-01 16:04:45 +08:00
2023-11-28 18:33:35 +08:00
<view>
<uni-popup ref="popup" type="bottom">
<view style="background-color: #f4f5f6;width: 100%;height: 55vh;">
<view style="display: flex;justify-content: space-between;height: 50px;line-height: 50px">
<view style="font-size: 18px;margin-left: 40%;">请选择员工</view>
<uni-icons type="closeempty" size="30" @click="closeStaff"></uni-icons>
</view>
<view class="wrap-box1" style="margin-left: 5%;">
2023-11-30 18:30:46 +08:00
<!-- <view class="box-oil2" :class=" {'xz' :sindex == index }" @click="getSIndex(index)"
2023-11-28 18:33:35 +08:00
v-for="(item,index) in 19" :key="index">
<text>{{index}}员工</text>
2023-11-30 18:30:46 +08:00
</view> -->
<view class="box-oil2" :class=" {'xz' :sindex == index }"
2023-11-30 18:30:46 +08:00
v-for="(item,index) in staffList" :key="index"
2023-12-01 17:57:07 +08:00
@click="getSIndex(index,item.id)">
2023-12-27 18:44:56 +08:00
<text>{{item.realName}}</text>
2023-11-28 18:33:35 +08:00
</view>
</view>
<tabbar></tabbar>
</view>
</uni-popup>
</view>
2023-12-01 16:04:45 +08:00
2023-11-27 09:24:16 +08:00
<tabbar></tabbar>
</view>
</view>
</template>
<script>
import tabbar from "../../components/tabbar/tabbar.vue"
2023-11-30 18:30:46 +08:00
import config from '@/config'
import request from '../../utils/request'
2023-11-27 09:24:16 +08:00
export default {
data() {
return {
2024-01-06 15:47:07 +08:00
appltType:uni.getStorageSync("appltType"),
2023-11-27 09:24:16 +08:00
value: '',
2024-01-19 14:54:59 +08:00
liters:0,
2023-11-27 09:24:16 +08:00
show: false,
pic: 0,
hindex: 0,
2024-01-04 18:44:52 +08:00
qindex: 0,
2023-12-01 15:40:43 +08:00
aindex: null,
sindex: null,
2023-11-28 18:33:35 +08:00
// 店铺信息
2023-12-01 16:59:31 +08:00
store:{
name:"测试油站",
description:"济南分店",
address:"济南槐荫区"
},
2023-11-28 18:33:35 +08:00
// 店铺福利信息
welfare:[],
// 距离信息
distance: "",
// 当前店铺id
storeId:"",
// 油号列表信息
oilNumberList:[],
// 油枪列表信息
oilGunList:[],
2023-11-29 16:26:19 +08:00
// 员工列表信息
staffList: [],
// 加油金额列表
amountList:[100,200,300],
// url信息
baseUrl: this.$baseUrl,
2023-11-30 18:30:46 +08:00
// 油价
oilPrice:0,
// 油品单位
oilUnit:"",
// 油品订单信息
oilOrder:{
storeId:"",
couponId:"",
commissionAmount:0,
staffId:"",
terminal:"applet",
oils:"",
oilGunNum:"",
oilNum:"",
orderAmount:0,
discountAmount:0,
payAmount:0,
2023-12-29 15:27:06 +08:00
payType:uni.getStorageSync("appltType"),
2023-11-30 18:30:46 +08:00
},
2023-11-27 09:24:16 +08:00
}
},
components: {
tabbar
},
2023-12-18 18:44:02 +08:00
onLoad(query) {
2024-01-22 14:25:45 +08:00
if (uni.getStorageSync("appltType") == "WECHAT"){
const q = decodeURIComponent(query.q) // 获取到二维码原始链接内容
if (query.q) {
let str = q.split("?")[1];
let storeId = "19";
let staffId = "";
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.staffId = uni.getStorageSync("inviteStaffId")
this.getStore(uni.getStorageSync("storeId"));
}
}else{
if (uni.getStorageSync("storeId")){
this.getStore(uni.getStorageSync("storeId"));
2024-01-05 18:27:59 +08:00
}
2024-01-22 14:25:45 +08:00
}
2024-01-05 18:27:59 +08:00
2023-12-18 18:44:02 +08:00
},
2023-11-28 18:33:35 +08:00
onShow() {
2023-12-01 15:40:43 +08:00
// this.isExistStoreId();
2023-12-29 16:52:08 +08:00
this.getStore(uni.getStorageSync("storeId"));
// this.getStore(0);
2023-11-28 18:33:35 +08:00
},
2023-11-27 09:24:16 +08:00
methods: {
2024-01-06 15:47:07 +08:00
// 打开数字键盘
openKey() {
this.show = true
this.$refs.popup1.open('bottom')
},
2023-11-29 16:26:19 +08:00
isExistStoreId(){
2023-12-01 15:40:43 +08:00
if (uni.getStorageSync("storeId") != ""){
this.getStore(uni.getStorageSync("storeId"));
2023-11-29 16:26:19 +08:00
}else{
this.getAddress();
}
},
// 获取门店信息
getStore(id){
2024-01-06 10:02:09 +08:00
// uni.showToast({
// title:333
// })
2023-11-29 16:26:19 +08:00
let _this = this;
2023-11-30 18:30:46 +08:00
request({
url: "business/storeInformation/store/queryStoreById",
method: 'post',
2023-11-29 16:26:19 +08:00
data:{"storeId":id},
2023-11-30 18:30:46 +08:00
}).then((res)=>{
_this.getOilNumber(id);
_this.getStaffList(id)
_this.store = res.data
2023-12-01 15:40:43 +08:00
_this.storeId = res.data.id;
2023-11-30 18:30:46 +08:00
let welfare = res.data.welfare
2024-01-05 18:27:59 +08:00
if (welfare) {
2023-11-30 18:30:46 +08:00
if (welfare.includes(",")) {
_this.welfare = res.data.welfare.split(",")
} else {
_this.welfare.push(res.data.welfare)
2023-11-29 16:26:19 +08:00
}
}
2024-01-05 18:27:59 +08:00
}).catch(err => {
uni.showLoading({
title:JSON.stringify(err)+222
})
2023-11-29 16:26:19 +08:00
})
},
2023-11-28 18:33:35 +08:00
// 获取当前位置
getAddress(){
let _this = this;
uni.getLocation({
// 谷歌使用wgs84 其他使用gcj02
type: 'gcj02', // 使用国测局坐标系
success: function(res) {
// console.log('经度: ' + res.longitude);
// console.log('纬度: ' + res.latitude);
2023-11-30 18:30:46 +08:00
request({
url: "business/storeInformation/store/recentlyStore",
method: 'post',
2023-11-28 18:33:35 +08:00
data: {
"lon": res.longitude,
"lat": res.latitude
},
2023-11-30 18:30:46 +08:00
}).then((response)=>{
_this.distance = (response.data.distance).toFixed(1);
_this.store = response.data.store;
_this.storeId = response.data.store.id;
_this.getOilNumber(_this.storeId);
_this.getStaffList(_this.storeId)
let welfare = response.data.store.welfare;
if (welfare != undefined && welfare!=null && welfare!=""){
if (welfare.includes(",")){
_this.welfare = response.data.store.welfare.split(",");
}else {
_this.welfare.push(response.data.store.welfare);
}
2023-11-28 18:33:35 +08:00
}
})
},
fail: function(err) {
2023-11-30 18:30:46 +08:00
_this.getStore(0);
2023-11-28 18:33:35 +08:00
}
});
},
// 获取当前店铺油号信息
getOilNumber(storeId){
let _this = this;
2023-11-30 18:30:46 +08:00
request({
2024-01-18 15:01:26 +08:00
// url: "business/petrolStationManagement/oilNumber/getOilNumberName/" + storeId,
url: "business/petrolStationManagement/oilGun/selectByNumber/" + storeId,
2023-11-30 18:30:46 +08:00
method: 'get',
}).then((res)=>{
_this.oilNumberList = res.data;
2024-01-18 15:01:26 +08:00
if (res.data){
// _this.getOilGun(res.data[0].numberId);
2024-01-18 18:15:24 +08:00
_this.oilPrice = res.data[0].oilPrice
2023-12-01 15:40:43 +08:00
_this.oilUnit = res.data[0].unit
2024-01-18 15:01:26 +08:00
_this.oilOrder.oils = res.data[0].oilNameId
if (res.data[0].oilGunList){
_this.oilGunList = res.data[0].oilGunList
_this.oilOrder.oilGunNum = res.data[0].oilGunList[0].id
uni.setStorageSync("tankId",res.data[0].oilGunList[0].tankId)
}
2023-12-01 15:40:43 +08:00
}
2023-11-28 18:33:35 +08:00
})
},
// 获取当前店铺油号对应的油枪信息
getOilGun(numberId){
2023-11-29 16:26:19 +08:00
let _this = this;
2023-11-30 18:30:46 +08:00
request({
url: "business/petrolStationManagement/oilGun/queryGunList/" + numberId,
method: 'get',
}).then((res)=>{
_this.oilGunList = res.data
2024-01-13 18:01:23 +08:00
_this.oilOrder.oilGunNum = res.data[0].id
2023-11-29 16:26:19 +08:00
})
},
2023-12-01 15:40:43 +08:00
// 获取当前店铺员工信息列表
2023-11-29 16:26:19 +08:00
getStaffList(storeId){
let _this = this;
2023-11-30 18:30:46 +08:00
request({
url: "business/member/staff/queryStaffList/" + storeId,
method: 'get',
}).then((res)=>{
_this.staffList = res.data
2023-11-28 18:33:35 +08:00
})
},
2023-12-01 15:40:43 +08:00
// 跳转订单详情页,并支付
getSIndex(index,id) {
2023-11-28 18:33:35 +08:00
this.sindex = index
2024-01-22 14:25:45 +08:00
// 校验油罐内油量是否足够
request({
url: "business/petrolStationManagement/oilTank/" + uni.getStorageSync('tankId'),
method: 'get',
}).then((res)=>{
if (res.data.storedQuantity-this.liters<0){
uni.showToast({
title:"所加油的升数大于油罐内的升数,请重新选择加油升数",
icon:"none"
})
return;
}else {
this.toPayment(id)
}
})
2023-12-18 18:44:02 +08:00
},
toPayment(id){
2023-12-01 15:40:43 +08:00
this.oilOrder.orderAmount = this.value
this.oilOrder.storeId = this.storeId
this.oilOrder.staffId = id
2024-01-20 11:48:52 +08:00
this.oilOrder.oilNum = (this.value/this.oilPrice).toFixed(2)
2024-01-17 14:14:19 +08:00
this.oilOrder.tankId = uni.getStorageSync("tankId")
2023-12-01 15:40:43 +08:00
let _this = this;
2023-11-30 18:30:46 +08:00
// 添加油品订单信息
2023-12-01 15:40:43 +08:00
request({
url: "business/oilOrder/addOilOrder",
method: 'post',
data: _this.oilOrder,
}).then((res)=>{
uni.navigateTo({
url: '/pagesRefuel/orderDetail/index?orderNo=' + res.data,
})
2023-11-30 18:30:46 +08:00
})
2023-11-28 18:33:35 +08:00
},
2023-12-01 15:40:43 +08:00
// 选择加油金额
2023-11-28 18:33:35 +08:00
getAIndex(index,amount) {
this.value = amount+""
this.aindex = index
2024-01-06 15:47:07 +08:00
this.liters = (amount/this.oilPrice).toFixed(2)
2023-11-28 18:33:35 +08:00
},
2023-12-01 15:40:43 +08:00
// 选择油品信息
2023-11-30 18:30:46 +08:00
getHIndex(index,data) {
2023-11-27 09:24:16 +08:00
this.hindex = index
2024-01-06 15:47:07 +08:00
// console.log(data)
2024-01-18 15:01:26 +08:00
// this.getOilGun(data.numberId)
this.oilGunList = data.oilGunList
this.oilOrder.oilGunNum = data.oilGunList[0].id
2024-01-18 18:15:24 +08:00
this.oilPrice = data.oilPrice
2023-11-30 18:30:46 +08:00
this.oilUnit = data.unit
2024-01-18 15:01:26 +08:00
this.oilOrder.oils = data.oilNameId
uni.setStorageSync("tankId",data.oilGunList[0].tankId)
2023-11-27 09:24:16 +08:00
},
2023-12-01 15:40:43 +08:00
// 选择油枪信息
getQIndex(index,data) {
2023-11-27 09:24:16 +08:00
this.qindex = index
2024-01-13 18:01:23 +08:00
this.oilOrder.oilGunNum = data.id
2024-01-18 15:01:26 +08:00
uni.setStorageSync("tankId",data.tankId)
2023-11-27 09:24:16 +08:00
},
2023-11-28 18:33:35 +08:00
goRefuel() {
2023-11-27 09:24:16 +08:00
uni.navigateTo({
url: '/pagesRefuel/pagesRefuel/index'
})
},
2023-11-28 18:33:35 +08:00
change(){
2023-12-01 16:04:45 +08:00
2023-11-28 18:33:35 +08:00
},
// 关闭弹窗
closeStaff(){
this.$refs.popup.close()
},
// 数字键盘确定按钮
submitAmount(){
2024-01-22 09:08:20 +08:00
// 校验油罐内油量是否足够
request({
url: "business/petrolStationManagement/oilTank/" + uni.getStorageSync('tankId'),
method: 'get',
}).then((res)=>{
if (res.data.storedQuantity-this.liters<0){
2023-12-01 16:26:25 +08:00
uni.showToast({
2024-01-22 09:08:20 +08:00
title:"所加油的升数大于油罐内的升数,请重新选择加油升数",
icon:"none"
2023-12-01 16:26:25 +08:00
})
2024-01-22 09:08:20 +08:00
return;
}else {
if (this.value!="" && this.qindex!=null){
this.show = false
if (uni.getStorageSync("inviteStaffId")){
this.toPayment(uni.getStorageSync("inviteStaffId"))
}else{
this.$refs.popup.open('bottom')
}
}else{
if (this.value=="") {
uni.showToast({
title:"请输入加油金额",
icon:"error"
})
}else{
uni.showToast({
title:"请选择油枪号",
icon:"error"
})
}
}
2023-12-01 16:26:25 +08:00
}
2024-01-22 09:08:20 +08:00
})
2023-11-28 18:33:35 +08:00
},
2024-01-06 15:47:07 +08:00
changeVal(val) {
this.value = val;
this.liters = (this.value/this.oilPrice).toFixed(2)
},
backspaceVal(val) {
this.value = val;
if (val == "") {
this.amount = 0
this.liters = 0
} else {
this.amount = val;
this.liters = (this.value/this.oilPrice).toFixed(2)
}
},
2023-11-27 09:24:16 +08:00
valChange(val) {
// 将每次按键的值拼接到value变量中注意+=写法
2023-12-18 18:44:02 +08:00
uni.vibrateShort({
success: function () {}
});
let index = this.value.indexOf(".")
if(index!=-1){
if ((this.value.length-index)>=3){
return;
}
}else{
if (this.value.length>=7 && val!="."){
return;
}
}
this.value += val;
this.liters = (this.value/this.oilPrice).toFixed(2)
// console.log(this.value);
2023-11-27 09:24:16 +08:00
},
// 退格键被点击
backspace() {
2023-12-18 18:44:02 +08:00
uni.vibrateShort({
success: function () {}
});
2023-11-27 09:24:16 +08:00
// 删除value的最后一个字符
2023-12-18 18:44:02 +08:00
if (this.value.length) {
this.value = this.value.substr(0, this.value.length - 1);
this.liters = (this.value/this.oilPrice).toFixed(2)
}
// console.log(this.value);
2023-11-27 09:24:16 +08:00
}
}
}
</script>
<style scoped lang="scss">
.content {
background: #ffffff;
}
.container {
width: 100%;
height: 100vh;
box-sizing: border-box;
padding-top: 88px;
}
.my-header {
width: 100%;
height: 88px;
background: #304fff;
display: flex;
align-items: center;
justify-content: center;
color: white;
.my-text {
margin-top: 40px
}
position: fixed;
top: 0px;
}
.top {
width: 100%;
height: 200px;
background-image: linear-gradient(180deg, #304fff, #ffffff);
box-sizing: border-box;
padding: 1px;
}
.top-box {
width: 90%;
2023-11-30 18:30:46 +08:00
height: 110px;
2023-11-27 09:24:16 +08:00
background-color: #ffffff;
border-radius: 8px;
margin: 20px auto;
box-sizing: border-box;
padding: 10px;
display: flex;
justify-content: space-between;
margin-top: 60px;
}
.top-title {
font-size: 16px;
}
.top-img {
width: 46px;
height: 46px;
background-color: #304fff;
border-radius: 6px;
overflow: hidden;
margin-right: 10px;
image {
width: 100%;
height: 100%;
}
}
.top-hui {
font-size: 14px;
margin: 5px 0px;
color: #999999;
2023-12-01 16:04:45 +08:00
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
2023-11-27 09:24:16 +08:00
}
.top-hong {
font-size: 16px;
font-weight: bold;
color: #ff0000;
}
.dis {
display: flex;
}
.bulu {
color: #304fff;
}
.bulu-icon {
width: 120px;
height: 20px;
font-size: 12px;
color: #304fff;
border: 1px solid #304fff;
display: flex;
justify-content: center;
align-items: center;
}
.wrap-box {
width: 100%;
display: flex;
flex-wrap: wrap;
}
2023-11-28 18:33:35 +08:00
.wrap-box1 {
width: 100%;
display: flex;
flex-wrap: wrap;
height: 77%;
overflow-y: scroll;
}
2023-11-27 09:24:16 +08:00
.box-oil {
width: 23%;
display: flex;
align-items: center;
justify-content: center;
color: #666666;
background: #f7f7f7;
margin-right: 5px;
margin-top: 5px;
padding: 12px 0px;
border-radius: 6px;
}
2023-11-28 18:33:35 +08:00
.box-oil1 {
width: 29%;
display: flex;
align-items: center;
justify-content: center;
color: #666666;
background: #f7f7f7;
margin-right: 13px;
margin-top: 5px;
padding: 12px 0px;
border-radius: 6px;
}
.box-oil2 {
width: 28%;
2023-12-27 18:44:56 +08:00
height: 25px;
line-height: 25px;
2023-11-28 18:33:35 +08:00
display: flex;
align-items: center;
justify-content: center;
color: #666666;
background: white;
margin-right: 13px;
margin-top: 10px;
padding: 12px 0px;
border-radius: 6px;
}
2023-11-27 09:24:16 +08:00
.fa-box {
width: 90%;
margin: 20px auto;
}
.fa-title {
font-size: 18px;
margin: 10px 0px;
}
.xz {
color: #ffffff;
background: #1678ff;
}
.anniu {
width: 90%;
margin: 10px auto;
height: 40px;
background: #1678ff;
color: white;
display: flex;
align-items: center;
justify-content: center;
border-radius: 6px;
}
.inputkuang {
width: 100%;
height: 40px;
border: 1px solid #304fff;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 0px 10px;
}
.sbox {
width: 33%;
}
.sbox-hui {
width: 33%;
text-align: right;
color: #999999;
}
</style>