Forráskód Böngészése

待办列表新增下发组件

HD_wangm 3 hónapja
szülő
commit
813ce624c3

+ 293 - 0
ygtx-ui/src/components/gxtOrder/addEdit.vue

@@ -0,0 +1,293 @@
+<template>
+  <!-- 新增/编辑对话框 -->
+  <el-dialog title="下发" v-model="visible" width="800px" append-to-body @close="cancel">
+    <div style="max-height: 500px; overflow-y: auto; padding-right: 10px;">
+      <el-form ref="orderRef" :model="form" :rules="rules" label-width="120px" label-position="top">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="工单编码" prop="workOrderProjectNo">
+              <el-input v-model="form.workOrderProjectNo" placeholder="自动生成" maxlength="50" show-word-limit v-chinese-limit readonly/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="风机编号" prop="pcsDeviceName">
+              <el-input v-model="form.pcsDeviceName" readonly>
+                <template #append>
+                  <el-button @click="handleSelectEquipment" icon="Search"></el-button>
+                </template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="维保中心" prop="gxtCenter">
+              <el-input v-model="form.gxtCenter" readonly />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="场站" prop="pcsStationName">
+              <el-input v-model="form.pcsStationName" readonly />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="品牌" prop="brand">
+              <el-input v-model="form.brand" readonly />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="机型" prop="model">
+              <el-input v-model="form.model" readonly />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="维保类型" prop="inspectionType">
+              <el-select v-model="form.inspectionType" multiple placeholder="请选择维保类型" clearable>
+                <el-option
+                    v-for="dict in inspectionTypeOptions"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="维保内容" prop="content">
+              <el-input v-model="form.content" type="textarea" :rows="3" maxlength="500" show-word-limit />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitForm('assigned')">确认下发</el-button>
+      </div>
+    </template>
+  </el-dialog>
+
+  <!-- 设备选择对话框 -->
+  <equipment-select
+      v-model="equipmentSelectVisible"
+      @onSelected="onEquipmentSelected"
+  />
+</template>
+
+<script setup>
+import {ref, reactive, nextTick, watch, getCurrentInstance, defineProps} from 'vue';
+import EquipmentSelect from '@/components/equipmentSelect/single.vue'; // 根据实际情况调整路径
+import { updateGxtOrder } from '@/api/gxt/gxtOrder';
+
+// 获取当前实例
+const { proxy } = getCurrentInstance()
+
+// 定义组件属性
+const props = defineProps({
+  modelValue: {
+    type: Boolean,
+    default: false
+  },
+  data: {
+    type: Object,
+    default: () => ({})
+  },
+  // 维保类型字典
+  inspectionTypeOptions: {
+    type: Array,
+    default: () => ([])
+  },
+});
+
+// 定义事件
+const emit = defineEmits(['update:modelValue', 'success']);
+
+// 响应式数据
+const visible = ref(false);
+const orderRef = ref()
+const form = ref({});
+const optType = ref('add');
+const equipmentSelectVisible = ref(false);
+
+// 表单验证规则
+const rules = ref({
+  pcsDeviceName: [
+    { required: true, message: "风机编号不能为空", trigger: "change" }
+  ],
+  inspectionType: [
+    { required: true, message: "请选择维保类型", trigger: "change" }
+  ],
+  content: [
+    { required: true, message: "维保内容不能为空", trigger: "blur" },
+    { max: 500, message: "维保内容长度不能超过500个字符", trigger: "blur" }
+  ]
+});
+
+// 监听modelValue变化
+watch(() => props.modelValue, (val) => {
+  visible.value = val
+  if (val) {
+    // 初始化表单数据
+    form.value = { ...props.data, selectedMembers: [] }
+  }
+})
+
+// 监听visible变化
+watch(visible, (val) => {
+  emit('update:modelValue', val)
+  if (val) {
+    // 打开对话框后重置表单验证错误
+    proxy.$nextTick(() => {
+      if (orderRef.value) {
+        orderRef.value.clearValidate()
+      }
+    })
+  }
+})
+
+// 重置表单
+function reset() {
+  form.value = {};
+  // 重置验证
+  nextTick(() => {
+    const orderRef = getCurrentInstance()?.refs?.orderRef;
+    if (orderRef && orderRef.resetFields) {
+      orderRef.resetFields();
+    }
+  });
+}
+
+// 取消操作
+function cancel() {
+  visible.value = false;
+}
+
+// 提交表单
+async function submitForm(status) {
+  if (!orderRef.value) return
+  await orderRef.value.validate((valid) => {
+    if (valid) {
+      form.value.workOrderStatus = status;
+      form.value.inspectionType = Array.isArray(form.value.inspectionType) ? form.value.inspectionType.join(',')
+          : form.value.inspectionType || ''
+      updateGxtOrder(form.value).then(response => {
+        proxy.$modal.msgSuccess("下发成功")
+        visible.value = false;
+        emit('success');
+      }).catch(error => {
+
+      });
+    }
+  });
+}
+
+// 设备选择相关方法
+function handleSelectEquipment() {
+  equipmentSelectVisible.value = true;
+}
+
+function onEquipmentSelected(row) {
+  if (row) {
+    // 检查维保中心ID和场站ID是否存在
+    if (!row.maintenanceCenterId) {
+      proxy.$modal.msgError("该设备的维保中心没有对应的部门,请完善部门信息后再更新设备数据!");
+      return;
+    }
+    if (!row.stationId) {
+      proxy.$modal.msgError("该设备的场站没有对应的部门,请完善部门信息后再更新设备数据!");
+      return;
+    }
+    // 更新表单中的设备信息
+    form.value.pcsDeviceId = row.equipmentId
+    form.value.pcsDeviceName = row.equipmentCode
+    form.value.gxtCenterId = row.maintenanceCenterId
+    form.value.gxtCenter = row.maintenanceCenter
+    form.value.pcsStationId = row.stationId
+    form.value.pcsStationName = row.station
+    form.value.brand = row.brand
+    form.value.model = row.model
+  }
+  equipmentSelectVisible.value = false;
+}
+
+defineExpose({
+  visible,
+  form,
+  optType,
+  reset,
+  submitForm
+});
+</script>
+
+<style scoped>
+.quick-select-dropdown {
+  position: absolute;
+  top: calc(100% + 2px);
+  left: 0;
+  right: 0;
+  background: #fff;
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  max-height: 200px;
+  overflow-y: auto;
+  z-index: 1000;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.quick-select-item {
+  padding: 8px 12px;
+  cursor: pointer;
+  transition: background-color 0.2s;
+}
+
+.quick-select-item:hover {
+  background-color: #f5f7fa;
+}
+
+.quick-select-item .mis-no {
+  display: inline-block;
+  margin-right: 10px;
+  font-weight: bold;
+  color: #409eff;
+}
+
+.quick-select-item .mis-info {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-end;
+  flex: 1;
+  margin-left: 10px;
+}
+
+.quick-select-item .mis-info .device {
+  color: #606266;
+  font-size: 12px;
+  margin-bottom: 2px;
+}
+
+.quick-select-item .mis-info .station {
+  color: #909399;
+  font-size: 11px;
+}
+
+.no-data {
+  text-align: center;
+  color: #909399;
+  padding: 10px;
+}
+
+/* 输入框样式调整 */
+:deep(.el-input-group__append) {
+  background-color: #409eff;
+  border-color: #409eff;
+  color: white;
+}
+</style>

+ 709 - 0
ygtx-ui/src/components/repairOrder/addEdit.vue

@@ -0,0 +1,709 @@
+<template>
+  <!-- 新建/编辑工单对话框 -->
+  <el-dialog title="下发" v-model="visible" width="800px" append-to-body @close="cancel">
+    <el-form ref="repairOrderRef" :model="form" :rules="rules" label-width="120px" label-position="top">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="工单编码" prop="workOrderProjectNo" >
+            <el-input v-model="form.workOrderProjectNo" placeholder="自动生成" :disabled="!!form.id" readonly maxlength="50" show-word-limit v-chinese-limit/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="风机编号" prop="pcsDeviceName">
+            <el-input v-model="form.pcsDeviceName" placeholder="请选择风机编号" readonly>
+              <template #append>
+                <el-button @click="handleSelectEquipment" icon="Search"></el-button>
+              </template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="维保中心" prop="gxtCenter">
+            <el-input v-model="form.gxtCenter" placeholder="请选择风机编号自动填充" readonly />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="场站" prop="pcsStationName">
+            <el-input v-model="form.pcsStationName" placeholder="请选择风机编号自动填充" readonly />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="品牌" prop="brand">
+            <el-input v-model="form.brand" placeholder="请选择风机编号自动填充" readonly />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="机型" prop="model">
+            <el-input v-model="form.model" placeholder="请选择风机编号自动填充" readonly />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="发生时间" prop="occurTime">
+            <el-date-picker
+                v-model="form.occurTime"
+                type="datetime"
+                format="YYYY-MM-DD HH:mm"
+                value-format="YYYY-MM-DD HH:mm"
+                placeholder="请选择发生时间"
+                style="width: 100%"
+                :disabled-date="disabledDate"
+                :disabled-time="disabledTime"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="故障代码">
+            <el-input
+                v-model="form.faultCode"
+                placeholder="请输入故障代码或点击选择"
+                maxlength="20"
+                show-word-limit
+                clearable
+                @focus="handleFaultCodeInputFocus"
+                @blur="handleFaultCodeInputBlur"
+                @input="handleFaultCodeInput"
+                @clear="handleFaultCodeClear"
+            />
+            <!-- 故障代码快速检索下拉框 -->
+            <div class="quick-select-dropdown" v-show="showFaultCodeQuickSelect && quickFaultInfoList.length > 0">
+              <div
+                  v-for="item in quickFaultInfoList"
+                  :key="item.id"
+                  class="quick-select-item"
+                  @click="handleFaultCodeQuickSelect(item)">
+                <span class="user-name">{{ item.faultCode }}</span>
+                <span class="user-name">{{ item.faultBarcode }}</span>
+              </div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showFaultCodeQuickSelect && quickFaultInfoList.length === 0 && form.faultCode && !faultInfoLoading">
+              <div>未找到匹配的故障代码</div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showFaultCodeQuickSelect && faultInfoLoading">
+              <div>
+                <i class="el-icon-loading"></i>
+                搜索中...
+              </div>
+            </div>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="故障条文" prop="faultBarcode">
+            <el-input
+                v-model="form.faultBarcode"
+                placeholder="请输入故障条文或点击选择"
+                show-word-limit
+                clearable
+                @focus="handleFaultBarcodeInputFocus"
+                @blur="handleFaultBarcodeInputBlur"
+                @input="handleFaultBarcodeInput"
+                @clear="handleFaultBarcodeClear"
+            />
+            <!-- 故障条文快速检索下拉框 -->
+            <div class="quick-select-dropdown" v-show="showFaultBarcodeQuickSelect && quickFaultBarcodeList.length > 0">
+              <div
+                  v-for="item in quickFaultBarcodeList"
+                  :key="item.id"
+                  class="quick-select-item"
+                  @click="handleFaultBarcodeQuickSelect(item)">
+                <span class="user-name">{{ item.faultBarcode }}</span>
+                <span class="user-name">{{ item.faultCode }}</span>
+              </div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showFaultBarcodeQuickSelect && quickFaultBarcodeList.length === 0 && form.faultBarcode && !faultBarcodeLoading">
+              <div>未找到匹配的故障条文</div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showFaultBarcodeQuickSelect && faultBarcodeLoading">
+              <div>
+                <i class="el-icon-loading"></i>
+                搜索中...
+              </div>
+            </div>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="故障描述" prop="faultDesc">
+            <el-input
+                v-model="form.faultDesc"
+                type="textarea"
+                placeholder="请输入故障描述或点击选择"
+                maxlength="100"
+                show-word-limit
+                :rows="3"
+                clearable
+                @focus="handleFaultDescInputFocus"
+                @blur="handleFaultDescInputBlur"
+                @input="handleFaultDescInput"
+                @clear="handleFaultDescClear"
+            />
+            <!-- 故障描述快速检索下拉框 -->
+            <div class="quick-select-dropdown" v-show="showFaultDescQuickSelect && quickFaultDescList.length > 0">
+              <div
+                  v-for="item in quickFaultDescList"
+                  :key="item.id"
+                  @click="handleFaultDescQuickSelect(item)">
+<!--                  <span class="user-name">{{ item.faultCode }}</span>-->
+<!--                  <span class="user-name">{{ item.faultBarcode }}</span>-->
+                <div class="quick-select-item" v-if="item.faultDescription">
+                <span class="user-name" >{{ item.faultDescription }}</span>
+                </div>
+              </div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showFaultDescQuickSelect && quickFaultDescList.length === 0 && form.faultDesc && !faultDescLoading">
+              <div>未找到匹配的故障描述</div>
+            </div>
+            <div class="quick-select-dropdown no-data" v-show="showFaultDescQuickSelect && faultDescLoading">
+              <div>
+                <i class="el-icon-loading"></i>
+                搜索中...
+              </div>
+            </div>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-col :span="24">
+        <el-form-item label="附件(可选)">
+          <preview :limit="8" v-model="form.orderAttachment" :filesize="5"></preview>
+        </el-form-item>
+      </el-col>
+<!--        <el-row>
+        <el-col :span="24">
+          <el-form-item label="故障描述" prop="faultDesc">
+            <el-input
+                v-model="form.faultDesc"
+                type="textarea"
+                placeholder="请输入故障描述"
+                maxlength="500"
+                show-word-limit
+                :rows="3"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>-->
+      <!-- <el-row>
+        <el-col :span="24">
+          <el-form-item label="图片">
+              <image-upload :limit="10" v-model="form.workUrl" :fileSize="5"></image-upload>
+          </el-form-item>
+        </el-col>
+      </el-row> -->
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确认下发</el-button>
+      </div>
+    </template>
+  </el-dialog>
+
+  <!-- 设备选择对话框 -->
+  <equipment-select
+      v-model="equipmentSelectVisible"
+      @onSelected="onEquipmentSelected"
+  />
+
+  <!-- 通过slot传递可能需要的其他选择器组件 -->
+  <slot name="mis-info-select" v-if="misInfoSelectVisible"></slot>
+</template>
+
+<script setup>
+import {ref, reactive, nextTick, watch, defineProps} from 'vue';
+import EquipmentSelect from '@/components/equipmentSelect/single.vue'; // 根据实际情况调整路径
+import { addRepairOrder, updateRepairOrder } from '@/api/gxt/repairOrder';
+import {listFaultCodes} from "@/api/gxt/faultCodes.js";
+import Preview from "@/components/FileUpload/preview.vue";
+
+// 获取当前实例
+const { proxy } = getCurrentInstance()
+
+// 定义组件属性
+const props = defineProps({
+  modelValue: {
+    type: Boolean,
+    default: false
+  },
+  data: {
+    type: Object,
+    default: () => ({})
+  }
+});
+
+// 定义事件
+const emit = defineEmits(['update:modelValue', 'success']);
+
+// 响应式数据
+const visible = ref(false);
+const repairOrderRef = ref()
+const form = ref({});
+const optType = ref('add');
+const equipmentSelectVisible = ref(false);
+const misInfoSelectVisible = ref(false);
+
+// 表单验证规则
+const rules = ref({
+  // workOrderProjectNo: [
+  //   { required: true, message: "工单编码不能为空", trigger: "blur" }
+  // ],
+  pcsDeviceName: [
+    { required: true, message: "风机编号不能为空", trigger: "change" }
+  ],
+  /*faultCode: [
+    { required: true, message: "请选择故障代码", trigger: "change" }
+  ],*/
+  occurTime: [
+    { required: true, message: "请选择发生时间", trigger: "change" },
+    {
+      validator: (rule, value, callback) => {
+        if (value && new Date(value) > new Date()) {
+          callback(new Error('发生时间不能大于当前时间'));
+        } else {
+          callback();
+        }
+      },
+      trigger: 'change'
+    }
+  ],
+  // maintenanceType: [
+  //   { required: true, message: "请选择检修类型", trigger: "change" }
+  // ],
+  /* priorityType: [
+     { required: true, message: "请选择优先级", trigger: "change" }
+   ],*/
+  faultBarcode: [
+    { required: true, message: "故障条文不能为空", trigger: "change" }
+  ],
+  faultCode: [
+    { required: true, message: "故障代码不能为空", trigger: "change" }
+  ],
+});
+
+// 故障代码快速检索相关响应式数据
+const showFaultCodeQuickSelect = ref(false)
+const showFaultBarcodeQuickSelect = ref(false)
+const showFaultDescQuickSelect = ref(false)
+const quickFaultInfoList = ref([])
+const quickFaultBarcodeList = ref([])
+const quickFaultDescList = ref([])
+const faultInfoLoading = ref(false)
+const faultBarcodeLoading = ref(false)
+const faultDescLoading = ref(false)
+const faultInfoSearchTimer = ref(null)
+const faultBarcodeSearchTimer = ref(null)
+const faultDescSearchTimer = ref(null)
+const allFaultInfoList = ref([]) // 存储所有故障数据用于快速检索
+
+
+// 监听modelValue变化
+watch(() => props.modelValue, (val) => {
+  visible.value = val
+  if (val) {
+    // 初始化表单数据
+    form.value = { ...props.data, selectedMembers: [] }
+  }
+})
+
+// 监听visible变化
+watch(visible, (val) => {
+  emit('update:modelValue', val)
+  if (val) {
+    // 打开对话框后重置表单验证错误
+    proxy.$nextTick(() => {
+      if (repairOrderRef.value) {
+        repairOrderRef.value.clearValidate()
+      }
+    })
+  }
+})
+// 日期禁用函数
+const disabledDate = (time) => {
+  return time.getTime() > Date.now();
+};
+
+const disabledTime = (date) => {
+  // 可根据需要实现时间禁用逻辑
+  return {};
+};
+
+// 重置表单
+function reset() {
+  form.value = {};
+  // 重置验证
+  nextTick(() => {
+    const repairOrderRef = getCurrentInstance()?.refs?.repairOrderRef;
+    if (repairOrderRef && repairOrderRef.resetFields) {
+      repairOrderRef.resetFields();
+    }
+  });
+}
+
+// 取消操作
+function cancel() {
+  visible.value = false;
+  emit('cancel');
+  emit('update:modelValue', false);
+}
+
+// 提交表单
+async function submitForm() {
+  if (!repairOrderRef.value) return
+  await repairOrderRef.value.validate((valid) => {
+    if (valid) {
+      form.value.workOrderStatus = "assigned"
+      updateRepairOrder(form.value).then(response => {
+        proxy.$modal.msgSuccess("下发成功")
+        visible.value = false;
+        emit('success');
+      }).catch(error => {
+
+      });
+    }
+  });
+}
+
+// 设备选择相关方法
+function handleSelectEquipment() {
+  equipmentSelectVisible.value = true;
+}
+
+function onEquipmentSelected(row) {
+  if (row) {
+    // 检查维保中心ID和场站ID是否存在
+    if (!row.maintenanceCenterId) {
+      proxy.$modal.msgError("该设备的维保中心没有对应的部门,请完善部门信息后再更新设备数据!");
+      return;
+    }
+    if (!row.stationId) {
+      proxy.$modal.msgError("该设备的场站没有对应的部门,请完善部门信息后再更新设备数据!");
+      return;
+    }
+    form.value.pcsDeviceId = row.equipmentId
+    form.value.pcsDeviceName = row.equipmentCode
+    form.value.gxtCenterId = row.maintenanceCenterId
+    form.value.gxtCenter = row.maintenanceCenter
+    form.value.pcsStationId = row.stationId
+    form.value.pcsStationName = row.station
+    form.value.brand = row.brand
+    form.value.model = row.model
+  }
+  equipmentSelectVisible.value = false
+}
+
+/** 加载所有故障信息列表 */
+const loadAllFaultInfoList = async () => {
+  try {
+    // 构建查询参数,包含风机编号和场站信息
+    const queryParams = {
+      pageNum: 1,
+      pageSize: 1000, // 获取所有故障代码
+      isActive: 0
+    };
+
+    // 如果表单中有风机编号和场站信息,则添加到查询参数中
+    if (form.value.pcsDeviceName) {
+      queryParams.model = form.value.model;
+    }
+    if (form.value.pcsStationName) {
+      queryParams.station = form.value.pcsStationName;
+    }
+
+    // 加载故障代码数据
+    const response = await listFaultCodes(queryParams);
+    allFaultInfoList.value = response.rows || [];
+  } catch (error) {
+    console.error('加载故障信息列表失败:', error);
+    allFaultInfoList.value = [];
+  }
+}
+
+// 故障代码快速检索方法
+/** 故障代码输入框获取焦点 */
+const handleFaultCodeInputFocus = async () => {
+  if (form.value.faultCode) return
+  showFaultCodeQuickSelect.value = true;
+
+  // 加载所有故障信息
+  await loadAllFaultInfoList();
+
+  // 如果已有输入内容,立即搜索
+  if (form.value.faultCode && form.value.faultCode.trim()) {
+    handleFaultCodeInput(form.value.faultCode);
+  } else {
+    // 如果没有输入内容,显示所有故障信息
+    quickFaultInfoList.value = allFaultInfoList.value;
+  }
+};
+
+/** 故障代码输入框失去焦点 */
+const handleFaultCodeInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showFaultCodeQuickSelect.value = false;
+  }, 200);
+};
+
+/** 故障代码输入事件 - 实时搜索 */
+const handleFaultCodeInput = (value) => {
+  const searchText = value.trim();
+
+  if (!searchText) {
+    quickFaultInfoList.value = [];
+    showFaultCodeQuickSelect.value = false;
+    return;
+  }
+
+  showFaultCodeQuickSelect.value = true;
+
+  // 清除之前的定时器
+  if (faultInfoSearchTimer.value) {
+    clearTimeout(faultInfoSearchTimer.value);
+  }
+
+  // 过滤故障信息列表
+  const lowerKeyword = searchText.toLowerCase();
+  quickFaultInfoList.value = allFaultInfoList.value.filter(item =>
+      (item.faultCode && item.faultCode.toLowerCase().includes(lowerKeyword)) ||
+      (item.faultBarcode && item.faultBarcode.toLowerCase().includes(lowerKeyword)) ||
+      (item.faultDescription && item.faultDescription.toLowerCase().includes(lowerKeyword))
+  );
+
+  // 设置新的定时器,防抖处理(500ms)
+  faultInfoSearchTimer.value = setTimeout(() => {
+    // 由于我们已经在上面过滤了,这里不需要额外的API调用
+  }, 500);
+};
+
+/** 快速选择故障代码 */
+const handleFaultCodeQuickSelect = (item) => {
+  form.value.faultCode = item.faultCode;
+  form.value.faultBarcode = item.faultBarcode;
+  form.value.faultDesc = item.faultDescription;
+  showFaultCodeQuickSelect.value = false;
+};
+
+/** 清空故障代码 */
+const handleFaultCodeClear = () => {
+  form.value.faultCode = '';
+  form.value.faultBarcode = '';
+  form.value.faultDesc = '';
+  quickFaultInfoList.value = [];
+  showFaultCodeQuickSelect.value = false;
+};
+
+// 故障条文快速检索方法
+/** 故障条文输入框获取焦点 */
+const handleFaultBarcodeInputFocus = async () => {
+  if (form.value.faultBarcode) {
+    return
+  }
+  showFaultBarcodeQuickSelect.value = true;
+
+  // 加载所有故障信息
+  await loadAllFaultInfoList();
+
+  // 如果已有输入内容,立即搜索
+  if (form.value.faultBarcode && form.value.faultBarcode.trim()) {
+    handleFaultBarcodeInput(form.value.faultBarcode);
+  } else {
+    // 如果没有输入内容,显示所有故障信息
+    quickFaultBarcodeList.value = allFaultInfoList.value;
+  }
+};
+
+/** 故障条文输入框失去焦点 */
+const handleFaultBarcodeInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showFaultBarcodeQuickSelect.value = false;
+  }, 200);
+};
+
+/** 故障条文输入事件 - 实时搜索 */
+const handleFaultBarcodeInput = (value) => {
+  const searchText = value.trim();
+
+  if (!searchText) {
+    quickFaultBarcodeList.value = [];
+    showFaultBarcodeQuickSelect.value = false;
+    return;
+  }
+
+  showFaultBarcodeQuickSelect.value = true;
+
+  // 清除之前的定时器
+  if (faultBarcodeSearchTimer.value) {
+    clearTimeout(faultBarcodeSearchTimer.value);
+  }
+
+  // 过滤故障信息列表
+  const lowerKeyword = searchText.toLowerCase();
+  quickFaultBarcodeList.value = allFaultInfoList.value.filter(item =>
+      (item.faultCode && item.faultCode.toLowerCase().includes(lowerKeyword)) ||
+      (item.faultBarcode && item.faultBarcode.toLowerCase().includes(lowerKeyword)) ||
+      (item.faultDescription && item.faultDescription.toLowerCase().includes(lowerKeyword))
+  );
+
+  // 设置新的定时器,防抖处理(500ms)
+  faultBarcodeSearchTimer.value = setTimeout(() => {
+    // 由于我们已经在上面过滤了,这里不需要额外的API调用
+  }, 500);
+};
+
+/** 快速选择故障条文 */
+const handleFaultBarcodeQuickSelect = (item) => {
+  form.value.faultCode = item.faultCode;
+  form.value.faultBarcode = item.faultBarcode;
+  form.value.faultDesc = item.faultDescription;
+  showFaultBarcodeQuickSelect.value = false;
+};
+
+/** 清空故障条文 */
+const handleFaultBarcodeClear = () => {
+  form.value.faultCode = '';
+  form.value.faultBarcode = '';
+  form.value.faultDesc = '';
+  quickFaultBarcodeList.value = [];
+  showFaultBarcodeQuickSelect.value = false;
+};
+
+// 故障描述快速检索方法
+/** 故障描述输入框获取焦点 */
+const handleFaultDescInputFocus = async () => {
+  if (form.value.faultDesc) return
+  showFaultDescQuickSelect.value = true;
+
+  // 加载所有故障信息
+  await loadAllFaultInfoList();
+
+  // 如果已有输入内容,立即搜索
+  if (form.value.faultDesc && form.value.faultDesc.trim()) {
+    handleFaultDescInput(form.value.faultDesc);
+  } else {
+    // 如果没有输入内容,显示所有故障信息
+    quickFaultDescList.value = allFaultInfoList.value;
+  }
+};
+
+/** 故障描述输入框失去焦点 */
+const handleFaultDescInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showFaultDescQuickSelect.value = false;
+  }, 200);
+};
+
+/** 故障描述输入事件 - 实时搜索 */
+const handleFaultDescInput = (value) => {
+  const searchText = value.trim();
+
+  if (!searchText) {
+    quickFaultDescList.value = [];
+    showFaultDescQuickSelect.value = false;
+    return;
+  }
+
+  showFaultDescQuickSelect.value = true;
+
+  // 清除之前的定时器
+  if (faultDescSearchTimer.value) {
+    clearTimeout(faultDescSearchTimer.value);
+  }
+
+  // 过滤故障信息列表
+  const lowerKeyword = searchText.toLowerCase();
+  quickFaultDescList.value = allFaultInfoList.value.filter(item =>
+      (item.faultCode && item.faultCode.toLowerCase().includes(lowerKeyword)) ||
+      (item.faultBarcode && item.faultBarcode.toLowerCase().includes(lowerKeyword)) ||
+      (item.faultDescription && item.faultDescription.toLowerCase().includes(lowerKeyword))
+  );
+
+  // 设置新的定时器,防抖处理(500ms)
+  faultDescSearchTimer.value = setTimeout(() => {
+    // 由于我们已经在上面过滤了,这里不需要额外的API调用
+  }, 500);
+};
+
+/** 快速选择故障描述 */
+const handleFaultDescQuickSelect = (item) => {
+  form.value.faultCode = item.faultCode;
+  form.value.faultBarcode = item.faultBarcode;
+  form.value.faultDesc = item.faultDescription;
+  showFaultDescQuickSelect.value = false;
+};
+
+/** 清空故障描述 */
+const handleFaultDescClear = () => {
+  form.value.faultCode = '';
+  form.value.faultBarcode = '';
+  form.value.faultDesc = '';
+  quickFaultDescList.value = [];
+  showFaultDescQuickSelect.value = false;
+};
+
+defineExpose({
+  visible,
+  form,
+  optType,
+  reset,
+  submitForm
+});
+</script>
+
+<style scoped>
+.quick-select-dropdown {
+  position: absolute;
+  top: calc(100% + 2px);
+  left: 0;
+  right: 0;
+  background: #fff;
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  max-height: 200px;
+  overflow-y: auto;
+  z-index: 1000;
+  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;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.quick-select-item:hover {
+  background-color: #f5f7fa;
+}
+.quick-select-item .user-name {
+  display: inline-block;
+  margin-right: 10px;
+}
+
+.no-data {
+  text-align: center;
+  color: #909399;
+  padding: 10px;
+}
+
+/* 输入框样式调整 */
+:deep(.el-input-group__append) {
+  background-color: #409eff;
+  border-color: #409eff;
+  color: white;
+}
+/* 表单中的列间距调整 */
+:deep(.el-col) {
+  padding-left: 5px;
+  padding-right: 5px;
+}
+</style>

+ 249 - 187
ygtx-ui/src/views/gxt/orderMyTodo/index.vue

@@ -224,7 +224,7 @@
                 v-if="scope.row.workOrderStatus === 'to_issue'"
                 type="primary"
                 link
-                @click="handleUpdate(scope.row)"
+                @click="handleWorkOrderUpdate(scope.row)"
                 v-hasPermi="['gxt:maintenance:order:edit']"
             ><i class="fa fa-user-plus"></i>下发</el-button>
 
@@ -1035,196 +1035,210 @@
       </template>
     </el-dialog>
 
+    <!-- 维修下发工单对话框 -->
+    <AddEditRepairOrder
+        v-model="assignRepairDialogVisible"
+        :data="assignRepairForm"
+        @success="handleAddEditSuccess"
+    />
+
+    <!-- 维保下发工单对话框 -->
+    <AddEditWorkOrder
+        v-model="assignWorkDialogVisible"
+        :data="assignWorkForm"
+        :inspection-type-options="gxt_inspection_type"
+        @success="handleAddEditSuccess"
+    />
 
     <!-- 维修工单下发对话框 -->
-    <el-dialog title="下发" v-model="assignRepairDialogVisible" width="800px" append-to-body >
-      <el-form ref="repairOrderRef" :model="assignRepairForm" :rules="assignRepairRules" label-width="120px" label-position="top">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="工单编码" prop="workOrderProjectNo" >
-              <el-input v-model="assignRepairForm.workOrderProjectNo" placeholder="请输入工单编码" disabled readonly maxlength="50" show-word-limit v-chinese-limit/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="风机编号" prop="pcsDeviceName">
-              <el-input v-model="assignRepairForm.pcsDeviceName" placeholder="请选择风机编号" readonly>
-                <template #append>
-                  <el-button @click="handleSelectEquipment" icon="Search"></el-button>
-                </template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="维保中心" prop="gxtCenter">
-              <el-input v-model="assignRepairForm.gxtCenter" placeholder="请选择风机编号自动填充" readonly />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="场站" prop="pcsStationName">
-              <el-input v-model="assignRepairForm.pcsStationName" placeholder="请选择风机编号自动填充" readonly />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="品牌" prop="brand">
-              <el-input v-model="assignRepairForm.brand" placeholder="请选择风机编号自动填充" readonly />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="机型" prop="model">
-              <el-input v-model="assignRepairForm.model" placeholder="请选择风机编号自动填充" readonly />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="发生时间" prop="occurTime">
-              <el-date-picker
-                  v-model="assignRepairForm.occurTime"
-                  type="datetime"
-                  format="YYYY-MM-DD HH:mm"
-                  value-format="YYYY-MM-DD HH:mm"
-                  placeholder="请选择发生时间"
-                  style="width: 100%"
-                  :disabled-date="disabledDate"
-                  :disabled-time="disabledTime"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="故障代码" prop="faultCode">
-              <el-input
-                  v-model="assignRepairForm.faultCode"
-                  placeholder="请输入故障代码"
-                  maxlength="20"
-                  show-word-limit
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="故障信息" prop="faultBarcode">
-              <el-input
-                  v-model="assignRepairForm.faultBarcode"
-                  type="textarea"
-                  placeholder="请输入故障信息"
-                  maxlength="100"
-                  show-word-limit
-                  :rows="3"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button @click="assignRepairDialogVisible = false">取 消</el-button>
-          <el-button type="primary" @click="submitFormAndIssue">确认下发</el-button>
-        </div>
-      </template>
-    </el-dialog>
+<!--    <el-dialog title="下发" v-model="assignRepairDialogVisible" width="800px" append-to-body >-->
+<!--      <el-form ref="repairOrderRef" :model="assignRepairForm" :rules="assignRepairRules" label-width="120px" label-position="top">-->
+<!--        <el-row>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="工单编码" prop="workOrderProjectNo" >-->
+<!--              <el-input v-model="assignRepairForm.workOrderProjectNo" placeholder="请输入工单编码" disabled readonly maxlength="50" show-word-limit v-chinese-limit/>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="风机编号" prop="pcsDeviceName">-->
+<!--              <el-input v-model="assignRepairForm.pcsDeviceName" placeholder="请选择风机编号" readonly>-->
+<!--                <template #append>-->
+<!--                  <el-button @click="handleSelectEquipment" icon="Search"></el-button>-->
+<!--                </template>-->
+<!--              </el-input>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+<!--        <el-row>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="维保中心" prop="gxtCenter">-->
+<!--              <el-input v-model="assignRepairForm.gxtCenter" placeholder="请选择风机编号自动填充" readonly />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="场站" prop="pcsStationName">-->
+<!--              <el-input v-model="assignRepairForm.pcsStationName" placeholder="请选择风机编号自动填充" readonly />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+<!--        <el-row>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="品牌" prop="brand">-->
+<!--              <el-input v-model="assignRepairForm.brand" placeholder="请选择风机编号自动填充" readonly />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="机型" prop="model">-->
+<!--              <el-input v-model="assignRepairForm.model" placeholder="请选择风机编号自动填充" readonly />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+<!--        <el-row>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="发生时间" prop="occurTime">-->
+<!--              <el-date-picker-->
+<!--                  v-model="assignRepairForm.occurTime"-->
+<!--                  type="datetime"-->
+<!--                  format="YYYY-MM-DD HH:mm"-->
+<!--                  value-format="YYYY-MM-DD HH:mm"-->
+<!--                  placeholder="请选择发生时间"-->
+<!--                  style="width: 100%"-->
+<!--                  :disabled-date="disabledDate"-->
+<!--                  :disabled-time="disabledTime"-->
+<!--              />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="故障代码" prop="faultCode">-->
+<!--              <el-input-->
+<!--                  v-model="assignRepairForm.faultCode"-->
+<!--                  placeholder="请输入故障代码"-->
+<!--                  maxlength="20"-->
+<!--                  show-word-limit-->
+<!--              />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+<!--        <el-row>-->
+<!--          <el-col :span="24">-->
+<!--            <el-form-item label="故障信息" prop="faultBarcode">-->
+<!--              <el-input-->
+<!--                  v-model="assignRepairForm.faultBarcode"-->
+<!--                  type="textarea"-->
+<!--                  placeholder="请输入故障信息"-->
+<!--                  maxlength="100"-->
+<!--                  show-word-limit-->
+<!--                  :rows="3"-->
+<!--              />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+<!--      </el-form>-->
+<!--      <template #footer>-->
+<!--        <div class="dialog-footer">-->
+<!--          <el-button @click="assignRepairDialogVisible = false">取 消</el-button>-->
+<!--          <el-button type="primary" @click="submitFormAndIssue">确认下发</el-button>-->
+<!--        </div>-->
+<!--      </template>-->
+<!--    </el-dialog>-->
 
     <!-- 维保工单下发对话框 -->
-    <el-dialog title="下发" v-model="assignWorkDialogVisible" width="800px" append-to-body>
-      <div style="max-height: 500px; overflow-y: auto; padding-right: 10px;">
-        <el-form ref="workOrderRef" :model="assignWorkForm" :rules="assignWorkRules" label-width="120px" label-position="top">
-          <el-row :gutter="20">
-            <el-col :span="12">
-              <el-form-item label="工单编码" prop="workOrderProjectNo">
-                <el-input v-model="assignWorkForm.workOrderProjectNo" maxlength="50" show-word-limit v-chinese-limit readonly/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="风机编号" prop="pcsDeviceName">
-                <el-input v-model="assignWorkForm.pcsDeviceName" readonly>
-                  <template #append>
-                    <el-button @click="handleSelectEquipment" icon="Search"></el-button>
-                  </template>
-                </el-input>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="20">
-            <el-col :span="12">
-              <el-form-item label="维保中心" prop="gxtCenter">
-                <el-input v-model="assignWorkForm.gxtCenter" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="场站" prop="pcsStationName">
-                <el-input v-model="assignWorkForm.pcsStationName" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="20">
-            <el-col :span="12">
-              <el-form-item label="品牌" prop="brand">
-                <el-input v-model="assignWorkForm.brand" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="机型" prop="model">
-                <el-input v-model="assignWorkForm.model" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="20">
-            <el-col :span="12">
-              <el-form-item label="MIS工单编码" prop="misNo">
-                <el-input v-model="assignWorkForm.misNo"
-                          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 && assignWorkForm.misNo && !misNoLoading">
-                  <div>未找到匹配的MIS工单</div>
-                </div>
-                <div class="quick-select-dropdown no-data" v-show="showMisNoQuickSelect && misNoLoading">
-                  <div>
-                    <i class="el-icon-loading"></i>
-                    搜索中...
-                  </div>
-                </div>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="20">
-            <el-col :span="24">
-              <el-form-item label="维保内容" prop="content">
-                <el-input v-model="assignWorkForm.content" type="textarea" :rows="3" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-      </div>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button @click="assignWorkDialogVisible = false">取 消</el-button>
-          <el-button type="primary" @click="submitWorkFormAndIssue">确认下发</el-button>
-        </div>
-      </template>
-    </el-dialog>
+<!--    <el-dialog title="下发" v-model="assignWorkDialogVisible" width="800px" append-to-body>-->
+<!--      <div style="max-height: 500px; overflow-y: auto; padding-right: 10px;">-->
+<!--        <el-form ref="workOrderRef" :model="assignWorkForm" :rules="assignWorkRules" label-width="120px" label-position="top">-->
+<!--          <el-row :gutter="20">-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="工单编码" prop="workOrderProjectNo">-->
+<!--                <el-input v-model="assignWorkForm.workOrderProjectNo" maxlength="50" show-word-limit v-chinese-limit readonly/>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="风机编号" prop="pcsDeviceName">-->
+<!--                <el-input v-model="assignWorkForm.pcsDeviceName" readonly>-->
+<!--                  <template #append>-->
+<!--                    <el-button @click="handleSelectEquipment" icon="Search"></el-button>-->
+<!--                  </template>-->
+<!--                </el-input>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--          <el-row :gutter="20">-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="维保中心" prop="gxtCenter">-->
+<!--                <el-input v-model="assignWorkForm.gxtCenter" readonly />-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="场站" prop="pcsStationName">-->
+<!--                <el-input v-model="assignWorkForm.pcsStationName" readonly />-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--          <el-row :gutter="20">-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="品牌" prop="brand">-->
+<!--                <el-input v-model="assignWorkForm.brand" readonly />-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="机型" prop="model">-->
+<!--                <el-input v-model="assignWorkForm.model" readonly />-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--          <el-row :gutter="20">-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="MIS工单编码" prop="misNo">-->
+<!--                <el-input v-model="assignWorkForm.misNo"-->
+<!--                          placeholder="请输入MIS工单编码或点击搜索选择"-->
+<!--                          clearable-->
+<!--                          @focus="handleMisNoInputFocus"-->
+<!--                          @blur="handleMisNoInputBlur"-->
+<!--                          @input="handleMisNoInput"-->
+<!--                          @clear="handleMisNoClear"-->
+<!--                >-->
+<!--                  <template #append>-->
+<!--                    <el-button @click="handleSelectMisInfo" icon="Search"></el-button>-->
+<!--                  </template>-->
+<!--                </el-input>-->
+<!--                &lt;!&ndash; 快速检索下拉框 &ndash;&gt;-->
+<!--                <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 && assignWorkForm.misNo && !misNoLoading">-->
+<!--                  <div>未找到匹配的MIS工单</div>-->
+<!--                </div>-->
+<!--                <div class="quick-select-dropdown no-data" v-show="showMisNoQuickSelect && misNoLoading">-->
+<!--                  <div>-->
+<!--                    <i class="el-icon-loading"></i>-->
+<!--                    搜索中...-->
+<!--                  </div>-->
+<!--                </div>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--          <el-row :gutter="20">-->
+<!--            <el-col :span="24">-->
+<!--              <el-form-item label="维保内容" prop="content">-->
+<!--                <el-input v-model="assignWorkForm.content" type="textarea" :rows="3" readonly />-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--        </el-form>-->
+<!--      </div>-->
+<!--      <template #footer>-->
+<!--        <div class="dialog-footer">-->
+<!--          <el-button @click="assignWorkDialogVisible = false">取 消</el-button>-->
+<!--          <el-button type="primary" @click="submitWorkFormAndIssue">确认下发</el-button>-->
+<!--        </div>-->
+<!--      </template>-->
+<!--    </el-dialog>-->
 
     <!-- MIS选择组件 -->
 <!--    <MisInfoSelectSingle :key="commonKey" v-model="misInfoSelectVisible" @onSelected="onMisInfoSelected" :pcsStationName="finalizeFormData.pcsStationName || assignWorkForm.pcsStationName" :pcsDeviceName="finalizeFormData.pcsDeviceName || assignWorkForm.pcsDeviceName" :workOrderStatus="'结束'"></MisInfoSelectSingle>-->
@@ -1363,6 +1377,8 @@ import ApproveDialog from "@/components/gxtOrder/approve.vue";
 import ShutdownDialog from "@/components/gxtOrder/shutdown.vue";
 import {ElMessageBox} from "element-plus";
 import BackfillFinalizeDialog from "@/components/gxtOrder/backfillFinalize.vue";
+import AddEditRepairOrder from "@/components/repairOrder/addEdit.vue"
+import AddEditWorkOrder from "@/components/gxtOrder/addEdit.vue"
 
 
 const { proxy } = getCurrentInstance();
@@ -2529,6 +2545,31 @@ function handleUpdate(row) {
   });
 }
 
+function handleWorkOrderUpdate(row) {
+  getOrderInfo(row.orderType, row.id).then(response => {
+    assignWorkForm.value = response.data
+    // 关键:处理 inspectionType 逗号字符串 -> 数组,支持多选回填
+    if (assignWorkForm.value.inspectionType) {
+      // 1. 分割字符串为数组(去除首尾空格,避免空值)
+      assignWorkForm.value.inspectionType = assignWorkForm.value.inspectionType
+          .toString() // 确保是字符串类型,防止报错
+          .trim() // 去除首尾空格
+          .split(',') // 按逗号分割为数组
+          .filter(item => item) // 过滤空字符串(避免分割后出现 [""] 无效值)
+    } else {
+      // 无数据时赋值为空数组,避免 v-model 绑定非数组类型
+      assignWorkForm.value.inspectionType = []
+    }
+    if (assignWorkForm.value.orderEntryType == '2') {
+      // backfillDialogVisible.value = true
+    } else {
+      assignWorkDialogVisible.value = true;
+    }
+    commonKey++
+  })
+}
+
+
 /** 打开设备选择对话框 */
 function handleSelectEquipment() {
   equipmentSelectVisible.value = true
@@ -3030,6 +3071,27 @@ function handleShutdownSuccess() {
   shutdownDialogVisible.value = false
   getList()
 }
+
+/** 处理新增/编辑成功事件 */
+function handleAddEditSuccess() {
+  assignWorkDialogVisible.value = false;
+  assignRepairDialogVisible.value = false;
+  // resetTimeOutOrder();
+  getList();
+}
+
+/** 处理新增/编辑提交事件 */
+function handleAddEditSubmit() {
+  // 提交后的处理逻辑
+  openDialog.value = false;
+  resetTimeOutOrder();
+  getList();
+}
+
+/** 处理新增/编辑取消事件 */
+function handleAddEditCancel() {
+  // 取消后的处理逻辑
+}
 </script>
 
 <style scoped>

+ 0 - 3
ygtx-ui/src/views/gxt/repairOrder/index.vue

@@ -873,9 +873,6 @@
       @select-mis-info="handleSelectMisInfo"
       :common-key = "commonKey"
     >
-<!--      <template #mis-info-select>-->
-<!--        <MisInfoSelectSingle :key="commonKey" v-model="misInfoSelectVisible" @onSelected="onMisInfoSelected" :pcsStationName="finalizeFormData.pcsStationName" :pcsDeviceName="finalizeFormData.pcsDeviceName" :workOrderStatus="'结束'"></MisInfoSelectSingle>-->
-<!--      </template>-->
     </FinalizeDialog>
 
     <!-- 复启对话框组件 -->