停机记录新增,设备管理查询条件完善

This commit is contained in:
2026-06-02 14:11:35 +08:00
parent 3586f86ea6
commit 3f2c486f04
41 changed files with 2782 additions and 213 deletions

View File

@@ -26,7 +26,38 @@ export const columns: BasicColumn[] = [
export const searchFormSchema: FormSchema[] = [
{ label: '项目名称', field: 'itemName', component: 'Input', colProps: { span: 6 } },
{ label: '项目编号', field: 'itemCode', component: 'Input', colProps: { span: 6 } },
{ label: '设备类别', field: 'equipmentCategoryName', component: 'Input', colProps: { span: 6 } },
{ label: '', field: 'equipmentCategoryId', component: 'Input', show: false },
{
label: '设备类别',
field: 'equipmentCategoryName',
component: 'Input',
slot: 'equipmentCategoryPicker',
colProps: { span: 6 },
},
{ label: '', field: 'equipmentTypeId', component: 'Input', show: false },
{
label: '设备类型',
field: 'equipmentTypeName',
component: 'Input',
slot: 'equipmentTypePicker',
colProps: { span: 6 },
},
{ label: '', field: 'equipmentPartId', component: 'Input', show: false },
{
label: '设备部位',
field: 'equipmentPartName',
component: 'Input',
slot: 'equipmentPartPicker',
colProps: { span: 6 },
},
{ label: '', field: 'equipmentSubPartId', component: 'Input', show: false },
{
label: '设备小部位',
field: 'equipmentSubPartName',
component: 'Input',
slot: 'equipmentSubPartPicker',
colProps: { span: 6 },
},
{
label: '项目类别',
field: 'itemCategory',

View File

@@ -1,6 +1,46 @@
<template>
<div>
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<template #form-equipmentCategoryPicker="{ model, field }">
<MesSearchPickerInput
:model="model"
:field="field"
placeholder="请选择设备类别"
:show-clear="!!model.equipmentCategoryId"
@open="openCategorySelect"
@clear="clearCategory(model)"
/>
</template>
<template #form-equipmentTypePicker="{ model, field }">
<MesSearchPickerInput
:model="model"
:field="field"
placeholder="请先选类别,再选类型"
:show-clear="!!model.equipmentTypeId"
@open="openTypeSelect"
@clear="clearModelFields(model, ['equipmentTypeId', 'equipmentTypeName'])"
/>
</template>
<template #form-equipmentPartPicker="{ model, field }">
<MesSearchPickerInput
:model="model"
:field="field"
placeholder="请先选类别,再选部位"
:show-clear="!!model.equipmentPartId"
@open="openPartSelect"
@clear="clearPart(model)"
/>
</template>
<template #form-equipmentSubPartPicker="{ model, field }">
<MesSearchPickerInput
:model="model"
:field="field"
placeholder="请先选类别与部位,再选小部位"
:show-clear="!!model.equipmentSubPartId"
@open="openSubPartSelect"
@clear="clearModelFields(model, ['equipmentSubPartId', 'equipmentSubPartName'])"
/>
</template>
<template #tableTitle>
<a-button
type="primary"
@@ -51,6 +91,10 @@
</template>
</BasicTable>
<MesXslInspectMaintainItemModal @register="registerModal" @success="handleSuccess" />
<MesXslEquipmentCategorySelectModal @register="registerCategoryModal" @select="onCategorySelect" />
<MesXslEquipmentTypeFilterSelectModal @register="registerTypeModal" @select="onTypeSelect" />
<MesXslEquipmentPartSelectModal @register="registerPartModal" @select="onPartSelect" />
<MesXslEquipmentSubPartFilterSelectModal @register="registerSubPartModal" @select="onSubPartSelect" />
</div>
</template>
@@ -58,12 +102,32 @@
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import { useMessage } from '/@/hooks/web/useMessage';
import Icon from '/@/components/Icon';
import MesSearchPickerInput from '../components/MesSearchPickerInput.vue';
import MesXslInspectMaintainItemModal from './components/MesXslInspectMaintainItemModal.vue';
import MesXslEquipmentCategorySelectModal from '/@/views/xslmes/mesXslEquipmentType/components/MesXslEquipmentCategorySelectModal.vue';
import MesXslEquipmentPartSelectModal from '/@/views/xslmes/mesXslEquipmentSubPart/components/MesXslEquipmentPartSelectModal.vue';
import MesXslEquipmentTypeFilterSelectModal from './components/MesXslEquipmentTypeFilterSelectModal.vue';
import MesXslEquipmentSubPartFilterSelectModal from './components/MesXslEquipmentSubPartFilterSelectModal.vue';
import { clearModelFields, createStripIdNameBeforeFetch } from '../utils/mesSearchPickerUtil';
import { columns, searchFormSchema } from './MesXslInspectMaintainItem.data';
import { list, deleteOne, batchDelete, getExportUrl, getImportUrl } from './MesXslInspectMaintainItem.api';
const { createMessage } = useMessage();
const SEARCH_ID_NAME_PAIRS = [
{ idField: 'equipmentCategoryId', nameField: 'equipmentCategoryName' },
{ idField: 'equipmentTypeId', nameField: 'equipmentTypeName' },
{ idField: 'equipmentPartId', nameField: 'equipmentPartName' },
{ idField: 'equipmentSubPartId', nameField: 'equipmentSubPartName' },
];
const [registerModal, { openModal }] = useModal();
const [registerCategoryModal, { openModal: openCategoryModal }] = useModal();
const [registerTypeModal, { openModal: openTypeModal }] = useModal();
const [registerPartModal, { openModal: openPartModal }] = useModal();
const [registerSubPartModal, { openModal: openSubPartModal }] = useModal();
const { tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
@@ -71,6 +135,7 @@
api: list,
columns,
canResize: true,
beforeFetch: createStripIdNameBeforeFetch(SEARCH_ID_NAME_PAIRS),
formConfig: {
schemas: searchFormSchema,
labelWidth: 100,
@@ -92,7 +157,106 @@
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
const [registerTable, { reload, getForm }, { rowSelection, selectedRowKeys }] = tableContext;
function clearCategory(model: Recordable) {
clearModelFields(model, [
'equipmentCategoryId',
'equipmentCategoryName',
'equipmentTypeId',
'equipmentTypeName',
'equipmentPartId',
'equipmentPartName',
'equipmentSubPartId',
'equipmentSubPartName',
]);
}
function clearPart(model: Recordable) {
clearModelFields(model, ['equipmentPartId', 'equipmentPartName', 'equipmentSubPartId', 'equipmentSubPartName']);
}
function openCategorySelect() {
const v = getForm()?.getFieldsValue?.() || {};
openCategoryModal(true, { equipmentCategoryId: v.equipmentCategoryId });
}
function onCategorySelect(payload: Recordable) {
getForm()?.setFieldsValue?.({
equipmentCategoryId: payload.equipmentCategoryId || '',
equipmentCategoryName: payload.equipmentCategoryName || '',
equipmentTypeId: '',
equipmentTypeName: '',
equipmentPartId: '',
equipmentPartName: '',
equipmentSubPartId: '',
equipmentSubPartName: '',
});
}
function openTypeSelect() {
const v = getForm()?.getFieldsValue?.() || {};
if (!v.equipmentCategoryId) {
createMessage.warning('请先选择设备类别');
return;
}
openTypeModal(true, {
equipmentCategoryId: v.equipmentCategoryId,
equipmentTypeId: v.equipmentTypeId,
});
}
function onTypeSelect(payload: Recordable) {
getForm()?.setFieldsValue?.({
equipmentTypeId: payload.equipmentTypeId || '',
equipmentTypeName: payload.equipmentTypeName || '',
});
}
function openPartSelect() {
const v = getForm()?.getFieldsValue?.() || {};
if (!v.equipmentCategoryId) {
createMessage.warning('请先选择设备类别');
return;
}
openPartModal(true, {
equipmentCategoryId: v.equipmentCategoryId,
equipmentPartId: v.equipmentPartId,
});
}
function onPartSelect(payload: Recordable) {
getForm()?.setFieldsValue?.({
equipmentPartId: payload.equipmentPartId || '',
equipmentPartName: payload.equipmentPartName || '',
equipmentSubPartId: '',
equipmentSubPartName: '',
});
}
function openSubPartSelect() {
const v = getForm()?.getFieldsValue?.() || {};
if (!v.equipmentCategoryId) {
createMessage.warning('请先选择设备类别');
return;
}
if (!v.equipmentPartId) {
createMessage.warning('请先选择设备部位');
return;
}
openSubPartModal(true, {
equipmentCategoryId: v.equipmentCategoryId,
equipmentPartId: v.equipmentPartId,
equipmentSubPartId: v.equipmentSubPartId,
});
}
function onSubPartSelect(payload: Recordable) {
getForm()?.setFieldsValue?.({
equipmentSubPartId: payload.equipmentSubPartId || '',
equipmentSubPartName: payload.equipmentSubPartName || '',
});
}
function handleAdd() {
openModal(true, { isUpdate: false, showFooter: true });