spring
2026-07-03 2540d86f0dbd77f654f558c3bf9d5ddbe7422f16
src/views/mes/pd/project/modules/document-list.vue
@@ -7,7 +7,7 @@
import { computed, watch } from 'vue';
import { useVbenModal } from '#/packages/effects/common-ui/src';
import { MesPdDocumentTypeEnum } from '#/packages/constants/src';
import { MesPdDocumentTypeEnum, MesPdProjectStatusEnum } from '#/packages/constants/src';
import { message } from 'ant-design-vue';
@@ -29,6 +29,7 @@
    formType: FormType;
    gridHeight?: number | string;
    projectId: number;
    projectStatus?: number;
    tableTitle?: string;
    version?: string;
  }>(),
@@ -38,8 +39,11 @@
  },
);
const isEditable = computed(() =>
  ['create', 'update'].includes(props.formType),
/** 是否允许新增/编辑/删除资料 */
const canEdit = computed(() =>
  props.projectStatus === undefined ||
  props.projectStatus === MesPdProjectStatusEnum.PENDING_PUBLISH ||
  props.projectStatus === MesPdProjectStatusEnum.PENDING_UPLOAD,
);
const [DocumentFormModal, documentFormModalApi] = useVbenModal({
@@ -66,21 +70,15 @@
async function handleDelete(row: MesPdDocumentApi.Document) {
  const hideLoading = message.loading({
    content: $t('ui.actionMessage.deleting', [row.name]),
    content: $t('ui.actionMessage.deleting', [row.documentName]),
    duration: 0,
  });
  try {
    await deletePdDocument(row.id!);
    message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
    message.success($t('ui.actionMessage.deleteSuccess', [row.documentName]));
    handleRefresh();
  } finally {
    hideLoading();
  }
}
function handlePreview(row: MesPdDocumentApi.Document) {
  if (row.fileUrl) {
    window.open(row.fileUrl, '_blank');
  }
}
@@ -97,7 +95,7 @@
            pageNo: page.currentPage,
            pageSize: page.pageSize,
            projectId: props.projectId,
            version: props.version,
            documentVersion: props.version,
            ...formValues,
          });
        },
@@ -119,11 +117,11 @@
<template>
  <DocumentFormModal @success="handleRefresh" />
  <Grid :table-title="tableTitle">
    <template v-if="isEditable" #toolbar-tools>
    <template v-if="canEdit" #toolbar-tools>
      <TableAction
        :actions="[
          {
            label: '上传附件',
            label: '上传资料',
            type: 'primary',
            icon: ACTION_ICON.ADD,
            onClick: handleCreate,
@@ -131,20 +129,20 @@
        ]"
      />
    </template>
    <template #file="{ row }">
      <a v-if="row.fileUrl" :href="row.fileUrl" target="_blank" class="text-primary">
        {{ row.fileName || '查看文件' }}
      </a>
      <span v-else class="text-gray-400">-</span>
    </template>
    <template #actions="{ row }">
      <TableAction
        :actions="[
          {
            label: '预览',
            type: 'link',
            ifShow: !!row.fileUrl,
            onClick: handlePreview.bind(null, row),
          },
          {
            label: $t('common.edit'),
            type: 'link',
            icon: ACTION_ICON.EDIT,
            ifShow: isEditable,
            ifShow: canEdit,
            onClick: handleEdit.bind(null, row),
          },
          {
@@ -152,9 +150,9 @@
            type: 'link',
            danger: true,
            icon: ACTION_ICON.DELETE,
            ifShow: isEditable,
            ifShow: canEdit,
            popConfirm: {
              title: $t('ui.actionMessage.deleteConfirm', [row.name]),
              title: $t('ui.actionMessage.deleteConfirm', [row.documentName]),
              confirm: handleDelete.bind(null, row),
            },
          },