import { sendCmd, syncSendCmd } from 'apis/system' import { cloneDeep } from 'lodash' import { defineStore } from 'pinia' import { ref, watch } from 'vue' import { FtMessage } from '@/libs/message' // 常量定义 const LOG_ITEMS = Array.from({ length: 12 }, (_, i) => ({ value: i + 1, name: `${i + 1} Log`, })) const PRESSURE_TYPES = [ { name: '常压', value: 'constantPressure' }, { name: '正压', value: 'positivePressure' }, { name: '负压', value: 'negativePressure' }, ] // 默认配方函数 // const createDefaultFormulaInfo = (): Formula.FormulaItem => ({ // continued_gs: 200, // continued_humi: 60, // continued_satur: 60, // injection_pump_speed: 10, // loglevel: 6, // max_humidity: 90, // pre_heat_time_s: 120, // proportional_valve_default_value: 10, // stoped_gs: 300, // stoped_humi: 85, // stoped_satur: 85, // dvalue_correct_coefficient: 0 // name: '默认配方', // }) // 清空配方函数 // const createResetFormulaInfo = (): Formula.FormulaItem => ({ // continued_gs: '', // continued_humi: '', // continued_satur: '', // injection_pump_speed: '', // loglevel: '', // max_humidity: '', // pre_heat_time_s: '', // proportional_valve_default_value: '', // stoped_gs: '', // stoped_humi: '', // stoped_satur: '', // name: '', // }) export const useFormulaStore = defineStore('formula', () => { // 状态定义 const logEnums = LOG_ITEMS const pressurList = PRESSURE_TYPES const logLevelOptions = ref([]) const defaultFormulaInfo = ref(null) // const resetFormulaInfo = ref(createResetFormulaInfo()) const pressurOptionList = ref(['10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%']) const currentSelectedFormulaInfo = ref(cloneDeep(defaultFormulaInfo.value)) // 当前列表选中的配方信息 const selectedFormulaInfo = ref(cloneDeep(defaultFormulaInfo.value)) // 选中执行的配方信息 const formulaConfigList = ref([]) const formulaList = ref([]) const loglevel = ref('1') const flip = ref(true) const currentSelectedIndex = ref(null) // 左侧列表选中值 从0开始 // 标签单位映射表,用于显示各参数的单位 const labelUnitMap: Record = { injection_pump_speed: 'g/min', continued_gs: 'ppm', stoped_gs: 'ppm', max_humidity: '%RH', pre_heat_time_s: '秒', continued_humi: '%RH', stoped_humi: '%RH', continued_satur: '%RS', stoped_satur: '%RS', loglevel: 'Log', dvalue_correct_coefficient: '', record_period_min: '秒', record_printer_period_min: '分钟', } watch( defaultFormulaInfo, (newVal) => { currentSelectedFormulaInfo.value = cloneDeep(newVal) }, { deep: true }, ) /** * @function mapConfigToFormula * @param {Formula.FormulaConfig[]} config - 配方配置列表 * @desc 将配方配置映射为配方项对象 */ const mapConfigToFormula = (config: Formula.FormulaConfig[]) => { const formulaMap: Record = {} config.forEach((item) => { formulaMap[item.setting_id] = Number(item.val) if (item.val_type === 'enum' && item.setting_id === 'loglevel') { updateLogLevels(item) } }) formulaMap.name = '默认配置' return formulaMap as Formula.FormulaItem } /** * @function updateFormulaConfigData * @param {Formula.FormulaConfig[]} data - 配方配置数据 * @desc 更新配方配置数据并生成默认配方 */ const updateFormulaConfigData = (data: Formula.FormulaConfig[]) => { // const visibleConfig = data.filter(item => item.is_visible_in_formula_page) formulaConfigList.value = data defaultFormulaInfo.value = mapConfigToFormula(data) } const getFormualDefaultData = async () => { const defaultParams = { className: 'SettingMgrService', fnName: 'getAllSetting', params: {}, } const res = await sendCmd(defaultParams) updateFormulaConfigData(res) } /** * @function updateLogLevels * @param {Formula.FormulaConfig} logLevelItem - 日志级别配置项 * @desc 更新日志级别选项 */ const updateLogLevels = (logLevelItem: Formula.FormulaConfig) => { const list: System.Option[] = [] const { enum_display_names, enums } = logLevelItem loglevel.value = String(logLevelItem.default_val) enums?.forEach((item: number, index: number) => { list.push({ label: enum_display_names?.[index] || '', value: item, }) }) logLevelOptions.value = list } /** * @function updateLogLevel * @param {string} level - 日志级别值 * @desc 更新当前选中的日志级别 */ const updateLogLevel = (level: string) => { loglevel.value = level } /** * @function updatePressurList * @param {string[]} pressurData - 压力选项数据 * @desc 更新压力选项列表 */ const updatePressurList = (pressurData: string[]) => { pressurOptionList.value = cloneDeep(pressurData) } /** * @function updateSelectedFormulaData * @param {Formula.FormulaItem} formulaItem - 配方项 * @desc 更新当前选中的配方数据 */ const updateCurrentSelectedFormulaData = (formulaItem: Formula.FormulaItem) => { console.log('formulaItem--', formulaItem) currentSelectedFormulaInfo.value = cloneDeep(formulaItem) } /** * @function updateSelectedFormula * @param {Formula.FormulaItem} formulaItem - 配方项 * @desc 通过配方列表更新选中的配方数据 */ const updateSelectedFormula = (formulaItem: Formula.FormulaItem) => { selectedFormulaInfo.value = cloneDeep(formulaItem) } /** * @function initFormulaList * @desc 初始化配方列表,从服务器获取所有配方 */ const initFormulaList = async () => { try { const params = { className: 'SettingMgrService', fnName: 'getAllFormula', params: {}, } const res = await syncSendCmd(params) if (res.rely) { formulaList.value = res.rely if (res.rely.length > 0) { console.log('selectedIndex.value--', currentSelectedIndex.value) currentSelectedFormulaInfo.value = res.rely[res.rely.length - 1] currentSelectedIndex.value = res.rely.length - 1 } else { currentSelectedIndex.value = null } } else { formulaList.value = [] currentSelectedIndex.value = null } } catch (error) { console.error('获取配方列表失败', error) } } /** * 设置配方配置项值 * @param {string} settingName - 设置名称 * @param {string} settingVal - 设置值 * @returns {Promise} */ const setSettingFormulaConfig = async (settingName: string, settingVal: string) => { await sendCmd({ className: 'SettingMgrService', fnName: 'setSettingVal', params: { settingName, settingVal: settingVal?.toString(), }, }) } /** * @function initFormulaData * @desc 初始化配方数据,重置为默认配方 */ const initFormulaData = () => { selectedFormulaInfo.value = cloneDeep(defaultFormulaInfo.value) resetToDefaultFormula() } /** * @function resetToDefaultFormula * @desc 重置为默认配方 */ const resetToDefaultFormula = () => { currentSelectedFormulaInfo.value = cloneDeep(defaultFormulaInfo.value) } /** * @function saveDisinfectFormula * @param {Formula.FormulaItem} formData - 配方数据 * @desc 保存消毒配方并启动消毒程序 */ const startDisinfectFormula = async (formData: Formula.FormulaItem) => { try { const params = { className: 'DisinfectionCtrlServiceExt', fnName: 'startWithFormula', params: { formulaid: formData.formula_id, }, } await sendCmd(params) FtMessage.success('已启动消毒程序') } catch (error) { console.error('保存消毒配方失败', error) FtMessage.error('启动消毒程序失败') } } const updateFlip = (data: boolean) => { flip.value = data } const updateCurrentSelectedIndex = (index: number | null) => { currentSelectedIndex.value = index } const onAddFormula = () => { const params = { className: 'SettingMgrService', fnName: 'addNewFormula', } return syncSendCmd(params) } /** * 编辑配方 * @param {string} formula_id - 配方ID * @param {Formula.FormulaItem} formulaForm - 配方表单数据 */ const editFormula = (formula_id: string, formulaForm: Formula.FormulaItem) => { const editParams = { className: 'SettingMgrService', fnName: 'updateFormula', params: { formula_id, formula: cloneDeep(formulaForm), }, } return syncSendCmd(editParams) } // 删除配方 const delFormula = (formulaId: string) => { const delParams = { className: 'SettingMgrService', fnName: 'delFormula', params: { formula_id: formulaId, }, } return syncSendCmd(delParams) } // 开始执行 const startFormula = (formulaId: string) => { const params = { className: 'DisinfectionCtrlServiceExt', fnName: 'startWithFormula', params: { formulaid: formulaId, }, } return syncSendCmd(params) } return { // 属性 logEnums, pressurList, pressurOptionList, currentSelectedFormulaInfo, formulaList, formulaConfigList, loglevel, logLevelOptions, selectedFormulaInfo, defaultFormulaInfo, flip, currentSelectedIndex, labelUnitMap, // 方法 updatePressurList, updateCurrentSelectedFormulaData, initFormulaData, initFormulaList, updateSelectedFormula, updateFormulaConfigData, startDisinfectFormula, updateLogLevel, resetToDefaultFormula, getFormualDefaultData, updateFlip, updateCurrentSelectedIndex, setSettingFormulaConfig, onAddFormula, editFormula, delFormula, startFormula, } })