瀏覽代碼

入住办理合同管理固定费用项类型为daily的时候增加字段isDayCalculate

xiongxing 2 周之前
父節點
當前提交
acb1c3b76a
共有 2 個文件被更改,包括 587 次插入408 次删除
  1. 271 164
      src/views/elderly/apply/check-in/ProcessForm.vue
  2. 316 244
      src/views/elderly/elder/contract/Renewal.vue

File diff suppressed because it is too large
+ 271 - 164
src/views/elderly/apply/check-in/ProcessForm.vue


+ 316 - 244
src/views/elderly/elder/contract/Renewal.vue

@@ -15,7 +15,11 @@
           </el-col>
           <el-col :span="24">
             <el-form-item label="合同开始日期" prop="checkInTime">
-              <TgDatePicker v-model="dataForm.checkInTime" placeholder="合同开始日期" :disabledDate="(arg) => disabledDate(arg)"/>
+              <TgDatePicker
+                v-model="dataForm.checkInTime"
+                placeholder="合同开始日期"
+                :disabledDate="(arg) => disabledDate(arg)"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="24">
@@ -36,11 +40,14 @@
             </el-form-item>
           </el-col>
           <el-col :lg="12" :md="12" :sm="24" :xs="24">
-            <el-form-item
-              label="合同结束日期"
-              prop="checkOutTime"
-            >
-              <TgDatePicker type="date" @change="changeOutTime" v-model="dataForm.checkOutTime" placeholder="选择日期时间"   :toggle-type="isDetail"/>
+            <el-form-item label="合同结束日期" prop="checkOutTime">
+              <TgDatePicker
+                type="date"
+                @change="changeOutTime"
+                v-model="dataForm.checkOutTime"
+                placeholder="选择日期时间"
+                :toggle-type="isDetail"
+              />
             </el-form-item>
           </el-col>
           <el-alert
@@ -49,14 +56,14 @@
             :closable="false"
             :title="'合同截止时间为: ' + deathTime"
           />
-<!--          <el-col :span="24">-->
-<!--            <el-alert-->
-<!--              v-if="deathTime"-->
-<!--              type="warning"-->
-<!--              :closable="false"-->
-<!--              :title="'合同截止时间为: ' + deathTime"-->
-<!--            />-->
-<!--          </el-col>-->
+          <!--          <el-col :span="24">-->
+          <!--            <el-alert-->
+          <!--              v-if="deathTime"-->
+          <!--              type="warning"-->
+          <!--              :closable="false"-->
+          <!--              :title="'合同截止时间为: ' + deathTime"-->
+          <!--            />-->
+          <!--          </el-col>-->
           <el-col :span="24">
             <el-form-item label="合同编号" prop="contractNumber">
               <TgInput v-model="dataForm.contractNumber" />
@@ -96,7 +103,14 @@
         <el-row :gutter="10">
           <el-col :lg="7" :md="24" :sm="24" :xs="24">
             <el-form-item label="护理等级" prop="nurseLevelId">
-              <TgSelect v-model="dataForm.nurseLevelId" placeholder="请选择" clearable :list="nurseLevelList" dict-label="nurseLevelName" dict-value="id">
+              <TgSelect
+                v-model="dataForm.nurseLevelId"
+                placeholder="请选择"
+                clearable
+                :list="nurseLevelList"
+                dict-label="nurseLevelName"
+                dict-value="id"
+              >
                 <el-option
                   v-for="item in nurseLevelList"
                   :key="item.id"
@@ -138,14 +152,18 @@
             </el-form-item>
           </el-col>
           <el-col :span="24" class="mb18">
-            <el-button @click="handleAddMonth">
-              <Icon icon="ep:zoom-in" />添加固定项目
-            </el-button>
+            <el-button @click="handleAddMonth"> <Icon icon="ep:zoom-in" />添加固定项目 </el-button>
           </el-col>
           <el-col :span="24" v-for="(item, index) in dataForm.monthlyExpenses" :key="index">
             <el-row :gutter="10">
               <el-col :lg="1" :md="24" :sm="24" :xs="24">
-                <Icon :size="26" color="#f09d31" icon="ep:remove" style="cursor: pointer" @click="handleDelMonth(index)" />
+                <Icon
+                  :size="26"
+                  color="#f09d31"
+                  icon="ep:remove"
+                  style="cursor: pointer"
+                  @click="handleDelMonth(index)"
+                />
               </el-col>
               <el-col :lg="6" :md="24" :sm="24" :xs="24">
                 <el-form-item label="项目类别" prop="itemCategoryId">
@@ -236,7 +254,9 @@
                 :offset="item.isDiscount ? (smallerThanLg ? 0 : 6) : 0"
               >
                 <el-form-item label="单项小计">
-                  <span class="price">¥{{ formatNum(item.totalAmount) }}元/月</span>
+                  <span class="price"
+                    >¥{{ formatNum(item.totalAmount) }}元{{ expenseChargeTypeLabel(item) }}</span
+                  >
                 </el-form-item>
               </el-col>
               <el-col :span="24">
@@ -321,7 +341,9 @@
               </el-col>
               <el-col :lg="5" :md="24" :sm="24" :xs="24">
                 <el-form-item label="单项小计">
-                  <span class="price">¥{{ formatNum(item.totalAmount) }}元/月</span>
+                  <span class="price"
+                    >¥{{ formatNum(item.totalAmount) }}元{{ expenseChargeTypeLabel(item) }}</span
+                  >
                 </el-form-item>
               </el-col>
               <el-col :span="24">
@@ -338,150 +360,164 @@
         </el-row>
       </div>
 
-    <div class="info-title">阶段收费项目</div>
-    <div class="info-wrap">
-      <el-row :gutter="10">
-        <el-col :span="24" class="mb18">
-          <el-button @click="handleAddStageExpenses">
-            <Icon icon="ep:zoom-in" />添加收费项目(优惠、分期)
-          </el-button>
-        </el-col>
-        <el-col :span="24" v-for="(item, index) in dataForm.stageExpenses" :key="index">
-          <el-row :gutter="10">
-            <el-col :lg="1" :md="24" :sm="24" :xs="24" >
-              <Icon
-                class="mt1"
-                :size="26"
-                color="#f09d31"
-                icon="ep:remove"
-                @click="handleDelStageExpenses(index)"
-              />
-            </el-col>
-            <el-col :lg="5" :md="24" :sm="24" :xs="24">
-              <el-form-item label="项目类别" prop="itemCategoryId">
-                <TgTreeSelect
-                  v-model="item.itemCategoryId"
-                  :data="treeList"
-                  @change="(arg) => handleChangeCategory(arg, item)"
+      <div class="info-title">阶段收费项目</div>
+      <div class="info-wrap">
+        <el-row :gutter="10">
+          <el-col :span="24" class="mb18">
+            <el-button @click="handleAddStageExpenses">
+              <Icon icon="ep:zoom-in" />添加收费项目(优惠、分期)
+            </el-button>
+          </el-col>
+          <el-col :span="24" v-for="(item, index) in dataForm.stageExpenses" :key="index">
+            <el-row :gutter="10">
+              <el-col :lg="1" :md="24" :sm="24" :xs="24">
+                <Icon
+                  class="mt1"
+                  :size="26"
+                  color="#f09d31"
+                  icon="ep:remove"
+                  @click="handleDelStageExpenses(index)"
                 />
-              </el-form-item>
-            </el-col>
-            <el-col :lg="5" :md="24" :sm="24" :xs="24">
-              <el-form-item label="项目名称" prop="itemId">
-                <TgSelect
-                  v-model="item.itemId"
-                  placeholder="请选择"
-                  clearable
-                  @change="(arg) => handleChange(arg, index, item, 4)"
-                  dict-label="chargeName"
-                  dict-value="id"
-                  :list="item.list"
-                >
-                  <el-option
-                    v-for="t in item.list"
-                    :key="t.id"
-                    :label="`${t.chargeName}(${t.price}元${getDictLabel(DICT_TYPE.FEE_CHARGE_TYPE, t.chargeType)})`"
-                    :value="t.id"
+              </el-col>
+              <el-col :lg="5" :md="24" :sm="24" :xs="24">
+                <el-form-item label="项目类别" prop="itemCategoryId">
+                  <TgTreeSelect
+                    v-model="item.itemCategoryId"
+                    :data="treeList"
+                    @change="(arg) => handleChangeCategory(arg, item)"
                   />
-                </TgSelect>
-              </el-form-item>
-            </el-col>
-            <el-col :lg="4" :md="24" :sm="24" :xs="24">
-              <el-form-item label="单价" prop="actualAmount" label-width="65px">
-                <TgInputNumber
-                  v-model="item.actualAmount"
-                  :controls="false"
-                  class="w100"
-                  @blur="handleChangeOneTimeTotalPrice(item)"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :lg="4" :md="24" :sm="24" :xs="24">
-              <el-form-item label="数量" prop="count" label-width="65px">
-                <TgInputNumber
-                  v-model="item.count"
-                  :controls="false"
-                  class="w100"
-                  @blur="handleChangeOneTimeTotalPrice(item)"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :lg="5" :md="24" :sm="24" :xs="24">
-              <el-form-item label="单项小计">
-                <span class="price">¥{{ formatNum(item.totalAmount) }}元/月</span>
-              </el-form-item>
-            </el-col>
-            <template v-if="item.isFreeGift == 1">
-              <el-col :lg="6" :md="24" :sm="24" :xs="24">
-                <el-form-item label="赠送开始时间" prop="freeStartTime">
-                  <TgDatePicker type="date" v-model="item.freeStartTime" format/>
                 </el-form-item>
               </el-col>
               <el-col :lg="5" :md="24" :sm="24" :xs="24">
-                <el-form-item label="赠送结束时间" prop="freeEndTime">
-                  <TgDatePicker type="date" v-model="item.freeEndTime" format/>
+                <el-form-item label="项目名称" prop="itemId">
+                  <TgSelect
+                    v-model="item.itemId"
+                    placeholder="请选择"
+                    clearable
+                    @change="(arg) => handleChange(arg, index, item, 4)"
+                    dict-label="chargeName"
+                    dict-value="id"
+                    :list="item.list"
+                  >
+                    <el-option
+                      v-for="t in item.list"
+                      :key="t.id"
+                      :label="`${t.chargeName}(${t.price}元${getDictLabel(DICT_TYPE.FEE_CHARGE_TYPE, t.chargeType)})`"
+                      :value="t.id"
+                    />
+                  </TgSelect>
                 </el-form-item>
               </el-col>
               <el-col :lg="4" :md="24" :sm="24" :xs="24">
-                <el-form-item label="备注" label-width="65px">
-                  <TgInput v-model="item.remark" maxlength="12" show-word-limit/>
+                <el-form-item label="单价" prop="actualAmount" label-width="65px">
+                  <TgInputNumber
+                    v-model="item.actualAmount"
+                    :controls="false"
+                    class="w100"
+                    @blur="handleChangeOneTimeTotalPrice(item)"
+                  />
                 </el-form-item>
               </el-col>
-            </template>
-            <template v-else>
-              <el-col :lg="6" :md="24" :sm="24" :xs="24">
-                <el-form-item label="分期数">
-                  <TgSelect
-                    v-model="item.hirePurchaseNumber"
-                    :list="getDictOptions(DICT_TYPE.STAGE_NUM)"
-                    @change="handleChangeHirePurchase(item)"
-                  >
-                    <el-option
-                      v-for="(item, index) in getIntDictOptions(DICT_TYPE.STAGE_NUM)"
-                      :key="index"
-                      :label="item.label"
-                      :value="item.value"
-                      >{{ item.label }}</el-option
-                    >
-                  </TgSelect>
+              <el-col :lg="4" :md="24" :sm="24" :xs="24">
+                <el-form-item label="数量" prop="count" label-width="65px">
+                  <TgInputNumber
+                    v-model="item.count"
+                    :controls="false"
+                    class="w100"
+                    @blur="handleChangeOneTimeTotalPrice(item)"
+                  />
                 </el-form-item>
               </el-col>
-              <el-col :lg="9" :md="24" :sm="24" :xs="24">
-                <el-form-item label-width="10px">{{ formatNum(item.hirePurchaseAmount) }}/期</el-form-item>
+              <el-col :lg="5" :md="24" :sm="24" :xs="24">
+                <el-form-item label="单项小计">
+                  <span class="price"
+                    >¥{{ formatNum(item.totalAmount) }}元{{ expenseChargeTypeLabel(item) }}</span
+                  >
+                </el-form-item>
               </el-col>
-            </template>
-            <el-col :lg="8" :md="24" :sm="24" :xs="24" class="flex-between">
-              <el-form-item label="是否赠送">
-                <TgSwitch v-model="item.isFreeGift" @click="handleChangeSwitch(item, 1)" :active-value="1" :inactive-value="0" />
-              </el-form-item>
-              <el-form-item>
-                <template #label>
-                  <div class="flex">
-                    是否分期
-                    <el-icon>
-                      <el-tooltip
-                        class="item"
-                        effect="dark"
-                        content="每月账单日分期付款"
-                        placement="bottom-start"
+              <template v-if="item.isFreeGift == 1">
+                <el-col :lg="6" :md="24" :sm="24" :xs="24">
+                  <el-form-item label="赠送开始时间" prop="freeStartTime">
+                    <TgDatePicker type="date" v-model="item.freeStartTime" format />
+                  </el-form-item>
+                </el-col>
+                <el-col :lg="5" :md="24" :sm="24" :xs="24">
+                  <el-form-item label="赠送结束时间" prop="freeEndTime">
+                    <TgDatePicker type="date" v-model="item.freeEndTime" format />
+                  </el-form-item>
+                </el-col>
+                <el-col :lg="4" :md="24" :sm="24" :xs="24">
+                  <el-form-item label="备注" label-width="65px">
+                    <TgInput v-model="item.remark" maxlength="12" show-word-limit />
+                  </el-form-item>
+                </el-col>
+              </template>
+              <template v-else>
+                <el-col :lg="6" :md="24" :sm="24" :xs="24">
+                  <el-form-item label="分期数">
+                    <TgSelect
+                      v-model="item.hirePurchaseNumber"
+                      :list="getDictOptions(DICT_TYPE.STAGE_NUM)"
+                      @change="handleChangeHirePurchase(item)"
+                    >
+                      <el-option
+                        v-for="(item, index) in getIntDictOptions(DICT_TYPE.STAGE_NUM)"
+                        :key="index"
+                        :label="item.label"
+                        :value="item.value"
+                        >{{ item.label }}</el-option
                       >
-                        <InfoFilled />
-                      </el-tooltip>
-                    </el-icon>
-                  </div>
-                </template>
-                <TgSwitch v-model="item.isHirePurchase" @click="handleChangeSwitch(item, 2)" :active-value="1" :inactive-value="0" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-col>
-        <el-col :span="24">
-          <p class="tR">
-            阶段性金额合计 <span class="totalNum">¥{{ formatNum(stageExpandFee) }}元</span>
-          </p>
-        </el-col>
-      </el-row>
-    </div>
+                    </TgSelect>
+                  </el-form-item>
+                </el-col>
+                <el-col :lg="9" :md="24" :sm="24" :xs="24">
+                  <el-form-item label-width="10px"
+                    >{{ formatNum(item.hirePurchaseAmount) }}/期</el-form-item
+                  >
+                </el-col>
+              </template>
+              <el-col :lg="8" :md="24" :sm="24" :xs="24" class="flex-between">
+                <el-form-item label="是否赠送">
+                  <TgSwitch
+                    v-model="item.isFreeGift"
+                    @click="handleChangeSwitch(item, 1)"
+                    :active-value="1"
+                    :inactive-value="0"
+                  />
+                </el-form-item>
+                <el-form-item>
+                  <template #label>
+                    <div class="flex">
+                      是否分期
+                      <el-icon>
+                        <el-tooltip
+                          class="item"
+                          effect="dark"
+                          content="每月账单日分期付款"
+                          placement="bottom-start"
+                        >
+                          <InfoFilled />
+                        </el-tooltip>
+                      </el-icon>
+                    </div>
+                  </template>
+                  <TgSwitch
+                    v-model="item.isHirePurchase"
+                    @click="handleChangeSwitch(item, 2)"
+                    :active-value="1"
+                    :inactive-value="0"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-col>
+          <el-col :span="24">
+            <p class="tR">
+              阶段性金额合计 <span class="totalNum">¥{{ formatNum(stageExpandFee) }}元</span>
+            </p>
+          </el-col>
+        </el-row>
+      </div>
     </el-form>
     <template #footer>
       <el-button @click="handleClosed">取消</el-button>
@@ -490,7 +526,13 @@
   </Dialog>
 </template>
 <script setup lang="ts">
-import { DICT_TYPE, getStrDictOptions, getDictOptions, getIntDictOptions, getDictLabel } from '@/utils/dict'
+import {
+  DICT_TYPE,
+  getStrDictOptions,
+  getDictOptions,
+  getIntDictOptions,
+  getDictLabel
+} from '@/utils/dict'
 import { getElderExpense, renewContract } from '@/api/elderly/elder/contract'
 import { filteredTreeData, findTreeNode } from '@/utils/tree'
 import { getParentNodesById } from '@/utils'
@@ -501,7 +543,7 @@ import { InfoFilled } from '@element-plus/icons-vue'
 import { getChargeCategoryTree } from '@/api/elderly/fee/chargeCategory'
 import { dayjs } from 'element-plus'
 import { checkPrivateRoom } from '@/api/elderly/elder/bed-change'
-import {useUserStore} from "@/store/modules/user";
+import { useUserStore } from '@/store/modules/user'
 defineOptions({ name: 'ContractForm' })
 const userStore = useUserStore()
 const message = useMessage() // 消息弹窗
@@ -559,7 +601,8 @@ const state = reactive({
           }
         },
         trigger: 'change'
-      }],
+      }
+    ]
     // times: [
     //   {
     //     required: true,
@@ -576,9 +619,8 @@ const titleItem = ref('') // 弹窗标题
 const type = ref(1) // 1: 续签 2: 变更
 let oldContractId = null
 
-const changeOutTime = ()=>{
+const changeOutTime = () => {
   dataForm.value.times = ''
-
 }
 
 /** 打开弹窗 */
@@ -586,19 +628,21 @@ const open = async (row, pageType) => {
   dialogVisible.value = true
   if (pageType == 1) titleItem.value = '续签'
   else titleItem.value = '变更'
-  console.log("pageType",pageType)
+  console.log('pageType', pageType)
   type.value = pageType
   try {
     oldContractId = row.id
-    const res = await getElderExpense(row.elderId,row.id)
+    const res = await getElderExpense(row.elderId, row.id)
     dataForm.value = res
     //console.log("rowAAA",dataForm.value)
     dataForm.value.inStatusType = row.inStatusType
-    dataForm.value.monthlyExpenses = res.expenseItems.filter(item=> (item.isFreeGift != 1 && item.isHirePurchase != 1)&& item.isDeposit!=1)
+    dataForm.value.monthlyExpenses = res.expenseItems.filter(
+      (item) => item.isFreeGift != 1 && item.isHirePurchase != 1 && item.isDeposit != 1
+    )
     dataForm.value.monthlyExpenses.map((item, index) => {
-      if(item.type != 1 && item.type != 2 && item.type !=3){
+      if (item.type != 1 && item.type != 2 && item.type != 3) {
         getNameList(item)
-      }else {
+      } else {
         getOverheadByType(item, item.type)
       }
       item.id = undefined
@@ -606,13 +650,11 @@ const open = async (row, pageType) => {
       item.discountTemp = undefined
     })
 
-
     dataForm.value.oneTimeExpenses = []
     dataForm.value.stageExpenses = []
     getTreeData()
     getNurseLevelList()
-  }catch (_){}
-
+  } catch (_) {}
 }
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 
@@ -636,16 +678,13 @@ const deathTime = computed(() => {
       .format('YYYY-MM-DD')
     dataForm.value.checkOutTime = data
     return data
-
   } else if (dataForm.value.checkInTime && dataForm.value.checkInDeadlineTime) {
-
-    const data = (
+    const data =
       dataForm.value.checkInDeadlineTime
       // +
       // '(' +
       // dayjs(dataForm.value.checkInDeadlineTime).add(1, 'day').diff(dataForm.value.checkInTime, 'day') +
       // '天)'
-    )
     dataForm.value.checkOutTime = data
     return data
   }
@@ -668,11 +707,10 @@ const totalOneTimeFee = computed(() => {
   return total
 })
 
-const stageExpandFee = computed(()=>{
+const stageExpandFee = computed(() => {
   let total = 0
   dataForm.value.stageExpenses.map((item) => {
-    if(item.isHirePurchase == 1)
-    total += item.totalAmount
+    if (item.isHirePurchase == 1) total += item.totalAmount
   })
   return total
 })
@@ -682,10 +720,19 @@ const handleClosed = () => {
   dialogVisible.value = false
 }
 
+const resolveExpenseChargeType = (item: any) => {
+  const overhead = item.list?.find((t: any) => t.id === item.itemId)
+  return overhead?.chargeType ?? item.chargeType
+}
+
+/** 与项目名称下拉一致:金额后为「元 + 字典 fee_charge_type」 */
+const expenseChargeTypeLabel = (item: any) =>
+  getDictLabel(DICT_TYPE.FEE_CHARGE_TYPE, resolveExpenseChargeType(item))
+
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {
-  if(formLoading.value){
+  if (formLoading.value) {
     return
   }
   formLoading.value = true
@@ -698,69 +745,81 @@ const submitForm = async () => {
     let result = true
     if (dataForm.value.isPrivateRoom == 1) {
       //console.log("AADDD",dataForm.value)
-      result = await checkPrivateRoom(dataForm.value.bedId,dataForm.value.elderId)
+      result = await checkPrivateRoom(dataForm.value.bedId, dataForm.value.elderId)
+    }
+    if (!result) {
+      message.error('当前房间不可以包房')
+      return
     }
-  if (!result) {
-    message.error('当前房间不可以包房')
-    return
-  }
 
-  let data = {
-    oldContractId:oldContractId,
-    elderId: dataForm.value.elderId,
-    contract: {
+    let data = {
+      oldContractId: oldContractId,
       elderId: dataForm.value.elderId,
-      elderName: dataForm.value.elderName,
-      beginTime: dataForm.value.checkInTime,
-      contractTerm: dataForm.value.times,
-      expireTime: dataForm.value.checkOutTime,
-      contractNumber: dataForm.value.contractNumber,
-      details: dataForm.value.details,
+      contract: {
+        elderId: dataForm.value.elderId,
+        elderName: dataForm.value.elderName,
+        beginTime: dataForm.value.checkInTime,
+        contractTerm: dataForm.value.times,
+        expireTime: dataForm.value.checkOutTime,
+        contractNumber: dataForm.value.contractNumber,
+        details: dataForm.value.details,
+        specialCareNotes: dataForm.value.specialCareNotes,
+        inStatusType: dataForm.value.inStatusType,
+        tenantId: dataForm.value.tenantId
+      },
+      totalAmount: formatRid(
+        Number(formatDecimal(totalMonthFee.value)) +
+          Number(formatDecimal(totalOneTimeFee.value)) +
+          Number(formatDecimal(stageExpandFee.value))
+      ),
+      monthlyExpenses: JSON.parse(JSON.stringify(dataForm.value.monthlyExpenses)),
+      oneTimeExpenses: JSON.parse(JSON.stringify(dataForm.value.oneTimeExpenses)),
+      stageExpenses: JSON.parse(JSON.stringify(dataForm.value.stageExpenses)),
+      bedId: Number(dataForm.value.bedId),
+      checkInTime: dataForm.value.checkInTime,
+      nurseLevelId: dataForm.value.nurseLevelId,
+      isPrivateRoom: dataForm.value.isPrivateRoom,
       specialCareNotes: dataForm.value.specialCareNotes,
       inStatusType: dataForm.value.inStatusType,
-      tenantId: dataForm.value.tenantId,
-    },
-    totalAmount: formatRid(Number(formatDecimal(totalMonthFee.value)) + Number(formatDecimal(totalOneTimeFee.value))  + Number(formatDecimal(stageExpandFee.value))),
-    monthlyExpenses: JSON.parse(JSON.stringify(dataForm.value.monthlyExpenses)),
-    oneTimeExpenses: JSON.parse(JSON.stringify(dataForm.value.oneTimeExpenses)),
-    stageExpenses: JSON.parse(JSON.stringify(dataForm.value.stageExpenses)),
-    bedId: Number(dataForm.value.bedId),
-    checkInTime: dataForm.value.checkInTime,
-    nurseLevelId: dataForm.value.nurseLevelId,
-    isPrivateRoom: dataForm.value.isPrivateRoom,
-    specialCareNotes: dataForm.value.specialCareNotes,
-    inStatusType: dataForm.value.inStatusType,
-    tenantId: dataForm.value.tenantId,
-  }
-  // if (dataForm.value.inStatusType == '1') {
-  //   data.monthlyExpenses.push(...arr)
-  // }
-  data.monthlyExpenses.map((item) => {
-    item.list = undefined
-  })
-  data.oneTimeExpenses.map((item) => {
-    item.list = undefined
-  })
-  // 去除阶段性的actualAmount
-  data.stageExpenses.map(item=>{
-    item.list = undefined
-    if(item.isFreeGift == 1){
-      item.actualAmount = 0
-    }else if(item.isHirePurchase == 1){
-      item.actualAmount = item.hirePurchaseAmount
+      tenantId: dataForm.value.tenantId
+    }
+    // if (dataForm.value.inStatusType == '1') {
+    //   data.monthlyExpenses.push(...arr)
+    // }
+    // 续签 / 变更:与 getOverheadListByType / getOverheadPage 的 chargeType 一致,day 则 isDayCalculate=1
+    const setIsDayCalculate = (items: any[]) => {
+      items.forEach((item) => {
+        item.isDayCalculate = resolveExpenseChargeType(item) === 'daily' ? 1 : 0
+      })
+    }
+    setIsDayCalculate(data.monthlyExpenses)
+    setIsDayCalculate(data.oneTimeExpenses)
+    setIsDayCalculate(data.stageExpenses)
+    data.monthlyExpenses.map((item) => {
+      item.list = undefined
+    })
+    data.oneTimeExpenses.map((item) => {
+      item.list = undefined
+    })
+    // 去除阶段性的actualAmount
+    data.stageExpenses.map((item) => {
+      item.list = undefined
+      if (item.isFreeGift == 1) {
+        item.actualAmount = 0
+      } else if (item.isHirePurchase == 1) {
+        item.actualAmount = item.hirePurchaseAmount
+      }
+    })
+    const res = await renewContract(data)
+    if (res) {
+      message.success('保存成功')
+      emit('success')
+      handleClosed()
     }
-  })
-  const res = await renewContract(data)
-  if(res){
-    message.success('保存成功')
-    emit("success")
-    handleClosed()
-  }
-
   } finally {
-    setTimeout(()=>{
+    setTimeout(() => {
       formLoading.value = false
-    },500)
+    }, 500)
   }
 }
 
@@ -780,10 +839,17 @@ const handleChangeCategory = async (arg, item) => {
   let obj = findTreeNode(treeList.value, arg, 'id', 'childrenList')
   item.isDeposit = obj.identification == 4 ? 1 : 0
   // 找到对应的名称
-  const res = getParentNodesById(treeList.value, obj.parentId, arg, 'name', 'parentId', 'childrenList')
+  const res = getParentNodesById(
+    treeList.value,
+    obj.parentId,
+    arg,
+    'name',
+    'parentId',
+    'childrenList'
+  )
   // 只保留最后两位
-  if(res.length - 2 > 0){
-    for(let i = 0; i <= res.length - 2; i++){
+  if (res.length - 2 > 0) {
+    for (let i = 0; i <= res.length - 2; i++) {
       res.pop()
     }
   }
@@ -807,11 +873,10 @@ const getNameList = async (item) => {
 const handleChange = (id, index: number, item, type: number = 2) => {
   // 固定费用中不需要选分类的几项
   if (type == 1) {
-
   } else {
     let obj = item.list.find((item) => item.id === id)
     item.itemName = obj?.chargeName
-    if(type != 4){
+    if (type != 4) {
       item.actualAmount = item.isDiscount
         ? item.discount
           ? ((obj?.price * item.discount) / 100) * 10
@@ -819,7 +884,7 @@ const handleChange = (id, index: number, item, type: number = 2) => {
         : obj?.price
       item.totalAmount = type == 2 ? item.actualAmount : item.actualAmount * item.count
       item.amount = obj?.price
-    }else{
+    } else {
       item.actualAmount = obj.price
       item.totalAmount = item.isFreeGift == 1 ? 0 : item.actualAmount * item.count
       item.amount = obj.price
@@ -898,13 +963,13 @@ const handleDelStageExpenses = (index) => {
 }
 
 const handleChangeSwitch = (item, type) => {
-  if(type == 1){
+  if (type == 1) {
     item.isFreeGift = item.isFreeGift == 0 ? 0 : 1
     item.freeStartTime = ''
     item.freeEndTime = ''
     item.remark = ''
-    item.isHirePurchase = item.isHirePurchase == 0 ?  1 : 0
-  }else{
+    item.isHirePurchase = item.isHirePurchase == 0 ? 1 : 0
+  } else {
     item.isFreeGift = item.isFreeGift == 0 ? 1 : 0
     item.hirePurchaseNumber = ''
     item.hirePurchaseAmount = ''
@@ -942,7 +1007,7 @@ const getNurseLevelList = async () => {
   }
 }
 
-const disabledDate = (time) =>{
+const disabledDate = (time) => {
   return time < new Date(dataForm.value.contract.expireTime)
 }
 
@@ -956,11 +1021,18 @@ const handleBlur = (item, type = 0) => {
   // 填写折扣金额
   if (type == 1) {
     item.actualAmount = item.amount - item.discountAmount
-    item.discount = item.discountAmount ? (1000 - (item.discountAmount / item.amount) * 1000) * 10 / 1000 : ''
+    item.discount = item.discountAmount
+      ? ((1000 - (item.discountAmount / item.amount) * 1000) * 10) / 1000
+      : ''
     item.discountTemp = item.discount ? formatNum(item.discount) : ''
-  } else if (type == 2) { // 折扣率
-    item.actualAmount = item.discountTemp ? item.amount * (item.discountTemp * 1000) / (1000 * 10) : ''
-    item.discountAmount = item.discountTemp ? ((item.amount * (1 - item.discountTemp / 10)) / 10) * 10 : ''
+  } else if (type == 2) {
+    // 折扣率
+    item.actualAmount = item.discountTemp
+      ? (item.amount * (item.discountTemp * 1000)) / (1000 * 10)
+      : ''
+    item.discountAmount = item.discountTemp
+      ? ((item.amount * (1 - item.discountTemp / 10)) / 10) * 10
+      : ''
     item.discountAmountTemp = item.discountAmount ? formatNum(item.discountAmount) : ''
   }
   item.totalAmount = item.isDiscount
@@ -976,7 +1048,7 @@ const handleChangeDiscount = (row) => {
     row.totalAmount = row.discount ? row.amount * ((row.discount / 100) * 10) : row.actualAmount
   } else {
     row.discount = '' // 折扣率
-    row.discountTemp = ''// 折扣率
+    row.discountTemp = '' // 折扣率
     row.discountAmount = '' // 折扣
     row.discountAmountTemp = '' // 折扣
     row.totalAmount = row.amount
@@ -986,7 +1058,7 @@ const handleChangeDiscount = (row) => {
 </script>
 
 <style lang="scss" scoped>
-.renewal{
+.renewal {
   .info-title {
     margin-left: -15px;
     min-width: 75px;
@@ -1073,7 +1145,7 @@ const handleChangeDiscount = (row) => {
       color: #7a95e5;
       padding-left: 40px;
     }
-    .flex-between{
+    .flex-between {
       display: flex;
     }
 

Some files were not shown because too many files changed in this diff