上下模

main
kkk-ops 3 weeks ago
parent 7ee9a074b3
commit 9776bd38e9

@ -1,6 +1,7 @@
import request from '@/config/axios'
import { CriticalComponentVO } from '@/api/mes/criticalComponent'
import { ProductVO } from '@/api/erp/product/product'
import { MoldVO } from '@/api/erp/mold'
// 设备类型 VO
export interface DeviceLedgerVO {
id: number // id
@ -27,6 +28,8 @@ export interface DeviceLedgerVO {
componentList?: CriticalComponentVO[]
beijianId?: string // 备件ids集合
beijianList?: ProductVO[]
moldId?: string // 模具ids集合
moldList?: MoldVO[]
inspectionList?: any[]
maintainList?: any[]
creator?: string // 创建人
@ -65,5 +68,6 @@ export const DeviceLedgerApi = {
// 导出设备类型 Excel
exportDeviceLedger: async (params) => {
return await request.download({ url: `/mes/device-ledger/export-excel`, params })
}
},
}

@ -1,43 +1,48 @@
import request from '@/config/axios'
// 模具上下模 VO
export interface MoldOperateVO {
id: number // ID
operateType: string // 操作类型
moldId: number // 关联模具id
deviceId: number // 关联设备id
remark: string // 备注
}
// 模具上下模 API
export const MoldOperateApi = {
// 查询模具上下模分页
getMoldOperatePage: async (params: any) => {
return await request.get({ url: `/mes/mold-operate/page`, params })
},
// 查询模具上下模详情
getMoldOperate: async (id: number) => {
return await request.get({ url: `/mes/mold-operate/get?id=` + id })
},
// 新增模具上下模
createMoldOperate: async (data: MoldOperateVO) => {
return await request.post({ url: `/mes/mold-operate/create`, data })
},
// 修改模具上下模
updateMoldOperate: async (data: MoldOperateVO) => {
return await request.put({ url: `/mes/mold-operate/update`, data })
},
// 删除模具上下模
deleteMoldOperate: async (id: number) => {
return await request.delete({ url: `/mes/mold-operate/delete?id=` + id })
},
// 导出模具上下模 Excel
exportMoldOperate: async (params) => {
return await request.download({ url: `/mes/mold-operate/export-excel`, params })
},
}
import request from '@/config/axios'
// 模具上下模 VO
export interface MoldOperateVO {
id: number // ID
operateType: string // 操作类型
moldId: number // 关联模具id
deviceId: number // 关联设备id
remark: string // 备注
}
// 模具上下模 API
export const MoldOperateApi = {
// 查询模具上下模分页
getMoldOperatePage: async (params: any) => {
return await request.get({ url: `/mes/mold-operate/page`, params })
},
// 查询模具上下模详情
getMoldOperate: async (id: number) => {
return await request.get({ url: `/mes/mold-operate/get?id=` + id })
},
// 新增模具上下模
createMoldOperate: async (data: MoldOperateVO) => {
return await request.post({ url: `/mes/mold-operate/create`, data })
},
// 修改模具上下模
updateMoldOperate: async (data: MoldOperateVO) => {
return await request.put({ url: `/mes/mold-operate/update`, data })
},
// 删除模具上下模
deleteMoldOperate: async (id: number) => {
return await request.delete({ url: `/mes/mold-operate/delete?id=` + id })
},
// 导出模具上下模 Excel
exportMoldOperate: async (params) => {
return await request.download({ url: `/mes/mold-operate/export-excel`, params })
},
// 查询设备是否有模具
getMoldOperateMold: async (id: number) => {
return await request.get({ url: `/mes/mold-operate/get-mold?id=` + id })
},
}

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="型号编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入型号编码" />
<el-input v-model="formData.code" placeholder="请输入型号编码" :disabled = "formType == 'update'"/>
</el-form-item>
<el-form-item label="型号名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入型号名称" />

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="模具编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入模具编码" />
<el-input v-model="formData.code" placeholder="请输入模具编码" :disabled = "formType == 'update'"/>
</el-form-item>
<el-form-item label="模具名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模具名称" />
@ -49,7 +49,7 @@
</el-tooltip>
</span>
</template>
<el-radio-group v-model="formData.status">
<el-radio-group v-model="formData.status" :disabled = "formType == 'create'">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.ERP_MOLD_STATUS)"
:key="dict.value"
@ -180,10 +180,10 @@ const resetForm = () => {
machineId: undefined,
useTime: 0,
inTime: undefined,
status: 1,
status: 3,
images: undefined,
remark: undefined,
isEnable: undefined,
isEnable: true,
fileUrl: '',
brandId: undefined
}

@ -17,12 +17,12 @@
placeholder="请选择上级编号"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入编码" />
<el-input v-model="formData.code" placeholder="请输入编码" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="formData.sort" placeholder="请输入排序" />
</el-form-item>

@ -11,7 +11,7 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="编码" prop="barCode">
<el-input v-model="formData.barCode" placeholder="请输入编码" />
<el-input v-model="formData.barCode" placeholder="请输入编码" :disabled = "formType === 'update'"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -44,19 +44,6 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="standard">
<el-input v-model="formData.standard" placeholder="请输入规格" />
@ -116,6 +103,19 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="单位名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入单位名称" />
<el-input v-model="formData.name" placeholder="请输入单位名称" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="是否主单位" prop="primaryFlag">
<el-radio-group v-model="formData.primaryFlag">
@ -135,7 +135,7 @@ const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
primaryFlag: undefined,
primaryFlag: 'N',
primaryId: undefined,
changeRate: undefined,
status: CommonStatusEnum.ENABLE

@ -9,7 +9,7 @@
v-loading="formLoading"
>
<el-form-item label="仓库名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入仓库名称" />
<el-input v-model="formData.name" placeholder="请输入仓库名称" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="仓库地址" prop="address">
<el-input v-model="formData.address" placeholder="请输入仓库地址" />

@ -12,6 +12,7 @@
v-model="formData.attributeCode"
placeholder="请输入点位编码"
@input="handleAttributeCodeInput"
:disabled = "formType === 'update'"
/>
</el-form-item>
<el-form-item label="点位名称" prop="attributeName">

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="分类编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入分类编码" />
<el-input v-model="formData.code" placeholder="请输入分类编码" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入分类名称" />

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="模型编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入模型编码" />
<el-input v-model="formData.code" placeholder="请输入模型编码" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="模型名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模型名称" />

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="点位编码" prop="attributeCode">
<el-input v-model="formData.attributeCode" placeholder="请输入点位编码" />
<el-input v-model="formData.attributeCode" placeholder="请输入点位编码" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="点位名称" prop="attributeName">
<el-input v-model="formData.attributeName" placeholder="请输入点位名称" />

@ -75,7 +75,7 @@ ref="tableRef" v-loading="loading" :data="list" :stripe="true" :show-overflow-to
<el-table-column label="单位" align="center" prop="dataUnit" />
<el-table-column label="倍率" align="center" prop="ratio" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="采集设备模型id" align="center" prop="deviceModelId" />
<!-- <el-table-column label="采集设备模型id" align="center" prop="deviceModelId" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" width="150px" fixed="right">
<template #default="scope">

@ -1,5 +1,5 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" width="900">
<Dialog v-model="dialogVisible" :title="dialogTitle" width="1200">
<div class="single-device-dialog">
<div class="single-device-dialog__header">
<div>设备名称{{ deviceName || '-' }}</div>
@ -110,7 +110,8 @@ const displayTime = computed(() => {
const headerCellStyle = () => {
return {
fontWeight: 500,
padding: '6px 4px'
padding: '6px 4px',
background: '#f5f7fa'
}
}

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="BOM编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入BOM编码" />
<el-input v-model="formData.code" placeholder="请输入BOM编码" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="BOM版本" prop="version">
<el-input v-model="formData.version" placeholder="请输入BOM版本" />

@ -341,7 +341,6 @@ link type="danger" @click="handleDelete(scope.row.id)"
<el-table-column label="备注" align="center" prop="remark" min-width="180" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-tab-pane>
<el-tab-pane label="备件" name="component">
<el-table v-loading="loading" :data="detailData?.beijianList" :stripe="true" :show-overflow-tooltip="true">
@ -363,6 +362,14 @@ link type="danger" @click="handleDelete(scope.row.id)"
:formatter="dateFormatter"
width="180px"
/>
</el-table>
</el-tab-pane>
<el-tab-pane label="模具" name="mold">
<el-table v-loading="loading" :data="detailData?.moldList" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="编码" align="center" prop="code" min-width="140" />
<el-table-column label="名称" align="center" prop="name" min-width="140" />
<el-table-column label="备注" align="center" prop="remark" min-width="180" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-tab-pane>

@ -8,15 +8,32 @@
v-loading="formLoading"
>
<el-form-item label="操作类型" prop="operateType">
<el-select v-model="formData.operateType" placeholder="请选择操作类型">
<el-option label="请选择字典生成" value="" />
</el-select>
<el-radio-group v-model="formData.operateType">
<el-radio :label="1">上模</el-radio>
<el-radio :label="2">下模</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="关联模具id" prop="moldId">
<el-input v-model="formData.moldId" placeholder="请输入关联模具id" />
<el-form-item label="设备" prop="deviceId">
<el-select
v-model="formData.deviceId" filterable clearable :loading="deviceLoading"
placeholder="请选择设备" class="!w-full" @change="deviceChange(formData.deviceId)">
<el-option v-for="opt in deviceOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="关联设备id" prop="deviceId">
<el-input v-model="formData.deviceId" placeholder="请输入关联设备id" />
<el-form-item label="模具" prop="moldId" v-if = "formData.operateType == '1'">
<el-select
v-model="formData.moldId"
clearable
filterable
placeholder="请选择模具"
>
<el-option
v-for="item in moldList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
@ -30,12 +47,19 @@
</template>
<script setup lang="ts">
import { MoldOperateApi, MoldOperateVO } from '@/api/mes/moldoperate'
import { MoldBrandApi, MoldVO } from '@/api/erp/mold'
import { DeviceLedgerApi, DeviceLedgerVO } from '@/api/mes/deviceledger'
/** 模具上下模 表单 */
defineOptions({ name: 'MoldOperateForm' })
const { t } = useI18n() //
const message = useMessage() //
const moldList = ref<MoldVO[]>([]) //
const deviceLoading = ref(false)
const deviceOptions = ref<{ label: string; value: number; raw?: DeviceLedgerVO }[]>([])
const deviceOptionsLoaded = ref(false)
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
@ -49,7 +73,9 @@ const formData = ref({
remark: undefined,
})
const formRules = reactive({
moldId: [{ required: true, message: '关联模具id不能为空', trigger: 'blur' }],
moldId: [{ required: true, message: '关联模具不能为空', trigger: 'blur' }],
operateType: [{ required: true, message: '操作类型不能为空', trigger: 'blur' }],
deviceId: [{ required: true, message: '关联设备不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
@ -59,6 +85,8 @@ const open = async (type: string, id?: number) => {
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
moldList.value = await MoldBrandApi.getMoldAllList()
await ensureDeviceOptionsLoaded()
//
if (id) {
formLoading.value = true
@ -73,28 +101,109 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // success
// const submitForm = async () => {
// //
// await formRef.value.validate()
// //
// if (formData.value.operateType === '1') {
// const data = await MoldOperateApi.getMoldOperateMold(formData.value.deviceId)
// if (data === true) {
// message.alert('')
// return;
// }
// }
// //
// formLoading.value = true
// try {
// const data = formData.value as unknown as MoldOperateVO
// if (formType.value === 'create') {
// await MoldOperateApi.createMoldOperate(data)
// message.success(t('common.createSuccess'))
// } else {
// await MoldOperateApi.updateMoldOperate(data)
// message.success(t('common.updateSuccess'))
// }
// dialogVisible.value = false
// //
// emit('success')
// } finally {
// formLoading.value = false
// }
// }
const submitForm = async () => {
//
await formRef.value.validate()
//
// loading
formLoading.value = true
try {
const data = formData.value as unknown as MoldOperateVO
// 1.
await formRef.value.validate()
// 2.
if (formData.value.operateType == '1') {
const data = await MoldOperateApi.getMoldOperateMold(formData.value.deviceId)
if (data === true) {
message.alert('请先将该设备上的模具换下!')
return
}
} else {
const data = await MoldOperateApi.getMoldOperateMold(formData.value.deviceId)
if (data === false) {
message.alert('该设备没有安装模具!')
return
}
}
// 3.
const submitData = formData.value as unknown as MoldOperateVO
if (formType.value === 'create') {
await MoldOperateApi.createMoldOperate(data)
await MoldOperateApi.createMoldOperate(submitData)
message.success(t('common.createSuccess'))
} else {
await MoldOperateApi.updateMoldOperate(data)
await MoldOperateApi.updateMoldOperate(submitData)
message.success(t('common.updateSuccess'))
}
// 4.
dialogVisible.value = false
//
emit('success')
} catch (error) {
} finally {
// loading
formLoading.value = false
}
}
const ensureDeviceOptionsLoaded = async () => {
if (deviceOptionsLoaded.value) return
deviceLoading.value = true
try {
const data = await DeviceLedgerApi.getDeviceLedgerPage({})
const rows = (data?.list ?? []) as DeviceLedgerVO[]
deviceOptions.value = rows
.filter((r) => typeof r?.id === 'number')
.map((r) => ({ label: `${r.deviceCode ?? ''} ${r.deviceName ?? ''}`.trim(), value: r.id, raw: r }))
deviceOptionsLoaded.value = true
} finally {
deviceLoading.value = false
}
}
//
const deviceChange = async (deviceId:number) => {
const data = await MoldOperateApi.getMoldOperateMold(deviceId)
if (formData.value.operateType == '1') {
if (data === true) {
message.alert('请先将该设备上的模具换下!')
}
} else {
if (data === false) {
message.alert('该设备没有安装模具!')
}
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {

@ -8,7 +8,7 @@
:inline="true"
label-width="68px"
>
<el-form-item label="操作类型" prop="operateType">
<!-- <el-form-item label="操作类型" prop="operateType">
<el-select
v-model="queryParams.operateType"
placeholder="请选择操作类型"
@ -17,24 +17,22 @@
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="关联模具id" prop="moldId">
<el-input
</el-form-item> -->
<el-form-item label="模具" prop="moldId">
<el-select
v-model="queryParams.moldId"
placeholder="请输入关联模具id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="关联设备id" prop="deviceId">
<el-input
v-model="queryParams.deviceId"
placeholder="请输入关联设备id"
clearable
@keyup.enter="handleQuery"
filterable
placeholder="请选择模具"
class="!w-240px"
/>
>
<el-option
v-for="item in moldList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
@ -82,14 +80,19 @@
<!-- 列表 -->
<ContentWrap>
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="上模" name="1" />
<el-tab-pane label="下模" name="2" />
</el-tabs>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="操作类型" align="center" prop="operateType" />
<el-table-column label="关联模具id" align="center" prop="moldId" />
<el-table-column label="关联设备id" align="center" prop="deviceId" />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<!-- <el-table-column label="操作类型" align="center" prop="operateType" /> -->
<el-table-column label="模具名称" align="center" prop="moldName" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="操作人" align="center" prop="creatorName" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
label="操作时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
@ -97,14 +100,14 @@
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
<!-- <el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:mold-operate:update']"
>
编辑
</el-button>
</el-button> -->
<el-button
link
type="danger"
@ -134,6 +137,7 @@ import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { MoldOperateApi, MoldOperateVO } from '@/api/mes/moldoperate'
import MoldOperateForm from './MoldOperateForm.vue'
import { MoldBrandApi, MoldVO } from '@/api/erp/mold'
/** 模具上下模 列表 */
defineOptions({ name: 'MoldOperate' })
@ -155,11 +159,13 @@ const queryParams = reactive({
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const moldList = ref<MoldVO[]>([]) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
moldList.value = await MoldBrandApi.getMoldAllList()
const data = await MoldOperateApi.getMoldOperatePage(queryParams)
list.value = data.list
total.value = data.total
@ -214,6 +220,13 @@ const handleExport = async () => {
}
}
/** tab 切换 */
let activeName = '1'
const handleTabClick = (tab: TabsPaneContext) => {
queryParams.operateType = tab.paneName
handleQuery()
}
/** 初始化 **/
onMounted(() => {
getList()

@ -16,7 +16,7 @@
</el-tooltip>
</span>
</template>
<el-input :disabled="formType==='create'" v-model="formData.code" placeholder="编码保存后自动生成" />
<el-input disabled v-model="formData.code" placeholder="编码保存后自动生成"/>
</el-form-item>
<el-form-item label="交货日期" prop="deliveryDate">
<el-date-picker

Loading…
Cancel
Save