feat(mes): 重构点检保养方案界面,新增设备和项目选择器组件,优化启用停用逻辑

pull/871/MERGE
YunaiV 2026-02-20 15:33:47 +08:00
parent 11b0b290eb
commit 05d7212bd0
5 changed files with 102 additions and 89 deletions

View File

@ -108,24 +108,6 @@
</el-tab-pane>
</el-tabs>
<template #footer>
<!-- 启用方案仅草稿状态显示 -->
<el-button
v-if="formType === 'update' && formData.status === MesDvCheckPlanStatusEnum.PREPARE"
type="warning"
@click="handleEnable"
:disabled="formLoading"
>
启用方案
</el-button>
<!-- 停用方案仅已启用状态显示 -->
<el-button
v-if="formType === 'update' && formData.status === MesDvCheckPlanStatusEnum.ENABLED"
type="danger"
@click="handleDisable"
:disabled="formLoading"
>
停用方案
</el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
@ -215,37 +197,6 @@ const submitForm = async () => {
}
}
// TODO @AI index.vue
/** 启用方案 */
const handleEnable = async () => {
try {
await message.confirm('确认启用该点检保养方案?启用后将不可修改或删除。')
formLoading.value = true
await DvCheckPlanApi.enableCheckPlan(formData.value.id!)
message.success('启用成功')
dialogVisible.value = false
emit('success')
} catch {
} finally {
formLoading.value = false
}
}
/** 停用方案 */
const handleDisable = async () => {
try {
await message.confirm('确认停用该点检保养方案?')
formLoading.value = true
await DvCheckPlanApi.disableCheckPlan(formData.value.id!)
message.success('停用成功')
dialogVisible.value = false
emit('success')
} catch {
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {

View File

@ -27,23 +27,8 @@
label-width="80px"
v-loading="formLoading"
>
<!-- TODO @AI使用组件的 machinery select如果没有就封装一个另外现在 {{ item.machineryCode }} - {{ item.machineryName }} 都展示不出来 -->
<el-form-item label="设备" prop="machineryId">
<el-select
v-model="formData.machineryId"
placeholder="请选择设备"
class="!w-1/1"
filterable
>
<el-option
v-for="item in machineryList"
:key="item.id"
:label="item.machineryName"
:value="item.id"
>
<span>{{ item.machineryCode }} - {{ item.machineryName }}</span>
</el-option>
</el-select>
<DvMachinerySelect v-model="formData.machineryId" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
@ -59,7 +44,7 @@
<script setup lang="ts">
import { DvCheckPlanMachineryApi, DvCheckPlanMachineryVO } from '@/api/mes/dv/checkplan/machinery'
import { DvMachineryApi } from '@/api/mes/dv/machinery'
import DvMachinerySelect from '@/views/mes/dv/machinery/components/DvMachinerySelect.vue'
defineOptions({ name: 'CheckPlanMachineryList' })
@ -72,7 +57,6 @@ const message = useMessage() // 消息弹窗
const loading = ref(false) //
const list = ref<DvCheckPlanMachineryVO[]>([]) //
const machineryList = ref<any[]>([]) //
/** 查询列表 */
const getList = async () => {
@ -104,8 +88,6 @@ const openForm = async (type: string) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
resetForm()
//
machineryList.value = await DvMachineryApi.getSimpleList()
}
/** 提交表单 */

View File

@ -33,22 +33,7 @@
v-loading="formLoading"
>
<el-form-item label="项目" prop="subjectId">
<!-- TODO @AI使用组件的 machinery select如果没有就封装一个另外现在 {{ item.machineryCode }} - {{ item.machineryName }} 都展示不出来 -->
<el-select
v-model="formData.subjectId"
placeholder="请选择项目"
class="!w-1/1"
filterable
>
<el-option
v-for="item in subjectList"
:key="item.id"
:label="item.name"
:value="item.id"
>
<span>{{ item.code }} - {{ item.name }}</span>
</el-option>
</el-select>
<DvSubjectSelect v-model="formData.subjectId" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
@ -65,7 +50,7 @@
<script setup lang="ts">
import { DICT_TYPE } from '@/utils/dict'
import { DvCheckPlanSubjectApi, DvCheckPlanSubjectVO } from '@/api/mes/dv/checkplan/subject'
import { DvSubjectApi } from '@/api/mes/dv/subject'
import DvSubjectSelect from '@/views/mes/dv/subject/components/DvSubjectSelect.vue'
defineOptions({ name: 'CheckPlanSubjectList' })
@ -78,7 +63,6 @@ const message = useMessage() // 消息弹窗
const loading = ref(false) //
const list = ref<DvCheckPlanSubjectVO[]>([]) //
const subjectList = ref<any[]>([]) //
/** 查询列表 */
const getList = async () => {
@ -110,8 +94,6 @@ const openForm = async (type: string) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
resetForm()
//
subjectList.value = await DvSubjectApi.getSimpleList()
}
/** 提交表单 */

View File

@ -138,6 +138,15 @@
>
删除
</el-button>
<el-button
v-if="scope.row.status === MesDvCheckPlanStatusEnum.PREPARE"
link
type="success"
@click="handleEnable(scope.row.id)"
v-hasPermi="['mes:dv-check-plan:update']"
>
启用
</el-button>
<el-button
v-if="scope.row.status === MesDvCheckPlanStatusEnum.ENABLED"
link
@ -230,6 +239,16 @@ const handleDelete = async (id: number) => {
} catch {}
}
/** 启用按钮操作 */
const handleEnable = async (id: number) => {
try {
await message.confirm('确认启用该点检保养方案?启用后将不可修改或删除。')
await DvCheckPlanApi.enableCheckPlan(id)
message.success('启用成功')
await getList()
} catch {}
}
/** 停用按钮操作 */
const handleDisable = async (id: number) => {
try {

View File

@ -0,0 +1,79 @@
<!-- MES 点检保养项目选择器远程搜索下拉支持 namecode -->
<template>
<el-select
v-model="selectValue"
:placeholder="placeholder"
:disabled="disabled"
:clearable="clearable"
filterable
remote
remote-show-suffix
reserve-keyword
:remote-method="handleRemoteSearch"
class="!w-1/1"
@change="handleChange"
>
<el-option v-for="item in optionList" :key="item.id" :label="item.name" :value="item.id">
<div class="flex items-center gap-8px">
<span>{{ item.name }}</span>
<el-tag v-if="item.code" size="small" type="info" class="ml-4px">{{ item.code }}</el-tag>
</div>
</el-option>
</el-select>
</template>
<script setup lang="ts">
import { DvSubjectApi, DvSubjectVO } from '@/api/mes/dv/subject'
defineOptions({ name: 'DvSubjectSelect' })
const props = withDefaults(
defineProps<{
modelValue?: number
disabled?: boolean
clearable?: boolean
placeholder?: string
}>(),
{
disabled: false,
clearable: true,
placeholder: '请选择项目'
}
)
const emit = defineEmits<{
'update:modelValue': [value: number | undefined]
change: [item: DvSubjectVO | undefined]
}>()
const optionList = ref<DvSubjectVO[]>([])
const selectValue = computed({
get: () => props.modelValue,
set: (val) => emit('update:modelValue', val)
})
/** 远程搜索 */
const handleRemoteSearch = async (query: string) => {
const data = await DvSubjectApi.getSubjectPage({ name: query, pageNo: 1, pageSize: 20 })
optionList.value = data.list
}
/** 选中变化 */
const handleChange = (val: number | undefined) => {
const item = optionList.value.find((o) => o.id === val)
emit('change', item)
}
/** 回显:根据 modelValue 加载初始选项 */
watch(
() => props.modelValue,
async (val) => {
if (val && !optionList.value.find((o) => o.id === val)) {
const item = await DvSubjectApi.getSubject(val)
if (item) optionList.value = [item, ...optionList.value]
}
},
{ immediate: true }
)
</script>