From d33a62c30ae82facf2bb002d96c985ac9c688f57 Mon Sep 17 00:00:00 2001 From: mairuiming Date: Fri, 27 Jun 2025 19:56:50 +0800 Subject: [PATCH] 1 --- src/App.tsx | 97 ++++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 49 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 53971b0..cb64fd4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -33,15 +33,28 @@ interface ProcessConfigItem { } // 常量定义 -const POS_TABLE_ID = 'tblubooNX1JQKg4l'; -const PROCESS_TABLE_ID = 'tbl9Uh2nqhIBvQTY'; +const POS_TABLE_NAME = "pos_订单基础信息明细"; // 替换为你的实际POS表名 +const PROCESS_TABLE_NAME = "订单流程表"; // 替换为你的实际流程配置表名 +let POS_TABLE_ID = ""; +let PROCESS_TABLE_ID = ""; + +async function initTableIds() { + const posTable = await bitable.base.getTableByName(POS_TABLE_NAME); + POS_TABLE_ID = posTable.id; + const processTable = await bitable.base.getTableByName(PROCESS_TABLE_NAME); + PROCESS_TABLE_ID = processTable.id; +} + +// 在应用初始化或需要用到表ID前调用 +initTableIds(); -const POS_LINK_FIELD_ID_IN_PROCESS_TABLE = 'fldoG0YGGB'; const PROCESS_NAME_FIELD_NAME = '流程名称'; const PROCESS_ORDER_FIELD_NAME = '流程顺序'; -const PROCESS_NODE_FIELD_ID = 'fld7uf58lq'; -const FIELD_ID_FIELD_ID = 'fldOqrKaDz'; +const POS_LINK_FIELD_NAME_IN_PROCESS_TABLE = 'POS表recordid'; +const PROCESS_NODE_FIELD_NAME = '流程节点'; +const FIELD_ID_FIELD_NAME = '字段ID'; + const PROCESS_NODE_EXPECT_TIME = '预计完成时间'; const PROCESS_NODE_ACTUAL_TIME = '实际完成时间'; @@ -463,7 +476,7 @@ export default function App() { return; } - const processTable = await bitable.base.getTableById(PROCESS_TABLE_ID); + const processTable = await bitable.base.getTableByName(PROCESS_TABLE_NAME); // 优化:批量获取所有字段元数据,减少API调用 const allFields = await processTable.getFieldMetaList(); @@ -471,27 +484,21 @@ export default function App() { setFieldMetadataCache(fieldMap); // 验证字段是否存在 - 使用优化后的字段映射 - const requiredFieldIds = [ - POS_LINK_FIELD_ID_IN_PROCESS_TABLE, - PROCESS_NODE_FIELD_ID, - FIELD_ID_FIELD_ID + const requiredFieldNames = [ + POS_LINK_FIELD_NAME_IN_PROCESS_TABLE, + PROCESS_NODE_FIELD_NAME, + FIELD_ID_FIELD_NAME, + PROCESS_NAME_FIELD_NAME, + PROCESS_ORDER_FIELD_NAME ]; - const requiredFieldNames = [PROCESS_NAME_FIELD_NAME, PROCESS_ORDER_FIELD_NAME]; - // 检查必需字段是否存在 const missingFields: string[] = []; - requiredFieldIds.forEach(id => { - if (!fieldMap.has(id)) { - missingFields.push(`字段ID: ${id}`); - } - }); requiredFieldNames.forEach(name => { const field = allFields.find(f => f.name === name); if (!field) { missingFields.push(`字段名: ${name}`); } }); - if (missingFields.length > 0) { const errorMsg = `订单流程表中缺少关键字段: ${missingFields.join(', ')}`; console.error(errorMsg); @@ -499,11 +506,9 @@ export default function App() { setProcessConfigLoading(false); return; } - // 使用更高效的分页获取记录 const allRecords: IRecord[] = []; let pageToken: string | undefined; - do { const response = await processTable.getRecords({ pageSize: 5000, // 最大页大小 @@ -512,55 +517,49 @@ export default function App() { allRecords.push(...response.records); pageToken = response.pageToken; } while (pageToken); - console.log(`Fetched ${allRecords.length} process config records`); - const allConfigs: ProcessConfigItem[] = []; - - // 优化:使用高效的字段访问方式处理记录 + // 获取字段对象 + const posLinkField = allFields.find(f => f.name === POS_LINK_FIELD_NAME_IN_PROCESS_TABLE); + const processNodeField = allFields.find(f => f.name === PROCESS_NODE_FIELD_NAME); + const fieldIdField = allFields.find(f => f.name === FIELD_ID_FIELD_NAME); for (const record of allRecords) { const fields = record.fields; const recordId = record.recordId; - - // 处理POS链接字段 - 优化文本提取逻辑 + // 处理POS链接字段 let posLinkText = ''; - const posLinkFieldValue = fields[POS_LINK_FIELD_ID_IN_PROCESS_TABLE]; + const posLinkFieldValue = fields[posLinkField?.id ?? '']; if (Array.isArray(posLinkFieldValue)) { posLinkText = (posLinkFieldValue[0] as IOpenSegment)?.text?.trim() || ''; } else if (typeof posLinkFieldValue === 'object' && posLinkFieldValue) { posLinkText = (posLinkFieldValue as IOpenSegment).text?.trim() || ''; } - // 处理流程名称字段 - 使用字段ID直接访问 const processNameField = allFields.find(f => f.name === PROCESS_NAME_FIELD_NAME); let processName = ''; if (processNameField) { const fieldValue = fields[processNameField.id]; - processName = Array.isArray(fieldValue) - ? (fieldValue[0] as IOpenSegment)?.text?.trim() || '' - : (fieldValue as IOpenSegment)?.text?.trim() || ''; + processName = Array.isArray(fieldValue) + ? (fieldValue[0] as IOpenSegment)?.text?.trim() || '' + : (fieldValue as IOpenSegment)?.text?.trim() || ''; } - // 处理顺序字段 const processOrderField = allFields.find(f => f.name === PROCESS_ORDER_FIELD_NAME); - const order = processOrderField - ? (fields[processOrderField.id] as number | undefined) || 0 - : 0; - + const order = processOrderField + ? (fields[processOrderField.id] as number | undefined) || 0 + : 0; // 处理流程节点字段 - const processNodeValue = fields[PROCESS_NODE_FIELD_ID] - ? (Array.isArray(fields[PROCESS_NODE_FIELD_ID]) - ? (fields[PROCESS_NODE_FIELD_ID][0] as IOpenSegment)?.text?.trim() || '' - : (fields[PROCESS_NODE_FIELD_ID] as IOpenSegment)?.text?.trim() || '') - : ''; - + const processNodeValue = fields[processNodeField?.id ?? ''] + ? (Array.isArray(fields[processNodeField.id]) + ? (fields[processNodeField.id][0] as IOpenSegment)?.text?.trim() || '' + : (fields[processNodeField.id] as IOpenSegment)?.text?.trim() || '') + : ''; // 处理时间字段ID字段 - const timeFieldId = fields[FIELD_ID_FIELD_ID] - ? (Array.isArray(fields[FIELD_ID_FIELD_ID]) - ? (fields[FIELD_ID_FIELD_ID][0] as IOpenSegment)?.text?.trim() || '' - : (fields[FIELD_ID_FIELD_ID] as IOpenSegment)?.text?.trim() || '') - : ''; - + const timeFieldId = fields[fieldIdField?.id ?? ''] + ? (Array.isArray(fields[fieldIdField.id]) + ? (fields[fieldIdField.id][0] as IOpenSegment)?.text?.trim() || '' + : (fields[fieldIdField.id] as IOpenSegment)?.text?.trim() || '') + : ''; allConfigs.push({ processName, order, @@ -691,7 +690,7 @@ export default function App() { console.log('Loading process steps from cached configs...'); try { - const posTable = await bitable.base.getTableById(POS_TABLE_ID); + const posTable = await bitable.base.getTableByName(POS_TABLE_NAME); // 从缓存中快速筛选当前记录的配置 const filteredConfigs = configsByPosLink.get(currentPosRecordId) ||