活动介绍

为某class的input清除失焦事件,并添加新的失焦事件

时间: 2025-07-28 20:04:22 AIGC 浏览: 15
<think>我们使用JavaScript来操作DOM事件。假设我们有一个class为"my-class"的元素,我们需要先移除它原有的blur事件,然后添加一个新的blur事件。步骤如下:1.获取所有具有该class的元素(因为class可以对应多个元素)。2.遍历这些元素,移除它们现有的blur事件处理函数。但是注意,如果我们不知道具体的事件处理函数,我们无法直接移除特定的处理函数(除非我们保存了引用)。因此,我们可能需要先保存原有的事件处理函数,或者更常见的是,我们移除所有通过addEventListener添加的事件处理函数,但这样需要我们在添加时使用命名函数以便移除。3.添加新的blur事件处理函数。但是,问题在于我们可能不知道原来的事件处理函数是什么。如果我们没有保留对原有事件处理函数的引用,那么我们就无法直接移除它。因此,这里有两种情况:a.如果我们知道原有的事件处理函数(比如是我们自己代码中添加的),那么我们可以直接移除它。b.如果我们不知道(可能是第三方库添加的),那么我们可以考虑覆盖原有的事件处理,但这样可能会破坏原有功能。根据需求,我们可能需要先移除原有的事件处理,然后添加我们自己的事件处理。如果我们无法移除未知的事件处理函数,那么我们可以考虑在添加新事件时,在事件处理函数中调用event.stopImmediatePropagation()来阻止其他事件处理函数被调用,但这并不能阻止其他事件处理函数,因为blur事件通常不会冒泡(实际上blur事件本身不冒泡,但是我们可以使用捕获阶段,或者使用focusout事件(会冒泡))。所以这种方法并不通用。因此,更合理的做法是:在添加新的事件之前,先移除之前由我们自己添加的事件(确保我们保存了事件处理函数的引用)。如果原有的事件不是由我们添加的,并且我们无法控制,那么我们需要与原有事件共存,或者与添加原有事件的代码进行协调。这里,我们假设我们能够控制原有的事件,并且我们保存了事件处理函数的引用。这样,我们就可以移除它。示例代码:假设我们之前添加了一个名为`oldBlurHandler`的事件处理函数,现在我们想移除它,然后添加一个新的名为`newBlurHandler`的事件处理函数。但是,问题描述中并没有给出具体的原有事件处理函数,所以我们可以假设没有保留引用,那么我们就需要一种方式来清除所有通过addEventListener添加的blur事件?遗憾的是,如果没有保留引用,我们无法移除通过addEventListener添加的匿名函数。因此,我们需要改变思路:在添加新的事件处理函数时,我们可以在新的事件处理函数中执行我们想要的操作,然后调用`event.stopImmediatePropagation()`和`event.preventDefault()`(如果合适的话)来阻止其他事件处理函数执行。但是,请注意,如果有多个事件处理函数在同一元素上监听同一事件,那么它们的执行顺序与添加顺序相同,我们无法保证我们的处理函数最先执行,所以使用`stopImmediatePropagation`可以阻止后续的事件处理函数执行,但无法阻止之前已经添加的。所以这也不是一个完美的解决方案。另一种思路:我们完全替换元素的onblur属性。因为onblur属性一次只能绑定一个事件处理函数,而addEventListener可以绑定多个。所以如果我们使用onblur属性,那么我们就可以直接覆盖。但是,如果原有的事件是通过addEventListener添加的,那么使用onblur覆盖并不会影响那些事件处理函数,它们仍然会被触发。所以这也不是一个好办法。因此,在实际应用中,最好的做法是:-如果我们能够控制原有的事件绑定,那么我们应该保留事件处理函数的引用,以便在需要时移除。-如果不能,那么我们需要与原有事件处理函数共存,并确保我们的事件处理函数不会与原有事件处理函数冲突。鉴于上述复杂性,这里给出一个假设:我们能够控制原有的事件绑定,并且我们保存了引用。这样我们就可以移除原有的事件处理函数。示例代码:步骤:1.获取所有class为"my-class"的元素。2.遍历这些元素,移除原有的blur事件处理函数(假设我们保存了引用,名为oldBlurHandler)。3.添加新的事件处理函数(名为newBlurHandler)。代码实现:```javascript//假设我们之前保存了原有的事件处理函数varoldBlurHandler=function(event){//原有的处理逻辑};//获取所有class为"my-class"的元素varelements=document.getElementsByClassName('my-class');//遍历元素for(vari=0;i<elements.length;i++){varelement=elements[i];//移除原有的事件处理函数element.removeEventListener('blur',oldBlurHandler);//添加新的事件处理函数element.addEventListener('blur',newBlurHandler);}//新的事件处理函数functionnewBlurHandler(event){//新的处理逻辑console.log('新的失焦事件被触发');}```但是,如果原有的事件处理函数是直接绑定在onblur属性上的,我们可以这样处理:```javascriptvarelements=document.getElementsByClassName('my-class');for(vari=0;i<elements.length;i++){varelement=elements[i];//保存原有的事件处理函数(如果有的话),以便我们想要恢复或调用varoldHandler=element.onblur;//设置新的onblur处理函数element.onblur=function(event){//如果需要,我们可以调用原有的处理函数//if(oldHandler)oldHandler.call(this,event);//然后执行我们新的逻辑console.log('新的失焦事件被触发');};}```但是,这种方法会覆盖通过onblur属性绑定的事件,而不会影响通过addEventListener绑定的事件。因此,最可靠的方式是我们在绑定事件时统一使用addEventListener,并且保留事件处理函数的引用,以便移除。如果我们无法控制原有的事件绑定,并且需要确保原有的事件处理函数不再执行,那么可能需要与原有代码的开发者协商,或者尝试重写整个事件绑定机制。根据问题的要求,我们假设原有的事件处理函数是通过addEventListener添加的,并且我们保存了引用。如果问题中的class只有一个元素,那么我们可以使用querySelector,但这里我们使用getElementsByClassName获取多个元素。另外,如果原有的事件处理函数是多个,那么我们需要分别移除它们(如果我们保存了多个引用)。总结:事件处理函数的移除依赖于保留对函数的引用。如果没有保留,则无法移除。因此,在实际项目中,我们建议在添加事件时使用命名函数(而不是匿名函数),并将其引用保存在一个可以访问的地方,以便后续移除。下面是一个更完整的示例,我们将事件处理函数的引用存储在元素的data属性中,这样我们就可以在需要时移除:在添加原有事件时:```javascript//原有的事件处理函数functionoldBlurHandler(event){//...}varelements=document.getElementsByClassName('my-class');for(vari=0;i<elements.length;i++){varelement=elements[i];element.addEventListener('blur',oldBlurHandler);//将事件处理函数引用保存在元素上element.dataset.oldBlurHandler=oldBlurHandler;//注意:这样保存的是函数名,但是函数名只是一个引用,我们可以通过这个引用移除}```然后,当我们需要替换事件时:```javascriptvarelements=document.getElementsByClassName('my-class');for(vari=0;i<elements.length;i++){varelement=elements[i];//从元素上获取保存的事件处理函数引用varoldHandler=element.dataset.oldBlurHandler;if(oldHandler){element.removeEventListener('blur',oldHandler);deleteelement.dataset.oldBlurHandler;}//添加新的事件处理函数element.addEventListener('blur',newBlurHandler);//保存新的事件处理函数引用element.dataset.newBlurHandler=newBlurHandler;}```但是,请注意:将函数引用保存在DOM元素的data属性中并不是一个常见的做法,因为data属性只能存储字符串,而函数是对象,直接存储会转换为字符串,这样就丢失了函数的引用。所以上述代码是错误的。正确做法:我们可以使用一个Map或WeakMap来存储元素和事件处理函数的映射。例如:```javascript//创建一个WeakMap来存储每个元素对应的blur事件处理函数varblurHandlers=newWeakMap();//添加原有事件varelements=document.getElementsByClassName('my-class');for(vari=0;i<elements.length;i++){varelement=elements[i];varoldHandler=function(event){//...};element.addEventListener('blur',oldHandler);//将事件处理函数存储在WeakMap中,键为元素对象blurHandlers.set(element,oldHandler);}//当需要移除原有事件并添加新事件时varelements=document.getElementsByClassName('my-class');for(vari=0;i<elements.length;i++){varelement=elements[i];varoldHandler=blurHandlers.get(element);if(oldHandler){element.removeEventListener('blur',oldHandler);blurHandlers.delete(element);}varnewHandler=function(event){//...};element.addEventListener('blur',newHandler);blurHandlers.set(element,newHandler);}```使用WeakMap的好处是,当元素被移除时,不会阻止垃圾回收,因此不会造成内存泄漏。综上所述,根据问题的要求,我们需要先清除失焦事件,然后添加新的失焦事件。最可靠的方式是保留事件处理函数的引用,然后使用removeEventListener移除。如果无法保留引用,那么可能需要考虑其他方法,但都有一定的局限性。因此,在实际应用中,请确保在添加事件时保留引用。由于问题中没有具体说明原有事件处理函数的情况,我们给出一个通用的示例:假设我们能够保存引用,并使用WeakMap来存储。但是,如果问题中的class是动态变化的(比如新增的元素),那么我们需要使用事件委托或者在新元素添加时再绑定事件。这里我们只处理当前存在的元素。下面我们给出一个完整的示例,包括使用WeakMap存储事件处理函数,然后替换事件。注意:WeakMap的键必须是对象(元素),值可以是事件处理函数。我们可以在需要替换事件时,从WeakMap中取出原有的事件处理函数并移除。代码示例:```javascript//假设我们有一个WeakMap来存储blur事件处理函数constblurHandlers=newWeakMap();//初始设置:给所有.my-class元素添加blur事件functionaddInitialBlurEvent(){constelements=document.querySelectorAll('.my-class');elements.forEach(element=>{consthandler=function(event){console.log('原有的失焦事件');};element.addEventListener('blur',handler);blurHandlers.set(element,handler);});}//替换事件:移除旧的,添加新的functionreplaceBlurEvent(){constelements=document.querySelectorAll('.my-class');elements.forEach(element=>{//获取旧的事件处理函数constoldHandler=blurHandlers.get(element);if(oldHandler){element.removeEventListener('blur',oldHandler);blurHandlers.delete(element);}constnewHandler=function(event){console.log('新的失焦事件');//这里写新的失焦事件处理逻辑};element.addEventListener('blur',newHandler);blurHandlers.set(element,newHandler);});}//调用addInitialBlurEvent()来初始添加事件//然后当需要替换时,调用replaceBlurEvent()```以上代码使用ES6语法,需要在不支持的环境中使用polyfill或者转译。另外,如果页面上动态添加了新的具有class="my-class"的元素,那么我们需要在添加元素后立即绑定事件(初始事件或新事件)。这可以通过MutationObserver来监听DOM变化,或者在我们添加元素的代码中主动调用事件绑定函数。由于问题中只要求清除失焦事件并添加新的,所以我们不涉及动态添加元素的情况。总结:我们使用WeakMap来存储事件处理函数的引用,以便后续移除。然后遍历所有具有指定class的元素,移除旧的blur事件处理函数,添加新的blur事件处理函数。注意:如果同一个元素需要多次替换事件,那么每次替换时都需要更新WeakMap中存储的事件处理函数。最后,如果问题中的class只有一个元素,也可以使用id来标识,但这里我们按照class处理。请根据实际需求调整代码。相关问题:</think>### 清除并替换元素的失焦事件处理 在 JavaScript 中,要清除元素的失焦事件并添加新的事件处理程序,需要执行以下步骤: 1. 获取目标元素 2. 移除现有的 `blur` 事件监听器 3. 添加新的 `blur` 事件监听器 以下是完整实现代码: ```html <!DOCTYPE html> <html> <body> <input type="text" class="form-input" id="username" placeholder="用户名"> <div id="validation-result"></div> <script> // 获取所有需要处理的元素 const inputs = document.querySelectorAll('.form-input'); // 原始的失焦事件处理函数 function originalBlurHandler(event) { console.log('原始失焦事件触发:', event.target.id); } // 新的失焦事件处理函数 function newBlurHandler(event) { const input = event.target; const resultDiv = document.getElementById('validation-result'); if (input.value.trim() === '') { input.style.borderColor = 'red'; resultDiv.textContent = '该字段不能为空!'; resultDiv.style.color = 'red'; } else { input.style.borderColor = 'green'; resultDiv.textContent = '输入有效!'; resultDiv.style.color = 'green'; } console.log('新失焦事件触发:', input.id); } // 初始化时添加原始事件 inputs.forEach(input => { input.addEventListener('blur', originalBlurHandler); }); // 替换事件处理函数的主函数 function replaceBlurHandlers() { inputs.forEach(input => { // 克隆元素以移除所有事件监听器 const clone = input.cloneNode(true); input.parentNode.replaceChild(clone, input); // 添加新的事件处理程序到克隆元素 clone.addEventListener('blur', newBlurHandler); console.log(`已为 ${clone.id} 替换失焦事件处理程序`); }); } // 调用函数替换事件处理程序 replaceBlurHandlers(); </script> </body> </html> ``` ### 代码解释 1. **获取元素**: ```javascript const inputs = document.querySelectorAll('.form-input'); ``` 使用 `querySelectorAll` 获取所有具有 `form-input` 类的元素 2. **原始事件处理函数**: ```javascript function originalBlurHandler(event) { console.log('原始失焦事件触发:', event.target.id); } ``` 简单的日志记录函数,实际项目中可能有更复杂的逻辑 3. **新事件处理函数**: ```javascript function newBlurHandler(event) { // 表单验证逻辑 // 更新UI显示验证结果 } ``` 包含输入验证和UI更新逻辑 4. **核心替换逻辑**: ```javascript function replaceBlurHandlers() { inputs.forEach(input => { // 克隆元素移除所有事件监听器 const clone = input.cloneNode(true); input.parentNode.replaceChild(clone, input); // 添加新的事件处理程序 clone.addEventListener('blur', newBlurHandler); }); } ``` - `cloneNode(true)` 创建元素的深拷贝(包括子节点) - 用克隆元素替换原始元素,自动移除所有事件监听器 - 添加新的 `blur` 事件处理程序 5. **初始化与调用**: ```javascript // 初始添加原始事件 inputs.forEach(input => { input.addEventListener('blur', originalBlurHandler); }); // 替换事件处理程序 replaceBlurHandlers(); ``` ### 关键注意事项 1. **事件移除**: - 使用 `cloneNode` 是移除所有事件监听器的最可靠方法 - 替代方案(需要保留事件引用): ```javascript // 需要保存原始处理函数的引用 input.removeEventListener('blur', originalBlurHandler); ``` 2. **动态元素**: - 如果元素是动态添加的,需要使用事件委托: ```javascript document.body.addEventListener('blur', function(event) { if (event.target.classList.contains('form-input')) { newBlurHandler(event); } }, true); // 使用捕获阶段确保处理 ``` 3. **jQuery 简化版**: ```javascript $('.form-input') .off('blur') // 移除所有blur事件 .on('blur', newBlurHandler); ``` 4. **性能考虑**: - 克隆操作会重置元素状态(如焦点、输入值) - 对大量元素操作时考虑性能影响
阅读全文

相关推荐

<!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <script type="text/javascript" src="../js/date.format.js"></script> <script src="../js/jquery.min.js"></script> <script type="text/javascript" src="../js/jquery.datetimepicker.full.js"></script> <script src="../js/jquery.form.min.js"></script> <script src="../js/bootstrap.bundle.min.js"></script> <script src="../js/datatables.min.js"></script> <script type="text/javascript" src="../js/buttons.html5.min.js"></script> <script src="../js/datav.min.vue.js"></script> <style> .search-span { background-color: LightSteelBlue; } .row-div-20 { margin: 20px; } .row-div-10 { margin: 10px; } .row-div-5 { margin: 5px; } .custom-tooltip { --bs-tooltip-bg: var(--bs-secondary); } </style> </head> <body> <form id="search_form" action="../Controller/getTraceabilityList.ashx" method="post" enctype="application/x-www-form-urlencoded" onsubmit="loadDataTable();return false;"> 生產單號 <input id="base-id" name="base-id" type="text" class="form-control" /> 出貨單號 <input type="text" class="form-control" disabled /> 日期 <input id="start-time" name="start-time" type="text" class="form-control" autocomplete="off" /> <input id="end-time" name="end-time" type="text" class="form-control" autocomplete="off" /> 料號 <input id="parn-no" name="parn-no" type="text" class="form-control" /> 批號 <input name="batch-no" type="text" class="form-control" /> DC <input name="dc" type="text" class="form-control" /> 版本 <input name="version" type="text" class="form-control" /> 客戶料號 <input type="text" class="form-control" disabled /> 客戶批號 <input type="text" class="form-control" disabled /> 機臺編號 <input name="machine-no" type="text" class="form-control" /> 站別 <input id="station" name="station" type="text" readonly class="form-control" autocomplete="off" /> <button type="button" onclick="showStationModal()" class="btn btn-outline-primary"> 選擇站別</button> WPNL 號 <input name="wpnl-no" type="text" class="form-control" disabled /> SPNL 號 <input name="spnl-no" type="text" class="form-control" disabled /> PCS 號 <input name="pcs-no" type="text" class="form-control" disabled /> Bacode <input id="Code-no" name="Code-no" type="text" class="form-control" /> <button id="search-btn" class="btn btn-primary">查詢</button> <input id="reject" name="checkColumn" type="checkbox" title="test" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="reject" class="btn btn-outline-success" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-custom-class="custom-tooltip" data-bs-title="AOI / OS / VI"> 不良率</label> <input name="reject" type="text" value="N" style="display: none" /> <input id="scrap" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="scrap" class="btn btn-outline-success" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-custom-class="custom-tooltip" data-bs-title="AOI / OS / VI"> 報廢率</label> <input name="scrap" type="text" value="N" style="display: none" /> <input id="ipqc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="ipqc" class="btn btn-outline-success"> IPQC</label> <input name="ipqc" type="text" value="N" style="display: none" /> <input id="oqc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="oqc" class="btn btn-outline-success"> OQC 批退率</label> <input name="oqc" type="text" value="N" style="display: none" /> <input id="mrb" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="mrb" class="btn btn-outline-success"> MRB 報廢率</label> <input name="mrb" type="text" value="N" style="display: none" /> <input id="materiel" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="materiel" class="btn btn-outline-success">原物料異常</label> <input name="materiel" type="text" value="N" style="display: none" /> <input id="eim" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="eim" class="btn btn-outline-success">設備 A 級告警數</label> <input name="eim" type="text" value="N" style="display: none" /> <input id="mes" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="mes" class="btn btn-outline-success">MES 設備維修記錄</label> <input name="mes" type="text" value="N" style="display: none" /> <input id="potion-oos" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="potion-oos" class="btn btn-outline-success">藥水 OOS 異常點數</label> <input name="potion-oos" type="text" value="N" style="display: none" /> <input id="potion-ooc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="potion-ooc" class="btn btn-outline-success">藥水 OOC 異常點數</label> <input name="potion-ooc" type="text" value="N" style="display: none" /> <input id="product-oos" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="product-oos" class="btn btn-outline-success">產品 OOS 異常點數</label> <input name="product-oos" type="text" value="N" style="display: none" /> <input id="product-ooc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="product-ooc" class="btn btn-outline-success">產品 OOC 異常點數</label> <input name="product-ooc" type="text" value="N" style="display: none" /> <input id="great-exception" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="great-exception" class="btn btn-outline-success">重大異常</label> <input name="great-exception" type="text" value="N" style="display: none" /> <input id="rework" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="rework" class="btn btn-outline-success">重工</label> <input name="rework" type="text" value="N" style="display: none" /> <input id="exception-handle" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="exception-handle" class="btn btn-outline-success">異常處置</label> <input name="exception-handle" type="text" value="N" style="display: none" /> <input id="complaint" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="complaint" class="btn btn-outline-success">客訴</label> <input name="complaint" type="text" value="N" style="display: none" /> <input id="only-exception" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="only-exception" class="btn btn-outline-success">只看異常</label> <input name="only-exception" type="text" value="N" style="display: none" /> <input id="all" type="checkbox" class="btn-check" onchange="changeAll($(this))" autocomplete="off" /> <label for="all" class="btn btn-outline-success">ALL</label> <input name="type" type="text" value="list" style="display: none" /> <input id="isSearching" type="text" value="N" style="display: none" /> <button id="submit-btn" type="submit" class="btn btn-primary">查詢</button> </form> 站別選擇 <input type="text" placeholder="站別名稱" onkeyup="screenStation($(this))" class="form-control" />
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> 關閉</button> <button type="button" onclick="clearStation()" class="btn btn-danger"> 清除</button> <button type="button" onclick="confirmStation()" class="btn btn-primary" data-bs-dismiss="modal"> 確認</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"> </button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Close</button> <script type="text/javascript"> var table; const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); $(function () { //得到当前时间 var now = new Date(); var endDate = now.format('Y-m-d H:i'); now.setTime(now.getTime() - 60 * 60 * 1000); var startDate = now.format("Y-m-d H:i"); $('#start-time').datetimepicker({ format: 'Y-m-d H:i', step: 1, value: startDate }); $('#end-time').datetimepicker({ format: 'Y-m-d H:i', step: 1, value: endDate }); $.datetimepicker.setLocale('zh'); initStation(); //给行绑定选中事件 $('#table_id tbody').on('click', 'tr', function () { if ($(this).hasClass('selected')) { $(this).removeClass('selected'); } else { $('#table_id tbody > tr').removeClass('selected'); $(this).addClass('selected'); } }); }); function initStation() { $.ajax({ url: '../Controller/getTraceabilityList.ashx', data: { 'type': 'station' }, success: function(result) { $.each(result.data.list, function(i, n) { $('#station-div').append( '' + '' + '<input id="' + n + '" value="' + n + '" type="checkbox" class="btn-check" />' + '<label for="' + n + '" class="btn btn-outline-success btn-sm">' + n + '</label>' + '' + '' ); }); } }); } // code輸入後查詢 function getSampleBoardData() { var data; var codeNo = document.getElementById("Code-no").value; $.ajax({ url: '../Controller/getTraceabilityList.ashx?type=codeNo', data: { 'codeNo': codeNo }, async: false, success: function (result) { data = result; } }); return data; }; document.getElementById("search-btn").addEventListener("click", function() { var codeNo = document.getElementById("Code-no").value; var date = getSampleBoardData() document.getElementsByName('base-id')[0].value = date.list; document.getElementsByName('batch-no')[0].value = date.list1; document.getElementsByName('parn-no')[0].value = date.list2; // error: function() { // alert(‘查询失败,请重试’); // } }); function showStationModal() { clearStation(); var stationStr = $('#station').val(); var stationArr if (stationStr != '') { stationArr = stationStr.split(','); } $.each(stationArr, function(i, n) { $(eval(n)).prop('checked', true); }); var stationModal = new bootstrap.Modal($("#station-modal")); stationModal.show(); } function screenStation(input) { var str = input.val().toUpperCase(); $('#station-div > div').hide(); if (str == "") { $('#station-div > div').show(); } else { $('[id*="' + str + '"]').parent().parent().show(); } } function clearStation() { $('#station-div input').prop('checked', false); } function confirmStation() { var str = ""; $('#station-div input:checked').each(function (i, e) { str += ($(e).attr('id') + ','); }); $('#station').val(str.substring(0, str.length - 1)); } function checkboxChange(checkbox) { $('[name="' + checkbox.attr('id') + '"]').val(checkbox.prop('checked') ? 'Y' : 'N'); } function changeAll(checkbox) { var checkboxes = $('[name="checkColumn"]'); if (checkbox.prop('checked')) { checkboxes.prop('checked', true); } else { checkboxes.prop('checked', false); } checkboxes.each(function (i, e) { checkboxChange($(e)); }); } function loadDataTable() { if ($('#isSearching').val() === 'Y') { alert('系統查詢中,請稍等···'); return; } $('#isSearching').val('Y'); if (!$('#reject').prop('checked') && !$('#scrap').prop('checked') && !$('#oqc').prop('checked') && !$('#mrb').prop('checked') && !$('#eim').prop('checked') && !$('#mes').prop('checked') && !$('#great-exception').prop('checked') && $('#only-exception').prop('checked')) { $('#isSearching').val('N'); alert('未選擇異常項,無法只看異常。'); return; } let startTime = Date.parse($('#start-time').val()); let endTime = Date.parse($('#end-time').val()); let diffMin = Math.floor((endTime - startTime) / 60000); if (diffMin > 3 * 24 * 60) { $('#isSearching').val('N'); alert('只能查询三天内数据。'); return; } if ($('#base-id').val() == '' && $('#parn-no').val() == '' && ($('#reject').prop('checked') || $('#scrap').prop('checked') || $('#oqc').prop('checked') || $('#mrb').prop('checked') || $('#eim').prop('checked') || $('#mes').prop('checked') || $('#great-exception').prop('checked'))) { $('#isSearching').val('N'); alert('查询额外字段,请添加生产单号或批号条件进行筛选。') return; } $('#submit-btn').append(' '); $('#search_form').ajaxSubmit({ success: function (result) { if (table != null) { table.destroy(); } $('#table_head_id').empty(); $('#tbody_id').empty(); $.each(result.data.head, function (i, n) { $('#table_head_id').append('' + n + ''); }); table = $('#table_id').DataTable({ data: result.data.list, fixedHeader: true, autoWidth: false, scrollX: true, scrollY: 700, searching: 5000, destroy: true, deferRender: true, //延遲渲染 lengthMenu: [ [25, 50, -1], [25, 50, 'All'] ], dom: "<'row'<'col-sm-12 col-md-2'B><'col-sm-12 col-md-1'l><'col-sm-12 col-md-9'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", buttons: ['copy', 'excel'], ordering: false }); $('#submit-btn').text('查詢'); $('#isSearching').val('N'); } }); } function showEIM(count, partId, lotId, machineNo, inDate, outDate) { if (count <= 0) { shwoInfoModal('設備 A 級告警明細', '該機臺告警數為 0'); return; } $.ajax({ async: false, url: '../Controller/getTraceabilityList.ashx', data: { 'type': 'eim', 'partId': partId, 'lotId': lotId, 'machineNo': machineNo, 'inDate': inDate, 'outDate': outDate }, success: function (result) { var content = '<span>' + '' + '設備名稱' + '告警編碼' + '告警信息' + '時間' + '' + '' $.each(result.data.list, function (i, n) { content += '' + '' + n.eqName + '' + '' + n.eventCode + '' + '' + n.eventMessage + '' + '' + n.insertTime + '' + '' }); content += '
' shwoInfoModal('設備 A 級告警明細', content); } }); } function showMES(count, machineNo, inDate, outDate) { if (count <= 0) { shwoInfoModal('MES 設備維修記錄', '該機臺維修記錄為 0。'); return; } $.ajax({ async: false, url: '../Controller/getTraceabilityList.ashx', data: { 'type': 'mes', 'machineNo': machineNo, 'inDate': inDate, 'outDate': outDate }, success: function (result) { var content = '<span>' + '' + '設備名稱' + '記錄 1' + '記錄 2' + '記錄 3' + '記錄 4' + '記錄 5' + '申請時間' + '維修開始時間' + '維修結束時間' + '' + '' $.each(result.data.list, function (i, n) { content += '' + '' + n.deptName + '' + '' + n.notepad1 + '' + '' + n.notepad4 + '' + '' + n.notepad5 + '' + '' + n.notepad6 + '' + '' + n.notepad7 + '' + '' + n.entDate + '' + '' + n.startRepairDate + '' + '' + n.endRepairDate + '' + '' }); content += '
' shwoInfoModal('設備 A 級告警明細', content); } }); }; function shwoInfoModal(title, content) { $('#modal-head-id').text(title) $('#modal-content-id').empty(); $('#modal-content-id').append(content); var infoModal = new bootstrap.Modal($("#info-modal")); infoModal.show(); } </script> </body> </html> 切换中英文页面

<!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <script type="text/javascript" src="../../../js/date.format.js"></script> <script src="../js/jquery.min.js"></script> <script type="text/javascript" src="../../../js/jquery.datetimepicker.full.js"></script> <script src="../js/jquery.form.min.js"></script> <script src="../js/bootstrap.bundle.min.js"></script> <script src="../../js/datatables.min.js"></script> <script type="text/javascript" src="../../../js/buttons.html5.min.js"></script> <script src="../../js/datav.min.vue.js"></script> <style> .search-span { background-color: LightSteelBlue; } .row-div-20 { margin: 20px; } .row-div-10 { margin: 10px; } .row-div-5 { margin: 5px; } .custom-tooltip { --bs-tooltip-bg: var(--bs-secondary); } </style> </head> <body> <form id="search_form" action="../Controller/getTraceabilityList.ashx" method="post" enctype="application/x-www-form-urlencoded" onsubmit="loadDataTable();return false;"> 生產單號 <input id="base-id" name="base-id" type="text" class="form-control" /> 出貨單號 <input type="text" class="form-control" disabled /> 日期 <input id="start-time" name="start-time" type="text" class="form-control" autocomplete="off" /> <input id="end-time" name="end-time" type="text" class="form-control" autocomplete="off" /> 料號 <input id="parn-no" name="parn-no" type="text" class="form-control" /> 批號 <input name="batch-no" type="text" class="form-control" /> DC <input name="dc" type="text" class="form-control" /> 版本 <input name="version" type="text" class="form-control" /> 客戶料號 <input type="text" class="form-control" disabled /> 客戶批號 <input type="text" class="form-control" disabled /> 機臺編號 <input name="machine-no" type="text" class="form-control" /> 站別 <input id="station" name="station" type="text" readonly class="form-control" autocomplete="off" /> <button type="button" onclick="showStationModal()" class="btn btn-outline-primary"> 選擇站別</button> WPNL 號 <input name="wpnl-no" type="text" class="form-control" disabled /> SPNL 號 <input name="spnl-no" type="text" class="form-control" disabled /> PCS 號 <input name="pcs-no" type="text" class="form-control" disabled /> Bacode <input id="Code-no" name="Code-no" type="text" class="form-control" /> <button id="search-btn" class="btn btn-primary">查詢</button> <input id="reject" name="checkColumn" type="checkbox" title="test" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="reject" class="btn btn-outline-success" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-custom-class="custom-tooltip" data-bs-title="AOI / OS / VI"> 不良率</label> <input name="reject" type="text" value="N" style="display: none" /> <input id="scrap" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="scrap" class="btn btn-outline-success" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-custom-class="custom-tooltip" data-bs-title="AOI / OS / VI"> 報廢率</label> <input name="scrap" type="text" value="N" style="display: none" /> <input id="ipqc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="ipqc" class="btn btn-outline-success"> IPQC</label> <input name="ipqc" type="text" value="N" style="display: none" /> <input id="oqc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="oqc" class="btn btn-outline-success"> OQC 批退率</label> <input name="oqc" type="text" value="N" style="display: none" /> <input id="mrb" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="mrb" class="btn btn-outline-success"> MRB 報廢率</label> <input name="mrb" type="text" value="N" style="display: none" /> <input id="materiel" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="materiel" class="btn btn-outline-success">原物料異常</label> <input name="materiel" type="text" value="N" style="display: none" /> <input id="eim" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="eim" class="btn btn-outline-success">設備 A 級告警數</label> <input name="eim" type="text" value="N" style="display: none" /> <input id="mes" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="mes" class="btn btn-outline-success">MES 設備維修記錄</label> <input name="mes" type="text" value="N" style="display: none" /> <input id="potion-oos" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="potion-oos" class="btn btn-outline-success">藥水 OOS 異常點數</label> <input name="potion-oos" type="text" value="N" style="display: none" /> <input id="potion-ooc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="potion-ooc" class="btn btn-outline-success">藥水 OOC 異常點數</label> <input name="potion-ooc" type="text" value="N" style="display: none" /> <input id="product-oos" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="product-oos" class="btn btn-outline-success">產品 OOS 異常點數</label> <input name="product-oos" type="text" value="N" style="display: none" /> <input id="product-ooc" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="product-ooc" class="btn btn-outline-success">產品 OOC 異常點數</label> <input name="product-ooc" type="text" value="N" style="display: none" /> <input id="great-exception" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="great-exception" class="btn btn-outline-success">重大異常</label> <input name="great-exception" type="text" value="N" style="display: none" /> <input id="rework" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="rework" class="btn btn-outline-success">重工</label> <input name="rework" type="text" value="N" style="display: none" /> <input id="exception-handle" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="exception-handle" class="btn btn-outline-success">異常處置</label> <input name="exception-handle" type="text" value="N" style="display: none" /> <input id="complaint" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" disabled /> <label for="complaint" class="btn btn-outline-success">客訴</label> <input name="complaint" type="text" value="N" style="display: none" /> <input id="only-exception" name="checkColumn" type="checkbox" class="btn-check" onchange="checkboxChange($(this))" autocomplete="off" /> <label for="only-exception" class="btn btn-outline-success">只看異常</label> <input name="only-exception" type="text" value="N" style="display: none" /> <input id="all" type="checkbox" class="btn-check" onchange="changeAll($(this))" autocomplete="off" /> <label for="all" class="btn btn-outline-success">ALL</label> <input name="type" type="text" value="list" style="display: none" /> <input id="isSearching" type="text" value="N" style="display: none" /> <button id="submit-btn" type="submit" class="btn btn-primary" onclick="return submit-btn_onclick()">查詢</button> </form> 站別選擇 <input type="text" placeholder="站別名稱" onkeyup="screenStation($(this))" class="form-control" />
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> 關閉</button> <button type="button" onclick="clearStation()" class="btn btn-danger"> 清除</button> <button type="button" onclick="confirmStation()" class="btn btn-primary" data-bs-dismiss="modal"> 確認</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"> </button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Close</button> <script type="text/javascript"> var table; const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); $(function () { //得到当前时间 var now = new Date(); var endDate = now.format('Y-m-d H:i'); now.setTime(now.getTime() - 60 * 60 * 1000); var startDate = now.format("Y-m-d H:i"); $('#start-time').datetimepicker({ format: 'Y-m-d H:i', step: 1, value: startDate }); $('#end-time').datetimepicker({ format: 'Y-m-d H:i', step: 1, value: endDate }); $.datetimepicker.setLocale('zh'); initStation(); //给行绑定选中事件 $('#table_id tbody').on('click', 'tr', function () { if ($(this).hasClass('selected')) { $(this).removeClass('selected'); } else { $('#table_id tbody > tr').removeClass('selected'); $(this).addClass('selected'); } }); }); function initStation() { $.ajax({ url: '../Controller/getTraceabilityList.ashx', data: { 'type': 'station' }, success: function(result) { $.each(result.data.list, function(i, n) { $('#station-div').append( '' + '' + '<input id="' + n + '" value="' + n + '" type="checkbox" class="btn-check" />' + '<label for="' + n + '" class="btn btn-outline-success btn-sm">' + n + '</label>' + '' + '' ); }); } }); } // code輸入後查詢 function getSampleBoardData() { var data; var codeNo = document.getElementById("Code-no").value; $.ajax({ url: '../Controller/getTraceabilityList.ashx?type=codeNo', data: { 'codeNo': codeNo }, async: false, success: function (result) { data = result; } }); return data; }; document.getElementById("search-btn").addEventListener("click", function() { var codeNo = document.getElementById("Code-no").value; var date = getSampleBoardData() document.getElementsByName('base-id')[0].value = date.list; document.getElementsByName('batch-no')[0].value = date.list1; document.getElementsByName('parn-no')[0].value = date.list2; // error: function() { // alert('查询失败,请重试'); // } }); function showStationModal() { clearStation(); var stationStr = $('#station').val(); var stationArr if (stationStr != '') { stationArr = stationStr.split(','); } $.each(stationArr, function(i, n) { $(eval(n)).prop('checked', true); }); var stationModal = new bootstrap.Modal($("#station-modal")); stationModal.show(); } function screenStation(input) { var str = input.val().toUpperCase(); $('#station-div > div').hide(); if (str == "") { $('#station-div > div').show(); } else { $('[id*="' + str + '"]').parent().parent().show(); } } function clearStation() { $('#station-div input').prop('checked', false); } function confirmStation() { var str = ""; $('#station-div input:checked').each(function (i, e) { str += ($(e).attr('id') + ','); }); $('#station').val(str.substring(0, str.length - 1)); } function checkboxChange(checkbox) { $('[name="' + checkbox.attr('id') + '"]').val(checkbox.prop('checked') ? 'Y' : 'N'); } function changeAll(checkbox) { var checkboxes = $('[name="checkColumn"]'); if (checkbox.prop('checked')) { checkboxes.prop('checked', true); } else { checkboxes.prop('checked', false); } checkboxes.each(function (i, e) { checkboxChange($(e)); }); } function loadDataTable() { if ($('#isSearching').val() === 'Y') { alert('系統查詢中,請稍等···'); return; } $('#isSearching').val('Y'); if (!$('#reject').prop('checked') && !$('#scrap').prop('checked') && !$('#oqc').prop('checked') && !$('#mrb').prop('checked') && !$('#eim').prop('checked') && !$('#mes').prop('checked') && !$('#great-exception').prop('checked') && $('#only-exception').prop('checked')) { $('#isSearching').val('N'); alert('未選擇異常項,無法只看異常。'); return; } let startTime = Date.parse($('#start-time').val()); let endTime = Date.parse($('#end-time').val()); let diffMin = Math.floor((endTime - startTime) / 60000); if (diffMin > 3 * 24 * 60) { $('#isSearching').val('N'); alert('只能查询三天内数据。'); return; } if ($('#base-id').val() == '' && $('#parn-no').val() == '' && ($('#reject').prop('checked') || $('#scrap').prop('checked') || $('#oqc').prop('checked') || $('#mrb').prop('checked') || $('#eim').prop('checked') || $('#mes').prop('checked') || $('#great-exception').prop('checked'))) { $('#isSearching').val('N'); alert('查询额外字段,请添加生产单号或批号条件进行筛选。') return; } $('#submit-btn').append(' '); $('#search_form').ajaxSubmit({ success: function (result) { if (table != null) { table.destroy(); } $('#table_head_id').empty(); $('#tbody_id').empty(); $.each(result.data.head, function (i, n) { $('#table_head_id').append('' + n + ''); }); table = $('#table_id').DataTable({ data: result.data.list, fixedHeader: true, autoWidth: false, scrollX: true, scrollY: 700, searching: 5000, destroy: true, deferRender: true, //延遲渲染 lengthMenu: [ [25, 50, -1], [25, 50, 'All'] ], dom: "<'row'<'col-sm-12 col-md-2'B><'col-sm-12 col-md-1'l><'col-sm-12 col-md-9'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", buttons: ['copy', 'excel'], ordering: false }); $('#submit-btn').text('查詢'); $('#isSearching').val('N'); } }); } function showEIM(count, partId, lotId, machineNo, inDate, outDate) { if (count <= 0) { shwoInfoModal('設備 A 級告警明細', '該機臺告警數為 0'); return; } $.ajax({ async: false, url: '../Controller/getTraceabilityList.ashx', data: { 'type': 'eim', 'partId': partId, 'lotId': lotId, 'machineNo': machineNo, 'inDate': inDate, 'outDate': outDate }, success: function (result) { var content = '<span>' + '' + '設備名稱' + '告警編碼' + '告警信息' + '時間' + '' + '' $.each(result.data.list, function (i, n) { content += '' + '' + n.eqName + '' + '' + n.eventCode + '' + '' + n.eventMessage + '' + '' + n.insertTime + '' + '' }); content += '
' shwoInfoModal('設備 A 級告警明細', content); } }); } function showMES(count, machineNo, inDate, outDate) { if (count <= 0) { shwoInfoModal('MES 設備維修記錄', '該機臺維修記錄為 0。'); return; } $.ajax({ async: false, url: '../Controller/getTraceabilityList.ashx', data: { 'type': 'mes', 'machineNo': machineNo, 'inDate': inDate, 'outDate': outDate }, success: function (result) { var content = '<span>' + '' + '設備名稱' + '記錄 1' + '記錄 2' + '記錄 3' + '記錄 4' + '記錄 5' + '申請時間' + '維修開始時間' + '維修結束時間' + '' + '' $.each(result.data.list, function (i, n) { content += '' + '' + n.deptName + '' + '' + n.notepad1 + '' + '' + n.notepad4 + '' + '' + n.notepad5 + '' + '' + n.notepad6 + '' + '' + n.notepad7 + '' + '' + n.entDate + '' + '' + n.startRepairDate + '' + '' + n.endRepairDate + '' + '' }); content += '
' shwoInfoModal('設備 A 級告警明細', content); } }); }; function shwoInfoModal(title, content) { $('#modal-head-id').text(title) $('#modal-content-id').empty(); $('#modal-content-id').append(content); var infoModal = new bootstrap.Modal($("#info-modal")); infoModal.show(); } function submit-btn_onclick() { } </script> </body> </html> 为什么不在原界面直接显示查询结果,而是直接跳转到ashx文件

<template> <a-modal title="权重配置" :visible="visible" :maskClosable="false" @ok="handleOk" width="920px" @cancel="handleCancel" :getContainer="getContain" destroyOnClose > <a-form-model ref="ruleForm" :model="form" :rules="rules"> {{ $t('风险评价等级') }} {{ $t('优: ') }} <a-input-number class="input-item" defaultValue="0" disabled :min="0" :max="1" :step="0.1" /> {{ $t('< 分数 ≤') }} <a-input-number class="input-item" @change="changeInput($event, 1)" v-model="riskExcellent" :min="0" :max="1" :step="0.1" /> {{ $t('良: ') }} <a-input-number class="input-item" v-model="riskMediumLeft" :min="0" :max="1" :step="0.01" /> {{ $t('< 分数 ≤') }} <a-input-number class="input-item" @change="changeInput($event, 2)" v-model="riskMediumRight" :min="0" :max="1" :step="0.01" /> {{ $t('差: ') }} <a-input-number class="input-item" v-model="riskBad" :min="0" :max="1" :step="0.01" /> {{ $t('< 分数 ≤') }} <a-input-number class="input-item" disabled defaultValue="1" :min="0" :max="1" :step="0.01" /> {{ $t('报警评价等级') }} {{ $t('优: ') }} <a-input-number class="input-item" defaultValue="0" disabled :min="0" :max="1" :step="0.1" /> {{ $t('< 分数 ≤') }} <a-input-number class="input-item" @change="changeInput($event, 3)" v-model="alarmExcellent" :min="0" :max="1" :step="0.01" /> {{ $t('良:') }} <a-input-number class="input-item" v-model="alarmMediumLeft" :min="0" :max="1" :step="0.01" /> {{ $t('< 分数 ≤') }} <a-input-number class="input-item" @change="changeInput($event, 4)" v-model="alarmMediumRight" :min="0" :max="1" :step="0.01" /> {{ $t('差: ') }} <a-input-number class="input-item" v-model="alarmBad" :min="0" :max="1" :step="0.01" /> {{ $t('< 分数 ≤') }} <a-input-number class="input-item" disabled :value="1" :min="0" :max="1" :step="0.01" /> </a-form-model> </a-modal> </template> <script> import editMeterVue from '../../meterManagement/components/editMeter.vue' import factory from '../factory' export default { data() { return { visible: false, // 风险评价等级参数 riskExcellent: null, // 风险评价等级为优的分数,0到1之间 riskMediumLeft: null, // 风险评价等级为良的分数,左边界 riskMediumRight: null, // 风险评价等级为良的分数,有边界 riskBad: null, // 风险评价等级为差的分数 // 报警评价等级参数 alarmExcellent: null, // 报警评价等级为优的分数 alarmMediumLeft: null, // 报警评价等级为良的分数,左边界 alarmMediumRight: null, // 报警评价等级为良的分数,有边界 alarmBad: null, // 报警评价等级为差的分数 id: null, isAdd: false, // 是否是新增 } }, methods: { getContain() { return document.querySelector('.standard-page') }, // 获取权重配置 getWeightInfo() { factory.getWeightInfo().then(res => { if (res.success) { if (Object.keys(res).length > 0) { this.id = res.id this.riskExcellent = res.riskExcellent this.riskMediumLeft = res.riskMediumLeft this.riskMediumRight = res.riskMediumRight this.riskBad = res.riskBad this.alarmExcellent = res.alarmExcellent this.alarmMediumLeft = res.alarmMediumLeft this.alarmMediumRight = res.alarmMediumRight this.alarmBad = res.alarmBad } else { this.isAdd = true this.riskExcellent = null this.riskMediumLeft = null this.riskMediumRight = null this.riskBad = null this.alarmExcellent = null this.alarmMediumLeft = null this.alarmMediumRight = null this.alarmBad = null } } }) }, openModal() { this.visible = true this.getWeightInfo() }, changeInput(e, flag) { console.log(e) if (e) { if (flag == 1) { this.riskMediumLeft = e } else if (flag == 2) { this.riskBad = e } else if (flag == 3) { this.alarmMediumLeft = e } else { this.alarmBad = editMeterVue } } }, handleCancel() { this.visible = false }, async handleOk() { let msg = '' // 验证风险评价等级 if (this.riskExcellent > this.riskMediumLeft) { msg = this.$t('风险评价: 优≤良(下)') } if (this.riskMediumLeft <= this.riskMediumRight) { msg = this.$t('风险评价: 良(下)<良(上)') } if (this.riskMediumRight > this.riskBad) { msg = this.$t('风险评价: 良(上)≤差') } // 验证报警评价等级 if (this.alarmExcellent > this.alarmMediumLeft) { msg = this.$t('报警评价: 优≤良(下)') } if (this.alarmMediumLeft <= this.alarmMediumRight) { msg = this.$t('报警评价: 良(下)<良(上)') } if (this.alarmMediumRight > this.alarmBad) { msg = this.$t('报警评价: 良(上)≤差') } if (msg) { this.$message.destroy() return this.$message.error(msg) } let params = { riskExcellent: this.riskExcellent, riskMediumLeft: this.riskMediumLeft, riskMediumRight: this.riskMediumRight, riskBad: this.riskBad, alarmExcellent: this.alarmExcellent, alarmMediumLeft: this.alarmMediumLeft, alarmMediumRight: this.alarmMediumRight, alarmBad: this.alarmBad, } if (!this.isAdd) { params.id = this.id } let api = this.isAdd ? factory.addWeight : factory.editWeight let res = await api(params) console.log(params) this.visible = false }, error(msg) { this.$message.error(msg) return false }, }, } </script> <style lang="less" scoped> .config-section { width: 100%; margin-bottom: 20px; .config-title { padding-left: 12px; height: 38px; background: #2b3746; color: rgb(244, 247, 250); font-family: '微软雅黑'; font-size: 14px; font-weight: 700; display: flex; align-items: center; text-align: left; } .config-box { background-color: #1f2834; .grade-item { padding-left: 12px; height: 64px; display: flex; align-items: center; color: rgb(180, 191, 204); font-family: '微软雅黑'; font-size: 14px; font-weight: 400; border-bottom: 1px solid rgb(43, 55, 70); .input-item { width: 120px; } span { margin: 0 5px; } span:first-child { margin: 0; margin-right: 24px; } } /deep/ .ant-input-number-disabled input { background-color: #364254; } } } </style> 【差】的下限 录入校验:失焦时触发,仅需校验【良】等级下最小值是否小于最大值即可
校验提示:系统检测到录入的区间无效 (最小值大于最大值),请检查并调整

@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>资料修改</title> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f8f8f8; } .form-container { width: 100%; max-width: 768px; padding: 24px; background: #fff; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border-radius: 8px; } .layui-form-item .layui-form-label { width: 120px; } .layui-form-item .layui-input-block { margin-left: 120px; } @*@media (max-width: 768px) { .layui-form-item .layui-form-label { width: 90px; }*@ .layui-form-item .layui-input-block { margin-left: 90px; } </style> </head> <body> <form class="layui-form"> <fieldset class="layui-elem-field layui-field-title"> <legend>基础信息</legend> </fieldset> <label class="layui-form-label">用户账号</label> <input type="text" name="UserCode" lay-verify="required|username" placeholder="请输入用户账号" autocomplete="off" class="layui-input" disabled> <label class="layui-form-label">用户名</label> <input type="text" name="UserName" lay-verify="required|nickname" placeholder="请输入用户名" autocomplete="off" class="layui-input"> <label class="layui-form-label">性别</label> <input type="radio" name="Sex" value="true" title="男" checked> <input type="radio" name="Sex" value="false" title="女"> <fieldset class="layui-elem-field layui-field-title"> <legend>联系信息</legend> </fieldset> <label class="layui-form-label">电话</label> <input type="tel" name="Tel" lay-verify="required|phone" placeholder="请输入手机号" autocomplete="off" class="layui-input"> <label class="layui-form-label">邮箱</label> <input type="text" name="Email" lay-verify="email" placeholder="请输入邮箱" autocomplete="off" class="layui-input"> <label class="layui-form-label">原密码</label> <input type="password" name="OldPassword" lay-verify="pass" placeholder="请输入原密码" autocomplete="off" lay-affix="eye" class="layui-input"> 6-12位字符 <label class="layui-form-label">新密码</label> <input type="password" name="NewPassword" lay-verify="pass" placeholder="请输入新密码" autocomplete="off" lay-affix="eye" class="layui-input"> 6-12位字符 <fieldset class="layui-elem-field layui-field-title"> <legend>其他信息</legend> </fieldset> <label class="layui-form-label">出生日期</label> <input type="text" name="BirthDay" id="birthDate" lay-verify="date" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input"> <label class="layui-form-label">籍贯</label> <input type="text" name="NativePlace" placeholder="请输入籍贯" autocomplete="off" class="layui-input"> <label class="layui-form-label">地址</label> <input type="text" name="Address" placeholder="请输入详细地址" autocomplete="off" class="layui-input"> <fieldset class="layui-elem-field layui-field-title"> <legend>权限信息</legend> </fieldset> <label class="layui-form-label">职位</label> <select name="PositionID" lay-verify="required" lay-search> <option value="">请选择职位</option> <option value="1">管理员</option> <option value="2">普通员工</option> <option value="3">超级管理员</option> </select> <label class="layui-form-label">组织机构</label> <select name="OrganizationID" lay-verify="required" lay-search> <option value="">请选择组织机构</option> <option value="1">总部</option> <option value="2">技术部</option> <option value="3">市场部</option> </select> <button type="submit" class="layui-btn" lay-submit lay-filter="formSubmit">立即提交</button> <button type="button" class="layui-btn layui-btn-primary" onclick="window.history.back()">返回登录</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </form> <script> // 初始化日期选择器 layui.use('laydate', function () { var laydate = layui.laydate; laydate.render({ elem: '#birthDate' }); }); // 表单验证规则扩展 layui.use('form', function () { var form = layui.form; form.verify({ username: function (value) { if (!/^[a-zA-Z0-9_]{4,16}$/.test(value)) { return '用户名为4-16位字母、数字或下划线'; } }, nickname: function (value) { if (value.length < 2 || value.length > 20) { return '昵称长度应在2-20个字符之间'; } } }); }); </script> </body> </html> 为什么这段代码执行后用户账号输入不了,以及修改密码后sql查询后没改变

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>入库模块</title> <style> body { background-color: #f8f9fa; font-family: Arial, sans-serif; } .container { max-width: 1000px; min-height: 600px; /* 可根据需求调整这个值来改变整体框的最小高度 */ } .header { margin: 20px 0; color: #343a40; font-weight: bold; } .form-group { margin-bottom: 1.5rem; /* 增加表单组之间的间距 */ } .list-group-item { display: grid; grid-template-columns: repeat(3, 1fr); justify-content: space-between; align-items: center; width: 100%; padding: 5px 10px; border: 1px solid #dee2e6; border-radius: 5px; box-sizing: border-box; } .list-group-item span { text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card { border: none; border-radius: 10px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); padding: 20px; background-color: #ffffff; } .btn-primary { background-color: #007bff; border: none; width: 200px; /* 设置按钮宽度为 50 像素 */ } .btn-primary:hover { background-color: #0056b3; } footer { margin-top: 20px; padding: 10px 0; background-color: #343a40; color: white; border-radius: 0 0 15px 15px; } /* 为查询按钮添加左外边距 */ .btn-query { margin-left: 100px; } /* 新增的按钮容器样式 */ .button-container { text-align: center; } /* 新增的样式,设置入库编号文本框的尺寸 */ .small-input { width: 150px; /* 你可以根据需要调整宽度 */ } /* 新增样式,使入库编号输入框在同一行显示 */ .id-inputs { display: flex; flex-wrap: wrap; align-items: center; } .id-inputs label { margin-right: 5px; } .id-row { display: flex; flex-wrap: wrap; align-items: center; width: 100%; } </style> </head> <body> 金铜线入库模块 <form method="POST"> <label for="item">整半卷类型</label> <select class="form-control" id="category" name="category" required> <option value="" disabled selected>请选择入库类型</option> <option value="整卷">整卷</option> <option value="半卷">半卷</option> {% if category %} <option value="{{ category }}" selected>{{ category }}</option> {% endif %} </select> <label for="item">入库型号</label> <select class="form-control" id="type" name="item" required> <option value="" disabled selected>请选择物品编号</option> <option value="70694">70694 - AU</option> <option value="70704">70704 - AU</option> <option value="70774">70774 - AU</option> <option value="70794">70794 - CU</option> <option value="70804">70708 - CU</option> <option value="70784">7058779 - CU</option> </select> <label for="batchNumber">入库批号</label> <input type="text" class="form-control" id="batchNumber" name="batchNumber" required> <label for="ID1">编号#1</label> <input type="text" class="form-control small-input" id="ID1" name="ID1"> <label for="ID2">编号#2</label> <input type="text" class="form-control small-input" id="ID2" name="ID2"> <label for="ID3">编号#3</label> <input type="text" class="form-control small-input" id="ID3" name="ID3"> <label for="ID4">编号#4</label> <input type="text" class="form-control small-input" id="ID4" name="ID4"> <label for="ID5">编号#5</label> <input type="text" class="form-control small-input" id="ID5" name="ID5"> <label for="ID6">编号#6</label> <input type="text" class="form-control small-input" id="ID6" name="ID6"> <label for="ID7">编号#7</label> <input type="text" class="form-control small-input" id="ID7" name="ID7"> <label for="ID8">编号#8</label> <input type="text" class="form-control small-input" id="ID8" name="ID8"> <label for="ID9">编号#9</label> <input type="text" class="form-control small-input" id="ID9" name="ID9"> <label for="ID10">编号#10</label> <input type="text" class="form-control small-input" id="ID10" name="ID10"> <label for="ID11">编号#11</label> <input type="text" class="form-control small-input" id="ID11" name="ID11"> <label for="ID12">编号#12</label> <input type="text" class="form-control small-input" id="ID12" name="ID12"> <label for="quantity">入库数量</label> <input type="number" class="form-control" id="quantity" name="quantity" value="1" required> <label for="date">入库日期</label> <input type="datetime-local" class="form-control" id="date" name="date" required value="{{ date }}"> <label for="shift">入库班次</label> <select class="form-control" id="shift" name="shift" required> <option value="" disabled selected>请选择班次</option> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> {% if shift %} <option value="{{ shift }}" selected>{{ shift }}</option> {% endif %} </select> <label for="barge">员工工号</label> <input type="text" class="form-control small-input" id="barge" name="barge" required value="{{ username }}"> <button type="submit" class="btn btn-primary">入库</button> <button type="button" class="btn btn-primary btn-query" id="queryButton">查询</button> </form> 当前库存 入库类型 在库型号 在库数量 {% for data in inventory_data %} {{ data.category }} {{ data.item }} {{ data.quantity }} {% endfor %} 返回首页
本系统用于管理金铜线的入库、出库和库存报告 任何问题,请联系YanNiZong(cell:13910052243)
<script> function submitForm(event) { event.preventDefault(); // 阻止表单默认提交行为 // 获取表单数据 const data = { category: document.getElementById('category').value, type: document.getElementById('type').value, batchNumber: document.getElementById('batchNumber').value, ID1: document.getElementById('ID1').value, ID2: document.getElementById('ID2').value, ID3: document.getElementById('ID3').value, ID4: document.getElementById('ID4').value, ID5: document.getElementById('ID5').value, ID6: document.getElementById('ID6').value, ID7: document.getElementById('ID7').value, ID8: document.getElementById('ID8').value, ID9: document.getElementById('ID9').value, ID10: document.getElementById('ID10').value, ID11: document.getElementById('ID11').value, ID12: document.getElementById('ID12').value, quantity: document.getElementById('quantity').value, date: document.getElementById('date').value, shift: document.getElementById('shift').value, barge: document.getElementById('barge').value }; console.log(data) fetch('/into_storage', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => response.json()) .then(result => { alert(result.message); // 简单提示结果 if (result.status === 'success') { // 重置表单(可选) document.getElementById('batchNumber').value = ''; for(let i=1; i<=12; i++) { document.getElementById(ID${i}).value = ''; } } }) .catch(error => alert('网络错误: ' + error)); } // 绑定表单提交事件 document.querySelector('form').addEventListener('submit', submitForm); </script> </body> </html> 这里的javascript有什么问题吗,可以通过id绑定按钮事件吗,或者哪一种交互、方式会更好

<el-button type="primary" class="button button0" @click="addCube">添加立方体</el-button> <el-button type="primary" class="button button1" @click="removeCube">清除立方体</el-button> <el-button type="primary" class="button button2" @click="collapseCube">折叠立方体</el-button> <el-button type="primary" class="button button3" @click="expandCube">展开立方体</el-button> <el-button type="primary" class="button button4" @click="exportCubeData">导出当前立方体数据</el-button> <el-button type="primary" class="buttonRight buttonRight0" @click="batchAddCube">一键添加立方体</el-button> <el-button type="primary" class="buttonRight buttonRight1" @click="batchRemoveCube">一键清除立方体</el-button> <el-button type="primary" class="buttonRight buttonRight2" @click="batchCollapseCube">一键折叠立方体</el-button> <el-button type="primary" class="buttonRight buttonRight3" @click="batchExpandCube">一键展开立方体</el-button> <el-button type="primary" class="buttonRight buttonRight4" @click="batchExportCubeData">一键导出立方体数据</el-button> <el-dialog :visible.sync="centerDialogVisible" title="添加立方体参数" width="20%" center top="30vh"> 长度(米):   <el-input v-model="length" style="width: 160px" placeholder="请输入长度" /> 宽度(米):   <el-input v-model="width" style="width: 160px" placeholder="请输入宽度" /> 高度(米):   <el-input v-model="height" style="width: 160px" placeholder="请输入高度" />

最新推荐

recommend-type

Element Input输入框的使用方法

class="input-with-select"&gt; v-model="select" slot="prepend" placeholder="请选择"&gt; 餐厅名" value="1"&gt; 订单号" value="2"&gt; 用户电话" value="3"&gt; &lt;el-button slot="append" icon="el-icon-search"&gt;...
recommend-type

微信小程序 input输入框控件详解及实例(多种示例)

- `bindfocus`和`bindblur`分别在输入框获得焦点和失去焦点时触发,可用于实现聚焦和失焦时的特定行为。 - `bindconfirm`在用户按下键盘上的确认键时触发,常用于搜索或提交操作。 4. **样式定制** - 通过CSS类...
recommend-type

基于React实现表单数据的添加和删除详解

"基于React实现表单数据的添加和删除详解" React是Facebook开发的一款开源JavaScript库,用于构建用户界面。它基于组件的概念,允许开发者将UI分解为独立、可重用的组件,从而提高代码的可维护性和可读性。React中...
recommend-type

前端开发基于jQuery的选择器与DOM操作技术:网页元素精准定位及动态交互功能实现

内容概要:本文系统介绍了jQuery的基础知识,涵盖其概念、优势、开发环境搭建、核心语法与选择器、DOM遍历与操作方法,以及事件处理机制。文章强调jQuery作为轻量级JavaScript库在简化DOM操作、跨浏览器兼容性及提升开发效率方面的突出作用,并通过大量代码示例详细讲解了选择器(如标签、类、ID、属性、自定义及表单选择器)、DOM遍历方法(如filter、next、siblings等)、元素访问方式(.get()和索引访问)以及事件绑定与委托(如on、off、hover、ready等),帮助读者掌握jQuery的核心使用技巧。; 适合人群:具备HTML、CSS和JavaScript基础,初入前端领域的开发者或希望巩固jQuery基础的1-3年经验研发人员。; 使用场景及目标:①快速实现DOM元素选取与操作,提升页面交互开发效率;②理解jQuery事件机制与DOM遍历逻辑,用于传统项目维护或兼容性开发;③为学习现代前端框架前打下扎实的JavaScript操作基础。; 阅读建议:建议结合文中示例动手实践,重点理解选择器的使用场景与事件委托机制,注意区分jQuery对象与原生DOM对象的操作差异,并在实际项目中逐步应用所学内容以加深理解。
recommend-type

Info2007v1.0更新至v2.0:优化管理与前台功能

根据提供的文件信息,可以挖掘出以下知识点: ### 标题知识点: 1. **免费时代WEB程序INFO2007 V1.0:** - 该标题表明存在一个名为INFO2007的WEB程序版本1.0,该版本是在免费时代推出的,可能意味着该程序是开源的或者提供免费下载。 ### 描述知识点: 1. **软件缺陷说明:** - 开发者提到程序存在BUG(程序缺陷),并提供了一个更新和反馈的渠道,说明软件仍在开发中,且有后续版本计划。 2. **联系方式:** - 开发者提供了QQ和邮箱作为联系方式,用于反馈问题或询问更新情况。 3. **Info2007v2.0更新内容:** - 提及了升级后的版本INFO2007v2.0新增功能,包括数据库结构变化(添加会员和公告表)、后台管理功能的增加与优化、前台功能的增加与优化等。 4. **安装要求:** - 软件需要特定的服务器环境支持,比如FSO(文件系统对象)、数据采集功能和JMAIL(邮件发送组件)。 5. **配置与安装细节:** - 对config.asp下的目录配置和pageurlsa变量做了说明,这些通常涉及程序的运行环境和安全设置。 6. **默认登录信息:** - 提供了默认的管理员用户名和密码,以及后台管理的默认目录,这对于安装和测试程序很重要。 7. **使用前的必要步骤:** - 强调了解压后生成静态页面的重要性,这可能是确保网站内容可被正确浏览的前置操作。 ### 标签知识点: 1. **ASP源码其他类别:** - 这表明该程序使用ASP(Active Server Pages)作为后端编程语言,并且归类于其他类别,可能意味着它不局限于某一特定功能或领域。 ### 压缩包文件名称列表知识点: 1. **www.codejia.com:** - 这个文件名可能指示了程序被托管或下载的来源网站,也暗示了可能含有与网站域名相关的程序文件。 ### 综合知识点: 1. **软件开发与维护:** - 从描述中可以看出开发者在推动软件的持续改进,并鼓励用户参与软件的测试和反馈过程。 2. **软件环境配置:** - 软件对运行环境有所要求,特别是服务器端的支持,需要了解FSO、数据采集、JMAIL等组件的使用和配置。 3. **后台管理系统:** - 更新内容中提及的后台管理功能,如会员管理、公告管理、文章管理等,显示了该程序提供了一套用于网站内容和用户管理的后台解决方案。 4. **前台展示优化:** - 对前台页面的优化和增加功能,如会员注册、文章页、下载页和分类栏目的改进,说明了对用户体验的重视。 5. **安全与权限控制:** - 默认用户名和密码的提供,以及后台目录的默认设置,强调了安装过程中应立即更改编译以提高安全性。 6. **静态页面生成:** - 生成静态页面作为必要步骤可能涉及到网站的性能优化和安全措施。 7. **开源与社区支持:** - 由于提及了更新的可能和用户反馈渠道,这表明软件具有一定的开源特性或至少鼓励社区参与。 综上所述,这些知识点涵盖了软件开发的常见方面,包括软件生命周期的维护、功能更新、环境配置、安全实践以及优化用户体验。了解和掌握这些知识点可以帮助开发者和用户更好地利用和改进免费时代WEB程序INFO2007 V1.0。
recommend-type

Rust测试实战:错误处理、环境变量与模拟服务器

### Rust 测试实战:错误处理、环境变量与模拟服务器 在 Rust 开发中,测试是确保代码质量和稳定性的重要环节。本文将深入探讨 Rust 中的测试技巧,包括错误处理、使用环境变量测试 Config 模块以及使用模拟服务器测试 profanity 模块。 #### 1. 错误处理与比较 在 Rust 中,我们可以为自定义错误类型实现 `std::fmt::Display` 特征,以便将错误转换为字符串。以下是一个示例: ```rust impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::For
recommend-type

请分析下面代码:<tbody> <#if (paginationSupport.items)?has_content> <#list paginationSupport.items?sort_by('caseNo') as s> <tr class="b"> <td><a href="../user/viewRequestForm.action?requestFormId=${s.id}">${s.caseNo?default("Not Assigned")?if_exists}</a></td> <td>${s.lotId?if_exists}</td> <td><@m.directoryLink s.applicant?if_exists /></td> <td>${s.prodId?if_exists}</td> <td>${s.lotStageId?if_exists}</td> <td>${s.status?if_exists}</td> <td> <#if s.status!="Waiting For STR"> <#if s.workflowId?exists> <#list s.queuedOwners as owner> <#if owner?matches("[MmAaEeTt]\\d{3}.*")> <@m.directoryLink owner/> <#elseif owner?matches("[K-Z][A-Z][A-Z].*[_].*")> <#list adminService.loadGroupMembersByName(owner) as member> <@m.directoryLink member/><!--by Group--> </#list> <#else> <@m.orgManager owner?if_exists/><!--by Org--> </#if> </#list> </#if> <#else> <#if s.ercCategory=="Input the STR Number"||s.ercCategory=="STR"||s.ercCategory=="MSTR"> STR NO:<a href="${ercService.strLink?if_exists}${s.strEnNo?if_exists}" target="_blank">${s.strEnNo?if_exists}</a> is not effective <#else> EN NO:<a href="${ercService.enLink?if_exists}${s.strEnNo?if_exists}" target="_blank">${s.strEnNo?if_exists}</a> is not effective </#if> </#if> </td> <td><#if s.submitDate?exists>${s.submitDate?datetime?if_exists}</#if></td> <td>${s.purpose?default('')}</td> </tr> </#list> </#if> </tbody>

这段代码是使用 FreeMarker 模板引擎生成 HTML 表格内容的一部分,主要功能是根据分页数据展示请求表单的信息。以下是代码的详细分析: --- ### 1. **条件判断与循环** ```html <#if (paginationSupport.items)?has_content> ``` 判断 `paginationSupport.items` 是否存在且非空,只有存在数据时才执行表格渲染。 ```html <#list paginationSupport.items?sort_by('caseNo') as s> ``` 对 `paginationSupport.item
recommend-type

op-drone:监控未平仓头寸的市场利器

标题中提到的“op-drone”很可能是指一个特定的监控系统或服务的名称,它被用来“持续监控市场中的未平仓头寸”。未平仓头寸是指在金融市场上尚未完成交易结算的买卖双方的持仓数量。监控未平仓头寸对于市场参与者来说至关重要,因为它可以提供有关市场流动性和投资者情绪的重要信息。 在深入探讨之前,需要了解几个基础概念: 1. 未平仓头寸:指交易者在期货、期权、外汇或其他衍生品市场上建立的但尚未平仓的头寸。这些头寸在到期前仍然具有价值,而且市场上的价格变动会对它们的总体价值产生影响。 2. 持续监控:这通常是指使用软件工具或服务不断跟踪和分析市场数据的过程。持续监控可帮助交易者或市场分析师及时捕捉市场的动态变化,并根据最新情况做出交易决策。 3. 市场监控系统:这类系统通常具备收集实时数据、分析市场趋势、识别异常交易行为等多种功能。它们对于投资者了解市场状况、进行风险管理以及制定交易策略至关重要。 从描述中可以推断出,op-drone是一个专门用于持续监控未平仓头寸的系统或服务。这种系统需要具备以下功能: 1. 数据收集:系统需要有能力实时收集金融市场中的数据,包括但不限于期货、期权、股票、债券等金融产品的交易信息。 2. 数据分析:通过算法或机器学习技术分析收集到的数据,识别市场趋势、投资者行为模式以及潜在风险。 3. 异常检测:能够识别出市场中的异常交易活动,比如未平仓头寸的急剧变化,这可能是市场重大变动的前兆。 4. 风险预警:系统应能向用户发出风险预警,告知用户潜在的市场风险,帮助他们进行风险管理。 5. 报告与可视化:提供详细的数据报告和可视化图表,帮助用户更直观地理解市场状况和未平仓头寸变化。 此外,虽然文件中未提供标签和具体的文件名称列表,但可以推测“op-drone-main”可能是系统中的一个核心组件或主程序的名称。这个组件可能是整个op-drone系统运行的基础,负责处理大部分的监控和分析功能。 综合以上信息,我们可以得出一个结论:op-drone是一个专门设计用于监控金融市场上未平仓头寸的系统或服务。它可能具备实时数据收集和分析、异常行为识别、风险预警以及报告和可视化展示等多种功能,从而帮助用户在复杂的市场环境中做出更加明智的决策。对于需要精确把握市场动态、进行风险管理的金融分析师、交易员、投资组合经理等专业人士来说,这样的系统是不可或缺的工具。
recommend-type

RustWeb服务部署与环境变量配置全解析

### Rust Web 服务部署与环境变量配置全解析 在 Rust 开发中,完成业务逻辑编写后,将应用部署到生产环境是关键的下一步。本文将深入探讨 Rust 应用部署过程中的重要环节,包括环境变量的配置、二进制文件的优化以及跨平台编译等内容。 #### 1. 认证与授权相关未覆盖内容 在认证和授权方面,有一些内容未详细涉及。例如,设置会话数据库来存储令牌,以便在数据泄露或用户有其他需求时使令牌失效。可以通过设置 Redis 实例,在生成每个令牌时,不仅将结果返回给客户端,还将其存储在 Redis 键值存储中。 另外,重置用户密码和创建刷新令牌也是重要的话题。重置用户密码可以通过创建一个
recommend-type

消灭病毒 源代码

要查找消灭病毒游戏的源代码,可通过以下几种常见途径获取: ### 开源代码平台 - **GitHub**:作为全球最大的开源代码托管平台,有开发者会将自己开发的消灭病毒游戏源代码分享到上面。在GitHub的搜索框输入“消灭病毒游戏”相关关键词,如“Virus Elimination Game” 、“消灭病毒 Unity”等,就能筛选出相关的代码仓库。有些仓库可能是完整的项目,包含游戏开发所需的全部代码和资源;有些则可能是部分功能的实现,需要进一步整合。 - **Gitee**:国内的开源代码托管平台,很多国内开发者会将自己的项目上传至此。同样使用相关关键词搜索,或许能找到符合需求的消灭病毒游