|
|
@@ -4,90 +4,90 @@
|
|
|
<div v-show="showSearch" class="mb-[10px]">
|
|
|
<el-card shadow="hover">
|
|
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
|
|
|
- <el-form-item :label="t('project.management.search.code')" prop="code">
|
|
|
+ <el-form-item :label="t('document.project.search.code')" prop="code">
|
|
|
<el-input
|
|
|
v-model="queryParams.code"
|
|
|
- :placeholder="t('project.management.search.codePlaceholder')"
|
|
|
+ :placeholder="t('document.project.search.codePlaceholder')"
|
|
|
clearable
|
|
|
@keyup.enter="handleQuery"
|
|
|
style="width: 240px"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.name')" prop="name">
|
|
|
+ <el-form-item :label="t('document.project.search.name')" prop="name">
|
|
|
<el-input
|
|
|
v-model="queryParams.name"
|
|
|
- :placeholder="t('project.management.search.namePlaceholder')"
|
|
|
+ :placeholder="t('document.project.search.namePlaceholder')"
|
|
|
clearable
|
|
|
@keyup.enter="handleQuery"
|
|
|
style="width: 240px"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.language')" prop="language">
|
|
|
+ <el-form-item :label="t('document.project.search.language')" prop="language">
|
|
|
<el-select
|
|
|
v-model="queryParams.language"
|
|
|
- :placeholder="t('project.management.search.languagePlaceholder')"
|
|
|
+ :placeholder="t('document.project.search.languagePlaceholder')"
|
|
|
clearable
|
|
|
style="width: 240px"
|
|
|
>
|
|
|
<el-option v-for="dict in project_language" :key="dict.value" :label="parseI18nName(dict.label)" :value="dict.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.type')" prop="type">
|
|
|
- <el-select v-model="queryParams.type" :placeholder="t('project.management.search.typePlaceholder')" clearable style="width: 240px">
|
|
|
+ <el-form-item :label="t('document.project.search.type')" prop="type">
|
|
|
+ <el-select v-model="queryParams.type" :placeholder="t('document.project.search.typePlaceholder')" clearable style="width: 240px">
|
|
|
<el-option v-for="dict in project_type" :key="dict.value" :label="parseI18nName(dict.label)" :value="dict.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.startTime')">
|
|
|
+ <el-form-item :label="t('document.project.search.startTime')">
|
|
|
<el-date-picker
|
|
|
v-model="dateRangeStartTime"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
type="daterange"
|
|
|
range-separator="-"
|
|
|
- :start-placeholder="t('project.management.search.startDate')"
|
|
|
- :end-placeholder="t('project.management.search.endDate')"
|
|
|
+ :start-placeholder="t('document.project.search.startDate')"
|
|
|
+ :end-placeholder="t('document.project.search.endDate')"
|
|
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
style="width: 240px"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.endTime')">
|
|
|
+ <el-form-item :label="t('document.project.search.endTime')">
|
|
|
<el-date-picker
|
|
|
v-model="dateRangeEndTime"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
type="daterange"
|
|
|
range-separator="-"
|
|
|
- :start-placeholder="t('project.management.search.startDate')"
|
|
|
- :end-placeholder="t('project.management.search.endDate')"
|
|
|
+ :start-placeholder="t('document.project.search.startDate')"
|
|
|
+ :end-placeholder="t('document.project.search.endDate')"
|
|
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
style="width: 240px"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.createTime')">
|
|
|
+ <el-form-item :label="t('document.project.search.createTime')">
|
|
|
<el-date-picker
|
|
|
v-model="dateRangeCreateTime"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
type="daterange"
|
|
|
range-separator="-"
|
|
|
- :start-placeholder="t('project.management.search.startDate')"
|
|
|
- :end-placeholder="t('project.management.search.endDate')"
|
|
|
+ :start-placeholder="t('document.project.search.startDate')"
|
|
|
+ :end-placeholder="t('document.project.search.endDate')"
|
|
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
style="width: 240px"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="t('project.management.search.updateTime')">
|
|
|
+ <el-form-item :label="t('document.project.search.updateTime')">
|
|
|
<el-date-picker
|
|
|
v-model="dateRangeUpdateTime"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
type="daterange"
|
|
|
range-separator="-"
|
|
|
- :start-placeholder="t('project.management.search.startDate')"
|
|
|
- :end-placeholder="t('project.management.search.endDate')"
|
|
|
+ :start-placeholder="t('document.project.search.startDate')"
|
|
|
+ :end-placeholder="t('document.project.search.endDate')"
|
|
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
style="width: 240px"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
- <el-button type="primary" icon="Search" @click="handleQuery">{{ t('project.management.search.search') }}</el-button>
|
|
|
- <el-button icon="Refresh" @click="resetQuery">{{ t('project.management.search.reset') }}</el-button>
|
|
|
+ <el-button type="primary" icon="Search" @click="handleQuery">{{ t('document.project.search.search') }}</el-button>
|
|
|
+ <el-button icon="Refresh" @click="resetQuery">{{ t('document.project.search.reset') }}</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</el-card>
|
|
|
@@ -102,37 +102,37 @@
|
|
|
</template>
|
|
|
|
|
|
<el-table v-loading="loading" border :data="projectList" style="width: 100%">
|
|
|
- <el-table-column :label="t('project.management.table.id')" align="center" prop="id" width="100" />
|
|
|
- <el-table-column :label="t('project.management.table.code')" align="center" prop="code" width="200" />
|
|
|
- <el-table-column :label="t('project.management.table.name')" align="center" prop="name" width="200" />
|
|
|
- <el-table-column :label="t('project.management.table.language')" align="center" prop="language" width="150">
|
|
|
+ <el-table-column :label="t('document.project.table.id')" align="center" prop="id" width="100" />
|
|
|
+ <el-table-column :label="t('document.project.table.code')" align="center" prop="code" width="200" />
|
|
|
+ <el-table-column :label="t('document.project.table.name')" align="center" prop="name" width="200" />
|
|
|
+ <el-table-column :label="t('document.project.table.language')" align="center" prop="language" width="150">
|
|
|
<template #default="scope">
|
|
|
<dict-tag :options="project_language" :value="scope.row.language" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="t('project.management.table.type')" align="center" prop="type" width="200">
|
|
|
+ <el-table-column :label="t('document.project.table.type')" align="center" prop="type" width="200">
|
|
|
<template #default="scope">
|
|
|
<dict-tag :options="project_type" :value="scope.row.type" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="t('project.management.table.status')" align="center" prop="status" width="100">
|
|
|
+ <el-table-column :label="t('document.project.table.status')" align="center" prop="status" width="100">
|
|
|
<template #default="scope">
|
|
|
- <el-tag :type="getStatusType(scope.row.status)">{{ getStatusText(scope.row.status) }}</el-tag>
|
|
|
+ <ProjectStatusTag :status="scope.row.status" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="t('project.management.table.startTime')" align="center" prop="startTime" width="120">
|
|
|
+ <el-table-column :label="t('document.project.table.startTime')" align="center" prop="startTime" width="120">
|
|
|
<template #default="scope">
|
|
|
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="t('project.management.table.endTime')" align="center" prop="endTime" width="120">
|
|
|
+ <el-table-column :label="t('document.project.table.endTime')" align="center" prop="endTime" width="120">
|
|
|
<template #default="scope">
|
|
|
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="t('project.management.table.createTime')" align="center" prop="createTime" min-width="180" />
|
|
|
- <el-table-column :label="t('project.management.table.updateTime')" align="center" prop="updateTime" min-width="180" />
|
|
|
- <el-table-column :label="t('project.management.table.actions')" align="center" width="120" fixed="right">
|
|
|
+ <el-table-column :label="t('document.project.table.createTime')" align="center" prop="createTime" min-width="180" />
|
|
|
+ <el-table-column :label="t('document.project.table.updateTime')" align="center" prop="updateTime" min-width="180" />
|
|
|
+ <el-table-column :label="t('document.project.table.actions')" align="center" width="120" fixed="right">
|
|
|
<template #default="scope">
|
|
|
<el-button
|
|
|
v-hasPermi="['document:folder:entry']"
|
|
|
@@ -141,7 +141,7 @@
|
|
|
style="padding: 0 5px; font-size: 10px; height: 24px; --el-button-icon-span-gap: 2px"
|
|
|
@click="handleEnterProject(scope.row)"
|
|
|
>
|
|
|
- {{ t('project.management.table.enterProject') }}
|
|
|
+ {{ t('document.project.table.enterProject') }}
|
|
|
</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
@@ -157,38 +157,12 @@ import { listProject } from '@/api/document/folder';
|
|
|
import { ProjectVO, ProjectQuery } from '@/api/document/folder/types';
|
|
|
import { useI18n } from 'vue-i18n';
|
|
|
import { parseI18nName } from '@/utils/i18n';
|
|
|
+import ProjectStatusTag from '@/components/ProjectStatusTag/index.vue';
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const { t } = useI18n();
|
|
|
const { project_type, project_language } = toRefs<any>(proxy?.useDict('project_type', 'project_language'));
|
|
|
|
|
|
-// 项目状态枚举映射
|
|
|
-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 projectList = ref<ProjectVO[]>([]);
|
|
|
const loading = ref(true);
|
|
|
const showSearch = ref(true);
|