goldbullion,ticketconsume,gamemall query
This commit is contained in:
parent
5bcefe2f27
commit
f753778465
@ -24,3 +24,27 @@ export function getPlayerHeroes(data, cursor, pagesize) {
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getGoldBullion(data, cursor, pagesize) {
|
||||
return request({
|
||||
url: '/player/goldbullionquery?cursor=' + cursor + '&page_size=' + pagesize,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getTicketConsume(data, cursor, pagesize) {
|
||||
return request({
|
||||
url: '/player/ticketconsumequery?cursor=' + cursor + '&page_size=' + pagesize,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getGameMall(data, cursor, pagesize) {
|
||||
return request({
|
||||
url: '/player/gamemallquery?cursor=' + cursor + '&page_size=' + pagesize,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
@ -188,6 +188,24 @@ export const constantRoutes = [
|
||||
name: 'heroesquery',
|
||||
meta: { title: '玩家英雄查询' },
|
||||
hidden: false
|
||||
}, {
|
||||
path: 'goldbullionquery',
|
||||
component: () => import('@/views/player/goldbullionquery'),
|
||||
name: 'goldquery',
|
||||
meta: { title: '金币查询' },
|
||||
hidden: false
|
||||
}, {
|
||||
path: 'ticketconsumequery',
|
||||
component: () => import('@/views/player/ticketconsumequery'),
|
||||
name: 'ticketquery',
|
||||
meta: { title: '门票消耗查询' },
|
||||
hidden: false
|
||||
}, {
|
||||
path: 'gamemallquery',
|
||||
component: () => import('@/views/player/gamemallquery'),
|
||||
name: 'gamemallquery',
|
||||
meta: { title: '游戏内商品查询' },
|
||||
hidden: false
|
||||
}
|
||||
]
|
||||
}, {
|
||||
|
258
src/views/player/gamemallquery.vue
Normal file
258
src/views/player/gamemallquery.vue
Normal file
@ -0,0 +1,258 @@
|
||||
<template>
|
||||
<div class="createPost-container">
|
||||
<el-form ref="postForm" :model="postForm" :rules="rules" class="form-container">
|
||||
<div class="createPost-main-container">
|
||||
<el-row>
|
||||
<el-col :span="5">
|
||||
<el-form-item label-width="120px" label="order_id:" class="postInfo-container-item" prop="order_id">
|
||||
<el-input v-model="postForm.order_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<el-form-item label-width="100px" label="seller:" class="postInfo-container-item" prop="seller">
|
||||
<el-input v-model="postForm.seller" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="130px" label="seller_address:" class="postInfo-container-item" prop="seller_address">
|
||||
<el-input v-model="postForm.seller_address" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-button style="margin-left: 10px;" type="success" @click="submitForm()">
|
||||
查询
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
v-table-scroll-load="nextStream"
|
||||
:empty-text="emptytext"
|
||||
height="400"
|
||||
:data="gamemallitems"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
prop="idx"
|
||||
label="ID"
|
||||
width="100"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="order_id"
|
||||
label="订单id"
|
||||
width="100"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="order_type"
|
||||
label="订单类型 1:英雄 2:芯片 3:碎片 4:宝箱"
|
||||
width="100"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="seller"
|
||||
label="卖家"
|
||||
width="100"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="seller_address"
|
||||
label="卖家地址"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="goods_uniid"
|
||||
label="物品id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="item_id"
|
||||
label="道具id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="item_num"
|
||||
label="物品数量"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="price"
|
||||
label="价格"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="buyer"
|
||||
label="购买成功者"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="buy_ok_time"
|
||||
label="购买成功时间"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="last_modify_price_time"
|
||||
label="最后一次修改价格时间"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createtime"
|
||||
label="创建时间"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="modifytime"
|
||||
label="修改时间"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="order1"
|
||||
label="品质排序"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="unit_price"
|
||||
label="单价"
|
||||
width="200"
|
||||
/>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getGameMall } from '@/api/player'
|
||||
|
||||
const pagesize = 10
|
||||
|
||||
export default {
|
||||
name: 'GameMall',
|
||||
data() {
|
||||
var validatequery = (rule, value, callback) => {
|
||||
if (!this.postForm.order_id && !this.postForm.seller && !this.postForm.seller_address) {
|
||||
callback(new Error('请至少填写一项'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
postForm: {
|
||||
order_id: '',
|
||||
seller: '',
|
||||
seller_address: ''
|
||||
},
|
||||
rules: {
|
||||
order_id: [{ required: true, validator: validatequery, trigger: 'blur' }],
|
||||
seller: [{ required: true, validator: validatequery, trigger: 'blur' }],
|
||||
seller_address: [{ required: true, validator: validatequery, trigger: 'blur' }]
|
||||
},
|
||||
emptytext: ' ',
|
||||
gamemallitems: [],
|
||||
cursor: 0,
|
||||
remaining: 0
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
submitForm() {
|
||||
console.log('valid begin')
|
||||
try {
|
||||
this.$refs['postForm'].validate((valid) => {
|
||||
console.log('valid end', valid)
|
||||
if (valid) {
|
||||
const querydata = JSON.parse(JSON.stringify(this.postForm))
|
||||
getGameMall(querydata, 0, pagesize).then(response => {
|
||||
if (response.code === 0) {
|
||||
console.log('response', response)
|
||||
this.gamemallitems = response.data
|
||||
if (this.gamemallitems === undefined || this.gamemallitems.length <= 0) {
|
||||
this.emptytext = 'No data'
|
||||
}
|
||||
this.cursor = response.page.next_cursor
|
||||
this.remaining = response.page.remaining
|
||||
this.$message({
|
||||
message: '收到回应',
|
||||
type: 'success',
|
||||
duration: 1200,
|
||||
onClose: () => {
|
||||
// this.$router.push('index')
|
||||
}
|
||||
})
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log('error', error)
|
||||
})
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
nextStream() {
|
||||
if (this.remaining > 0) {
|
||||
this.remaining = 0
|
||||
const querydata = JSON.parse(JSON.stringify(this.postForm))
|
||||
getGameMall(querydata, this.cursor, pagesize).then(response => {
|
||||
if (response.code === 0) {
|
||||
console.log('next response', response)
|
||||
this.gamemallitems = this.gamemallitems.concat(response.data)
|
||||
this.cursor = response.page.next_cursor
|
||||
this.remaining = response.page.remaining
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/styles/mixin.scss";
|
||||
|
||||
.createPost-container {
|
||||
position: relative;
|
||||
|
||||
.createPost-main-container {
|
||||
padding: 40px 45px 20px 50px;
|
||||
|
||||
.postInfo-container {
|
||||
position: relative;
|
||||
@include clearfix;
|
||||
margin-bottom: 10px;
|
||||
|
||||
.postInfo-container-item {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.word-counter {
|
||||
width: 40px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.article-textarea ::v-deep {
|
||||
textarea {
|
||||
padding-right: 40px;
|
||||
resize: none;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
border-bottom: 1px solid #bfcbd9;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
262
src/views/player/goldbullionquery.vue
Normal file
262
src/views/player/goldbullionquery.vue
Normal file
@ -0,0 +1,262 @@
|
||||
<template>
|
||||
<div class="createPost-container">
|
||||
<el-form ref="postForm" :model="postForm" :rules="rules" class="form-container">
|
||||
<div class="createPost-main-container">
|
||||
<el-row>
|
||||
<el-col :span="5">
|
||||
<el-form-item label-width="120px" label="token_id:" class="postInfo-container-item" prop="token_id">
|
||||
<el-input v-model="postForm.token_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<el-form-item label-width="120px" label="账号id:" class="postInfo-container-item" prop="open_address">
|
||||
<el-input v-model="postForm.open_address" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-button style="margin-left: 10px;" type="success" @click="submitForm()">
|
||||
查询
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
v-table-scroll-load="nextStream"
|
||||
:empty-text="emptytext"
|
||||
height="400"
|
||||
:data="goldbullion"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
prop="idx"
|
||||
label="ID"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="src_account_id"
|
||||
label="src_account_id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="src_address"
|
||||
label="src_address"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="token_id"
|
||||
label="token_id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="net_id"
|
||||
label="net_id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="item_id"
|
||||
label="道具id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="gold"
|
||||
label="金币"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态 0:初始 1:已开"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="open_status"
|
||||
label="open_status 1: 已发送 2:未发送 3:已领取"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="open_address"
|
||||
label="open_address"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="open_time"
|
||||
label="open_time"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="open_account_id"
|
||||
label="open_account_id"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="open_uniqid"
|
||||
label="open_uniqid"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="returned"
|
||||
label="是否已超时返还"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="return_time"
|
||||
label="返还时间"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="activated"
|
||||
label="是否已上链"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="activated_time"
|
||||
label="上链时间"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createtime"
|
||||
label="创建时间"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="modifytime"
|
||||
label="修改时间"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="return_status"
|
||||
label="返回状态 1: 已发送 2:已领取"
|
||||
width="100"
|
||||
/>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getGoldBullion } from '@/api/player'
|
||||
|
||||
const pagesize = 10
|
||||
|
||||
export default {
|
||||
name: 'GoldBullion',
|
||||
data() {
|
||||
var validatequery = (rule, value, callback) => {
|
||||
if (!this.postForm.token_id && !this.postForm.open_address) {
|
||||
callback(new Error('请至少填写一项'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
postForm: {
|
||||
token_id: '',
|
||||
open_address: ''
|
||||
},
|
||||
rules: {
|
||||
token_id: [{ required: true, validator: validatequery, trigger: 'blur' }],
|
||||
open_address: [{ required: true, validator: validatequery, trigger: 'blur' }]
|
||||
},
|
||||
emptytext: ' ',
|
||||
goldbullion: [],
|
||||
cursor: 0,
|
||||
remaining: 0
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
submitForm() {
|
||||
console.log('valid begin')
|
||||
try {
|
||||
this.$refs['postForm'].validate((valid) => {
|
||||
console.log('valid end', valid)
|
||||
if (valid) {
|
||||
const querydata = JSON.parse(JSON.stringify(this.postForm))
|
||||
getGoldBullion(querydata, 0, pagesize).then(response => {
|
||||
if (response.code === 0) {
|
||||
console.log('response', response)
|
||||
this.goldbullion = response.data
|
||||
if (this.goldbullion === undefined || this.goldbullion.length <= 0) {
|
||||
this.emptytext = 'No data'
|
||||
}
|
||||
this.cursor = response.page.next_cursor
|
||||
this.remaining = response.page.remaining
|
||||
this.$message({
|
||||
message: '收到回应',
|
||||
type: 'success',
|
||||
duration: 1200,
|
||||
onClose: () => {
|
||||
// this.$router.push('index')
|
||||
}
|
||||
})
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log('error', error)
|
||||
})
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
nextStream() {
|
||||
if (this.remaining > 0) {
|
||||
this.remaining = 0
|
||||
const querydata = JSON.parse(JSON.stringify(this.postForm))
|
||||
getGoldBullion(querydata, this.cursor, pagesize).then(response => {
|
||||
if (response.code === 0) {
|
||||
console.log('next response', response)
|
||||
this.goldbullion = this.goldbullion.concat(response.data)
|
||||
this.cursor = response.page.next_cursor
|
||||
this.remaining = response.page.remaining
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/styles/mixin.scss";
|
||||
|
||||
.createPost-container {
|
||||
position: relative;
|
||||
|
||||
.createPost-main-container {
|
||||
padding: 40px 45px 20px 50px;
|
||||
|
||||
.postInfo-container {
|
||||
position: relative;
|
||||
@include clearfix;
|
||||
margin-bottom: 10px;
|
||||
|
||||
.postInfo-container-item {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.word-counter {
|
||||
width: 40px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.article-textarea ::v-deep {
|
||||
textarea {
|
||||
padding-right: 40px;
|
||||
resize: none;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
border-bottom: 1px solid #bfcbd9;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
186
src/views/player/ticketconsumequery.vue
Normal file
186
src/views/player/ticketconsumequery.vue
Normal file
@ -0,0 +1,186 @@
|
||||
<template>
|
||||
<div class="createPost-container">
|
||||
<el-form ref="postForm" :model="postForm" :rules="rules" class="form-container">
|
||||
<div class="createPost-main-container">
|
||||
<el-row>
|
||||
<el-col :span="5">
|
||||
<el-form-item label-width="120px" label="room_id:" class="postInfo-container-item" prop="room_id">
|
||||
<el-input v-model="postForm.room_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<el-form-item label-width="120px" label="账号id:" class="postInfo-container-item" prop="account_id">
|
||||
<el-input v-model="postForm.account_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-button style="margin-left: 10px;" type="success" @click="submitForm()">
|
||||
查询
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
v-table-scroll-load="nextStream"
|
||||
:empty-text="emptytext"
|
||||
height="400"
|
||||
:data="ticketconsume"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
prop="idx"
|
||||
label="ID"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="match_room_uuid"
|
||||
label="匹配服房间id"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="account_id"
|
||||
label="账号id"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createtime"
|
||||
label="创建时间"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="modifytime"
|
||||
label="修改时间"
|
||||
width="200"
|
||||
/>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getTicketConsume } from '@/api/player'
|
||||
|
||||
const pagesize = 10
|
||||
|
||||
export default {
|
||||
name: 'TicketConsume',
|
||||
data() {
|
||||
var validatequery = (rule, value, callback) => {
|
||||
if (!this.postForm.room_id) {
|
||||
callback(new Error('请填写'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
postForm: {
|
||||
room_id: '',
|
||||
account_id: ''
|
||||
},
|
||||
rules: {
|
||||
room_id: [{ required: true, validator: validatequery, trigger: 'blur' }]
|
||||
},
|
||||
emptytext: ' ',
|
||||
ticketconsume: [],
|
||||
cursor: 0,
|
||||
remaining: 0
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
submitForm() {
|
||||
console.log('valid begin')
|
||||
try {
|
||||
this.$refs['postForm'].validate((valid) => {
|
||||
console.log('valid end', valid)
|
||||
if (valid) {
|
||||
const querydata = JSON.parse(JSON.stringify(this.postForm))
|
||||
getTicketConsume(querydata, 0, pagesize).then(response => {
|
||||
if (response.code === 0) {
|
||||
console.log('response', response)
|
||||
this.ticketconsume = response.data
|
||||
if (this.ticketconsume === undefined || this.ticketconsume.length <= 0) {
|
||||
this.emptytext = 'No data'
|
||||
}
|
||||
this.cursor = response.page.next_cursor
|
||||
this.remaining = response.page.remaining
|
||||
this.$message({
|
||||
message: '收到回应',
|
||||
type: 'success',
|
||||
duration: 1200,
|
||||
onClose: () => {
|
||||
// this.$router.push('index')
|
||||
}
|
||||
})
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log('error', error)
|
||||
})
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
nextStream() {
|
||||
if (this.remaining > 0) {
|
||||
this.remaining = 0
|
||||
const querydata = JSON.parse(JSON.stringify(this.postForm))
|
||||
getTicketConsume(querydata, this.cursor, pagesize).then(response => {
|
||||
if (response.code === 0) {
|
||||
console.log('next response', response)
|
||||
this.ticketconsume = this.ticketconsume.concat(response.data)
|
||||
this.cursor = response.page.next_cursor
|
||||
this.remaining = response.page.remaining
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/styles/mixin.scss";
|
||||
|
||||
.createPost-container {
|
||||
position: relative;
|
||||
|
||||
.createPost-main-container {
|
||||
padding: 40px 45px 20px 50px;
|
||||
|
||||
.postInfo-container {
|
||||
position: relative;
|
||||
@include clearfix;
|
||||
margin-bottom: 10px;
|
||||
|
||||
.postInfo-container-item {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.word-counter {
|
||||
width: 40px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.article-textarea ::v-deep {
|
||||
textarea {
|
||||
padding-right: 40px;
|
||||
resize: none;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
border-bottom: 1px solid #bfcbd9;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
Loading…
x
Reference in New Issue
Block a user