自動初始化輸入?yún)?shù)并自動更新

創(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ù)編輯面板打開時的自動初始化功能,包括兩個核心功能:

  1. 參數(shù)值初始化 :自動從localStorage獲取最新的userInfoParams并更新參數(shù)值
  2. 自動添加初始化參數(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)特點

  1. 數(shù)據(jù)來源 :從localStorage獲取userInfoParams作為參數(shù)的默認值
  2. 狀態(tài)管理 :使用immer庫確保狀態(tài)更新的不可變性
  3. 響應(yīng)式更新 :使用useEffect鉤子監(jiān)聽組件掛載和參數(shù)變化
  4. 條件執(zhí)行 :只有在非只讀狀態(tài)下才執(zhí)行自動添加參數(shù)操作
  5. 性能優(yōu)化 :只在需要時才更新狀態(tài),避免不必要的重渲染
  6. 錯誤處理 :在獲取localStorage數(shù)據(jù)時添加了錯誤處理,確保功能的健壯性

工作流程

  1. 打開參數(shù)編輯面板 :用戶打開開始節(jié)點的參數(shù)編輯面板
  2. 參數(shù)值初始化 :系統(tǒng)自動從localStorage獲取最新的userInfoParams
  3. 更新參數(shù)值 :檢查現(xiàn)有參數(shù)值是否與最新數(shù)據(jù)一致,如有變化則更新
  4. 自動添加參數(shù) :檢查是否缺少必要的初始化參數(shù),如有缺失則自動添加
  5. 完成初始化 :用戶看到的是已經(jīng)初始化完成的參數(shù)列表,包含所有必要的系統(tǒng)參數(shù)和最新的參數(shù)值

功能優(yōu)勢

  1. 簡化用戶操作 :用戶不需要手動添加必要的系統(tǒng)參數(shù)
  2. 保持數(shù)據(jù)一致性 :參數(shù)值始終與localStorage中的最新數(shù)據(jù)保持一致
  3. 提高配置效率 :自動完成參數(shù)初始化,減少用戶配置時間
  4. 確保配置完整性 :確保所有必要的系統(tǒng)參數(shù)都存在,避免配置遺漏
  5. 提升用戶體驗 :用戶打開參數(shù)編輯面板時看到的是已經(jīng)準備好的參數(shù)列表

適用場景

  • 新創(chuàng)建的工作流 :自動添加必要的系統(tǒng)參數(shù)
  • 現(xiàn)有工作流 :更新參數(shù)值為最新的用戶信息
  • 參數(shù)編輯 :確保參數(shù)配置的完整性和準確性
    此功能實現(xiàn)了與自定義工具類似的初始化邏輯,但針對開始節(jié)點的特點進行了專門優(yōu)化,確保工作流配置的完整性和準確性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容