Prechádzať zdrojové kódy

📦 修复传承人协议导出PDF问题

快乐的梦鱼 1 mesiac pred
rodič
commit
ba35328bb5

+ 3 - 0
src/api/collect/AssessmentConsts.ts

@@ -0,0 +1,3 @@
+export const LEVEL_NATIONAL = 23;
+export const LEVEL_PROVINCE = 24;
+export const LEVEL_DISTRICT = 25;

+ 22 - 0
src/api/collect/AssessmentContent.ts

@@ -371,6 +371,16 @@ export class SelfAssessmentDetail extends DataModel<SelfAssessmentDetail> {
       districtPoints: { clientSide: 'number', serverSide: 'number' },
       province: { clientSide: 'number', serverSide: 'number' },
       provincePoints: { clientSide: 'number', serverSide: 'number' },
+      districtSt: { clientSide: 'number', serverSide: 'number' },
+      districtStPoints: { clientSide: 'number', serverSide: 'number' },
+      districtNd: { clientSide: 'number', serverSide: 'number' },
+      districtNdPoints: { clientSide: 'number', serverSide: 'number' },
+      districtRd: { clientSide: 'number', serverSide: 'number' },
+      districtRdPoints: { clientSide: 'number', serverSide: 'number' },
+      districtTh: { clientSide: 'number', serverSide: 'number' },
+      districtThPoints: { clientSide: 'number', serverSide: 'number' },
+      districtFi: { clientSide: 'number', serverSide: 'number' },
+      districtFiPoints: { clientSide: 'number', serverSide: 'number' },
       level: { clientSide: 'number', serverSide: 'string' },
       content: { 
         customToClientFn: (value) => {
@@ -453,6 +463,16 @@ export class SelfAssessmentDetail extends DataModel<SelfAssessmentDetail> {
   districtPoints = 0 as number;
   province = null as number|null;
   provincePoints = 0 as number;
+  districtSt = null as number|null;
+  districtStPoints = 0 as number;
+  districtNd = null as number|null;
+  districtNdPoints = 0 as number;
+  districtRd = null as number|null;
+  districtRdPoints = 0 as number;
+  districtTh = null as number|null;
+  districtThPoints = 0 as number;
+  districtFi = null as number|null;
+  districtFiPoints = 0 as number;
   createtime = '' as string;
   updatetime = '' as string;
   deletetime = '' as string|null;
@@ -462,6 +482,8 @@ export class SelfAssessmentDetail extends DataModel<SelfAssessmentDetail> {
   rejectType?: number;
   /** 退回原因 */
   rejectReason?: string;
+  /** 退回意见 reasons [键值-角色组id : 退回意见] */
+  reasons = {} as Record<number, string>;
 }
 
 /** 传承协议详情 */

+ 6 - 0
src/pages.json

@@ -330,6 +330,12 @@
             "navigationBarTitleText": "自查评估表列表",
             "enablePullDownRefresh": true
           }
+        },
+        {
+          "path": "assessment/argeement-sign-preview-pdf",
+          "style": {
+            "navigationBarTitleText": "预览PDF"
+          }
         }
       ]
     }

+ 38 - 0
src/pages/collect/assessment/argeement-sign-preview-pdf.vue

@@ -0,0 +1,38 @@
+<template>
+  <FlexCol :padding="20" center gap="10">
+    <Button text="预览PDF" type="primary" @click="goMiniProgramPreviewPdf" />
+    <Button text="返回" @click="back" />
+  </FlexCol>
+</template>
+
+<script setup lang="ts">
+import { useLoadQuerys } from '@/common/composeabe/LoadQuerys';
+import { back } from '@/components/utils/PageAction';
+import { formatError } from '@imengyu/imengyu-utils';
+import Button from '@/components/basic/Button.vue';
+import FlexCol from '@/components/layout/FlexCol.vue';
+import AssessmentContentApi from '@/api/collect/AssessmentContent';
+
+const { querys } = useLoadQuerys({
+  id: 0,
+}, () => {
+  goMiniProgramPreviewPdf();
+});
+
+async function goMiniProgramPreviewPdf() {
+  try {
+    const pdfPath = await AssessmentContentApi.downloadAgreementPdf(querys.value.id);
+    uni.openDocument({
+      filePath: pdfPath,
+      fileType: 'pdf',
+      showMenu: true,
+    });
+  } catch (error) {
+    alert({
+      title: '下载PDF失败',
+      content: formatError(error),
+    });
+  }
+}
+
+</script>

+ 35 - 8
src/pages/collect/assessment/components/SelfAssessmentResultBlock.vue

@@ -20,6 +20,10 @@
         <Text v-if="currentForm[sec.pointsField]" :text="String(currentForm[sec.pointsField])" />
         <Text v-else color="text.second" text="(待审核填写)" />
       </FlexRow>
+      <FlexRow v-if="sec.reason" align="start" gap="gap.sm">
+        <Text text="退回/修改意见:" color="text.warning" />
+        <Text :text="sec.reason" color="text.warning" />
+      </FlexRow>
       <Alert 
         v-if="currentForm.rejectType === sec.rejectTypeValue && currentForm.rejectReason"  
         type="danger" 
@@ -31,7 +35,10 @@
 </template>
 
 <script setup lang="ts">
+import { computed } from 'vue';
 import type { SelfAssessmentDetail } from '@/api/collect/AssessmentContent';
+import { LEVEL_NATIONAL } from '@/api/collect/AssessmentConsts';
+import { GROUP_PROTECT_UNIT, GROUP_DISTRICT, GROUP_DISTRICT_CENTER, GROUP_DISTRICT_ST, GROUP_DISTRICT_ND, GROUP_DISTRICT_RD, GROUP_DISTRICT_TH, GROUP_PROVINCE } from '../composeabe/GroupData';
 import FlexCol from '@/components/layout/FlexCol.vue';
 import FlexRow from '@/components/layout/FlexRow.vue';
 import Text from '@/components/basic/Text.vue';
@@ -39,8 +46,17 @@ import CheckBox from '@/components/form/CheckBox.vue';
 import Tag from '@/components/display/Tag.vue';
 import Alert from '@/components/feedback/Alert.vue';
 
-type OpinionField = 'ichUnit' | 'county' | 'district' | 'province';
-type PointsField = 'unitPoints' | 'countyPoints' | 'districtPoints' | 'provincePoints';
+type OpinionField = 'ichUnit' | 'county' | 'district' | 'province' | 'districtSt' | 'districtNd' | 'districtRd' | 'districtTh';
+type PointsField = 'unitPoints' | 'countyPoints' | 'districtPoints' | 'provincePoints' | 'districtStPoints' | 'districtNdPoints' | 'districtRdPoints' | 'districtThPoints';
+
+interface ReviewSection {
+  key: string;
+  title: string;
+  opinionField: OpinionField;
+  pointsField: PointsField;
+  rejectTypeValue: number;
+  reason: string;
+}
 
 const props = defineProps<{
   currentForm: SelfAssessmentDetail;
@@ -53,10 +69,21 @@ const opinionOptions = [
   { label: '丧失传承能力', value: 4 },
   { label: '取消资格', value: 5 },
 ];
-const reviewSections: { key: string; title: string; opinionField: OpinionField; pointsField: PointsField; rejectTypeValue: number }[] = [
-  { key: 'ichUnit', title: '1. 项目保护单位意见', opinionField: 'ichUnit', pointsField: 'unitPoints', rejectTypeValue: 2 },
-  { key: 'county', title: '2. 县(区)文旅部门审核意见', opinionField: 'county', pointsField: 'countyPoints', rejectTypeValue: 3 },
-  { key: 'district', title: '3. 设区市文旅部门、省非遗中心审核意见', opinionField: 'district', pointsField: 'districtPoints', rejectTypeValue: 4 },
-  { key: 'province', title: '4. 省文化和旅游厅意见', opinionField: 'province', pointsField: 'provincePoints', rejectTypeValue: 5 },
-];
+
+const reviewSections = computed<ReviewSection[]>(() => {
+  const reasons = props.currentForm.reasons || {};
+  const result: (Omit<ReviewSection, 'reason'> & { groupId: number })[] = [
+    { key: 'ichUnit', title: '1. 项目保护单位意见', opinionField: 'ichUnit', pointsField: 'unitPoints', rejectTypeValue: 2, groupId: GROUP_PROTECT_UNIT },
+    { key: 'county', title: '2. 县(区)文旅部门审核意见', opinionField: 'county', pointsField: 'countyPoints', rejectTypeValue: 3, groupId: GROUP_DISTRICT },
+    { key: 'district', title: '3. 设区市文旅部门、省非遗中心审核意见', opinionField: 'district', pointsField: 'districtPoints', rejectTypeValue: 4, groupId: GROUP_DISTRICT_CENTER },
+    { key: 'districtSt', title: '\u20033.1 项目负责人意见', opinionField: 'districtSt', pointsField: 'districtStPoints', rejectTypeValue: -1, groupId: GROUP_DISTRICT_ST },
+    { key: 'districtNd', title: '\u20033.2 部门主任意见', opinionField: 'districtNd', pointsField: 'districtNdPoints', rejectTypeValue: -1, groupId: GROUP_DISTRICT_ND },
+    { key: 'districtRd', title: '\u20033.3 分管领导意见', opinionField: 'districtRd', pointsField: 'districtRdPoints', rejectTypeValue: -1, groupId: GROUP_DISTRICT_RD },
+    { key: 'districtTh', title: '\u20033.4 公服处意见', opinionField: 'districtTh', pointsField: 'districtThPoints', rejectTypeValue: 4, groupId: GROUP_DISTRICT_TH },
+  ];
+  if (props.currentForm.level === LEVEL_NATIONAL) {
+    result.push({ key: 'province', title: '5. 省文化和旅游厅意见', opinionField: 'province', pointsField: 'provincePoints', rejectTypeValue: 5, groupId: GROUP_PROVINCE });
+  }
+  return result.map((sec) => ({ ...sec, reason: reasons[sec.groupId] || '' }));
+});
 </script>

+ 9 - 0
src/pages/collect/assessment/composeabe/GroupData.ts

@@ -0,0 +1,9 @@
+export const GROUP_PROVINCE = 11;
+export const GROUP_DISTRICT_CENTER = 10;
+export const GROUP_DISTRICT = 5;
+export const GROUP_PROTECT_UNIT = 9;
+export const GROUP_DISTRICT_ST = 12;
+export const GROUP_DISTRICT_ND = 13;
+export const GROUP_DISTRICT_RD = 14;
+export const GROUP_DISTRICT_TH = 15;
+export const GROUP_DISTRICT_FI = 16;