|
|
@@ -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;
|
|
|
}
|
|
|
|