|
@@ -0,0 +1,276 @@
|
|
|
|
+<template>
|
|
|
|
+ <ContentWrap v-loading="formLoading">
|
|
|
|
+ <el-form
|
|
|
|
+ ref="formRef"
|
|
|
|
+ :model="formData"
|
|
|
|
+ :rules="formRules"
|
|
|
|
+ v-loading="formLoading"
|
|
|
|
+ style="margin-right: 4em;margin-left: 0.5em;margin-top: 1em" label-width="130px"
|
|
|
|
+ >
|
|
|
|
+ <div class="base-expandable-content">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="设备" prop="deviceName">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="formData.deviceName"
|
|
|
|
+ :model-value="deviceLabel"
|
|
|
|
+ placeholder="请选择设备"
|
|
|
|
+ @click="openForm"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="状态" prop="status">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="formData.status"
|
|
|
|
+ placeholder="请选择状态"
|
|
|
|
+ clearable
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS)"
|
|
|
|
+ :key="dict.value"
|
|
|
|
+ :label="dict.label"
|
|
|
|
+ :value="dict.value"
|
|
|
|
+ />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="维修类型" prop="type">
|
|
|
|
+ <el-select
|
|
|
|
+ disabled
|
|
|
|
+ v-model="formData.type"
|
|
|
|
+ placeholder="请选择维修类型"
|
|
|
|
+ clearable
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_TYPE)"
|
|
|
|
+ :key="dict.value"
|
|
|
|
+ :label="dict.label"
|
|
|
|
+ :value="dict.value"
|
|
|
|
+ />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="是否停机" prop="ifStop">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="formData.ifStop"
|
|
|
|
+ placeholder="请选择是否停机"
|
|
|
|
+ clearable
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS)"
|
|
|
|
+ :key="dict.value"
|
|
|
|
+ :label="dict.label"
|
|
|
|
+ :value="dict.value"
|
|
|
|
+ />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="故障时间" prop="failureTime">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ style="width: 150%"
|
|
|
|
+ v-model="formData.failureTime"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="x"
|
|
|
|
+ placeholder="选择故障时间"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="维修开始时间" prop="maintainStartTime">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ style="width: 150%"
|
|
|
|
+ v-model="formData.maintainStartTime"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="x"
|
|
|
|
+ placeholder="选择维修开始时间"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="故障影响" prop="failureInfluence">
|
|
|
|
+ <el-input v-model="formData.failureInfluence" placeholder="请输入故障影响" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="故障系统" prop="failureSystem">
|
|
|
|
+ <el-input v-model="formData.failureSystem" placeholder="请输入故障系统" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="维修结束时间" prop="maintainEndTime">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ style="width: 150%"
|
|
|
|
+ v-model="formData.maintainEndTime"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="x"
|
|
|
|
+ placeholder="选择维修结束时间"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="图片" prop="pic">
|
|
|
|
+ <!-- <el-input v-model="formData.pic" placeholder="请输入图片" />-->
|
|
|
|
+ <UploadImg v-model="formData.pic" height="55px" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="故障描述" prop="description">
|
|
|
|
+ <el-input type="textarea" v-model="formData.description"/>
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="维修描述" prop="maintainDescription">
|
|
|
|
+ <el-input type="textarea" v-model="formData.maintainDescription"/>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="解决办法" prop="solution">
|
|
|
|
+ <el-input type="textarea" v-model="formData.solution"/>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
|
+ <el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+
|
|
|
|
+ </el-row>
|
|
|
|
+ </div>
|
|
|
|
+ </el-form>
|
|
|
|
+ </ContentWrap>
|
|
|
|
+ <ContentWrap>
|
|
|
|
+ <el-form>
|
|
|
|
+ <el-form-item style="float: right">
|
|
|
|
+ <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
|
|
|
+ <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </ContentWrap>
|
|
|
|
+ <DeviceList ref="deviceFormRef" @choose="deviceChoose" />
|
|
|
|
+</template>
|
|
|
|
+<script setup lang="ts">
|
|
|
|
+import { IotMaintainApi, IotMaintainVO } from '@/api/pms/maintain'
|
|
|
|
+import {DICT_TYPE, getBoolDictOptions, getStrDictOptions} from "@/utils/dict";
|
|
|
|
+import DeviceList from "@/views/pms/failure/DeviceList.vue";
|
|
|
|
+
|
|
|
|
+/** 维修工单 表单 */
|
|
|
|
+defineOptions({ name: 'IotMaintain' })
|
|
|
|
+
|
|
|
|
+const { t } = useI18n() // 国际化
|
|
|
|
+const message = useMessage() // 消息弹窗
|
|
|
|
+
|
|
|
|
+const dialogVisible = ref(false) // 弹窗的是否展示
|
|
|
|
+const dialogTitle = ref('') // 弹窗的标题
|
|
|
|
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
|
|
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
|
+const deviceLabel = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
|
+const formData = ref({
|
|
|
|
+ id: undefined,
|
|
|
|
+ failureCode: undefined,
|
|
|
|
+ failureName: undefined,
|
|
|
|
+ deviceId: undefined,
|
|
|
|
+ status: undefined,
|
|
|
|
+ type: undefined,
|
|
|
|
+ ifStop: undefined,
|
|
|
|
+ failureTime: undefined,
|
|
|
|
+ failureInfluence: undefined,
|
|
|
|
+ failureSystem: undefined,
|
|
|
|
+ description: undefined,
|
|
|
|
+ pic: undefined,
|
|
|
|
+ solution: undefined,
|
|
|
|
+ maintainStartTime: undefined,
|
|
|
|
+ maintainEndTime: undefined,
|
|
|
|
+ remark: undefined,
|
|
|
|
+ deviceName: undefined,
|
|
|
|
+ processInstanceId: undefined,
|
|
|
|
+ auditStatus: undefined,
|
|
|
|
+ deptId: undefined,
|
|
|
|
+})
|
|
|
|
+const formRules = reactive({
|
|
|
|
+ deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
|
|
|
|
+ failureCode: [{ required: true, message: '故障编码不能为空', trigger: 'blur' }],
|
|
|
|
+ type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
|
|
|
|
+ ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
|
|
|
|
+ failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
|
|
|
|
+ failureTime: [{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
|
|
|
|
+ maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
|
|
|
|
+ maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
|
|
|
|
+ deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
|
|
|
|
+ status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
|
|
|
|
+})
|
|
|
|
+const formRef = ref() // 表单 Ref
|
|
|
|
+const deviceChoose = (row) => {
|
|
|
|
+ formData.value.deviceId = row.id
|
|
|
|
+ formData.value.deviceName = row.deviceName
|
|
|
|
+ formData.value.deptId = row.deptId;
|
|
|
|
+ deviceLabel.value = row.deviceName
|
|
|
|
+}
|
|
|
|
+const deviceFormRef = ref()
|
|
|
|
+const openForm = () => {
|
|
|
|
+ deviceFormRef.value.open()
|
|
|
|
+}
|
|
|
|
+/** 提交表单 */
|
|
|
|
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
|
|
+const submitForm = async () => {
|
|
|
|
+ // 校验表单
|
|
|
|
+ await formRef.value.validate()
|
|
|
|
+ // 提交请求
|
|
|
|
+ formLoading.value = true
|
|
|
|
+ try {
|
|
|
|
+ const data = formData.value as unknown as IotMaintainVO
|
|
|
|
+ if (formType.value === 'create') {
|
|
|
|
+ await IotMaintainApi.createIotMaintain(data)
|
|
|
|
+ message.success(t('common.createSuccess'))
|
|
|
|
+ } else {
|
|
|
|
+ await IotMaintainApi.updateIotMaintain(data)
|
|
|
|
+ message.success(t('common.updateSuccess'))
|
|
|
|
+ }
|
|
|
|
+ dialogVisible.value = false
|
|
|
|
+ // 发送操作成功的事件
|
|
|
|
+ emit('success')
|
|
|
|
+ } finally {
|
|
|
|
+ formLoading.value = false
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/** 重置表单 */
|
|
|
|
+const resetForm = () => {
|
|
|
|
+ formData.value = {
|
|
|
|
+ id: undefined,
|
|
|
|
+ failureCode: undefined,
|
|
|
|
+ failureName: undefined,
|
|
|
|
+ deviceId: undefined,
|
|
|
|
+ status: undefined,
|
|
|
|
+ ifStop: undefined,
|
|
|
|
+ failureTime: undefined,
|
|
|
|
+ failureInfluence: undefined,
|
|
|
|
+ failureSystem: undefined,
|
|
|
|
+ description: undefined,
|
|
|
|
+ pic: undefined,
|
|
|
|
+ solution: undefined,
|
|
|
|
+ maintainStartTime: undefined,
|
|
|
|
+ maintainEndTime: undefined,
|
|
|
|
+ remark: undefined,
|
|
|
|
+ deviceName: undefined,
|
|
|
|
+ processInstanceId: undefined,
|
|
|
|
+ auditStatus: undefined,
|
|
|
|
+ deptId: undefined,
|
|
|
|
+ }
|
|
|
|
+ formRef.value?.resetFields()
|
|
|
|
+}
|
|
|
|
+onMounted(()=>{
|
|
|
|
+ formData.value.type = 'in'
|
|
|
|
+})
|
|
|
|
+</script>
|
|
|
|
+<style scoped>
|
|
|
|
+.base-expandable-content {
|
|
|
|
+
|
|
|
|
+ overflow: hidden; /* 隐藏溢出的内容 */
|
|
|
|
+ transition: max-height 0.3s ease; /* 平滑过渡效果 */
|
|
|
|
+}
|
|
|
|
+</style>
|