|
@@ -844,6 +844,10 @@ const workloadDialogVisible = ref(false);
|
|
|
const workloadList = ref<any[]>([]);
|
|
const workloadList = ref<any[]>([]);
|
|
|
const hasInitialWorkload = ref(false);
|
|
const hasInitialWorkload = ref(false);
|
|
|
|
|
|
|
|
|
|
+// 跟踪设备列表是否为空
|
|
|
|
|
+const hasDevicesAvailable = ref(false); // 默认假设有设备,等接口返回后更新
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
// 设计工作量错误信息
|
|
// 设计工作量错误信息
|
|
|
const workloadDesignError = ref('');
|
|
const workloadDesignError = ref('');
|
|
|
|
|
|
|
@@ -1075,7 +1079,7 @@ const taskFormRules = computed(() => {
|
|
|
],
|
|
],
|
|
|
workloadUnit: [{ required: currentTask.value.platformWell !== '1', message: '工作量单位不能为空', trigger: 'change' }],
|
|
workloadUnit: [{ required: currentTask.value.platformWell !== '1', message: '工作量单位不能为空', trigger: 'change' }],
|
|
|
deptIds: [{ required: true, message: '施工队伍不能为空', trigger: 'change' }],
|
|
deptIds: [{ required: true, message: '施工队伍不能为空', trigger: 'change' }],
|
|
|
- deviceIds: [{ required: true, message: '施工设备不能为空', trigger: 'change' }],
|
|
|
|
|
|
|
+ deviceIds: [{ required: hasDevicesAvailable.value, message: '施工设备不能为空', trigger: 'change' }],
|
|
|
responsiblePerson: [
|
|
responsiblePerson: [
|
|
|
{
|
|
{
|
|
|
required: true,
|
|
required: true,
|
|
@@ -1232,6 +1236,9 @@ const openDeviceDialogForForm = async () => {
|
|
|
};
|
|
};
|
|
|
const data = await IotDeviceApi.getDevicesByDepts(params);
|
|
const data = await IotDeviceApi.getDevicesByDepts(params);
|
|
|
|
|
|
|
|
|
|
+ // 更新 hasDevicesAvailable 状态
|
|
|
|
|
+ hasDevicesAvailable.value = data && data.length > 0;
|
|
|
|
|
+
|
|
|
// 更新设备映射表
|
|
// 更新设备映射表
|
|
|
const newDeviceMap = {...deviceMap.value};
|
|
const newDeviceMap = {...deviceMap.value};
|
|
|
data.forEach(device => {
|
|
data.forEach(device => {
|
|
@@ -1242,9 +1249,16 @@ const openDeviceDialogForForm = async () => {
|
|
|
filteredDeviceList.value = data;
|
|
filteredDeviceList.value = data;
|
|
|
deviceDialogVisible.value = true;
|
|
deviceDialogVisible.value = true;
|
|
|
|
|
|
|
|
|
|
+ // 如果没有设备可用,显示提示信息
|
|
|
|
|
+ if (!hasDevicesAvailable.value) {
|
|
|
|
|
+ ElMessage.info('当前施工队伍下没有可用设备,设备字段为非必填项');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
ElMessage.error('获取设备列表失败');
|
|
ElMessage.error('获取设备列表失败');
|
|
|
console.error('获取设备列表失败:', error);
|
|
console.error('获取设备列表失败:', error);
|
|
|
|
|
+ // 如果获取失败,也设为非必填,避免用户无法提交
|
|
|
|
|
+ hasDevicesAvailable.value = false;
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1847,6 +1861,34 @@ const open = async () => {
|
|
|
currentTask.value = JSON.parse(JSON.stringify(tableData.value[0]));
|
|
currentTask.value = JSON.parse(JSON.stringify(tableData.value[0]));
|
|
|
isNewTask.value = false;
|
|
isNewTask.value = false;
|
|
|
|
|
|
|
|
|
|
+ // 如果当前任务有施工队伍,立即查询设备并更新 hasDevicesAvailable
|
|
|
|
|
+ if (currentTask.value.deptIds && currentTask.value.deptIds.length > 0) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const params = {
|
|
|
|
|
+ deptIds: currentTask.value.deptIds
|
|
|
|
|
+ };
|
|
|
|
|
+ const deviceData = await IotDeviceApi.getDevicesByDepts(params);
|
|
|
|
|
+
|
|
|
|
|
+ // 更新 hasDevicesAvailable 状态
|
|
|
|
|
+ hasDevicesAvailable.value = deviceData && deviceData.length > 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 更新设备列表和映射表(如果有设备)
|
|
|
|
|
+ if (hasDevicesAvailable.value) {
|
|
|
|
|
+ deviceList.value = deviceData;
|
|
|
|
|
+ deviceMap.value = {};
|
|
|
|
|
+ deviceData.forEach(device => {
|
|
|
|
|
+ deviceMap.value[device.id] = device;
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('初始化查询设备失败:', error);
|
|
|
|
|
+ hasDevicesAvailable.value = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果没有施工队伍,默认没有设备可用
|
|
|
|
|
+ hasDevicesAvailable.value = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 处理平台井数据
|
|
// 处理平台井数据
|
|
|
// 将数字类型的 platformWell 转换为字符串类型
|
|
// 将数字类型的 platformWell 转换为字符串类型
|
|
|
currentTask.value.platformWell = currentTask.value.platformWell?.toString() || '0';
|
|
currentTask.value.platformWell = currentTask.value.platformWell?.toString() || '0';
|
|
@@ -1982,7 +2024,8 @@ const validateAllRows = (): boolean => {
|
|
|
allValid = false;
|
|
allValid = false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (!row.deviceIds || row.deviceIds.length === 0) {
|
|
|
|
|
|
|
+ // 修改:只有当有设备可用时才验证设备字段
|
|
|
|
|
+ if (hasDevicesAvailable.value && (!row.deviceIds || row.deviceIds.length === 0)) {
|
|
|
allValid = false;
|
|
allValid = false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2700,22 +2743,50 @@ watch(() => currentTask.value.workloadDesign, () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 监听当前任务的变化,设置默认展开的keys
|
|
// 监听当前任务的变化,设置默认展开的keys
|
|
|
-watch(() => currentTask.value.deptIds, (newVal) => {
|
|
|
|
|
|
|
+watch(() => currentTask.value.deptIds, (newVal, oldVal) => {
|
|
|
if (newVal && newVal.length > 0) {
|
|
if (newVal && newVal.length > 0) {
|
|
|
defaultExpandedKeys.value = [...newVal];
|
|
defaultExpandedKeys.value = [...newVal];
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 【新增】施工队伍变化时,重新查询设备并更新状态
|
|
|
|
|
+ const params = {
|
|
|
|
|
+ deptIds: newVal
|
|
|
|
|
+ };
|
|
|
|
|
+ /* IotDeviceApi.getDevicesByDepts(params).then(data => {
|
|
|
|
|
+ // 更新 hasDevicesAvailable 状态
|
|
|
|
|
+ hasDevicesAvailable.value = data && data.length > 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 更新设备列表和映射表
|
|
|
|
|
+ if (hasDevicesAvailable.value) {
|
|
|
|
|
+ const newDeviceMap = {...deviceMap.value};
|
|
|
|
|
+ data.forEach(device => {
|
|
|
|
|
+ newDeviceMap[device.id] = device;
|
|
|
|
|
+ });
|
|
|
|
|
+ deviceMap.value = newDeviceMap;
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(error => {
|
|
|
|
|
+ console.error('施工队伍变化时查询设备失败:', error);
|
|
|
|
|
+ hasDevicesAvailable.value = false;
|
|
|
|
|
+ }); */
|
|
|
|
|
+
|
|
|
if (!newVal || newVal.length === 0) {
|
|
if (!newVal || newVal.length === 0) {
|
|
|
// 清空施工队伍时,同时清空相关人员和设备
|
|
// 清空施工队伍时,同时清空相关人员和设备
|
|
|
currentTask.value.responsiblePerson = [];
|
|
currentTask.value.responsiblePerson = [];
|
|
|
currentTask.value.submitter = [];
|
|
currentTask.value.submitter = [];
|
|
|
currentTask.value.deviceIds = [];
|
|
currentTask.value.deviceIds = [];
|
|
|
|
|
|
|
|
|
|
+ // 重置设备可用状态
|
|
|
|
|
+ hasDevicesAvailable.value = true;
|
|
|
|
|
+
|
|
|
// 清除相关字段的验证状态
|
|
// 清除相关字段的验证状态
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
|
taskFormRef.value?.validateField('responsiblePerson');
|
|
taskFormRef.value?.validateField('responsiblePerson');
|
|
|
taskFormRef.value?.validateField('submitter');
|
|
taskFormRef.value?.validateField('submitter');
|
|
|
taskFormRef.value?.validateField('deviceIds');
|
|
taskFormRef.value?.validateField('deviceIds');
|
|
|
});
|
|
});
|
|
|
|
|
+ } else if (newVal !== oldVal) {
|
|
|
|
|
+ // 施工队伍发生变化时,重置设备可用状态(因为不同队伍可能有不同的设备)
|
|
|
|
|
+ // hasDevicesAvailable.value = true;
|
|
|
}
|
|
}
|
|
|
}, { immediate: true, deep: true });
|
|
}, { immediate: true, deep: true });
|
|
|
|
|
|