ERP/frontend/js/components/shipment-audit.js

168 lines
7.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Router.register('/shipments/audit', async () => {
// 获取当前用户信息
let userRole = null;
try {
const userRes = await fetch('/api/auth/me', { credentials: 'include' });
const userData = await userRes.json();
userRole = userData.role;
} catch (e) {
console.error('Failed to get user info:', e);
}
setTimeout(async () => {
const queryTypeSelect = document.getElementById('query-type');
const queryBtn = document.getElementById('query-btn');
const queryInput = document.getElementById('query-input');
const inputLabel = document.getElementById('input-label');
const resultDiv = document.getElementById('query-result');
const platformSelect = document.getElementById('platform-select');
// 切换查询类型时更新输入框提示
queryTypeSelect?.addEventListener('change', (e) => {
const queryType = e.target.value;
if (queryType === 'mac') {
inputLabel.textContent = '输入 MAC 地址';
queryInput.placeholder = '可输入带或不带冒号的MAC地址001122AABBCC 或 00:11:22:AA:BB:CC';
} else if (queryType === 'batch') {
inputLabel.textContent = '输入批次号';
queryInput.placeholder = '输入批次号';
}
resultDiv.innerHTML = '';
});
const performQuery = async () => {
const queryType = queryTypeSelect?.value || 'mac';
let queryValue = queryInput?.value?.trim();
const platform = platformSelect?.value || 'pdd';
if (!queryValue) {
resultDiv.innerHTML = `<div class="error">请输入${queryType === 'mac' ? 'MAC 地址' : '批次号'}</div>`;
return;
}
// 如果是MAC地址查询自动格式化添加冒号
if (queryType === 'mac') {
// 移除所有非十六进制字符
queryValue = queryValue.replace(/[^a-fA-F0-9]/g, '');
// 如果是12位十六进制自动格式化为 XX:XX:XX:XX:XX:XX
if (queryValue.length === 12) {
queryValue = queryValue.match(/.{2}/g).join(':').toUpperCase();
}
// 如果是其他长度,尝试格式化
else if (queryValue.length > 0) {
// 统一转为大写
queryValue = queryValue.toUpperCase();
// 如果已经包含冒号,保持原样
if (!queryValue.includes(':')) {
// 尝试每两个字符添加冒号
queryValue = queryValue.match(/.{2}/g)?.join(':') || queryValue;
}
}
}
try {
resultDiv.innerHTML = '<div>查询中...</div>';
// 根据选择的平台查询审计数据
const res = await fetch(`/api/audit/${platform}/search?${queryType}=${encodeURIComponent(queryValue)}`, {
credentials: 'include'
});
const data = await res.json();
if (data.found && data.records && data.records.length > 0) {
const recordsHtml = data.records.map((record, index) => `
<div style="padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:6px;margin-bottom:8px">
<div style="font-weight:600;margin-bottom:8px;color:var(--primary)">记录 ${index + 1}</div>
<div class="result-item"><span class="label">MAC地址:</span> ${record.mac || '未知'}</div>
<div class="result-item"><span class="label">批次号:</span> ${record.batch || '未知'}</div>
<div class="result-item"><span class="label">审计时间:</span> ${record.ts_cn || '未知'}</div>
<div class="result-item"><span class="label">备注:</span> ${record.note || '无'}</div>
</div>
`).join('');
resultDiv.innerHTML = `
<div class="result-card success">
<div class="result-title">✓ 找到 ${data.records.length} 条审计记录</div>
<div class="result-item"><span class="label">查询平台:</span> <span class="badge">${platform.toUpperCase()}</span></div>
<div class="result-item"><span class="label">查询类型:</span> ${queryType === 'mac' ? 'MAC地址' : '批次号'}</div>
<div class="result-item"><span class="label">查询值:</span> ${queryValue}</div>
${queryType === 'mac' && queryInput?.value?.trim() !== queryValue ?
`<div class="result-item"><span class="label">原始输入:</span> ${queryInput?.value?.trim()}</div>` : ''
}
<div style="margin-top:16px;max-height:60vh;overflow-y:auto;padding-right:8px;border:1px solid var(--border);border-radius:6px;background:var(--bg)">
${recordsHtml}
</div>
</div>
`;
} else {
resultDiv.innerHTML = `
<div class="result-card error">
<div class="result-title">✗ 未找到审计记录</div>
<div class="result-item">查询平台: ${platform.toUpperCase()}</div>
<div class="result-item">查询类型: ${queryType === 'mac' ? 'MAC地址' : '批次号'}</div>
<div class="result-item">查询值: ${queryValue}</div>
${queryType === 'mac' && queryInput?.value?.trim() !== queryValue ?
`<div class="result-item">原始输入: ${queryInput?.value?.trim()}</div>` : ''
}
<div class="result-item">${data.message || '该查询值没有对应的审计记录'}</div>
</div>
`;
}
} catch (e) {
resultDiv.innerHTML = `<div class="error">查询失败:${e.message}</div>`;
}
};
queryBtn?.addEventListener('click', performQuery);
queryInput?.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
performQuery();
}
});
}, 0);
return `<div class="card">
<div style="font-weight:600;margin-bottom:16px">审计查询</div>
<div style="margin-bottom:16px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:8px">
<div style="color:var(--text-2);font-size:14px">
<strong>说明:</strong>查询 Redis 中存储的审计时间记录,支持通过 MAC 地址或批次号查询。
</div>
</div>
<div style="margin-bottom:16px">
<div class="field">
<label>选择平台</label>
<select id="platform-select" class="input">
<option value="pdd">拼多多</option>
<option value="yt">圆通</option>
<option value="tx">兔喜</option>
<option value="mt">美团</option>
</select>
</div>
<div class="field">
<label>查询类型</label>
<select id="query-type" class="input">
<option value="mac">按 MAC 地址查询</option>
<option value="batch">按批次号查询</option>
</select>
</div>
<div class="field">
<label id="input-label">输入 MAC 地址</label>
<input
id="query-input"
class="input"
placeholder="可输入带或不带冒号的MAC地址001122AABBCC 或 00:11:22:AA:BB:CC"
style="font-family: monospace"
/>
</div>
<button class="btn btn-primary" id="query-btn">查询</button>
</div>
<div id="query-result"></div>
</div>`;
});