Explorar o código

去掉电子合同中一次性设施费

chenjun hai 1 mes
pai
achega
0abac51111

+ 15 - 1
src/views/elderly/contracts/ContractManageForm.vue

@@ -969,8 +969,22 @@ const renderAttachmentContent = (key: string) => {
     page-break-after: auto;
     break-after: auto;
   }
+  /* 附件容器与根元素宽度策略对齐合同主体 .a4-page(210mm),
+     解除 max-width:100% / width:100% 对父容器宽度的依赖,
+     避免 Teleport 打印容器 width:auto 计算偏小导致附件右侧留白 */
+  .print-container .print-attachment {
+    width: 210mm !important;
+    max-width: none !important;
+    margin: 0 !important;
+    padding: 0 !important;
+    box-sizing: border-box !important;
+  }
   .print-container .print-attachment .mgb {
-    padding-bottom: 30px !important;
+    width: 210mm !important;
+    max-width: none !important;
+    padding: 0 0 30px !important;
+    margin: 0 !important;
+    box-sizing: border-box !important;
   }
 
   /* 封面页保留完整 A4 高度并强制分页(可打印区域 265mm,@page margin 16mm) */

+ 47 - 29
src/views/elderly/contracts/components/ContractBody.vue

@@ -363,13 +363,22 @@ const fillContractForm = (data: any) => {
   }
 
   contractForm.monthlyExpenses = data.monthlyExpenses || []
-  contractForm.oneTimeExpenses = data.oneTimeExpenses || []
+  //contractForm.oneTimeExpenses = data.oneTimeExpenses || []
   contractForm.stageExpenses = data.stageExpenses || []
-
+  //天河颐养院需要过滤掉‘一次性设施费’
   const oneTime = data.oneTimeExpenses || []
-  const deposit = findItem(oneTime, '押金')
-  if (deposit) {
-    const depositAmt = Number(deposit.actualAmount || deposit.amount || 0)
+  const filteredOneTime = oneTime.filter((item: { itemName: string; itemCategoryName: string }) => {
+    const name = item.itemName || ''
+    const category = item.itemCategoryName || ''
+    return !name.includes('一次性设施费') && !category.includes('一次性设施费')
+  })
+  contractForm.oneTimeExpenses = filteredOneTime || []
+  //console.log('一次性:', contractForm.oneTimeExpenses)
+
+  //const deposit = findItem(oneTime, '押金')
+  const firstItem = filteredOneTime.length > 0 ? filteredOneTime[0] : undefined // 取出数组第一个元素(对象)
+  if (firstItem) {
+    const depositAmt = Number(firstItem.actualAmount || firstItem.amount || 0)
     contractForm.depositFee = String(depositAmt)
     contractForm.depositAmt = String(depositAmt)
     contractForm.depositAmtCn = numToChinese(depositAmt)
@@ -377,7 +386,7 @@ const fillContractForm = (data: any) => {
     contractForm.depositAmtCn1 = numToChinese(depositAmt)
     contractForm.depositAmt2 = String(depositAmt)
     contractForm.depositAmtCn2 = numToChinese(depositAmt)
-    contractForm.depositType = deposit.itemName || ''
+    contractForm.depositType = firstItem.itemName || ''
   }
 
   const relative = (data.relativesList && data.relativesList[0]) || {}
@@ -453,11 +462,23 @@ const fetchContractData = async (row: any) => {
     //console.log('合同信息接口:', JSON.parse(res.contractInfo))
     if (res) {
       contractFormUpdate.value = res
-     // console.log('接口获取合同信息:', contractFormUpdate.value.contractInfo)
+      // console.log('接口获取合同信息:', contractFormUpdate.value.contractInfo)
       contractFormUpdate.value.id = props.recordRow.id
       if (contractFormUpdate.value.contractInfo) {
         try {
           const parsedData = JSON.parse(contractFormUpdate.value.contractInfo)
+          //天河颐养院需要过滤掉‘一次性设施费’
+          const oneTime = parsedData.oneTimeExpenses || []
+          const filteredOneTime = oneTime.filter(
+            (item: { itemName: string; itemCategoryName: string }) => {
+              const name = item.itemName || ''
+              const category = item.itemCategoryName || ''
+              return !name.includes('一次性设施费') && !category.includes('一次性设施费')
+            }
+          )
+          parsedData.oneTimeExpenses = filteredOneTime || []
+          // console.log('一次性的:', parsedData.oneTimeExpenses)
+
           if (parsedData) {
             Object.assign(contractForm, parsedData)
           }
@@ -471,9 +492,8 @@ const fetchContractData = async (row: any) => {
           //console.log('config', config, key)
           let id = undefined
           try {
-             id = contractForm.attachments[key].id
-          }catch (e) {
-          }
+            id = contractForm.attachments[key].id
+          } catch (e) {}
           //console.log('id', id)
           if (id) {
             detailPromises.push(
@@ -482,7 +502,6 @@ const fetchContractData = async (row: any) => {
                 .then((detail) => {
                   //console.log('获取详情', detail)
                   attachmentsMap[key] = JSON.parse(detail.content)
-
                 })
                 .catch((err) => {
                   console.error(`获取附件详情失败: ${key}`, err)
@@ -504,6 +523,8 @@ const fetchContractData = async (row: any) => {
         try {
           const checkInRes = await getCheckInDetailByContractId(row.id)
           if (checkInRes) {
+            if (checkInRes) {
+            }
             fillContractForm(checkInRes)
           }
           contractForm.roomNo = contractFormUpdate.value.bedName
@@ -748,9 +769,7 @@ const selectedAttachmentItems = computed(() => {
 })
 
 const page24AttachmentItems = computed(() => selectedAttachmentItems.value.slice(0, 14))
-const page25AttachmentItems = computed(() =>
-  selectedAttachmentItems.value.slice(14)
-)
+const page25AttachmentItems = computed(() => selectedAttachmentItems.value.slice(14))
 
 const contractFormUpdate = ref({})
 
@@ -767,12 +786,10 @@ const saveContract = async () => {
             const data = JSON.parse(row)
 
             if (data.id) {
-
               contractForm.attachments[key] = { id: data.id }
               const config = attachmentConfig[key]
 
               contractFormUpdate.value[config.idField] = data.id
-
             }
           } catch (e) {
             console.log(e)
@@ -2194,16 +2211,25 @@ watch(
         <template v-else>
           <p class="content-text">
             &nbsp;&nbsp;&nbsp;&nbsp;本合同在履行过程中发生争议,当事人尽量协商解决。协商不成的,当事人可以选择下列第
-            <span style="display: inline-block; min-width: 30px; text-align: center; border-bottom: 1px solid #333">
+            <span
+              style="
+                display: inline-block;
+                min-width: 30px;
+                text-align: center;
+                border-bottom: 1px solid #333;
+              "
+            >
               {{ contractForm.disputeMode || '2' }}
             </span>
             种方式解决:
           </p>
           <p class="content-text">
-            &nbsp;&nbsp;&nbsp;&nbsp;{{ contractForm.disputeMode === '1' ? '☑' : '□' }} 1.向仲裁机构申请仲裁。
+            &nbsp;&nbsp;&nbsp;&nbsp;{{ contractForm.disputeMode === '1' ? '☑' : '□' }}
+            1.向仲裁机构申请仲裁。
           </p>
           <p class="content-text">
-            &nbsp;&nbsp;&nbsp;&nbsp;{{ contractForm.disputeMode === '2' ? '☑' : '□' }} 2.向有管辖权的人民法院提起诉讼。
+            &nbsp;&nbsp;&nbsp;&nbsp;{{ contractForm.disputeMode === '2' ? '☑' : '□' }}
+            2.向有管辖权的人民法院提起诉讼。
           </p>
         </template>
       </div>
@@ -2259,11 +2285,7 @@ watch(
           <p class="content-text" style="padding-left: 2em">
             附件{{ toChineseNumber(index + 1) }}:{{ item.title }}
           </p>
-          <p
-            v-if="item.subTitle"
-            class="content-text"
-            style="padding-left: 3em; font-size: 13px"
-          >
+          <p v-if="item.subTitle" class="content-text" style="padding-left: 3em; font-size: 13px">
             {{ item.subTitle }}
           </p>
         </template>
@@ -2284,11 +2306,7 @@ watch(
           <p class="content-text" style="padding-left: 2em">
             附件{{ toChineseNumber(page24AttachmentItems.length + index + 1) }}:{{ item.title }}
           </p>
-          <p
-            v-if="item.subTitle"
-            class="content-text"
-            style="padding-left: 3em; font-size: 13px"
-          >
+          <p v-if="item.subTitle" class="content-text" style="padding-left: 3em; font-size: 13px">
             {{ item.subTitle }}
           </p>
         </template>

+ 25 - 9
src/views/elderly/contracts/components/RoomFacilitiesEquipmentBody.vue

@@ -256,8 +256,8 @@ defineExpose({ form })
             <SignatureItem
               :model-value="form.elderSign"
               :is-text-mode="isTextMode"
-              width="200"
-              height="80"
+              :width="200"
+              :height="80"
               placeholder="(签字处)"
               title="入住老人签字"
               @update:model-value="(v: any) => { form.elderSign = v; updateForm() }"
@@ -336,7 +336,7 @@ defineExpose({ form })
 
 .table-header {
   display: flex;
-  border-bottom: 1px solid #333;
+
 
   .header-left,
   .header-right {
@@ -359,17 +359,12 @@ defineExpose({ form })
 
 .tables-row {
   display: flex;
-  border-bottom: 1px solid #333;
 
   .half-table {
     flex: 1;
     border-collapse: collapse;
     width: 50%;
 
-    &:first-child {
-      border-right: 1px solid #333;
-    }
-
     th,
     td {
       border: 1px solid #333;
@@ -383,6 +378,27 @@ defineExpose({ form })
       background: #fff;
     }
 
+    // 第一个表格第一列去掉左边框:由 .main-table-wrapper 的左边框提供,避免重叠
+    &:first-child {
+      th:first-child,
+      td:first-child {
+        border-left: 0;
+      }
+    }
+
+    // 第二个表格第一列去掉左边框(中间线由第一个表格最后一列的右边框提供),
+    // 最后一列去掉右边框(由 .main-table-wrapper 的右边框提供),避免重叠
+    &:last-child {
+      th:first-child,
+      td:first-child {
+        border-left: 0;
+      }
+      th:last-child,
+      td:last-child {
+        border-right: 0;
+      }
+    }
+
     .col-no {
       width: 40px;
     }
@@ -449,7 +465,7 @@ defineExpose({ form })
 .date-row-wrapper {
   display: flex;
   align-items: center;
-  justify-content: center;
+  justify-content: flex-end;
   padding: 10px 12px;
   gap: 8px;