yiwaima / ERP 供应商搜索工具

ERP 供应商搜索工具脚本信息

基本信息

属性 说明
脚本名称 ERP 供应商搜索工具
作者 yiwaima
版本 2.1
许可证 MIT
适用网站 https://www.erp321.com/app/scm/purchaseout/purchaseout.aspx
脚本类型 Tampermonkey 用户脚本
OpenUserJS地址 https://openuserjs.org/scripts/yiwaima/ERP_供应商搜索工具

功能描述

该脚本是一个为ERP系统设计的供应商搜索工具,提供了以下核心功能:

1. 浮动搜索窗口

  • 在ERP页面右上角创建一个可拖拽的搜索窗口
  • 窗口宽度固定,支持折叠/展开状态切换
  • 提供平滑的过渡动画效果

2. 窗口交互功能

  • 拖拽定位:通过标题栏可以自由拖动窗口到任意位置
  • 边缘吸附:当窗口靠近屏幕边缘时自动吸附并折叠
  • 自动折叠:鼠标离开窗口后自动检查是否需要吸附到边缘
  • 状态记忆:分别记忆窗口展开和折叠状态的位置,下次使用时恢复

3. 供应商搜索功能

  • 提供搜索输入框,支持输入供应商相关信息
  • 点击搜索按钮后,通过ERP API获取供应商数据
  • 自动提取供应商名称和ID
  • 将供应商名称自动复制到剪贴板

4. 供应商备注获取

  • 自动获取供应商的备注信息
  • 如果有备注信息,以红色高亮显示在界面上
  • 无备注时显示"无特殊要求"

5. 表格复制按钮

  • 为ERP表格添加复制按钮,支持一键复制"供应商退货单号."格式的文本
  • 按钮样式与现有UI保持一致,使用文字"复制"而非emoji
  • 支持多种表格结构(传统table和div结构表格)

6. 自动选择表格行

  • 搜索完成后自动选中表格第一行数据
  • 自动勾选目标行的复选框
  • 智能识别数据行,排除操作按钮行和表头
  • 支持多种表格结构

技术实现

1. 界面构建

// 创建搜索容器
const searchContainer = document.createElement('div');
searchContainer.style.cssText = `
    position: fixed;
    top: 10px;
    right: auto;
    z-index: 9999;
    display: flex;
    flex-direction: column;
    gap: 0;
    background: white;
    padding: 0;
    border: 2px solid #4A90E2;
    border-radius: 8px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    user-select: none;
    font-family: Arial, sans-serif;
`;

2. 拖拽实现

dragHeader.addEventListener('mousedown', (e) => {
    isDragging = true;
    startX = e.clientX - searchContainer.offsetLeft;
    startY = e.clientY - searchContainer.offsetTop;
    searchContainer.style.zIndex = '10000'; // 拖动时提高层级
    
    // 如果窗口处于折叠状态,先展开
    if (isCollapsed) {
        expandWindow();
    }
});

3. 边缘吸附检查

function checkEdgeSnap() {
    const threshold = 10; // 距离边缘的阈值
    const currentLeft = parseInt(searchContainer.style.left);
    const currentTop = parseInt(searchContainer.style.top);
    
    // 保存原始位置
    originalPosition = { left: searchContainer.style.left, top: searchContainer.style.top };
    openStatePosition = { left: searchContainer.style.left, top: searchContainer.style.top };
    
    // 检查是否靠近左侧边缘
    if (currentLeft <= threshold) {
        collapseWindow('left');
    }
    // 检查是否靠近右侧边缘
    else if (currentLeft >= window.innerWidth - searchContainer.offsetWidth - threshold) {
        collapseWindow('right');
    }
}

4. 数据持久化

// 保存位置到本地存储
const position = {
    left: searchContainer.style.left,
    top: searchContainer.style.top
};
localStorage.setItem('erpSearchPosition', JSON.stringify(position));

// 保存折叠状态
const collapseState = {
    isCollapsed: true,
    side: edge,
    position: collapseStatePosition
};
localStorage.setItem('erpSearchCollapseState', JSON.stringify(collapseState));

5. API调用

// 发送供应商搜索请求
const response = await fetch(apiUrl, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    },
    body: JSON.stringify(requestData),
    credentials: 'include' // 包含cookie
});

使用说明

  1. 激活脚本:在Tampermonkey中安装并启用脚本
  2. 显示窗口:访问ERP相关页面时,窗口会自动出现在右上角
  3. 搜索供应商
    • 点击窗口展开(或鼠标悬停自动展开)
    • 在搜索框中输入供应商信息
    • 点击"搜索"按钮
    • 供应商名称会自动复制到剪贴板
  4. 查看备注:搜索后自动显示供应商备注信息(如有)
  5. 窗口管理
    • 拖拽标题栏移动窗口位置
    • 鼠标离开后自动折叠到边缘
    • 再次鼠标悬停可展开窗口

注意事项

  • 脚本需要访问ERP系统的API,确保已登录ERP系统
  • 自动复制功能可能需要浏览器的剪贴板权限
  • 窗口位置和状态会保存在浏览器的localStorage中
  • 如遇功能异常,请检查浏览器控制台是否有错误信息

更新日志

  • 版本 2.3:修复供应商名称处理

    • 修复正则表达式,支持中英文括号
    • 调整正则表达式为:/[()()][^()()]*新[^()()]*[()()]/gi
    • 确保正确处理包含中文括号的供应商名称
    • 更新脚本版本号和描述
  • 版本 2.2:优化复制按钮功能

    • 删除退货进程中的"查看"div元素
    • 处理供应商名称,删除括号及括号内的"新"字(大小写都算)
    • 将处理后的供应商名称与退货单号连接
    • 优化复制按钮显示,仅保留复制按钮
    • 更新脚本版本号和描述
  • 版本 2.1:OpenUserJS平台适配

    • 更新脚本元数据,适配OpenUserJS平台要求
    • 统一作者名称为yiwaima
    • 添加OpenUserJS相关URL配置
    • 优化脚本描述和功能说明
  • 版本 2.0:增强功能版本

    • 添加表格复制按钮功能,支持一键复制退货单号
    • 优化按钮样式,与现有UI保持一致
    • 添加自动选择表格行和勾选复选框功能
    • 支持多种表格结构
    • 修复JSON解析和数据提取问题
  • 版本 1.0:核心功能完善

    • 实现浮动搜索窗口和拖拽功能
    • 添加边缘吸附和自动折叠功能
    • 实现供应商搜索和备注获取
    • 支持状态记忆功能
  • 版本 0.1:初始版本发布

    • 实现基本的搜索功能和窗口交互
    • 添加边缘吸附和自动折叠功能
    • 支持供应商备注获取和自动复制功能
    • 实现位置记忆功能
    • 添加MIT许可证声明