This commit is contained in:
dhr
2025-09-24 16:37:09 +08:00
parent 80cca114a9
commit 9913a7854c
15 changed files with 1943 additions and 435 deletions

View File

@ -424,6 +424,16 @@
<div class="step-item" v-for="(step, index) in formData.steps" :key="index">
<div class="step-number">{{ index + 1 }}</div>
<el-input v-model="step.content" placeholder="输入试验步骤" />
<el-button
v-if="formData.steps.length > 1"
type="text"
size="small"
class="delete-step-btn"
@click="deleteStep(index)"
style="color: #f56c6c"
>
删除
</el-button>
</div>
<el-button type="text" size="small" class="add-step-btn" @click="addStep">添加步骤</el-button>
</div>
@ -579,6 +589,7 @@ import router from '@/router';
import { ElMessage, ElMessageBox } from 'element-plus';
import { shiyanDetail, shiyanlist, addshiyan, updateshiyan } from '@/api/zhinengxunjian/shiyan/index';
import { xunjianUserlist } from '@/api/zhinengxunjian/xunjian/index';
import { addjiedian } from '@/api/zhinengxunjian/jiedian/index';
// 1. 选项卡状态管理
const activeTab = ref('plan'); // 默认为"巡检计划"
const timeRange = ref('month'); // 统计时间范围:月/周/日
@ -839,20 +850,14 @@ const userList = ref([]);
const getUsersList = async () => {
try {
const response = await xunjianUserlist();
const userRows =
response?.data?.rows && Array.isArray(response.data.rows)
? response.data.rows
: response?.rows && Array.isArray(response.rows)
? response.rows
: Array.isArray(response)
? response
: [];
// 适配新接口格式检查code为200且rows为数组
const userRows = response.code === 200 && response.rows && Array.isArray(response.rows) ? response.rows : [];
userList.value = userRows
.filter((item) => item && typeof item === 'object')
.map((item, index) => ({
label: item.userName || `用户${index + 1}`,
value: item.id || `id_${index}`
.map((item) => ({
label: item.userName || '未知用户',
value: String(item.userId || '') // 使用userId作为唯一标识
}));
if (userList.value.length === 0) {
@ -933,8 +938,40 @@ const handleSave = async () => {
// 编辑模式:调用更新接口
response = await updateshiyan(requestData);
} else {
// 处理步骤数据格式
const stepsData = formData.value.steps
.filter((step) => step.content.trim())
.map((step, index) => ({
createTime: new Date().toISOString(),
updateTime: new Date().toISOString(),
remark: step.content.trim(),
status: '1', // 使用数字代码
// module值为2与工单列表的1不同
module: 2,
sort: index + 1
}));
// 首先调用addjiedian接口
const jiedianResponse = await addjiedian(stepsData);
if (jiedianResponse.code !== 200) {
ElMessage.error('创建步骤失败');
return;
}
// 获取返回的ids实际返回格式中msg字段包含ids字符串
let nodeIds = '';
if (jiedianResponse.code === 200 && jiedianResponse.msg) {
nodeIds = jiedianResponse.msg;
} else {
ElMessage.warning('未获取到有效的步骤ID');
return;
}
// 新增模式调用添加接口删除请求参数中的id避免后端报错
const { id, ...addData } = requestData;
// 添加nodeIds字段
addData.nodeIds = nodeIds;
response = await addshiyan(addData);
}
@ -1041,10 +1078,22 @@ const handleEditRecord = async (row) => {
const recordDetail = detailResponse.data.rows?.[0] || detailResponse.data;
// 兼容两种数据结构可能在rows数组中也可能直接在data中
// 3. 处理testStep将逗号分隔的字符串转换为步骤数组
// 3. 处理步骤数据优先从nodes数组中提取
const steps = [];
if (recordDetail.testStep) {
// 拆分字符串(例如 "1. 213,2. 321" → ["1. 213", "2. 321"]
// 如果有nodes数组优先从nodes中提取步骤数据
if (recordDetail.nodes && Array.isArray(recordDetail.nodes)) {
// 复制nodes数组并按code升序排序
const sortedNodes = [...recordDetail.nodes].sort((a, b) => (a.code || 0) - (b.code || 0));
// 转换为所需的格式
sortedNodes.forEach((node) => {
if (node.intendedPurpose && node.intendedPurpose.trim()) {
steps.push({ content: node.intendedPurpose.trim() });
}
});
}
// 如果nodes中没有数据回退到从testStep字符串解析
else if (recordDetail.testStep) {
// 拆分字符串
const stepItems = recordDetail.testStep.split(',');
stepItems.forEach((stepText) => {
// 移除序号前缀(如"1. "),只保留内容
@ -1137,6 +1186,17 @@ const addStep = () => {
formData.value.steps.push({ content: '' });
};
// 删除步骤
const deleteStep = (index) => {
// 确保至少保留一个步骤
if (formData.value.steps.length <= 1) {
ElMessage.warning('至少需要保留一个步骤');
return;
}
// 从数组中删除指定索引的步骤
formData.value.steps.splice(index, 1);
};
// 添加新设备
const addEquipment = () => {
if (newEquipment.value.trim()) {