|
|
@@ -336,7 +336,7 @@
|
|
|
v-hasPermi="['gxt:repairOrder:finalize']"
|
|
|
><i class="fa fa-check"></i>结单</el-button>
|
|
|
<el-button
|
|
|
- v-if="scope.row.workOrderStatus === 'to_finish' && (scope.row.teamLeaderId == userStore.id || userStore.roles.includes('admin'))"
|
|
|
+ v-if="scope.row.workOrderStatus === 'to_finish'"
|
|
|
type="primary"
|
|
|
link
|
|
|
@click="handleReset(scope.row)"
|
|
|
@@ -463,24 +463,110 @@
|
|
|
<el-form-item label="故障代码" prop="faultCode">
|
|
|
<el-input
|
|
|
v-model="form.faultCode"
|
|
|
- placeholder="请输入故障代码"
|
|
|
+ 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 }} | {{ item.faultDescription }}</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-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 }} | {{ item.faultDescription }}</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="请输入故障信息"
|
|
|
+ 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"
|
|
|
+ class="quick-select-item"
|
|
|
+ @click="handleFaultDescQuickSelect(item)">
|
|
|
+ <span class="user-name">{{ item.faultDescription }}</span>
|
|
|
+ <span class="user-name">{{ item.faultCode }} | {{ item.faultBarcode }}</span>
|
|
|
+ </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>
|
|
|
@@ -561,11 +647,11 @@
|
|
|
<el-form-item label="故障代码"><el-input v-model="assignForm.faultCode" disabled /></el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="24">
|
|
|
- <el-form-item label="故障信息">
|
|
|
+ <el-form-item label="故障条纹">
|
|
|
<el-input
|
|
|
v-model="assignForm.faultBarcode"
|
|
|
type="textarea"
|
|
|
- placeholder="请输入故障信息"
|
|
|
+ placeholder="请输入故障条纹"
|
|
|
maxlength="100"
|
|
|
show-word-limit
|
|
|
:rows="3"
|
|
|
@@ -681,11 +767,11 @@
|
|
|
<el-form-item label="故障代码"><el-input v-model="acceptForm.faultCode" disabled /></el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="24">
|
|
|
- <el-form-item label="故障信息">
|
|
|
+ <el-form-item label="故障条纹">
|
|
|
<el-input
|
|
|
v-model="acceptForm.faultBarcode"
|
|
|
type="textarea"
|
|
|
- placeholder="请输入故障信息"
|
|
|
+ placeholder="请输入故障条纹"
|
|
|
maxlength="100"
|
|
|
show-word-limit
|
|
|
:rows="3"
|
|
|
@@ -830,11 +916,11 @@
|
|
|
<el-form-item label="故障代码"><el-input v-model="ratingForm.faultCode" disabled /> </el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="24">
|
|
|
- <el-form-item label="故障信息">
|
|
|
+ <el-form-item label="故障条纹">
|
|
|
<el-input
|
|
|
v-model="ratingForm.faultBarcode"
|
|
|
type="textarea"
|
|
|
- placeholder="请输入故障信息"
|
|
|
+ placeholder="请输入故障条纹"
|
|
|
maxlength="100"
|
|
|
show-word-limit
|
|
|
:rows="3"
|
|
|
@@ -1068,11 +1154,11 @@
|
|
|
<el-form-item label="故障代码"><el-input v-model="invalidateForm.faultCode" disabled /></el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="24">
|
|
|
- <el-form-item label="故障信息">
|
|
|
+ <el-form-item label="故障条纹">
|
|
|
<el-input
|
|
|
v-model="invalidateForm.faultBarcode"
|
|
|
type="textarea"
|
|
|
- placeholder="请输入故障信息"
|
|
|
+ placeholder="请输入故障条纹"
|
|
|
maxlength="100"
|
|
|
show-word-limit
|
|
|
:rows="3"
|
|
|
@@ -1112,6 +1198,7 @@
|
|
|
:work-area-options="gxt_work_area"
|
|
|
:return-type-options="gxt_return_type"
|
|
|
:accept-return-type-options="gxt_accept_return_type"
|
|
|
+ :finalize-method-options="gxt_finalize_method"
|
|
|
/>
|
|
|
|
|
|
<!-- 审批对话框组件 -->
|
|
|
@@ -1224,9 +1311,9 @@ import ViewDialog from '@/components/repairOrder/view.vue'
|
|
|
import ApproveDialog from '@/components/repairOrder/approve.vue'
|
|
|
const { proxy } = getCurrentInstance()
|
|
|
const { gxt_maintenance_type, gxt_work_order_status, gxt_order_priority_type,gxt_repair_order_flow_action_type,
|
|
|
- gxt_order_suspend_reason,gxt_repair_method,gxt_reset_method,gxt_return_type,gxt_info_entry,gxt_work_area, gxt_accept_return_type }
|
|
|
+ gxt_order_suspend_reason,gxt_repair_method,gxt_reset_method,gxt_return_type,gxt_info_entry,gxt_work_area, gxt_accept_return_type,gxt_finalize_method }
|
|
|
= proxy.useDict("gxt_maintenance_type", "gxt_work_order_status", "gxt_order_priority_type","gxt_repair_order_flow_action_type",
|
|
|
- "gxt_order_suspend_reason","gxt_repair_method","gxt_reset_method","gxt_return_type","gxt_info_entry","gxt_work_area","gxt_accept_return_type")
|
|
|
+ "gxt_order_suspend_reason","gxt_repair_method","gxt_reset_method","gxt_return_type","gxt_info_entry","gxt_work_area","gxt_accept_return_type","gxt_finalize_method")
|
|
|
|
|
|
// 数据列表相关
|
|
|
const repairOrderList = ref([])
|
|
|
@@ -1350,6 +1437,21 @@ const teamLeaderSearchTimer = ref(null)
|
|
|
const allUserList = ref([]) // 存储所有设备数据用于快速检索
|
|
|
const lastLoadedCenterId = ref(null) // Track last loaded maintenance center ID
|
|
|
|
|
|
+// 故障代码快速检索相关响应式数据
|
|
|
+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([]) // 存储所有故障数据用于快速检索
|
|
|
+
|
|
|
const forceKey = ref(0)
|
|
|
|
|
|
const userStore = useUserStore();
|
|
|
@@ -1625,6 +1727,252 @@ const handleMisNoInput = (value) => {
|
|
|
}, 500)
|
|
|
}
|
|
|
|
|
|
+/** 加载所有故障信息列表 */
|
|
|
+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 () => {
|
|
|
+ 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 () => {
|
|
|
+ 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 () => {
|
|
|
+ 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;
|
|
|
+};
|
|
|
+
|
|
|
/** 搜索MIS工单列表 */
|
|
|
const searchMisNoList = async (keyword) => {
|
|
|
if (!keyword) {
|
|
|
@@ -1759,7 +2107,10 @@ const rules = ref({
|
|
|
{ required: true, message: "请选择优先级", trigger: "change" }
|
|
|
],*/
|
|
|
faultBarcode: [
|
|
|
- { required: true, message: "故障信息不能为空", trigger: "change" }
|
|
|
+ { required: true, message: "故障条纹不能为空", trigger: "change" }
|
|
|
+ ],
|
|
|
+ faultCode: [
|
|
|
+ { required: true, message: "故障代码不能为空", trigger: "change" }
|
|
|
],
|
|
|
})
|
|
|
|
|
|
@@ -2102,6 +2453,20 @@ onMounted(() => {
|
|
|
window.addEventListener('resize', handleResize)
|
|
|
})
|
|
|
|
|
|
+// 监听风机编号和场站变化,自动刷新故障信息列表
|
|
|
+// 监听风机编号变化,清空故障相关字段
|
|
|
+watch(() => form.value.pcsDeviceName, (newDeviceName, oldDeviceName) => {
|
|
|
+ if (newDeviceName !== oldDeviceName) {
|
|
|
+ // 清空故障相关字段,因为新设备可能需要选择不同的故障信息
|
|
|
+ form.value.faultCode = '';
|
|
|
+ form.value.faultBarcode = '';
|
|
|
+ form.value.faultDesc = '';
|
|
|
+
|
|
|
+ // 同时清空故障信息列表,以便下次获取焦点时使用新的设备信息重新加载
|
|
|
+ allFaultInfoList.value = [];
|
|
|
+ }
|
|
|
+}, { immediate: false });
|
|
|
+
|
|
|
// 监听路由变化,当从其他路由跳转到当前路由时重新解析参数
|
|
|
const route = useRoute();
|
|
|
watch(() => route.query, (newQuery, oldQuery) => {
|
|
|
@@ -2493,10 +2858,10 @@ function confirmExport() {
|
|
|
/** 故障代码变化处理 */
|
|
|
function handleFaultCodeChange(value) {
|
|
|
if (value === '无') {
|
|
|
- // 当选择"无"时,故障信息设置为"-"并允许手动输入
|
|
|
+ // 当选择"无"时,故障条纹设置为"-"并允许手动输入
|
|
|
form.value.faultBarcode = "-";
|
|
|
} else {
|
|
|
- // 当选择具体的故障代码时,自动填充故障信息并设为只读
|
|
|
+ // 当选择具体的故障代码时,自动填充故障条纹并设为只读
|
|
|
const selectedFaultCode = faultCodeOptions.value.find(item => item.faultCode === value);
|
|
|
if (selectedFaultCode) {
|
|
|
form.value.faultBarcode = selectedFaultCode.faultBarcode || "";
|
|
|
@@ -3009,29 +3374,44 @@ function handleFinalize(row, method) {
|
|
|
if (misInfo.length > 0 && misInfo.length == 1) {
|
|
|
// 有工作票号提示
|
|
|
if (misInfo[0].workPermitNum) {
|
|
|
- finalizeFormData.value.misOrderNo = misInfo[0].misNo
|
|
|
- finalizeFormData.value.realStartTime = misInfo[0].realStartTime
|
|
|
- finalizeFormData.value.realEndTime = misInfo[0].realEndTime
|
|
|
- finalizeFormData.value.workPermitNum = misInfo[0].workPermitNum
|
|
|
- listWorkPerson({misNo: misInfo[0].misNo}).then(response => {
|
|
|
- finalizeFormData.value.repairOrderPersonList = response.rows;
|
|
|
- if (finalizeFormData.value.repairOrderPersonList) {
|
|
|
- // 查询负责人信息并回填
|
|
|
- for (const person of finalizeFormData.value.repairOrderPersonList) {
|
|
|
- // 严格判断isLeader为1(兼容数字/字符串类型)
|
|
|
- if (person.isLeader === 1 || person.isLeader === '1') {
|
|
|
- finalizeFormData.value.teamLeaderName = person.nickName;
|
|
|
- break; // 找到后立即停止循环
|
|
|
+ // 查询MIS工单是否已存在
|
|
|
+ listRepairOrder({pageNum: 1, pageSize: 10, misOrderNo: misInfo[0].misNo }).then(response => {
|
|
|
+ const gxtOrders = response.rows
|
|
|
+ if (gxtOrders.length == 0) {
|
|
|
+ finalizeFormData.value.misOrderNo = misInfo[0].misNo
|
|
|
+ finalizeFormData.value.realStartTime = misInfo[0].realStartTime
|
|
|
+ finalizeFormData.value.realEndTime = misInfo[0].realEndTime
|
|
|
+ finalizeFormData.value.workPermitNum = misInfo[0].workPermitNum
|
|
|
+ listWorkPerson({misNo: misInfo[0].misNo}).then(response => {
|
|
|
+ finalizeFormData.value.repairOrderPersonList = response.rows;
|
|
|
+ if (finalizeFormData.value.repairOrderPersonList) {
|
|
|
+ // 查询负责人信息并回填
|
|
|
+ for (const person of finalizeFormData.value.repairOrderPersonList) {
|
|
|
+ // 严格判断isLeader为1(兼容数字/字符串类型)
|
|
|
+ if (person.isLeader === 1 || person.isLeader === '1') {
|
|
|
+ finalizeFormData.value.teamLeaderName = person.nickName;
|
|
|
+ break; // 找到后立即停止循环
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const nickNames = finalizeFormData.value.repairOrderPersonList
|
|
|
+ .map(person => person.nickName)
|
|
|
+ .join(',');
|
|
|
+ finalizeFormData.value.workGroupMemberName = nickNames
|
|
|
+ // finishDialogVisible.value = true
|
|
|
}
|
|
|
- }
|
|
|
- const nickNames = finalizeFormData.value.repairOrderPersonList
|
|
|
- .map(person => person.nickName)
|
|
|
- .join(',');
|
|
|
- finalizeFormData.value.workGroupMemberName = nickNames
|
|
|
- // finishDialogVisible.value = true
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ ElMessageBox.confirm('未找到匹配的MIS工单,请确认风机停复机时间是否已录入工效通系统或请进入工作票录入方式。', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ showCancelButton: false,
|
|
|
+ type: 'warning'
|
|
|
+ }).then(function() {
|
|
|
+ finalizeFormData.value.infoEntry = '2'
|
|
|
+ infoEntryDisabled.value = true
|
|
|
+ }).then(() => {
|
|
|
+ }).catch(() => {})
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
} else { // 无工作票号提示
|
|
|
ElMessageBox.confirm('已匹配到MIS工单,但未关联工作票号,系统无法自动结单,请进入工作票录入方式。', '提示', {
|
|
|
confirmButtonText: '确定',
|