創(chuàng)建chatflow時根據(jù)緩存自動初始化輸入?yún)?shù)和打開開始節(jié)點的參數(shù)編輯面板時,系統(tǒng)會自動初始化參數(shù)并添加缺失的必要參數(shù)
文件路徑:app\components\workflow\nodes\start\use-config.ts
開始節(jié)點參數(shù)自動初始化功能總結(jié)
功能概述
實現(xiàn)了開始節(jié)點參數(shù)編輯面板打開時的自動初始化功能,包括兩個核心功能:
- 參數(shù)值初始化 :自動從localStorage獲取最新的userInfoParams并更新參數(shù)值
- 自動添加初始化參數(shù) :自動檢查并添加缺失的必要系統(tǒng)參數(shù)
核心實現(xiàn)代碼
1. 工具函數(shù)
/**
* 從localStorage獲取用戶信息參數(shù)
* @returns 用戶信息參數(shù)對象
*/
const getUserInfoParams = () => {
try {
const userInfoParamsStr = localStorage.getItem('userInfoParams')
return userInfoParamsStr ? JSON.parse
(userInfoParamsStr) : {}
} catch (error) {
console.error('獲取userInfoParams失敗:', error)
return {}
}
}
/**
* 需要自動添加的初始化參數(shù)配置
* 這些參數(shù)會在打開開始節(jié)點參數(shù)編輯面板時自動添加
*/
const requiredParams = [
{ key: 'CurrentDatabaseId', label: '當前賬號id' },
{ key: 'DeptId', label: '當前部門' },
{ key: 'OptId', label: '當前操作員' },
{ key: 'PositionId', label: '當前職位' },
{ key: 'keyCode', label: '公司id' },
{ key: 'workSpaceName', label: '當前賬號名' },
{ key: 'ServiceIP', label: '服務(wù)IP地址' },
]
2. 參數(shù)值初始化邏輯
/**
* 初始化參數(shù):當打開參數(shù)編輯面板時,從localStorage獲取最新的
userInfoParams并更新參數(shù)值
* 功能:確保參數(shù)值始終與localStorage中的最新數(shù)據(jù)保持一致
*/
useEffect(() => {
// 從localStorage獲取最新的用戶信息參數(shù)
const userInfoParams = getUserInfoParams()
// 檢查是否需要更新參數(shù)值
const needUpdate = inputs.variables.some((varItem) => {
const paramKey = varItem.variable
const param = requiredParams.find(p => p.key === paramKey)
if (param) {
const currentValue = varItem.value
const newValue = userInfoParams[paramKey] || ''
return currentValue !== newValue
}
return false
})
// 如果需要更新參數(shù)值
if (needUpdate) {
const updatedVariables = inputs.variables.map
((varItem) => {
const paramKey = varItem.variable
const param = requiredParams.find(p => p.key === paramKey)
if (param) {
const newValue = userInfoParams[paramKey] || ''
return {
...varItem,
value: newValue,
default: newValue,
}
}
return varItem
})
// 使用immer更新狀態(tài)
const newInputs = produce(inputs, (draft: any) => {
draft.variables = updatedVariables
})
// 更新節(jié)點輸入數(shù)據(jù)
setInputs(newInputs)
}
}, [inputs, setInputs])
3. 自動添加初始化參數(shù)邏輯
/**
* 自動增加初始化輸入?yún)?shù):當打開參數(shù)編輯面板時,自動添加必要的初始化
參數(shù)
* 功能:確保所有必要的系統(tǒng)參數(shù)都存在于開始節(jié)點中
*/
useEffect(() => {
// 如果節(jié)點處于只讀狀態(tài),不執(zhí)行自動添加操作
if (readOnly) {
return
}
// 從localStorage獲取最新的用戶信息參數(shù)
const userInfoParams = getUserInfoParams()
// 獲取現(xiàn)有的變量鍵名列表
const existingVariableKeys = inputs.variables.map(v => v.variable)
// 檢查是否需要添加新的初始化參數(shù)
const variablesToAdd = requiredParams
// 過濾出尚未添加的參數(shù)
.filter(param => !existingVariableKeys.includes(param.key))
// 為每個需要添加的參數(shù)創(chuàng)建配置對象
.map(param => {
const paramValue = userInfoParams[param.key] || ''
return {
type: 'textInput' as any, // 輸入類型
label: param.label, // 參數(shù)標簽
variable: param.key, // 參數(shù)變量名
required: false, // 非必填
hide: true, // 隱藏輸入字段
value: paramValue, // 參數(shù)值
default: paramValue, // 默認值
custom: true, // 自定義標識
}
})
// 如果有需要添加的參數(shù)
if (variablesToAdd.length > 0) {
// 創(chuàng)建新的變量列表
const newVariables = [...inputs.variables, ...variablesToAdd]
// 使用immer更新狀態(tài)
const newInputs = produce(inputs, (draft: any) => {
draft.variables = newVariables
})
// 更新節(jié)點輸入數(shù)據(jù)
setInputs(newInputs)
}
}, [inputs, readOnly, setInputs])
技術(shù)實現(xiàn)特點
- 數(shù)據(jù)來源 :從localStorage獲取userInfoParams作為參數(shù)的默認值
- 狀態(tài)管理 :使用immer庫確保狀態(tài)更新的不可變性
- 響應(yīng)式更新 :使用useEffect鉤子監(jiān)聽組件掛載和參數(shù)變化
- 條件執(zhí)行 :只有在非只讀狀態(tài)下才執(zhí)行自動添加參數(shù)操作
- 性能優(yōu)化 :只在需要時才更新狀態(tài),避免不必要的重渲染
- 錯誤處理 :在獲取localStorage數(shù)據(jù)時添加了錯誤處理,確保功能的健壯性
工作流程
- 打開參數(shù)編輯面板 :用戶打開開始節(jié)點的參數(shù)編輯面板
- 參數(shù)值初始化 :系統(tǒng)自動從localStorage獲取最新的userInfoParams
- 更新參數(shù)值 :檢查現(xiàn)有參數(shù)值是否與最新數(shù)據(jù)一致,如有變化則更新
- 自動添加參數(shù) :檢查是否缺少必要的初始化參數(shù),如有缺失則自動添加
- 完成初始化 :用戶看到的是已經(jīng)初始化完成的參數(shù)列表,包含所有必要的系統(tǒng)參數(shù)和最新的參數(shù)值
功能優(yōu)勢
- 簡化用戶操作 :用戶不需要手動添加必要的系統(tǒng)參數(shù)
- 保持數(shù)據(jù)一致性 :參數(shù)值始終與localStorage中的最新數(shù)據(jù)保持一致
- 提高配置效率 :自動完成參數(shù)初始化,減少用戶配置時間
- 確保配置完整性 :確保所有必要的系統(tǒng)參數(shù)都存在,避免配置遺漏
- 提升用戶體驗 :用戶打開參數(shù)編輯面板時看到的是已經(jīng)準備好的參數(shù)列表
適用場景
- 新創(chuàng)建的工作流 :自動添加必要的系統(tǒng)參數(shù)
- 現(xiàn)有工作流 :更新參數(shù)值為最新的用戶信息
- 參數(shù)編輯 :確保參數(shù)配置的完整性和準確性
此功能實現(xiàn)了與自定義工具類似的初始化邏輯,但針對開始節(jié)點的特點進行了專門優(yōu)化,確保工作流配置的完整性和準確性。