Răsfoiți Sursa

- 增加临时文件夹
- 项目管理的小bug修复

Huanyi 3 luni în urmă
părinte
comite
b91b2ee762

+ 3 - 2
src/views/document/folder/document/DocumentList.vue

@@ -191,9 +191,10 @@
 
     <!-- 递交文档对话框 -->
     <el-dialog v-model="submitDialog.visible" :title="submitDialog.title" width="500px" append-to-body>
+      <el-alert title="仅支持上传 PDF 格式文件" type="info" :closable="false" style="margin-bottom: 20px" />
       <el-form ref="submitFormRef" :model="submitForm" :rules="submitRules" label-width="120px">
         <el-form-item :label="t('document.document.submitForm.file')" prop="ossId">
-          <fileUpload v-model="submitForm.ossId" :limit="1" :action="'/common/resource/oss/upload'" />
+          <fileUpload v-model="submitForm.ossId" :limit="1" :action="'/common/resource/oss/upload'" accept=".pdf" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -712,7 +713,7 @@ defineExpose({
     }
   }
 
-  // 确保表格单元格内容不换行
+    // 确保表格单元格内容不换行
   :deep(.el-table__cell) {
     .cell {
       overflow: hidden;

+ 25 - 2
src/views/document/folder/document/FolderTree.vue

@@ -16,7 +16,7 @@
               <Document v-else />
             </el-icon>
             <span class="node-label" @click="handleFolderClick(data)">{{ node.label }}</span>
-            <span class="node-actions">
+            <span v-if="data.id !== 0" class="node-actions">
               <span class="menu-trigger" @click="toggleMenu($event, data)">
                 <el-icon>
                   <MoreFilled />
@@ -69,6 +69,13 @@
     <!-- 添加文件夹对话框 -->
     <el-dialog v-model="dialog.visible" :title="dialog.title" width="600px" append-to-body>
       <el-form ref="folderFormRef" :model="form" :rules="rules" label-width="140px">
+        <el-form-item v-if="!dialog.isEdit && form.parentId === undefined" :label="t('document.document.form.type')" prop="type">
+          <el-select v-model="form.type" :placeholder="t('document.document.form.typePlaceholder')" style="width: 100%">
+            <el-option :label="t('document.document.type.country')" :value="1" />
+            <el-option :label="t('document.document.type.center')" :value="2" />
+            <el-option :label="t('document.document.type.folder')" :value="0" />
+          </el-select>
+        </el-form-item>
         <el-form-item :label="t('document.document.form.name')" prop="name">
           <el-input v-model="form.name" :placeholder="t('document.document.form.namePlaceholder')" clearable />
         </el-form-item>
@@ -189,7 +196,22 @@ const getList = async () => {
   loading.value = true;
   try {
     const res = await listFolder({ projectId: props.projectId } as any);
-    treeData.value = res.data || [];
+    const folders = res.data || [];
+    
+    // 添加临时文件夹到列表底部
+    const tempFolder: FolderListVO = {
+      id: 0,
+      projectId: props.projectId as number,
+      parentId: undefined,
+      type: 0,
+      name: '临时文件夹',
+      status: 0,
+      note: '',
+      restrictionLevel: -1,
+      children: []
+    };
+    
+    treeData.value = [...folders, tempFolder];
   } catch (error) {
     ElMessage.error(t('document.document.message.getFolderListFailed'));
     console.error(error);
@@ -234,6 +256,7 @@ const handleAddFolder = () => {
   currentNode.value = null;
   form.value.projectId = props.projectId;
   form.value.parentId = undefined;
+  form.value.type = 1; // 默认选择国家类型
   dialog.visible = true;
   dialog.title = t('document.document.dialog.addFolder');
   dialog.isEdit = false;

+ 2 - 2
src/views/document/folder/document/index.vue

@@ -189,8 +189,8 @@ const handleBack = () => {
 
 // 处理文件夹点击
 const handleFolderClick = (folder: FolderListVO) => {
-  // 只有文件夹类型(type=0)才显示文档列表
-  if (folder.type === 0) {
+  // 国家、中心、文件夹都可以显示文档列表
+  if (folder.type === 0 || folder.type === 1 || folder.type === 2) {
     selectedFolder.value = folder;
   } else {
     selectedFolder.value = null;

+ 2 - 1
src/views/home/taskCenter/submission/index.vue

@@ -124,9 +124,10 @@
 
     <!-- 递交文档对话框 -->
     <el-dialog v-model="submitDialog.visible" :title="submitDialog.title" width="500px" append-to-body>
+      <el-alert title="仅支持上传 PDF 格式文件" type="info" :closable="false" style="margin-bottom: 20px" />
       <el-form ref="submitFormRef" :model="submitForm" :rules="submitRules" label-width="120px">
         <el-form-item label="文件" prop="ossId">
-          <fileUpload v-model="submitForm.ossId" :limit="1" :action="'/common/resource/oss/upload'" />
+          <fileUpload v-model="submitForm.ossId" :limit="1" :action="'/common/resource/oss/upload'" accept=".pdf" />
         </el-form-item>
       </el-form>
       <template #footer>

+ 30 - 1
src/views/project/management/detail/pages/basicInfo.vue

@@ -40,7 +40,9 @@
           <el-col :span="8">
             <div class="info-item">
               <label class="info-label">{{ t('project.management.table.status') }}</label>
-              <div class="info-value">{{ projectData.status || '-' }}</div>
+              <div class="info-value">
+                <el-tag :type="getStatusType(projectData.status)">{{ getStatusText(projectData.status) }}</el-tag>
+              </div>
             </div>
           </el-col>
         </el-row>
@@ -170,6 +172,33 @@ const { project_type, project_language } = toRefs<any>(proxy?.useDict('project_t
 // 接收从父组件传递的项目数据
 const projectData = inject<any>('projectData');
 
+// 项目状态枚举映射
+const projectStatusMap: Record<number, string> = {
+  0: 'unstarted',
+  1: 'underway',
+  2: 'paused',
+  3: 'finished'
+};
+
+// 获取状态文本(国际化)
+const getStatusText = (status: number | undefined) => {
+  if (status === undefined || status === null) return '-';
+  const statusKey = projectStatusMap[status];
+  return statusKey ? t(`project.management.status.${statusKey}`) : status;
+};
+
+// 获取状态标签类型
+const getStatusType = (status: number | undefined): 'success' | 'info' | 'warning' | 'primary' | 'danger' => {
+  const typeMap: Record<number, 'success' | 'info' | 'warning' | 'primary' | 'danger'> = {
+    0: 'info',
+    1: 'success',
+    2: 'warning',
+    3: 'primary'
+  };
+  if (status === undefined || status === null) return 'info';
+  return typeMap[status] || 'info';
+};
+
 // 计算项目进度
 const projectProgress = computed(() => {
   if (!projectData?.value?.startTime || !projectData?.value?.endTime) {

+ 1 - 1
src/views/search/index.vue

@@ -111,7 +111,7 @@
             <DocumentStatusTag :status="scope.row.status" />
           </template>
         </el-table-column>
-        <el-table-column prop="submitter" :label="t('search.table.submitter')" width="120" align="center" />
+        <el-table-column prop="submitterName" :label="t('search.table.submitter')" width="120" align="center" />
         <el-table-column prop="submitDeadline" :label="t('search.table.submitDeadline')" width="110" align="center">
           <template #default="scope">
             <span v-if="scope.row.submitDeadline">{{ parseTime(scope.row.submitDeadline, '{y}-{m}-{d}') }}</span>