|
@@ -28,6 +28,7 @@
|
|
|
<div class="flex flex-row items-center gap-2">
|
|
<div class="flex flex-row items-center gap-2">
|
|
|
<a-button type="primary" @click="openDownloadModal">打包下载</a-button>
|
|
<a-button type="primary" @click="openDownloadModal">打包下载</a-button>
|
|
|
<a-button @click="openExportExcelModal">导出Excel</a-button>
|
|
<a-button @click="openExportExcelModal">导出Excel</a-button>
|
|
|
|
|
+ <a-button @click="openSummaryDownloadModal">审核结果汇总下载</a-button>
|
|
|
<span>{{ progressHint }}</span>
|
|
<span>{{ progressHint }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -113,6 +114,32 @@
|
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
</a-form>
|
|
</a-form>
|
|
|
</a-modal>
|
|
</a-modal>
|
|
|
|
|
+
|
|
|
|
|
+ <a-modal
|
|
|
|
|
+ v-model:open="showSummaryDownloadModal"
|
|
|
|
|
+ title="审核结果汇总下载"
|
|
|
|
|
+ @ok="handleSummaryDownload"
|
|
|
|
|
+ :confirmLoading="summaryDownloading"
|
|
|
|
|
+ okText="下载"
|
|
|
|
|
+ cancelText="取消"
|
|
|
|
|
+ >
|
|
|
|
|
+ <a-form layout="vertical">
|
|
|
|
|
+ <a-form-item label="年份">
|
|
|
|
|
+ <a-input-number v-model:value="summaryYear" :min="2020" :max="2030" style="width: 100%" />
|
|
|
|
|
+ </a-form-item>
|
|
|
|
|
+ <a-form-item label="级别">
|
|
|
|
|
+ <span v-if="props.level != null">{{ selfAssessmentLevelOptions.find((opt) => opt.id === props.level)?.name }}</span>
|
|
|
|
|
+ <a-select v-else v-model:value="summaryLevel" style="width: 100%">
|
|
|
|
|
+ <a-select-option v-for="opt in selfAssessmentLevelOptions" :key="opt.id" :value="opt.id">{{ opt.name }}</a-select-option>
|
|
|
|
|
+ </a-select>
|
|
|
|
|
+ </a-form-item>
|
|
|
|
|
+ <a-form-item label="地区">
|
|
|
|
|
+ <a-select v-model:value="summaryRegion" style="width: 100%">
|
|
|
|
|
+ <a-select-option v-for="opt in selfAssessmentRegionOptions.content.value" :key="opt.id" :value="opt.id">{{ opt.title }}</a-select-option>
|
|
|
|
|
+ </a-select>
|
|
|
|
|
+ </a-form-item>
|
|
|
|
|
+ </a-form>
|
|
|
|
|
+ </a-modal>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
@@ -125,6 +152,8 @@ import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
|
import AssessmentContentApi, { SelfAssessmentDetail } from '@/api/collect/AssessmentContent';
|
|
import AssessmentContentApi, { SelfAssessmentDetail } from '@/api/collect/AssessmentContent';
|
|
|
import CommonListBlock, { type DropdownCommonItem } from '@/components/content/CommonListBlock.vue';
|
|
import CommonListBlock, { type DropdownCommonItem } from '@/components/content/CommonListBlock.vue';
|
|
|
import { LEVEL_NATIONAL, LEVEL_PROVINCE, LEVEL_DISTRICT } from '@/api/collect/AssessmentConsts';
|
|
import { LEVEL_NATIONAL, LEVEL_PROVINCE, LEVEL_DISTRICT } from '@/api/collect/AssessmentConsts';
|
|
|
|
|
+import { useSimpleDataLoader } from '@/composeables/useSimpleDataLoader';
|
|
|
|
|
+import CommonContent from '@/api/CommonContent';
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
@@ -146,6 +175,12 @@ const exportYear = ref(new Date().getFullYear() - 1);
|
|
|
const exportLevel = ref(props.level ?? 0);
|
|
const exportLevel = ref(props.level ?? 0);
|
|
|
const exportProgress = ref(-100);
|
|
const exportProgress = ref(-100);
|
|
|
|
|
|
|
|
|
|
+const showSummaryDownloadModal = ref(false);
|
|
|
|
|
+const summaryDownloading = ref(false);
|
|
|
|
|
+const summaryYear = ref(new Date().getFullYear() - 1);
|
|
|
|
|
+const summaryLevel = ref(props.level ?? 0);
|
|
|
|
|
+const summaryRegion = ref('');
|
|
|
|
|
+
|
|
|
const { variable: lastSelfAssessmentProgress } = useMemorizeVar('adminSelfAssessmentProgress', -100);
|
|
const { variable: lastSelfAssessmentProgress } = useMemorizeVar('adminSelfAssessmentProgress', -100);
|
|
|
const { variable: lastSelfAssessmentLevel } = useMemorizeVar('adminSelfAssessmentLevel', 0);
|
|
const { variable: lastSelfAssessmentLevel } = useMemorizeVar('adminSelfAssessmentLevel', 0);
|
|
|
|
|
|
|
@@ -158,6 +193,10 @@ const selfAssessmentLevelOptions: DropdownCommonItem[] = [
|
|
|
{ id: LEVEL_DISTRICT, name: '市级' },
|
|
{ id: LEVEL_DISTRICT, name: '市级' },
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
|
|
+const selfAssessmentRegionOptions = useSimpleDataLoader(() => {
|
|
|
|
|
+ return CommonContent.getCategoryChildList(5);
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
const selfAssessmentProgressOptions: DropdownCommonItem[] = [
|
|
const selfAssessmentProgressOptions: DropdownCommonItem[] = [
|
|
|
{ id: -100, name: '全部状态' },
|
|
{ id: -100, name: '全部状态' },
|
|
|
{ id: -1, name: '未提交' },
|
|
{ id: -1, name: '未提交' },
|
|
@@ -263,6 +302,13 @@ function openExportExcelModal() {
|
|
|
showExportExcelModal.value = true;
|
|
showExportExcelModal.value = true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function openSummaryDownloadModal() {
|
|
|
|
|
+ summaryYear.value = new Date().getFullYear() - 1;
|
|
|
|
|
+ summaryLevel.value = props.level ?? lastSelfAssessmentLevel.value ?? 0;
|
|
|
|
|
+ summaryRegion.value = '';
|
|
|
|
|
+ showSummaryDownloadModal.value = true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
async function handleExportExcel() {
|
|
async function handleExportExcel() {
|
|
|
exporting.value = true;
|
|
exporting.value = true;
|
|
|
try {
|
|
try {
|
|
@@ -282,9 +328,29 @@ async function handleExportExcel() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+async function handleSummaryDownload() {
|
|
|
|
|
+ summaryDownloading.value = true;
|
|
|
|
|
+ try {
|
|
|
|
|
+ const level = summaryLevel.value > 0 ? String(summaryLevel.value) : undefined;
|
|
|
|
|
+ const region = summaryRegion.value?.trim() || undefined;
|
|
|
|
|
+ await AssessmentContentApi.downloadSummaryPdf({
|
|
|
|
|
+ year: summaryYear.value,
|
|
|
|
|
+ level,
|
|
|
|
|
+ region,
|
|
|
|
|
+ });
|
|
|
|
|
+ showSummaryDownloadModal.value = false;
|
|
|
|
|
+ message.success('下载成功');
|
|
|
|
|
+ } catch (e: any) {
|
|
|
|
|
+ message.error(e?.message || '下载失败');
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ summaryDownloading.value = false;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
watch(() => props.level, () => {
|
|
watch(() => props.level, () => {
|
|
|
list2Ref.value?.reload();
|
|
list2Ref.value?.reload();
|
|
|
exportLevel.value = props.level ?? 0;
|
|
exportLevel.value = props.level ?? 0;
|
|
|
|
|
+ summaryLevel.value = props.level ?? 0;
|
|
|
}, { immediate: true });
|
|
}, { immediate: true });
|
|
|
|
|
|
|
|
defineExpose({
|
|
defineExpose({
|