第一次提交

This commit is contained in:
caolc
2023-02-15 09:25:11 +08:00
commit ea8e9f9eb7
202 changed files with 38601 additions and 0 deletions

View File

@@ -0,0 +1,219 @@
<template>
<view>
<view class="content text-left padding">
<view class="strong padding-bottom-xs color-333 ">
{{oilSite.oilSiteName}}
</view>
<view class="font-12 color-999">
<text class=" text-cut">{{oilSite.address}}</text>
</view>
</view>
<view class="padding-left padding-right">
<view class="padding-bottom-sm">
油号选择
</view>
<view class="grid col-5 justify-start">
<view class="padding-xs" v-for="(item,index) in oilList" :key="index">
<button class="cu-btn" @tap="oilNameSel(item)" :class="[selected.oilName===item.oilName?'bg-main-oil':'line-gray']">{{item.oilName}}</button>
</view>
</view>
</view>
<view class="padding-top-xs padding-left padding-right">
<text class="strong padding-right font-16">
{{selected.oilName}}
</text>
<text class="padding-right">星油价格:<text class="oil-main-color text-bold">{{selected.xkPrice?selected.xkPrice:selected.lvPrice|numberFilter}}/L</text></text>
<text class="s-rich">市场价:{{selected.standardPrice|numberFilter}}/L</text>
</view>
<view class="padding-left padding-right">
<view class="padding-bottom-sm">
油枪选择
</view>
<view class="grid col-5 justify-start">
<view class="padding-xs" v-for="(item,index) in ColorList" :key="index">
<button @tap="gunIdSel(index)" class="cu-btn" :class="[gunId===index?'bg-main-oil':'line-gray']">{{index+1}}</button>
</view>
</view>
</view>
<view class="solid-top margin-top-sm shadow-warp">
<view class="cu-form-group">
<view class="title">加油升数</view>
<input type="digit" v-model="vol" @input="calcMoney" placeholder="请输入加油升数" name="input" />
<text>{{money.total|numberFilter}}</text>
</view>
<view class="my-cell">
<text class="font-12">星卡优惠金额</text><text class="fr">-{{money.discount|numberFilter}}</text>
</view>
<view class="my-cell">
<text class="font-12">实际支付金额</text><text class="oil-main-color fr">{{money.realPay|numberFilter}}</text>
</view>
</view>
<button class="margin round bg-main-oil" @tap="onConfirm">确定</button>
</view>
</template>
<script>
export default {
props: {
oilList: {
type: Array,
default () {}
}
},
data() {
return {
active: 0,
vol: '',
oliNameList: [1, 2, 9, 10],
ColorList: [1, 2, 9, 10],
gunId: 0,
oilSite: uni.getStorageSync('oilSite'),
selected: {
xkPrice: '',
standardPrice: ''
},
money: {
total: '',
discount: '',
realPay: ''
},
price: 1
}
},
created() {
console.log(this.oilList)
this.initForm()
},
watch: {
oilList: {
handler(newVal, oldVal) {
console.log('深度监听', newVal, oldVal)
this.oilList = newVal
this.initForm()
},
deep: true
},
selected: {
handler(newVal, oldVal) {
console.log('深度监听2323', newVal, oldVal)
this.selected = newVal
if (newVal) {
this.calcMoney()
}
},
deep: true
},
},
methods: {
gunIdSel(index) {
this.gunId = index
},
oilNameSel(item) {
this.selected = item
},
initForm() {
if (this.oilList) {
this.selected = this.oilList[0]
}
},
onConfirm() {
const data5 = {
...this.selected,
vol: this.vol,
oilPrice: this.selected.xkPrice ? this.selected.xkPrice : this.selected.lvPrice,
gunId: this.gunId + 1,
realPay: this.money.realPay
}
console.log('被选中的', data5)
this.$emit('confirmVol', data5)
},
calcMoney(e) {
// var vol;
// vol = e.detail.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');
// this.vol = vol
this.price = this.selected.xkPrice ? this.selected.xkPrice : this.selected.lvPrice
this.money.total = this.vol * this.selected.standardPrice
// this.money.discount = this.money.total - this.vol * (this.selected.standardPrice - this.price)
// this.money.realPay = (this.money.total - this.money.discount).toFixed(2)
this.money.discount = this.vol * (this.selected.standardPrice - this.price)
this.money.realPay = (this.money.total - this.money.discount).toFixed(2)
console.log('总金额', '折扣', '实际支付')
}
},
filters: {
numberFilter(value) {
value = value - 1 + 1
if (value) {
return value.toFixed(2)
} else {
return '0.00'
}
}
}
}
</script>
<style scoped>
.page-content {
background-color: #F1F2F7;
min-height: 100%;
position: relative;
}
.navigation {
position: absolute;
right: 16px;
top: 10px;
}
.icon-self {
width: 1rem;
height: 1rem;
}
.oil-price {
position: relative;
}
.oil-price radio {
position: absolute;
left: 0rem;
top: 10px;
}
.qr-icon {
font-size: 2rem;
}
.pay-desc {
line-height: 2rem;
}
.bottom-pay {
min-height: 100rpx;
width: 750upx;
}
.pay-bar {
width: 750upx;
position: absolute;
bottom: 0;
}
.money-container {
position: relative;
}
.money-position {
position: absolute;
top: 0;
right: 0;
display: block;
border-radius: 0 0 0 100upx;
}
</style>

View File

@@ -0,0 +1,110 @@
<template>
<view class="margin padding bg-gragul-oil radius company-card">
<view class="padding-top padding-bottom-lg flex">
<view class="basis-xl">
<text class="text-white">{{company.companyName}}</text>
<view class="padding-top-xs">
<text class="text-white" @tap="makeCall(company.leaderPhone)">负责人{{company.leaderName}} ({{company.leaderPhone|phoneFilter}})</text>
</view>
</view>
<view class="basis-xs">
<!-- bg-qy -->
<view class="bg-qy">
<image style="width: 100%;" :src="mainURL+'bg-qy.png'" mode="widthFix"></image>
</view>
</view>
</view>
<view class="dashed-top padding-top">
<view class="flex">
<view class="flex-sub text-center" v-show="company.openJoinCompany" @tap="joinqr">
<button class="cu-btn round bg-white text-red text-sm">
<text class="text-lg">
<text class="cuIcon-qr_code padding-right-xs"></text>
</text>
出示二维码
</button>
</view>
<view class="flex-sub text-center" v-show="company.openDirectOil" @tap="oiling">
<button class="cu-btn round bg-white text-red text-sm">
<text class="text-lg">
<text class="cuIcon-addressbook padding-right-xs"></text>
</text>
<!-- <text class="cuIcon-crown padding-right-xs"></text> -->
直接加油
</button>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props:{
company:{
type:Object,
default(){}
}
},
data() {
return {
mainURL: this.global.mainURL,
}
},
methods: {
oiling() {
uni.navigateTo({
url: `/packageQr/pages/partnership/partner-group/partner-group?id=${this.company.companyId}`
})
},
joinqr() {
uni.navigateTo({
url: `/packageQr/pages/partnership/join-qr/join-qr?id=${this.company.companyId}&name=${this.company.companyName}`
})
},
makeCall(number){
uni.makePhoneCall({
phoneNumber:number
})
}
},
filters:{
phoneFilter(value){
if(value){
return value.substring(0, 3) + ' ' + ' **** ' + ' ' + value.substring(7, 11)
}else{
return '暂无手机号'
}
}
}
}
</script>
<style scoped>
.bg-gragul-oil {
background: linear-gradient(-51deg, rgba(255, 0, 0, 0.81), rgba(255, 19, 19, 0.81));
}
.dashed-top::after {
border-color: #fff !important;
}
.company-card {
position: relative;
margin-bottom: 1rem;
}
.bg-qy {
position: absolute;
z-index: 1;
width: 120upx;
height: 120upx;
top: 15rpx;
right: 2.5rem;
}
.cu-btn {
border-radius: 100upx 100upx 100upx 0;
}
</style>

View File

@@ -0,0 +1,67 @@
<template>
<view class="solid-bottom content" @tap="virtualScan(driver.driverId)">
<view class="text-xl">
<text class="cuIcon-deliver text-red padding-sm padding-bottom-0">
</text>
<text class="text-df text-black padding-top-sm">
{{driver.plateNumber?driver.plateNumber:'暂无车牌号'}}
</text>
</view>
<view class="padding-left padding-bottom margin-left">
<view class="bg-white padding-left-xs">
<text class="padding-right-lg text-df">{{driver.userName}} ({{driver.driverId}})</text>{{driver.phone|phoneFilter}}
</view>
</view>
</view>
</template>
<script>
import partnerApi from '@/api/partner.js'
export default {
props: {
driver: {
type: Object,
default () {}
}
},
data() {
return {
mainURL: this.global.mainURL,
loginUser: uni.getStorageSync('loginUser'),
};
},
methods: {
virtualScan(id) {
partnerApi.getQrCode(id).then(res=>{
if(res.code==20000){
uni.setStorageSync('qrCode', res.data)
uni.navigateTo({
url:`/pages/stationDetail/stationDetail`
})
}
})
}
},
filters: {
phoneFilter(value) {
if (value) {
return value.substring(0, 3) + ' ' + ' **** ' + ' ' + value.substring(7, 11)
} else {
return '暂无手机号'
}
}
}
}
</script>
<style scoped>
.cu-tag {
border-radius: 100upx 0 0 100upx;
position: absolute;
right: 0;
top: 30rpx;
}
</style>

View File

@@ -0,0 +1,23 @@
<!-- 下单页面选择某一价格进行支付 -->
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,136 @@
<template>
<view class="padding-top">
<scroll-view scroll-x class=" nav text-center">
<view class="cu-item" v-for="(item,index) in channelList" :class="index==TabCur?'text-red cur':''" :key="item.channelId"
@tap="tabSelect" :data-id="index">
<image class="site-icon margin-right-sm" :src="imgURL+'site-'+item.channelCode+'.png'" mode="widthFix">
</image>
{{item.channelCode|channelCodeFamt}}
<!-- 少了壳牌 -->
</view>
</scroll-view>
<view class="cu-list menu padding-left padding-right">
<view class="cu-item" v-for="(itemx,index) in oilSitePriceDetailsVos" :key="index" v-if="itemx.sitePrice>0">
<text class="cu-tag my-tag line-red text-lg">
</text>
<text class="text-bold text-black text-lg">{{itemx.oilProductCode}}</text>
<text class="text-bold text-red text-lg">{{itemx.sitePrice==0?'-.--':itemx.sitePrice}}/L</text>
<text class="text-delete">{{itemx.oilSitePrice}}/L</text>
<text class="text-xs ">预计每100L节省{{(100*(itemx.oilSitePrice - itemx.sitePrice))|moneyFormat}}</text>
<!-- <text class="text-gray text-delete">$市场价</text>
<text class="text-gray text-sm">
预计每100L节省581元
</text> -->
</view>
</view>
<!-- 油站特色 -->
<view class="bg-gray padding-top-sm ">
<view class="bg-white padding ">
<text>油站特色</text>
<view class="padding-top-sm">
<text class="cu-tag line-yellow margin-right-xs" v-for="(itemy,index) in tagList" :key="index">{{itemy}}</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
channelList: {
type: Array,
default () {}
}
},
data() {
return {
TabCur: 0,
imgURL: this.global.imgURL,
scrollLeft: 0
};
},
computed: {
activeChannelCode() {
if (this.channelList.length && this.channelList[this.TabCur]) {
let channelCode = this.channelList[this.TabCur].channelCode
let secondChannelCode = ''
if (this.channelList[this.TabCur].secondChannelCode) {
secondChannelCode = this.channelList[this.TabCur].secondChannelCode
}
this.$emit('onChangeChannelCode', channelCode, secondChannelCode)
return channelCode
}
},
tagList() {
if (this.channelList.length && this.channelList[this.TabCur].labelTag) {
let labelTag = this.channelList[this.TabCur].labelTag
let tagList = labelTag ? labelTag.split(',') : []
return tagList
}
},
activePay() {
if (this.channelList.length && this.channelList[this.TabCur]) {
let activePay = this.channelList[this.TabCur].activePay
this.$emit('onChangePay', activePay, this.TabCur)
}
},
qrcodePay() {
if (this.channelList.length && this.channelList[this.TabCur]) {
let qrcodePay = this.channelList[this.TabCur].qrcodePay
this.$emit('onChangePayQr', qrcodePay)
}
},
oilSitePriceDetailsVos() {
if (this.channelList[this.TabCur]) {
return this.channelList[this.TabCur].oilSitePriceDetailsVos
}
}
},
methods: {
tabSelect(e) {
this.TabCur = e.currentTarget.dataset.id;
this.scrollLeft = (e.currentTarget.dataset.id - 1) * 60
}
},
filters: {
moneyFormat(value) {
if (value != 'xxx.x') {
return "¥" + (parseInt(value * 100) / 100).toFixed(2)
} else {
return value
}
},
channelCodeFamt(value) {
if (value) {
// 渠道编码 ( XOIL星油 WJY万金油 LV老吕找油网 TY团油 YDJY一点加油壳牌)
switch (value) {
case 'XOIL':
return '星油'
case 'WJY':
return '万金油'
case 'LV':
return '老吕(找油网)'
case 'TY':
return '团油'
case 'YDJY':
return '一点加油(壳牌)'
}
}
}
}
}
</script>
<style scoped>
.site-icon {
width: 2rem;
vertical-align: middle;
}
.my-tag {
padding: 0 12rpx;
}
</style>

View File

@@ -0,0 +1,96 @@
<!-- 三方支付凭证团油上汽联名卡 -->
<template>
<view class="text-right">
<text class="text-red" @tap="onShowThirdResult">查看三方支付凭证</text>
<view class="cu-modal" :class="showThirdResult?'show':''">
<view class="cu-dialog overflow-unset">
<view class="cu-bar bg-white justify-end">
<view class="content">支付凭证</view>
<view class="action" @tap="hideModal('third')">
<text class="cuIcon-close text-red"></text>
</view>
</view>
<view class="padding-xl bg-white">
<view class="" v-if="payData.otherOrderStatus==1">
<view class="bg-img flex align-center">
<image :src="payData.tysqImgUrl" mode="widthFix"></image>
</view>
<view class="">
<view class="flex">
<view class="flex-sub">
卡号
</view>
<view class="flex-treble text-right">
{{payData.tysqCardNo}}
</view>
</view>
<view class="flex">
<view class="flex-sub">
支付金额
</view>
<view class="flex-treble text-right">
{{payData.tysqContent}}
</view>
</view>
<view class="flex">
<view class="flex-sub">
支付时间
</view>
<view class="flex-treble text-right">
{{payData.tysqPaytime}}
</view>
</view>
</view>
</view>
<view v-else-if="payData.otherOrderStatus==-1" class="">
<text >
{{fail}}
</text>
</view>
<view v-else class="">
<text >
{{waitting}}
</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
showThirdResult: {
type: Boolean,
default: false
},
payData: {
type: Object,
default(){}
},
},
data() {
return {
imgURL: this.global.imgURL,
waitting:'正在等待团油的返回结果',
fail:'通知失败'
}
},
methods: {
onShowThirdResult() {
console.log('子组件下手onShowThirdResult')
this.$emit('onShowThirdResult')
},
hideModal(name) {
this.$emit('hideModal', name)
}
}
}
</script>
<style>
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,240 @@
<template xlang="wxml" minapp="mpvue">
<view class="tki-qrcode">
<image src="../../../../static/img/qr-bg.png" mode="" class="bgs"></image>
<!-- #ifndef MP-ALIPAY -->
<canvas class="tki-qrcode-canvas" :canvas-id="cid" :style="{width:cpSize+'px',height:cpSize+'px'}" />
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<canvas :id="cid" :width="cpSize" :height="cpSize" class="tki-qrcode-canvas" />
<!-- #endif -->
<image v-show="show" :src="result" class="erweima" :style="{width:cpSize+'px',height:cpSize+'px'}" />
</view>
</template>
<script>
import QRCode from "./qrcode.js"
import indexBackgroundImage from "@/static/img/qr-bg.png"
let qrcode
export default {
name: "tki-qrcode",
props: {
cid: {
type: String,
default: 'tki-qrcode-canvas'
},
size: {
type: Number,
default: 200
},
unit: {
type: String,
default: 'upx'
},
show: {
type: Boolean,
default: true
},
val: {
type: String,
default: ''
},
background: {
type: String,
default: '#ffffff'
},
foreground: {
type: String,
default: '#000000'
},
pdground: {
type: String,
default: '#000000'
},
icon: {
type: String,
default: ''
},
iconSize: {
type: Number,
default: 40
},
lv: {
type: Number,
default: 3
},
onval: {
type: Boolean,
default: false
},
loadMake: {
type: Boolean,
default: false
},
usingComponents: {
type: Boolean,
default: true
},
showLoading: {
type: Boolean,
default: true
},
loadingText: {
type: String,
default: '二维码生成中'
},
},
data() {
return {
result: '',
}
},
methods: {
_makeCode() {
let that = this
if (!this._empty(this.val)) {
qrcode = new QRCode({
context: that, // 上下文环境
canvasId:that.cid, // canvas-id
usingComponents: that.usingComponents, // 是否是自定义组件
showLoading: that.showLoading, // 是否显示loading
loadingText: that.loadingText, // loading文字
text: that.val, // 生成内容
size: that.cpSize, // 二维码大小
background: that.background, // 背景色
foreground: that.foreground, // 前景色
pdground: that.pdground, // 定位角点颜色
correctLevel: that.lv, // 容错级别
image: that.icon, // 二维码图标
imageSize: that.iconSize,// 二维码图标大小
cbResult: function (res) { // 生成二维码的回调
that._result(res)
},
});
} else {
uni.showToast({
title: '二维码内容不能为空',
icon: 'none',
duration: 2000
});
}
},
_clearCode() {
this._result('')
qrcode.clear()
},
_saveCode() {
let that = this;
if (this.result != "") {
uni.saveImageToPhotosAlbum({
filePath: that.result,
success: function () {
uni.showToast({
title: '二维码保存成功',
icon: 'success',
duration: 2000
});
}
});
}
},
_result(res) {
this.result = res;
this.$emit('result', res)
},
_empty(v) {
let tp = typeof v,
rt = false;
if (tp == "number" && String(v) == "") {
rt = true
} else if (tp == "undefined") {
rt = true
} else if (tp == "object") {
if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
} else if (tp == "string") {
if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
} else if (tp == "function") {
rt = false
}
return rt
}
},
watch: {
size: function (n, o) {
if (n != o && !this._empty(n)) {
this.cSize = n
if (!this._empty(this.val)) {
setTimeout(() => {
this._makeCode()
}, 100);
}
}
},
val: function (n, o) {
if (this.onval) {
if (n != o && !this._empty(n)) {
setTimeout(() => {
this._makeCode()
}, 0);
}
}
}
},
computed: {
cpSize() {
if(this.unit == "upx"){
return uni.upx2px(this.size)
}else{
return this.size
}
}
},
mounted: function () {
if (this.loadMake) {
if (!this._empty(this.val)) {
setTimeout(() => {
this._makeCode()
}, 0);
}
}
},
}
</script>
<style>
.tki-qrcode{
position: relative;
}
.erweima{
padding: 2%;
background: #ffff;
border:1px solid #f1f1f1;
}
.bgs{
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
width: 100%;
height: 100%;
max-width: 100%;
z-index: 0;
background-color: #ffffff;
padding: 2%;
}
.tki-qrcode {
position: relative;
padding:8%;
background-image:indexBackgroundImage ;
background-repeat: no-repeat;
}
.tki-qrcode-canvas {
position: fixed;
top: -99999upx;
left: -99999upx;
z-index: -99999;
}
image{
}
</style>