首页 > 其他分享 >手机版简单的密码记录本:内置的记录在页面隐藏了删除按钮,页面上添加的显示删除按钮

手机版简单的密码记录本:内置的记录在页面隐藏了删除按钮,页面上添加的显示删除按钮

时间:2024-10-28 08:48:19浏览次数:7  
标签:website account document const 删除 按钮 password data 页面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
	<meta charset="UTF-8">
	<title>账号密码备忘录</title>
	<style>
		body {
			width: 100vw;
			height: 100vh;
			margin: 0;
			padding: 0;
			background-color: #144756;
		}
		.containerPasswordMemoTable {
			display: none;
			background-color: #144756;
		}
		#accountPasswordMemoTable {
			text-align: center;
			user-select: none;
			width: 100%;
		}
		#accountPasswordMemoTable th {
			color: #ebf704;
			background-color: #555;
		}
		#accountPasswordMemoTable td {
			color: hsl(160, 98%, 47%);
			text-shadow: 1px 1px 1px #100000;
		}
		#accountPasswordMemoTable button {
			color: hsla(0, 0%, 100%, 0.63);
			background-color: rgba(85, 85, 85, 0.5);
			text-shadow: 1px 1px 1px #100000;
			border: none;
			font-size: 16px;
		}
		#accountPasswordMemoTable p {
			user-select: text;
			background-color: rgba(220, 0, 0, 1);
			color: rgb(255, 213, 0);
			text-shadow: 1px 1px 1px #000;
			border-radius: 10px;
			box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6),
				inset 2px 2px 3px rgba(0, 0, 0, 0.6);
			background-image: linear-gradient(150deg, #5f2093, transparent);
		}
		#accountPasswordMemoTable b {
			color: rgb(255, 255, 255);
			text-shadow: 1px 1px 1px #000;
		}
	</style>
</head>
<body>
	<form id="mobileLoginForm">
		<button id="mobileLoginButton">登录</button>
	</form>
	<div class="containerPasswordMemoTable">
		<form id="accountPasswordMemoForm">
			<input type="text" id="inputWebsite" placeholder="请输入网站名称">
			<input type="text" id="inputAccount" placeholder="请输入账号">
			<input type="password" id="inputPassword" placeholder="请输入密码">
			<input type="text" id="inputNote" placeholder="请输入备注">
			<button type="submit">添加</button>
		</form>
		<table id="accountPasswordMemoTable" border="1">
			<tr>
				<th>网站</th>
				<th>账号</th>
			</tr>
		</table>
	</div>
	<script>
		const accountDataList = [{
				website: "QQ",
				accounts: [{
						account: "5555",
						password: "5555",
						note: "没有备注",
						"禁止删除": true
					},
					{
						account: "99999",
						password: "9993",
						note: "没有备注",
						"禁止删除": true,
					},
				]
			},
			{
				website: "微信",
				accounts: [{
					account: "手机号",
					password: "8883",
					note: "没有备注",
					"禁止删除": true
				}]
			},
			{
				website: "Steam",
				accounts: [{
					account: "88888",
					password: "8888n",
					note: "[email protected]",
					"禁止删除": true
				}]
			},
			{
				website: "csdn博客",
				accounts: [{
					account: "手机号",
					password: "81dayudian583",
					note: "没有备注",
					"禁止删除": true
				}]
			},
			{
				website: "原神",
				accounts: [{
						account: "1111",
						password: "81DRL583",
						note: "没有备注",
						"禁止删除": true
					},
					{
						account: "手机号",
						password: "81DRL583",
						note: "没有备注",
						"禁止删除": true
					}
				]
			}
		];
		// 从localStorage加载数据
		function loadData() {
			const storedData = localStorage.getItem('accountData');
			return storedData ? JSON.parse(storedData) : [];
		}
		// 将数据保存到localStorage
		function saveData(data) {
			localStorage.setItem('accountData', JSON.stringify(data));
		}
		let data = loadData();
		if (data.length === 0) {
			data = accountDataList;
			saveData(data); // 将初始化数据保存到localStorage
		}
		// 去重处理
		function removeDuplicates(data) {
			return data.map(item => {
				const uniqueAccounts = [];
				const accountSet = new Set();
				item.accounts.forEach(account => {
					const accountKey = `${item.website}-${account.account}-${account.password}`;
					if (!accountSet.has(accountKey)) {
						accountSet.add(accountKey);
						uniqueAccounts.push(account);
					}
				});
				return {
					...item,
					accounts: uniqueAccounts
				};
			});
		}
		const uniqueData = removeDuplicates(data);
		// 生成表格
		function generateTable(data) {
			const table = document.getElementById('accountPasswordMemoTable');
			if (!table) {
				console.error('表格元素未找到');
				alert('表格元素未找到,请检查页面结构。');
				return;
			}
			table.innerHTML = `
        <tr>
            <th width="110">网站</th>
            <th width="1000">账号</th>
        </tr>
    `;
			data.forEach(item => {
				item.accounts.forEach((account, index) => {
					const row = table.insertRow();
					if (index === 0) {
						const websiteCell = row.insertCell();
						websiteCell.textContent = item.website;
						websiteCell.rowSpan = item.accounts.length;
					} else {
						row.insertCell().style.display = 'none';
					}
					const accountCell = row.insertCell();
					accountCell.innerHTML =
						`${account.account}
                <button onclick="showPassword(this, '${account.password}', '${account.note}', ${account['禁止删除']}, '${item.website}', '${account.account}')">密码</button>`;
				});
			});
		}
		generateTable(uniqueData); // 生成初始表格
		// 添加数据的函数
		document.getElementById('accountPasswordMemoForm').addEventListener('submit', function(event) {
			event.preventDefault(); // 阻止默认提交
			const website = document.getElementById('inputWebsite').value;
			const account = document.getElementById('inputAccount').value;
			const password = document.getElementById('inputPassword').value;
			const note = document.getElementById('inputNote').value;
			const existingWebsite = data.find(item => item.website === website);
			if (existingWebsite) {
				existingWebsite.accounts.push({
					account,
					password,
					note,
					"禁止删除": false
				});
			} else {
				data.push({
					website,
					accounts: [{
						account,
						password,
						note,
						"禁止删除": false
					}]
				});
			}
			saveData(data); // 保存数据到localStorage
			generateTable(removeDuplicates(data)); // 生成更新后的表格
			document.getElementById('accountPasswordMemoForm').reset(); // 清空输入框
		});
		// 显示密码函数
		function showPassword(button, password, note, isDeleteAllowed, website, account) {
			const passwordCell = button.parentElement;
			if (!passwordCell.querySelector('p')) {
				const passwordSpan = document.createElement('p');
				passwordSpan.textContent = password;
				passwordCell.appendChild(passwordSpan);
				const detailsElement = document.createElement('p');
				detailsElement.innerHTML = `${note}`;
				passwordCell.appendChild(detailsElement);
				let deleteButton; // 定义删除按钮的变量
				if (!isDeleteAllowed) {
					deleteButton = document.createElement('button');
					deleteButton.textContent = '删除';
					deleteButton.style.color = 'red';
					deleteButton.onclick = () => deleteAccount(website, account);
					passwordCell.appendChild(deleteButton);
				}
				let countdown = 9;
				button.innerHTML = `显示<b>${countdown}</b>秒`;
				const countdownInterval = setInterval(() => {
					countdown--;
					button.innerHTML = `显示<b>${countdown}</b>秒`;
					if (countdown < 0) {
						clearInterval(countdownInterval);
						passwordCell.removeChild(passwordSpan);
						passwordCell.removeChild(detailsElement);
						button.textContent = "密码"; // 恢复按钮文本
						if (deleteButton) { // 如果存在删除按钮,则隐藏它
							deleteButton.style.display = 'none';
						}
					}
				}, 1000);
			}
		}
		// 删除账号的函数
		function deleteAccount(website, account) {
			const existingWebsite = data.find(item => item.website === website);
			if (existingWebsite) {
				existingWebsite.accounts = existingWebsite.accounts.filter(acc => acc.account !== account);
				if (existingWebsite.accounts.length === 0) {
					data = data.filter(item => item.website !== website);
				}
				saveData(data); // 更新localStorage
				generateTable(removeDuplicates(data)); // 更新表格
			}
		}
	</script>
	<script>
		document.addEventListener("DOMContentLoaded", function() {
			const loginButton = document.getElementById("mobileLoginButton");
			const passwordMemoContainer = document.querySelector(".containerPasswordMemoTable");
			const passwordInput = createPasswordInput();
			const errorMessage = createErrorMessage();
			const mobileLoginForm = document.getElementById("mobileLoginForm");
			mobileLoginForm.insertBefore(errorMessage, loginButton);
			mobileLoginForm.insertBefore(passwordInput, loginButton);
			loginButton.addEventListener("click", function(event) {
				event.preventDefault(); // 防止表单提交
				handleLoginClick(passwordMemoContainer, loginButton, passwordInput, errorMessage);
			});
		});
		function createPasswordInput() {
			const input = document.createElement("input");
			input.setAttribute("type", "password");
			input.setAttribute("placeholder", "请输入密码");
			return input;
		}
		function createErrorMessage() {
			const div = document.createElement("div");
			div.style.color = "red"; // 设置提示文本颜色为红色
			div.style.display = "none"; // 初始隐藏错误提示
			return div;
		}
		function handleLoginClick(passwordMemoContainer, loginButton, passwordInput, errorMessage) {
			const isLoggingOut = loginButton.textContent === "退出登录";
			if (isLoggingOut) {
				// 处理退出登录逻辑
				passwordMemoContainer.style.display = "none";
				loginButton.textContent = "登录"; // 修改为“手机登录”
				passwordInput.value = ""; // 清空密码输入框
				passwordInput.style.display = " inline-block"; // 显示密码输入框
				loginButton.style.display = " inline-block"; // 显示登录按钮
			} else {
				// 登录逻辑
				if (validatePassword(passwordInput.value)) {
					errorMessage.style.display = "none"; // 隐藏错误提示
					passwordMemoContainer.style.display = "block"; // 显示密码备忘录部分
					passwordInput.value = ""; // 清空密码输入框
					passwordInput.style.display = "none"; // 隐藏密码输入框
					loginButton.textContent = "退出登录"; // 修改按钮文本为"退出登录"
					loginButton.style.display = "block"; // 显示退出按钮
				} else {
					errorMessage.textContent = "密码错误,请重试"; // 设置错误提示文本
					errorMessage.style.display = "block"; // 显示错误提示
				}
			}
		}
		function validatePassword(password) {
			return password === "1"; // 可以根据需求修改密码验证逻辑
		}
	</script>
</body>
</html>

标签:website,account,document,const,删除,按钮,password,data,页面
From: https://blog.csdn.net/lulei5153/article/details/143279353

相关文章

  • 图书进销存管理系统-登录页面-c#
    <Windowx:Class="Book.LoginWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com......
  • node1:9870打不开web页面
    我根据网上众多博客1.首先检查是否启动集群服务,检查是否启动集群服务,没有启动集群是无法打开web界面的输入下面命令查询是否启动服务jps如果未打开则输入如下命令:2.在主节点机器上上输入 hadoop-daemon.shstartnamenode然后在各个节点机器上输入hadoop-daemon.shstart......
  • Linux多ip地址如何删除多余ip
    问题场景:linux支持多个ip连接一个节点,但是ifconfig往往只列出其中一个ip,而ip命令能够显示所有ip,这可能会在某些场景造成一定问题,比如对本机有多ip不知情但又管理多客户机者,可能造成寻找困难的问题。比如:我一台俩ip机子执行ifconfig结果如下执行ipa可以看到如果只执行ifco......
  • 博客园自定义页面样式
    TheFirsttoSay花了两天,重写了博客的页面样式。整体风格是按照_darkgreentrip_的风格去改的,使之更接近苯人的风格。最后在结尾放了一些格子可以用来导航,有好用的网站大概会放在这里。自己其实有做过导航站,但是由于挂在GitHub上,网速比较慢,现在扔在下面平时也稍微能用用()下面贴......
  • 如何安全彻底地删除GitHub上的fork项目
    GitHub提供了一个功能,允许用户fork其他开发者的项目,但在某些情况下,我们可能需要删除fork的项目。本文将指导您如何安全、彻底地进行此操作:1.确认删除的必要性;2.备份重要数据;3.删除项目;4.检查与原项目的联系;5.清除本地仓库。删除GitHub上的fork项目是一个相对简单的过程,但在执行之......
  • 有趣的html页面
    有趣的html页面No1<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document<......
  • GitLab怎么删除项目
    ​​GitLab中删除项目步骤:1.备份项目数据;2.删除项目:Web界面;3.删除项目:使用API;4.安全性和权限问题;5.反思和最佳实践。无论您是项目所有者还是管理员,理解如何正确管理和删除GitLab项目都是确保工作流程平稳运行的关键。1.备份项目数据在删除GitLab项目之前,我们首要......
  • 在VUE框架下使用vue-router来进行局部页面跳转
    在VUE框架下使用vue-router来进行局部页面跳转1、创建并绑定路由文件2、在Vue文件下,使用路由来进行跳转步骤如下:1、创建并绑定路由文件①创建路由文件在路径"./{prjName}/src/router"下创建router.ts文件import{createRouter,createWebHistory,createWebHashHistory}......
  • [QT基础系列]单选按钮QRadioButton
    单选按钮QRadioButtonQt中的单选按钮类是QRadioButton它是一个可以切换选中(checked)或未选中(unchecked)状态的单选按钮单选按钮常用在“多选一”的场景,也就是说,在一组单选按钮中,一次只能选中一个单选按钮比如性别中的“男女”二选一,学历中的“博士/硕士/本科/其他......
  • [QT基础系列]复选按钮QCheckBox
    复选按钮QCheckBoxQt中的复选按钮类是QCheckBox它和[单选按钮]很相似,单选按钮常用在“多选一”的场景,而复选按钮常用在"多选多"的场景比如喜欢的水果选项中,可以在“苹果/桃/梨/橘子/香蕉”中选择多个。文本这两个是其父类QAbstractButton中的属性和方法,因此......