关于<ul></ul>标签 -webkit-padding-start: 40px;兼容性问题

本文介绍了一种常见的网页布局问题——导航菜单中的ul元素相对于其父级div元素左偏移,以及li元素内的文本变为竖排显示的问题,并提供了两种解决方案。

这是ul部分CSS代码:

.nav ul{
   list-style-type:none;
   width:200px;
   height:30px;
   }

css代码部分没有任何问题


这是html代码:

  <div class="nav">
    <ul>
	    <li>首页</li>
	    <li>博客</li>
	    <li>简介</li>
	    <li>电话</li>
	</ul>
   </div>

都是很简单的代码

却出现如下的问题:

ul左边明显想左边偏离div盒子40px,于是样式产生一系列莫名的变化,包括li标签内文字变成了竖版(莫名其妙,可能是我宽度也写得比较小)

解决方法:

一:

*{margin:0;padding:0}

(代码写起来很简单,但通常不建议使用,因为是通配符,会把所有标签遍历一遍,如果网站较大,会占用很多资源)


二:

  1. body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, table, th, td {margin:0; padding:0;}   

(看起来有点长,但明确写明了每个标签元素内外边界初始化,推荐使用。)

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CAD属性块分类树状视图</title> <style> /* 禁用整个页面的滚动条 */ html, body { margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden; font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; white-space: nowrap; } /* 主容器 - 固定宽度避免闪烁 */ .container { display: flex; flex-direction: column; height: 100vh; width: 100vw; max-width: 100vw; overflow: hidden; background-color: rgba(255, 255, 255, 0.9); position: relative; } /* 标题样式 */ .header { background: linear-gradient(to right, #2c3e50, #4a6491); color: white; padding: 15px 20px; text-align: center; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .header h1 { margin: 0; font-size: 24px; font-weight: 600; } /* 内容区域 */ .content { display: flex; flex: 1; overflow: hidden; flex-direction: column; flex-wrap: nowrap; justify-content: flex-start; } .icon { color: #f1c40f; padding-right: 3px; } /* 树状结构容器 */ .tree-container { flex: 1; background: rgb(59 68 83); color: white; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08); padding: 0px 5px 5px 5px; display: flex; flex-direction: column; overflow: hidden; } /* 树状结构样式 */ .tree { list-style: none; padding: 0; margin: 0; } .tree, .tree ul { list-style: none; padding-left: 25px; } .tree li { margin: 2px 0; position: relative; } .node { display: flex; cursor: pointer; transition: all 0.2s; background-color: rgb(0 0 0 / 35%); flex-direction: row; flex-wrap: nowrap; justify-content: flex-start; white-space: nowrap; font-size: 1rem; } .node:hover { background-color: #877739; } .toggle { width: 20px; height: 20px; margin-right: 10px; display: flex; align-items: center; justify-content: center; background-color: #4a6572; color: white; font-size: 14px; cursor: pointer; transition: all 0.2s; } .toggle:hover { background-color: #344955; } .node-name { flex: 1; color: white; } .node-count { padding: 2px 8px; border-radius: 10px; font-size: 12px; min-width: 30px; text-align: center; } /* 自定义滚动条 */ .tree-scroll { flex: 1; overflow-y: scroll; overflow-x: auto; padding-right: 5px; border: 1px solid rgb(0 0 0); box-shadow: 0 1px 1px rgb(59 63 89); } /* 自定义滚动条样式 */ .tree-scroll::-webkit-scrollbar { width: 0px; } /* 整个水平滚动条容器 */ .tree-scroll::-webkit-scrollbar:horizontal { height: 10px; } .tree-scroll::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 1px; } /* 水平滚动条轨道 */ .tree-scroll::-webkit-scrollbar-track:horizontal { background: #f1f1f1; /* 轨道背景色 */ border-radius: 5px; /* 圆角 */ } .tree-scroll::-webkit-scrollbar-thumb { background: #a0a0a0; border-radius: 1px; } /* 水平滚动条滑块 */ .tree-scroll::-webkit-scrollbar-thumb:horizontal { border-radius: 5px; /* 滑块圆角 */ border: 1px solid #f1f1f1; /* 滑块边框 */ } .tree-scroll::-webkit-scrollbar-thumb:hover { background: #808080; } /* 鼠标悬停时滑块样式 */ .tree-scroll::-webkit-scrollbar-thumb:horizontal:hover { background: #808080; } /* 统计信息面板 */ .stats-panel header { font-size: 14px; color: white; border-bottom: 1px dashed rgb(0 0 0); } .stats-panel { width: auto; margin-left: 0; margin-top: 5px; border: 1px solid rgb(0 0 0); } .stat-item { font-size: 12px; display: flex; justify-content: space-between; border-bottom: 1px dashed rgb(0 0 0); flex-direction: row; flex-wrap: nowrap; text-align: center; } .stat-item:last-child { border-bottom: none; } .stat-label { flex: 1; color: #f1c40f; display: flex; flex-direction: row; flex-wrap: nowrap; text-align: center; justify-content: flex-start; align-items: center; white-space: nowrap; padding-left: 2px; border-right: 1px dashed rgb(0 0 0); } .stat-value { flex: 1; color: #4ec3af; display: flex; white-space: nowrap; flex-direction: row; flex-wrap: nowrap; text-align: center; justify-content: flex-end; align-items: center; padding-right: 2px; } .search-box { width: 10%; position: relative; margin-top: 2px; border-bottom: 1px solid rgb(0 0 0); } .search-box input { padding: 0px 15px 0px 5px; border-radius: 30px; font-size: 14px; outline: none; transition: all 0.3s; } .search-box input:focus { } .search-icon { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: #7f8c8d; } /* 响应式设计 */ @media (max-width: 768px) { .content { flex-direction: column; } } </style> </head> <body> <div class="container"> <div class="content"> <div class="tree-container"> <div class="tree-scroll" id="treeScroll"> <ul class="tree" id="treeRoot"> <!-- 树状结构将通过JavaScript动态生成 --> </ul> </div> <div class="stats-panel"> <header>属性</header> <div class="stat-item"> <span class="stat-label">名称:</span> <span class="stat-value" id="att_tag1">气动隔膜阀</span> </div> <div class="stat-item"> <span class="stat-label">位号:</span> <span class="stat-value" id="att_tag2" color>B1TA4001AV101</span> </div> <div class="stat-item"> <span class="stat-label">设备描述:</span> <span class="stat-value" id="att_tag3"></span> </div> <div class="stat-item"> <span class="stat-label">材质:</span> <span class="stat-value" id="att_tag4">文本标注 (5)</span> </div> <div class="stat-item"> <span class="stat-label">介质名称(中):</span> <span class="stat-value" id="att_tag5">17.75</span> </div> <div class="stat-item"> <span class="stat-label">介质粘度:</span> <span class="stat-value" id="att_tag6">17.75</span> </div> <div class="stat-item"> <span class="stat-label">介质密度:</span> <span class="stat-value" id="att_tag7">17.75</span> </div> <div class="stat-item"> <span class="stat-label">DOCUMENTNO_1:</span> <span class="stat-value" id="att_tag8">17.75</span> </div> <div class="stat-item"> <span class="stat-label">连接类型:</span> <span class="stat-value" id="att_tag7">17.75</span> </div> </div> </div> </div> </div> <script> // CAD属性块数据 const cadData = { name: "所有属性块", count: 142, children: [ { name: "机械部件", count: 45, children: [ { name: "齿轮", count: 12 }, { name: "轴承", count: 18 }, { name: "联轴器", count: 8 }, { name: "紧固件", count: 7 } ] }, { name: "电气元件", count: 32, children: [ { name: "开关", count: 10 }, { name: "继电器", count: 8 }, { name: "变压器", count: 6 }, { name: "连接器", count: 8 } ] }, { name: "管道系统", count: 28, children: [ { name: "阀门", count: 9 }, { name: "法兰", count: 7 }, { name: "管接头", count: 8 }, { name: "过滤器", count: 4 } ] }, { name: "结构组件", count: 22, children: [ { name: "梁", count: 8 }, { name: "柱", count: 7 }, { name: "支架", count: 5 }, { name: "底座", count: 2 } ] }, { name: "注释符号", count: 15, children: [ { name: "尺寸标注", count: 6 }, { name: "表面粗糙度", count: 4 }, { name: "焊接符号", count: 3 }, { name: "形位公差", count: 2 } ] } ] }; // 搜索功能 function setupSearch() { const searchInput = document.getElementById('searchInput'); searchInput.addEventListener('input', function() { const searchTerm = this.value.toLowerCase().trim(); const allLeafNodes = document.querySelectorAll('.tree-scroll'); // 重置所有样式 allLeafNodes.forEach(node => { node.classList.remove('highlight'); node.style.display = ''; }); // 如果没有搜索词,显示所有节点 if (searchTerm === '') { // 展开所有节点 document.querySelectorAll('node').forEach(detail => { detail.open = false; }); return; } // 搜索匹配项并高亮显示 let found = false; allLeafNodes.forEach(node => { const itemName = node.querySelector('.item-name').textContent.toLowerCase(); if (itemName.includes(searchTerm)) { node.classList.add('highlight'); found = true; // 展开父节点 let parent = node.closest('details'); while (parent) { parent.open = true; parent = parent.parentElement.closest('details'); } } else { node.style.display = 'none'; } }); if (!found) { // 如果没有找到匹配项,显示所有节点 allLeafNodes.forEach(node => { node.style.display = ''; }); } }); } // 生成树状结构 function generateTree(data, parentElement) { const li = document.createElement('li'); const node = document.createElement('div'); node.className = 'node'; const toggle = document.createElement('div'); toggle.className = 'toggle'; toggle.textContent = '➕'; const icon = document.createElement('div'); icon.className = 'icon'; icon.textContent = '👮'; const nameSpan = document.createElement('span'); nameSpan.className = 'node-name'; nameSpan.textContent = data.name; const countSpan = document.createElement('span'); countSpan.className = 'node-count'; countSpan.textContent = data.count; node.appendChild(icon); node.appendChild(nameSpan); node.appendChild(countSpan); node.appendChild(toggle); li.appendChild(node); if (data.children && data.children.length > 0) { const childUl = document.createElement('ul'); data.children.forEach(child => { generateTree(child, childUl); }); li.appendChild(childUl); // 添加展开/折叠事件 toggle.addEventListener('click', function(e) { e.stopPropagation(); const isExpanded = childUl.style.display !== 'none'; if (isExpanded) { childUl.style.display = 'none'; toggle.textContent = '➕'; node.classList.remove('expanded'); } else { childUl.style.display = 'block'; toggle.textContent = '➖'; node.classList.add('expanded'); } }); // 初始折叠状态 childUl.style.display = 'none'; } else { toggle.style.visibility = 'hidden'; } parentElement.appendChild(li); } // 初始化树状视图 document.addEventListener('DOMContentLoaded', function() { const treeRoot = document.getElementById('treeRoot'); generateTree(cadData, treeRoot); }); </script> </body> </html> 帮我修改这个代码,要求在树容器顶部加一个搜索框,只要根据输入内容在树节点中搜到结果,就会展开对应节点且高亮显示搜索结果
07-03
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>唯美 </title> <meta name="keywords" content=" "> <meta name="description" content=" "> <meta name="author" content="www."> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="css/reset.css" type="text/css" media="all"> <link rel="shortcut icon" href="index/images/favicon.ico"> <link rel="stylesheet" href="css/jquery.fancybox-1.3.4.css" type="text/css" media="screen"> <link rel="stylesheet" href="css/style.css" type="text/css" media="all"> <link href="css/prettyPhoto.css" rel="stylesheet" /> <script type="text/javascript" src="js/jquery.min.js" ></script> <script type="text/javascript" src="js/content_switch.js"></script> <script type="text/javascript" src="js/jquery.easing.1.3.js"></script> <script type="text/javascript" src="js/jquery.mousewheel.js"></script> <script type="text/javascript" src="js/jquery-ui.js"></script> <script type="text/javascript" src="js/cScroll.js"></script> <script src="js/jquery.cycle.all.latest.js" type="text/javascript"></script> <script src="js/jquery.color.js" type="text/javascript"></script> <script type="text/javascript" src="js/script.js"></script> <script type="text/javascript" src="js/functions.js"></script> <script src="js/prettyPhoto.js"></script> <!--[if lt IE 9]> <script type="text/javascript" src="./js/html5.js"></script> <link rel="stylesheet" href="./css/ie.css" type="text/css" media="all"> <![endif]--> <!--[if lt IE 8]> <div style=' clear: both; text-align:center; position: relative;'> <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode"><img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." /></a> </div> <![endif]--> <body onpaste="return false" ondragstart="return false" onmouseover="window.status='';return true" oncopy="return false;"> <frameset> <frame src="index.html"> </frameset> <script> function stop(){ alert('宝贝,我爱你!'); return false; } document.oncontextmenu=stop; </script> <body onselectstart="return false" onpaste="return false" oncopy="return false;" oncut="return false;" > <script> function checkhtml5() { if ($.browser.msie && parseInt($.browser.version, 10) < 9) { document.body.innerHTML="<div style=' clear: both; text-align:center; position: relative; height: 50px; margin-top: 30px; padding: 20px; background-color: red; color: white; font-size:20px;'>你的浏览器非常落后,不支持 HTML5!<br/>请使用 Chrome 14+/IE 9+/Firefox 7+/Safari 4+ 其中任意一款浏览器访问此页面。</a></div>"; } } </script> <head> <style> a.wb_sina { float:left; margin-top:20px; margin-left:15px; display:inline-block; padding:4px 10px; border-radius:3px; background-color:#e55345; background-image:-moz-linear-gradient(top,#e96249,#e03c40); background-image:-ms-linear-gradient(top,#e96249,#e03c40); background-image:-webkit-gradient(linear,0 0,0 100%,from(#e96249),to(#e03c40)); background-image:-webkit-linear-gradient(top,#e96249,#e03c40); background-image:-o-linear-gradient(top,#e96249,#e03c40); background-image:linear-gradient(top,#e96249,#e03c40); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e96249',endColorstr='#e03c40',GradientType=0); background-repeat:repeat-x; text-shadow:0 -1px 0 rgba(0,0,0,.5); border:1px solid #cf2b28; color:#fff!important; box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 0 rgba(0,0,0,.2); } a.wb_sina:hover { background-image:-moz-linear-gradient(top,#e03c40,#e96249); background-image:-ms-linear-gradient(top,#e03c40,#e96249); background-image:-webkit-gradient(linear,0 0,0 100%,from(#e03c40),to(#e96249)); background-image:-webkit-linear-gradient(top,#e03c40,#e96249); background-image:-o-linear-gradient(top,#e03c40,#e96249); background-image:linear-gradient(top,#e03c40,#e96249); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e03c40',endColorstr='#e96249',GradientType=0); } a.wb_sina span { display:inline-block; vertical-align:-5px; margin-right:7px; height:20px; width:24px; background:url(./images/weibo.png) no-repeat; } a.wb_tencent { float:left; margin-top:20px; margin-left:15px; display:inline-block; padding:4px 10px; border-radius:3px; background-color:#0e7fcc; background-image:-moz-linear-gradient(top,#1288d4,#0771c1); background-image:-ms-linear-gradient(top,#1288d4,#0771c1); background-image:-webkit-gradient(linear,0 0,0 100%,from(#1288d4),to(#0771c1)); background-image:-webkit-linear-gradient(top,#1288d4,#0771c1); background-image:-o-linear-gradient(top,#1288d4,#0771c1); background-image:linear-gradient(top,#1288d4,#0771c1); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1288d4',endColorstr='#0771c1',GradientType=0); background-repeat:repeat-x; text-shadow:0 -1px 0 rgba(0,0,0,.5); border:1px solid #0D6EB8; color:#fff!important; box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 0 rgba(0,0,0,.2); } a.wb_tencent:hover { background-color:#0e7fcc; background-image:-moz-linear-gradient(top,#0771c1,#1288d4); background-image:-ms-linear-gradient(top,#0771c1,#1288d4); background-image:-webkit-gradient(linear,0 0,0 100%,from(#0771c1),to(#1288d4)); background-image:-webkit-linear-gradient(top,#0771c1,#1288d4); background-image:-o-linear-gradient(top,#0771c1,#1288d4); background-image:linear-gradient(top,#0771c1,#1288d4); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0771c1',endColorstr='#1288d4',GradientType=0); } a.wb_tencent span { display:inline-block; vertical-align:-5px; margin-right:7px; height:20px; width:24px; background:url(./images/weibo.png) no-repeat 0 -20px; } #abox { position: fixed; _position: absolute; right: 15px; z-index: 99999999; } </style> </head> <body> <body onLoad="checkhtml5()"> <div id="abox"> </div> <div class="page_spinner"> <div></div> </div> <div class="over"> <div class="centre"> <div class="main"> <!--header --> <header> <h1><span id="logo"><img src="images/logo1.png" alt="" usemap="#logo"></span></h1> <nav class="menu"> <ul id="menu"> <li id="nav1"><img src="images/nav1.png" alt=""><span>爱的宣誓</span></li> <li id="nav2"><img src="images/nav2.png" alt=""><span>恋爱历程</span> </li> <li id="nav3"><img src="images/nav3.png" alt=""><span>絮叨絮叨</span></li> <li id="nav4"><img src="images/nav4.png" alt=""><span>祝福我们</span></li> <li id="nav5"><img src="images/nav5.png" alt=""><span>爱的映像</span></li> <li id="nav6"><img src="images/nav6.png" alt=""><span>时光沙漏</span></li> </ul> </nav> <img src="images/spacer.gif" alt="" id="navigation" usemap="#navigation"> <map name="navigation" class="navigation"> </map> <map name="logo" class="map_logo"></map> </header> <!--header end--> <!--content --> <map name="back" class="map_back"></map> <article id="content"> <ul> <li id="page_Home"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav1.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>爱的宣誓</h2> 人物:浟佳 & 宝贝<br /> 不在乎曾经拥有,只在乎天长地久。<br /> 爱,就要说出来!<br /> 再美好的回忆,也只是回忆;<br /> 再美丽的诺言,不到实现的那一刻,也只是一句空话。<br/> -- </div> </li> <li id="page_About"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav2.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>恋爱历程</h2> <div class="relative"> <div class="scroll"> <span>人物:浟佳 & 宝贝</span> <p>    宝贝你还记得么?</p> <p>    XX年X月X日。</p> <p>    我们在xx相遇。</p> <p>    然后.........</p> <p>    过程.........</p> <p>    我爱你,我会一直陪在你身边</p> <p>    不离不弃</p> <p>     - </p> </div> </div> </div> </li> <li id="page_Talk"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav3.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>絮叨絮叨</h2> <div class="relative"> <div class="scroll"> <div style="width:100%;float: left; border-bottom: 1px solid #CCCCCC;">浟佳<br/><span style="float: right"> --by </span></div> <div style="width:100%;float: left">分享我所知道的<br/><span style="float: right"> --by </span></div> </div> </div> </div> </li> <li id="page_Message"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav4.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>祝福我们</h2> <div class="relative"> <div class="scroll"> <div style="min-height: 300px; padding-bottom: 50px;"> <!-- 多说评论框 start --> <div class="ds-thread" data-thread-key="yyu" data-title="bb" data-url="http://"></div> <!-- 多说评论框 end --> <!-- 多说公共JS代码 start (一个网页只需插入一次) --> <script type="text/javascript"> var duoshuoQuery = {short_name:"love90"}; (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '/static.duoshuo.com/embed.js'; ds.charset = 'UTF-8'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); </script> <!-- 多说公共JS代码 end --> </div> </div> </div> </div> </li> <li id="page_Blog"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav5.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>爱的映像</h2> <div class="relative"> <div class="scroll"> <ul class="gallery fancybox"> <li style="line-height:120px"><a href="images/uploadimage/imglsh001.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh001small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh001.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh001small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img004.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img004small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img004.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img004small.jpg" alt=""></a></li> </ul> </div> </div> </div> </li> <li id="page_Time"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav6.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>时光沙漏</h2> <div id="loveHeart" style="margin-top: 30px;font-size: 25px;"> <span style="">宝贝你知道我爱你爱了多久了吗?</span> <div id="elapseClock" style="margin: 10px 0px 10px 0px;"></div> <img src="images/1.gif" />    <img src="images/2.gif" /><br/><br/> <div id="loveu"> 爱:从2014-2-6开始!<br/> <div class="signature" style="float: right; margin-right: 50px;">by 浟佳 </div> </div> </div> </div> </li> </ul> </article> <!--content end--> </div> </div> <div class="bg1"> <div class="main"> <!--footer --> <footer style="line-height:20px"> <div id="copyright"> <script language="JavaScript"></script> </div> <!-- {%FOOTER_LINK} --> </footer> <!--footer end--> </div> </div> </div> <script> $(window).load(function() { $('.page_spinner').fadeOut(); $('body').css({overflow:'visible'}); }) </script> <script type="text/javascript">//修改时光沙漏时间 var offsetX = $("#loveHeart").width() / 2; var offsetY = $("#loveHeart").height() / 2 - 55; var together = new Date(); together.setFullYear(2014, 02, 06); together.setHours(17); together.setMinutes(0); together.setSeconds(0); together.setMilliseconds(0); setTimeout(function () { adjustWordsPosition(); startHeartAnimation(); }, 3000); timeElapse(together); setInterval(function () { timeElapse(together); }, 500); adjustCodePosition(); $("#code").typewriter(); </script> <audio id="bgmMusic" src="http://www.51mp3ring.com/51mp3ring_com2/at200611121582079026.mp3" preload="auto" type="audio/mp3" autoplay loop></audio> <!--coded by koma--> <!--LIVEDEMO_00 --> </body> </head> </html>补充并修改该代码
05-21
<template> <view class="container"> <view class="banner-section"> <image class="banner-image" src="/static/IntegrityCulture.png" /> </view> <view class="title">廉洁文化资讯</view> <view class="news-list"> <scroll-view scroll-y="true" :enhanced="true" :show-scrollbar="false" > <view v-for="item in newsList" :key="item.id" class="news-item" @click="navigateToDetail(item)" > <view class="news-content"> <text class="news-title">{{ item.title }}</text> <text class="news-summary">{{ item.summary }}</text> <text class="news-date">{{ item.publishDate }}</text> </view> <view class="status-box" :class="item.read ? 'read' : 'unread'" > {{ item.read ? '已阅' : '未阅' }} </view> </view> </scroll-view> </view> </view> </template> <script setup> import { ref, onMounted } from 'vue'; const newsList = ref([]); const fetchData = () => { setTimeout(() => { newsList.value = [ { id: 1, title: '廉洁从业,从我做起', summary: '廉洁从业是每一位员工应尽的责任和义务,本文介绍了公司廉洁文化建设的相关要求和实践。', publishDate: '2024-09-10', read: true }, { id: 2, title: '加强反腐倡廉,构建阳光企业', summary: '公司持续加强反腐倡廉工作,推动形成风清气正的企业文化氛围。', publishDate: '2024-09-08', read: false }, { id: 3, title: '廉洁文化进班组,清风正气润人心', summary: '公司组织廉洁文化进班组活动,通过宣传、培训等方式提升员工廉洁意识。', publishDate: '2024-09-05', read: false }, ]; }, 500); }; onMounted(fetchData); const navigateToDetail = (item) => { uni.navigateTo({ url: `/pages/IntegrityCulture/IntegrityCultureDetail/IntegrityCultureDetail?id=${item.id}` }); }; </script> <style scoped> /* 整体容器 */ .container { padding: 30rpx; background-color: #f9f9f9; height: 100%; overflow: hidden; box-sizing: border-box; /* display: flex; */ flex-direction: column; } /* 顶部区域 */ .banner-section { margin-bottom: 40rpx; border-radius: 16rpx; overflow: hidden; box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1); flex-shrink: 0; } .banner-image { width: 100%; height: 320rpx; display: block; } .title { font-size: 36rpx; font-weight: bold; text-align: center; display: block; margin-bottom: 40rpx; flex-shrink: 0; } /* 滚动区域 */ .news-list { background-color: #fff; border-radius: 16rpx; overflow: hidden; flex: 1; min-height: 0; display: flex; flex-direction: column; box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05); } /* 滚动容器 */ .scroll-container { flex: 1; min-height: 0; overflow: hidden; /* box-sizing: border-box; */ } /* 隐藏滚动条 */ .scroll-view ::-webkit-scrollbar { display: none; width: 0; height: 0; color: transparent; } /* 新闻项样式 */ .news-item { padding: 30rpx; display: flex; justify-content: space-between; align-items: flex-start; border-bottom: 1rpx solid #eee; transition: background-color 0.2s; } .news-item:active { background-color: #f5f7fa; } .news-content { flex: 1; padding-right: 20rpx; } .news-title { font-size: 32rpx; font-weight: bold; color: #333; display: block; margin-bottom: 10rpx; } .news-summary { font-size: 28rpx; color: #666; display: block; margin-bottom: 10rpx; line-height: 1.5; } .news-date { font-size: 24rpx; color: #999; display: block; } .status-box { padding: 8rpx 16rpx; font-size: 24rpx; border-radius: 8rpx; min-width: 80rpx; text-align: center; flex-shrink: 0; } .status-box.read { background-color: rgba(76, 175, 80, 0.1); color: #4caf50; } .status-box.unread { background-color: rgba(244, 67, 54, 0.1); color: #f44336; } /* 响应式调整 */ @media (max-height: 600px) { .banner-image { height: 280rpx; } .news-list { border-radius: 12rpx; } } </style> 帮我修改这段代码,我想要限定列表板块的高度超出部分隐藏,然后该板块滚动不影响其他板块
08-15
<template> <div> <h3>课程信息</h3> <el-form ref="form" :model="form" label-width="80px"> <el-form-item label=""> 课程名称 <el-input v-model="form.courseName" style="width: 200px"></el-input> 课程时间 <el-date-picker v-model="startEndTime" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" > </el-date-picker> <el-button style="background-color: red; color: aliceblue" >搜索</el-button > </el-form-item> </el-form> <div id="box"> <ul> <li v-for="v in list" :key="v.userCourseId"> <div style="text-align: center"> <el-button @click="toCourseDetail(v.userCourseId, v.id)"> <img v-bind:src="v.pic" alt="" /> <h4>{{ v.courseName }}</h4> <p style="white-space: pre-wrap">{{ v.introduce }}</p> </el-button> </div> </li> </ul> </div> <div> <el-dialog title="提示" :visible.sync="centerDialogVisible" width="50%" style="height: 70%" center > <div id="box"> <li> <img v-bind:src="userCourse.pic" alt="" /> <h4>{{ userCourse.courseName }}</h4> <p style="white-space: pre-wrap">{{ userCourse.introduce }}</p> <el-table :data="afterTable"> <el-table-column property="content" label="教练反馈" ></el-table-column> <!-- 分页组件 --> <el-pagination background layout="prev, pager, next" :total="total2" :page-size="pageSize2" :current-page="pageNum2" @current-change="handlePageChange2" ></el-pagination> </el-table> </li> </div> <span slot="footer" class="dialog-footer"> <el-button @click="centerDialogVisible = false">取 消</el-button> <!-- 条件渲染:取消预约 或 删除 按钮 --> <template v-if="canCancelBooking"> <el-button type="warning" @click="deleteUserCourse"> 取消预约 </el-button> </template> <template v-else> <el-button type="danger" @click="deleteUserCourse"> 删除 </el-button> </template> <el-button type="primary" @click="courseDetail">确 定</el-button> </span> </el-dialog> </div> <!-- 分页组件 --> <el-pagination background layout="prev, pager, next" :total="total" :page-size="pageSize" :current-page="pageNum" @current-change="handlePageChange" ></el-pagination> </div> </template> <script> import { findAllUserCourse } from "@/api/user"; import { findCourseById } from "@/api/user"; import { getAfterByCourseId } from "@/api/user"; import { deleteUserCourse } from "@/api/user"; export default { data() { return { centerDialogVisible: false, startEndTime: "", pageSize: 6, pageNum: 1, total: 0, pageSize2: 6, pageNum2: 1, total2: 0, list: [], form: { startTime: "", endTime: "", page: "", size: "", resname: "", userId: "", }, userCourse: { userId: "", courseId: "", pic: "", courseName: "", resname: "", introduce: "", src: "", startTime: "", }, resBody: { page: "", size: "", courseId: "", }, afterTable: [ { coachName: "", content: "", }, ], }; }, created() { this.findAllUserCourse(); }, computed: { canCancelBooking() { const userCourse = this.userCourse; if (!userCourse?.startTime) { return false; // 数据未加载 } const now = new Date(); const startTime = new Date(userCourse.startTime); return !isNaN(startTime) && now < startTime; // 防止非法日期 }, }, methods: { deleteUserCourse() { this.userCourse.courseId = this.userCourse.id; this.userCourse.userId = localStorage.getItem("userId"); console.log(this.userCourse); deleteUserCourse(this.userCourse).then((resp) => { if (resp.data.code == 200) { this.$message.success("删除成功"); location.reload(); } else { this.$message.error("删除失败"); } }); }, findAllUserCourse() { this.form.userId = localStorage.getItem("userId"); this.form.page = this.pageNum; this.form.size = this.pageSize; this.form.resname = this.form.courseName; this.form.startTime = this.formatDate(this.startEndTime[0]); this.form.endTime = this.formatDate(this.startEndTime[1]); findAllUserCourse(this.form).then((resp) => { this.list = resp.data.data.courses.list; console.log(this.list); this.total = resp.data.data.courses.total; this.form.startTime = ""; this.form.endTime = ""; }); }, toCourseDetail(userCourseId, id) { this.centerDialogVisible = true; this.courseDetail(id); this.resBody.courseId = id; this.getAfterByCourseId(); }, getAfterByCourseId() { this.resBody.size = this.pageSize2; this.resBody.page = this.pageNum2; getAfterByCourseId(this.resBody).then((resp) => { console.log(resp.data.data.afters); this.afterTable = resp.data.data.afters.list; }); }, courseDetail(id) { findCourseById(id).then((resp) => { this.userCourse = resp.data; }); }, handlePageChange(page) { this.pageNum = page; this.findAllUserCourse(); }, handlePageChange2(page) { this.pageNum = page; this.getAfterByCourseId(); }, formatDate(date) { if (!date) return ""; const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, "0"); const day = date.getDate().toString().padStart(2, "0"); const hours = date.getHours().toString().padStart(2, "0"); const minutes = date.getMinutes().toString().padStart(2, "0"); const seconds = date.getSeconds().toString().padStart(2, "0"); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }, }, }; </script> <style scoped> #box ul { display: flex; flex-wrap: wrap; position: absolute; top: 220px; } #box li { padding: 3px; list-style: none; margin-right: 15px; border: 1px solid #eee; text-align: center; } #box img { width: 200px; height: 150px; } </style>也漂亮点
最新发布
09-23
{% extends "sales/base.html" %} {% block header %}发票开具查询{% endblock %} {% block content %} <style> .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } .table thead th { white-space: nowrap; position: sticky; top: 0; background-color: #0d6efd; color: white; z-index: 10; } .table tbody td { white-space: nowrap; } .badge { font-size: 0.85em; } .json-line { display: flex; margin-bottom: 5px; font-family: Consolas, monospace; } .json-key { color: #d63384; min-width: 120px; font-weight: bold; } .json-value { color: #0d6efd; word-break: break-all; flex-grow: 1; } .json-container { max-height: 65vh; overflow-y: auto; padding: 10px; } .qrcode-section { border-left: 1px solid #dee2e6; padding: 15px; display: flex; flex-direction: column; align-items: center; justify-content: center; } .qrcode-title { font-weight: bold; margin-bottom: 10px; } #qrcodeCanvas { margin: 10px 0; } .qrcode-url { word-break: break-all; font-size: 0.8rem; color: #6c757d; text-align: center; max-width: 100%; } .modal-split-view { display: flex; height: 65vh; } .modal-left-panel { width: 60%; overflow-y: auto; } .modal-right-panel { width: 40%; } .alert-pre { white-space: pre-wrap; word-break: break-word; background-color: #f8f9fa; padding: 10px; border-radius: 5px; } </style> <div class="d-flex flex-column"> <!-- 操作按钮区域 --> <div class="d-flex justify-content-between align-items-center mb-3"> <div class="d-flex gap-2 align-items-center"> <form method="post" action="{% url 'get_invoice' %}" id="invoice-form"> {% csrf_token %} <input type="hidden" name="selected_orders" id="selected-orders"> <button type="submit" class="btn btn-primary btn-sm" id="get_invoice-btn"> <i class="bi bi-receipt"></i> 获取发票 </button> </form> <span class="text-muted small ms-2" id="selected-count">已选择 <span class="fw-bold">0</span> 张单据</span> </div> </div> <!-- 表格区域 --> <div class="table-responsive mb-3"> <table class="table table-striped table-hover" style="min-width: 100%; white-space: nowrap;"> <thead> <tr> <th width="40px"><input type="checkbox" id="select-all" class="form-check-input"></th> <th>单据编号</th> <th>客户名称</th> <th>商品名称</th> <th>数量</th> <th>单价</th> <th>税率</th> <th>金额</th> <th>发票状态</th> <th>开票方式</th> <th>请求报文</th> <th>返回数据</th> <th>创建时间</th> </tr> </thead> <tbody> {% for order in page_obj %} <tr> <td><input type="checkbox" name="order_ids" value="{{ order.id }}" class="form-check-input order-checkbox" {% if order.invoice_status == 'invoiced' %}disabled{% endif %}></td> <td>{{ order.order_number }}</td> <td>{{ order.customer.name }}</td> <td>{{ order.product_name }}</td> <td>{{ order.quantity }}</td> <td>{{ order.unit_price|floatformat:2 }}</td> <td>{{ order.tax_rate }}%</td> <td>¥{{ order.total_amount|floatformat:2 }}</td> <td> {% if order.invoice_status == 'invoiced' %} <span class="badge bg-success">已申请</span> {% else %} <span class="badge bg-warning">未申请</span> {% endif %} </td> <td> {% if order.invoice_method %} <span class="badge {% if order.invoice_method == 'sync' %}bg-primary{% elif order.invoice_method == 'scan' %}bg-info{% elif order.invoice_method == 'async' %}bg-secondary{% endif %}"> {{ order.get_invoice_method_display }} </span> {% else %}-{% endif %} </td> <td> {% if order.api_request_data %} <button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#requestModal" data-request='{{ order.api_request_data|escapejs }}' data-order-number="{{ order.order_number }}"> 查看请求 </button> {% else %}<span class="text-muted">-</span>{% endif %} </td> <td> {% if order.api_response_data %} <button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#responseModal" data-response='{{ order.api_response_data|escapejs }}' data-order-number="{{ order.order_number }}" data-invoice-method="{{ order.invoice_method }}"> 查看响应 </button> {% else %}<span class="text-muted">-</span>{% endif %} </td> <td>{{ order.created_at|date:"Y-m-d H:i" }}</td> </tr> {% empty %} <tr><td colspan="13" class="text-center py-4 text-muted">暂无销售单据数据</td></tr> {% endfor %} </tbody> </table> </div> <!-- 分页导航 --> <div class="d-flex justify-content-start align-items-center mt-3" style="white-space: nowrap; overflow-x: auto;"> <nav aria-label="Page navigation" class="me-2"> <ul class="pagination pagination-sm mb-0"> {% if page_obj.has_previous %} <li class="page-item"><a class="page-link" href="?page=1&per_page={{ per_page }}">首页</a></li> <li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}&per_page={{ per_page }}">‹</a></li> {% endif %} {% for num in page_obj.paginator.page_range %} {% if num == page_obj.number %}<li class="page-item active"><span class="page-link">{{ num }}</span></li> {% elif num > page_obj.number|add:-3 and num < page_obj.number|add:3 %}<li class="page-item"><a class="page-link" href="?page={{ num }}&per_page={{ per_page }}">{{ num }}</a></li> {% elif num == page_obj.paginator.num_pages and page_obj.number < page_obj.paginator.num_pages|add:-2 %}<li class="page-item disabled"><span class="page-link">...</span></li> <li class="page-item"><a class="page-link" href="?page={{ num }}&per_page={{ per_page }}">{{ num }}</a></li> {% endif %} {% endfor %} {% if page_obj.has_next %} <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}&per_page={{ per_page }}">›</a></li> <li class="page-item"><a class="page-link" href="?page={{ page_obj.paginator.num_pages }}&per_page={{ per_page }}">尾页</a></li> {% endif %} </ul> </nav> <div class="text-muted small me-2">共{{ page_obj.paginator.count }}条</div> <div class="input-group input-group-sm" style="width: 120px;"> <span class="input-group-text bg-light border-0">每页</span> <select class="form-select form-select-sm border" id="perPageSelect" onchange="updatePerPage()"> <option value="10" {% if per_page == 10 %}selected{% endif %}>10</option> <option value="50" {% if per_page == 50 %}selected{% endif %}>50</option> <option value="100" {% if per_page == 100 %}selected{% endif %}>100</option> </select> </div> <span class="input-group-text bg-light border-0">条</span> </div> </div> <!-- 请求数据查看模态框 --> <div class="modal fade" id="requestModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header bg-light"> <h5 class="modal-title"> <i class="bi bi-file-earmark-text"></i> <span id="modalRequestOrderNumber"></span> - 请求报文详情 </h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body p-0"> <div class="d-flex flex-column" style="height: 70vh;"> <div class="p-3 border-bottom"> <h6 class="mb-0">请求参数</h6> </div> <div id="requestDataContainer" class="json-container"></div> </div> </div> </div> </div> </div> <!-- 响应数据查看模态框 --> <div class="modal fade" id="responseModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header bg-light"> <h5 class="modal-title"> <i class="bi bi-file-earmark-text"></i> <span id="modalResponseOrderNumber"></span> - 响应数据详情 </h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body p-0"> <div class="d-flex flex-column" style="height: 70vh;"> <div class="p-3 border-bottom"> <h6 class="mb-0">响应参数</h6> </div> <div class="d-flex flex-grow-1" style="overflow: hidden;"> <!-- 左侧:原始JSON数据 (60%) --> <div id="responseDataContainer" class="p-3" style="width: 60%; overflow-y: auto;"></div> <!-- 右侧:二维码区域 (40%) --> <div class="p-3 border-start" style="width: 40%; display: flex; flex-direction: column; align-items: center; justify-content: center;"> <h6 class="mb-3">开票二维码</h6> <div id="qrcodeCanvas"></div> <div id="qrcodeUrl" class="small text-muted text-center" style="word-break: break-all; max-width: 100%;"></div> </div> </div> </div> </div> </div> </div> </div> {% endblock %} {% block extra_js %} <script src="https://cdn.jsdelivr.net/npm/qrcode@1.5.1/build/qrcode.min.js"></script> <script> // 分页选择函数 function updatePerPage() { const perPage = document.getElementById('perPageSelect').value; const params = new URLSearchParams(window.location.search); params.set('per_page', perPage); params.set('page', 1); window.location.search = params.toString(); } // 按照第一段代码的数据处理方式 function formatJson(jsonString) { try { // 替换Unicode转义字符为实际字符 const decodedString = jsonString.replace(/\\u[\dA-F]{4}/gi, function(match) { return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16)); }); // 解析为 JSON 对象 const jsonObj = JSON.parse(decodedString); // 返回美化后的 JSON 字符串 和 原始对象 return { formatted: JSON.stringify(jsonObj, null, 4), parsed: jsonObj }; } catch (e) { // 如果不是有效的 JSON,尝试只做 Unicode 解码 try { const decodedString = jsonString.replace(/\\u[\dA-F]{4}/gi, function(match) { return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16)); }); return { formatted: decodedString, parsed: null }; } catch (e) { return { formatted: jsonString, parsed: null }; } } } // 修复后的二维码生成函数 function generateQRCodeFromResponse(responseData) { const qrContainer = document.getElementById('qrcodeCanvas'); const urlContainer = document.getElementById('qrcodeUrl'); // 清空之前的内容 qrContainer.innerHTML = ''; urlContainer.textContent = ''; // 检查是否有响应数据 if (!responseData || !responseData.parsed) { qrContainer.innerHTML = '<div class="alert alert-info">无可用URL生成二维码</div>'; return; } const data = responseData.parsed; let urlToUse = null; // 遍历对象属性,找到第一个以 http 开头的字符串字段 // 适用于同步开票返回的 jfmUrl 或 gdJfmUrl 字段 for (const key in data) { if (data.hasOwnProperty(key)) { if ( typeof data[key] === 'string' && (data[key].startsWith('http') || data[key].startsWith('https')) ) { urlToUse = data[key]; break; } } } // 如果在第一层没找到,尝试在data字段中查找 // 适用于扫码开票返回的 data 字段 if (!urlToUse && data.data) { if ( typeof data.data === 'string' && (data.data.startsWith('http') || data.data.startsWith('https')) ) { urlToUse = data.data; } } if (urlToUse) { // 使用新的API方式生成二维码 const canvas = document.createElement('canvas'); qrContainer.appendChild(canvas); QRCode.toCanvas(canvas, urlToUse, { width: 200 }, function (error) { if (error) { qrContainer.innerHTML = '<div class="alert alert-danger">生成二维码失败: ' + error + '</div>'; return; } urlContainer.textContent = urlToUse; }); } else { qrContainer.innerHTML = '<div class="alert alert-info">未找到可用的URL</div>'; } } // 初始化请求数据模态框 const requestModal = document.getElementById('requestModal'); requestModal.addEventListener('show.bs.modal', function(event) { const button = event.relatedTarget; const requestData = button.getAttribute('data-request'); const orderNumber = button.getAttribute('data-order-number'); document.getElementById('modalRequestOrderNumber').textContent = orderNumber; const formattedResult = formatJson(requestData); document.getElementById('requestDataContainer').textContent = formattedResult.formatted; }); // 初始化响应数据模态框 const responseModal = document.getElementById('responseModal'); responseModal.addEventListener('show.bs.modal', function(event) { const button = event.relatedTarget; const responseData = button.getAttribute('data-response'); const orderNumber = button.getAttribute('data-order-number'); document.getElementById('modalResponseOrderNumber').textContent = orderNumber; const formattedResult = formatJson(responseData); document.getElementById('responseDataContainer').textContent = formattedResult.formatted; // 生成二维码 generateQRCodeFromResponse(formattedResult); }); // 全选/取消全选逻辑 const selectAll = document.getElementById('select-all'); const checkboxes = document.querySelectorAll('.order-checkbox:not(:disabled)'); const selectedCount = document.getElementById('selected-count'); const getInvoiceBtn = document.getElementById('get_invoice-btn'); const selectedOrdersInput = document.getElementById('selected-orders'); const invoiceForm = document.getElementById('invoice-form'); selectAll.addEventListener('change', function() { checkboxes.forEach(checkbox => checkbox.checked = this.checked); updateSelectedCount(); }); checkboxes.forEach(checkbox => { checkbox.addEventListener('change', function() { selectAll.checked = [...checkboxes].every(cb => cb.checked); updateSelectedCount(); }); }); function updateSelectedCount() { const selected = document.querySelectorAll('.order-checkbox:checked'); const selectedIds = Array.from(selected).map(cb => cb.value); selectedOrdersInput.value = selectedIds.join(','); selectedCount.innerHTML = `已选择 <span class="fw-bold">${selectedIds.length}</span> 张单据`; getInvoiceBtn.disabled = selectedIds.length === 0; } // 表单提交验证 invoiceForm.addEventListener('submit', function(e) { const selectedIds = document.getElementById('selected-orders').value; if (!selectedIds) { e.preventDefault(); alert('请至少选择一张单据'); } else if (!confirm('确定要获取选中单据的发票吗?')) { e.preventDefault(); } }); // 初始化选中计数 updateSelectedCount(); </script> {% endblock %}帮我看下为什么ULR无法提前生成二维码
08-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值