diff --git a/src/components/TableSelectDialog/TableSelectDialog.vue b/src/components/TableSelectDialog/TableSelectDialog.vue
index 59fa63dc..ee527dc9 100644
--- a/src/components/TableSelectDialog/TableSelectDialog.vue
+++ b/src/components/TableSelectDialog/TableSelectDialog.vue
@@ -16,7 +16,12 @@
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
>
-
+
// 新增
+ 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) => 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
diff --git a/src/views/mes/moldoperate/MoldOperateForm.vue b/src/views/mes/moldoperate/MoldOperateForm.vue
index 3d289ec1..ce32590e 100644
--- a/src/views/mes/moldoperate/MoldOperateForm.vue
+++ b/src/views/mes/moldoperate/MoldOperateForm.vue
@@ -22,7 +22,12 @@
-
+
@@ -210,7 +216,7 @@ const formData = ref({
})
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 },