源文件

This commit is contained in:
gyq
2024-05-23 14:39:33 +08:00
commit a1128dd791
2997 changed files with 500069 additions and 0 deletions

View File

@@ -0,0 +1,403 @@
<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>