v0.0.5 用户认证审核

This commit is contained in:
zpc 2025-11-16 22:11:15 +08:00
parent 89d620dd91
commit eed67d80f2
8 changed files with 107 additions and 120 deletions

View File

@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using ZR.LiveForum.Model.Liveforum.Dto;
using ZR.LiveForum.Model.Liveforum;
using ZR.Service.Liveforum.ILiveforumService;
@ -7,13 +7,13 @@ using ZR.Service.Liveforum.ILiveforumService;
namespace ZR.Admin.WebApi.Controllers.Liveforum
{
/// <summary>
/// 认证申请
/// 认证申请记录
/// </summary>
[Route("liveforum/tusercertifications")]
public class T_UserCertificationsController : BaseController
{
/// <summary>
/// 认证申请接口
/// 认证申请记录接口
/// </summary>
private readonly IT_UserCertificationsService _T_UserCertificationsService;
@ -23,7 +23,7 @@ namespace ZR.Admin.WebApi.Controllers.Liveforum
}
/// <summary>
/// 查询认证申请列表
/// 查询认证申请记录列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
@ -37,7 +37,7 @@ namespace ZR.Admin.WebApi.Controllers.Liveforum
/// <summary>
/// 查询认证申请详情
/// 查询认证申请记录详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
@ -46,37 +46,37 @@ namespace ZR.Admin.WebApi.Controllers.Liveforum
public IActionResult GetT_UserCertifications(long Id)
{
var response = _T_UserCertificationsService.GetInfo(Id);
var info = response.Adapt<T_UserCertificationsDto>();
return SUCCESS(info);
}
/// <summary>
/// 添加认证申请
/// 添加认证申请记录
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "tusercertifications:add")]
[Log(Title = "认证申请", BusinessType = BusinessType.INSERT)]
[Log(Title = "认证申请记录", BusinessType = BusinessType.INSERT)]
public IActionResult AddT_UserCertifications([FromBody] T_UserCertificationsDto parm)
{
var modal = parm.Adapt<T_UserCertifications>().ToCreate(HttpContext);
modal.Status = 0;
var response = _T_UserCertificationsService.AddT_UserCertifications(modal);
return SUCCESS(response);
}
/// <summary>
/// 更新认证申请
/// 更新认证申请记录
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "tusercertifications:edit")]
[Log(Title = "认证申请", BusinessType = BusinessType.UPDATE)]
[Log(Title = "认证申请记录", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateT_UserCertifications([FromBody] T_UserCertificationsDto parm)
{
if (parm.Id == 0)
{
throw new CustomException(ResultCode.CUSTOM_ERROR, "请求参数为空");
@ -93,13 +93,13 @@ namespace ZR.Admin.WebApi.Controllers.Liveforum
}
/// <summary>
/// 删除认证申请
/// 删除认证申请记录
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "tusercertifications:delete")]
[Log(Title = "认证申请", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteT_UserCertifications([FromRoute]string ids)
[Log(Title = "认证申请记录", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteT_UserCertifications([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert<long>(ids);
@ -107,10 +107,10 @@ namespace ZR.Admin.WebApi.Controllers.Liveforum
}
/// <summary>
/// 导出认证申请
/// 导出认证申请记录
/// </summary>
/// <returns></returns>
[Log(Title = "认证申请", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[Log(Title = "认证申请记录", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[HttpGet("export")]
[ActionPermissionFilter(Permission = "tusercertifications:export")]
public IActionResult Export([FromQuery] T_UserCertificationsQueryDto parm)
@ -120,7 +120,7 @@ namespace ZR.Admin.WebApi.Controllers.Liveforum
{
return ToResponse(ResultCode.FAIL, "没有要导出的数据");
}
var result = ExportExcelMini(list, "认证申请表", "认证申请表");
var result = ExportExcelMini(list, "认证申请记录", "认证申请记录");
return ExportExcel(result.Item2, result.Item1);
}

View File

@ -2,77 +2,78 @@
namespace ZR.LiveForum.Model.Liveforum.Dto
{
/// <summary>
/// 认证申请查询对象
/// 认证申请记录查询对象
/// </summary>
public class T_UserCertificationsQueryDto : PagerInfo
{
public long ? UserId { get; set; }
public string ? CertificationType { get; set; }
public int ? Status { get; set; }
}
/// <summary>
/// 认证申请输入输出对象
/// 认证申请记录输入输出对象
/// </summary>
public class T_UserCertificationsDto
{
[Required(ErrorMessage = "Id不能为空")]
[ExcelColumn(Name = "Id")]
[ExcelColumnName("Id")]
public long Id { get; set; }
public long Id { get; set; }
[Required(ErrorMessage = "用户id不能为空")]
[ExcelColumn(Name = "用户id")]
[ExcelColumnName("用户id")]
public long UserId { get; set; }
public long UserId { get; set; }
[Required(ErrorMessage = "认证类型1-SK认证不能为空")]
[ExcelColumn(Name = "认证类型1-SK认证")]
[ExcelColumnName("认证类型1-SK认证")]
public string CertificationType { get; set; }
[Required(ErrorMessage = "认证类型不能为空")]
[ExcelColumn(Name = "认证类型")]
[ExcelColumnName("认证类型")]
public string CertificationType { get; set; }
[ExcelColumn(Name = "用户的抖音账号")]
[ExcelColumnName("用户的抖音账号")]
public string DouyinId { get; set; }
public string ? DouyinId { get; set; }
[ExcelColumn(Name = "用户联系方式")]
[ExcelColumnName("用户联系方式")]
public string ContactInfo { get; set; }
public string ? ContactInfo { get; set; }
[ExcelColumn(Name = "认证视频URL地址")]
[ExcelColumnName("认证视频URL地址")]
public string VideoUrl { get; set; }
public string ? VideoUrl { get; set; }
[ExcelColumn(Name = "粉丝牌等级")]
[ExcelColumnName("粉丝牌等级")]
public int? FanLevel { get; set; }
public int ? FanLevel { get; set; }
[ExcelColumn(Name = "审核状态")]
[ExcelColumnName("审核状态")]
public int? Status { get; set; }
public int ? Status { get; set; }
[ExcelColumn(Name = "审核拒绝原因")]
[ExcelColumnName("审核拒绝原因")]
public string RejectReason { get; set; }
public string ? RejectReason { get; set; }
[ExcelColumn(Name = "审核人用户ID")]
[ExcelColumnName("审核人用户ID")]
public long? ReviewerId { get; set; }
public long ? ReviewerId { get; set; }
[ExcelColumn(Name = "审核完成时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("审核完成时间")]
public DateTime? ReviewedAt { get; set; }
public DateTime ? ReviewedAt { get; set; }
[ExcelColumn(Name = "认证申请创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("认证申请创建时间")]
public DateTime? CreatedAt { get; set; }
public DateTime ? CreatedAt { get; set; }
[ExcelColumn(Name = "记录更新时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("记录更新时间")]
public DateTime? UpdatedAt { get; set; }
public DateTime ? UpdatedAt { get; set; }
[ExcelColumn(Name = "认证类型1-SK认证")]
[ExcelColumn(Name = "认证类型")]
public string? CertificationTypeLabel { get; set; }
[ExcelColumn(Name = "审核状态")]
public string? StatusLabel { get; set; }

View File

@ -1,8 +1,8 @@

namespace ZR.LiveForum.Model.Liveforum
{
/// <summary>
/// 认证申请
/// 认证申请记录
/// </summary>
[SugarTable("T_UserCertifications")]
[Tenant("liveforum")]
@ -20,24 +20,24 @@ namespace ZR.LiveForum.Model.Liveforum
public long UserId { get; set; }
/// <summary>
/// 认证类型1-SK认证
/// 认证类型
/// </summary>
public string CertificationType { get; set; }
/// <summary>
/// 用户的抖音账号
/// </summary>
public string DouyinId { get; set; }
public string? DouyinId { get; set; }
/// <summary>
/// 用户联系方式
/// </summary>
public string ContactInfo { get; set; }
public string? ContactInfo { get; set; }
/// <summary>
/// 认证视频URL地址
/// </summary>
public string VideoUrl { get; set; }
public string? VideoUrl { get; set; }
/// <summary>
/// 粉丝牌等级
@ -52,7 +52,7 @@ namespace ZR.LiveForum.Model.Liveforum
/// <summary>
/// 审核拒绝原因
/// </summary>
public string RejectReason { get; set; }
public string? RejectReason { get; set; }
/// <summary>
/// 审核人用户ID

View File

@ -4,7 +4,7 @@ using ZR.LiveForum.Model.Liveforum;
namespace ZR.Service.Liveforum.ILiveforumService
{
/// <summary>
/// 认证申请service接口
/// 认证申请记录service接口
/// </summary>
public interface IT_UserCertificationsService : IBaseService<T_UserCertifications>
{

View File

@ -1,4 +1,4 @@
using Infrastructure.Attribute;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.LiveForum.Model.Liveforum.Dto;
using ZR.LiveForum.Model.Liveforum;
@ -8,13 +8,13 @@ using ZR.Service.Liveforum.ILiveforumService;
namespace ZR.Service.Liveforum
{
/// <summary>
/// 认证申请Service业务层处理
/// 认证申请记录Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IT_UserCertificationsService), ServiceLifetime = LifeTime.Transient)]
public class T_UserCertificationsService : BaseService<T_UserCertifications>, IT_UserCertificationsService
{
/// <summary>
/// 查询认证申请列表
/// 查询认证申请记录列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
@ -46,17 +46,18 @@ namespace ZR.Service.Liveforum
}
/// <summary>
/// 添加认证申请
/// 添加认证申请记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public T_UserCertifications AddT_UserCertifications(T_UserCertifications model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改认证申请
/// 修改认证申请记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
@ -66,7 +67,7 @@ namespace ZR.Service.Liveforum
}
/// <summary>
/// 导出认证申请
/// 导出认证申请记录
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
@ -99,6 +100,7 @@ namespace ZR.Service.Liveforum
predicate = predicate.AndIF(parm.UserId != null, it => it.UserId == parm.UserId);
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.CertificationType), it => it.CertificationType == parm.CertificationType);
predicate = predicate.AndIF(parm.Status != null, it => it.Status == parm.Status);
return predicate;
}
}

View File

@ -2,7 +2,7 @@ import request from '@/utils/request'
import { downFile } from '@/utils/request'
/**
* 认证申请分页查询
* 认证申请记录分页查询
* @param {查询条件} data
*/
export function listtusercertifications(query) {
@ -14,7 +14,7 @@ export function listtusercertifications(query) {
}
/**
* 新增认证申请
* 新增认证申请记录
* @param data
*/
export function addtusercertifications(data) {
@ -25,7 +25,7 @@ export function addtusercertifications(data) {
})
}
/**
* 修改认证申请
* 修改认证申请记录
* @param data
*/
export function updatetusercertifications(data) {
@ -36,7 +36,7 @@ export function updatetusercertifications(data) {
})
}
/**
* 获取认证申请详情
* 获取认证申请记录详情
* @param {Id}
*/
export function gettusercertifications(id) {
@ -47,7 +47,7 @@ export function gettusercertifications(id) {
}
/**
* 删除认证申请
* 删除认证申请记录
* @param {主键} pid
*/
export function deltusercertifications(pid) {
@ -56,7 +56,7 @@ export function deltusercertifications(pid) {
method: 'POST'
})
}
// 导出认证申请
// 导出认证申请记录
export async function exporttusercertifications(query) {
await downFile('liveforum/tusercertifications/export', { ...query })
}

View File

@ -1,5 +1,5 @@
<!--
* @Descripttion: (认证申请/T_UserCertifications)
* @Descripttion: (认证申请记录/T_UserCertifications)
* @Author: (admin)
* @Date: (2025-11-16)
-->
@ -9,14 +9,22 @@
<el-form-item label="用户id" prop="userId">
<el-input v-model.number="queryParams.userId" placeholder="请输入用户id" />
</el-form-item>
<el-form-item label="认证类型1-SK认证" prop="certificationType">
<el-select clearable v-model="queryParams.certificationType" placeholder="请选择认证类型1-SK认证">
<el-form-item label="认证类型" prop="certificationType">
<el-select clearable v-model="queryParams.certificationType" placeholder="请选择认证类型">
<el-option v-for="item in options.liveforum_sk " :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
<span class="fl">{{ item.dictLabel }}</span>
<span class="fr" style="color: var(--el-text-color-secondary);">{{ item.dictValue }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="status">
<el-select clearable v-model="queryParams.status" placeholder="请选择审核状态">
<el-option v-for="item in options.liveforum_sk_review " :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
<span class="fl">{{ item.dictLabel }}</span>
<span class="fr" style="color: var(--el-text-color-secondary);">{{ item.dictValue }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="handleQuery">{{ $t('btn.search') }}</el-button>
<el-button icon="refresh" @click="resetQuery">{{ $t('btn.reset') }}</el-button>
@ -48,7 +56,7 @@
>
<el-table-column prop="id" label="Id" align="center" v-if="columns.showColumn('id')"/>
<el-table-column prop="userId" label="用户id" align="center" v-if="columns.showColumn('userId')"/>
<el-table-column prop="certificationType" label="认证类型1-SK认证" align="center" v-if="columns.showColumn('certificationType')">
<el-table-column prop="certificationType" label="认证类型" align="center" v-if="columns.showColumn('certificationType')">
<template #default="scope">
<dict-tag :options=" options.liveforum_sk " :value="scope.row.certificationType" />
</template>
@ -90,8 +98,8 @@
</el-col>
<el-col :lg="12">
<el-form-item label="认证类型1-SK认证" prop="certificationType">
<el-select v-model="form.certificationType" placeholder="请选择认证类型1-SK认证">
<el-form-item label="认证类型" prop="certificationType">
<el-select v-model="form.certificationType" placeholder="请选择认证类型">
<el-option
v-for="item in options.liveforum_sk"
:key="item.dictValue"
@ -120,62 +128,11 @@
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="审核状态" prop="status">
<el-select v-model="form.status" placeholder="请选择审核状态">
<el-option
v-for="item in options.liveforum_sk_review"
:key="item.dictValue"
:label="item.dictLabel"
:value="parseInt(item.dictValue)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="审核拒绝原因" prop="rejectReason">
<el-input v-model="form.rejectReason" placeholder="请输入审核拒绝原因" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="审核人用户ID" prop="reviewerId">
<el-input v-model.number="form.reviewerId" placeholder="请输入审核人用户ID" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="审核完成时间" prop="reviewedAt">
<el-date-picker
v-model="form.reviewedAt"
type="datetime"
placeholder="选择日期时间"
value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="认证申请创建时间" prop="createdAt">
<el-date-picker
v-model="form.createdAt"
type="datetime"
placeholder="选择日期时间"
value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="记录更新时间" prop="updatedAt">
<el-date-picker
v-model="form.updatedAt"
type="datetime"
placeholder="选择日期时间"
value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer v-if="opertype != 3">
@ -203,11 +160,12 @@ const queryParams = reactive({
sortType: 'desc',
userId: undefined,
certificationType: undefined,
status: undefined,
})
const columns = ref([
{ visible: true, align: 'center', type: '', prop: 'id', label: 'Id' },
{ visible: true, align: 'center', type: '', prop: 'userId', label: '用户id' },
{ visible: true, align: 'center', type: 'dict', prop: 'certificationType', label: '认证类型1-SK认证' ,showOverflowTooltip: true ,dictType: 'liveforum_sk' },
{ visible: true, align: 'center', type: 'dict', prop: 'certificationType', label: '认证类型' ,showOverflowTooltip: true ,dictType: 'liveforum_sk' },
{ visible: true, align: 'center', type: '', prop: 'douyinId', label: '用户的抖音账号' ,showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'contactInfo', label: '用户联系方式' ,showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'videoUrl', label: '认证视频URL地址' ,showOverflowTooltip: true },
@ -288,10 +246,10 @@ const state = reactive({
form: {},
rules: {
userId: [{ required: true, message: "用户id不能为空", trigger: "blur" , type: "number" }],
certificationType: [{ required: true, message: "认证类型1-SK认证不能为空", trigger: "change" }],
certificationType: [{ required: true, message: "认证类型不能为空", trigger: "change" }],
},
options: {
// 1-SK eg:{ dictLabel: '', dictValue: '0'}
// eg:{ dictLabel: '', dictValue: '0'}
liveforum_sk: [],
// eg:{ dictLabel: '', dictValue: '0'}
liveforum_sk_review: [],
@ -351,7 +309,7 @@ function handleAdd() {
reset();
open.value = true
state.submitLoading = false
title.value = '添加认证申请'
title.value = '添加认证申请记录'
opertype.value = 1
}
//
@ -362,7 +320,7 @@ function handleUpdate(row) {
const { code, data } = res
if (code == 200) {
open.value = true
title.value = '修改认证申请'
title.value = '修改认证申请记录'
opertype.value = 2
form.value = {
@ -427,7 +385,7 @@ function handleDelete(row) {
//
function handleExport() {
proxy
.$confirm("是否确认导出认证申请数据项?", "警告", {
.$confirm("是否确认导出认证申请记录数据项?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",

View File

@ -0,0 +1,26 @@
use ZrAdmin;
-- 认证申请记录菜单
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time)
VALUES ('认证申请记录', 1147, 999, 'tusercertifications', 'liveforum/tusercertifications', 0, 0, 'C', '0', '0', 'tusercertifications:list', 'icon1', 'system', GETDATE());
-- 按钮父菜单id
declare @menuId int = @@identity
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tusercertifications:query', '', 'system', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'tusercertifications:add', '', 'system', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'tusercertifications:delete', '', 'system', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'tusercertifications:edit', '', 'system', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', 'tusercertifications:export', '', 'system', GETDATE());
SELECT * FROM sys_menu WHERE parentId = @menuId;
SELECT * FROM sys_menu WHERE menuId = @menuId;