FLAG:user页面修改密码/清空密码功能暂时禁用,搜 edit1111
Yann authored at 2025-08-01 23:26:56
5.40 KiB
cube-front
<template>
  <div class="save-layout-container">
    <el-card class="box-card">
      <template #header>
        <div class="card-header">
          <h3>保存布局配置</h3>
          <el-button type="primary" @click="handleSaveLayout">保存布局</el-button>
        </div>
      </template>

      <el-form :model="layoutForm" :rules="formRules" ref="formRef" label-width="120px" class="layout-form">
        <el-form-item label="用户ID" prop="userid">
          <el-input-number v-model="layoutForm.userid" placeholder="请输入用户ID" :min="0" />
        </el-form-item>
        <el-form-item label="分类" prop="category">
          <el-input v-model="layoutForm.category" placeholder="请输入分类" />
        </el-form-item>
        <el-form-item label="名称" prop="name">
          <el-input v-model="layoutForm.name" placeholder="请输入名称" />
        </el-form-item>
        <el-form-item label="配置值" prop="value">
          <el-input
            v-model="layoutForm.value"
            type="textarea"
            :rows="10"
            placeholder="请输入配置值(JSON格式)"
          />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleSaveLayout" :loading="saving">保存布局</el-button>
          <el-button @click="resetForm">重置</el-button>
          <el-button @click="formatJson">格式化JSON</el-button>
        </el-form-item>
      </el-form>

      <!-- 保存历史记录 -->
      <el-card v-if="saveHistory.length > 0" class="history-card">
        <template #header>
          <h4>保存历史</h4>
        </template>
        <el-table :data="saveHistory" border style="width: 100%">
          <el-table-column prop="userid" label="用户ID" width="80" />
          <el-table-column prop="category" label="分类" width="120" />
          <el-table-column prop="name" label="名称" min-width="150" />
          <el-table-column prop="value" label="配置值" min-width="200" show-overflow-tooltip />
          <el-table-column prop="saveTime" label="保存时间" width="160" />
          <el-table-column label="操作" width="120">
            <template #default="scope">
              <el-button type="primary" size="small" @click="loadHistory(scope.row)">载入</el-button>
            </template>
          </el-table-column>
        </el-table>
      </el-card>
    </el-card>
  </div>
</template>

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

// 定义接口类型
interface SaveLayoutParams {
  userid?: number;
  category?: string;
  name?: string;
  value?: string;
}

interface HistoryItem extends SaveLayoutParams {
  saveTime: string;
}

// 表单引用
const formRef = ref<FormInstance | null>(null);
const saving = ref(false);

// 表单数据
const layoutForm = reactive<SaveLayoutParams>({
  userid: 0,
  category: '',
  name: '',
  value: '',
});

// 保存历史
const saveHistory = ref<HistoryItem[]>([]);

// 表单验证规则
const formRules = reactive<FormRules>({
  userid: [
    { required: true, message: '请输入用户ID', trigger: 'blur' },
  ],
  category: [
    { required: true, message: '请输入分类', trigger: 'blur' },
  ],
  name: [
    { required: true, message: '请输入名称', trigger: 'blur' },
  ],
  value: [
    { required: true, message: '请输入配置值', trigger: 'blur' },
  ],
});

// 保存布局
const handleSaveLayout = async () => {
  if (!formRef.value) return;

  formRef.value.validate(async (valid: boolean) => {
    if (valid) {
      saving.value = true;
      try {
        await request.post('/Cube/SaveLayout', null, {
          params: {
            userid: layoutForm.userid,
            category: layoutForm.category,
            name: layoutForm.name,
            value: layoutForm.value,
          },
        });

        ElMessage.success('布局保存成功');

        // 添加到历史记录
        saveHistory.value.unshift({
          ...layoutForm,
          saveTime: new Date().toLocaleString(),
        });

        // 保持历史记录在10条以内
        if (saveHistory.value.length > 10) {
          saveHistory.value = saveHistory.value.slice(0, 10);
        }

      } catch (error) {
        ElMessage.error('布局保存失败');
        console.error('Save layout error:', error);
      } finally {
        saving.value = false;
      }
    }
  });
};

// 重置表单
const resetForm = () => {
  if (formRef.value) {
    formRef.value.resetFields();
  }
  Object.assign(layoutForm, {
    userid: 0,
    category: '',
    name: '',
    value: '',
  });
};

// 格式化JSON
const formatJson = () => {
  if (layoutForm.value) {
    try {
      const parsed = JSON.parse(layoutForm.value);
      layoutForm.value = JSON.stringify(parsed, null, 2);
      ElMessage.success('JSON格式化成功');
    } catch {
      ElMessage.error('JSON格式不正确');
    }
  }
};

// 载入历史记录
const loadHistory = (item: HistoryItem) => {
  Object.assign(layoutForm, {
    userid: item.userid,
    category: item.category,
    name: item.name,
    value: item.value,
  });
  ElMessage.success('历史记录已载入');
};
</script>

<style scoped>
.save-layout-container {
  padding: 20px;
}

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

.layout-form {
  max-width: 800px;
}

.history-card {
  margin-top: 20px;
}
</style>