用智能插件(Fitten Code: Faster and Better AI Assistant)修改好了可以持久保存的vue3留言板

天际

 第一修改是选项式:

<!-- 模板结构 -->
<template>
  <div>
    <textarea  placeholder="请输入备注内容" v-model="newItem"></textarea>
    <button @click="addItem">添加</button>
    <hr>
    <div class="text">
      <div v-for="(item, index) in items" :key="index" :class="{ 'finish': item.finish }">
        <button @click="removeItem(index)">删除</button>
        <button @click="toggleFinish(index)">{{ item.finish ? '取消' : '完成' }}</button>
        <span class="content">{{ item.name }}</span>
      </div>
    </div>
  </div>
</template>
<!-- 脚本行为 -->
<script>
export default {
  data() {
    return {
      newItem: '',
      items: []
    };
  },
  mounted() {
    this.loadTodo();
  },
  methods: {
    addItem() {
      this.items.push({ name: this.newItem, finish: false });
      this.saveTodo();
      this.newItem = '';
    },
    removeItem(index) {
      this.items.splice(index, 1);
      this.saveTodo();
    },
    toggleFinish(index) {
      this.items[index].finish = !this.items[index].finish;
      this.saveTodo();
    },
    saveTodo() {
      localStorage.setItem('mylogs', JSON.stringify(this.items));
    },
    loadTodo() {
      const savedItems = JSON.parse(localStorage.getItem('mylogs'));
      if (savedItems) {
        this.items = savedItems;
      }
    }
  }
};
</script>
<!-- 组件样式 -->
<style>
.finish {
  text-decoration: line-through;
  text-shadow: 2px 2px 2px LightslateGray;
  box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.916);
}
</style>

第2次修改

<template>
  <div>
    <textarea      
      placeholder="请输入备注内容"
      v-model="newItem"
    ></textarea>
    <button @click="addItem">添加</button>
    <hr />
    <div class="text">
      <div
        v-for="(item, index) in items"
        :key="index"
        :class="{ finish: item.finish }"
      >
        <button @click="removeItem(index)">删除</button>
        <button @click="toggleFinish(index)">
          {{ item.finish ? "取消" : "完成" }}
        </button>
        <span class="content">
          {{ index + 1 }}.{{ item.name }}
          {{ item.finish ? "(已完成)" : "" }}</span
        >
      </div>
    </div>
  </div>
</template>

<script >
  import { ref, onMounted } from "vue";

  export default {
    setup() {
      const newItem = ref("");
      const items = ref([]);

      const addItem = () => {
        items.value.push({ name: newItem.value, finish: false });
        saveTodo();
        newItem.value = "";
      };

      const removeItem = (index) => {
        items.value.splice(index, 1);
        saveTodo();
      };

      const toggleFinish = (index) => {
        items.value[index].finish = !items.value[index].finish;
        saveTodo();
      };

      const saveTodo = () => {
        localStorage.setItem("mylogs", JSON.stringify(items.value));
      };

      const loadTodo = () => {
        const savedItems = JSON.parse(localStorage.getItem("mylogs"));
        if (savedItems) {
          items.value = savedItems;
        }
      };

      onMounted(() => {
        loadTodo();
      });

      return {
        newItem,
        items,
        addItem,
        removeItem,
        toggleFinish,
        saveTodo,
        loadTodo
      };
    }
  };
</script>

<style scoped>
  .finish {
    text-decoration: line-through;
    text-shadow: 2px 2px 2px LightslateGray;
    box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.916);
  }
</style>

 第3次修改

<template>
  <div class="view">
    <!-- 左侧按钮 -->
    <div class="view_left">
      <button class="btn_checkbox">
        操作<input type="checkbox" v-model="showInput" value="操作" />
      </button>
      <button class="del_checkbox">
        删除 <input type="checkbox" v-model="showInput2" value="删除" />
      </button>
    </div>
    <!-- 中间内容 -->
    <div class="view_content">
      <!--  -->
      <div class="textarea_div">
        <textarea
          class="text-input-box"
          placeholder="请输入备注内容"
          v-model="newItem"
          v-if="showInput"
        ></textarea>
        <button @click="addItem" v-if="showInput">添加</button>
      </div>
      <!--  -->
      <div class="div_list">
        <div class="text">
          <div v-for="(item, index) in items" :key="index" :class="{ finish: item.finish }">
            <button @click="removeItem(index)" v-if="showInput2">删除</button>
            <button @click="toggleFinish(index)">
              {{ item.finish ? '取消' : '完成' }}
            </button>
            <button v-if="showInput" @click="edit(index)">编辑</button>

            <span class="content">
              <button class="numb">{{ index + 1 }}</button> {{ item.name }}
              {{ item.finish ? '(已完成)' : '' }}</span
            >
            <span v-show="oindex == index ? true : false" class="textarea_div">
              <textarea v-model="newItem"></textarea>
              <button @click="csu">提交</button>
            </span>
          </div>
        </div>
      </div>
    </div>
    <!-- 右侧按钮 -->
    <div class="view_right"></div>
  </div>
</template>

<script setup>
// import '@/assets/styles/view.scss'
// import '@/assets/styles/jottings_memo.scss'
// import '../../assets/styles/input_checkbox.scss'
import { ref, onMounted } from 'vue'
const showInput = ref(false)
const showInput2 = ref(false)
const newItem = ref('')
const items = ref([])
const oindex = ref(-1)

const addItem = () => {
  items.value.push({ name: newItem.value, finish: false })
  saveTodo()
  newItem.value = ''
}
const removeItem = (index) => {
  items.value.splice(index, 1)
  saveTodo()
}
const edit = (index) => {
  if (newItem.value === '' || false) {
    newItem.value = items.value[index].name

    oindex.value = index
  } else {
    newItem.value = ''
    oindex.value = -1
  }
}
const csu = () => {
  if (oindex.value === -1) {
    return
  }
  items.value[oindex.value].name = newItem.value
  oindex.value = -1
  newItem.value = ''
  saveTodo()
}

const toggleFinish = (index) => {
  items.value[index].finish = !items.value[index].finish
  saveTodo()
}

const saveTodo = () => {
  try {
    localStorage.setItem('jottings', JSON.stringify(items.value))
  } catch (error) {
    console.error('Failed to save todo items to localStorage:', error)
    // 可以添加适当的错误处理逻辑,比如向用户显示错误信息
  }
}

const loadTodo = () => {
  try {
    const savedItems = JSON.parse(localStorage.getItem('jottings'))
    if (savedItems) {
      items.value = savedItems
    }
  } catch (error) {
    console.error('Failed to load todo items from localStorage:', error)
    // 可以添加适当的错误处理逻辑,比如向用户显示错误信息
  }
}

onMounted(() => {
  loadTodo()
})
</script>

<style scoped>
.btn_checkbox,
.del_checkbox {
  box-shadow:
    inset -2px -2px 3px rgba(255, 255, 255, 0.589),
    inset 2px 2px 3px rgba(0, 0, 0, 0.6);
  border-radius: 50px;
  font-size: 20px;
  margin: 0px 0 0 0px;
  width: 40px;
  transform: translate(20px, 0px);
  input[type='checkbox'] {
    top: 3px;
    left: -4px;
  }
}
.del_checkbox {
  color: #ff0000;
  background-color: #f56c6c;
  margin-left: 10px;
}
button {
  background-color: #67c23a;
  color: #e6a23c;
  border-radius: 3px;
  border: 2px solid#ccc;
}
.div_list {
  overflow-x: auto;
  overflow-y: auto;
  display: flex;
  flex-wrap: wrap;
  border-radius: 10px;

  width: 84vw;
  height: 90vh;
  padding: 20px;
  border: 2px solid #ccc;
  .content {
    word-wrap: break-word;
    user-select: text;
    color: #8ac5ff93;
    font-size: 20px;
    &:hover {
      color: hsla(160, 100%, 37%, 1);
      text-shadow: 1px 1px 1px #000000;
      box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.916);
      border-radius: 50px;
      background-color: rgb(191, 210, 255);
    }
  }
}
.textarea_div {
  display: flex;
  textarea {
    background-color: #144756;
    color: #fff;
    font-size: 20px;
    height: 21px;
  }
}
.view_content .textarea_div {
  position: absolute;
}
.text {
  display: flex;
  flex-wrap: wrap;
  align-content: flex-start;
  gap: 20px;
}
.finish {
  text-decoration: line-through;
  box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.916);
  background-color: rgb(191, 210, 255);
  border-radius: 50px;
  text-shadow: 1px 1px 1px #030303;
  box-shadow:
    inset -2px -2px 3px rgba(255, 255, 255, 0.6),
    inset 2px 2px 3px rgba(0, 0, 0, 0.6);
}
.numb {
  border-radius: 50px;
  color: hsla(160, 100%, 37%, 1);
  text-shadow: 1px 1px 1px #000000;
}

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638391.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 主从复制、哨兵与集群

一、Redis 主从复制 1. 主从复制的介绍 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&a…

【MySQL精通之路】InnoDB(6)-磁盘结构(2)-索引

主博客&#xff1a; 【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-CSDN博客 上一篇&#xff1a; 下一篇&#xff1a; 【MySQL精通之路】磁盘上的InnoDB结构-表空间-CSDN博客 目录 1.聚集索引和二级索引 1.1 Innodb 如何建立聚集索引 1.2 聚集索引如何加快查询速度 1…

大语言模型的工程技巧(一)——GPU计算

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch07_autograd/gpu.ipynb 本文将讨论如何利用PyTorch实现GPU计算。本…

第十一节 SpringBoot Starter 面试题

一、面试题 很多同学的简历都写着熟悉 SpringBoot&#xff0c; 而 Starter 的实现原理被当作的考题的的情况越来越多。 来源牛客网关于 starter 的一些面试题 情景一、路虎一面 情景二、蔚来 情景三、同花顺 Starter 频频出现&#xff0c;因此在面试准备时&#xff0c;这道题…

Qt_电脑wifi相关操作

项目描述: 在做项目时用到了获取wifi的操作。在网上查找了好久资料,这里做一些总结。 这里有显示当前电脑wifi连接状态,列出wifi列表,连接断开wifi等函数。欢迎大家留言添加文章内容。 使用范围: windows电脑(中文的环境) 使用技术:windows的cmd命令。和对字符串的解析…

概念解析 | 3D Referring Expression Comprehension (3D-REC):让计算机“听懂“人类的3D语言指令

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:3D Referring Expression Comprehension (3D-REC)。 概念解析 | 3D Referring Expression Comprehension (3D-REC):让计算机"听懂"人类的3D语言指令 PDF]…

FIFO-Diffusion,一个无需额外训练即可生成长视频的框架。通过确保每个帧引用足够多的先前帧来生成高质量、一致的长视频。

简单来讲&#xff0c;FIFO-Diffusion先通过一些模型如VideoCraft2、zeroscope、Opem-Sora Plan等与FIFO-Diffusion的组合生成短视频&#xff0c;然后取结尾的帧&#xff08;也可以取多帧&#xff09;&#xff0c;再用这一帧的图片生成另一段短视频&#xff0c;然后拼接起来。FI…

工大智信智能听诊器:开启个人健康管理的全新模式

工大智信智能听诊器&#xff1a;开启个人健康管理的全新模式 在快节奏的现代生活中&#xff0c;健康管理已成为人们关注的焦点。工大智信智能听诊器&#xff0c;作为一款创新的医疗设备&#xff0c;不仅提供高级数据管理功能&#xff0c;而且成为了个人健康管理的得力助手。 这…

6款网站登录页(附带源码)

6款网站登录页 效果图及部分源码123456 领取源码下期更新预报 效果图及部分源码 1 部分源码 <style>* {margin: 0;padding: 0;}html {height: 100%;}body {height: 100%;}.container {height: 100%;background-image: linear-gradient(to right, #fbc2eb, #a6c1ee);}.l…

Application Development using Large Language Models笔记

诸神缄默不语-个人CSDN博文目录 这是2023年NeurIPS Andrew Ng和Isa Fulford做的tutorial&#xff0c;关于如何用LLM来开发新产品的技术和思路&#xff1a;NeurIPS Tutorial Application Development using Large Language Models 文章目录 1. LLM基础2. 提示工程技巧3. 微调4.…

图片、视频画质增强变清晰工具分享(免费)

生活中可能会修一下模糊图片那么这就有一款用来修图片的管理工具&#xff0c;也有可能会修一下模糊的视频&#xff0c;在吾爱上有大佬开发了这么一款工具&#xff0c;免费的&#xff0c;不需要开任何VIP&#xff0c;我试了一下&#xff0c;好用&#xff0c;分享出来&#xff0c…

linux 上除了shell、python脚本以外,还有什么脚本语言用得比较多?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;说到在 Linux下的编程&#xf…

TypeScript-泛型

泛型(Generics) 指在定义接口&#xff0c;函数等类型的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性&#xff0c;使用泛型可以复用类型并且让类型更加灵活 泛型接口-interface 语法&#xff1a;在 interface 接口类型的名称后面使用…

如何使用Unity XR Interaction Toolkit

使用环境&#xff1a; Unity2021.3.21f XR Interaction Toolkit v3.0.0 各类函数可用的&#xff1a; 简单项目配置&#xff1a; 第一步&#xff0c;导包&#xff08;samples可以不用导这么多&#xff0c;两个就够了&#xff09;&#xff1a; 第二步&#xff0c;构建场景&a…

基于STM32实现智能空气质量监测系统

目录 文章主题环境准备智能空气质量监测系统基础代码示例&#xff1a;实现智能空气质量监测系统 配置传感器并读取数据数据处理与显示数据存储与传输应用场景&#xff1a;室内环境监测与空气质量控制问题解决方案与优化收尾与总结 1. 文章主题 文章主题 本教程将详细介绍如何…

Xline社区会议Call Up|在 CURP 算法中实现联合共识的安全性

为了更全面地向大家介绍Xline的进展&#xff0c;同时促进Xline社区的发展&#xff0c;我们将于2024年5月31日北京时间11:00 p.m.召开Xline社区会议。 欢迎您届时登陆zoom观看直播&#xff0c;或点击“阅读原文”链接加入会议&#xff1a; 会议号: 832 1086 6737 密码: 41125…

【人工智能】模型性能评估

模型性能衡量介绍 混淆矩阵 混淆矩阵(Confusion Matrix&#xff09; TP(真阳性)&#xff1a;预测为阳性&#xff0c;且预测正确。 TN(真阴性)&#xff1a;预测为阴性&#xff0c;且预测正确。 FP(伪阳性)&#xff1a;预测为阳性&#xff0c;但预测错误&#xff0c;又称型一误…

Generic Segmentation Offload(GSO)

Generic Segmentation Offload汉语意思是啥&#xff1f; Generic Segmentation Offload&#xff08;GSO&#xff09;的汉语意思是“通用分段卸载”。在网络通信中&#xff0c;GSO 是一种技术&#xff0c;用于在网络栈中将较大的传输单元分段为更小的单元&#xff0c;以提高网络…

Ai指令-公众号内训课:学会ai指令+公众号的底层逻辑(7节课)

课程目录 第一课:详解公众号的流量机制.mp4 第二课:快速搞定公众号号设化装修.mp4 第三课:一期学员直呼牛X的课程&#xff0c;正确的爆文利用姿势.mp4 第五课:颗粒度级别拆解AI公众号爆文.mp4 第六课:AI提示词进阶技巧课。提示词自动化.mp4 第七课.实操演示提示词撰写工作…

web自动化之PO模式

PO模式 1、为什么需要PO思想&#xff1f; 首先我们观察和思考一下&#xff0c;目前我们写的作业脚本的问题&#xff1a; 元素定位和操作动 作写到一起了&#xff0c;这就就会用导致一个问题&#xff1a; UI的页面元素比较容易变化的&#xff0c;所以元素定位和脚本操作写到一…