#ifndef PROCEDUREDATA_H #define PROCEDUREDATA_H #include #include #include #include #include #include #include // ===================================================== // 基本枚舉類型 // ===================================================== // 步驟類型 enum class StepType { Manual, // 手動步驟 Automatic // 自動步驟 }; // 步驟狀態 enum class StepStatus { Pending, // 待執行 InProgress, // 執行中 Passed, // 已通過 Failed, // 未通過 Skipped, // 已跳過 Confirmed // 已確認(手動) }; // 活動類型 enum class ActivityType { TEST_TASK_GROUP, // 測試任務組 RESULT_DISPLAY // 結果顯示 }; // 活動步驟 struct ActivityStep { ActivityType type = ActivityType::TEST_TASK_GROUP; QString ref; // 引用ID QString name; // 顯示名稱 }; // ===================================================== // 表格相關結構 // ===================================================== // 字段定義 struct FieldDefinition { QString id; QString name; QString label; QString type; // numeric, text, selection, boolean, datetime, calculated QVariant defaultValue; QStringList options; // 用於 selection 類型 QString formula; // 用於 calculated 類型 QVariantMap validationRules; bool isRequired = false; bool isReadOnly = false; bool editable = false; bool visible = true; QString unit; QString description; QString alignment; int width = 100; int decimals = 2; bool uploadImmediately = false; QVariantMap layoutConfig; }; // 靜態單元格 struct StaticCell { int row = 0; int column = 0; QString field; // 字段ID(用於form類型表格) QVariant value; // 靜態值 QString content; // 靜態文本內容 QString style; }; // 表格定義 struct TableDefinition { QString tableId; QString id; QString name; QString description; QString tableType; // grid, form, series int rowCount = 0; int columnCount = 0; QVariantMap layoutConfig; bool isShared = false; QString uploadStrategy; // immediate, grouped, byRow, onComplete QList uploadGroups; QList columnHeaders; // 用於grid類型表格 QList> rowHeaders; // 用於grid類型表格 (id, name) QList fields; // 用於form和series類型表格 QList staticCells; // 靜態內容 }; // ===================================================== // 測試動作相關結構 // ===================================================== // 字段選擇器 struct FieldSelector { QString tableRef; int row = -1; int column = -1; QString fieldName; QStringList fields; // 用於form類型表格 QList> cells; // 用於grid類型表格 (row, column) bool ignore = false; }; // 測試動作 struct TestAction { QString actionId; QString id; QString name; QString actionType; QString functionName; QString document; // HTML格式的說明文檔 QString mode; // manual 或 auto QString sequence; QString functionType; // RESISTANCE_4WIRE, VOLTAGE_V, DATA_ACQUISITION 等 QString channel; // input1, input2, output1, output2 QVariantMap params; // 函數參數 QVariant functionParameters; QVariantMap metadata; QMap inputs; QMap outputs; QList dataFields; QVariantMap validationCriteria; QString uploadStrategy; QStringList uploadFields; int timeout = 30000; int retryCount = 0; // 運行時狀態 bool isCompleted = false; bool isWaitingConfirm = false; QVariantList results; }; // 測試活動組(階段) struct TestActivityGroup { QString groupId; QString id; QString name; QString description; QString document; QString skipCondition; QVariantMap metadata; QStringList tableRefs; QList actions; // 運行時狀態 bool isCompleted = false; bool isActionsParsed = false; }; // 測試任務組 struct TestTaskGroup { QString taskGroupId; QString id; QString name; QString description; QString executionMode; int loopCount = 1; QVariantMap metadata; QStringList tableRefs; QList stages; // 運行時狀態 bool isCompleted = false; bool isParsed = false; }; // 結果顯示 struct ResultDisplay { QString displayId; QString id; QString name; QString displayType; QString document; QString tableRef; QVariantMap passCondition; QStringList tableRefs; }; // ===================================================== // 程序配置結構 // ===================================================== struct ProcedureConfig { QString procedureId; QString procedureName; QString version; QString description; QString author; QString document; QVariantMap metadata; // 活動序列 (旧格式,用于 ProcedureEngine) QList activitySequence; // 活動序列 (新格式,stores QVariant of TestTaskGroup or ResultDisplay,用于新解析器) QList activityVariants; // 定義存儲 QMap testTaskGroups; QMap testActivityGroups; QMap testActions; QMap resultDisplays; QMap tables; // 舊版兼容 QList taskGroups; }; // ===================================================== // 舊版兼容結構(用於ProcedureManager) // ===================================================== // 表格字段定義(舊版) struct TableField { QString id; QString name; QString type; // numeric, text, boolean QString unit; bool isRequired = false; bool isHighlighted = false; }; // 表格數據(舊版) struct TableData { QString id; QString name; QString description; QVector columns; QVector rows; }; // 步驟定義(舊版) struct StepData { QString id; QString content; StepType type = StepType::Manual; StepStatus status = StepStatus::Pending; QStringList tableRefs; QStringList highlightFields; QString result; QDateTime executedAt; QString executedBy; QString cancelReason; }; // 任務組定義(舊版) struct TaskGroup { QString id; QString name; QVector steps; }; // 程序定義(舊版) struct ProcedureData { QString id; QString name; QString version; QString description; QVector taskGroups; QVector tables; QString workOrderId; int completedSteps = 0; int totalSteps = 0; }; // 程序摘要(用於列表顯示) struct ProcedureSummary { QString id; QString name; QString version; QString description; QString filePath; }; // Qt Meta-Type Declarations for QVariant support Q_DECLARE_METATYPE(FieldDefinition) Q_DECLARE_METATYPE(StaticCell) Q_DECLARE_METATYPE(TableDefinition) Q_DECLARE_METATYPE(FieldSelector) Q_DECLARE_METATYPE(TestAction) Q_DECLARE_METATYPE(TestActivityGroup) Q_DECLARE_METATYPE(TestTaskGroup) Q_DECLARE_METATYPE(ResultDisplay) Q_DECLARE_METATYPE(ProcedureConfig) Q_DECLARE_METATYPE(ActivityStep) #endif // PROCEDUREDATA_H