Pārlūkot izejas kodu

⚙️ 修改细节问题

快乐的梦鱼 3 dienas atpakaļ
vecāks
revīzija
4d8d40895f

+ 9 - 1
src/components/basic/Text.vue

@@ -1,5 +1,8 @@
 <template>
-  <text :id="id" :class="innerClass" :style="style" @click="onClick">
+  <view v-if="allowChildNode" :id="id" :class="innerClass" :style="style"  @click="onClick">
+    <slot>{{ text }}</slot>
+  </view>
+  <text v-else :id="id" :class="innerClass" :style="style" @click="onClick">
     <!-- #ifdef APP-NVUE -->
     {{ text }}
     <!-- #endif -->
@@ -20,6 +23,11 @@ export interface TextProps {
    */
   color?: string,
   /**
+   * 是否允许子节点。如果为 true,则使用view包裹。
+   * @default false
+   */
+  allowChildNode?: boolean,
+  /**
    * 文字阴影颜色。可以是颜色字符串或者在主题中配置的预设名称。
    */
   shadowColor?: string,

+ 4 - 16
src/pages/collect/assessment/argeement-sign.vue

@@ -15,16 +15,13 @@
           <FlexCol v-else gap="gap.md">
             <Alert type="info" message="请仔细阅读传承协议,确保您已理解内容,并签署传承协议。" />
 
-            <FlexCol
-              :gap="'md'"
-              :innerStyle="articleWrapStyle"
-            >
+            <FlexCol gap="gap.md">
               <Form ref="formRef" :model="currentAgreement" :rules="formRules">
                 <H3>{{ agreementTitle }}</H3>
 
                 <AgreementBodyNational
                   v-if="agreementLevel === 23"
-                  :detail="currentAgreement as AgreementDetail"
+                  :detail="(currentAgreement as AgreementDetail)"
                   :agreement-year="agreementYear"
                   :party-a-stamp-date="partyAStampDate"
                   :party-b-sign-date="partyBSignDate"
@@ -34,7 +31,7 @@
                 />
                 <AgreementBodyProvincial
                   v-else-if="agreementLevel === 24"
-                  :detail="currentAgreement as AgreementDetail"
+                  :detail="(currentAgreement as AgreementDetail)"
                   :agreement-year="agreementYear"
                   :party-a-stamp-date="partyAStampDate"
                   :party-b-sign-date="partyBSignDate"
@@ -44,7 +41,7 @@
                 />
                 <AgreementBodyMunicipal
                   v-else
-                  :detail="currentAgreement as AgreementDetail"
+                  :detail="(currentAgreement as AgreementDetail)"
                   :agreement-year="agreementYear"
                   :party-a-stamp-date="partyAStampDate"
                   :party-b-sign-date="partyBSignDate"
@@ -188,15 +185,6 @@ const formRules = computed<Rules>(() => {
   return rules;
 });
 
-const articleWrapStyle = {
-  padding: '24rpx 28rpx',
-  borderRadius: '16rpx',
-  backgroundColor: '#fafafa',
-  borderWidth: '1rpx',
-  borderStyle: 'solid',
-  borderColor: '#eeeeee',
-};
-
 async function loadBasicInfo() {
   const basicInfo = await AssessmentContentApi.getInheritorBasic(authStore.userInfo?.id);
   assertNotNull(currentAgreement.value, 'currentAgreement is null');

+ 18 - 0
src/pages/collect/assessment/components/AgreementBody.vue

@@ -0,0 +1,18 @@
+<template>
+  <FlexCol :inner-style="articleWrapStyle">
+    <slot />
+  </FlexCol>
+</template>
+
+<script setup lang="ts">
+import FlexCol from '@/components/layout/FlexCol.vue';
+
+const articleWrapStyle = {
+  padding: '24rpx 28rpx',
+  borderRadius: '16rpx',
+  backgroundColor: '#fafafa',
+  borderWidth: '1rpx',
+  borderStyle: 'solid',
+  borderColor: '#eeeeee',
+};
+</script>

+ 71 - 59
src/pages/collect/assessment/components/AgreementBodyMunicipal.vue

@@ -1,71 +1,76 @@
 <template>
-  <FlexCol :gap="'sm'">
-    <P>甲方:(设文化和旅游局)</P>
-    <FlexRow align="center" wrap :gap="'sm'">
-      <Text font-config="p" color="text.content">乙方:</Text>
-      <AgreementPrefillInline
-        v-model="detail.partyB"
-        name="partyB"
-        placeholder="请填写乙方(传承人)姓名"
-      />
-    </FlexRow>
-  </FlexCol>
+  <AgreementBody>
+    <FlexCol gap="gap.sm">
+      <P>甲方:(设文化和旅游局)</P>
+      <FlexRow align="center" wrap gap="gap.sm">
+        <Text font-config="p" color="text.content">乙方:</Text>
+        <AgreementPrefillInline
+          v-model="detail.partyB"
+          name="partyB"
+          placeholder="请填写乙方(传承人)姓名"
+        />
+      </FlexRow>
+    </FlexCol>
 
-  <Height :height="8" />
+    <Height :height="8" />
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    为传承弘扬中华优秀传统文化,有效保护和传承非物质文化遗产,鼓励和支持市级非物质文化遗产代表性传承人开展传承活动,根据《福建省非物质文化遗产条例》《厦门市市级非物质文化遗产代表性传承人认定与管理办法》等有关法律法规,制定协议,并按照下列各项条款签署,甲、乙双方共同遵守。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      为传承弘扬中华优秀传统文化,有效保护和传承非物质文化遗产,鼓励和支持市级非物质文化遗产代表性传承人开展传承活动,根据《福建省非物质文化遗产条例》《厦门市市级非物质文化遗产代表性传承人认定与管理办法》等有关法律法规,制定协议,并按照下列各项条款签署,甲、乙双方共同遵守。
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    九、甲乙双方应当以习近平新时代中国特色社会主义思想为指导,坚持以人民为中心,弘扬社会主义核心价值观,共同保护传承非物质文化遗产,推动中华优秀传统文化创造性转化、创新性发展。
-  </Text>
+    <Height :height="8" />
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十、甲方按照《厦门市市级非物质文化遗产代表性传承人认定与管理办法》的要求,支持市级非物质文化遗产代表性传承人开展传承、传播活动
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      九、甲乙双方应当以习近平新时代中国特色社会主义思想为指导,坚持以人民为中心,弘扬社会主义核心价值观,共同保护传承非物质文化遗产,推动中华优秀传统文化创造性转化、创新性发展
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十一、甲方按照《福建省非物质文化遗产保护与传承专项资金管理办法》的要求,落实市文化和旅游局给予的代表性传承人的传承补助
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十、甲方按照《厦门市市级非物质文化遗产代表性传承人认定与管理办法》的要求,支持市级非物质文化遗产代表性传承人开展传承、传播活动
+    </Text>
 
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">十二、乙方应积极开展传承活动,培养后继人才,制定传承计划,{{ agreementYear }} 年度带徒</Text>
-    <AgreementPrefillInline
-      v-model="detail.apprentice"
-      name="apprentice"
-      number-mode
-      placeholder="人数"
-      suffix="人。"
-    />
-  </FlexRow>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十三、乙方应妥善保存相关实物、资料情况。主动保存、提供与该项非遗项目有关的原始资料、实物,配合记录工作。
-  </Text>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十四、乙方应主动、及时配合非遗调查,主动向文化和旅游主管部门、非遗保护中心反映非遗项目保护、传承情况和总结材料,并完成文化和旅游主管部门临时交办的非遗工作任务,提出保护的意见、建议。
-  </Text>
-
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">十五、乙方应积极、主动参加各级政府组织的非物质文化遗产公益性宣传活动,{{ agreementYear }} 年度完成</Text>
-    <AgreementPrefillInline
-      v-model="detail.activity"
-      name="activity"
-      number-mode
-      placeholder="场次"
-      suffix="场。"
-    />
-  </FlexRow>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十一、甲方按照《福建省非物质文化遗产保护与传承专项资金管理办法》的要求,落实市文化和旅游局给予的代表性传承人的传承补助。
+    </Text>
+
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      十二、乙方应积极开展传承活动,培养后继人才,制定传承计划,{{ agreementYear }} 年度带徒
+      <AgreementPrefillInline
+        v-model="detail.apprentice"
+        name="apprentice"
+        number-mode
+        placeholder="人数"
+        suffix="人。"
+      />
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十三、乙方应妥善保存相关实物、资料情况。主动保存、提供与该项非遗项目有关的原始资料、实物,配合记录工作。
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十四、乙方应主动、及时配合非遗调查,主动向文化和旅游主管部门、非遗保护中心反映非遗项目保护、传承情况和总结材料,并完成文化和旅游主管部门临时交办的非遗工作任务,提出保护的意见、建议。
+    </Text>
+
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      十五、乙方应积极、主动参加各级政府组织的非物质文化遗产公益性宣传活动,{{ agreementYear }} 年度完成
+      <AgreementPrefillInline
+        v-model="detail.activity"
+        name="activity"
+        number-mode
+        placeholder="场次"
+        suffix="场。"
+      />
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十六、乙方应合理使用市级非物质文化遗产代表性传承人补助经费,用于开展非遗项目的传习活动,做好传承补助经费使用记录、支出范围和绩效评价等,不得用于生活补助。
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十六、乙方应合理使用市级非物质文化遗产代表性传承人补助经费,用于开展非遗项目的传习活动,做好传承补助经费使用记录、支出范围和绩效评价等,不得用于生活补助。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十七、乙方应积极参与非物质文化遗产相关理论和实践研究、发表(出版)论文、专著等研究
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十七、乙方应积极参与非物质文化遗产相关理论和实践研究、发表(出版)论文、专著等研究。
-  </Text>
+  </AgreementBody>
 
   <Height :height="16" />
 
@@ -168,6 +173,7 @@ import Field from '@/components/form/Field.vue';
 import SignatureField from '@/components/form/SignatureField.vue';
 import AgreementPrefillInline from './AgreementPrefillInline.vue';
 import AgreementDateWriteBlock, { type AgreementYmdParts } from './AgreementDateWriteBlock.vue';
+import AgreementBody from './AgreementBody.vue';
 
 defineProps<{
   detail: AgreementDetail;
@@ -188,5 +194,11 @@ const paragraphStyle = {
 };
 const signBlockStyle = {
   paddingTop: '8rpx',
+  backgroundColor: '#fafafa',
+  borderRadius: '16rpx',
+  borderWidth: '1rpx',
+  borderStyle: 'solid',
+  borderColor: '#eeeeee',
+  overflow: 'hidden',
 };
 </script>

+ 81 - 69
src/pages/collect/assessment/components/AgreementBodyNational.vue

@@ -1,82 +1,87 @@
 <template>
-  <FlexCol :gap="'sm'">
-    <P>甲方:福建省文化和旅游厅</P>
-    <FlexRow align="center" wrap :gap="'sm'">
-      <Text font-config="p" color="text.content">乙方:</Text>
+  <AgreementBody>
+    <FlexCol gap="gap.sm">
+      <P>甲方:福建省文化和旅游厅</P>
+      <FlexRow align="center" wrap gap="gap.sm">
+        <Text font-config="p" color="text.content">乙方:</Text>
+        <AgreementPrefillInline
+          v-model="detail.partyB"
+          name="partyB"
+          placeholder="请填写乙方(传承人)姓名"
+        />
+      </FlexRow>
+    </FlexCol>
+
+    <Height :height="8" />
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      为传承弘扬中华优秀传统文化,有效保护和传承非物质文化遗产,鼓励和支持国家级非物质文化遗产代表性传承人开展传承活动,根据《中华人民共和国非物质文化遗产法》《国家级非物质文化遗产代表性传承人认定与管理办法》等有关法律法规,制定协议,并按照下列各项条款签署,甲、乙双方共同遵守。
+    </Text>
+    
+    <Height :height="8" />
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      一、甲乙双方应当以习近平新时代中国特色社会主义思想为指导,坚持以人民为中心,弘扬社会主义核心价值观,共同保护传承非物质文化遗产,推动中华优秀传统文化创造性转化、创新性发展。
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      二、甲方按照《国家级非物质文化遗产代表性传承人认定与管理办法》的要求,支持国家级非物质文化遗产代表性传承人开展传承、传播活动。
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      三、甲方按照《国家级非物质文化遗产保护专项资金管理办法》的要求,落实国家给予的代表性传承人的传承补助。
+    </Text>
+
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      四、乙方应积极开展传承活动,培养后继人才,制定传承计划,{{ agreementYear }} 年度带徒
       <AgreementPrefillInline
-        v-model="detail.partyB"
-        name="partyB"
-        placeholder="请填写乙方(传承人)姓名"
+        v-model="detail.apprentice"
+        name="apprentice"
+        number-mode
+        placeholder="人数"
+        suffix="人。"
       />
-    </FlexRow>
-  </FlexCol>
+    </Text>
 
-  <Height :height="8" />
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      五、乙方应妥善保存相关实物、资料情况。主动保存、提供与该项非遗项目有关的原始资料、实物,配合记录工作。
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    为传承弘扬中华优秀传统文化,有效保护和传承非物质文化遗产,鼓励和支持国家级非物质文化遗产代表性传承人开展传承活动,根据《中华人民共和国非物质文化遗产法》《国家级非物质文化遗产代表性传承人认定与管理办法》等有关法律法规,制定协议,并按照下列各项条款签署,甲、乙双方共同遵守。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      六、乙方应主动、及时配合非遗调查,主动向文化和旅游主管部门、非遗保护中心反映非遗项目保护、传承情况和总结材料,并完成文化和旅游主管部门临时交办的非遗工作任务,提出保护的意见、建议
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    一、甲乙双方应当以习近平新时代中国特色社会主义思想为指导,坚持以人民为中心,弘扬社会主义核心价值观,共同保护传承非物质文化遗产,推动中华优秀传统文化创造性转化、创新性发展。
-  </Text>
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      七、乙方应积极、主动参加各级政府组织的非物质文化遗产公益性宣传活动,{{ agreementYear }} 年度完成
+      <AgreementPrefillInline
+        v-model="detail.activity"
+        name="activity"
+        number-mode
+        placeholder="场次"
+        suffix="场。"
+      />
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    二、甲方按照《国家级非物质文化遗产代表性传承人认定与管理办法》的要求,支持国家级非物质文化遗产代表性传承人开展传承、传播活动。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      八、乙方应合理使用国家级非物质文化遗产代表性传承人补助经费,用于开展非遗项目的传习活动,做好传承补助经费使用记录、支出范围和绩效评价等,不得用于生活补助
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    三、甲方按照《国家级非物质文化遗产保护专项资金管理办法》的要求,落实国家给予的代表性传承人的传承补助。
-  </Text>
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      九、乙方应积极、主动参加文化和旅游部组织的非物质文化遗产代表性传承人研修班,{{ agreementYear }} 年度完成
+      <AgreementPrefillInline
+        v-model="detail.course"
+        name="course"
+        number-mode
+        placeholder="场次"
+        suffix="场。"
+      />
+    </Text>
 
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">四、乙方应积极开展传承活动,培养后继人才,制定传承计划,{{ agreementYear }} 年度带徒</Text>
-    <AgreementPrefillInline
-      v-model="detail.apprentice"
-      name="apprentice"
-      number-mode
-      placeholder="人数"
-      suffix="人。"
-    />
-  </FlexRow>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    五、乙方应妥善保存相关实物、资料情况。主动保存、提供与该项非遗项目有关的原始资料、实物,配合记录工作。
-  </Text>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    六、乙方应主动、及时配合非遗调查,主动向文化和旅游主管部门、非遗保护中心反映非遗项目保护、传承情况和总结材料,并完成文化和旅游主管部门临时交办的非遗工作任务,提出保护的意见、建议。
-  </Text>
-
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">七、乙方应积极、主动参加各级政府组织的非物质文化遗产公益性宣传活动,{{ agreementYear }} 年度完成</Text>
-    <AgreementPrefillInline
-      v-model="detail.activity"
-      name="activity"
-      number-mode
-      placeholder="场次"
-      suffix="场。"
-    />
-  </FlexRow>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    八、乙方应合理使用国家级非物质文化遗产代表性传承人补助经费,用于开展非遗项目的传习活动,做好传承补助经费使用记录、支出范围和绩效评价等,不得用于生活补助。
-  </Text>
-
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">九、乙方应积极、主动参加文化和旅游部组织的非物质文化遗产代表性传承人研修班,{{ agreementYear }} 年度完成</Text>
-    <AgreementPrefillInline
-      v-model="detail.course"
-      name="course"
-      number-mode
-      placeholder="场次"
-      suffix="场。"
-    />
-  </FlexRow>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十、乙方应积极参与非物质文化遗产相关理论和实践研究、发表(出版)论文、专著等研究。
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十、乙方应积极参与非物质文化遗产相关理论和实践研究、发表(出版)论文、专著等研究。
-  </Text>
+  </AgreementBody>
 
   <Height :height="16" />
 
@@ -174,6 +179,7 @@ import Field from '@/components/form/Field.vue';
 import SignatureField from '@/components/form/SignatureField.vue';
 import AgreementPrefillInline from './AgreementPrefillInline.vue';
 import AgreementDateWriteBlock, { type AgreementYmdParts } from './AgreementDateWriteBlock.vue';
+import AgreementBody from './AgreementBody.vue';
 
 defineProps<{
   detail: AgreementDetail;
@@ -194,5 +200,11 @@ const paragraphStyle = {
 };
 const signBlockStyle = {
   paddingTop: '8rpx',
+  backgroundColor: '#fafafa',
+  borderRadius: '16rpx',
+  borderWidth: '1rpx',
+  borderStyle: 'solid',
+  borderColor: '#eeeeee',
+  overflow: 'hidden',
 };
 </script>

+ 81 - 70
src/pages/collect/assessment/components/AgreementBodyProvincial.vue

@@ -1,82 +1,86 @@
 <template>
-  <FlexCol :gap="'sm'">
-    <P>甲方:厦门市文化和旅游局</P>
-    <FlexRow align="center" wrap :gap="'sm'">
-      <Text font-config="p" color="text.content">乙方:</Text>
+  <AgreementBody>
+    <FlexCol gap="gap.sm">
+      <P>甲方:厦门市文化和旅游局</P>
+      <FlexRow align="center" wrap gap="gap.sm">
+        <Text font-config="p" color="text.content">乙方:</Text>
+        <AgreementPrefillInline
+          v-model="detail.partyB"
+          name="partyB"
+          placeholder="请填写乙方(传承人)姓名"
+        />
+      </FlexRow>
+    </FlexCol>
+
+    <Height :height="8" />
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      为传承弘扬中华优秀传统文化,有效保护和传承非物质文化遗产,鼓励和支持省级非物质文化遗产代表性传承人开展传承活动,根据《福建省非物质文化遗产条例》《福建省非物质文化遗产代表性传承人认定与管理办法》等有关法律法规,制定协议,并按照下列各项条款签署,甲、乙双方共同遵守。
+    </Text>
+    
+    <Height :height="8" />
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      一、甲乙双方应当以习近平新时代中国特色社会主义思想为指导,坚持以人民为中心,弘扬社会主义核心价值观,共同保护传承非物质文化遗产,推动中华优秀传统文化创造性转化、创新性发展。
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      二、甲方按照《福建省非物质文化遗产代表性传承人认定与管理办法》的要求,支持省级非物质文化遗产代表性传承人开展传承、传播活动。
+    </Text>
+
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      三、甲方按照《福建省非物质文化遗产保护与传承专项资金管理办法》的要求,落实省文化和旅游厅给予的代表性传承人的传承补助。
+    </Text>
+
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      四、乙方应积极开展传承活动,培养后继人才,制定传承计划,{{ agreementYear }} 年度带徒
       <AgreementPrefillInline
-        v-model="detail.partyB"
-        name="partyB"
-        placeholder="请填写乙方(传承人)姓名"
+        v-model="detail.apprentice"
+        name="apprentice"
+        number-mode
+        placeholder="人数"
+        suffix="人。"
       />
-    </FlexRow>
-  </FlexCol>
+    </Text>
 
-  <Height :height="8" />
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      五、乙方应妥善保存相关实物、资料情况。主动保存、提供与该项非遗项目有关的原始资料、实物,配合记录工作。
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    为传承弘扬中华优秀传统文化,有效保护和传承非物质文化遗产,鼓励和支持省级非物质文化遗产代表性传承人开展传承活动,根据《福建省非物质文化遗产条例》《福建省非物质文化遗产代表性传承人认定与管理办法》等有关法律法规,制定协议,并按照下列各项条款签署,甲、乙双方共同遵守。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      六、乙方应主动、及时配合非遗调查,主动向文化和旅游主管部门、非遗保护中心反映非遗项目保护、传承情况和总结材料,并完成文化和旅游主管部门临时交办的非遗工作任务,提出保护的意见、建议
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    一、甲乙双方应当以习近平新时代中国特色社会主义思想为指导,坚持以人民为中心,弘扬社会主义核心价值观,共同保护传承非物质文化遗产,推动中华优秀传统文化创造性转化、创新性发展。
-  </Text>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    二、甲方按照《福建省非物质文化遗产代表性传承人认定与管理办法》的要求,支持省级非物质文化遗产代表性传承人开展传承、传播活动。
-  </Text>
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      七、乙方应积极、主动参加各级政府组织的非物质文化遗产公益性宣传活动,{{ agreementYear }} 年度完成
+      <AgreementPrefillInline
+        v-model="detail.activity"
+        name="activity"
+        number-mode
+        placeholder="场次"
+        suffix="场。"
+      />
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    三、甲方按照《福建省非物质文化遗产保护与传承专项资金管理办法》的要求,落实省文化和旅游厅给予的代表性传承人的传承补助。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      八、乙方应合理使用省级非物质文化遗产代表性传承人补助经费,用于开展非遗项目的传习活动,做好传承补助经费使用记录、支出范围和绩效评价等,不得用于生活补助。
+    </Text>
 
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">四、乙方应积极开展传承活动,培养后继人才,制定传承计划,{{ agreementYear }} 年度带徒</Text>
-    <AgreementPrefillInline
-      v-model="detail.apprentice"
-      name="apprentice"
-      number-mode
-      placeholder="人数"
-      suffix="人。"
-    />
-  </FlexRow>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    五、乙方应妥善保存相关实物、资料情况。主动保存、提供与该项非遗项目有关的原始资料、实物,配合记录工作。
-  </Text>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    六、乙方应主动、及时配合非遗调查,主动向文化和旅游主管部门、非遗保护中心反映非遗项目保护、传承情况和总结材料,并完成文化和旅游主管部门临时交办的非遗工作任务,提出保护的意见、建议。
-  </Text>
-
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">七、乙方应积极、主动参加各级政府组织的非物质文化遗产公益性宣传活动,{{ agreementYear }} 年度完成</Text>
-    <AgreementPrefillInline
-      v-model="detail.activity"
-      name="activity"
-      number-mode
-      placeholder="场次"
-      suffix="场。"
-    />
-  </FlexRow>
-
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    八、乙方应合理使用省级非物质文化遗产代表性传承人补助经费,用于开展非遗项目的传习活动,做好传承补助经费使用记录、支出范围和绩效评价等,不得用于生活补助。
-  </Text>
-
-  <FlexRow align="center" wrap :gap="'sm'" :inner-style="paragraphStyle">
-    <Text font-config="p" color="text.content">九、乙方应积极、主动参加文化和旅游部组织的非物质文化遗产代表性传承人研修班,{{ agreementYear }} 年度完成</Text>
-    <AgreementPrefillInline
-      v-model="detail.course"
-      name="course"
-      number-mode
-      placeholder="场次"
-      suffix="场。"
-    />
-  </FlexRow>
+    <Text font-config="p" color="text.content" allow-child-node :inner-style="paragraphStyle">
+      九、乙方应积极、主动参加文化和旅游部组织的非物质文化遗产代表性传承人研修班,{{ agreementYear }} 年度完成
+      <AgreementPrefillInline
+        v-model="detail.course"
+        name="course"
+        number-mode
+        placeholder="场次"
+        suffix="场。"
+      />
+    </Text>
 
-  <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
-    十、乙方应积极参与非物质文化遗产相关理论和实践研究、发表(出版)论文、专著等研究。
-  </Text>
+    <Text font-config="p" color="text.content" :inner-style="paragraphStyle">
+      十、乙方应积极参与非物质文化遗产相关理论和实践研究、发表(出版)论文、专著等研究。
+    </Text>
+  </AgreementBody>
 
   <Height :height="16" />
 
@@ -174,6 +178,7 @@ import Field from '@/components/form/Field.vue';
 import SignatureField from '@/components/form/SignatureField.vue';
 import AgreementPrefillInline from './AgreementPrefillInline.vue';
 import AgreementDateWriteBlock, { type AgreementYmdParts } from './AgreementDateWriteBlock.vue';
+import AgreementBody from './AgreementBody.vue';
 
 defineProps<{
   detail: AgreementDetail;
@@ -194,5 +199,11 @@ const paragraphStyle = {
 };
 const signBlockStyle = {
   paddingTop: '8rpx',
+  backgroundColor: '#fafafa',
+  borderRadius: '16rpx',
+  borderWidth: '1rpx',
+  borderStyle: 'solid',
+  borderColor: '#eeeeee',
+  overflow: 'hidden',
 };
 </script>

+ 4 - 4
src/pages/collect/assessment/components/AgreementDateWriteBlock.vue

@@ -1,6 +1,6 @@
 <template>
   <FlexCol gap="gap.xs" padding="space.md">
-    <FlexRow align="center" wrap :gap="'sm'" :inner-style="rowOuterStyle">
+    <FlexRow align="center" wrap gap="gap.sm" :inner-style="rowOuterStyle">
       <Text v-if="prefix" font-config="p" color="text.second" :inner-style="prefixStyle">
         {{ prefix }}
       </Text>
@@ -80,13 +80,13 @@ const hintStyle: TextStyle = {
 };
 
 const yearFieldStyle: ViewStyle = {
-  minWidth: '120rpx',
-  maxWidth: '130rpx',
+  minWidth: '110rpx',
+  maxWidth: '110rpx',
 };
 
 const mdFieldStyle: ViewStyle = {
   minWidth: '78rpx',
-  maxWidth: '100rpx',
+  maxWidth: '90rpx',
 };
 
 function digitsOnly(v: string | number, maxLen: number) {

+ 18 - 49
src/pages/collect/assessment/components/AgreementPrefillInline.vue

@@ -1,43 +1,25 @@
 <template>
-  <FlexRow
-    align="center"
-    wrap
-    :gap="gap"
-    :innerStyle="rowStyle"
-  >
-    <Text
-      v-if="label"
-      fontConfig="p"
-      color="text.second"
-      :innerStyle="labelTextStyle"
-    >
-      {{ label }}
-    </Text>
-    <Field
-      :name="name"
-      :model-value="textValue"
-      :type="numberMode ? 'number' : 'text'"
-      :show-label="false"
-      :show-bottom-border="false"
-      :placeholder="placeholder"
-      :max-length="maxLength"
-      :field-style="mergedFieldStyle"
-      :input-style="mergedInputStyle"
-      :input-flex="1"
-      @update:model-value="onUpdate"
-    />
-    <Text v-if="suffix" fontConfig="p" color="text.content" :innerStyle="suffixTextStyle">
-      {{ suffix }}
-    </Text>
-  </FlexRow>
+  {{ label }}
+  <Field
+    :name="name"
+    :model-value="textValue"
+    :type="numberMode ? 'number' : 'text'"
+    :show-label="false"
+    :show-bottom-border="false"
+    :placeholder="placeholder"
+    :max-length="maxLength"
+    :field-style="mergedFieldStyle"
+    :input-style="mergedInputStyle"
+    :input-flex="1"
+    @update:model-value="onUpdate"
+  />
+  {{ suffix }}
 </template>
 
 <script setup lang="ts">
 import { computed } from 'vue';
 import { useTheme, type ViewStyle, type TextStyle } from '@/components/theme/ThemeDefine';
-import FlexRow from '@/components/layout/FlexRow.vue';
 import Field from '@/components/form/Field.vue';
-import Text from '@/components/basic/Text.vue';
 
 const props = withDefaults(
   defineProps<{
@@ -78,21 +60,8 @@ const emit = defineEmits<{
 
 const themeContext = useTheme();
 
-const rowStyle = computed(() => ({
-  flexShrink: 0,
-}));
-
-const labelTextStyle = computed<TextStyle>(() => ({
-  flexShrink: 0,
-  marginRight: '4rpx',
-}));
-
-const suffixTextStyle = computed<TextStyle>(() => ({
-  flexShrink: 0,
-  marginLeft: '4rpx',
-}));
-
 const mergedFieldStyle = computed<ViewStyle>(() => ({
+  display: 'inline-block',
   paddingVertical: themeContext.resolveThemeSize('AgreementPrefillFieldPaddingV', 6),
   paddingHorizontal: themeContext.resolveThemeSize('AgreementPrefillFieldPaddingH', 12),
   borderRadius: themeContext.resolveThemeSize('AgreementPrefillFieldRadius', '10rpx'),
@@ -100,8 +69,8 @@ const mergedFieldStyle = computed<ViewStyle>(() => ({
   borderWidth: '1rpx',
   borderStyle: 'solid',
   borderColor: themeContext.resolveThemeColor('AgreementPrefillFieldBorder', 'border.cell'),
-  minWidth: themeContext.resolveThemeSize('AgreementPrefillFieldMinWidth', '120rpx'),
-  maxWidth: themeContext.resolveThemeSize('AgreementPrefillFieldMaxWidth', '220rpx'),
+  minWidth: themeContext.resolveThemeSize('AgreementPrefillFieldMinWidth', '80rpx'),
+  maxWidth: themeContext.resolveThemeSize('AgreementPrefillFieldMaxWidth', '100rpx'),
   ...props.fieldStyle,
 }));
 

+ 17 - 2
src/pages/collect/assessment/components/EvaluationFormBlock.vue

@@ -9,8 +9,11 @@
         <H3>自查项目选择</H3>
         <FlexCol gap="gap.md">
           <FlexCol v-for="(item, index) in checkItemList" :key="item.id" gap="gap.md">
-            <Text fontConfig="subTitleText" :text="`${index + 1}. ${item.name}`" />
-            <FlexCol v-if="item.checkType == 2" gap="gap.sm">
+            <FlexRow justify="space-between" align="center">
+              <Text fontConfig="subTitleText" :text="`${index + 1}. ${item.name}`" />
+              <Tag :text="getCheckModeText(item.checkType)" />
+            </FlexRow>
+            <FlexCol v-if="item.checkType == 3" gap="gap.sm">
               <FlexRow v-for="child in item.children" :key="child.id" justify="space-between">
                 <CheckBox
                   :text="`${child.name} (${child.points}分)`"
@@ -55,6 +58,7 @@ import Stepper from '@/components/form/Stepper.vue';
 import { SelfAssessmentCheckItemAnswer, type CheckItemInfo, type SelfAssessmentDetail } from '@/api/collect/AssessmentContent';
 import type { IDynamicFormOptions } from '@/components/dynamic';
 import { ArrayUtils } from '@imengyu/imengyu-utils';
+import Tag from '@/components/display/Tag.vue';
 
 const props = defineProps<{   
   currentForm: SelfAssessmentDetail;
@@ -63,6 +67,17 @@ const props = defineProps<{
   currentFormCheckItems: SelfAssessmentCheckItemAnswer[];
 }>();
 
+
+function getCheckModeText(checkMode: number) {
+  switch (checkMode) {
+    case 1:
+      return '单选';
+    case 2:
+      return '多选';
+    case 3:
+      return '可多次';
+  }
+}
 function hasCheckedItem(id: number) {
   return props.currentFormCheckItems.some(item => item.id === id);
 }

+ 17 - 3
src/pages/collect/assessment/evaluation-form.vue

@@ -132,6 +132,9 @@ const formOptions : IDynamicFormOptions = {
               { text: '市级', value: 25 },
             ],
           },
+          formProps: {
+            showRightArrow: true,
+          },
         },
         {
           label: '家庭住址',
@@ -144,12 +147,21 @@ const formOptions : IDynamicFormOptions = {
           name: 'awardTime',
           type: 'date',
           additionalProps: { placeholder: '请选择获评时间' },
+          formProps: {
+            showRightArrow: true,
+          },
         },
         {
           label: '自评报告',
           name: 'content',
-          type: 'richtext',
-          additionalProps: { placeholder: '请填写自评报告' },
+          type: 'textarea',
+          additionalProps: { 
+            placeholder: '请填写自评报告',
+            rows: 10,
+            showWordLimit: true,
+            maxLength: 3000,
+            multiline: true,
+          } as FieldProps,
         },
       ],
     },
@@ -232,7 +244,9 @@ const checkItemList = ref<CheckItemInfo[]>([]);
 const totalPoints = computed(() => {
   if (!currentForm.value) 
     return 0;
-  return currentFormCheckItems.value.reduce((acc, item) => acc + (item.count * item.points), 0);
+  return currentFormCheckItems.value
+    .reduce((acc, item) => acc + (item.count * item.points), 0)
+    - (currentForm.value.deductPoints ?? 0);
 });
 
 async function loadBasicInfo() {