feat:模具组-维护-更换压网模块

main
黄伟杰 5 days ago
parent 7e606054b0
commit c70bae738e

@ -173,6 +173,12 @@ export const MoldBrandApi = {
// 获得模具产品
getMoldBrandProduct: async (id: number) => {
return await request.get({ url: `/erp/mold-brand/mold-brand-product/get?id=` + id })
},
// ==================== 压网记录 ====================
// 新增压网记录
createPressureNetRecord: async (data: any) => {
return await request.post({ url: `/erp/mold-pressure-net-record/create`, data })
}
}

@ -2486,6 +2486,8 @@ export default {
back: 'Back',
moldCode: 'Mold Code',
moldName: 'Mold Name',
moldGroupCode: 'Mold Group Code',
moldGroupName: 'Mold Group Name',
lastChangeTime: 'Last Change Time',
targetLine: 'Target Line',
lineName: 'Line Name',
@ -2529,6 +2531,12 @@ export default {
maintainTypeMaintain: 'Maintain',
maintainTypeRepair: 'Repair',
maintainTypeReplaceNet: 'Replace Net',
subMold: 'Sub Mold',
placeholderSubMold: 'Please select sub mold',
pressureNetTime: 'Pressure Net Time',
placeholderPressureNetTime: 'Please select pressure net time',
validatorSubMoldRequired: 'Please select sub mold',
validatorPressureNetTimeRequired: 'Please select pressure net time',
replaceNetRemark: 'Remark',
placeholderReplaceNetRemark: 'Please input remark',
moldInfo: 'Mold Info',
@ -2654,6 +2662,10 @@ export default {
installLocation: 'Install Location',
material: 'Material',
quantity: 'Quantity',
pressureNetInfo: 'Pressure Net Info',
lastReplace: 'Last Replace',
usedDays: 'Used',
days: 'days',
operate: 'Operate',
edit: 'Edit',
delete: 'Delete',

@ -1986,6 +1986,8 @@ export default {
back: '返回',
moldCode: '模具编码',
moldName: '模具名称',
moldGroupCode: '模具组编码',
moldGroupName: '模具组名称',
lastChangeTime: '上次更换时间',
targetLine: '目标产线',
lineName: '产线名称',
@ -2029,6 +2031,12 @@ export default {
maintainTypeMaintain: '保养',
maintainTypeRepair: '维修',
maintainTypeReplaceNet: '更换压网',
subMold: '子模具',
placeholderSubMold: '请选择子模具',
pressureNetTime: '压网时间',
placeholderPressureNetTime: '请选择压网时间',
validatorSubMoldRequired: '请选择子模具',
validatorPressureNetTimeRequired: '请选择压网时间',
replaceNetRemark: '备注',
placeholderReplaceNetRemark: '请输入备注',
moldInfo: '模具信息',
@ -2161,6 +2169,10 @@ export default {
installLocation: '安装位置',
material: '材质',
quantity: '数量',
pressureNetInfo: '压网信息',
lastReplace: '上次更换',
usedDays: '已使用',
days: '天',
operate: '操作',
edit: '编辑',
delete: '删除',

@ -33,6 +33,12 @@
{{ scope.row.quantity || scope.row.count || 1 }}
</template>
</el-table-column>
<el-table-column :label="t('MoldManagement.MoldListPage.pressureNetInfo')" min-width="180">
<template #default="scope">
<div>{{ t('MoldManagement.MoldListPage.lastReplace') }}{{ scope.row.pressureNetTime }}</div>
<div>{{ t('MoldManagement.MoldListPage.usedDays') }}{{ scope.row.pressureNetDays }}{{ t('MoldManagement.MoldListPage.days') }}</div>
</template>
</el-table-column>
<el-table-column :label="t('MoldManagement.MoldListPage.operate')" fixed="right" width="160">
<template #default="scope">
<el-button link type="primary" @click="openForm('update', scope.row.id)">{{ t('MoldManagement.MoldListPage.edit') }}</el-button>

@ -20,11 +20,11 @@
<el-empty v-else :description="t('MoldManagement.MoldBrandDetail.noImage')" />
</div>
<div class="mold-maintain-page__info-item">
<span class="mold-maintain-page__info-label">{{ t('MoldManagement.MoldBrandPage.moldCode') }}</span>
<span class="mold-maintain-page__info-label">{{ t('MoldManagement.MoldBrandPage.moldGroupCode') }}</span>
<span class="mold-maintain-page__info-value">{{ mold.code }}</span>
</div>
<div class="mold-maintain-page__info-item">
<span class="mold-maintain-page__info-label">{{ t('MoldManagement.MoldBrandPage.moldName') }}</span>
<span class="mold-maintain-page__info-label">{{ t('MoldManagement.MoldBrandPage.moldGroupName') }}</span>
<span class="mold-maintain-page__info-value">{{ mold.name }}</span>
</div>
<div class="mold-maintain-page__info-item">
@ -238,6 +238,19 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item :label="t('MoldManagement.MoldRepair.faultImages')">
<UploadImgs
v-model="faultImagesValue"
:limit="9"
width="120px"
height="120px"
class="dv-repair-upload"
/>
</el-form-item>
</el-col>
</el-row>
</section>
<section class="dv-repair-section">
@ -257,14 +270,47 @@
<!-- 更换压网表单 -->
<template v-if="isReplaceNet">
<el-form-item :label="t('MoldManagement.MoldBrandPage.replaceNetRemark')" prop="replaceNetRemark">
<el-input
v-model="replaceNetFormData.remark"
type="textarea"
:rows="4"
:placeholder="t('MoldManagement.MoldBrandPage.placeholderReplaceNetRemark')"
/>
</el-form-item>
<section class="dv-repair-section">
<div class="dv-repair-section__title">{{ t('MoldManagement.MoldBrandPage.maintainTypeReplaceNet') }}</div>
<el-form-item :label="t('MoldManagement.MoldBrandPage.subMold')" prop="moldId">
<el-select
v-model="replaceNetFormData.moldId"
filterable
clearable
:loading="subMoldLoading"
:placeholder="t('MoldManagement.MoldBrandPage.placeholderSubMold')"
class="!w-full"
@change="handleSubMoldChange"
>
<el-option
v-for="item in subMoldList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('MoldManagement.MoldBrandPage.pressureNetTime')" prop="pressureNetTime">
<el-date-picker
v-model="replaceNetFormData.pressureNetTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('MoldManagement.MoldBrandPage.placeholderPressureNetTime')"
class="!w-full"
:disabled-date="(date: Date) => date.getTime() > Date.now()"
/>
</el-form-item>
<el-form-item :label="t('MoldManagement.MoldBrandPage.replaceNetRemark')" prop="replaceNetRemark">
<el-input
v-model="replaceNetFormData.remark"
type="textarea"
:rows="3"
maxlength="300"
show-word-limit
:placeholder="t('MoldManagement.MoldBrandPage.placeholderReplaceNetRemark')"
/>
</el-form-item>
</section>
</template>
</el-form>
@ -319,9 +365,12 @@ const formRules = reactive({
//
repairName: [{ required: true, message: t('MoldManagement.MoldRepair.validatorRepairNameRequired'), trigger: 'blur' }],
requireDate: [{ required: true, message: t('MoldManagement.MoldRepair.validatorRequireDateRequired'), trigger: 'change' }],
faultLevel: [{ required: true, message: t('MoldManagement.MoldRepair.validatorFaultLevelRequired'), trigger: 'change' }],
shutdown: [{ required: true, message: t('MoldManagement.MoldRepair.validatorIsShutdownRequired'), trigger: 'change' }],
faultLevel: [{ required: true, message: t('MoldManagement.MoldRepair.validatorFaultLevelRequired'), trigger: 'blur' }],
shutdown: [{ required: true, message: t('MoldManagement.MoldRepair.validatorIsShutdownRequired'), trigger: 'blur' }],
faultPhenomenon: [{ required: true, message: t('MoldManagement.MoldRepair.validatorFaultPhenomenonRequired'), trigger: 'blur' }],
//
moldId: [{ required: true, message: t('MoldManagement.MoldBrandPage.validatorSubMoldRequired'), trigger: 'blur' }],
pressureNetTime: [{ required: true, message: t('MoldManagement.MoldBrandPage.validatorPressureNetTimeRequired'), trigger: 'blur' }],
})
// el-form
@ -337,6 +386,8 @@ const formModel = computed(() => ({
faultLevel: repairFormData.faultLevel,
shutdown: repairFormData.shutdown,
faultPhenomenon: repairFormData.faultPhenomenon,
moldId: replaceNetFormData.moldId,
pressureNetTime: replaceNetFormData.pressureNetTime,
}))
//
@ -366,15 +417,39 @@ const repairFormData = reactive({
shutdown: undefined as boolean | undefined,
faultPhenomenon: undefined as string | undefined,
faultDescription: undefined as string | undefined,
faultImages: '' as string,
remark: undefined as string | undefined,
isCode: true as boolean
})
//
const replaceNetFormData = reactive({
moldId: undefined as number | undefined,
moldName: undefined as string | undefined,
pressureNetTime: undefined as string | undefined,
remark: undefined as string | undefined
})
//
const subMoldList = ref<any[]>([])
const subMoldLoading = ref(false)
const loadSubMoldList = async () => {
if (!props.mold?.id) return
subMoldLoading.value = true
try {
const data = await MoldBrandApi.getMoldList({ brandId: props.mold.id })
subMoldList.value = data ?? []
} finally {
subMoldLoading.value = false
}
}
const handleSubMoldChange = (moldId: number) => {
const selected = subMoldList.value.find((item: any) => item.id === moldId)
replaceNetFormData.moldName = selected?.name ?? ''
}
//
const isInspectOrMaintain = computed(() => [1, 2].includes(maintainFormData.maintainType ?? 0))
const isRepair = computed(() => maintainFormData.maintainType === 3)
@ -394,6 +469,35 @@ const maintainTypes = computed(() => [
const planOptions = ref<{ id: number | string; planName: string }[]>([])
const users = ref<UserVO[]>([])
const ensureUsersLoaded = async () => {
if (users.value.length) return
users.value = (await getSimpleUserList()) ?? []
}
const normalizeUserId = (value: any) => {
if (value === undefined || value === null || value === '') return undefined
const str = String(value)
if (/^\d+$/.test(str)) return str
const matched = users.value.find((u) => u.nickname === str)
return matched ? String(matched.id) : str
}
const splitImageValue = (value: unknown) => {
if (Array.isArray(value)) return value.map((item) => String(item).trim()).filter(Boolean)
if (typeof value !== 'string') return []
return value
.split(',')
.map((item) => item.trim())
.filter(Boolean)
}
const normalizeImageString = (value: unknown) => splitImageValue(value).join(',')
const faultImagesValue = computed<string[]>({
get: () => splitImageValue(repairFormData.faultImages),
set: (value) => { repairFormData.faultImages = value.join(',') }
})
const getImageList = (images?: string) => {
if (!images) return []
return String(images)
@ -426,35 +530,21 @@ const initOptions = async () => {
}
const handleMaintainTypeChange = () => {
//
// taskType
if (isInspectOrMaintain.value) {
taskFormData.name = undefined
taskFormData.taskType = maintainFormData.maintainType
taskFormData.projectForm = []
taskFormData.dateRange = []
taskFormData.cronExpression = undefined
taskFormData.operableUsers = []
taskFormData.enabled = true
} else if (isRepair.value) {
repairFormData.repairCode = undefined
repairFormData.repairName = undefined
repairFormData.requireDate = undefined
repairFormData.acceptedBy = undefined
repairFormData.confirmBy = undefined
repairFormData.faultLevel = undefined
repairFormData.shutdown = undefined
repairFormData.faultPhenomenon = undefined
repairFormData.faultDescription = undefined
repairFormData.remark = undefined
repairFormData.isCode = true
} else if (isReplaceNet.value) {
replaceNetFormData.remark = undefined
}
}
const selectMaintainType = (type: number) => {
const selectMaintainType = async (type: number) => {
maintainFormData.maintainType = type
handleMaintainTypeChange()
//
await initOptions()
//
if (type === 4) {
await loadSubMoldList()
}
}
const submitForm = async () => {
@ -482,26 +572,70 @@ const submitForm = async () => {
}
await TaskManagementApi.createTaskManagement(payload)
message.success(t('common.createSuccess'))
//
taskFormData.name = undefined
taskFormData.projectForm = []
taskFormData.dateRange = []
taskFormData.cronExpression = undefined
taskFormData.operableUsers = []
taskFormData.enabled = true
} else if (isRepair.value) {
//
const payload: any = {
repairCode: repairFormData.isCode ? undefined : repairFormData.repairCode,
repairName: repairFormData.repairName,
moldId: props.mold?.id,
moldCode: props.mold?.code ?? '',
moldName: props.mold?.name ?? '',
machinerySpec: '',
requireDate: repairFormData.requireDate,
acceptedBy: repairFormData.acceptedBy,
confirmBy: repairFormData.confirmBy,
repairResult: '',
repairStatus: '',
acceptedBy: normalizeUserId(repairFormData.acceptedBy),
confirmBy: normalizeUserId(repairFormData.confirmBy),
faultLevel: repairFormData.faultLevel,
shutdown: repairFormData.shutdown,
faultPhenomenon: repairFormData.faultPhenomenon,
faultDescription: repairFormData.faultDescription,
faultImages: normalizeImageString(repairFormData.faultImages),
isCode: repairFormData.isCode,
repairedImages: '',
remark: repairFormData.remark
}
await MoldRepairApi.createMoldRepair(payload)
message.success(t('common.createSuccess'))
//
maintainFormRef.value?.clearValidate()
repairFormData.repairCode = undefined
repairFormData.repairName = undefined
repairFormData.requireDate = undefined
repairFormData.acceptedBy = undefined
repairFormData.confirmBy = undefined
repairFormData.faultLevel = undefined
repairFormData.shutdown = undefined
repairFormData.faultPhenomenon = undefined
repairFormData.faultDescription = undefined
repairFormData.faultImages = ''
repairFormData.remark = undefined
repairFormData.isCode = true
} else if (isReplaceNet.value) {
//
//
await MoldBrandApi.createPressureNetRecord({
moldBrandId: props.mold?.id,
moldBrandName: props.mold?.name ?? '',
moldId: replaceNetFormData.moldId,
moldName: replaceNetFormData.moldName ?? '',
pressureNetTime: replaceNetFormData.pressureNetTime,
remark: replaceNetFormData.remark
})
message.success(t('common.createSuccess'))
//
replaceNetFormData.moldId = undefined
replaceNetFormData.moldName = undefined
replaceNetFormData.pressureNetTime = undefined
replaceNetFormData.remark = undefined
await nextTick()
maintainFormRef.value?.clearValidate()
}
emit('success')
} catch (error) {

Loading…
Cancel
Save