style:上下模-模具必填

main
黄伟杰 1 week ago
parent 4dd9ba1378
commit ac7e65cec8

@ -16,7 +16,12 @@
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
>
<el-table-column type="selection" width="55" reserve-selection />
<el-table-column
type="selection"
width="55"
reserve-selection
:selectable="isSelectionColumnSelectable"
/>
<el-table-column
v-for="column in columns"
:key="column.prop || column.slotName"
@ -71,6 +76,7 @@ const props = withDefaults(
pageSize?: number
initialRows?: any[]
queryParams?: Record<string, any> //
selectable?: (row: any, index: number) => boolean
/** ✅ 新增 */
defaultSelectedKeys?: (string | number)[]
}>(),
@ -102,6 +108,18 @@ const syncingSelection = ref(false)
const isSingleSelect = computed(() => props.selectionType === 'single')
const resolveRowKey = (row: Record<string, any>) => row[props.rowKey]
const isRowSelectable = (row: any, index = list.value.findIndex((item) => resolveRowKey(item) === resolveRowKey(row))) => {
return props.selectable ? props.selectable(row, index) : true
}
const isSelectionColumnSelectable = (row: any, index: number) => isRowSelectable(row, index)
const removeUnselectableSelections = () => {
list.value.forEach((row, index) => {
if (!isRowSelectable(row, index)) {
selectedMap.value.delete(resolveRowKey(row))
}
})
}
const refreshSelectionOnTable = async () => {
await nextTick()
@ -111,9 +129,9 @@ const refreshSelectionOnTable = async () => {
try {
table.clearSelection()
const selectedIds = selectedMap.value
list.value.forEach((row) => {
list.value.forEach((row, index) => {
const rowId = resolveRowKey(row)
if (selectedIds.has(rowId)) {
if (selectedIds.has(rowId) && isRowSelectable(row, index)) {
table.toggleRowSelection(row, true)
}
})
@ -139,6 +157,7 @@ const getList = async () => {
const data = await props.fetchApi(params)
list.value = data.list || []
total.value = data.total || 0
removeUnselectableSelections()
await refreshSelectionOnTable()
} finally {
loading.value = false
@ -147,9 +166,10 @@ const getList = async () => {
const handleSelectionChange = (rows: any[]) => {
if (syncingSelection.value) return
const selectableRows = rows.filter((row) => isRowSelectable(row))
if (isSingleSelect.value) {
selectedMap.value.clear()
const latestRow = rows.length ? rows[rows.length - 1] : undefined
const latestRow = selectableRows.length ? selectableRows[selectableRows.length - 1] : undefined
if (latestRow) {
selectedMap.value.set(resolveRowKey(latestRow), latestRow)
}
@ -160,13 +180,14 @@ const handleSelectionChange = (rows: any[]) => {
pageIdSet.forEach((id) => {
selectedMap.value.delete(id)
})
rows.forEach((row) => {
selectableRows.forEach((row) => {
selectedMap.value.set(resolveRowKey(row), row)
})
}
const handleRowClick = (row: any) => {
if (!isSingleSelect.value) return
if (!isRowSelectable(row)) return
const table = tableRef.value
if (!table) return
syncingSelection.value = true

@ -22,7 +22,12 @@
<el-input :model-value="displayLineName" readonly />
</el-form-item>
<!-- 上模手动选择模具 -->
<el-form-item :label="t('MoldManagement.MoldOperate.mold')" prop="moldId" v-if="formData.operateType == 1">
<el-form-item
:label="t('MoldManagement.MoldOperate.mold')"
prop="moldId"
:required="String(formData.operateType) === '1'"
v-if="formData.operateType == 1"
>
<el-input
:model-value="moldDisplayText"
:placeholder="t('MoldManagement.MoldOperate.placeholderMold')"
@ -67,6 +72,7 @@
selection-type="single"
@confirm="handleDeviceSelectConfirm"
:query-params="mergedQueryParams"
:selectable="isDeviceSelectable"
>
<!-- 使用 header 插槽插入查询表单 -->
<template #header>
@ -210,7 +216,7 @@ const formData = ref<MoldOperateFormData>({
})
const validateMoldId = (_rule: any, value: any, callback: (error?: Error) => void) => {
if (formData.value.operateType == null) {
if (String(formData.value.operateType) !== '1') {
callback()
return
}
@ -225,6 +231,7 @@ const validateMoldId = (_rule: any, value: any, callback: (error?: Error) => voi
const formRules = reactive({
operateType: [{ required: true, message: t('MoldManagement.MoldOperate.validatorOperateTypeRequired'), trigger: 'blur' }],
deviceId: [{ required: true, message: t('MoldManagement.MoldOperate.validatorDeviceRequired'), trigger: 'change' }],
moldId: [{ validator: validateMoldId, trigger: 'change' }],
operateTime: [{ required: true, message: t('MoldManagement.MoldOperate.validatorOperateTimeRequired'), trigger: 'blur' }],
operatorId: [{ required: true, message: t('MoldManagement.MoldOperate.validatorOperatorRequired'), trigger: 'change' }],
})
@ -432,6 +439,8 @@ const resetForm = () => {
displayTopCategory.value = ''
formRef.value?.resetFields()
}
const isDeviceSelectable = (row: any) => String(row?.moldGroup ?? '').trim() === ''
const deviceColumns = computed(() => {
const baseColumns = [
{ label: '设备编号', prop: 'deviceCode', minWidth: 140 },

Loading…
Cancel
Save