-
-
-
-
-
-
-
-
-
- {{ row.role === 'admin' ? '管理员' : '用户' }}
-
-
-
-
-
-
-
- {{ row.jwt_exp && row.jwt_exp !== '0' ? formatDateTime(parseInt(row.jwt_exp) * 1000) : '-' }}
-
-
-
-
-
- {{ formatDateTime(row.created_at) }}
-
-
-
-
-
-
- 编辑
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-const formRules = {
- alias: [
- { required: true, message: '请输入用户名', trigger: 'blur' },
- { min: 2, max: 50, message: '长度在 2 到 50 个字符', trigger: 'blur' },
- ],
- role: [{ required: true, message: '请选择角色', trigger: 'change' }],
- email: [
- { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' },
- ],
-}
-
-// 获取待审批用户
-const fetchPendingUsers = async () => {
- loading.value = true
- try {
- pendingUsers.value = await adminAPI.getPendingUsers()
- } catch (error) {
- ElMessage.error(error.message || '获取待审批用户失败')
- } finally {
- loading.value = false
- }
-}
-
-// Tab 切换
-const handleTabChange = (tab) => {
- if (tab === 'pending') {
- fetchPendingUsers()
- } else {
- handleRefresh()
- }
-}
-
-// 审批通过用户
-const handleApprove = async (user) => {
- try {
- await ElMessageBox.confirm(
- `确认通过用户 "${user.alias}" 的审批吗?`,
- '审批确认',
- {
- confirmButtonText: '确认',
- cancelButtonText: '取消',
- type: 'success',
- }
- )
-
- await adminAPI.approveUser(user.id)
- ElMessage.success('审批成功')
- fetchPendingUsers()
- } catch (error) {
- if (error !== 'cancel') {
- ElMessage.error(error.message || '审批失败')
- }
- }
-}
-
-// 拒绝用户
-const handleReject = async (user) => {
- try {
- await ElMessageBox.confirm(
- `确认拒绝用户 "${user.alias}" 的申请吗?拒绝后将删除该用户。`,
- '拒绝确认',
- {
- confirmButtonText: '确认',
- cancelButtonText: '取消',
- type: 'warning',
- }
- )
-
- await adminAPI.rejectUser(user.id)
- ElMessage.success('已拒绝并删除用户')
- fetchPendingUsers()
- } catch (error) {
- if (error !== 'cancel') {
- ElMessage.error(error.message || '操作失败')
- }
- }
-}
-
-// 刷新数据
-const handleRefresh = async () => {
- if (activeTab.value === 'pending') {
- await fetchPendingUsers()
- } else {
- loading.value = true
- try {
- await userStore.fetchUsers()
- ElMessage.success('刷新成功')
- } catch (error) {
- ElMessage.error(error.message || '刷新失败')
- } finally {
- loading.value = false
- }
- }
-}
-
-// 创建用户
-const handleCreate = () => {
- dialogMode.value = 'create'
- formData.value = {
- alias: '',
- role: 'user',
- is_approved: true,
- email: '',
- password: '',
- reset_password: false,
- }
- dialogVisible.value = true
-}
-
-// 编辑用户
-const handleEdit = (user) => {
- dialogMode.value = 'edit'
- formData.value = {
- id: user.id,
- alias: user.alias,
- role: user.role,
- is_approved: user.is_approved,
- email: user.email || '',
- password: '',
- reset_password: false,
- }
- dialogVisible.value = true
-}
-
-// 提交表单
-const handleSubmit = async () => {
- if (!formRef.value) return
-
- try {
- await formRef.value.validate()
- submitting.value = true
-
- // 检查密码设置冲突
- if (dialogMode.value === 'edit' && formData.value.password && formData.value.reset_password) {
- ElMessage.warning('不能同时设置新密码和重置密码,请选择其一')
- submitting.value = false
- return
- }
-
- if (dialogMode.value === 'create') {
- await userStore.createUser(formData.value)
- ElMessage.success('创建成功')
- } else {
- await userStore.updateUser(formData.value.id, formData.value)
- ElMessage.success('更新成功')
- }
-
- dialogVisible.value = false
- await handleRefresh()
- } catch (error) {
- ElMessage.error(error.message || '操作失败')
- } finally {
- submitting.value = false
- }
-}
-
-// 删除用户
-const handleDelete = (user) => {
- ElMessageBox.confirm(`确定要删除用户 "${user.alias}" 吗?`, '警告', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- })
- .then(async () => {
- try {
- await userStore.deleteUser(user.id)
- ElMessage.success('删除成功')
- await handleRefresh()
- } catch (error) {
- ElMessage.error(error.message || '删除失败')
- }
- })
- .catch(() => {})
-}
-
-
-// 选择改变
-const handleSelectionChange = (selection) => {
- selectedUsers.value = selection
-}
-
-// 批量启用/禁用
-
-// 批量打卡
-const handleBatchCheckIn = async () => {
- const userIds = selectedUsers.value.map((u) => u.id)
-
- try {
- const result = await adminStore.batchCheckIn(userIds)
- ElMessage.success(`批量打卡完成:成功 ${result.success_count},失败 ${result.failure_count}`)
- await handleRefresh()
- } catch (error) {
- ElMessage.error(error.message || '批量打卡失败')
- }
-}
-
-// 页码改变
-const handlePageChange = () => {
- handleRefresh()
-}
-
-// 每页数量改变
-const handleSizeChange = () => {
- userStore.currentPage = 1
- handleRefresh()
-}
-
-onMounted(() => {
- fetchPendingUsers() // 默认加载待审批用户
-})
-
-
-