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
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,
|
|
}
|
|
})
|