shangfutong-ui/jeepay-ui-uapp-face/pages/aliIndex/index.vue

404 lines
9.9 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="index-wrapper">
<poster id="ali-poster" posid="idle_pos" :audible="true" style="width: 100%; height: 88vh"
onSuccess="onDisplaySuccess" onFail="onDisplayFail" onChange="onPosterChange"
v-if="!vdata.userInfo.realname || !vdata.adList.length" />
<JeepayBanner v-else :list="vdata.adList" :interval="vdata.changeTime" />
<!-- <view style="width: 100%; height: 88vh"></view> -->
<view class="idnex-wrapper">
<view class="left">
<view class="tips-title">请等待商家发起收款</view>
<view class="store-name">付款给:{{ vdata.userInfo.realname }}</view>
</view>
<view class="right">
<view class="more-but log-in" hover-class="hover-more" hover-stay-time="50" v-if="!vdata.userInfo.realname"
@tap="toLogin">请登录</view>
</view>
</view>
</view>
<uni-drawer ref="refShowRight" mode="right" @change="change">
<view class="list-wrapper" :style="{ '--text-color': calcWorkState().value == 1 ? ' #108ee9' : 'tomato' }">
<blocke v-for="(v, i) in vdata.navList" :key="i">
<view class="list-item" hover-class="hover-more" hover-stay-time="50" @tap="tapNav(v)"
v-if="v.value.includes(vdata.modelType)">
{{ v.title }}
<view class="list-item-right">
<view class="face-model" v-if="v.title == '切换模式'">当前模式{{ vdata.modelType == 'pos' ? 'POS' : '独立收银' }}模式
</view>
<image src="/static/right.svg" mode="scaleToFill" v-if="i != vdata.navList.length - 1" />
<image src="/static/logout.svg" mode="scaleToFill" v-else />
</view>
</view>
</blocke>
</view>
</uni-drawer>
<SwitchModelCard ref="refSwitch" @makClose="open" v-model:value="vdata.modelType" />
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { computed, onMounted, reactive, ref } from 'vue'
import { req, $appPay, $workRecords, $userInfo, API_URL_PAY_ORDER_LIST, $adBannerList } from '@/http/apiManager'
import storageManage from '@/commons/utils/storageManage.js'
// 生命周期 进入页面
onLoad(() => {
if (storageManage.token()) {
getAd()
}
})
// 初始化 modelType
if (!storageManage.faceModel()) {
storageManage.faceModel('cashier')
}
const refShowRight = ref(null)
const refSwitch = ref(null)
const vdata = reactive({
userInfo: storageManage.userInfo(), //取出用户信息
navList: [
{ title: '订单', url: '/pages/order/order', value: 'cashier' },
{ title: '统计', url: '/pages/stat/stat', value: 'cashier' },
{ title: `${calcWorkState().value == 1 ? '上班' : '下班'}打卡`, fun: working, value: 'cashier' },
{ title: '交班', url: '/pages/handover/handover', value: 'cashier' },
{ title: '切换模式', fun: switchModel, value: 'cashierpos' },
{ title: '系统设置', fun: () => { my.ix.startApp({ appName: 'settings' }) }, value: 'cashierpos' },
{ title: '刷新广告数据', fun: getAd, value: 'cashierpos' },
{ title: '退出登录', fun: loginOut, value: 'cashier' }
],
modelType: storageManage.faceModel(), //取出本地存储的模式类型
adList:[]
})
my.ix.onKeyEventChange(r => {
// console.log('r', r)
const timeStamp = new Date().getTime()
switch (r.keyCode) {
case 134:
if (!storageManage.token()) return uni.$J.showErrorToast('请先登录')
if (vdata.isShow) return my.ix.startApp({ appName: 'settings' })
open()
break
case 132:
if (storageManage.faceModel() && storageManage.faceModel() == 'pos') return posCashier()
break
case 131: //收款按键
if (storageManage.faceModel() && storageManage.faceModel() == 'pos') return posCashier()
my.ix
.startApp({
appId: '2021002172674746',
appName: 'cashier',
bizNo: timeStamp,
totalAmount: r.amount,
showScanPayResult: true,
scanLoadingTimeout: '10'
})
.then(res => {
my.ix.writeHID({
protocol: 'barcode',
value: res.barCode,
success: r => {
console.log('r', r)
},
fail: err => {
console.log('err', err)
}
})
$appPay(res.totalAmount, res.barCode).then(r => {
findOrderState(r.bizData)
console.log('支付后结果', r)
//扫码付支付成功主动调起结果页
if (res.codeType == 'C' && r.bizData.orderState == 2) {
my.ix.startApp({
appName: 'scanPayResult',
bizNo: timeStamp,
totalAmount: res.totalAmount,
success: r => {
console.log(r)
}
})
}
})
})
.catch(err => {
console.log('err', err)
})
break
case 133:
close()
break
}
})
// 展示成功回调
const onDisplaySuccess = () => {
console.log('poster display success')
}
// 展示失败回调
const onDisplayFail = e => {
console.log('poster display fail, error = ' + e.detail.error)
}
// 广告可用性变化回调
const onPosterChange = e => {
console.log('poster availability changed, now has poster = ' + e.detail.hasPoster)
}
// 打开抽屉
const open = () => {
refShowRight.value.open()
}
// 关闭抽屉
const close = () => {
refShowRight.value.close()
}
// pos 收银模式
function posCashier() {
const timeStamp = new Date().getTime()
my.ix
.startApp({
appId: '2021002172674746',
appName: 'cashier',
bizNo: timeStamp,
showScanPayResult: true,
scanLoadingTimeout: '10'
})
.then(res => {
my.ix.writeHID({
protocol: 'barcode',
value: res.barCode,
success: r => {
console.log('r', r)
},
fail: err => {
console.log('err', err)
}
})
})
}
// 退出等领域
function loginOut() {
uni.showModal({
title: '提示',
content: '是否确认退出登录',
showCancel: true,
success: ({ confirm, cancel }) => {
if (confirm) {
storageManage.cleanByLogout()
uni.reLaunch({
url: '/pages/login/login'
})
}
}
})
}
// 打卡函数
function working() {
uni.showModal({
title: `提示:${calcWorkState().value == 1 ? '上班' : '下班'}打卡`,
content: '是否确认打卡?',
showCancel: true,
success: ({ confirm, cancel }) => {
if (confirm) {
$workRecords(calcWorkState().value).then(res => {
uni.showToast({
title: '打卡成功',
icon: 'success',
mask: true
})
// 重新请求用户信息
$userInfo().then(({ bizData }) => {
// 更新用户数据
storageManage.userInfo(bizData)
// 更新用户数据
vdata.userInfo = bizData
vdata.navList[2].title = (calcWorkState().value == 1 ? '上班' : '下班') + '打卡'
})
})
}
}
})
}
// 切换模式函数、
function switchModel() {
refShowRight.value.close()
refSwitch.value.open()
}
/****
* @param {v} Object url 跳转地址 fun 执行函数
* */
const tapNav = v => {
if (v.url)
return uni.navigateTo({
url: v.url
})
v.fun()
}
// 计算状态上班还是下班 0 未知 1上班 2下班
function calcWorkState() {
return computed(() => {
const state = storageManage.userInfo().workState
return state == 0 ? '1' : state == 1 ? 2 : 1
})
}
// 定向到登录页
const toLogin = () => uni.reLaunch({ url: '/pages/login/login' })
function findOrderState(val) {
switch (val.orderState) {
case 2:
break
case 3:
uni.$J.showToast('支付失败' + val.errMsg)
break
case 4:
uni.$J.showToast('订单撤销')
break
case 1:
// 支付中 进行查单操作
console.log('订单状态1进行查单 操作 ')
findOrder(val.payOrderId)
break
}
}
let num = 1
function findOrder(payOrderId) {
if (num > 20)
return uni.showModal({
title: '确认订单状态',
content: '订单状态查询失败 请与客户确认订单状态 点击确认跳转订单列表页面',
showCancel: true,
success: ({ confirm, cancel }) => {
if (confirm) {
uni.navigateTo({
url: '/pages/order/order'
})
}
}
})
uni.$J.showToast(`支付中正在进行第${num}次订单查询`).then(res => {
req.getById(API_URL_PAY_ORDER_LIST, payOrderId).then(({ bizData }) => {
num += 1
console.log('查单结果', bizData)
bizData.orderState = bizData.state
findOrderState(bizData)
})
})
}
function getAd() {
$adBannerList().then(({ bizData }) => {
if(!bizData){
vdata.adList =[]
uni.showToast({title:'请求广告数据成功',icon:'success'})
return false
}
vdata.adList = bizData?.appContent ? JSON.parse(bizData.appContent) : []
vdata.changeTime = bizData.changeTime
uni.showToast({title:'请求广告数据成功',icon:'success'})
})
}
// 抽屉打开状态
const change = (e) => {
vdata.isShow = e
}
</script>
<style lang="scss" scoped>
.idnex-wrapper {
padding: 30rpx;
box-sizing: border-box;
height: 11.8vh;
display: flex;
justify-content: space-between;
align-items: center;
color: #108ee9;
.tips-title {
font-size: 38rpx;
margin-bottom: 20rpx;
}
.store-name {
color: #2c2c2c;
font-size: 22rpx;
}
.more-but {
display: flex;
align-items: center;
justify-content: center;
min-width: 80rpx;
height: 50rpx;
border-radius: 7rpx;
background-color: rgba($color: #108ee9, $alpha: 0.3);
view {
width: 4rpx;
height: 4rpx;
border-radius: 50%;
background-color: #108ee9;
}
view:nth-child(2) {
margin: 0 4rpx;
}
}
}
.list-wrapper {
margin-top: 100rpx;
.list-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 10rpx 30rpx 30rpx;
box-sizing: border-box;
background-color: rgba($color: #108ee9, $alpha: 0.05);
color: #108ee9;
image {
width: 60rpx;
height: 40rpx;
}
.list-item-right {
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
.face-model {
font-size: 24rpx;
}
}
}
.list-item:nth-child(3) {
color: var(--text-color);
}
.list-item:nth-child(8) {
position: absolute;
left: 0;
right: 0;
bottom: 0;
color: tomato;
background-color: rgba(255, 99, 71, 0.05);
image {
svg {
fill: tomato !important;
}
}
}
}
.hover-more {
background-color: rgba($color: #000000, $alpha: 0.07) !important;
}
.log-in {
display: flex;
justify-content: center;
align-items: center;
padding: 5rpx 15rpx;
}
</style>