DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例14,TableView16_14 拖拽自动保存示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕

共同探索软件研发!敬请关注【宝码香车】
关注描述

csdngif标识


📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🆗*️⃣#️⃣

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例14,TableView16_14 拖拽自动保存示例

📚前言

高效的训练算法是 DeepSeek 模型能够快速收敛并达到优异性能的关键因素之一。在模型训练过程中,DeepSeek 运用了一系列先进的训练算法,以加速模型的收敛速度,增强训练的稳定性,并提高模型的泛化能力。

📚页面效果

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例14,TableView16_14 拖拽自动保存示例

📘组件代码

<!-- TableView16_14.vue 拖拽自动保存示例 -->
<template>
  <div class="drag-demo">
    <h2>14. 拖拽自动保存</h2>
    <p class="description">拖拽排序后自动保存到本地或服务器</p>
    
    <div class="save-options">
      <div class="option">
        <input type="radio" id="saveToLocal" value="local" v-model="saveMode">
        <label for="saveToLocal">保存到本地存储</label>
      </div>
      <div class="option">
        <input type="radio" id="saveToServer" value="server" v-model="saveMode">
        <label for="saveToServer">保存到服务器 (模拟)</label>
      </div>
      <div class="option">
        <input type="checkbox" id="enableDelay" v-model="enableDelay">
        <label for="enableDelay">启用延迟保存 (500ms)</label>
      </div>
      <button class="clear-btn" @click="clearSavedData">清除已保存数据</button>
    </div>
    
    <Table
      :data="taskList"
      :columns="columns"
      draggable
      @update:data="handleDataUpdate"
      row-key="id"
      border
      stripe
      :loading="saving"
    />
    
    <div v-if="saveStatus" class="save-status" :class="statusClass">
      {
  { saveStatus }}
      <div v-if="saveProgress > 0 && saveProgress < 100" class="save-progress">
        <div class="progress-bar" :style="{ width: `${saveProgress}%` }"></div>
      </div>
    </div>
    
    <div class="save-history" v-if="saveHistory.length > 0">
      <h3>保存历史</h3>
      <ul>
        <li v-for="(record, index) in saveHistory" :key="index">
          {
  { record.action }} - {
  { record.timestamp }}
          <span class="save-location">({
  { record.mode === 'local' ? '本地存储' : '服务器' }})</span>
        </li>
      </ul>
    </div>
  </div>
</template>

<script setup>
import {
      ref, watch, onMounted } from 'vue'
import Table from '@/components/Table/Table.vue'

const taskList = ref([
  {
      id: 1, task: '需求文档定稿', status: '进行中', priority: '高' },
  {
      id: 2, task: '技术方案评审', status: '已完成', priority: '高' },
  {
      id: 3, task: '项目排期计划', status: '待处理', priority: '中' },
  {
      id: 4, task: '开发环境搭建', status: '进行中', priority: '中' },
  {
      id: 5, task: '基础组件开发', status: '未开始', priority: '高' },
  {
      id: 6, task: '接口联调测试', status: '未开始', priority: '中' },
])

const columns = [
  {
      title: '任务', dataIndex: 'task', width: '250px' },
  {
      title: '状态', dataIndex: 'status', width: '120px' },
  {
      title: '优先级', dataIndex: 'priority', width: '100px' }
]

// 保存相关状态
const saving = ref(false)
const saveStatus = ref('')
const statusClass = ref('')
const saveMode = ref('local') // 'local' 或 'server'
const enableDelay = ref(true)
const saveHistory = ref([])
const saveProgress = ref(0)
const saveTimeout = ref(null)

// 初始化后从存储中加载数据
onMounted(() => {
     
  loadSavedData()
})

// 数据更新处理
const handleDataUpdate = (newData) => {
     
  taskList.value = newData
  
  // 如果启用了延迟保存
  if (enableDelay.value) {
     
    // 清除之前的计时器
    if (saveTimeout.value) {
     
      clearTimeout(saveTimeout.value)
    }
    
    // 设置状态为"即将保存"
    saveStatus.value = '即将保存...'
    statusClass.value = 'pending'
    
    // 设置新的延迟保存计时器
    saveTimeout.value = setTimeout(() => {
     
      saveData()
    }, 500)
  } else {
     
    // 立即保存
    saveData()
  }
}

// 保存数据
const saveData = async () => {
     
  try {
     
    saving.value = true
    saveStatus.value = '保存中...'
    statusClass.value = 'saving'
    saveProgress.value = 0
    
    // 根据保存模式选择保存方法
    if (saveMode.value === 'local') {
     
      // 模拟进度
      const interval = setInterval(() => {
     
        saveProgress.value += 20
        if (saveProgress.value >= 100) {
     
          clearInterval(interval)
        }
      }, 100)
      
      // 保存到本地存储
      localStorage.setItem('drag-demo-tasks', JSON.stringify(taskList.value))
      
      // 等待进度条动画完成
      await new Promise(resolve => setTimeout(resolve, 500))
      
      clearInterval(interval)
      saveProgress.value = 100
      
      // 记录保存历史
      addSaveHistory('本地保存数据')
      
      saveStatus.value = '已保存到本地存储!'
      statusClass.value = 'success'
    } else {
     
      // 模拟服务器保存 (包含进度)
      for (let i = 0; i <= 100; i += 10) {
     
        saveProgress.value = i
        await new Promise(resolve => setTimeout(resolve, 100))
      }
      
      // 记录保存历史
      addSaveHistory('保存数据到服务器')
      
      saveStatus.value = '已保存到服务器!'
      statusClass.value = 'success'
    }
  } catch (error) {
     
    saveStatus.value = '保存失败: ' + error.message
    statusClass.value = 'error'
    console.error('保存失败:', error)
  } finally {
     
    saving.value = false
    
    // 5秒后清除状态消息
    setTimeout(() => {
     
      if (statusClass.value === 'success' || statusClass.value === 'error') {
     
        saveStatus.value = ''
        statusClass.value = ''
        saveProgress.value = 0
      }
    }, 5000)
  }
}

// 加载保存的数据
const loadSavedData = () => {
     
  const savedData = localStorage.getItem('drag-demo-tasks')
  if (savedData) {
     
    try {
     
      taskList.value = JSON.parse(savedData)
      saveStatus.value = '已从本地存储加载数据'
      statusClass.value = 'info'
      
      // 添加加载历史记录
      addSaveHistory('加载本地存储数据')
      
      // 3秒后清除状态消息
      setTimeout(() => {
     
        saveStatus.value = ''
        statusClass.value = ''
      }, 3000)
    } catch (error) {
     
      console.error('加载保存数据失败:', error)
    }
  }
}

// 清除保存的数据
const clearSavedData = () => {
     
  localStorage.removeItem('drag-demo-tasks')
  saveStatus.value = '已清除保存的数据'
  statusClass.value = 'warning'
  
  // 添
评论 78
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宝码香车

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值