diff --git a/src/api/wallet/types.ts b/src/api/wallet/types.ts index b898703..7dba886 100644 --- a/src/api/wallet/types.ts +++ b/src/api/wallet/types.ts @@ -84,6 +84,8 @@ export interface WalletTransactionVO { orderNo: string; /** 时间 */ createDate: string; + /** 状态;1=已解冻,2=冻结中,3=正常 */ + status: number; } /** 交易明细查询参数 */ diff --git a/src/layouts/BasicLayout.tsx b/src/layouts/BasicLayout.tsx index ba05f1e..6e6c1b6 100644 --- a/src/layouts/BasicLayout.tsx +++ b/src/layouts/BasicLayout.tsx @@ -79,7 +79,7 @@ export default defineComponent({ const { menuItems } = useMenuStore(); const { phone, nickname } = useUserStore(); - const displayName = computed(() => nickname.value || phone.value); + const displayName = computed(() => phone.value || nickname.value); const { tabs, cachedViews, @@ -108,8 +108,8 @@ export default defineComponent({ /** ===== 退出登录 ===== */ const handleLogout = () => { Modal.confirm({ - title: '提示', - content: '是否退出登录?', + title: '确认退出', + content: '确认要退出当前账号吗?', okText: '确认', cancelText: '取消', onOk: () => { diff --git a/src/pages/finance/payments/model/usePaymentsModel.ts b/src/pages/finance/payments/model/usePaymentsModel.ts index bbfe61b..78ea579 100644 --- a/src/pages/finance/payments/model/usePaymentsModel.ts +++ b/src/pages/finance/payments/model/usePaymentsModel.ts @@ -1,4 +1,5 @@ -import { computed, reactive, nextTick } from 'vue'; +import { computed, reactive, nextTick, h } from 'vue'; +import { StatusTag, type StatusTagTone } from '@/components'; import { useThrottleFn, useRequest, usePagination, useEffect, syncPaginationTotal } from '@/hooks'; import { getPaymentFlowList, type PaymentFlowVO, type PaymentFlowQueryParams } from './services'; import dayjs from 'dayjs'; @@ -13,11 +14,20 @@ export const PAYMENT_TYPE_OPTIONS = [ { value: '2', label: '取消报名' }, ] as const; -export const PAYMENT_TYPE_MAP: Record = { - 1: '报名', - 2: '取消报名', +export const PAYMENT_TYPE_MAP: Record = { + 1: { label: '报名', tone: 'success' }, + 2: { label: '取消报名', tone: 'default' }, }; +/** 渲染交易类型 StatusTag */ +export function renderPaymentType(type: number) { + const info = PAYMENT_TYPE_MAP[type] || { + label: String(type ?? '--'), + tone: 'default' as const, + }; + return h(StatusTag, { label: info.label, tone: info.tone }); +} + // ============================================================ // Model // ============================================================ @@ -90,7 +100,7 @@ export function usePaymentsModel() { dataIndex: 'type', key: 'type', width: 110, - customRender: ({ text }: { text: number }) => PAYMENT_TYPE_MAP[text] || text || '--', + customRender: ({ text }: { text: number }) => renderPaymentType(text), }, { title: '用户昵称', dataIndex: 'nickname', key: 'nickname', width: 120 }, { title: '手机号', dataIndex: 'phone', key: 'phone', width: 140 }, diff --git a/src/pages/finance/wallet/components/WalletDetailModal.tsx b/src/pages/finance/wallet/components/WalletDetailModal.tsx index 9a7389a..3608c41 100644 --- a/src/pages/finance/wallet/components/WalletDetailModal.tsx +++ b/src/pages/finance/wallet/components/WalletDetailModal.tsx @@ -12,6 +12,7 @@ import { TRANSACTION_STATUS_OPTIONS, TRANSACTION_TYPE_MAP, TRANSACTION_STATUS_LABEL_MAP, + renderTransactionStatus, } from '../model/useWalletModel'; import styles from './WalletDetailModal.module.less'; @@ -151,6 +152,13 @@ export default defineComponent({ align: 'left' as const, customRender: ({ text }: { text: string }) => `¥${text || '0.00'}`, }, + { + title: '状态', + dataIndex: 'status', + key: 'status', + width: 90, + customRender: ({ text }: { text: number }) => renderTransactionStatus(text), + }, { title: '冻结时间', dataIndex: 'freezeTime', diff --git a/src/pages/finance/wallet/model/useWalletModel.ts b/src/pages/finance/wallet/model/useWalletModel.ts index e289022..dbd7912 100644 --- a/src/pages/finance/wallet/model/useWalletModel.ts +++ b/src/pages/finance/wallet/model/useWalletModel.ts @@ -1,4 +1,5 @@ -import { computed, reactive, nextTick } from 'vue'; +import { computed, reactive, nextTick, h } from 'vue'; +import { StatusTag, type StatusTagTone } from '@/components'; import { useState, useThrottleFn, @@ -36,13 +37,29 @@ export const TRANSACTION_TYPE_MAP: Record = { 3: '取消报名退款', }; -/** 交易状态文案映射(弹窗内表格渲染用) */ +/** 交易状态文案映射(筛选下拉用,对应请求参数,值与接口返回一致) */ export const TRANSACTION_STATUS_LABEL_MAP: Record = { 1: '已解冻', 2: '冻结中', 3: '正常', }; +/** 交易状态色调映射(表格 StatusTag 显示用,对应接口返回的 status 值:1=已解冻,2=冻结中,3=正常) */ +const TRANSACTION_STATUS_MAP: Record = { + 1: { label: '已解冻', tone: 'success' }, + 2: { label: '冻结中', tone: 'warning' }, + 3: { label: '正常', tone: 'default' }, +}; + +/** 渲染交易状态 StatusTag(表格列用) */ +export function renderTransactionStatus(status: number) { + const info = TRANSACTION_STATUS_MAP[status] || { + label: String(status ?? '--'), + tone: 'default' as const, + }; + return h(StatusTag, { label: info.label, tone: info.tone }); +} + // ============================================================ // Model // ============================================================ diff --git a/src/pages/system/roles/components/UserListModal.module.less b/src/pages/system/roles/components/UserListModal.module.less index 2486ab0..7ce58a9 100644 --- a/src/pages/system/roles/components/UserListModal.module.less +++ b/src/pages/system/roles/components/UserListModal.module.less @@ -5,7 +5,7 @@ .bottom { display: flex; - justify-content: space-between; + justify-content: flex-end; align-items: center; margin-top: 16px; padding-top: 12px; @@ -19,7 +19,8 @@ .paginationRow { display: flex; - justify-content: flex-end; + align-items: center; + justify-content: space-between; margin-top: 12px; } } diff --git a/src/pages/system/roles/components/UserListModal.tsx b/src/pages/system/roles/components/UserListModal.tsx index 9370dc1..a41e3c4 100644 --- a/src/pages/system/roles/components/UserListModal.tsx +++ b/src/pages/system/roles/components/UserListModal.tsx @@ -152,25 +152,22 @@ export default defineComponent({ rowKey="phone" /> - {/* 底部 */} -
+ {/* 分页 */} +
共 {pagination.value.total} 人
- +
- {/* 分页 */} - {pagination.value.total > pagination.value.pageSize && ( -
- `共 ${total} 条`} - onChange={handlePageChange} - /> -
- )} + {/* 底部 */} +
+ +
); }, diff --git a/src/pages/system/users/index.tsx b/src/pages/system/users/index.tsx index 0407f74..86c1964 100644 --- a/src/pages/system/users/index.tsx +++ b/src/pages/system/users/index.tsx @@ -52,7 +52,7 @@ function renderBodyCell({ )} {canToggleStatus && ( )} @@ -92,17 +92,20 @@ export default defineComponent({ const [editingRecord, setEditingRecord] = useState(null); const [formSubmitting, setFormSubmitting] = useState(false); - // ===== 启用/禁用(使用真实 API) ===== + // ===== 启用/禁用 ===== const handleToggleStatus = useThrottleFn(async (record: any) => { const isActive = record.status === '1'; - const actionText = isActive ? '停用' : '启用'; + const actionText = isActive ? '禁用' : '启用'; Modal.confirm({ - title: `${actionText}确认`, + title: `确认${actionText}`, content: (
确定要{actionText}用户 {record.realName} 吗? +
+ {isActive ? '禁用后该用户将无法登录后台。' : '启用后该用户将恢复登录权限。'} +
), okText: '确认', diff --git a/src/pages/system/users/model/services.ts b/src/pages/system/users/model/services.ts index 6f4b4d3..94665c4 100644 --- a/src/pages/system/users/model/services.ts +++ b/src/pages/system/users/model/services.ts @@ -41,7 +41,7 @@ const userUpdatePwd = '/admin/sys/user/updatepwd'; /** * 用户列表分页 * 接口: GET /admin/sys/user/page - * 参数: page, limit, text(姓名/手机号), roleId(角色ID), status(0=停用,1=正常) + * 参数: page, limit, text(姓名/手机号), roleId(角色ID), status(0=禁用,1=正常) */ export function getUserList( params: UserListQueryParams, diff --git a/src/pages/system/users/model/useUserModel.ts b/src/pages/system/users/model/useUserModel.ts index 3be002d..18a62a2 100644 --- a/src/pages/system/users/model/useUserModel.ts +++ b/src/pages/system/users/model/useUserModel.ts @@ -21,14 +21,14 @@ import { getRoleList, type TournamentAdminRolePageVO } from '../../roles/model/s /** 状态选项(筛选) */ export const USER_STATUS_OPTIONS = [ { value: '', label: '全部' }, - { value: '0', label: '停用' }, + { value: '0', label: '禁用' }, { value: '1', label: '正常' }, ] as const; -/** 状态文本/色调映射(表格渲染),对应 API status 字段:0=停用、1=正常 */ +/** 状态文本/色调映射(表格渲染),对应 API status 字段:0=禁用、1=正常 */ const STATUS_MAP: Record = { '1': { label: '正常', tone: 'success' }, - '0': { label: '停用', tone: 'danger' }, + '0': { label: '禁用', tone: 'danger' }, }; // ============================================================