消毒机设备
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

358 lines
10 KiB

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<System.Option[]>([])
const defaultFormulaInfo = ref<Formula.FormulaItem | null>(null)
// const resetFormulaInfo = ref<Formula.FormulaItem>(createResetFormulaInfo())
const pressurOptionList = ref<string[]>(['10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'])
const currentSelectedFormulaInfo = ref<Formula.FormulaItem>(cloneDeep(defaultFormulaInfo.value)) // 当前列表选中的配方信息
const selectedFormulaInfo = ref<Formula.FormulaItem | null>(cloneDeep(defaultFormulaInfo.value)) // 选中执行的配方信息
const formulaConfigList = ref<Formula.FormulaConfig[]>([])
const formulaList = ref<Formula.FormulaItem[]>([])
const loglevel = ref<string>('1')
const flip = ref(true)
const currentSelectedIndex = ref<number | null>(null) // 左侧列表选中值 从0开始
// 标签单位映射表,用于显示各参数的单位
const labelUnitMap: Record<string, any> = {
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<string, any> = {}
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<void>}
*/
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,
}
})