@@ -54,6 +54,7 @@
class="todo-item"
:class="{ 'important': item.taskLevel === '重要', 'completed': item.status === 2 }"
>
+
-
{{ item.title }}
@@ -590,16 +590,6 @@ const handleInspection7 = () => {
min-height: 100vh;
}
-/* 导航栏样式 */
-.navigation-tabs {
- display: flex;
- margin-bottom: 20px;
- background-color: #fff;
- border-radius: 4px;
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
- padding: 2px;
-}
-
/* 已完成任务的样式 */
.todo-color-indicator.completed {
background-color: #dcdfe6;
@@ -609,7 +599,15 @@ const handleInspection7 = () => {
color: #909399;
text-decoration: line-through;
}
-
+/* 导航栏样式 */
+.navigation-tabs {
+ display: flex;
+ margin-bottom: 20px;
+ background-color: #fff;
+ border-radius: 4px;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
+ padding: 2px;
+}
.nav-tab {
padding: 12px 24px;
cursor: pointer;
@@ -849,13 +847,14 @@ const handleInspection7 = () => {
/* 悬停显示操作按钮 */
.todo-item:hover .todo-actions {
- opacity: 1;
+ background: linear-gradient(to right, rgba(173, 216, 230, 0), rgb(64, 158, 255));
right: 0;
+ opacity: 0.8;
}
-/* 内容区域平移以给按钮留出空间 */
+/* 取消内容区域平移效果 */
.todo-item:hover .todo-content {
- transform: translateX(-120px);
+ transform: none;
}
.action-icon {
@@ -942,7 +941,7 @@ const handleInspection7 = () => {
background-color: #ff4d4f;
}
-::v-deep .custom-date-cell {
+:deep(.custom-date-cell) {
width: 100%;
height: 100%;
padding: 5px;
@@ -983,13 +982,13 @@ const handleInspection7 = () => {
}
/* 穿透作用域,强制设置日历单元格为正方形 */
-::v-deep .el-calendar-table td {
+:deep(.el-calendar-table td) {
padding: 2px;
vertical-align: top;
width: 120px; /* 强制宽度 */
height: 120px; /* 强制高度(与宽度一致) */
}
-::v-deep .el-calendar-day {
+:deep(.el-calendar-day) {
padding: 0; /* 移除默认内边距 */
width: 100%;
height: 100%;
diff --git a/src/views/zhinengxunjian/paidanjilu.vue b/src/views/zhinengxunjian/paidanjilu.vue
index 731675b..57e7452 100644
--- a/src/views/zhinengxunjian/paidanjilu.vue
+++ b/src/views/zhinengxunjian/paidanjilu.vue
@@ -2,7 +2,7 @@
-
@@ -737,11 +737,6 @@ const getStepStatusText = (status) => {
return statusMap[statusStr] || '未知状态';
};
-// 按模块分组节点(保留该函数用于兼容)
-const groupNodesByModule = (nodes) => {
- if (!nodes || !nodes.length) return [];
- return [{ module: '', items: nodes }];
-
// 初始化加载数据
const initData = async () => {
await fetchStatisticsData();
diff --git a/src/views/zhinengxunjian/qiangxiuguanli.vue b/src/views/zhinengxunjian/qiangxiuguanli.vue
index 0c97b94..8e4f360 100644
--- a/src/views/zhinengxunjian/qiangxiuguanli.vue
+++ b/src/views/zhinengxunjian/qiangxiuguanli.vue
@@ -1,7 +1,7 @@
+
@@ -430,7 +430,7 @@
备注:{{ node.remark }}
- {{ getStepStatusText(node.status) }}
+ {{ node.status === '2' ? '未完成' : '已完成' }}
-
+
@@ -1065,11 +1065,29 @@ defineExpose({ getTaskList });
async function getTaskList() {
loading.value = true;
try {
- const res = await qiangxiulist({
+ // 构建请求参数,包含筛选条件
+ const requestParams = {
projectId: 1,
pageNum: currentPage.value,
pageSize: pageSize.value
- });
+ };
+
+ // 添加任务状态筛选条件
+ if (taskStatus.value && taskStatus.value !== 'all') {
+ requestParams.status = taskStatus.value;
+ }
+
+ // 添加计划类型筛选条件
+ if (planType.value && planType.value !== 'all') {
+ requestParams.planType = planType.value;
+ }
+
+ // 添加执行人筛选条件
+ if (executor.value && executor.value !== 'all') {
+ requestParams.executor = executor.value;
+ }
+
+ const res = await qiangxiulist(requestParams);
if (res.code === 200 && res.rows) {
total.value = res.total || 0;
diff --git a/src/views/zhinengxunjian/qiangxiujilu.vue b/src/views/zhinengxunjian/qiangxiujilu.vue
index b7c3dfd..8484586 100644
--- a/src/views/zhinengxunjian/qiangxiujilu.vue
+++ b/src/views/zhinengxunjian/qiangxiujilu.vue
@@ -2,7 +2,7 @@
-
+
-
-->
-
+
- 导出数据
-
-
@@ -1524,12 +1517,7 @@ const handleInspectionManagement2 = () => {
border-radius: 4px;
}
-/* 无数据提示 */
-.no-info {
- text-align: center;
- color: #909399;
- padding: 60px 20px;
-}
+/* */
/* 分配弹窗样式 */
.assign-container {
diff --git a/src/views/zhinengxunjian/renyuanzhuangtai.vue b/src/views/zhinengxunjian/renyuanzhuangtai.vue
index 7a92d22..08ec4a6 100644
--- a/src/views/zhinengxunjian/renyuanzhuangtai.vue
+++ b/src/views/zhinengxunjian/renyuanzhuangtai.vue
@@ -2,7 +2,7 @@
-
+
@@ -132,8 +132,7 @@ import { ref, watch, onMounted } from 'vue';
import router from '@/router';
import * as echarts from 'echarts';
-// 激活的选项卡
-const activeTab = ref('personnel');
+//
// 统计数据(保持原有数据不变)
const totalPersonnel = ref(36);
@@ -445,36 +444,7 @@ const handleInspectionManagement3 = () => {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
-.custom-tabs {
- padding-top: 1px;
-}
-
-.custom-tabs .el-tabs__header {
- margin: 0 -20px;
- padding: 0 20px;
- border-bottom: 1px solid #e4e7ed;
-}
-
-.custom-tabs .el-tabs__nav-wrap::after {
- height: 0;
-}
-
-.custom-tabs .el-tabs__item {
- font-size: 14px;
- color: #606266;
- padding: 16px 20px;
- margin-right: 20px;
-}
-
-.custom-tabs .el-tabs__item.is-active {
- color: #165dff;
- font-weight: 500;
- border-bottom: 2px solid #165dff;
-}
-
-.custom-tabs .el-tabs__item:hover {
- color: #165dff;
-}
+/* */
/* 内容容器样式 */
.content-container {
diff --git a/src/views/zhinengxunjian/shiyanguanli.vue b/src/views/zhinengxunjian/shiyanguanli.vue
index 5397407..2f9d050 100644
--- a/src/views/zhinengxunjian/shiyanguanli.vue
+++ b/src/views/zhinengxunjian/shiyanguanli.vue
@@ -2,7 +2,7 @@
-
+
-
-
@@ -67,13 +67,7 @@
-
-
-
+
@@ -374,10 +368,10 @@
-
-
-
-
+
+
+
+
@@ -418,36 +412,6 @@
-
-
-
-
-
-
- 添加步骤
-
-
-
-
-
-
- 删除
-
-
- {{ index + 1 }}
-
@@ -490,119 +454,113 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
class="custom-experiment-dialog"
+ center
>
-
-
-
-
基础信息
-
-
-
- {{ detailData.planName || '-' }}
+
+
+
+
基础信息
+
+
+
-
+
+ {{ detailData.planName || '-' }}
+
+
+
+ {{ detailData.planCode || '-' }}
+
-
- {{ detailData.planCode || '-' }}
+
-
+
-
+
+ {{ getTestObjectText(detailData.testObject) || '-' }}
+
+
+
+ {{ detailData.person?.userName || '-' }}
+
-
- {{ getTestObjectText(detailData.testObject) || '-' }}
-
-
-
- {{ detailData.person?.userName || '-' }}
-
-
-
- {{ detailData.beginTime ? formatDate(detailData.beginTime) : '-' }}
-
-
-
- {{ detailData.endTime ? formatDate(detailData.endTime) : '-' }}
+
+
+
+ {{ detailData.beginTime ? formatDate(detailData.beginTime) : '-' }}
+
+
+
+ {{ detailData.endTime ? formatDate(detailData.endTime) : '-' }}
+
-
-
-
- 实验设备
-
-
- {{ device.trim() }}
-
-
-
-
-
-
- 执行步骤
-
-
-
-
- {{ node.code || index + 1 }}
-
-
- {{ node.name || '未命名步骤' }}
- {{ node.intendedPurpose || '无说明' }}
- 计划时间:{{ formatDateTime(node.intendedTime) }}
- 完成时间:{{ formatDateTime(node.finishTime) }}
- 备注:{{ node.remark }}
-
- {{ getStepStatusText(node.status) }}
-
-
-
执行步骤
-
-
-
{{ index + 1 }}
- {{ step.trim() }}
+
+
- 实验设备
+
+
+
+ {{ device.trim() }}
-
实验信息
-
-
-
- {{ detailData.testInfo || '-' }}
-
-
-
- {{ detailData.testSetting || '-' }}
-
-
-
{{ detailData.testSolutions || '-' }}
+
+
- 实验信息
+
+
+
+
+ {{ detailData.testInfo || '-' }}
+
+
+
+ {{ detailData.testSetting || '-' }}
+
+
+
{{ detailData.testSolutions || '-' }}
+
-
@@ -377,7 +377,7 @@
参与人员
-
-
@@ -248,11 +353,11 @@
@@ -497,35 +664,40 @@ onMounted(() => {
min-height: 100vh;
}
-/* 2. 顶部导航选项卡 */
.navigation-tabs {
display: flex;
+ margin-bottom: 20px;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
- margin-bottom: 20px;
- overflow: hidden;
+ padding: 2px;
}
+
.nav-tab {
padding: 12px 24px;
cursor: pointer;
- transition: all 0.2s;
+ transition: all 0.3s ease;
+ border-radius: 4px;
font-size: 14px;
- color: #6b7280;
+ color: #606266;
+ border-right: 1px solid #f0f0f0;
flex: 1;
text-align: center;
- border-right: 1px solid #f0f0f0;
}
+
.nav-tab:last-child {
border-right: none;
}
-.nav-tab:hover:not(.active) {
- background-color: #f3f4f6;
+
+.nav-tab:hover {
+ color: #409eff;
+ background-color: #ecf5ff;
}
+
.nav-tab.active {
- background-color: #165dff;
+ background-color: #409eff;
color: #fff;
- font-weight: 500;
+ box-shadow: 0 2px 4px rgba(64, 158, 255, 0.3);
}
/* 3. 选项卡样式 */
@@ -570,24 +742,10 @@ onMounted(() => {
align-items: center;
flex-wrap: wrap;
}
-.action-buttons {
- display: flex;
- gap: 12px;
-}
.el-select,
.date-picker {
width: 160px;
}
-.search-btn,
-.export-btn {
- background-color: #165dff;
- border-color: #165dff;
-}
-.filter-btn {
- background-color: #f3f4f6;
- color: #6b7280;
- border-color: #e5e7eb;
-}
/* 6. 表格容器 */
.table-container {
@@ -623,57 +781,58 @@ onMounted(() => {
/* 8. 状态标签样式 */
.status-tag {
display: inline-block;
- padding: 2px 8px;
- border-radius: 4px;
+ padding: 4px 10px;
+ border-radius: 6px;
font-size: 12px;
+ font-weight: 500;
+ border: 1px solid transparent;
}
-.status-drafted {
- background-color: #e0efff;
- color: #165dff;
+
+/* 与试验任务页面相同的标签样式 */
+.tag-pending {
+ background-color: #e6f7ff;
+ color: #1677ff;
+ border-color: #91d5ff;
}
+
+.tag-delayed {
+ background-color: #fff2f0;
+ color: #ff4d4f;
+ border-color: #ffccc7;
+}
+
+.tag-executing {
+ background-color: #fffbe6;
+ color: #fa8c16;
+ border-color: #ffe58f;
+}
+
+.tag-completed {
+ background-color: #f6ffed;
+ color: #52c41a;
+ border-color: #b7eb8f;
+}
+
+/* 保留原有的部分样式以确保兼容性 */
.status-in-progress {
- background-color: #e0f2fe;
- color: #0284c7;
+ background-color: #fffbe6;
+ color: #fa8c16;
+ border-color: #ffe58f;
}
.status-completed {
- background-color: #e6ffed;
- color: #00b42a;
-}
-.status-paused {
- background-color: #f2f3f5;
- color: #86909c;
+ background-color: #f6ffed;
+ color: #52c41a;
+ border-color: #b7eb8f;
}
.status-pending {
- background-color: #f9fafb;
- color: #6b7280;
-}
-.status-accepted {
- background-color: #eff6ff;
- color: #2563eb;
-}
-.status-rejected {
- background-color: #fee2e2;
- color: #dc2626;
-}
-.status-normal {
- background-color: #e6ffed;
- color: #00b42a;
-}
-.status-attention {
- background-color: #fff7e0;
- color: #ff7d00;
-}
-.status-problem {
- background-color: #fff2f0;
- color: #f5222d;
-}
-.status-passed {
- background-color: #e6ffed;
- color: #00b42a;
+ background-color: #e6f7ff;
+ color: #1677ff;
+ border-color: #91d5ff;
}
.status-failed {
- background-color: #fee2e2;
- color: #dc2626;
+ background-color: #fff2f0;
+ color: #ff4d4f;
+ border-color: #ffccc7;
}
/* 9. 操作按钮样式 */
@@ -691,30 +850,6 @@ onMounted(() => {
background: none;
transition: all 0.2s;
}
-.edit-btn {
- color: #165dff;
-}
-.edit-btn:hover {
- background-color: #e8f3ff;
-}
-.execute-btn {
- color: #00b42a;
-}
-.execute-btn:hover {
- background-color: #e6ffed;
-}
-.pause-btn {
- color: #ff7d00;
-}
-.pause-btn:hover {
- background-color: #fff7e0;
-}
-.resume-btn {
- color: #722ed1;
-}
-.resume-btn:hover {
- background-color: #f3e8ff;
-}
.view-btn {
color: #165dff;
}
@@ -911,12 +1046,6 @@ onMounted(() => {
margin-bottom: 8px;
}
-.step-name {
- font-size: 12px;
- color: #6b7280;
- text-align: center;
-}
-
.progress-line {
flex: 1;
height: 2px;
diff --git a/src/views/zhinengxunjian/shiyanrenwu.vue b/src/views/zhinengxunjian/shiyanrenwu.vue
index 44b6f79..a9e5866 100644
--- a/src/views/zhinengxunjian/shiyanrenwu.vue
+++ b/src/views/zhinengxunjian/shiyanrenwu.vue
@@ -2,7 +2,7 @@
- {{ person.userName }}
- {{ person.teamName }}
+
+ 关闭
+
+
+
- 参与人员
+
+
+
+
+ {{ person.userName }}
+
+
+
+ {{ person.teamName }}
+
-
+
+
+ 巡检项目
-
- 关闭
@@ -618,7 +576,6 @@ 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, updatejiedian } from '@/api/zhinengxunjian/jiedian/index';
// 1. 选项卡状态管理
const activeTab = ref('plan'); // 默认为"巡检计划"
const timeRange = ref('month'); // 统计时间范围:月/周/日
@@ -952,10 +909,6 @@ const handleSave = async () => {
personIds: formData.value.participants.join(','),
inspectionItems: '',
testSolutions: formData.value.riskMitigation,
- testStep: formData.value.steps
- .filter((step) => step.name.trim() || step.intendedPurpose.trim())
- .map((step) => `${step.name || ''}: ${step.intendedPurpose || ''}`)
- .join(','),
testDevice: formData.value.equipments
.filter((equip) => equip.selected)
.map((equip) => equip.name)
@@ -965,83 +918,15 @@ const handleSave = async () => {
id: editRecordId.value // 若后端用planId等,需改为对应字段名
};
- // 4. 处理步骤数据并调用接口
+ // 调用接口
let response;
- // 处理步骤数据格式
- const stepsData = formData.value.steps
- .filter((step) => step.name.trim() || step.intendedPurpose.trim())
- .map((step, index) => ({
- createTime: new Date().toISOString(),
- updateTime: new Date().toISOString(),
- params: {},
- module: 3,
- code: index + 1,
- name: step.name,
- intendedPurpose: step.intendedPurpose,
- intendedTime: step.intendedTime ? new Date(step.intendedTime).toISOString() : new Date().toISOString(),
- finishTime: '',
- remark: '',
- status: 2
- }));
-
- // 获取nodeIds
- let nodeIds = '';
if (editRecordId.value) {
- // 编辑模式:获取试验详情,以获取原始步骤的id
- const detailResponse = await shiyanDetail(editRecordId.value);
- if (detailResponse.code !== 200) {
- ElMessage.error('获取试验详情失败');
- return;
- }
-
- const experimentDetail = detailResponse.data.rows?.[0] || detailResponse.data;
- // 兼容两种数据结构:可能在rows数组中,也可能直接在data中
-
- if (experimentDetail.nodes && Array.isArray(experimentDetail.nodes)) {
- // 按code排序原始nodes数组
- const sortedNodes = [...experimentDetail.nodes].sort((a, b) => (a.code || 0) - (b.code || 0));
-
- // 为新的步骤数据添加id
- const updatedSteps = stepsData.map((step, index) => ({
- ...step,
- id: sortedNodes[index]?.id || 0 // 使用原始步骤的id,如果不存在则使用0
- }));
-
- // 调用updatejiedian接口更新步骤,直接传递数组
- const updateResponse = await updatejiedian(updatedSteps);
- if (updateResponse.code !== 200) {
- ElMessage.error('更新步骤失败');
- return;
- }
-
- // 使用原始的nodeIds,避免重新创建步骤
- nodeIds = experimentDetail.nodeIds;
- }
-
// 编辑模式:调用更新接口
response = await updateshiyan(requestData);
} else {
- // 新增模式:调用addjiedian接口创建步骤
- const jiedianResponse = await addjiedian(stepsData);
-
- if (jiedianResponse.code !== 200) {
- ElMessage.error('创建步骤失败');
- return;
- }
-
- // 获取返回的ids,实际返回格式中msg字段包含ids字符串
- 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);
}
@@ -1072,11 +957,6 @@ const resetForm = () => {
envRequirements: '', // 环境要求为空
manager: '', // 负责人为空
participants: [], // 参与人员为空数组
- steps: [
- { name: '', intendedPurpose: '', intendedTime: '' },
- { name: '', intendedPurpose: '', intendedTime: '' },
- { name: '', intendedPurpose: '', intendedTime: '' }
- ], // 步骤内容为空
equipments: [
{ name: '服务器(型号:XYZ-9000)', selected: false },
{ name: '网络测试仪(型号:NT-5000)', selected: false },
@@ -1152,45 +1032,6 @@ const handleEditRecord = async (row) => {
const recordDetail = detailResponse.data.rows?.[0] || detailResponse.data;
// 兼容两种数据结构:可能在rows数组中,也可能直接在data中
- // 3. 处理步骤数据:优先从nodes数组中提取
- const steps = [];
- // 如果有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.name && node.name.trim()) || (node.intendedPurpose && node.intendedPurpose.trim())) {
- steps.push({
- name: node.name || '',
- intendedPurpose: node.intendedPurpose || '',
- intendedTime: node.intendedTime || ''
- });
- }
- });
- }
- // 如果nodes中没有数据,回退到从testStep字符串解析
- else if (recordDetail.testStep) {
- // 拆分字符串
- const stepItems = recordDetail.testStep.split(',');
- stepItems.forEach((stepText) => {
- // 移除序号前缀(如"1. "),只保留内容
- const content = stepText.replace(/^\d+\.\s*/, '').trim();
- if (content) {
- // 对于旧格式数据,我们将内容放入intendedPurpose字段
- steps.push({
- name: `步骤${steps.length + 1}`,
- intendedPurpose: content,
- intendedTime: ''
- });
- }
- });
- }
- // 确保至少有3个步骤(如果解析后为空)
- while (steps.length < 3) {
- steps.push({ name: '', intendedPurpose: '', intendedTime: '' });
- }
-
// 4. 处理testDevice:将逗号分隔的字符串转换为设备数组
const equipments = [];
if (recordDetail.testDevice) {
@@ -1236,7 +1077,6 @@ const handleEditRecord = async (row) => {
envRequirements: recordDetail.envRequirements || recordDetail.testSetting || '',
manager: recordDetail.manager || recordDetail.personCharge || '',
participants: participants, // 从personIds解析的数组
- steps: steps, // 解析后的步骤数组
equipments: equipments, // 解析并合并后的设备数组
riskMitigation: recordDetail.riskMitigation || recordDetail.testSolutions || ''
};
@@ -1375,53 +1215,23 @@ const formatDate = (dateString) => {
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
-// 根据步骤状态获取对应的样式类
-const getStatusClass = (status) => {
- // 处理可能的数字输入
- const statusStr = status?.toString() || '';
- const statusClassMap = {
- '1': 'status-pending',
- '2': 'status-running',
- '3': 'status-completed',
- '4': 'status-delayed',
- '5': 'status-failed'
- };
- return statusClassMap[statusStr] || 'status-unknown';
-};
-
-// 格式化日期时间(用于步骤条)
-const formatDateTime = (dateTime) => {
- if (!dateTime) return '-';
- try {
- const date = new Date(dateTime);
- const year = date.getFullYear();
- const month = String(date.getMonth() + 1).padStart(2, '0');
- const day = String(date.getDate()).padStart(2, '0');
- const hours = String(date.getHours()).padStart(2, '0');
- const minutes = String(date.getMinutes()).padStart(2, '0');
- return `${year}-${month}-${day} ${hours}:${minutes}`;
- } catch (error) {
- return dateTime;
- }
-};
-
-// 获取步骤状态文本
-const getStepStatusText = (status) => {
- const statusStr = status?.toString() || '';
- const statusMap = {
- '1': '待执行',
- '2': '执行中',
- '3': '已完成',
- '4': '已延期',
- '5': '失败'
- };
- return statusMap[statusStr] || '未知状态';
+// 日期时间格式化函数
+const formatDateTime = (dateString) => {
+ if (!dateString) return '';
+ const date = new Date(dateString);
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ const day = String(date.getDate()).padStart(2, '0');
+ const hours = String(date.getHours()).padStart(2, '0');
+ const minutes = String(date.getMinutes()).padStart(2, '0');
+ const seconds = String(date.getSeconds()).padStart(2, '0');
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
diff --git a/src/views/zhinengxunjian/shiyanjilu.vue b/src/views/zhinengxunjian/shiyanjilu.vue
index 370174d..68a859a 100644
--- a/src/views/zhinengxunjian/shiyanjilu.vue
+++ b/src/views/zhinengxunjian/shiyanjilu.vue
@@ -2,7 +2,7 @@
@@ -192,7 +197,7 @@
-
+
@@ -220,7 +225,7 @@
- {{ item.name }}
- {{ item.type }}
+
+
+
巡检项目
+
+
+
+
+ {{ item.name }}
+
+
+
+ {{ item.type }}
+
+
+
-
@@ -71,11 +62,20 @@
@@ -149,7 +154,7 @@
+
-
-->
-
-
+
- 筛选
- 导入数据
-
-
@@ -56,7 +47,7 @@
class="date-picker"
>
- 搜索
+ 搜索
本月完成试验
-{{ statData.completed }}较上月 ↑2.4%
++ {{ statData.completed + }} + 较上月 {{ statData.completedGrowth >= 0 ? '↑' : '↓' }}{{ Math.abs(statData.completedGrowth) }}% + +
试验通过率
-{{ statData.passRate }}%较上月 ↑5.6%
++ {{ statData.passRate }}% + 较上月 {{ statData.passRateGrowth >= 0 ? '↑' : '↓' }}{{ Math.abs(statData.passRateGrowth) }}% + +
待分析记录
@@ -83,7 +83,12 @@平均试验时长
-{{ statData.avgDuration }}较上月 ↓9.4分钟
++ {{ statData.avgDuration + }} + 较上月 {{ statData.avgDurationGrowth >= 0 ? '↑' : '↓' }}{{ Math.abs(statData.avgDurationGrowth) }}分钟 + +
-
+
-
+
@@ -241,6 +246,106 @@
@size-change="handleSizeChange"
>
+
+
+
+
+ 基本信息
+
+ 任务名称
+ {{ detailData.taskName }}
+ 任务状态
+
+ {{ getStatusText(detailData.status) }}
+
+
+
+ 测试对象
+ {{ detailData.testObject }}
+ 完成进度
+ {{ detailData.progress }}%
+
+
+ 开始时间
+ {{ detailData.beginTime }}
+ 结束时间
+ {{ detailData.endTime }}
+
+
+ 时间信息
+ {{ detailData.timeInfo ? detailData.timeInfo.replace(/,/g, '—') : '-' }}
+
+
+
+
+ 执行人信息
+
+ 执行人姓名
+ {{ detailData.personInfo.userName }}
+ 联系电话
+ {{ detailData.personInfo.phonenumber }}
+
+
+ 性别
+ {{ detailData.personInfo.sex === '1' ? '男' : '女' }}
+
+
+
+ 关联计划
+
+ 计划名称
+ {{ detailData.testPlan.planName }}
+ 计划编号
+ {{ detailData.testPlan.planCode }}
+
+
+ 计划时间
+ {{ detailData.testPlan.beginTime }} — {{ detailData.testPlan.endTime }}
+
+
+ 测试设备
+ {{ detailData.testPlan.testDevice }}
+
+
+
+ 执行步骤
+
+
+
+
+ {{ node.code || index + 1 }}
+
+
+ {{ node.name || '未命名步骤' }}
+ {{ node.intendedPurpose || '无说明' }}
+ 计划时间:{{ formatDateTime(node.intendedTime) }}
+ 完成时间:{{ formatDateTime(node.finishTime) }}
+ 备注:{{ node.remark }}
+
+ {{ node.status === '2' ? '未完成' : '已完成' }}
+
+
+
+ 执行结果
+
+ 测试结果
+ {{ detailData.testFinal }}
+
+
+ 失败原因
+ {{ detailData.failReason }}
+
+
+
+
+ 加载中...
+
-
+
+
@@ -338,7 +338,7 @@
@@ -29,7 +29,7 @@
-
+
@@ -137,7 +137,7 @@
- 备注:{{ node.remark }}
- {{ getStepStatusText(node.status) }}
+ {{ node.status === '2' ? '未完成' : '已完成' }}