zhangwencui
6 天以前 bbb54adc8d9fd6ae6b87ac036c8b21f3ad7daef4
工作台报工完善
已修改7个文件
139 ■■■■■ 文件已修改
src/api/mes/pro/feedback/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/workorderparamrecord/index.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/workbench/components/TaskListPanel.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/workbench/components/tabs/FeedbackHistoryTab.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/workbench/components/tabs/FeedbackTab.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/workbench/components/tabs/RecordParamTab.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/workbench/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/feedback/index.ts
@@ -54,6 +54,8 @@
    code?: string;
    type?: number;
    workOrderId?: number;
    taskId?: number;
    taskCode?: string;
    itemId?: number;
    feedbackUserId?: number;
    creator?: string;
src/api/mes/pro/workorderparamrecord/index.ts
@@ -42,9 +42,9 @@
  }
}
/** 按工单分页查询参数记录 */
/** 按工单/工作站分页查询参数记录 */
export function getWorkOrderParamRecordPage(
  params: PageParam & { workOrderId: number; recordNo?: string; templateName?: string; createTime?: string[] },
  params: PageParam & { workOrderId?: number; workstationId?: number; recordNo?: string; templateName?: string; createTime?: string[] },
) {
  return requestClient.get<PageResult<MesProWorkOrderParamRecordApi.WorkOrderParamRecord>>(
    '/mes/pro/work-order-param-record/page-by-work-order',
src/views/mes/workbench/components/TaskListPanel.vue
@@ -11,6 +11,8 @@
  list: PendingTask[];
  selectedId?: number;
  loading?: boolean;
  /** 当前工作站对应的工序名称,列表只展示匹配的工序 */
  processName?: string;
}>();
const emit = defineEmits<{
@@ -19,10 +21,16 @@
const searchKeyword = ref('');
/** 先按工作站工序过滤,再按搜索关键字匹配 */
const filteredList = computed(() => {
  let result = props.list;
  // 固定只显示和当前工作站工序匹配的任务
  if (props.processName) {
    result = result.filter((row) => row.processName === props.processName);
  }
  const kw = searchKeyword.value.trim().toLowerCase();
  if (!kw) return props.list;
  return props.list.filter((row) => {
  if (!kw) return result;
  return result.filter((row) => {
    const fields = [
      row.code,
      row.workOrderCode,
src/views/mes/workbench/components/tabs/FeedbackHistoryTab.vue
@@ -16,7 +16,7 @@
import {
  approveFeedback,
  deleteFeedback,
  getFeedbackListByTask,
  getFeedbackPage,
  rejectFeedback,
  submitFeedback,
} from '#/api/mes/pro/feedback';
@@ -134,11 +134,15 @@
    keepSource: true,
    proxyConfig: {
      ajax: {
        query: async () => {
        query: async ({ page }) => {
          if (!props.taskId) {
            return [];
            return { list: [], total: 0 };
          }
          return await getFeedbackListByTask(props.taskId);
          return await getFeedbackPage({
            taskId: props.taskId,
            pageNo: page.currentPage,
            pageSize: page.pageSize,
          });
        },
      },
    },
@@ -213,7 +217,7 @@
        <template #actions="{ row }">
          <Space :size="4" wrap>
            <Button type="link" size="small" @click="handleDetail(row)">
              {{ $t('common.view') }}
              查看
            </Button>
            <!-- 草稿:编辑、删除、提交 -->
            <Button
@@ -222,7 +226,7 @@
              size="small"
              @click="handleEdit(row)"
            >
              {{ $t('common.edit') }}
              编辑
            </Button>
            <Popconfirm
              v-if="row.status === STATUS_PREPARE"
@@ -230,7 +234,7 @@
              @confirm="handleSubmit(row)"
            >
              <Button type="link" size="small">
                {{ $t('common.submit') }}
                提交
              </Button>
            </Popconfirm>
            <Popconfirm
@@ -239,7 +243,7 @@
              @confirm="handleDelete(row)"
            >
              <Button type="link" size="small" danger>
                {{ $t('common.delete') }}
                删除
              </Button>
            </Popconfirm>
            <!-- 审批中:审批通过、驳回 -->
@@ -249,7 +253,7 @@
              @confirm="handleApprove(row)"
            >
              <Button type="link" size="small">
                {{ $t('common.approve') }}
                审批通过
              </Button>
            </Popconfirm>
            <Popconfirm
src/views/mes/workbench/components/tabs/FeedbackTab.vue
@@ -212,12 +212,12 @@
  originalSnapshot.value = JSON.stringify(await getAlignedData());
}
// 监听任务变更
// 监听任务变更(仅当任务 ID 真正变化时才重置表单)
watch(
  () => props.task,
  (task) => {
    if (task) {
      resetForTask(task);
  () => props.task?.id,
  () => {
    if (props.task) {
      resetForTask(props.task);
    }
  },
  { immediate: true },
src/views/mes/workbench/components/tabs/RecordParamTab.vue
@@ -26,6 +26,8 @@
const props = defineProps<{
  /** 当前工单编号 */
  workOrderId?: number;
  /** 当前工作站编号 */
  workstationId?: number;
}>();
// --- 模式 ---
@@ -283,6 +285,7 @@
  try {
    const result = await getWorkOrderParamRecordPage({
      workOrderId: props.workOrderId,
      workstationId: props.workstationId,
      pageNo: 1,
      pageSize: 100,
    });
@@ -292,20 +295,15 @@
  }
}
// 工单变更时加载记录
// 工单或工作站变更时加载记录
watch(
  () => props.workOrderId,
  () => [props.workOrderId, props.workstationId],
  () => {
    handleCancelForm();
    refreshRecordList();
  },
  { immediate: true },
);
/** 格式化参数值展示 */
function formatParamDisplay(detail: MesProWorkOrderParamRecordApi.ParamRecordDetail) {
  const unit = detail.unitMeasureName ? ` ${detail.unitMeasureName}` : '';
  return `${detail.paramName}: ${detail.paramValue ?? '-'}${unit}`;
}
</script>
<template>
@@ -410,7 +408,7 @@
      <!-- 无工单提示 -->
      <div v-if="!workOrderId" class="record-param-tab__empty">
        <IconifyIcon icon="lucide:alert-circle" class="record-param-tab__empty-icon" />
        <p>请先从左侧选择一条工单任务</p>
        <p>请先选择工作站和工单任务</p>
      </div>
      <!-- 空列表 -->
@@ -450,13 +448,16 @@
            备注:{{ record.remark }}
          </div>
          <div class="record-param-tab__card-params">
            <span
            <div
              v-for="d in record.details"
              :key="d.id"
              class="record-param-tab__param-tag"
              class="record-param-tab__param-row"
            >
              {{ formatParamDisplay(d) }}
            </span>
              <span class="record-param-tab__param-name">{{ d.paramName }}</span>
              <span class="record-param-tab__param-value">
                {{ d.paramValue ?? '-' }}<span v-if="d.unitMeasureName" class="record-param-tab__param-unit"> {{ d.unitMeasureName }}</span>
              </span>
            </div>
          </div>
        </div>
      </div>
@@ -680,20 +681,38 @@
}
.record-param-tab__card-params {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 4px 16px;
  margin-top: 8px;
}
.record-param-tab__param-tag {
  display: inline-flex;
  align-items: center;
  padding: 3px 10px;
  border-radius: 4px;
.record-param-tab__param-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  font-size: 13px;
  line-height: 1.6;
  padding: 2px 0;
}
.record-param-tab__param-name {
  flex-shrink: 0;
  color: #8c8c8c;
  min-width: 100px;
  &::after {
    content: ':';
  }
}
.record-param-tab__param-value {
  color: #1a1a1a;
  font-weight: 500;
}
.record-param-tab__param-unit {
  color: #8c8c8c;
  font-size: 12px;
  background: #f6ffed;
  color: #389e0d;
  border: 1px solid #d9f7be;
}
</style>
src/views/mes/workbench/index.vue
@@ -71,16 +71,18 @@
      pageSize: 200,
    });
    taskList.value = result.list ?? [];
    // 自动选中并同步 selectedTask 到最新数据
    if (taskList.value.length) {
      if (selectedTask.value) {
        // 尝试在新列表中找到同 ID 的任务,更新引用以刷新数据
        const updated = taskList.value.find(
          (t) => t.id === selectedTask.value!.id,
        );
        selectedTask.value = updated ?? taskList.value[0];
    // 同步 selectedTask 到最新数据(不自动选中第一个,需用户手动点击)
    if (selectedTask.value) {
      const updated = taskList.value.find(
        (t) => t.id === selectedTask.value!.id,
      );
      if (updated) {
        selectedTask.value = updated;
      } else if (taskList.value.length) {
        // 之前选中的任务不在新列表中了,清空
        selectedTask.value = undefined;
      } else {
        selectedTask.value = taskList.value[0];
        selectedTask.value = undefined;
      }
    } else {
      selectedTask.value = undefined;
@@ -165,6 +167,7 @@
          :list="taskList"
          :selected-id="selectedTask?.id"
          :loading="taskLoading"
          :process-name="workstation?.processName"
          @select="handleSelectTask"
        />
      </aside>
@@ -202,6 +205,7 @@
          <RecordParamTab
            v-else-if="activeTab === 'record-param'"
            :work-order-id="selectedTask?.workOrderId"
            :workstation-id="workstationId"
          />
          <ProductIssueTab
            v-else-if="activeTab === 'product-issue'"