fix:修复订单列表页面订单待支付状态下点击支付异常的问题
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
// export const URL = "https://my.gxfs123.com/api" //正式服务器
|
||||
export const URL = "https://unifans.gxfs123.com/api" //测试服务器
|
||||
// export const URL = "http://192.168.10.60:8080" //本地调试
|
||||
// export const URL = "http://192.168.10.70:8080" //本地调试
|
||||
|
||||
export const appid = "wx2165f0be356ae7a9" //小程序appid
|
||||
+44
-11
@@ -115,8 +115,12 @@
|
||||
queryById,
|
||||
getOrderByOrderNoScorePayStatus,
|
||||
cancelOrder,
|
||||
confirmPaymentAndRent
|
||||
confirmPaymentAndRent,
|
||||
updateUserBalance
|
||||
} from '../../config/user.js';
|
||||
import {
|
||||
URL
|
||||
} from '../../config/url.js';
|
||||
|
||||
// 初始化状态
|
||||
const currentTab = ref(0);
|
||||
@@ -312,19 +316,48 @@
|
||||
title: '处理中'
|
||||
});
|
||||
|
||||
const res = await confirmPaymentAndRent(order.orderNo);
|
||||
if (res.code === 200) {
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
title: '支付成功',
|
||||
icon: 'success'
|
||||
});
|
||||
// 调用后端创建微信支付订单接口
|
||||
const res = await uni.request({
|
||||
url: `${URL || 'http://127.0.0.1:8080'}/app/wx-payment/create/${order.orderNo}`,
|
||||
method: 'GET',
|
||||
header: {
|
||||
'Authorization': "Bearer " + uni.getStorageSync('token'),
|
||||
'Clientid': uni.getStorageSync('client_id')
|
||||
}
|
||||
});
|
||||
|
||||
if (res.statusCode === 200 && res.data.code === 200) {
|
||||
const payParams = res.data.data;
|
||||
|
||||
// 刷新订单列表
|
||||
await loadOrderList(orderStatusTabs[currentTab.value].status);
|
||||
// 调用微信支付
|
||||
await uni.requestPayment({
|
||||
...payParams,
|
||||
success: async () => {
|
||||
uni.showToast({
|
||||
title: '支付成功',
|
||||
icon: 'success'
|
||||
});
|
||||
|
||||
// 更新用户余额
|
||||
try {
|
||||
await updateUserBalance(order.orderId || order.orderNo);
|
||||
} catch (error) {
|
||||
console.warn('更新用户余额失败:', error);
|
||||
}
|
||||
|
||||
// 刷新订单列表
|
||||
await loadOrderList(orderStatusTabs[currentTab.value].status);
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('支付失败:', err);
|
||||
throw new Error('支付失败,请重试');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
throw new Error(res.msg || '支付失败');
|
||||
throw new Error(res.data.msg || '创建支付订单失败');
|
||||
}
|
||||
|
||||
uni.hideLoading();
|
||||
} catch (error) {
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
"use strict";const t=require("../../common/vendor.js"),e=require("../../common/assets.js"),a=require("../../config/user.js"),s={__name:"index",setup(s){const o=t.ref(0),r=t.ref([]),n=t.reactive({0:{text:"待支付",class:"status-waiting"},1:{text:"使用中",class:"status-using"},2:{text:"已完成",class:"status-finished"},3:{text:"已取消",class:"status-cancelled"},waiting_for_payment:{text:"待支付",class:"status-waiting"},in_used:{text:"使用中",class:"status-using"},used_done:{text:"已完成",class:"status-finished"},order_cancelled:{text:"已取消",class:"status-cancelled"}}),d=t.reactive([{text:"全部",status:[]},{text:"待付款",status:["waiting_for_payment"]},{text:"使用中",status:["in_used"]},{text:"已完成",status:["used_done"]},{text:"已取消",status:["order_cancelled"]}]);t.onLoad((async t=>{if(t&&t.orderId)try{const e=await a.queryById(t.orderId);if(200===e.code&&e.data){const t=e.data,a=t.startTime||t.createTime||"",s={orderNo:t.orderId,status:t.orderStatus,deviceId:t.deviceNo,payWay:t.payWay,startTime:a,endTime:t.endTime||"",amount:t.payAmount||t.actualDeviceAmount||"0.00"};r.value=[s,...r.value];const o=d.findIndex((e=>e.status.includes(t.orderStatus)));-1!==o&&i(o)}}catch(e){console.error("获取订单详情失败:",e)}await c()}));const i=async t=>{o.value=t;const e=d[t].status[0];await c(e)},c=async e=>{try{null!=e&&(e={orderStatus:e});const t=await a.getOrderList(e);200===t.code&&t.data&&t.data.records&&(r.value=t.data.records.map((t=>{const e=t.startTime||t.createTime||"";return{orderNo:t.orderNo,orderId:t.orderId,orderStatus:t.orderStatus,deviceId:t.deviceNo,payWay:t.payWay,startTime:e,endTime:t.endTime||"",amount:t.payAmount||t.actualDeviceAmount||"0.00"}})))}catch(s){console.error("获取订单列表失败:",s),t.index.showToast({title:"获取订单列表失败",icon:"none"})}};return(s,u)=>t.e({a:t.f(d,((e,a,s)=>({a:t.t(e.text),b:a,c:o.value===a?1:"",d:t.o((t=>i(a)),a)}))),b:0===r.value.length},(r.value.length,{}),{c:t.f(r.value,((s,r,i)=>{var u,l;return t.e({a:t.t(s.orderNo),b:t.t(null==(u=n[s.orderStatus])?void 0:u.text),c:t.n(null==(l=n[s.orderStatus])?void 0:l.class),d:t.t(s.deviceId),e:"wx_score_pay"==s.payWay},"wx_score_pay"==s.payWay?{f:e._imports_0$2}:{},{g:t.t(s.startTime),h:t.t(s.endTime||"-"),i:t.t(s.amount),j:"waiting_for_payment"===s.status||"waiting_for_payment"===s.orderStatus},"waiting_for_payment"===s.status||"waiting_for_payment"===s.orderStatus?{k:t.o((e=>(async e=>{try{t.index.showLoading({title:"处理中"});const s=await a.confirmPaymentAndRent(e.orderNo);if(200!==s.code)throw new Error(s.msg||"支付失败");t.index.hideLoading(),t.index.showToast({title:"支付成功",icon:"success"}),await c(d[o.value].status)}catch(s){t.index.hideLoading(),t.index.showToast({title:s.message||"支付失败",icon:"none"})}})(s)),r)}:{},{l:"waiting_for_payment"===s.status||"waiting_for_payment"===s.orderStatus},"waiting_for_payment"===s.status||"waiting_for_payment"===s.orderStatus?{m:t.o((e=>(async e=>{try{t.index.showModal({title:"确认取消",content:"确定要取消此订单吗?",success:async s=>{if(s.confirm){t.index.showLoading({title:"处理中"});const s=await a.cancelOrder({orderId:e.orderNo});if(!s)throw new Error(s.msg||"取消订单失败");t.index.hideLoading(),t.index.showToast({title:"订单已取消",icon:"success"}),await c()}}})}catch(s){t.index.hideLoading(),t.index.showToast({title:s.message||"取消订单失败",icon:"none"})}})(s)),r)}:{},{n:"in_used"==s.status||"in_used"==s.orderStatus},"in_used"==s.status||"in_used"==s.orderStatus?{o:t.o((e=>{return a=s.deviceId,o=s.orderId,console.log(o),void t.index.navigateTo({url:`/pages/return/index?deviceId=${a}&orderId=${o}`});var a,o}),r)}:{},{p:t.o((e=>(e=>{t.index.navigateTo({url:`/pages/order/details?orderId=${e.orderId||e.orderNo}`})})(s)),r),q:r})}))})}},o=t._export_sfc(s,[["__scopeId","data-v-2998ff8e"]]);wx.createPage(o);
|
||||
"use strict";const e=require("../../common/vendor.js"),t=require("../../common/assets.js"),a=require("../../config/user.js"),s=require("../../config/url.js"),r={__name:"index",setup(r){const o=e.ref(0),n=e.ref([]),d=e.reactive({0:{text:"待支付",class:"status-waiting"},1:{text:"使用中",class:"status-using"},2:{text:"已完成",class:"status-finished"},3:{text:"已取消",class:"status-cancelled"},waiting_for_payment:{text:"待支付",class:"status-waiting"},in_used:{text:"使用中",class:"status-using"},used_done:{text:"已完成",class:"status-finished"},order_cancelled:{text:"已取消",class:"status-cancelled"}}),i=e.reactive([{text:"全部",status:[]},{text:"待付款",status:["waiting_for_payment"]},{text:"使用中",status:["in_used"]},{text:"已完成",status:["used_done"]},{text:"已取消",status:["order_cancelled"]}]);e.onLoad((async e=>{if(e&&e.orderId)try{const t=await a.queryById(e.orderId);if(200===t.code&&t.data){const e=t.data,a=e.startTime||e.createTime||"",s={orderNo:e.orderId,status:e.orderStatus,deviceId:e.deviceNo,payWay:e.payWay,startTime:a,endTime:e.endTime||"",amount:e.payAmount||e.actualDeviceAmount||"0.00"};n.value=[s,...n.value];const r=i.findIndex((t=>t.status.includes(e.orderStatus)));-1!==r&&c(r)}}catch(t){console.error("获取订单详情失败:",t)}await u()}));const c=async e=>{o.value=e;const t=i[e].status[0];await u(t)},u=async t=>{try{null!=t&&(t={orderStatus:t});const e=await a.getOrderList(t);200===e.code&&e.data&&e.data.records&&(n.value=e.data.records.map((e=>{const t=e.startTime||e.createTime||"";return{orderNo:e.orderNo,orderId:e.orderId,orderStatus:e.orderStatus,deviceId:e.deviceNo,payWay:e.payWay,startTime:t,endTime:e.endTime||"",amount:e.payAmount||e.actualDeviceAmount||"0.00"}})))}catch(s){console.error("获取订单列表失败:",s),e.index.showToast({title:"获取订单列表失败",icon:"none"})}};return(r,l)=>e.e({a:e.f(i,((t,a,s)=>({a:e.t(t.text),b:a,c:o.value===a?1:"",d:e.o((e=>c(a)),a)}))),b:0===n.value.length},(n.value.length,{}),{c:e.f(n.value,((r,n,c)=>{var l,m;return e.e({a:e.t(r.orderNo),b:e.t(null==(l=d[r.orderStatus])?void 0:l.text),c:e.n(null==(m=d[r.orderStatus])?void 0:m.class),d:e.t(r.deviceId),e:"wx_score_pay"==r.payWay},"wx_score_pay"==r.payWay?{f:t._imports_0$2}:{},{g:e.t(r.startTime),h:e.t(r.endTime||"-"),i:e.t(r.amount),j:"waiting_for_payment"===r.status||"waiting_for_payment"===r.orderStatus},"waiting_for_payment"===r.status||"waiting_for_payment"===r.orderStatus?{k:e.o((t=>(async t=>{try{e.index.showLoading({title:"处理中"});const r=await e.index.request({url:`${s.URL||"http://127.0.0.1:8080"}/app/wx-payment/create/${t.orderNo}`,method:"GET",header:{Authorization:"Bearer "+e.index.getStorageSync("token"),Clientid:e.index.getStorageSync("client_id")}});if(200!==r.statusCode||200!==r.data.code)throw new Error(r.data.msg||"创建支付订单失败");{const s=r.data.data;await e.index.requestPayment({...s,success:async()=>{e.index.showToast({title:"支付成功",icon:"success"});try{await a.updateUserBalance(t.orderId||t.orderNo)}catch(s){console.warn("更新用户余额失败:",s)}await u(i[o.value].status)},fail:e=>{throw console.error("支付失败:",e),new Error("支付失败,请重试")}})}e.index.hideLoading()}catch(r){e.index.hideLoading(),e.index.showToast({title:r.message||"支付失败",icon:"none"})}})(r)),n)}:{},{l:"waiting_for_payment"===r.status||"waiting_for_payment"===r.orderStatus},"waiting_for_payment"===r.status||"waiting_for_payment"===r.orderStatus?{m:e.o((t=>(async t=>{try{e.index.showModal({title:"确认取消",content:"确定要取消此订单吗?",success:async s=>{if(s.confirm){e.index.showLoading({title:"处理中"});const s=await a.cancelOrder({orderId:t.orderNo});if(!s)throw new Error(s.msg||"取消订单失败");e.index.hideLoading(),e.index.showToast({title:"订单已取消",icon:"success"}),await u()}}})}catch(s){e.index.hideLoading(),e.index.showToast({title:s.message||"取消订单失败",icon:"none"})}})(r)),n)}:{},{n:"in_used"==r.status||"in_used"==r.orderStatus},"in_used"==r.status||"in_used"==r.orderStatus?{o:e.o((t=>{return a=r.deviceId,s=r.orderId,console.log(s),void e.index.navigateTo({url:`/pages/return/index?deviceId=${a}&orderId=${s}`});var a,s}),n)}:{},{p:e.o((t=>(t=>{e.index.navigateTo({url:`/pages/order/details?orderId=${t.orderId||t.orderNo}`})})(r)),n),q:n})}))})}},o=e._export_sfc(r,[["__scopeId","data-v-57aa6fd9"]]);wx.createPage(o);
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<view class="order-container data-v-2998ff8e"><view class="status-tabs data-v-2998ff8e"><view wx:for="{{a}}" wx:for-item="tab" wx:key="b" class="{{['tab-item', 'data-v-2998ff8e', tab.c && 'active']}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="order-list data-v-2998ff8e"><view wx:if="{{b}}" class="empty-state data-v-2998ff8e"><view class="empty-icon data-v-2998ff8e"></view><text class="empty-text data-v-2998ff8e">暂无订单记录</text></view><view wx:for="{{c}}" wx:for-item="order" wx:key="q" class="order-item data-v-2998ff8e"><view class="order-header data-v-2998ff8e"><view class="order-id data-v-2998ff8e"><text class="data-v-2998ff8e">订单号:{{order.a}}</text></view><view class="{{['order-status', 'data-v-2998ff8e', order.c]}}">{{order.b}}</view></view><view class="order-body data-v-2998ff8e"><view class="device-info data-v-2998ff8e"><view class="device-left data-v-2998ff8e"><view class="device-name data-v-2998ff8e">共享风扇</view><view class="device-id data-v-2998ff8e">设备号:{{order.d}}</view></view><view class="device-right data-v-2998ff8e"><view wx:if="{{order.e}}" class="payment-badge wx-score data-v-2998ff8e"><image src="{{order.f}}" mode="aspectFit" class="badge-icon data-v-2998ff8e"></image><view class="badge-text data-v-2998ff8e"><text class="data-v-2998ff8e">微信支付分</text><text class="divider data-v-2998ff8e">|</text><text class="highlight data-v-2998ff8e">免押租借</text></view></view><view wx:else class="payment-badge deposit data-v-2998ff8e"><text class="badge-text data-v-2998ff8e">押金租借</text></view></view></view><view class="order-times data-v-2998ff8e"><view class="time-row data-v-2998ff8e"><text class="time-label data-v-2998ff8e">开始时间:</text><text class="time-value data-v-2998ff8e">{{order.g}}</text></view><view class="time-row data-v-2998ff8e"><text class="time-label data-v-2998ff8e">结束时间:</text><text class="time-value data-v-2998ff8e">{{order.h}}</text></view></view></view><view class="order-footer data-v-2998ff8e"><view class="price data-v-2998ff8e">¥{{order.i}}</view><view class="actions data-v-2998ff8e"><view wx:if="{{order.j}}" class="action-item primary data-v-2998ff8e" bindtap="{{order.k}}"> 立即支付 </view><view wx:if="{{order.l}}" class="action-item secondary data-v-2998ff8e" bindtap="{{order.m}}"> 取消订单 </view><view wx:if="{{order.n}}" class="action-item primary data-v-2998ff8e" bindtap="{{order.o}}"> 归还设备 </view><view class="action-item secondary data-v-2998ff8e" bindtap="{{order.p}}"> 查看详情 </view></view></view></view></view></view>
|
||||
<view class="order-container data-v-57aa6fd9"><view class="status-tabs data-v-57aa6fd9"><view wx:for="{{a}}" wx:for-item="tab" wx:key="b" class="{{['tab-item', 'data-v-57aa6fd9', tab.c && 'active']}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="order-list data-v-57aa6fd9"><view wx:if="{{b}}" class="empty-state data-v-57aa6fd9"><view class="empty-icon data-v-57aa6fd9"></view><text class="empty-text data-v-57aa6fd9">暂无订单记录</text></view><view wx:for="{{c}}" wx:for-item="order" wx:key="q" class="order-item data-v-57aa6fd9"><view class="order-header data-v-57aa6fd9"><view class="order-id data-v-57aa6fd9"><text class="data-v-57aa6fd9">订单号:{{order.a}}</text></view><view class="{{['order-status', 'data-v-57aa6fd9', order.c]}}">{{order.b}}</view></view><view class="order-body data-v-57aa6fd9"><view class="device-info data-v-57aa6fd9"><view class="device-left data-v-57aa6fd9"><view class="device-name data-v-57aa6fd9">共享风扇</view><view class="device-id data-v-57aa6fd9">设备号:{{order.d}}</view></view><view class="device-right data-v-57aa6fd9"><view wx:if="{{order.e}}" class="payment-badge wx-score data-v-57aa6fd9"><image src="{{order.f}}" mode="aspectFit" class="badge-icon data-v-57aa6fd9"></image><view class="badge-text data-v-57aa6fd9"><text class="data-v-57aa6fd9">微信支付分</text><text class="divider data-v-57aa6fd9">|</text><text class="highlight data-v-57aa6fd9">免押租借</text></view></view><view wx:else class="payment-badge deposit data-v-57aa6fd9"><text class="badge-text data-v-57aa6fd9">押金租借</text></view></view></view><view class="order-times data-v-57aa6fd9"><view class="time-row data-v-57aa6fd9"><text class="time-label data-v-57aa6fd9">开始时间:</text><text class="time-value data-v-57aa6fd9">{{order.g}}</text></view><view class="time-row data-v-57aa6fd9"><text class="time-label data-v-57aa6fd9">结束时间:</text><text class="time-value data-v-57aa6fd9">{{order.h}}</text></view></view></view><view class="order-footer data-v-57aa6fd9"><view class="price data-v-57aa6fd9">¥{{order.i}}</view><view class="actions data-v-57aa6fd9"><view wx:if="{{order.j}}" class="action-item primary data-v-57aa6fd9" bindtap="{{order.k}}"> 立即支付 </view><view wx:if="{{order.l}}" class="action-item secondary data-v-57aa6fd9" bindtap="{{order.m}}"> 取消订单 </view><view wx:if="{{order.n}}" class="action-item primary data-v-57aa6fd9" bindtap="{{order.o}}"> 归还设备 </view><view class="action-item secondary data-v-57aa6fd9" bindtap="{{order.p}}"> 查看详情 </view></view></view></view></view></view>
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["// export const URL = \"https://my.gxfs123.com/api\" //正式服务器\r\nexport const URL = \"https://unifans.gxfs123.com/api\" //测试服务器\r\n// export const URL = \"http://192.168.10.60:8080\" \t\t//本地调试\r\n\r\nexport const appid = \"wx2165f0be356ae7a9\" //小程序appid"],"names":[],"mappings":";AACY,MAAC,MAAM;AAGP,MAAC,QAAQ;;;"}
|
||||
{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["// export const URL = \"https://my.gxfs123.com/api\" //正式服务器\r\nexport const URL = \"https://unifans.gxfs123.com/api\" //测试服务器\r\n// export const URL = \"http://192.168.10.70:8080\" \t\t//本地调试\r\n\r\nexport const appid = \"wx2165f0be356ae7a9\" //小程序appid"],"names":[],"mappings":";AACY,MAAC,MAAM;AAGP,MAAC,QAAQ;;;"}
|
||||
File diff suppressed because one or more lines are too long
+34
-11
@@ -2,6 +2,7 @@
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const common_assets = require("../../common/assets.js");
|
||||
const config_user = require("../../config/user.js");
|
||||
const config_url = require("../../config/url.js");
|
||||
const _sfc_main = {
|
||||
__name: "index",
|
||||
setup(__props) {
|
||||
@@ -88,7 +89,7 @@ const _sfc_main = {
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:222", "获取订单详情失败:", error);
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:226", "获取订单详情失败:", error);
|
||||
}
|
||||
}
|
||||
await loadOrderList();
|
||||
@@ -122,7 +123,7 @@ const _sfc_main = {
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:266", "获取订单列表失败:", error);
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:270", "获取订单列表失败:", error);
|
||||
common_vendor.index.showToast({
|
||||
title: "获取订单列表失败",
|
||||
icon: "none"
|
||||
@@ -130,7 +131,7 @@ const _sfc_main = {
|
||||
}
|
||||
};
|
||||
const navigateToReturn = (deviceId, orderId) => {
|
||||
common_vendor.index.__f__("log", "at pages/order/index.vue:295", orderId);
|
||||
common_vendor.index.__f__("log", "at pages/order/index.vue:299", orderId);
|
||||
common_vendor.index.navigateTo({
|
||||
url: `/pages/return/index?deviceId=${deviceId}&orderId=${orderId}`
|
||||
});
|
||||
@@ -145,17 +146,39 @@ const _sfc_main = {
|
||||
common_vendor.index.showLoading({
|
||||
title: "处理中"
|
||||
});
|
||||
const res = await config_user.confirmPaymentAndRent(order.orderNo);
|
||||
if (res.code === 200) {
|
||||
common_vendor.index.hideLoading();
|
||||
common_vendor.index.showToast({
|
||||
title: "支付成功",
|
||||
icon: "success"
|
||||
const res = await common_vendor.index.request({
|
||||
url: `${config_url.URL || "http://127.0.0.1:8080"}/app/wx-payment/create/${order.orderNo}`,
|
||||
method: "GET",
|
||||
header: {
|
||||
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
|
||||
"Clientid": common_vendor.index.getStorageSync("client_id")
|
||||
}
|
||||
});
|
||||
if (res.statusCode === 200 && res.data.code === 200) {
|
||||
const payParams = res.data.data;
|
||||
await common_vendor.index.requestPayment({
|
||||
...payParams,
|
||||
success: async () => {
|
||||
common_vendor.index.showToast({
|
||||
title: "支付成功",
|
||||
icon: "success"
|
||||
});
|
||||
try {
|
||||
await config_user.updateUserBalance(order.orderId || order.orderNo);
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("warn", "at pages/order/index.vue:345", "更新用户余额失败:", error);
|
||||
}
|
||||
await loadOrderList(orderStatusTabs[currentTab.value].status);
|
||||
},
|
||||
fail: (err) => {
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:352", "支付失败:", err);
|
||||
throw new Error("支付失败,请重试");
|
||||
}
|
||||
});
|
||||
await loadOrderList(orderStatusTabs[currentTab.value].status);
|
||||
} else {
|
||||
throw new Error(res.msg || "支付失败");
|
||||
throw new Error(res.data.msg || "创建支付订单失败");
|
||||
}
|
||||
common_vendor.index.hideLoading();
|
||||
} catch (error) {
|
||||
common_vendor.index.hideLoading();
|
||||
common_vendor.index.showToast({
|
||||
|
||||
Reference in New Issue
Block a user