feat(mes): 重构安灯相关组件,优化导入路径,增加注释以提升可读性

pull/871/MERGE
YunaiV 2026-02-21 08:46:51 +08:00
parent a0ac62e0fa
commit b505744d0c
6 changed files with 85 additions and 75 deletions

View File

@ -0,0 +1,45 @@
import request from '@/config/axios'
// MES 安灯配置 VO
export interface ProAndonConfigVO {
id: number // 编号
reason: string // 呼叫原因
level: number // 级别
handlerRoleId: number // 处置人角色编号
handlerUserId: number // 处置人编号
handlerUserNickname: string // 处置人昵称
remark: string // 备注
}
// MES 安灯配置 API
export const ProAndonConfigApi = {
// 查询安灯配置分页
getAndonConfigPage: async (params: any) => {
return await request.get({ url: `/mes/pro/andon-config/page`, params })
},
// 查询安灯配置列表
getAndonConfigList: async () => {
return await request.get({ url: `/mes/pro/andon-config/list` })
},
// 查询安灯配置详情
getAndonConfig: async (id: number) => {
return await request.get({ url: `/mes/pro/andon-config/get?id=` + id })
},
// 新增安灯配置
createAndonConfig: async (data: ProAndonConfigVO) => {
return await request.post({ url: `/mes/pro/andon-config/create`, data })
},
// 修改安灯配置
updateAndonConfig: async (data: ProAndonConfigVO) => {
return await request.put({ url: `/mes/pro/andon-config/update`, data })
},
// 删除安灯配置
deleteAndonConfig: async (id: number) => {
return await request.delete({ url: `/mes/pro/andon-config/delete?id=` + id })
}
}

View File

@ -1,18 +1,5 @@
import request from '@/config/axios' import request from '@/config/axios'
// TODO @AI拆分成 andon/config/index.ts 和 andon/record/index.ts 两个文件
// MES 安灯配置 VO
export interface ProAndonConfigVO {
id: number // 编号
reason: string // 呼叫原因
level: number // 级别
handlerRoleId: number // 处置人角色编号
handlerUserId: number // 处置人编号
handlerUserNickname: string // 处置人昵称
remark: string // 备注
}
// MES 安灯记录 VO // MES 安灯记录 VO
export interface ProAndonRecordVO { export interface ProAndonRecordVO {
id: number // 编号 id: number // 编号
@ -35,39 +22,6 @@ export interface ProAndonRecordVO {
createTime: Date // 发起时间 createTime: Date // 发起时间
} }
// MES 安灯配置 API
export const ProAndonConfigApi = {
// 查询安灯配置分页
getAndonConfigPage: async (params: any) => {
return await request.get({ url: `/mes/pro/andon-config/page`, params })
},
// 查询安灯配置列表
getAndonConfigList: async () => {
return await request.get({ url: `/mes/pro/andon-config/list` })
},
// 查询安灯配置详情
getAndonConfig: async (id: number) => {
return await request.get({ url: `/mes/pro/andon-config/get?id=` + id })
},
// 新增安灯配置
createAndonConfig: async (data: ProAndonConfigVO) => {
return await request.post({ url: `/mes/pro/andon-config/create`, data })
},
// 修改安灯配置
updateAndonConfig: async (data: ProAndonConfigVO) => {
return await request.put({ url: `/mes/pro/andon-config/update`, data })
},
// 删除安灯配置
deleteAndonConfig: async (id: number) => {
return await request.delete({ url: `/mes/pro/andon-config/delete?id=` + id })
}
}
// MES 安灯记录 API // MES 安灯记录 API
export const ProAndonRecordApi = { export const ProAndonRecordApi = {
// 查询安灯记录分页 // 查询安灯记录分页

View File

@ -39,6 +39,7 @@
</el-table-column> </el-table-column>
<el-table-column label="处置人" align="center" width="150"> <el-table-column label="处置人" align="center" width="150">
<template #default="scope"> <template #default="scope">
<!-- TODO @AIuser-select -->
<el-input <el-input
v-if="scope.row.editing" v-if="scope.row.editing"
v-model="scope.row.handlerUserId" v-model="scope.row.handlerUserId"
@ -91,9 +92,11 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ProAndonConfigApi, ProAndonConfigVO } from '@/api/mes/pro/andon' import { ProAndonConfigApi, ProAndonConfigVO } from '@/api/mes/pro/andon/config'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
// TODO @AI
defineOptions({ name: 'AndonConfigDialog' }) defineOptions({ name: 'AndonConfigDialog' })
const message = useMessage() const message = useMessage()
@ -126,7 +129,7 @@ const handleAdd = () => {
list.value.unshift({ list.value.unshift({
id: undefined, id: undefined,
reason: '', reason: '',
level: 3, level: 3, // TODO @AI使
handlerRoleId: undefined, handlerRoleId: undefined,
handlerUserId: undefined, handlerUserId: undefined,
remark: '', remark: '',
@ -152,6 +155,7 @@ const handleSave = async (row: any) => {
return return
} }
try { try {
// TODO @AI使 row
const data = { const data = {
id: row.id, id: row.id,
reason: row.reason, reason: row.reason,

View File

@ -22,6 +22,7 @@
<dict-tag :type="DICT_TYPE.MES_PRO_ANDON_LEVEL" :value="recordInfo.level" /> <dict-tag :type="DICT_TYPE.MES_PRO_ANDON_LEVEL" :value="recordInfo.level" />
</el-form-item> </el-form-item>
<!-- 可编辑字段 --> <!-- 可编辑字段 -->
<!-- TODO @AIunocss 简化 style -->
<el-form-item label="处置时间" prop="handleTime"> <el-form-item label="处置时间" prop="handleTime">
<el-date-picker <el-date-picker
v-model="formData.handleTime" v-model="formData.handleTime"
@ -31,6 +32,7 @@
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
<!-- TODO @AI可选user-select只是默认当前人 -->
<el-form-item label="处置人" prop="handlerUserId"> <el-form-item label="处置人" prop="handlerUserId">
<el-input :model-value="handlerNickname" disabled placeholder="当前用户" /> <el-input :model-value="handlerNickname" disabled placeholder="当前用户" />
</el-form-item> </el-form-item>
@ -46,7 +48,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ProAndonRecordApi } from '@/api/mes/pro/andon' import { ProAndonRecordApi } from '@/api/mes/pro/andon/record'
import { DICT_TYPE } from '@/utils/dict' import { DICT_TYPE } from '@/utils/dict'
import { useUserStoreWithOut } from '@/store/modules/user' import { useUserStoreWithOut } from '@/store/modules/user'
import { formatDate } from '@/utils/formatTime' import { formatDate } from '@/utils/formatTime'
@ -70,6 +72,7 @@ const formRef = ref()
const open = async (id: number) => { const open = async (id: number) => {
dialogVisible.value = true dialogVisible.value = true
formLoading.value = true formLoading.value = true
// TODO @AI reset
try { try {
// //
recordInfo.value = await ProAndonRecordApi.getAndonRecord(id) recordInfo.value = await ProAndonRecordApi.getAndonRecord(id)
@ -77,6 +80,7 @@ const open = async (id: number) => {
const userStore = useUserStoreWithOut() const userStore = useUserStoreWithOut()
formData.value = { formData.value = {
id: id, id: id,
// TODO @AI format
handleTime: formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'), handleTime: formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'),
handlerUserId: userStore.getUser?.id, handlerUserId: userStore.getUser?.id,
remark: undefined remark: undefined

View File

@ -1,4 +1,5 @@
<!-- 安灯呼叫记录 新增/详情弹窗 --> <!-- 安灯呼叫记录 新增/详情弹窗 -->
<!-- TODO @芋艿需要提供这样的新增么 -->
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="600px"> <Dialog :title="dialogTitle" v-model="dialogVisible" width="600px">
<el-form <el-form
@ -13,6 +14,7 @@
<MdWorkstationSelect v-model="formData.workstationId" placeholder="请选择工作站" /> <MdWorkstationSelect v-model="formData.workstationId" placeholder="请选择工作站" />
</el-form-item> </el-form-item>
<el-form-item label="发起人" prop="userId"> <el-form-item label="发起人" prop="userId">
<!-- TODO @AI可以选择只是默认当前用户可以在 user-select 组件里封装下 -->
<el-input v-model="formData.userNickname" disabled placeholder="当前用户" /> <el-input v-model="formData.userNickname" disabled placeholder="当前用户" />
</el-form-item> </el-form-item>
<el-form-item label="生产工单" prop="workOrderId"> <el-form-item label="生产工单" prop="workOrderId">
@ -22,6 +24,8 @@
<el-input v-model="formData.processId" placeholder="请输入工序编号(可选)" type="number" /> <el-input v-model="formData.processId" placeholder="请输入工序编号(可选)" type="number" />
</el-form-item> </el-form-item>
<el-form-item label="呼叫原因" prop="reason"> <el-form-item label="呼叫原因" prop="reason">
<!-- TODO @AIunocss 简化 style -->
<!-- TODO @AI是不是做成 select 组件另外后端的 reason 存储是不是增加存储 id -->
<el-select <el-select
v-model="selectedConfigId" v-model="selectedConfigId"
placeholder="请选择呼叫原因" placeholder="请选择呼叫原因"
@ -38,6 +42,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="级别" prop="level"> <el-form-item label="级别" prop="level">
<!-- TODO @AI字典展示不出来 -->
<dict-tag :type="DICT_TYPE.MES_PRO_ANDON_LEVEL" :value="formData.level" /> <dict-tag :type="DICT_TYPE.MES_PRO_ANDON_LEVEL" :value="formData.level" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
@ -64,11 +69,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ProAndonRecordApi, ProAndonConfigApi, ProAndonConfigVO } from '@/api/mes/pro/andon' import { ProAndonRecordApi } from '@/api/mes/pro/andon/record'
import { ProAndonConfigApi, ProAndonConfigVO } from '@/api/mes/pro/andon/config'
import { DICT_TYPE } from '@/utils/dict' import { DICT_TYPE } from '@/utils/dict'
import MdWorkstationSelect from '@/views/mes/md/workstation/components/MdWorkstationSelect.vue' import MdWorkstationSelect from '@/views/mes/md/workstation/components/MdWorkstationSelect.vue'
import { useUserStoreWithOut } from '@/store/modules/user' import { useUserStoreWithOut } from '@/store/modules/user'
// TODO @AI Form.vue
defineOptions({ name: 'AndonRecordForm' }) defineOptions({ name: 'AndonRecordForm' })
const { t } = useI18n() const { t } = useI18n()
@ -86,7 +94,7 @@ const formRules = reactive({
}) })
const formRef = ref() const formRef = ref()
const configList = ref<ProAndonConfigVO[]>([]) const configList = ref<ProAndonConfigVO[]>([])
const selectedConfigId = ref<number>() const selectedConfigId = ref<number>() // TODO @AI formData
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
@ -107,6 +115,7 @@ const open = async (type: string, id?: number) => {
try { try {
formData.value = await ProAndonRecordApi.getAndonRecord(id!) formData.value = await ProAndonRecordApi.getAndonRecord(id!)
// //
// TODO @AI
const config = configList.value.find((c) => c.reason === formData.value.reason) const config = configList.value.find((c) => c.reason === formData.value.reason)
if (config) { if (config) {
selectedConfigId.value = config.id selectedConfigId.value = config.id

View File

@ -16,28 +16,13 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="级别" prop="level"> <!-- TODO @AI发起人 select -->
<el-select <!-- TODO @AI生产工单 select -->
v-model="queryParams.level" <!-- TODO @AI工序 select -->
placeholder="请选择级别" <!-- TODO @AI工序名称 select -->
clearable <!-- TODO @AI处置人 select -->
class="!w-240px" <el-form-item label="处理状态" prop="status">
> <el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_PRO_ANDON_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择状态"
clearable
class="!w-240px"
>
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_PRO_ANDON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.MES_PRO_ANDON_STATUS)"
:key="dict.value" :key="dict.value"
@ -94,6 +79,8 @@
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="工作站编码" align="center" prop="workstationCode" width="120" /> <el-table-column label="工作站编码" align="center" prop="workstationCode" width="120" />
<el-table-column label="工作站名称" align="center" prop="workstationName" min-width="120" /> <el-table-column label="工作站名称" align="center" prop="workstationName" min-width="120" />
<!-- TODO @AI工单编码 -->
<!-- TODO @AI工序 -->
<el-table-column label="发起人" align="center" prop="userNickname" width="100" /> <el-table-column label="发起人" align="center" prop="userNickname" width="100" />
<el-table-column <el-table-column
label="发起时间" label="发起时间"
@ -102,6 +89,13 @@
:formatter="dateFormatter" :formatter="dateFormatter"
width="180" width="180"
/> />
<!-- TODO @AI发起时间 -->
<!-- TODO @AI呼叫原因 -->
<!-- TODO @AI级别 -->
<!-- TODO @AI处理时间 -->
<!-- TODO @AI处理人 -->
<!-- TODO @AI处置状态 -->
<!-- TODO @AI操作 -->
<el-table-column label="工单编码" align="center" prop="workOrderCode" width="140" /> <el-table-column label="工单编码" align="center" prop="workOrderCode" width="140" />
<el-table-column label="工序名称" align="center" prop="processName" width="120" /> <el-table-column label="工序名称" align="center" prop="processName" width="120" />
<el-table-column label="呼叫原因" align="center" prop="reason" min-width="150" /> <el-table-column label="呼叫原因" align="center" prop="reason" min-width="150" />
@ -173,10 +167,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import { ProAndonRecordApi, ProAndonRecordVO } from '@/api/mes/pro/andon' import { ProAndonRecordApi, ProAndonRecordVO } from '@/api/mes/pro/andon/record'
import AndonRecordForm from './AndonRecordForm.vue' import AndonRecordForm from './AndonRecordForm.vue'
import AndonHandleForm from './AndonHandleForm.vue' import AndonHandleForm from './AndonHandleForm.vue'
import AndonConfigDialog from './AndonConfigDialog.vue' import AndonConfigDialog from '../config/AndonConfigForm.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { MesProAndonStatusEnum } from '@/views/mes/utils/constants' import { MesProAndonStatusEnum } from '@/views/mes/utils/constants'
import MdWorkstationSelect from '@/views/mes/md/workstation/components/MdWorkstationSelect.vue' import MdWorkstationSelect from '@/views/mes/md/workstation/components/MdWorkstationSelect.vue'