重命名CubeListPager和CubeListToolbarSearch
Yann authored at 2025-07-28 22:53:20 Yann committed at 2025-07-28 23:04:14
5.16 KiB
cube-front
<template>
  <div>
    <div class="page-header">
      <h1>数据库管理</h1>
      <p>数据库备份与管理操作</p>
    </div>

    <el-card>
      <template #header>
        <div class="card-header">
          <span>数据库操作</span>
        </div>
      </template>

      <div class="db-operations">
        <el-form :model="backupForm" label-width="120px">
          <el-form-item label="备份名称">
            <el-input
              v-model="backupForm.name"
              placeholder="请输入备份名称,留空则自动生成"
              style="width: 300px"
            />
          </el-form-item>

          <el-form-item>
            <el-button
              type="primary"
              :loading="loading.backup"
              @click="handleBackup"
            >
              数据库备份
            </el-button>
            <el-button
              type="success"
              :loading="loading.backupCompress"
              @click="handleBackupAndCompress"
            >
              备份并压缩
            </el-button>
          </el-form-item>
        </el-form>

        <el-divider />

        <div class="download-section">
          <h3>下载备份文件</h3>
          <el-form :model="downloadForm" label-width="120px">
            <el-form-item label="文件名称">
              <el-input
                v-model="downloadForm.name"
                placeholder="请输入要下载的备份文件名"
                style="width: 300px"
              />
            </el-form-item>

            <el-form-item>
              <el-button
                type="info"
                :loading="loading.download"
                @click="handleDownload"
              >
                下载备份文件
              </el-button>
            </el-form-item>
          </el-form>
        </div>
      </div>
    </el-card>
  </div>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { request } from '@core/utils/request'

// 表单数据
const backupForm = reactive({
  name: ''
})

const downloadForm = reactive({
  name: ''
})

// 加载状态
const loading = reactive({
  backup: false,
  backupCompress: false,
  download: false
})

// 数据库备份
const handleBackup = async () => {
  try {
    loading.backup = true

    const params = backupForm.name ? { name: backupForm.name } : {}
    console.log('开始数据库备份:', params)

    const data = await request.post('/Admin/Db/Backup', params)
    console.log('数据库备份响应:', data)

    ElMessage.success('数据库备份成功')
    backupForm.name = ''
  } catch (error) {
    console.error('数据库备份错误:', error)
    ElMessage.error('数据库备份失败')
  } finally {
    loading.backup = false
  }
}

// 数据库备份并压缩
const handleBackupAndCompress = async () => {
  try {
    await ElMessageBox.confirm(
      '备份并压缩操作可能需要较长时间,确定要继续吗?',
      '确认操作',
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      }
    )

    loading.backupCompress = true

    const params = backupForm.name ? { name: backupForm.name } : {}
    console.log('开始数据库备份并压缩:', params)

    const data = await request.post('/Admin/Db/BackupAndCompress', params)
    console.log('数据库备份并压缩响应:', data)

    ElMessage.success('数据库备份并压缩成功')
    backupForm.name = ''
  } catch (error) {
    if (error !== 'cancel') {
      console.error('数据库备份压缩错误:', error)
      ElMessage.error('数据库备份并压缩失败')
    }
  } finally {
    loading.backupCompress = false
  }
}

// 下载备份文件
const handleDownload = async () => {
  if (!downloadForm.name.trim()) {
    ElMessage.warning('请输入要下载的文件名')
    return
  }

  try {
    loading.download = true

    console.log('开始下载备份文件:', downloadForm.name)

    // 使用 request 发送下载请求,获取二进制数据
    const blob = await request.get('/Admin/Db/Download',
      {
        params: { name: downloadForm.name },
        responseType: 'blob'
      }
    )

    // 创建下载链接
    const url = window.URL.createObjectURL(blob)
    const link = document.createElement('a')
    link.href = url
    link.download = downloadForm.name
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
    window.URL.revokeObjectURL(url)

    ElMessage.success('文件下载成功')
    downloadForm.name = ''
  } catch (error) {
    console.error('文件下载错误:', error)
    ElMessage.error('文件下载失败')
  } finally {
    loading.download = false
  }
}
</script>

<style scoped>
.page-header {
  margin-bottom: 20px;
}

.page-header h1 {
  margin: 0 0 8px 0;
  font-size: 24px;
  font-weight: 500;
}

.page-header p {
  margin: 0;
  color: #666;
  font-size: 14px;
}

.card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.db-operations {
  padding: 20px 0;
}

.download-section {
  margin-top: 20px;
}

.download-section h3 {
  margin: 0 0 20px 0;
  font-size: 16px;
  font-weight: 500;
}
</style>