Browse Source

Merge branch 'dev'

feat-230721
刘嘉炜 2 years ago
parent
commit
481500f8dd
  1. 11
      src/pages.json
  2. 8
      src/pages/index/index.vue
  3. 2
      src/pages/write_off/operate/operate.vue
  4. BIN
      src/static/images/icon/index/tab_10.png
  5. 1
      src/store/index.js
  6. 11
      src/subpackage/blacklist/js/api.js
  7. 10
      src/subpackage/blacklist/js/server.js
  8. 349
      src/subpackage/blacklist/pages/abnormal_list/abnormal_list.vue
  9. BIN
      src/subpackage/blacklist/static/images/arrow.png
  10. BIN
      src/subpackage/blacklist/static/images/triangle.png

11
src/pages.json

@ -683,6 +683,17 @@
} }
} }
] ]
},
{
"root": "subpackage/blacklist",
"pages": [
{
"path": "pages/abnormal_list/abnormal_list",
"style" : {
"navigationBarTitleText": "进场人数异常"
}
}
]
} }
], ],
"globalStyle": { "globalStyle": {

8
src/pages/index/index.vue

@ -137,6 +137,12 @@
path: '/pages/order_list/order_list?order_type=18', path: '/pages/order_list/order_list?order_type=18',
serverKey: 1014 // 1014 serverKey: 1014 // 1014
}, },
{
id: 10,
name: '进场人数异常',
path: '/subpackage/blacklist/pages/abnormal_list/abnormal_list',
serverKey: 1014 // 1014
},
]; ];
const app = getApp(); const app = getApp();
@ -214,6 +220,8 @@
brandInfo: indexData&&indexData.brand ? indexData.brand : null, brandInfo: indexData&&indexData.brand ? indexData.brand : null,
}); });
} }
if(tabInfo.id === 10)return util.routeTo(tabInfo.path + `?brand_id=${indexData.brand.id}`,'nT');
util.routeTo(tabInfo.path,'nT'); util.routeTo(tabInfo.path,'nT');
}, },

2
src/pages/write_off/operate/operate.vue

@ -69,7 +69,7 @@ export default {
// //
getStoreList({ getStoreList({
page=1, page=1,
page_size=9999,
page_size=99999,
brand_id='', brand_id='',
}){ }){
return servers.get({ return servers.get({

BIN
src/static/images/icon/index/tab_10.png

After

Width: 52  |  Height: 52  |  Size: 604 B

1
src/store/index.js

@ -42,6 +42,7 @@ export default new Vuex.Store({
'1011': '商品零售', '1011': '商品零售',
'1013': '课程管理', '1013': '课程管理',
'1014': '储值卡管理', '1014': '储值卡管理',
'1015': '进场人数异常',
}, },
// 场地占用提交页面信息 // 场地占用提交页面信息
occupyInfo: { occupyInfo: {

11
src/subpackage/blacklist/js/api.js

@ -0,0 +1,11 @@
import { ORIGIN } from '../../../js/api';
export const BLACKLIST_API = {
stadiumList:`${ORIGIN}/admin/stadium/list`, // 店铺列表
identifyRecords:`${ORIGIN}/admin/stadium/identify/records`, // 疑似逃票的记录
blacklistAdd:`${ORIGIN}/admin/user/blacklist/add`, // 黑名单添加-后台
blacklistRemove:`${ORIGIN}/admin/user/blacklist/remove`, // 黑名单移除-后台
}
export default BLACKLIST_API;

10
src/subpackage/blacklist/js/server.js

@ -0,0 +1,10 @@
import { Server } from '../../../js/server';
class BlacklistServer extends Server {
constructor(props){
super(props)
}
}
export default new BlacklistServer();

349
src/subpackage/blacklist/pages/abnormal_list/abnormal_list.vue

@ -0,0 +1,349 @@
<template>
<view class="abnormal-list">
<view class="al-stadium-change">
<view class="asc-name">当前门店</view>
<picker :range="stadiumLs" range-key="name" @change="stadiumChange">
<view class="asc-frame">
<view class="af-content">
<view :class="[ 'ac-txt', selectStadium.name?'select':'' ]">{{ selectStadium.name || '全部' }}</view>
<image class="ac-icon" mode="aspectFit" src="/subpackage/blacklist/static/images/arrow.png"></image>
</view>
</view>
</picker>
</view>
<view class="al-date">
<picker mode="date" @change="dateChange">
<view class="ad-content">
<view class="ac-txt">核销日期{{ curDate || '' }}</view>
<image class="ac-icon" mode="aspectFit" src="/subpackage/blacklist/static/images/triangle.png"></image>
</view>
</picker>
</view>
<view class="al-list">
<view class="al-item" v-for="(e, i) in blackLs" :key="i">
<view class="al-title">{{ e.extension.stadium_name || '-' }}</view>
<view class="ai-line">
<view class="ai-txt">订单编号{{ e.order_no || '-' }}</view>
<view class="ai-tag">{{ e.type || '-' }}</view>
</view>
<view class="ai-line">
<view class="ai-txt">用户信息{{ e.extension.mobile || '-' }}{{ e.extension.nickname || '-' }}</view>
</view>
<view class="ai-line">
<view class="ai-txt">核销码{{ e.verify_code || '-' }}</view>
</view>
<view class="ai-line">
<view class="ai-txt">验证方式{{ e.verify_desc || '-' }}</view>
</view>
<view class="ai-line">
<view class="ai-txt">核销时间{{ e.verify_leave_time || '-' }}</view>
</view>
<view class="ai-line">
<view class="ai-txt">抓拍图片</view>
<view class="ai-img">
<image
v-if="e.evidence_img"
@click="previewImg(e.evidence_img || '')"
mode="aspectFit"
:src="e.evidence_img || ''"
></image>
</view>
</view>
<view
v-if="e.in_black_list === 1 || e.in_black_list === 0"
:class="['ai-btn', e.in_black_list === 1?'red':'']"
@click="operateBtn(e, i)"
>{{e.in_black_list === 1?'移出黑名单':'加入黑名单'}}</view>
</view>
</view>
</view>
</template>
<script>
import server from '../../js/server';
import util from '../../../../utils/util';
import { BLACKLIST_API } from '../../js/api';
export default {
data(){
return {
stadiumLs: [],
selectStadium: {},
curDate: '',
blackLs: [],
page: 1
}
},
async onLoad(options){
try{
let _date = this.curDate = util.formatDate({});
let _stadiumLs = await this.getStoreList({});
this.getRecords({
brand_id: options.brand_id,
verify_time: _date
});
}catch(err){
console.warn('get records ls err --->', err);
}
},
onReachBottom(){
let { selectStadium, curDate, page } = this;
this.getRecords({
brand_id: selectStadium.brand_id,
stadium_id: selectStadium.id,
verify_time: curDate,
page: ++page
})
},
methods: {
previewImg(url){
uni.previewImage({ urls: [url] });
},
getRecords({
authority = 'wx', // 便
brand_id = 63,
stadium_id = '',
page = 1,
page_size = 10,
verify_time = ''
}){
util.showLoad();
server.get({
url: BLACKLIST_API.identifyRecords,
data: {
authority, brand_id, page, page_size,
stadium_id: stadium_id || '', verify_time
},
failMsg: '加载列表失败!'
})
.then(res => {
util.hideLoad();
let _ls = res.list || [];
if(page ===1)return this.blackLs = _ls;
if(!_ls.length)return util.showNone('没有更多数据!');
this.page = page;
this.blackLs = [ ...this.blackLs, ..._ls ];
})
},
dateChange(e){
let { selectStadium } = this;
let _date = e.detail.value || '-'
this.curDate = _date;
this.page = 1;
this.blackLs = [];
this.getRecords({
brand_id: selectStadium.brand_id,
stadium_id: selectStadium.id,
verify_time: _date,
})
},
stadiumChange(e){
let { stadiumLs, curDate } = this;
let _curStadium = stadiumLs[e.detail.value] || {};
this.selectStadium = _curStadium;
this.page = 1;
this.blackLs = [];
this.getRecords({
brand_id: _curStadium.brand_id,
stadium_id: _curStadium.id,
verify_time: curDate,
})
},
operateBtn(e, idx){
let _status = e.in_black_list || ''
let _qry = {
uid: e.user_id,
brand_id: e.brand_id,
idx: idx,
status: _status,
enter_black_list_cause: '人数异常加入'
}
if(_status == 0)return this.modalToDo({ qry: _qry, content: '确定将该用户拉入黑名单吗?确定后用户将不能再进入小程序' });
if(_status === 1)return this.modalToDo({ qry: _qry, content: '确定移出黑名单吗?' });
},
modalToDo({ qry, content }){
util.showModal({
title: '提示',
content: content,
showCancel: true,
success: mRes => {
if(mRes.confirm)this.blackLsOpt(qry);
}
})
},
blackLsOpt: util.debounce(function({ uid, brand_id, idx, status, enter_black_list_cause}){
let _url = '';
if(status == 0)_url = BLACKLIST_API.blacklistAdd;
if(status == 1)_url = BLACKLIST_API.blacklistRemove;
util.showLoad();
server.get({
url: _url,
data: {
id: uid,
brand_id,
enter_black_list_cause
},
isDefaultGet: false
})
.then(res=>{
util.hideLoad();
if(res.data.code == 0){
util.showNone('操作成功!');
let _blackLs = this.blackLs || [];
_blackLs[idx].in_black_list = status == 0 ? 1 : 0;
this.blackLs = _blackLs;
setTimeout(_=>this.$forceUpdate(), 1200);
}else{
util.showNone(res.data.message || '操作失败!稍后重试');
}
})
}, 300, true),
//
getStoreList({
page=1,
page_size=99999,
brand_id='',
}){
return server.get({
url: BLACKLIST_API.stadiumList,
data: {
page,
page_size,
brand_id,
},
failMsg: '获取店铺列表失败!'
})
.then(res=>{
let _list = res.list || [];
_list.unshift({ name: '全部', id: '' })
this.stadiumLs = _list;
return _list
})
},
}
}
</script>
<style scoped lang="scss">
@import "~style/public.scss";
.abnormal-list{
}
.al-stadium-change{
margin-bottom: 24upx;
padding: 26upx 24upx;
background-color: #fff;
@include centerFlex(space-between);
.asc-name{
margin-right: 20upx;
flex-shrink: 0;
font-size: 28upx;
color: #9C9C9F;
}
.asc-frame{
width: 570upx;
height: 92upx;
border-radius: 10upx;
background-color: #F2F2F7;
.af-content{
@include centerFlex(space-between);
height: 100%;
padding: 0 20upx;
.ac-txt{
@include textHide(1);
font-size: 28upx;
color: #9c9c9f;
&.select{
color: #1A1A1A;
}
}
.ac-icon{
flex-shrink: 0;
width: 28upx;
height: 28upx;
}
}
}
}
.al-date{
padding: 0 24upx;
.ad-content{
@include centerFlex(flex-start);
.ac-txt{
line-height: 44upx;
font-weight: 500;
font-size: 32upx;
color: #1a1a1a;
}
.ac-icon{
flex-grow: 0;
flex-shrink: 0;
margin-left: 16upx;
width: 22upx;
height: 22upx;
}
}
}
.al-list{
padding: 34upx 24upx;
.al-item{
padding: 4upx 20upx 48upx;
margin-bottom: 24upx;
border-radius: 10upx;
background-color: #fff;
.al-title{
margin-bottom: 10upx;
line-height: 96upx;
font-weight: 500;
font-size: 28upx;
color: #1A1A1A;
border-bottom: 2upx solid #d8d8d8;
@include textHide(1);
}
.ai-line{
display: flex;
.ai-txt{
line-height: 52upx;
font-size: 28upx;
color: #9c9c9f;
@include textHide(1);
}
.ai-tag{
flex-shrink: 0;
margin-left: 12upx;
line-height: 52upx;
font-size: 28upx;
color: $themeColor;
}
.ai-img{
width: 240upx;
height: 180upx;
overflow: hidden;
border-radius: 6upx;
>image{
width: 100%;
height: 100%;
}
}
}
.ai-btn{
margin: 40upx auto 0;
width: 240upx;
line-height: 68upx;
text-align: center;
font-size: 28upx;
font-weight: 500;
border-radius: 10upx;
background-color: $themeColor;
color: #fff;
&.red{
background-color: #EA5061;
}
}
}
}
</style>

BIN
src/subpackage/blacklist/static/images/arrow.png

After

Width: 28  |  Height: 28  |  Size: 230 B

BIN
src/subpackage/blacklist/static/images/triangle.png

After

Width: 22  |  Height: 22  |  Size: 227 B

Loading…
Cancel
Save