Browse Source

add tid1803 style

tid1878
刘嘉炜 4 months ago
parent
commit
b968001ee7
  1. 6
      src/pages.json
  2. 1
      src/pages/write_off/operate/operate.vue
  3. 59
      src/subpackage/verification/components/head_bar.vue
  4. 71
      src/subpackage/verification/components/record/dy_item.vue
  5. 82
      src/subpackage/verification/components/record/site_item.vue
  6. 0
      src/subpackage/verification/components/stadium_picker.vue
  7. 2
      src/subpackage/verification/js/api.js
  8. 131
      src/subpackage/verification/pages/index.vue
  9. 102
      src/subpackage/verification/pages/record.vue
  10. BIN
      src/subpackage/verification/static/images/calendar.png
  11. BIN
      src/subpackage/verification/static/images/search.png
  12. 4
      src/utils/util.js

6
src/pages.json

@ -905,6 +905,12 @@
"style" : {
"navigationBarTitleText": "现场人数"
}
},
{
"path": "pages/record",
"style" : {
"navigationBarTitleText": "核销记录"
}
}
]
}

1
src/pages/write_off/operate/operate.vue

@ -228,7 +228,6 @@ export default {
}
}else{
util.showNone(res.data.message || '操作失败!')
// util.routeTo(`/pages/write_off/null/null?type=${vType}`, 'nT');
}
})

59
src/subpackage/verification/components/head_bar.vue

@ -0,0 +1,59 @@
<template>
<view class="head-bar">
<picker class="hb-picker" :range="range" :range-key="rangeKey" @change="$emit('change', $event)">
<view class="hp-frame">
<input class="hf-ipt" type="text" disabled :value="value" :placeholder="placeholder">
<image class="hf-icon" mode="aspectFit" src="/subpackage/verification/static/images/arrow_c9f.png"></image>
</view>
</picker>
<image v-if="search" class="hb-icon" mode="aspectFit" src="/subpackage/verification/static/images/search.png"></image>
</view>
</template>
<script>
export default {
props: {
value: { type: String, default: '' },
placeholder: { type: String, default: '' },
range: { type: Array, default: [] },
rangeKey: { type: String, default: '' },
search: { type: Boolean, default: false }
}
}
</script>
<style lang="scss">
.head-bar{
padding-left: 24upx;
padding-right: 24upx;
height: 144upx;
background: #fff;
@include ctf(space-between);
.hb-picker{
flex-grow: 1;
.hp-frame{
padding: 0 24upx;
height: 92upx;
background: #f2f2f7;
@include ctf(space-between);
.hf-ipt{
flex-grow: 1;
height: 100%;
@include flcw(28upx, 40upx, #333);
}
.hf-icon{
flex-shrink: 0;
width: 28upx;
height: 28upx;
}
}
}
.hb-icon{
flex-shrink: 0;
margin-right: 16upx;
margin-left: 26upx;
width: 40upx;
height: 40upx;
}
}
</style>

71
src/subpackage/verification/components/record/dy_item.vue

@ -0,0 +1,71 @@
<template>
<view class="site-item">
<view class="si-stadium">欧轩智能羽毛球馆(永泰店)</view>
<view class="si-lines">
<view class="sl-item">
<view class="sl-left">订单编号20195175645666</view>
</view>
<view class="sl-item">
<view class="sl-left">用户信息18316553852(yiming)</view>
</view>
<view class="sl-item">
<view class="sl-left">券码 200801108978</view>
</view>
<view class="sl-item">
<view class="sl-left">验证方式扫码器验证(欧轩门闸)</view>
</view>
<view class="sl-item">
<view class="sl-left">核销时间2021-05-17 11:12:58</view>
</view>
</view>
</view>
</template>
<script>
export default {
}
</script>
<style lang="scss">
.site-item{
position: relative;
padding: 0 20upx;
border-radius: 10upx;
background: #fff;
.si-stadium{
min-height: 100upx;
border-bottom: 2upx solid #D8D8D8;
@include flcw(28upx, 98upx, #1A1A1A, 500);
@include tHide;
}
.si-lines{
padding-top: 8upx;
padding-bottom: 32upx;
.sl-item{
display: flex;
.sl-left{
@include flcw(28upx, 52upx, #9c9c9f);
@include tHide;
}
.sl-right{
max-width: 200upx;
flex-shrink: 0;
margin-left: 10upx;
@include flcw(28upx, 52upx, $mColor);
@include tHide;
}
}
}
.si-btn{
position: absolute;
right: 20upx;
bottom: 32upx;
width: 192upx;
text-align: center;
background-color: $mColor;
border-radius: 10upx;
@include flcw(32upx, 80upx, #fff, 500);
}
}
</style>

82
src/subpackage/verification/components/record/site_item.vue

@ -0,0 +1,82 @@
<template>
<view class="site-item">
<view class="si-stadium">欧轩智能羽毛球馆(永泰店)</view>
<view class="si-lines">
<view class="sl-item">
<view class="sl-left">订单编号20195175645666</view>
<view class="sl-right">租场</view>
</view>
<view class="sl-item">
<view class="sl-left">用户信息18316553852(yiming)</view>
</view>
<view class="sl-item">
<view class="sl-left">核销码 200801108978</view>
</view>
<view class="sl-item">
<view class="sl-left">验证方式扫码器验证(欧轩门闸)</view>
</view>
<view class="sl-item">
<view class="sl-left">核销时间2021-05-17 11:12:58</view>
</view>
<view class="sl-item">
<view class="sl-left">离场时间2021-05-17 11:12:58</view>
</view>
</view>
<view class="si-btn">手动离场</view>
</view>
<!-- 订单编号20195175645666
用户信息18316553852(yiming)
核销码 200801108978
验证方式扫码器验证(欧轩门闸)
核销时间2021-05-17 11:12:58
离场时间2021-05-17 11:12:58 -->
</template>
<script>
export default {
}
</script>
<style lang="scss">
.site-item{
position: relative;
padding: 0 20upx;
border-radius: 10upx;
background: #fff;
.si-stadium{
min-height: 100upx;
border-bottom: 2upx solid #D8D8D8;
@include flcw(28upx, 98upx, #1A1A1A, 500);
@include tHide;
}
.si-lines{
padding-top: 8upx;
padding-bottom: 32upx;
.sl-item{
display: flex;
.sl-left{
@include flcw(28upx, 52upx, #9c9c9f);
@include tHide;
}
.sl-right{
max-width: 200upx;
flex-shrink: 0;
margin-left: 10upx;
@include flcw(28upx, 52upx, $mColor);
@include tHide;
}
}
}
.si-btn{
position: absolute;
right: 20upx;
bottom: 32upx;
width: 192upx;
text-align: center;
background-color: $mColor;
border-radius: 10upx;
@include flcw(32upx, 80upx, #fff, 500);
}
}
</style>

0
src/subpackage/verification/components/stadium_picker.vue

2
src/subpackage/verification/js/api.js

@ -6,6 +6,8 @@ export const SUB_API = {
skNotLeavingNums: `${ORIGIN}/stadium/sk/notLeavingNums`, // 【1001536】散客人数 - 未离场订单数量
setStadiumPresentNumber: `${ORIGIN}/admin/stadium/setStadiumPresentNumber`, // 商家助手散客人数校正
timingOpen: `${ORIGIN}/stadium/person/timing/open`, // 【20220208】凌晨自动清零【开/关】
// tid1803
enterVerifyOrder: `${ORIGIN}/admin/stadium/order/enterVerifyOrder`, // 商家助手-核销查询-输入验证码
}

131
src/subpackage/verification/pages/index.vue

@ -1,16 +1,12 @@
<template>
<view class="write-off-index">
<view class="woi-stadium-bar">
<picker :range="stadiumList" range-key="name" @change="stadiumChange">
<view class="wsb-ipt-box">
<input class="wib-ipt" type="text" placeholder="请选择场馆" disabled v-model="curStadium.name" />
<image class="wib-img" mode="aspectFit" src="/subpackage/verification/static/images/arrow_c9f.png"></image>
</view>
</picker>
</view>
<head-bar
:range="stadiumList" range-key="name" @change="stadiumChange"
placeholder="请选择场馆" :value="curStadium.name"
></head-bar>
<view class="woi-section">
<view class="ws-ipt-box">
<input class="wib-ipt" type="text" placeholder="请输入券码" />
<input class="wib-ipt" type="text" placeholder="请输入券码" v-model="iptCode" />
<image @click="scanCode" class="wib-img" mode="aspectFit" src="/subpackage/verification/static/images/scan.png"></image>
</view>
<view class="ws-txt">可输入订场次卡年月卡赛事商城到店领取商品的验证码/券码进行核销或点扫码图标进入扫描界面扫码核销</view>
@ -18,11 +14,11 @@
</view>
<view class="woi-btns">
<view class="wb-items">
<view class="wb-items" @click="toAbnormal">
<image class="wi-icon" mode="aspectFit" src="/subpackage/verification/static/images/tab0.png"></image>
<view class="wi-txt">进场人数异常</view>
</view>
<view class="wb-items">
<view class="wb-items" @click="toSitePeople">
<image class="wi-icon" mode="aspectFit" src="/subpackage/verification/static/images/tab1.png"></image>
<view class="wi-txt">现场人数</view>
</view>
@ -38,25 +34,51 @@
import API from "../js/api.js";
import server from "../js/server.js";
import { showLoad, hideLoad, showModal, showNone, debounce, changeLowerCase } from "@/utils/util.js";
import { showLoad, hideLoad, showModal, showNone, debounce, changeLowerCase, $_emit, routeTo } from "@/utils/util.js";
import { WRITE_OFF_ORDER_INFO } from '@/js/once_name';
import headBar from "../components/head_bar.vue";
export default {
components: { headBar },
data(){
return{
brand_id: '',
stadiumList: [],
curStadium: {},
iptCode: '',
}
},
onLoad(options){
this.getStadiumLs({ brand_id: options?.brand_id });
let _brand_id = options?.brand_id || '';
this.brand_id = _brand_id;
this.getStadiumLs({ brand_id: _brand_id });
},
methods: {
//
toSitePeople(){
let { brand_id } = this;
routeTo(`/subpackage/verification/pages/site_people/index?brand_id=${brand_id}`, 'nT');
},
//
toAbnormal(){
let { brand_id } = this;
routeTo(`/subpackage/blacklist/pages/abnormal_list/abnormal_list?brand_id=${brand_id}`, 'nT');
},
scanCode: debounce(function(){
let { curStadium } = this;
if(!curStadium?.id)return showModal({ content: '请选择场馆!' });
uni.scanCode({
onlyFromCamera: true,
scanType: 'qrCode',
success: res=> {
if(changeLowerCase(res.scanType) !== 'qr_code')return showNone('不支持此类型!');
console.log('扫码结果--->', res);
let { curStadium } = this;
this.verifyOrder({
brand_id: curStadium?.brand_id || '',
stadium_id: curStadium?.id || '',
decrypt_text: res?.result || '',
})
},
fail: function(err) {
showNone('扫码失败!');
@ -97,36 +119,71 @@ export default {
// return Promise.reject(err);
})
},
/**
* 订单预检验
* @param {String} brand_id
* @param {String} stadium_id
* @param {String} verify_code 订单验证码
* @param {String} decrypt_text 二维码数据
* */
verifyOrder({ brand_id, stadium_id, verify_code = '', decrypt_text = '' }){
let _vType = verify_code ? 'verify_code' : decrypt_text ? 'decrypt_text' : '';
showLoad();
return server.post({
url: API.enterVerifyOrder,
data: { brand_id, stadium_id, verify_code, decrypt_text },
isDefaultGet: false,
})
.then(res => {
hideLoad();
let _data = res?.data || {};
if(_data.code === 0){
let _orderData = _data?.data || {};
//
if(_orderData?.extension?.verify_order_type === 'product_order'){
$_emit(WRITE_OFF_MALL_ORDER_INFO, { data: _orderData });
routeTo(`/pages/write_off/ym_confirm/ym_confirm?type=${_vType}`, 'nT');
return
}
//
if(_orderData?.extension?.verify_order_type === 'monthly_card'){
$_emit(WRITE_OFF_ORDER_INFO, { data: _orderData, query: { brand_id, stadium_id, verify_code, decrypt_text } });
routeTo(`/pages/write_off/ym_confirm/ym_confirm?type=${_vType}`, 'nT');
return
}
//
if(_orderData?.extension?.verify_order_type === 'match_order'){
$_emit(WRITE_OFF_ORDER_INFO, {..._orderData});
routeTo(`/pages/write_off/events_order/events_order?type=${_vType}`, 'nT');
return
}
$_emit(WRITE_OFF_ORDER_INFO, { ..._orderData });
routeTo(`/pages/write_off/confirm_order/confirm_order?type=${_vType}`, 'nT');
}else{
if(!_vType)return Promise.reject(_data);
routeTo(`/pages/write_off/null/null?type=${_vType}`, 'nT');
// return Promise.reject(_data);
}
})
.catch(err => {
hideLoad();
showModal({
title: '提示',
content: err.message || '核销查询失败!'
})
console.warn('verification index verifyOrder err --->', err);
// return Promise.reject(err);
})
},
}
}
</script>
<style lang="scss">
.write-off-index{
.woi-stadium-bar{
padding: 26upx 0;
background: #fff;
@include ctf(center);
.wsb-ipt-box{
padding: 0 20upx;
width: 702upx;
height: 92upx;
border-radius: 10upx;
background: #F2F2F7;
@include ctf;
.wib-ipt{
flex-grow: 1;
height: 100%;
@include flcw(28upx, 40upx, #333);
}
.wib-img{
flex-shrink: 0;
margin-left: 20upx;
width: 28upx;
height: 28upx;
}
}
}
.woi-section{
margin-top: 24upx;
padding-top: 26upx;

102
src/subpackage/verification/pages/record.vue

@ -0,0 +1,102 @@
<template>
<view class="verification-record">
<view class="vr-header">
<head-bar search></head-bar>
<view class="vh-tabs">
<view class="vt-item" :class="{ active: curTab === 0 }" @click="curTab = 0">场地核销记录</view>
<view class="vt-item" :class="{ active: curTab === 1 }" @click="curTab = 1">抖音核销记录</view>
<view class="vt-item" :class="{ active: curTab === 2 }" @click="curTab = 2">商城核销记录</view>
</view>
</view>
<view class="vr-time-board">
<view class="vtb-time">
<view class="vt-txt">2024.04.09 2024.05.09</view>
<image class="vt-icon" mode="aspectFit" src="/subpackage/verification/static/images/calendar.png"></image>
</view>
<view class="vtb-num">核销数量30</view>
</view>
<view class="vr-list">
<site-item></site-item>
<view class="vl-space" style="height: 24rpx;"></view>
<dy-item></dy-item>
</view>
</view>
</template>
<script>
import headBar from "../components/head_bar.vue";
import siteItem from "../components/record/site_item.vue";
import dyItem from "../components/record/dy_item.vue";
export default {
components: { headBar, siteItem, dyItem },
data(){
return {
curTab: 0,
}
},
methods: {
}
}
</script>
<style lang="scss">
.verification-record{
}
.vr-header{
background: #fff;
.vh-tabs{
@include ctf(space-around);
.vt-item{
position: relative;
@include flcw(28upx, 88upx, #2D2D2D);
&.active{
color: $mColor;
&::after{
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 100%;
height: 4upx;
background: $mColor;
}
}
}
}
}
.vr-time-board{
padding: 24upx;
@include ctf(space-between);
.vtb-time{
flex-shrink: 0;
padding: 0 14upx;
height: 62upx;
background: #fff;
@include ctf;
.vt-txt{
max-width: 400upx;
@include flcw(24upx, 34upx, #1A1A1A, 500);
@include tHide;
}
.vt-icon{
flex-shrink: 0;
margin-left: 30upx;
width: 32upx;
height: 32upx;
}
}
.vtb-num{
margin-left: 20upx;
@include flcw(32upx, 44upx, #1A1A1A, 500);
@include tHide;
}
}
.vr-list{
padding: 0 24upx;
}
</style>

BIN
src/subpackage/verification/static/images/calendar.png

After

Width: 16  |  Height: 16  |  Size: 369 B

BIN
src/subpackage/verification/static/images/search.png

After

Width: 20  |  Height: 20  |  Size: 245 B

4
src/utils/util.js

@ -371,7 +371,7 @@ export function changeLowerCase(str){
// 大数据量跨页/跨组件传参------$_once && $_emit
// 单次监听器
// 到文件src\js\once_name.js,进行命名,防止命名冲突导致错误监听
function $_once(name, cb){
export function $_once(name, cb){
uni.$once(name + '',function(data){
cb&&cb(data);
})
@ -380,7 +380,7 @@ function $_once(name, cb){
}, 50)
}
// 促发单次监听
function $_emit(name, data){
export function $_emit(name, data){
uni.$once((name + '')+'1',function(){
uni.$emit(name + '', data);
})

Loading…
Cancel
Save