分页列表td中包含有<标签导致页面显示错乱问题

本文链接了一个优快云的博客详情页面,该页面包含了博客的具体内容,但由于未直接提供文本信息,故无法详细摘录其核心要点.从链接中可以得知这是一篇技术分享文章.
<php> $affected_tooling = is_array($list['affected_tooling']) ? $list['affected_tooling'] : explode(',', $list['affected_tooling']); </php> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Internal Engineering Change Notice (ECN) Requests</title> <style> .container { margin: auto; border: 1px solid #ccc; padding: 20px 20px 0px 20px; font-family: Arial, sans-serif; } h2 { text-align: center; } .header { display: flex; /* justify-content: space-between; */ align-items: center; margin-bottom: 20px; } .header-info { font-size: 14px; } .form-group { display: flex; margin-bottom: 15px; } /* 容器样式 */ .form-row { justify-content: space-between; /* 让子元素分布在两侧 */ display: flex; gap: 5px; /* 列之间的间距 */ margin-bottom: 15px; } .form-row .form-group { display: flex; } label { display: inline-block; width: 300px; font-weight: normal; } input[type="text"], input[type="date"], input[type="time"] { width: 200px; padding: 5px; } .checkbox-group { display: flex; align-items: center; } /* 控制复选框组内部间距 */ .checkbox-group label { margin-right: 5px; /* 每个复选框之间的间距 */ width: 60px; } .checkbox-group label { font-weight: normal; margin-right: 5px; } .section { margin-top: 20px; padding-top: 10px; border-top: 1px solid #ccc; } .footer { margin-top: 30px; display: flex; justify-content: space-between; font-size: 12px; color: #555; } .col { display: flex; align-items: center; white-space: nowrap; } .col input[type="text"] { padding: 2px; box-sizing: border-box; } .col label { white-space: nowrap; margin-right: 1px; } .approval-table { width: 100%; border-collapse: collapse; margin-bottom: 20px; font-weight: normal; } .approval-table th, .approval-table td { padding: 10px; border: 1px solid #ccc; vertical-align: top; } .approval-table th { background-color: #f5f5f5; text-align: left; } .checkbox-container { display: flex; flex-wrap: wrap; gap: 15px; } .checkbox-row { display: flex; align-items: center; gap: 10px; flex: 0 0 48%; /* 控制每行两个选项 */ } .checkbox-row.full-width { flex: 0 0 100%; /* Others 行占满整行 */ } .checkbox-row input[type="text"] { flex: 1; padding: 5px; width: 200px; } .checkbox-row label { font-weight: normal; white-space: nowrap; } .footer-page-break { /*分页,兼容旧浏览器*/ page-break-after: always; } .center-text { display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ } label span { font-weight: normal; text-decoration: underline; } </style> </head> <body> <div> <div class="center-text"> <div style="width:980px;text-align:left;"> <div class="container" layoutH="56"> <div class="header" style="display: flex; justify-content: space-between; align-items: center;"> <img src="__PUBLIC__/Images/logo.gif" alt="Logo" style="height: 50px;"> <strong>TCN No:{$list.tcn_no} </strong> </div> <div class="header" style="justify-content: center;"> <h2>Tooling Change Notice (TCN)</h2> </div> <div class="form-group"> <!-- 第一列:Requested by --> <div class="col"> <label>Requested by #:<span>{$list.requested_by}</span></label> </div> <!-- 第二列:单选 --> <div class="col checkbox-group" style="justify-content: flex-start; padding-left: 5px;"> <label> <input type="radio" name="requested_department" id="ME" value="ME" <if condition="$list.requested_department eq 'ME'">checked</if>/> <label for="ME" style="margin-left: 1px;">ME</label> </label> <label> <input type="radio" name="requested_department" id="PE" value="PE" <if condition="$list.requested_department eq 'PE'">checked</if>/> <label for="PE" style="margin-left: 1px;">PE</label> </label> <label> <input type="radio" name="requested_department" id="QA" value="QA" <if condition="$list.requested_department eq 'QA'">checked</if> /> <label for="QA" style="margin-left: 1px;">QA</label> </label> <label> <input type="radio" name="requested_department" id="PMC" value="PMC" <if condition="$list.requested_department eq 'PMC'">checked</if> /> <label for="PMC" style="margin-left: 1px;">PMC</label> </label> </div> </div> <!-- 下一行:Date --> <div style="margin-top: 15px;"> <label>Issue Date (MM/DD/YYYY):<span>{$list.issue_date}</span></label> </div> <div class="section"> <h4>Part A: General Project and Change Information (Fill by Requestor):</h4> <div class="form-row"> <label>PNG Part No.:<span>{$list.png_part_no}</span></label> <label style="margin-left: 10px;">Customer:<span>{$list.customer}</span></label> <div class="form-group"> <label>W/O:<span>{$list.wo}</span></label> </div> </div> </div> <div class="section"> <h4>Part B: Change Description (Fill by Requestor):</h4> <div class="form-group"> <label>Purpose:</label> <div class="col"> <label> <input type="radio" name="purpose_option" id="Tooling Update" value="Tooling Update" <if condition="$list.purpose_option eq 'Tooling Update'">checked</if> /> <label for="Tooling Update" style="margin-left: 1px;width: 100px;">Tooling Update</label> </label> <label> <input type="radio" name="purpose_option" id="Test tooling" value="Test tooling" <if condition="$list.purpose_option eq 'Test tooling'">checked</if>/> <label for="Test tooling" style="margin-left: 1px;">Test tooling</label> </label> <label> <input type="radio" name="purpose_option" id="Rework tooling" value="Rework tooling" <if condition="$list.purpose_option eq 'Rework tooling'">checked</if> /> <label for="Rework tooling" style="margin-left: 1px;">Rework tooling</label> </label> </div> </div> <div class="form-group"> <label>Reason of change:</label> <textarea name="reason_of_change" id="reason_of_change" rows="3" cols="82" lookupGroup="LookupCCEmail" look_name="LookupCCEmail.orgName">{$list.reason_of_change}</textarea> </div> <div class="form-group"> <label>Tooling change description:</label> <textarea name="tooling_change_description" id="tooling_change_description" rows="3" cols="82" lookupGroup="LookupCCEmail" look_name="LookupCCEmail.orgName">{$list.tooling_change_description}</textarea> </div> <div class="form-group" style="display: block;"> <label style="width: 300px;">Remarks / Affected process:</label> <h5>Affected tooling:</h5> <div class="checkbox-container"> <!-- 每行两个复选框 --> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="inner_ldi" value="inner_ldi" <if condition="in_array('inner_ldi', $affected_tooling)"> checked="checked"</if>> <label for="inner_ldi">Inner LDI program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="inner_aoi" value="inner_aoi" <if condition="in_array('inner_aoi', $affected_tooling)" >checked</if>> <label for="inner_aoi">Inner layer AOI</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="pluritec" value="pluritec" <if condition="in_array('pluritec', $affected_tooling)" >checked</if>> <label for="pluritec">Pluritec program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="conformal_mask" value="conformal_mask" <if condition="in_array('conformal_mask', $affected_tooling)">checked</if>> <label for="conformal_mask">Conformal mask LDI program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="drill" value="drill" <if condition="in_array('drill', $affected_tooling)" >checked</if>> <label for="drill">Drill program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="hole_laser" value="hole_laser" <if condition="in_array('hole_laser', $affected_tooling)" >checked</if>> <label for="hole_laser">Hole / Laser AOI & Hole counter program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="buttonplate" value="buttonplate" <if condition="in_array('buttonplate', $affected_tooling)" >checked</if>> <label for="buttonplate">Buttonplate / Copper fill LDI program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="outer_ldi" value="outer_ldi" <if condition="in_array('outer_ldi', $affected_tooling)" >checked</if>> <label for="outer_ldi">Outer LDI program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="outer_aoi" value="outer_aoi" <if condition="in_array('outer_aoi', $affected_tooling)" >checked</if>> <label for="outer_aoi">Outer layer AOI</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="solder_mask_di" value="solder_mask_di" <if condition="in_array('solder_mask_di', $affected_tooling)">checked</if>> <label for="solder_mask_di">Solder mask DI program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="solder_mask_avi" value="solder_mask_avi" <if condition="in_array('solder_mask_avi', $affected_tooling)">checked</if>> <label for="solder_mask_avi">Solder mask AVI</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="solder_stencil" value="solder_stencil" <if condition="in_array('solder_stencil', $affected_tooling)">checked</if>> <label for="solder_stencil">Solder mask stencil / printing jig</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="via_filling" value="via_filling" <if condition="in_array('via_filling', $affected_tooling)" >checked</if>> <label for="via_filling">Via filling tool</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="inkjet" value="inkjet" <if condition="in_array('inkjet', $affected_tooling)" >checked</if>> <label for="inkjet">Inkjet</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="laser_mark" value="laser_mark" <if condition="in_array('laser_mark', $affected_tooling)" >checked</if>> <label for="laser_mark">Laser mark</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="routing" value="routing" <if condition="in_array('routing', $affected_tooling)" >checked</if>> <label for="routing">Routing program</label> </div> <div class="checkbox-row"> <input name="affected_tooling[]" type="checkbox" id="etest" value="etest" <if condition="in_array('etest', $affected_tooling)" >checked</if>> <label for="etest">E-Test program / Fixture</label> </div> <!-- Others 行 --> <div class="checkbox-row full-width"> <input name="affected_tooling[]" type="checkbox" id="others_checkbox" value="others_checkbox" <if condition="in_array('others_checkbox', $affected_tooling)">checked</if>> <label for="others_checkbox">Others<span style="margin-left: 10px;">{$list.others_input}</span></label> </div> </div> </div> </div> <div class="section"> <h4>Part C: Running change schedule: (Follow PMC schedule)</h4> <div class="col"> <input type="checkbox" id="running_change_date_option" name="running_change_date_option" <if condition="$list.running_change_date_option" >checked</if>> <label style="width: 400px;margin-left: 10px;" for="running_change_wo_option">Running Change Effective Date & Time:<span>{$list.running_change_date}</span></label> </div> <div class="col"> <input type="checkbox" id="running_change_wo_option" name="running_change_wo_option" <if condition="$list.running_change_wo_option" >checked</if>> <label style="width: 400px;margin-left: 10px;" for="running_change_wo_option">Running Change Effective W/O:<span>{$list.running_change_wo}</span></label> </div> </div> <div class="section"> <h4>Part D: Approval</h4> <table class="approval-table"> <tr> <td>P.E</td> <td>M.E</td> <td>QA</td> </tr> <tr> <td>Date (MM/DD/YYYY):<br> <input type="date" name="pe_approve_date" value="{$list.pe_approve_date}"> <input type="time" name="pe_approve_time" value="{$list.pe_approve_time}"> </td> <td>Date (MM/DD/YYYY):<br> <input type="date" name="me_approve_date" value="{$list.me_approve_date}"> <input type="time" name="me_approve_time" value="{$list.me_approve_time}"> </td> <td>Date (MM/DD/YYYY):<br> <input type="date" name="qa_approve_date" value="{$list.qa_approve_date}"> <input type="time" name="qa_approve_time" value="{$list.qa_approve_time}"> </td> </tr> </table> <div class="footer" style="margin-top: 1px;">Remark:Tooling update only need PE manager approval</div> </div> <div class="footer"> <div>Form No. PEF-005</div> <div>Version: A/2</div> <div>Effective Date: 09/09/2024</div> </div> <div class="footer-page-break"></div> <div class="header" style="display: flex; justify-content: space-between; align-items: center;"> <img src="__PUBLIC__/Images/logo.gif" alt="Logo" style="height: 50px;"> <strong>TCN No: {$list.tcn_no_2} </div> <div class="header" style="justify-content: center;"> <h2>Tooling Change Notice (TCN)</h2> </div> <div class="footer"> <div>Form No. PEF-020</div> <div>Version: A/2</div> <div>Effective Date: 10/28/2024</div> </div> <div class="footer-page-break"></div> <div class="header" style="display: flex; justify-content: space-between; align-items: center;"> <img src="__PUBLIC__/Images/logo.gif" alt="Logo" style="height: 50px;"> <strong>TCN No: ______________ </div> <div class="header" style="justify-content: center;"> <h2>Tooling Change Notice (TCN)</h2> </div> <table class="approval-table"> <thead> <tr> <th>Affected Tooling</th> <th>Recall Tooling PIC</th> <th>Date</th> <th>PIC Signature</th> <th>Confirmed By PE</th> <th>PE Signature</th> <th>Prod.Signature</th> <th>Remarks</th> </tr> </thead> <tbody> <tr> <td>Inner LDI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Inner AOI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Pluritec</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Conf. mask LDI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Drill program</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Hole / Laser AOI and Hole counter</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Buttonplate / Copper fill LDI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Outer LDI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Outer AOI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Solder mask</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>DI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>SM AVI</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>SM Stencil/Jig</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>RVF Tool</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Inkjet</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Laser mark</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Routing</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>E-test</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>Others</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> <div class="footer"> <div>Form No. PEF-020</div> <div>Version: A/2</div> <div>Effective Date: 10/28/2024</div> </div> </div> </div> </div> <div class="formBar"> <ul> <li><div class="button"> <div class="buttonContent"><button type="button" onclick="navTab.closeCurrentTab()">关闭</button></div></div></li> <li><div class="buttonActive"><div class="buttonContent"><button type="button" onclick="print()">{$Think.lang.print}</button></div></div></li> </ul> </div> </div> </body> </html> <script language="javascript" type="text/javascript" src="__PUBLIC__/dwz/js/autosize.min.js"></script> <script language="JavaScript"> function print(){ //$("div#myPrintArea").printArea(); window.open('__URL__/printtable/id/{$list.id}'); } $(document).ready(function () { // 禁止所有 radio 按钮被点击修改 $('input[type="radio"]').each(function () { $(this).data('waschecked', $(this).is(':checked')); // 保存原始状态 $(this).on('click', function (e) { e.preventDefault(); // 阻止默认行为 return false; }); }); }); </script> 以上html页面怎么在浏览器打印的时候,左右两边内容显示不全
07-29
那如何將<!-- 数据表格区域,带滚动与分页 --> <div style="width: 95%;margin-left: 28px;margin-top: 25px;"> <!-- 表格标题,动态显示当前周/月 --> <caption style="margin-top: 10px;color: blue;">{{weeks}}:</caption> <!-- 使用 Bootstrap 样式的表格 --> <table class="table table-condensed table-hover table-striped table-bordered table-advanced tablesorter" cellspacing="0" cellpadding="4" id="Body_Gd" style="border-collapse:collapse;"> <!-- 表头 --> <thead> <tr class="btn-primary"> <!-- 使用 btn-primary 类给表头着色 --> <th scope="col" style="white-space:nowrap;">序號</th> <th scope="col" style="white-space:nowrap;">日期</th> <th scope="col" style="white-space:nowrap;">送修單位</th> <th scope="col" style="white-space:nowrap;">品名</th> <th scope="col" style="white-space:nowrap;">型號</th> <th scope="col" style="white-space:nowrap;">ISN</th> <th scope="col" style="white-space:nowrap;">單價</th> <th scope="col" style="white-space:nowrap;">報修人員</th> <th scope="col" style="white-space:nowrap;">不良現象</th> <th scope="col" style="white-space:nowrap;">狀態</th> <th scope="col" style="white-space:nowrap;">出庫日期</th> <th scope="col" style="white-space:nowrap;">維修人員</th> <th scope="col" style="white-space:nowrap;">不良原因</th> <th scope="col" style="white-space:nowrap;">更換脚位</th> <th scope="col" style="white-space:nowrap;">信號</th> <th scope="col" style="white-space:nowrap;">是否命中</th> </tr> </thead> <!-- 表体:使用 Django 模板语言循环渲染数据 --> <tbody id="scrollBody1"> {% if queryset %} {% for item in queryset %} <tr> <td style="white-space:nowrap;">{{item.0}}</td> <!-- 序 --> <td style="white-space:nowrap;">{{item.1}}</td> <!-- 日期 --> <td style="white-space:nowrap;">{{item.2}}</td> <!-- 送修单位 --> <td style="white-space:nowrap;">{{item.3}}</td> <!-- 品名 --> <td style="white-space:nowrap;">{{item.4}}</td> <!-- 型 --> <td style="white-space:nowrap;">{{item.5}}</td> <!-- ISN --> <td style="white-space:nowrap;">{{item.6}}</td> <!-- 单价 --> <td style="white-space:nowrap;">{{item.7}}</td> <!-- 报修人员 --> <td style="white-space:nowrap;">{{item.8}}</td> <!-- 不良现象 --> <td style="white-space:nowrap;">{{item.11}}</td> <!-- 状态 --> <td style="white-space:nowrap;">{{item.10}}</td> <!-- 出库日期 --> <td style="white-space:nowrap;">{{item.12}}</td> <!-- 维修人员 --> <td style="white-space:nowrap;">{{item.13}}</td> <!-- 不良原因 --> <td style="white-space:nowrap;">{{item.14}}</td> <!-- 更换脚位 --> <td style="white-space:nowrap;">{{item.15}}</td> <!-- 信 --> <td style="white-space:nowrap;">{{item.16}}</td> <!-- 是否命中 --> </tr> {% endfor %} {% else %} <!-- 如果没有数据,则显示提示信息 --> <tr> <td colspan="16" style="color: red;">無維修OK設備記錄</td> </tr> {% endif %} </tbody> </table> <!-- 分页组件 --> <div class="page clearfix"> <div class="pull-right"> <!-- 右对齐 --> <ul class="pagination"> <!-- 显示总条数当前页码 --> <div class="pull-left"> <span class="btn btn-primary" style="width: 100px;font-size:14PX;">共{{total_count}}条數據</span> <span class="btn btn-primary" style="width: 100px;font-size:14PX;">第{{page}}/{{total_page_count}}頁</span> </div> <!-- 动态生成的分页链接(由后端传入 page_string 渲染) --> {{page_string}} </ul> </div> </div> </div> 放入到{% load static %} <!-- 加载 Django 的 static 模板标签,用于引用静态文件(CSS/JS/图片等) --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 声明文档字符编码为 UTF-8,支持中文 --> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 响应式视口设置 --> <title>設備修復率</title> <!-- 页面标题 --> <!-- 引入 Bootstrap CSS 样式文件,用于基础样式表格美化 --> <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}"> <style> /* 响应式容器:包裹图表控件的主要区域 */ .chart-container { position: relative; /* 相对定位,作为内部绝对定位元素的参考 */ width: 99vw; /* 宽度占视窗宽度的99%,接近全屏 */ height: 95vh; /* 高度占视窗高度的95% */ min-width: 600px; /* 最小宽度限制,防止在小屏幕上过窄 */ min-height: 400px; /* 最小高度限制 */ margin: 20px auto; /* 上下外边距20px,左右自动居中 */ } /* 时间周期选择下拉框样式 */ #timePeriod { position: absolute; /* 绝对定位,脱离文档流 */ left: 10%; /* 距离左侧10% */ top: 20px; /* 距离顶部20px */ z-index: 999; /* 层级最高,确保显示在其他内容之上 */ width: 100px; height: 30px; font-size: 14px; } /* “顯示週期”标签样式 */ label { position: absolute; left: 5%; /* 稍微靠左于下拉框,形成对齐 */ top: 25px; font-weight: bold; color: #666; /* 灰色字体 */ } /* 图表下方说明文字样式 */ .explanation { position: absolute; bottom: 10px; /* 固定在容器底部上方10px */ left: 5%; color: #2196F3; /* 蓝色文字(类似 Material Blue) */ font-size: 14px; } /* 主要图表区域的高度控制 */ .chart-main { height: 85vh; /* 占据大部分视窗高度 */ } </style> </head> <body> <!-- 主容器:包含图表、筛选器、表格与分页 --> <div class="chart-container"> <!-- 下拉框标签 --> <label for="timePeriod">顯示週期:</label> <!-- 时间周期选择器 --> <select id="timePeriod" class="form-control"> <option value="month">月報表</option> <option value="week">週報表</option> </select> <!-- ECharts 图表渲染区域(目前只显示周报图表) --> <div id="xiufulv_week" class="chart-main"></div> <!-- 计算公式说明 --> <div class="explanation"> <div>計算公式:</div> <div> 修復率 = (出庫修復數 / 出庫數) * 100%</div> </div> </div> <!-- 引入必要的 JS 文件 --> <script src="{% static 'js/jquery.js' %}"></script> <!-- jQuery 库 --> <script src="{% static 'js/echarts5.4.js' %}"></script> <!-- Apache ECharts 5.4 图表库 --> <script src="{% static 'js/wanxiulv_week.js' %}"></script> <!-- 自定义脚本:初始化图表并处理交互逻辑 --> <!-- 注意:当前只加载了 week 图表脚本,缺少 month 切换逻辑 --> </body> </html>
12-19
需要將{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>設備命中率</title> <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}"> <style> /* 响应式容器 */ .chart-container { position: relative; width: 99vw; /* 视窗宽度的95% */ height: 65vh; /* 视窗高度的70% */ min-width: 600px; /* 最小宽度限制 */ min-height: 400px; /* 最小高度限制 */ margin: 20px auto; } #timePeriod { position: absolute; left: 14%; top: 24px; z-index: 999; width: 100px; height: 30px; font-size: 14px; } label { position: absolute; left: 9%; top: 30px; font-weight: bold; color: #666; } .explanation { position: absolute; bottom: 10px; left: 5%; color: #2196F3; font-size: 14px; } .chart-main { height: 60vh; } </style> </head> <body> <div class="chart-container"> <label for="timePeriod" id="labels">顯示週期:</label> <select id="timePeriod" class="form-control"> <option value="month">月報表</option> <option value="week">週報表</option> </select> <div id="mingzhonglv_week_month" class="chart-main"></div> <div class="explanation"> <div>計算公式:命中率 = (命中數 / 出庫數) * 100%</div> </div> <!-- <div style="width: 95%;margin-left: 28px;margin-top: 25px;"> <table class="table table-condensed table-hover table-striped table-bordered table-advanced tablesorter" cellspacing="0" cellpadding="4" id="Body_Gd" style="border-collapse:collapse;"> <caption style="margin-top: 10px;color: blue;">{{weeks}}:</caption> <thead> <tr class="btn-primary"> <th scope="col" style="white-space:nowrap;">序號</th> <th scope="col" style="white-space:nowrap;">日期</th> <th scope="col" style="white-space:nowrap;">送修單位</th> <th scope="col" style="white-space:nowrap;">品名</th> <th scope="col" style="white-space:nowrap;">型號</th> <th scope="col" style="white-space:nowrap;">ISN</th> <th scope="col" style="white-space:nowrap;">單價</th> <th scope="col" style="white-space:nowrap;">報修人員</th> <th scope="col" style="white-space:nowrap;">不良現象</th> <th scope="col" style="white-space:nowrap;">狀態</th> <th scope="col" style="white-space:nowrap;">出庫日期</th> <th scope="col" style="white-space:nowrap;">維修人員</th> <th scope="col" style="white-space:nowrap;">不良原因</th> <th scope="col" style="white-space:nowrap;">更換脚位</th> <th scope="col" style="white-space:nowrap;">信號</th> <th scope="col" style="white-space:nowrap;">是否命中</th> </tr> </thead> <tbody id="scrollBody1"> {% if queryset %} {% for item in queryset %} <tr> <td style="white-space:nowrap;">{{item.0}}</td> <td style="white-space:nowrap;">{{item.1}}</td> <td style="white-space:nowrap;">{{item.2}}</td> <td style="white-space:nowrap;">{{item.3}}</td> <td style="white-space:nowrap;">{{item.4}}</td> <td style="white-space:nowrap;">{{item.5}}</td> <td style="white-space:nowrap;">{{item.6}}</td> <td style="white-space:nowrap;">{{item.7}}</td> <td style="white-space:nowrap;">{{item.8}}</td> <td style="white-space:nowrap;">{{item.11}}</td> <td style="white-space:nowrap;">{{item.10}}</td> <td style="white-space:nowrap;">{{item.12}}</td> <td style="white-space:nowrap;">{{item.13}}</td> <td style="white-space:nowrap;">{{item.14}}</td> <td style="white-space:nowrap;">{{item.15}}</td> <td style="white-space:nowrap;">{{item.16}}</td> </tr> {% endfor %} {% else %} <tr> <td colspan="16" style="color: red;">無維修OK設備記錄</td> </tr> {% endif %} </tbody> </table> <div class="page clearfix"> <div class="pull-right"> <ul class="pagination"> <div class="pull-left"><span class=" btn btn-primary" style="width: 100px;font-size:14PX;">共{{total_count}}条數據</span> <span class=" btn btn-primary" style="width: 100px;font-size:14PX;">第{{page}}/{{total_page_count}}頁</span> </div> {{page_string}} </ul> </div> </div> </div> --> </div> <script src="{% static 'js/jquery.js' %}"></script> <script src="{% static 'js/echarts5.4.js' %}"></script> <script src="{% static 'js/mingzhonglv_week_month.js' %}"></script> </body> </html> 中注釋部分嵌入到{% load static %} <!-- 加载 Django 的 static 模板标签,用于引用静态文件(CSS/JS/图片等) --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 声明文档字符编码为 UTF-8,支持中文 --> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 响应式视口设置 --> <title>設備修復率</title> <!-- 页面标题 --> <!-- 引入 Bootstrap CSS 样式文件,用于基础样式表格美化 --> <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}"> <style> /* 响应式容器:包裹图表控件的主要区域 */ .chart-container { position: relative; /* 相对定位,作为内部绝对定位元素的参考 */ width: 99vw; /* 宽度占视窗宽度的99%,接近全屏 */ height: 95vh; /* 高度占视窗高度的95% */ min-width: 600px; /* 最小宽度限制,防止在小屏幕上过窄 */ min-height: 400px; /* 最小高度限制 */ margin: 20px auto; /* 上下外边距20px,左右自动居中 */ } /* 时间周期选择下拉框样式 */ #timePeriod { position: absolute; /* 绝对定位,脱离文档流 */ left: 10%; /* 距离左侧10% */ top: 20px; /* 距离顶部20px */ z-index: 999; /* 层级最高,确保显示在其他内容之上 */ width: 100px; height: 30px; font-size: 14px; } /* “顯示週期”标签样式 */ label { position: absolute; left: 5%; /* 稍微靠左于下拉框,形成对齐 */ top: 25px; font-weight: bold; color: #666; /* 灰色字体 */ } /* 图表下方说明文字样式 */ .explanation { position: absolute; bottom: 10px; /* 固定在容器底部上方10px */ left: 5%; color: #2196F3; /* 蓝色文字(类似 Material Blue) */ font-size: 14px; } /* 主要图表区域的高度控制 */ .chart-main { height: 85vh; /* 占据大部分视窗高度 */ } </style> </head> <body> <!-- 主容器:包含图表、筛选器、表格与分页 --> <div class="chart-container"> <!-- 下拉框标签 --> <label for="timePeriod">顯示週期:</label> <!-- 时间周期选择器 --> <select id="timePeriod" class="form-control"> <option value="month">月報表</option> <option value="week">週報表</option> </select> <!-- ECharts 图表渲染区域(目前只显示周报图表) --> <div id="xiufulv_week" class="chart-main"></div> <!-- 计算公式说明 --> <div class="explanation"> <div>計算公式:</div> <div> 修復率 = (出庫修復數 / 出庫數) * 100%</div> </div> <!-- 数据表格区域,带滚动与分页 --> <div style="width: 95%;margin-left: 28px;margin-top: 25px;"> <!-- 表格标题,动态显示当前周/月 --> <caption style="margin-top: 10px;color: blue;">{{weeks}}:</caption> <!-- 使用 Bootstrap 样式的表格 --> <table class="table table-condensed table-hover table-striped table-bordered table-advanced tablesorter" cellspacing="0" cellpadding="4" id="Body_Gd" style="border-collapse:collapse;"> <!-- 表头 --> <thead> <tr class="btn-primary"> <!-- 使用 btn-primary 类给表头着色 --> <th scope="col" style="white-space:nowrap;">序號</th> <th scope="col" style="white-space:nowrap;">日期</th> <th scope="col" style="white-space:nowrap;">送修單位</th> <th scope="col" style="white-space:nowrap;">品名</th> <th scope="col" style="white-space:nowrap;">型號</th> <th scope="col" style="white-space:nowrap;">ISN</th> <th scope="col" style="white-space:nowrap;">單價</th> <th scope="col" style="white-space:nowrap;">報修人員</th> <th scope="col" style="white-space:nowrap;">不良現象</th> <th scope="col" style="white-space:nowrap;">狀態</th> <th scope="col" style="white-space:nowrap;">出庫日期</th> <th scope="col" style="white-space:nowrap;">維修人員</th> <th scope="col" style="white-space:nowrap;">不良原因</th> <th scope="col" style="white-space:nowrap;">更換脚位</th> <th scope="col" style="white-space:nowrap;">信號</th> <th scope="col" style="white-space:nowrap;">是否命中</th> </tr> </thead> <!-- 表体:使用 Django 模板语言循环渲染数据 --> <tbody id="scrollBody1"> {% if queryset %} {% for item in queryset %} <tr> <td style="white-space:nowrap;">{{item.0}}</td> <!-- 序 --> <td style="white-space:nowrap;">{{item.1}}</td> <!-- 日期 --> <td style="white-space:nowrap;">{{item.2}}</td> <!-- 送修单位 --> <td style="white-space:nowrap;">{{item.3}}</td> <!-- 品名 --> <td style="white-space:nowrap;">{{item.4}}</td> <!-- 型 --> <td style="white-space:nowrap;">{{item.5}}</td> <!-- ISN --> <td style="white-space:nowrap;">{{item.6}}</td> <!-- 单价 --> <td style="white-space:nowrap;">{{item.7}}</td> <!-- 报修人员 --> <td style="white-space:nowrap;">{{item.8}}</td> <!-- 不良现象 --> <td style="white-space:nowrap;">{{item.11}}</td> <!-- 状态 --> <td style="white-space:nowrap;">{{item.10}}</td> <!-- 出库日期 --> <td style="white-space:nowrap;">{{item.12}}</td> <!-- 维修人员 --> <td style="white-space:nowrap;">{{item.13}}</td> <!-- 不良原因 --> <td style="white-space:nowrap;">{{item.14}}</td> <!-- 更换脚位 --> <td style="white-space:nowrap;">{{item.15}}</td> <!-- 信 --> <td style="white-space:nowrap;">{{item.16}}</td> <!-- 是否命中 --> </tr> {% endfor %} {% else %} <!-- 如果没有数据,则显示提示信息 --> <tr> <td colspan="16" style="color: red;">無維修OK設備記錄</td> </tr> {% endif %} </tbody> </table> <!-- 分页组件 --> <div class="page clearfix"> <div class="pull-right"> <!-- 右对齐 --> <ul class="pagination"> <!-- 显示总条数当前页码 --> <div class="pull-left"> <span class="btn btn-primary" style="width: 100px;font-size:14PX;">共{{total_count}}条數據</span> <span class="btn btn-primary" style="width: 100px;font-size:14PX;">第{{page}}/{{total_page_count}}頁</span> </div> <!-- 动态生成的分页链接(由后端传入 page_string 渲染) --> {{page_string}} </ul> </div> </div> </div> </div> <!-- 引入必要的 JS 文件 --> <script src="{% static 'js/jquery.js' %}"></script> <!-- jQuery 库 --> <script src="{% static 'js/echarts5.4.js' %}"></script> <!-- Apache ECharts 5.4 图表库 --> <script src="{% static 'js/wanxiulv_week.js' %}"></script> <!-- 自定义脚本:初始化图表并处理交互逻辑 --> <!-- 注意:当前只加载了 week 图表脚本,缺少 month 切换逻辑 --> </body> </html> 中,嵌入部分的數據來源不變,需要如何修改程式,請演示完整程式
12-19
<template> <section> <a-row style="margin: 10px 0px"> <a-button style="margin-right: 10px" @click="printPage"> <template #icon> <printer-outlined/> </template> 打印 </a-button> <a-button type="primary" danger @click="closeWin"> <template #icon> <close-circle-outlined/> </template> 关闭 </a-button> </a-row> <div id="print-body"> <!-- 统一显示逻辑,单订单多订单都是数组 --> <div v-if="displayData && displayData.length > 0"> <!-- 第一遍显示 --> <div class="display-copy"> <div class="copy-header">第一联</div> <div v-for="(orderData, orderIndex) in displayData" :key="`first-${orderIndex}`" class="order-table-wrapper"> <table class="custom-table"> <colgroup> <col style="width: 40px"/> <col style="width: 155px"/> <col style="width: 40px"/> <col style="width: 120px"/> <col style="width: 40px"/> <col style="width: 70px"/> <col style="width: 40px"/> <col style="width: 60px"/> <col style="width: 200px"/> <col style="width: 70px"/> <col style="width: 40px"/> <col style="width: 60px"/> </colgroup> <tr class="big-header-row"> <th colspan="11">管路下料数据</th> <th> <div :id="'qrcode-' + orderIndex" class="qrcode-container"></div> </th> </tr> <tr class="info-row"> <td colspan="2" class="left">{{ orderData.printName }}</td> <td class="center">派工单</td> <td class="center">{{ orderData.orderNo }} <span v-if="orderData.shopMatOrderNo">({{ orderData.shopMatOrderNo }})</span></td> <td class="center">开工日期</td> <td class="center"></td> <td class="center">施工班组</td> <td class="center"></td> <td class="center">下料人</td> <td colspan="3" class="center"></td> </tr> <tr class="header-row"> <td class="center">分段</td> <td class="center">图纸/小票</td> <td class="center">等级</td> <td class="center">材料名</td> <td class="center">页数</td> <td class="center">管段</td> <td class="center">管长MM</td> <td class="center">弯管</td> <td class="center">备注</td> <td class="center">炉</td> <td class="center">通舱件</td> <td class="center">修改方式</td> </tr> <tbody v-if="orderData.matList && orderData.matList.length > 0"> <tr v-for="(item, idx) in orderData.matList" :key="idx" class="data-row"> <td class="center">{{ item.block }}</td> <td class="left"> <div>{{ item.drawNo }}</div> <div>{{ item.pipeNo }}</div> </td> <td class="center">{{ item.pipeClass }}</td> <td class="left">{{ item.materialDesp }}</td> <td class="center">{{ item.pageNo }}</td> <td class="center">{{ item.info }}</td> <td class="center">{{ item.length }} XX</td> <td class="center">{{ item.groove }}</td> <td class="left">{{ item.cutRemark }}</td> <td class="center">{{ item.heatNo }}</td> <td class="center">{{ item.isThroughCabin }}</td> <td class="center">{{ item.modifyType }}</td> </tr> </tbody> <tbody v-else> <tr> <td colspan="12" class="center" style="padding: 20px;">暂无数据</td> </tr> </tbody> </table> <!-- 每个订单表格后都添加分页,除了最后一个 --> <div v-if="orderIndex < displayData.length - 1" class="page-break"></div> </div> </div> <!-- 强制分页 --> <div class="force-page-break"></div> <!-- 第二遍显示 --> <div class="display-copy"> <div class="copy-header">第二联</div> <div v-for="(orderData, orderIndex) in displayData" :key="`second-${orderIndex}`" class="order-table-wrapper"> <table class="custom-table"> <colgroup> <col style="width: 40px"/> <col style="width: 155px"/> <col style="width: 40px"/> <col style="width: 120px"/> <col style="width: 40px"/> <col style="width: 70px"/> <col style="width: 40px"/> <col style="width: 60px"/> <col style="width: 200px"/> <col style="width: 70px"/> <col style="width: 40px"/> <col style="width: 60px"/> </colgroup> <tr class="big-header-row"> <th colspan="12">管路下料数据</th> </tr> <tr class="info-row"> <td colspan="2" class="left">{{ orderData.printName }}</td> <td class="center">派工单</td> <td class="center">{{ orderData.orderNo }} <span v-if="orderData.shopMatOrderNo">({{ orderData.shopMatOrderNo }})</span></td> <td class="center">开工日期</td> <td class="center"></td> <td class="center">施工班组</td> <td class="center"></td> <td class="center">下料人</td> <td colspan="3" class="center"></td> </tr> <tr class="header-row"> <td class="center">分段</td> <td class="center">图纸/小票</td> <td class="center">等级</td> <td class="center">材料名</td> <td class="center">页数</td> <td class="center">管段</td> <td class="center">管长MM</td> <td class="center">弯管</td> <td class="center">备注</td> <td class="center">炉</td> <td class="center">通舱件</td> <td class="center">修改方式</td> </tr> <tbody v-if="orderData.matList && orderData.matList.length > 0"> <tr v-for="(item, idx) in orderData.matList" :key="idx" class="data-row"> <td class="center">{{ item.block }}</td> <td class="left"> <div>{{ item.drawNo }}</div> <div>{{ item.pipeNo }}</div> </td> <td class="center">{{ item.pipeClass }}</td> <td class="left">{{ item.materialDesp }}</td> <td class="center">{{ item.pageNo }}</td> <td class="center">{{ item.info }}</td> <td class="center">{{ item.length }} XX</td> <td class="center">{{ item.groove }}</td> <td class="left">{{ item.cutRemark }}</td> <td class="center">{{ item.heatNo }}</td> <td class="center">{{ item.isThroughCabin }}</td> <td class="center">{{ item.modifyType }}</td> </tr> </tbody> <tbody v-else> <tr> <td colspan="12" class="center" style="padding: 20px;">暂无数据</td> </tr> </tbody> </table> <!-- 每个订单表格后都添加分页,除了最后一个 --> <div v-if="orderIndex < displayData.length - 1" class="page-break"></div> </div> </div> </div> <div v-else> <div style="text-align: center; padding: 50px; color: #999;"> 暂无数据 </div> </div> </div> </section> </template> <script setup> import {computed, onActivated, ref} from 'vue' import {useRoute, useRouter} from 'vue-router' import {print} from '@/utils/print' import * as server from "@/packages/piping/api/cppf" import {CloseCircleOutlined, PrinterOutlined} from '@ant-design/icons-vue' import QRCode from 'qrcode' const router = useRouter() const route = useRoute() const loading = ref(false) const data = ref([]) // 用于单订单数据 const dataList = ref([]) // 用于存储多订单数据 // 计算属性:判断参数类型 const orderNo = computed(() => route.query.orderNo) const orderNos = computed(() => route.query.orderNos) // 添加安全的计算属性 const hasOrderNos = computed(() => { return !!orderNos.value }) // 统一显示数据计算属性 const displayData = computed(() => { return hasOrderNos.value ? dataList.value : data.value }) // 文档标题计算属性 const documentTitle = computed(() => { if (hasOrderNos.value) { return '多订单管路下料数据' } else if (displayData.value && displayData.value.length > 0) { return `派工单:${displayData.value[0]?.orderNo || ''}` } return '管路下料数据' }) // 加载数据方法 const loadData = () => { loading.value = true if (orderNos.value) { // 如果有orderNos参数,调用多订单查询接口 server.getPreCutWorkOrderPrintListByOrderNos({orderNos: orderNos.value}).then(res => { if (!res.error) { // 多订单返回的是数组,直接赋值给dataList dataList.value = res.data || [] loading.value = false // 自动打印 setTimeout(() => { printPage() }, 100) } else { dataList.value = [] loading.value = false } }).catch(error => { console.error('获取多订单数据失败:', error) dataList.value = [] loading.value = false }) } else if (orderNo.value) { // 如果有orderNo参数,调用单订单查询接口 server.getPreCutWorkOrderPrintList({orderNo: orderNo.value}).then(res => { if (!res.error) { // 单订单返回的是数组,直接赋值给data data.value = res.data || [] loading.value = false // 自动打印 setTimeout(() => { printPage() }, 100) } }).catch(error => { console.error('获取单订单数据失败:', error) loading.value = false }) } else { loading.value = false } } const printPage = () => { print({ type: 'raw-html', printable: document.querySelector('#print-body').innerHTML, documentTitle: documentTitle.value, direction: 'landscape', style: ` @media print { .qrcode-container canvas { display: block; max-width: 50px; max-height: 50px; transform: scale(1); } .display-copy { page-break-after: always; } .display-copy:last-child { page-break-after: auto; } .page-break { page-break-after: always; } .force-page-break { display: none; } .copy-header { display: block; } } .custom-table { font-size: 8px; border-collapse: collapse; width: 100%; table-layout: fixed; margin-bottom: 20px; } .big-header-row th { padding: 10px 0; font-size: 30px; color: #000000; border: 1px solid #000; } .header-row td { padding: 5px; text-align: center; border: 1px solid #000; } .data-row td { padding: 5px; border: 1px solid #000; border-top: none; } .info-row td { padding: 5px; border: 1px solid #000; border-top: none; } .left { text-align: left; } .center { text-align: center; } /* 分页设置 */ .page-break { page-break-after: always; height: 0; } /* 强制分页 */ .force-page-break { page-break-after: always; height: 0; border: none; margin: 0; padding: 0; } /* 多订单表格之间的间距 */ .order-table-wrapper { margin-bottom: 30px; } .order-table-wrapper:last-child { margin-bottom: 0; } /* 两遍显示之间的分隔 */ .display-copy { margin-bottom: 40px; } .display-copy:last-child { margin-bottom: 0; } /* 联次标题 */ .copy-header { display: none; text-align: center; font-size: 16px; font-weight: bold; margin-bottom: 10px; color: #000; } ` }) } const closeWin = () => { const url = window.location.href if (url.indexOf('iframe=true') !== -1) { window.history.go(-1) } else { router.back() } } onActivated(() => { loadData() generateQRCodes() }) const generateQRCodes = () => { displayData.value.forEach((orderData, index) => { const qrcodeContainer = document.getElementById(`qrcode-${index}`) debugger if (qrcodeContainer && orderData.workSpaceNo) { QRCode.toDataURL(orderData.workSpaceNo, { scale: 2 }, (err, url) => { if (err) { console.error('生成二维码失败:', err) return } qrcodeContainer.innerHTML = `<img src="${url}" style="width:50px;height:50px;">` }) } }) } </script> <style scoped> .custom-table { font-size: 8px; border-collapse: collapse; width: 100%; table-layout: fixed; margin-bottom: 20px; } .big-header-row th { padding: 10px 0; font-size: 30px; color: #000000; border: 1px solid #000; } .header-row td { padding: 5px; text-align: center; border: 1px solid #000; } .data-row td { padding: 5px; border: 1px solid #000; border-top: none; } .info-row td { padding: 5px; border: 1px solid #000; border-top: none; } .left { text-align: left; } .center { text-align: center; } /* 多订单表格样式 */ .order-table-wrapper { margin-bottom: 30px; } .order-table-wrapper:last-child { margin-bottom: 0; } /* 打印时分页 */ .page-break { page-break-after: always; height: 0; } /* 强制分页 */ .force-page-break { page-break-after: always; height: 0; border: none; margin: 0; padding: 0; } /* 两遍显示之间的分隔 */ .display-copy { margin-bottom: 40px; } .display-copy:last-child { margin-bottom: 0; } /* 联次标题 */ .copy-header { display: none; text-align: center; font-size: 16px; font-weight: bold; margin-bottom: 10px; color: #000; } /* 打印时分页控制 */ @media print { .display-copy { page-break-after: always; } .display-copy:last-child { page-break-after: auto; } .page-break { page-break-after: always; } .force-page-break { display: none; } .copy-header { display: block; } } .qrcode-container canvas { width: 50px; height: 50px; transform: scale(1); } </style> 页面上有二维码,为什么打印页面没有
11-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值