feat(quality-owner): 增加优质号主、极品专区与无忧租号保险
- 支持保证金余额支付、在线支付开通及后台手动设置审计 - 新增极品专区发布权限、赔付方案与保险结算费率快照 - 优化首页、商品卡和个人中心的优质号主身份展示
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
||||
manualAdminUserRealname,
|
||||
revokeAdminUserRealname,
|
||||
setAdminUserDepositFreeQuota,
|
||||
setAdminUserQualityOwner,
|
||||
unfreezeAdminUser,
|
||||
type AdminUserItem,
|
||||
type AdminUserQuery,
|
||||
@@ -27,6 +28,7 @@ import AdminUserDetailDrawer from '../components/AdminUserDetailDrawer.vue'
|
||||
const adminSession = useAdminSessionStore()
|
||||
const canAdjustWallet = computed(() => adminSession.hasPermission('user:wallet_adjust'))
|
||||
const canAdjustGrowthPoints = computed(() => adminSession.hasPermission('user:growth_points'))
|
||||
const canSetQualityOwner = computed(() => adminSession.hasPermission('user:quality_owner'))
|
||||
const canViewUserDetail = computed(
|
||||
() =>
|
||||
adminSession.hasPermission('wallet:view') ||
|
||||
@@ -65,6 +67,7 @@ const filters = reactive<AdminUserQuery>({
|
||||
keyword: '',
|
||||
status: '',
|
||||
has_deposit_free_quota: false,
|
||||
quality_owner_only: false,
|
||||
})
|
||||
|
||||
const {
|
||||
@@ -87,6 +90,7 @@ function resetFilters() {
|
||||
filters.keyword = ''
|
||||
filters.status = ''
|
||||
filters.has_deposit_free_quota = false
|
||||
filters.quality_owner_only = false
|
||||
queryUsers()
|
||||
}
|
||||
|
||||
@@ -317,6 +321,40 @@ async function handleWalletAdjust() {
|
||||
}
|
||||
}
|
||||
|
||||
async function handleToggleQualityOwner(row: AdminUserItem) {
|
||||
const enabling = row.quality_owner_status !== 'active'
|
||||
try {
|
||||
const { value } = await ElMessageBox.prompt(
|
||||
enabling
|
||||
? '后台手动开通将直接发放优质号主资格并跳过保证金缴纳,请填写原因。'
|
||||
: '取消后用户将无法继续发布到极品专区,已发布的极品商品会下架;用户自缴保证金将退回可用余额。',
|
||||
enabling ? '设置优质号主' : '取消优质号主',
|
||||
{
|
||||
inputPlaceholder: '请填写 2-200 字操作原因',
|
||||
inputValidator: value => {
|
||||
const length = value.trim().length
|
||||
return (length >= 2 && length <= 200) || '请填写 2-200 字操作原因'
|
||||
},
|
||||
confirmButtonText: enabling ? '确认开通' : '确认取消',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}
|
||||
)
|
||||
submitting.value = true
|
||||
await setAdminUserQualityOwner(row.id, {
|
||||
enabled: enabling,
|
||||
reason: value.trim(),
|
||||
})
|
||||
ElMessage.success(enabling ? '已设置为优质号主' : '已取消优质号主')
|
||||
await loadUsers()
|
||||
} catch (error) {
|
||||
if (error === 'cancel' || error === 'close') return
|
||||
ElMessage.error(readError(error, '设置优质号主失败'))
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function moneyCent(value: number | string | undefined) {
|
||||
return formatCent(Number(value || 0))
|
||||
}
|
||||
@@ -363,6 +401,11 @@ function moneyCent(value: number | string | undefined) {
|
||||
仅看有额度
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
<el-form-item label="号主类型">
|
||||
<el-checkbox v-model="filters.quality_owner_only" @change="queryUsers">
|
||||
仅看优质号主
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :icon="Search" :loading="loading" @click="queryUsers"
|
||||
>查询</el-button
|
||||
@@ -382,6 +425,14 @@ function moneyCent(value: number | string | undefined) {
|
||||
<el-table-column label="实名状态" width="100">
|
||||
<template #default="{ row }">{{ realnameStatusLabel(row.realname_status) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="号主类型" width="110">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.quality_owner_status === 'active'" type="warning" effect="light">
|
||||
优质号主
|
||||
</el-tag>
|
||||
<span v-else class="muted-text">普通</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="成长等级" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="success" effect="light">{{
|
||||
@@ -424,7 +475,7 @@ function moneyCent(value: number | string | undefined) {
|
||||
<el-table-column label="注册时间" min-width="160">
|
||||
<template #default="{ row }">{{ formatDateTime(row.created_at) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="400" fixed="right" align="right">
|
||||
<el-table-column label="操作" width="470" fixed="right" align="right">
|
||||
<template #default="{ row }">
|
||||
<div class="table-actions">
|
||||
<el-button
|
||||
@@ -457,6 +508,16 @@ function moneyCent(value: number | string | undefined) {
|
||||
<el-button text type="primary" size="small" @click="openDepositQuota(row)">
|
||||
人工免押
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="canSetQualityOwner"
|
||||
text
|
||||
type="warning"
|
||||
size="small"
|
||||
:loading="submitting"
|
||||
@click="handleToggleQualityOwner(row)"
|
||||
>
|
||||
{{ row.quality_owner_status === 'active' ? '取消优质' : '设为优质' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.realname_status !== 'verified'"
|
||||
text
|
||||
|
||||
Reference in New Issue
Block a user