Explorar o código

结单、复启组件

HD_wangm hai 4 meses
pai
achega
0c037d1841

+ 642 - 0
ygtx-ui/src/components/repairOrder/finalize.vue

@@ -0,0 +1,642 @@
+<template>
+  <el-dialog title="结单" v-model="visible" width="800px" append-to-body @close="handleClose">
+    <el-alert type="info" :closable="false" style="border-color: #14b8a6; background-color: #f0fdfa; color: #0d9488; height: 35px;">
+      <template #default>
+        <i class="fa fa-file-text-o mr-2" style="color: #0d9488;"> 请选择信息录入方式,并上传相关附件完成结单。</i>
+      </template>
+    </el-alert>
+    <h4 class="text-sm font-medium text-gray-800 mb-3"></h4>
+    <el-form ref="finalizeFormRef" :model="formData" :rules="finalizeRules" label-width="120px" label-position="top">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="工单编码"><el-input v-model="formData.workOrderProjectNo" disabled /></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="风机编号"><el-input v-model="formData.pcsDeviceName" disabled /></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="工单状态">
+            <el-select v-model="formData.workOrderStatus" style="width: 100%" disabled>
+              <el-option
+                  v-for="dict in workOrderStatusOptions"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="维保中心"><el-input v-model="formData.gxtCenter" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="场站"><el-input v-model="formData.pcsStationName" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="品牌"><el-input v-model="formData.brand" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="故障代码"><el-input v-model="formData.faultCode" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="故障信息">
+            <el-input
+              v-model="formData.faultBarcode"
+              type="textarea"
+              placeholder="请输入故障信息"
+              maxlength="100"
+              show-word-limit
+              :rows="3"
+              disabled
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="下发人"><el-input v-model="formData.assignUserName" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="下发时间"><el-input v-model="formData.assignTime" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="接单人"><el-input v-model="formData.acceptUserName" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="接单时间"><el-input v-model="formData.acceptTime" disabled /> </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="工作负责人"><el-input v-model="formData.teamLeaderName" disabled /> </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="信息录入" prop="infoEntry">
+            <el-radio-group v-model="formData.infoEntry" @change="handleInfoEntryChange">
+              <el-radio
+                v-for="dict in infoEntryOptions"
+                :key="dict.value"
+                :label="dict.value"
+              >
+                {{ dict.label }}
+              </el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="formData.infoEntry == 1">
+          <el-form-item label="MIS工单编码" prop="misOrderNo" >
+            <el-input
+              v-model="formData.misOrderNo"
+              placeholder="请输入MIS工单编码或点击搜索选择"
+              clearable
+              @focus="handleMisNoInputFocus"
+              @blur="handleMisNoInputBlur"
+              @input="handleMisNoInput"
+              @clear="handleMisNoClear"
+            >
+              <template #append>
+                <el-button @click="handleSelectMisInfo" icon="Search"></el-button>
+              </template>
+            </el-input>
+            <!-- 快速检索下拉框 -->
+            <div class="quick-select-dropdown" v-show="showMisNoQuickSelect && quickMisNoList.length > 0">
+              <div
+                  v-for="item in quickMisNoList"
+                  :key="item.misNo"
+                  class="quick-select-item"
+                  @click="handleMisNoQuickSelect(item)">
+                <span class="mis-no">{{ item.misNo }}</span>
+              </div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showMisNoQuickSelect && quickMisNoList.length === 0 && formData.misOrderNo">
+              <div>未找到匹配的MIS工单</div>
+            </div>
+          </el-form-item>
+        </el-col>
+        <!-- MIS选择组件 -->
+        <slot name="mis-info-select"></slot>
+        <el-col :span="12" v-if="formData.infoEntry == 2">
+          <el-form-item label="工作票编号" prop="workPermitNum">
+            <el-input v-model="workPermitNumProxy" maxlength="20" show-word-limit />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="开始时间" prop="realStartTime">
+            <el-date-picker
+                v-model="formData.realStartTime"
+                type="datetime"
+                format="YYYY-MM-DD HH:mm"
+                value-format="YYYY-MM-DD HH:mm"
+                placeholder="请选择开始时间"
+                style="width: 100%"
+                :readonly="formData.infoEntry == 1"
+                :disabled-date="disabledStartDate"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="工作部位" prop="workArea">
+            <el-select
+                v-model="formData.workArea"
+                multiple
+                placeholder="请选择工作部位"
+                style="width: 100%"
+            >
+              <el-option
+                  v-for="dict in workAreaOptions"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="12">
+          <el-form-item label="结束时间" prop="realEndTime">
+            <el-date-picker
+                v-model="formData.realEndTime"
+                type="datetime"
+                format="YYYY-MM-DD HH:mm"
+                value-format="YYYY-MM-DD HH:mm"
+                placeholder="请选择结束时间"
+                style="width: 100%"
+                :readonly="formData.infoEntry == 1"
+                :disabled-date="disabledEndDate"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="检修人员" prop="workGroupMemberName">
+            <el-input
+                v-model="formData.workGroupMemberName"
+                placeholder="请输入检修人员"
+                maxlength="200"
+                show-word-limit
+                :readonly="formData.infoEntry == 1"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="外委人员数(人)" prop="wwryNum">
+            <el-input-number
+                v-model="formData.wwryNum"
+                placeholder="请输入外委人员数"
+                controls-position="right"
+                style="width: 100%"
+                class="input-number-left"
+                :min="0"
+                :step="1"
+                :precision="0"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="外来人员数(人)" prop="wlryNum">
+            <el-input-number
+                v-model="formData.wlryNum"
+                placeholder="请输入外来人员数"
+                controls-position="right"
+                style="width: 100%"
+                class="input-number-left"
+                :min="0"
+                :step="1"
+                :precision="0"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="真实故障原因" prop="realContent">
+            <el-input v-model="formData.realFailureReason"
+                      type="textarea"
+                      placeholder="请输入真实故障原因,最多500字"
+                      maxlength="500"
+                      :rows="5"
+                      show-word-limit />
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="附件(可选)">
+            <preview :limit="8" v-model="formData.attachmentUrls" :filesize="5"></preview>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="handleCancel">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit">确认结单</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import { ref, defineProps, defineEmits, getCurrentInstance, computed, watch } from 'vue'
+import preview from '@/components/FileUpload/preview.vue'
+
+// 获取当前实例
+const { proxy } = getCurrentInstance()
+
+// 定义属性
+const props = defineProps({
+  modelValue: {
+    type: Boolean,
+    default: false
+  },
+  data: {
+    type: Object,
+    default: () => ({})
+  },
+  workOrderStatusOptions: {
+    type: Array,
+    default: () => ([])
+  },
+  infoEntryOptions: {
+    type: Array,
+    default: () => ([])
+  },
+  workAreaOptions: {
+    type: Array,
+    default: () => ([])
+  },
+  onSubmit: {
+    type: Function,
+    default: null
+  },
+  listRepairOrder: {
+    type: Function,
+    default: null
+  },
+  listWorkPerson: {
+    type: Function,
+    default: null
+  },
+  listUserData: {
+    type: Function,
+    default: null
+  }
+})
+
+// 定义事件
+const emit = defineEmits(['update:modelValue', 'success', 'select-mis-info'])
+
+// 响应式数据
+const visible = ref(false)
+const formData = ref({})
+const finalizeFormRef = ref()
+const showMisNoQuickSelect = ref(false)
+const quickMisNoList = ref([])
+
+// 计算属性
+const workPermitNumProxy = computed({
+  get() {
+    return formData.value.workPermitNum
+  },
+  set(val) {
+    formData.value.workPermitNum = val
+  }
+})
+
+// 表单验证规则
+const finalizeRules = ref({
+  repairMethod: [
+    { required: true, message: "请选择维修方式", trigger: "change" }
+  ],
+  misOrderNo: [
+    { required: true, message: "MIS工单编码不能为空", trigger: "blur" }
+  ],
+  realStartTime: [
+    { required: true, message: "请选择开始时间", trigger: "change" },
+    {
+      validator: (rule, value, callback) => {
+        if (value && new Date(value) > new Date() && formData.value.infoEntry == '2') {
+          callback(new Error('开始时间不能大于当前时间'));
+        } else if(value && new Date(value) < new Date(formData.value.acceptTime) && formData.value.infoEntry == '2') {
+          callback(new Error('开始时间不能小于接单时间'));
+        } else {
+          callback();
+        }
+      },
+      trigger: 'change'
+    }
+  ],
+  realEndTime: [
+    { required: true, message: "请选择结束时间", trigger: "change" },
+    {
+      validator: (rule, value, callback) => {
+        if (value && new Date(value) > new Date() && formData.value.infoEntry == '2') {
+          callback(new Error('结束时间不能大于当前时间'));
+        } else if(value && new Date(value) < new Date(formData.value.realStartTime) && formData.value.infoEntry == '2') {
+          callback(new Error('结束时间不能小于开始时间'));
+        } else {
+          callback();
+        }
+      },
+      trigger: 'change'
+    }
+  ],
+  workGroupMemberName: [
+    { required: false, message: "请输入检修人员", trigger: "blur" },
+    {
+      validator: async (rule, value, callback) => {
+        // 如果值为空、关联MIS,直接通过验证
+        if (!value || formData.value.infoEntry == '1') {
+          return callback();
+        }
+        try {
+          // 将输入的检修人员姓名按逗号分割
+          const names = value.split(',').map(name => name.trim());
+
+          // 验证每个检修人员是否存在于组织架构中
+          for (const name of names) {
+            if (name.length > 0) {
+              // 使用从属性传入的listUserData方法
+              if (!props.listUserData) {
+                return callback(new Error('系统配置错误:缺少用户数据查询方法'));
+              }
+              const response = await props.listUserData({nickName: name});
+              if (!response.rows || response.rows.length === 0) {
+                return callback(new Error(`检修人员"${name}"非系统内人员,请重新输入`));
+              }
+            } else {
+              return callback(new Error(`请正确输入检修人员名单`));
+            }
+          }
+          callback();
+        } catch (error) {
+          callback(new Error('验证检修人员时发生错误'));
+        }
+      },
+      trigger: 'blur'
+    }
+  ],
+  workArea: [
+    { required: true, message: "请选择工作部位", trigger: "change" }
+  ],
+  workPermitNum: [
+    { required: true, message: "工作票编号不能为空", trigger: "blur" },
+    {
+      validator: (rule, value, callback) => {
+        if (formData.value.infoEntry == '2') {
+          if (!value) {
+            callback(new Error('工作票编号不能为空'))
+          } else if (!/^[a-zA-Z0-9_\-\.]*$/.test(value)) {
+            callback(new Error('仅支持英文、数字、下划线'))
+          } else if (value.length > 20) {
+            callback(new Error('不能超过20个字符'))
+          } else {
+            // 验证唯一性
+            if (value && props.listRepairOrder) {
+              props.listRepairOrder({pageNum: 1, pageSize: 10, workPermitNum: value}).then(response => {
+                const gxtOrders = response.rows
+                if (gxtOrders.length > 0) {
+                  if (gxtOrders[0].id != formData.value.id) {
+                    callback(new Error('工作票编号已存在!'))
+                  } else {
+                    callback()
+                  }
+                } else {
+                  callback()
+                }
+              }).catch(() => {
+                callback()
+              })
+            } else {
+              callback()
+            }
+          }
+        } else {
+          callback()
+        }
+      },
+      trigger: 'blur'
+    }
+  ]
+})
+
+// 监听modelValue变化
+watch(() => props.modelValue, (val) => {
+  visible.value = val
+  if (val) {
+    // 初始化表单数据
+    formData.value = { ...props.data, selectedMembers: [] }
+  }
+})
+
+// 监听props.data变化
+watch(() => props.data, (newData) => {
+  if (visible.value) {
+    // 只有在对话框打开时才更新数据
+    formData.value = { ...newData, selectedMembers: [] }
+  }
+}, { deep: true })
+
+// 监听visible变化
+watch(visible, (val) => {
+  emit('update:modelValue', val)
+  if (val) {
+    // 打开对话框后重置表单验证错误
+    proxy.$nextTick(() => {
+      if (finalizeFormRef.value) {
+        finalizeFormRef.value.clearValidate()
+      }
+    })
+  }
+})
+
+// 时间禁用函数
+const disabledStartDate = (time) => {
+  const getYYYYMMDD = (date) => {
+    const y = date.getFullYear();
+    const m = String(date.getMonth() + 1).padStart(2, '0');
+    const d = String(date.getDate()).padStart(2, '0');
+    return `${y}-${m}-${d}`;
+  };
+
+  const today = getYYYYMMDD(new Date());
+
+  let acceptDateStr = null;
+  const acceptStr = formData.value.acceptTime;
+  if (acceptStr) {
+    acceptDateStr = acceptStr.split(' ')[0];
+  }
+
+  const selectedDateStr = getYYYYMMDD(time);
+
+  // 如果没有 acceptTime,只禁用未来日期
+  if (!acceptDateStr) {
+    return selectedDateStr > today;
+  }
+
+  // 要用:早于 acceptDate 或 晚于今天
+  return selectedDateStr < acceptDateStr || selectedDateStr > today;
+};
+
+const disabledEndDate = (time) => {
+  const getYYYYMMDD = (date) => {
+    const y = date.getFullYear();
+    const m = String(date.getMonth() + 1).padStart(2, '0');
+    const d = String(date.getDate()).padStart(2, '0');
+    return `${y}-${m}-${d}`;
+  };
+
+  const today = getYYYYMMDD(new Date());
+
+  let acceptDateStr = null;
+  const acceptStr = formData.value.acceptTime;
+  const startStr = formData.value.realStartTime;
+  if (startStr) {
+    acceptDateStr = startStr.split(' ')[0];
+  } else if(acceptStr) {
+    acceptDateStr = acceptStr.split(' ')[0];
+  }
+
+  const selectedDateStr = getYYYYMMDD(time);
+
+  // 如果没有 acceptTime,只禁用未来日期
+  if (!acceptDateStr) {
+    return selectedDateStr > today;
+  }
+
+  // 要用:早于 acceptDate 或 晚于今天
+  return selectedDateStr < acceptDateStr || selectedDateStr > today;
+};
+
+// 关闭对话框
+const handleClose = () => {
+  visible.value = false
+}
+
+// 取消操作
+const handleCancel = () => {
+  visible.value = false
+}
+
+// 信息录入方式变化处理
+const handleInfoEntryChange = (val) => {
+  // 选中2工作票编号时修改其他值
+  if (val === '2') {
+    formData.value.misOrderNo = undefined;
+    formData.value.realStartTime = undefined;
+    formData.value.realEndTime = undefined;
+    formData.value.workGroupMemberName = undefined;
+    formData.value.repairOrderPersonList = [];
+  } else {
+    formData.value.workPermitNum = undefined;
+  }
+}
+
+// MIS工单相关处理函数
+const handleMisNoInputFocus = () => {
+  showMisNoQuickSelect.value = true
+}
+
+const handleMisNoInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showMisNoQuickSelect.value = false
+  }, 200)
+}
+
+const handleMisNoInput = (value) => {
+  const searchText = value.trim()
+  showMisNoQuickSelect.value = true
+  // 这里应该调用搜索函数
+}
+
+const handleMisNoClear = () => {
+  formData.value.misOrderNo = undefined
+}
+
+const handleSelectMisInfo = () => {
+  emit('select-mis-info')
+}
+
+const handleMisNoQuickSelect = (item) => {
+  formData.value.misOrderNo = item.misNo
+  showMisNoQuickSelect.value = false
+}
+
+// 提交操作
+const handleSubmit = async () => {
+  if (!finalizeFormRef.value) return
+
+  await finalizeFormRef.value.validate(async (valid) => {
+    if (valid) {
+      try {
+        // 根据维修方式清除不需要的字段
+        if (formData.value.repairMethod === '1') {
+          // 正常维修时清除复位方式
+          formData.value.resetMethod = undefined;
+          formData.value.workArea = Array.isArray(formData.value.workArea) ? formData.value.workArea.join(',')
+                                : formData.value.workArea || ''
+        } else if (formData.value.repairMethod === '2') {
+          // 复位启机时清除MIS相关字段
+          formData.value.misOrderNo = undefined;
+          formData.value.realStartTime = undefined;
+          formData.value.realEndTime = undefined;
+          formData.value.workGroupMemberName = undefined;
+          formData.value.infoEntry = undefined;
+          formData.value.wwryNum = undefined;
+          formData.value.wlryNum = undefined;
+          formData.value.workArea = undefined;
+          formData.value.repairOrderPersonList = [];
+        }
+
+        // 调用父组件传入的提交函数
+        if (props.onSubmit && typeof props.onSubmit === 'function') {
+          await props.onSubmit(formData.value)
+        } else {
+          throw new Error("未提供提交方法")
+        }
+
+        proxy.$modal.msgSuccess("工单结单成功")
+        visible.value = false
+        emit('success')
+      } catch (error) {
+        proxy.$modal.msgError("操作失败: " + (error.message || "未知错误"))
+      }
+    }
+  })
+}
+</script>
+
+<style scoped>
+/* 表单中的列间距调整 */
+:deep(.el-col) {
+  padding-left: 5px;
+  padding-right: 5px;
+}
+.quick-select-dropdown {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  right: 0;
+  z-index: 1000;
+  max-height: 200px;
+  overflow-y: auto;
+  background: white;
+  border: 1px solid #dcdfe6;
+  border-top: none;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.quick-select-item {
+  padding: 8px 12px;
+  cursor: pointer;
+  border-bottom: 1px solid #f0f0f0;
+}
+
+.quick-select-item:hover {
+  background-color: #f5f7fa;
+}
+
+.no-data {
+  text-align: center;
+  padding: 10px;
+  color: #909399;
+}
+
+.input-number-left :deep(.el-input__wrapper) {
+  justify-content: flex-start;
+}
+</style>

+ 180 - 0
ygtx-ui/src/components/repairOrder/reset.vue

@@ -0,0 +1,180 @@
+<template>
+  <el-dialog title="复启" v-model="visible" width="800px" append-to-body @close="handleClose">
+    <el-alert type="info" :closable="false" style="border-color: #0ea5e9; background-color: #ecf7ff; color: #0369a1; height: 35px;">
+      <template #default>
+        <i class="fa fa-refresh mr-2" style="color: #0369a1;"> 请选择复位方式,完成工单复启。</i>
+      </template>
+    </el-alert>
+    <h4 class="text-sm font-medium text-gray-800 mb-3"></h4>
+    <el-form ref="resetFormRef" :model="formData" :rules="resetRules" label-width="120px" label-position="top">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="工单编码">
+            <el-input v-model="formData.workOrderProjectNo" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="风机编号">
+            <el-input v-model="formData.pcsDeviceName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="维保中心">
+            <el-input v-model="formData.gxtCenter" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="场站">
+            <el-input v-model="formData.pcsStationName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="品牌">
+            <el-input v-model="formData.brand" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="发生时间">
+            <el-input v-model="formData.occurTime" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="复位方式" prop="resetMethod">
+            <el-select
+              v-model="formData.resetMethod"
+              placeholder="请选择复位方式"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="dict in resetMethodOptions"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="handleCancel">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit">复位启机</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import { ref, defineProps, defineEmits, getCurrentInstance } from 'vue'
+
+// 获取当前实例
+const { proxy } = getCurrentInstance()
+
+// 定义属性
+const props = defineProps({
+  modelValue: {
+    type: Boolean,
+    default: false
+  },
+  data: {
+    type: Object,
+    default: () => ({})
+  },
+  resetMethodOptions: {
+    type: Array,
+    default: () => ([])
+  },
+  onSubmit: {
+    type: Function,
+    default: null
+  }
+})
+
+// 定义事件
+const emit = defineEmits(['update:modelValue', 'success'])
+
+// 响应式数据
+const visible = ref(false)
+const formData = ref({})
+const resetFormRef = ref()
+
+// 表单验证规则
+const resetRules = ref({
+  resetMethod: [
+    { required: true, message: "请选择复位方式", trigger: "change" }
+  ]
+})
+
+// 监听modelValue变化
+watch(() => props.modelValue, (val) => {
+  visible.value = val
+  if (val) {
+    // 初始化表单数据
+    formData.value = { ...props.data, selectedMembers: [] }
+  }
+})
+
+// 监听visible变化
+watch(visible, (val) => {
+  emit('update:modelValue', val)
+  if (val) {
+    // 打开对话框后重置表单验证错误
+    proxy.$nextTick(() => {
+      if (resetFormRef.value) {
+        resetFormRef.value.clearValidate()
+      }
+    })
+  }
+})
+
+// 关闭对话框
+const handleClose = () => {
+  visible.value = false
+}
+
+// 取消操作
+const handleCancel = () => {
+  visible.value = false
+}
+
+// 提交操作
+const handleSubmit = async () => {
+  if (!resetFormRef.value) return
+
+  await resetFormRef.value.validate(async (valid) => {
+    if (valid) {
+      try {
+        // 设置维修方式为复位启机(2)
+        const submitData = { ...formData.value, repairMethod: '2' }
+
+        // 调用父组件传入的提交函数
+        if (props.onSubmit && typeof props.onSubmit === 'function') {
+          await props.onSubmit(submitData)
+        } else {
+          // 如果没有提供onSubmit,则尝试调用代理方法
+          if (proxy.finalizeRepairOrder) {
+            await proxy.finalizeRepairOrder(submitData)
+          } else {
+            throw new Error("未提供提交方法")
+          }
+        }
+
+        proxy.$modal.msgSuccess("复启成功")
+        visible.value = false
+        emit('success')
+      } catch (error) {
+        proxy.$modal.msgError("操作失败: " + (error.message || "未知错误"))
+      }
+    }
+  })
+}
+</script>
+
+<style scoped>
+/* 表单中的列间距调整 */
+:deep(.el-col) {
+  padding-left: 5px;
+  padding-right: 5px;
+}
+</style>