execl问题修复

This commit is contained in:
andy
2026-09-10 17:30:27 +08:00
parent be7d765018
commit 07b23fce9e
18 changed files with 287 additions and 27 deletions

View File

@@ -11,9 +11,13 @@ Chrome Manifest V3 扩展,在用户已登录的 LTJT ERP 页面内执行经过
## 当前版本
当前源码版本为 `0.5.172`。版本化 ZIP、文件哈希和 Skill/DOCX 基线见 [`../../dist/release-manifest.json`](../../dist/release-manifest.json)。旧版本实现流水已冻结在 [`../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md`](../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md)。
当前源码版本为 `0.5.173`。版本化 ZIP、文件哈希和 Skill/DOCX 基线见 [`../../dist/release-manifest.json`](../../dist/release-manifest.json)。旧版本实现流水已冻结在 [`../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md`](../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md)。
0.5.172 当前重点:
0.5.173 当前重点:
- 名单 TSV 在派发校验、领队提取和原生名单合并时保留末尾空列的制表符,只统一换行并移除首尾空行。最后一条电话或备注为空时仍按完整 13 列处理;真正少列、多列及领队不一致仍阻断。本次需同步部署服务端的统一 operation 校验修复,不涉及数据库变更。
继续保留 0.5.172 的酒店门槛修正:
- 按维护方要求,将酒店新增 `DoInfo_jiudian` 的最少可序列化字段数从 195 调整为 150,恢复原有页面预检流程。154 字段页面可以通过数量检查;关键字段、loading、稳定 1 秒、资源、空槽、财务状态、归属和保存后回查检查保持原样。酒店修改/清空仍为 150,其他业务阈值不变。低于 150 的页面仍会阻断;真实 ERP 验收由部署方完成。

View File

@@ -6403,7 +6403,7 @@
}
window.LTJTOrderAssistant = {
version: '0.5.172',
version: '0.5.173',
resolveNativeListSearchValues,
lookupKeywordMatchesText,
inspectLifecycleSearchCriteria: lifecycleSearchCriteria,

View File

@@ -2609,7 +2609,8 @@
}
function buildPassengerTsv(value = {}) {
if (typeof value.text === 'string' && value.text.trim()) return value.text.trim().replace(/\r\n?/g, '\n');
// Keep trailing tabs: they encode empty cells in the required 13-column roster.
if (typeof value.text === 'string' && value.text.trim()) return value.text.replace(/\r\n?/g, '\n').replace(/^\n+|\n+$/g, '');
const rows = Array.isArray(value.rows) ? value.rows : [];
if (!rows.length) return '';
return [PASSENGER_HEADERS.join('\t'), ...rows.map((row) => PASSENGER_HEADERS.map((header) => passengerCell(row, header)).join('\t'))].join('\n');

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "联泰下单助手",
"version": "0.5.172",
"version": "0.5.173",
"description": "在已登录 LTJT ERP 页面内规划并受控执行联泰 ERP 业务操作。",
"permissions": [
"activeTab",

View File

@@ -457,9 +457,14 @@
return '';
}
function normalizePassengerTsvText(text) {
// Tabs represent columns, including empty final fields; trim only boundary newlines.
return String(text || '').replace(/\r\n?/g, '\n').replace(/^\n+|\n+$/g, '');
}
function buildPassengerTsv(passengerList = {}) {
if (typeof passengerList.text === 'string' && passengerList.text.trim()) {
return passengerList.text.trim().replace(/\r\n?/g, '\n');
return normalizePassengerTsvText(passengerList.text);
}
const rows = Array.isArray(passengerList.rows) ? passengerList.rows : [];
if (!rows.length) return '';
@@ -470,7 +475,7 @@
}
function passengerLeaderFromTsv(text) {
const lines = String(text || '').trim().replace(/\r\n?/g, '\n').split('\n').filter((line) => line.length > 0);
const lines = normalizePassengerTsvText(text).split('\n').filter((line) => line.length > 0);
const headers = String(lines[0] || '').split('\t').map((header) => header.trim());
if (headers.length !== PASSENGER_HEADERS.length
|| headers.some((header, index) => header !== PASSENGER_HEADERS[index])) {
@@ -1110,7 +1115,7 @@
blockers.push('data.passenger_list.text 必须包含本次提供的 13 列名单 TSV。');
return;
}
const lines = value.text.trim().replace(/\r\n?/g, '\n').split('\n').filter((line) => line.length > 0);
const lines = normalizePassengerTsvText(value.text).split('\n').filter((line) => line.length > 0);
const headers = String(lines[0] || '').split('\t');
if (headers.length !== PASSENGER_HEADERS.length || headers.some((header, index) => header.trim() !== PASSENGER_HEADERS[index])) blockers.push('名单 TSV 必须使用规定的 13 列表头和顺序。');
if (lines.length - 1 !== value.row_count) blockers.push('data.passenger_list.row_count 与 TSV 数据行数不一致。');

View File

@@ -944,7 +944,7 @@
window.LTJTOrderAssistant = {
...(window.LTJTOrderAssistant || {}),
version: '0.5.172',
version: '0.5.173',
openTeamBatchForm,
pingTeamBatchFrame,
preflightTeamBatchNative,