用智能插件(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"><divv-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"><textareaclass="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].nameoindex.value = index} else {newItem.value = ''oindex.value = -1}
}
const csu = () => {if (oindex.value === -1) {return}items.value[oindex.value].name = newItem.valueoindex.value = -1newItem.value = ''saveTodo()
}const toggleFinish = (index) => {items.value[index].finish = !items.value[index].finishsaveTodo()
}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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2+Element 封装评论+表情功能

有需要的小伙伴直接拿代码即可&#xff0c;不需要下载依赖&#xff0c;目前是初始版本&#xff0c;后期会进行代码的优化。 评论组件如下&#xff1a; 创建 comment.vue 文件。 表情组件 VueEmoji.vue 在评论组件中使用。 <template><div class"comment"…

《主对角线求和》

描述 有一个n行n列的二维数组&#xff0c;请你求出二维数组的主对角线上的所有数字的和是多少。 输入描述 第一行一个整数n&#xff0c;代表下面输入的是n行n列(2≤n≤10)的二维数组&#xff1b; 接下来n行&#xff0c;每行n列&#xff0c;表示二维数组的每个元素各是多少。 …

数字孪生技术在管理中有哪些实际应用?

随着科学技术的不断提高&#xff0c;数字孪生技术也在不断的从理论应用至现实&#xff0c;并且涉及领域较为广泛。 在生产运营管理层面&#xff0c;通过构建数字孪生模型&#xff0c;企业可以精准模拟和优化生产线&#xff0c;实现生产流程的智能化和高效化。比如&#xff0c;…

TypeScript-搭建编译环境

搭建编译环境 TypeScript 编写的代码是无法直接在js引擎( 浏览器 / Nodejs )中运行的&#xff0c;最终还需要经过编译成js代码才可以正常运行 搭建手动编译环境 1️⃣ 全局安装 typescript 包&#xff08;编译引擎&#xff09; -> 注册 tsc 命令 npm i -g typescript 2…

下拉框操作/键鼠操作/文件上传

在我们做UI自动化测试的时候&#xff0c;会有一些元素需要特殊操作&#xff0c;比如下拉框操作/键鼠操作/文件上传。 下拉框操作 在我们很多页面里有下拉框的选择&#xff0c;这种元素怎么定位呢&#xff1f;下拉框分为两种类型&#xff1a;我们分别针对这两种元素进行定位和…

2024最新 Jenkins + Docker 实战教程(五)- 配置Gitee Webhooks实现自动构建部署

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Packet Tracer-HSRP+DHCPv4+VLAN间路由+以太通道综合实验

实验拓扑&#xff1a; 实验内容&#xff1a; VLAN及VLAN间路由的配置&#xff0c;以太通道的配置&#xff0c;STP的根调整&#xff0c;DHCPv4的配置&#xff0c;首跳冗余HSRP的配置。 实验最终结果&#xff1a; PC可以自动获取到DHCP-Server分配的IP地址&#xff0c;实现首跳…

【Sentinel】Sentinel配置zk持久化

代码 import cn.hutool.core.util.StrUtil; import com.alibaba.csp.sentinel.datasource.ReadableDataSource; import com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.a…

信息系统工程师--八大绩效域-交付绩效域

信息系统工程师的八大绩效域包括&#xff1a;干系人、团队、开发方法和生命周期、项目工作、规划、交付、度量、不确定性。 预期目标 1、项目有助于实现业务目标和战略 2、项目实现了预期成果 3、在预定时间内实现了项目收益 4、项目团队对需求有清晰的理解 5、干系人接受…

GitLab的原理及应用详解(五)

本系列文章简介: 随着软件开发的不断进步和发展,版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具,在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能,还集成了项目管理、持续集成和部署、代码审查等多个功…

web学习笔记(五十七)

目录 1. 面试题总结 1.1 public和assets区别 1.2 vite的作用 1.3 vue单页面应用 1.4 组件分为两种类型&#xff1a; 1.5 App.vue文件 1.6 main.js 1.7 vue2中为什么不能直接监听到数组的改变&#xff1f; 2. .vue页面的组成 3. ref 响应式数据 1. 面试题总结 1.1…

Web3革命:探索科技与物联网的无限可能

引言 Web3时代正在悄然而至&#xff0c;带来了对互联网的彻底颠覆和改变。作为互联网的下一代&#xff0c;Web3不仅是技术革新的延续&#xff0c;更是对传统互联网模式的重新构想。在这个新时代&#xff0c;科技与物联网的结合将迎来无限的可能性&#xff0c;将探索到一片全新…

iOS系统故障怎么办?这三种苹果手机系统修复方法你一定要知道

随着苹果手机使用时间越长&#xff0c;苹果手机有时也会出现系统问题&#xff0c;如卡顿、崩溃、无法启动等。这些问题不仅影响用户的使用体验&#xff0c;还可能导致数据丢失。因此&#xff0c;掌握苹果手机系统修复方法显得尤为重要。本文将详细介绍苹果手机系统修复的常见方…

Leetcode 3153. Sum of Digit Differences of All Pairs

Leetcode 3153. Sum of Digit Differences of All Pairs 1. 解题思路2. 代码实现 题目链接&#xff1a;3153. Sum of Digit Differences of All Pairs 1. 解题思路 这一题的话只需要统计一下每一个位上0-9各自出现了多少次即可。 然后&#xff0c;对于每一位&#xff0c;答…

数仓领域,Serving 是什么概念?

在数据仓库&#xff08;Data Warehouse&#xff09;和更广泛的数据工程领域中&#xff0c;“Serving”通常指的是将处理和优化后的数据提供给最终用户或应用程序的过程。这包括数据的查询、检索、展示等操作&#xff0c;使得数据能够在决策支持、报告、分析、或机器学习等应用中…

大模型之Ollama:在本地机器上释放大型语言模型的强大功能

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

实战Java虚拟机-实战篇

一、内存调优 1.内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。内存泄漏绝大…

一番赏小程序开发,为玩家带来线上抽赏魅力

随着人们对娱乐消费的增加&#xff0c;以及二次元文化的快速发展&#xff0c;以动漫IP为主的一番赏受到了越来越多的年轻人关注&#xff0c;一番赏市场迎来了黄金发展期&#xff01; 一番赏的运营模式是以“限量”为主&#xff0c;不管什么商品数量都是有限的&#xff0c;因此…

微软刚发布的Copilot+PC为什么让Intel和AMD尴尬?2024 AI PC元年——产业布局及前景展望

美国东部时间5月20日在微软位于华盛顿的新园区举行的发布会上&#xff0c;宣布将旗下AI助手Copilot全面融入Windows系统&#xff0c;能够在不调用云数据中心的情况下处理更多人工智能任务。 “将世界作为一个提示词就从Windows系统开始”。微软的新PC将是“CopilotPC”&#xf…

[Algorithm][回溯][记忆化搜索][最长递增子序列][猜数字大小Ⅱ][矩阵中的最长递增路径]详细讲解

目录 1.最长递增子序列1.题目链接2.算法原理详解3.代码实现 2.猜数字大小 II1.题目链接2.算法原理详解3.代码实现 3.矩阵中的最长递增路径1.题目链接2.算法原理详解3.代码实现 1.最长递增子序列 1.题目链接 最长递增子序列 2.算法原理详解 题目解析&#xff1a;从每个位置&am…