feat emit

This commit is contained in:
Asoka 2025-06-10 17:36:03 +08:00
parent ee6ed82a4a
commit 3b6fd601f2
6 changed files with 14 additions and 127 deletions

View File

@ -7282,7 +7282,7 @@ export interface FeedingConfigGetListOutput {
*/
id?: number
/** 配置名称 */
name?: string | null
configName?: string | null
/** 配置编码 */
code?: string | null
/** 配置描述 */
@ -7294,6 +7294,8 @@ export interface FeedingConfigGetListOutput {
pumpSpeed?: number
/** 启用状态 */
enabled?: boolean
isTwoStep?: boolean
}
/** 报警器分页 */

1
src/types/mitt.d.ts vendored
View File

@ -65,6 +65,7 @@ declare type MittType<T = any> = {
forceOffline?: T
refreshPrintTemplate?: T
refreshRoom?: T
refreshPump?: T
}
// mitt 参数类型定义

View File

@ -1,16 +1,13 @@
// https://www.npmjs.com/package/mitt
import mitt, { Emitter } from 'mitt'
// 类型
const emitter: Emitter<MittType> = mitt<MittType>()
// 导出
export default emitter
export interface MittType {
// ... existing code ...
[key: string | symbol]: unknown
refreshMsg: void
refreshFeedMedium: void
refreshBasicMedium: void
refreshCell: void
// ... existing code ...
}
const emitter: Emitter<MittType> = mitt<MittType>()
export default emitter

View File

@ -1,113 +0,0 @@
<template>
<el-dialog
v-model="dialogVisible"
:title="title"
width="500px"
:close-on-click-modal="false"
:close-on-press-escape="false"
append-to-body
>
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-width="100px"
@submit.prevent
>
<el-form-item label="培养基编号" prop="mediumCode">
<el-input v-model="form.mediumCode" placeholder="请输入培养基编号" />
</el-form-item>
<el-form-item label="培养基名称" prop="mediumName">
<el-input v-model="form.mediumName" placeholder="请输入培养基名称" />
</el-form-item>
<el-form-item label="葡萄糖浓度" prop="glucoseConc">
<el-input-number v-model="form.glucoseConc" :min="0" :precision="2" :step="0.1" />
</el-form-item>
<el-form-item label="是否含葡萄糖" prop="isGlucose">
<el-switch v-model="form.isGlucose" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-switch v-model="form.status" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, reactive } from 'vue'
import type { FormInstance } from 'element-plus'
import { ElMessage } from 'element-plus'
import { BasicMediumDto } from '/@/api/admin/data-contracts'
import { ItemDefBasicMediumApi } from '/@/api/admin/item-def-basic-medium'
import eventBus from '/@/utils/mitt'
const props = defineProps<{
title: string
}>()
const dialogVisible = ref(false)
const formRef = ref<FormInstance>()
const form = reactive<Partial<BasicMediumDto>>({
mediumCode: '',
mediumName: '',
glucoseConc: 0,
isGlucose: true,
status: true
})
const rules = {
mediumCode: [{ required: true, message: '请输入培养基编号', trigger: 'blur' }],
mediumName: [{ required: true, message: '请输入培养基名称', trigger: 'blur' }],
glucoseConc: [{ required: true, message: '请输入葡萄糖浓度', trigger: 'blur' }],
isGlucose: [{ required: true, message: '请选择是否含葡萄糖', trigger: 'change' }],
status: [{ required: true, message: '请选择状态', trigger: 'change' }]
}
const open = (data?: Partial<BasicMediumDto>) => {
dialogVisible.value = true
if (data) {
Object.assign(form, data)
} else {
Object.assign(form, {
mediumCode: '',
mediumName: '',
glucoseConc: 0,
isGlucose: true,
status: true
})
}
}
const submitForm = async () => {
if (!formRef.value) return
await formRef.value.validate(async (valid) => {
if (valid) {
try {
if (form.id) {
await new ItemDefBasicMediumApi().update(form as BasicMediumDto)
ElMessage.success('修改成功')
} else {
await new ItemDefBasicMediumApi().add(form as BasicMediumDto)
ElMessage.success('添加成功')
}
dialogVisible.value = false
eventBus.emit('refreshBasicMedium')
} catch (error) {
console.error('提交失败:', error)
ElMessage.error('提交失败')
}
}
})
}
defineExpose({
open
})
</script>
<style scoped lang="scss"></style>

View File

@ -85,7 +85,7 @@
<el-option
v-for="config in state.configOptions"
:key="config.id"
:label="`${config.name} (${config.pumpSpeed}g/min)`"
:label="`${config.configName} (${config.isTwoStep ? '两段式' : '三段式'})`"
:value="config.id"
/>
</el-select>
@ -450,7 +450,7 @@ const onSubmit = () => {
if (res?.success) {
closeDialog()
emit('refresh')
eventBus.emit('refreshPump' as keyof MittType<any>)
eventBus.emit('refreshPump')
}
} catch (error: any) {
proxy.$modal.msgError('操作失败')

View File

@ -146,8 +146,8 @@ const state = reactive({
onMounted(() => {
getUserOptions()
Query()
eventBus.off('refreshPump' as keyof MittType<any>)
eventBus.on('refreshPump' as keyof MittType<any>, () => {
eventBus.off('refreshPump')
eventBus.on('refreshPump' , () => {
Query()
})
})