|
|
@@ -0,0 +1,671 @@
|
|
|
+<template>
|
|
|
+ <el-dialog title="险种批改" width="1000" v-model="isDialogVisible" @close="handleClose">
|
|
|
+ <div class="">
|
|
|
+ <div class="">
|
|
|
+ <div class="text-[#333333] text-base font-medium">车辆{{ props.data.licenseNo }}险种批改</div>
|
|
|
+ <div class="text-[#666666]">支持增加或减少险种以及调整险种保额</div>
|
|
|
+ </div>
|
|
|
+ <el-divider />
|
|
|
+ <div class="">
|
|
|
+ <div class="flex items-center pb-[8px] pr-[24px]">
|
|
|
+ <div class="text-[#333333] font-medium mr-[34px]">保险产品</div>
|
|
|
+ <el-button link type="primary" class="p-1"
|
|
|
+ v-if="props.isAdd"
|
|
|
+ @click="handleAddInsurance('main')">
|
|
|
+ + 批增险种
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ <div class="flex-1">
|
|
|
+ <el-table class="w-full" :data="mainInsuranceProducts" border stripe
|
|
|
+ max-height="200" header-cell-class-name="!bg-gray-100 !text-gray-600">
|
|
|
+ <el-table-column prop="kindName" label="险种" width="250" />
|
|
|
+ <el-table-column prop="amount" label="保额" width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-select v-model="row.amount" disabled placeholder="请选择保额" class="w-full"
|
|
|
+ :style="{
|
|
|
+ '--el-select-disabled-color': row.type !== 1 ? '#a8abb2' : '#F56C6C'
|
|
|
+ }">
|
|
|
+ <el-option :label="row.amount" :value="row.amount" />
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="premium" label="保费">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>¥ {{ row.premium }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="type" label="批改信息">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ getStateText('type', row) }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="120">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-button type="primary" link
|
|
|
+ v-if="row.type !== 3"
|
|
|
+ @click="openFormDialog('main', row)"
|
|
|
+ >批改</el-button>
|
|
|
+ <el-popconfirm width="170" title="确定删除此险种吗?"
|
|
|
+ confirm-button-text="确定" cancel-button-text="取消"
|
|
|
+ v-if="row.type === 3"
|
|
|
+ @confirm="handleDelete('main', $index)">
|
|
|
+ <template #reference>
|
|
|
+ <el-button type="danger" link>删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-popconfirm>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <template #empty>
|
|
|
+ <div class="py-4 text-gray-500">没有可批改的保险产品~</div>
|
|
|
+ </template>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="mt-6">
|
|
|
+ <div class="flex items-center pb-[8px] pr-[24px]">
|
|
|
+ <div class="text-[#333333] font-medium mr-[20px]">驾意险产品</div>
|
|
|
+ <el-button link type="primary" class="p-1"
|
|
|
+ v-if="props.isAdd"
|
|
|
+ @click="handleAddInsurance('driver')">
|
|
|
+ + 批增驾意险
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ <div class="flex-1">
|
|
|
+ <el-table class="w-full" :data="driverAccidentProducts" border
|
|
|
+ max-height="200" header-cell-class-name="!bg-gray-100 !text-gray-600">
|
|
|
+ <el-table-column prop="kindName" label="产品名称" width="250" />
|
|
|
+ <el-table-column prop="amount" label="份数" width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-input-number :disabled="row.type !== 3"
|
|
|
+ class="w-full" controls-position="right"
|
|
|
+ v-model="row.amount" :min="1">
|
|
|
+ <template #suffix>
|
|
|
+ <span>份</span>
|
|
|
+ </template>
|
|
|
+ </el-input-number>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="premium" label="保费">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>¥ {{ row.premium }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="endorsementInfo" label="批改信息">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ getStateText('type', row) }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="120">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-button type="primary" link
|
|
|
+ v-if="row.type !== 3"
|
|
|
+ @click="openFormDialog('driver', row)"
|
|
|
+ >批改</el-button>
|
|
|
+ <el-popconfirm title="确定删除此产品吗?"
|
|
|
+ confirm-button-text="确定" cancel-button-text="取消"
|
|
|
+ v-if="row.type === 3"
|
|
|
+ @confirm="handleDelete('driver', $index)">
|
|
|
+ <template #reference>
|
|
|
+ <el-button type="danger" link>删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-popconfirm>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <template #empty>
|
|
|
+ <div class="py-4 text-gray-500">没有可批改的驾意险产品~</div>
|
|
|
+ </template>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <div class="px-1">
|
|
|
+ <el-button @click="isDialogVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="handleSubmit">提交批改申请</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- 单项批改 -->
|
|
|
+ <el-dialog v-model="isFormDialogVisible" width="500" :title="form.title" append-to-body>
|
|
|
+ <el-form ref="formRef" :model="formData" :rules="rules" label-width="120px" label-position="top">
|
|
|
+ <el-form-item label="保险产品" prop="kindCode">
|
|
|
+ <el-select v-model="formData.kindCode" placeholder="请选择" @change="handleChange">
|
|
|
+ <el-option v-for="(item, i) in tableData" :key="i"
|
|
|
+ :value="item.kindCode" :label="`${item.kindName}/${item.amount}`"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="批改类型" prop="formtype">
|
|
|
+ <el-select v-model="formData.formtype" placeholder="请选择" @change="handleTypeChange">
|
|
|
+ <el-option :value="2" label="退保"></el-option>
|
|
|
+ <el-option :value="1" label="保额批改" :disabled="formData.state === 0"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <template v-if="formData.formtype === 1 && formData.kindType !== 2">
|
|
|
+ <el-form-item label="保额" prop="afterAmount">
|
|
|
+ <el-select v-model="formData.afterAmount" placeholder="请选择保额" class="w-full">
|
|
|
+ <el-option
|
|
|
+ v-for="item in insuranceData" :key="item.value"
|
|
|
+ :label="item.label" :value="item.value"
|
|
|
+ :disabled="item.value === formData.amount"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-if="formData.kindType === 2">
|
|
|
+ <el-form-item label="份数" prop="quantity">
|
|
|
+ <el-input v-model="formData.quantity" type="number" placeholder="请输入份数" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-if="getItemShow(formData, 'tu')">
|
|
|
+ <el-form-item label="退款金额(元)" prop="tmoney">
|
|
|
+ <el-input v-model="formData.tmoney" type="number" placeholder="请输入金额" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-if="getItemShow(formData, 'bu')">
|
|
|
+ <el-form-item label="补缴保费(元)" prop="tmoney">
|
|
|
+ <el-input v-model="formData.tmoney" type="number" placeholder="请输入金额" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="isFormDialogVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="handleFormSubmit">确 定</el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- 选择保险 -->
|
|
|
+ <el-dialog v-model="isMainVisible" width="500" title="险种批增" append-to-body>
|
|
|
+ <el-form ref="formRef" :model="formData" :rules="rules" label-width="120px" label-position="top">
|
|
|
+ <el-form-item label="保险产品" prop="kindCode">
|
|
|
+ <el-cascader class="w-full"
|
|
|
+ ref="cascaderRef"
|
|
|
+ :props="{
|
|
|
+ children: 'options'
|
|
|
+ }"
|
|
|
+ :options="insuranceAllData"
|
|
|
+ v-model="formData.kindCode"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="批改类型" prop="formtype">
|
|
|
+ <el-select v-model="formData.formtype" disabled placeholder="请选择">
|
|
|
+ <el-option :value="3" label="批增"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="补缴保费(元)" prop="tmoney">
|
|
|
+ <el-input v-model="formData.tmoney" type="number" placeholder="请输入金额" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="isMainVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="handleAddSubmit($event, 'main')">确 定</el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- 选择驾意险 -->
|
|
|
+ <el-dialog
|
|
|
+ width="700"
|
|
|
+ title="选择驾意险"
|
|
|
+ append-to-body
|
|
|
+ v-model="isDrivingVisible"
|
|
|
+ >
|
|
|
+ <Driving ref="drivingTypeRef" @close="handleAddSubmit($event, 'driver')" />
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import api from '@/api';
|
|
|
+import { ElMessage } from 'element-plus';
|
|
|
+import type { FormInstance, FormRules } from 'element-plus';
|
|
|
+import Driving from '@/layouts/components/DrivingType/index.vue';
|
|
|
+
|
|
|
+// 组件属性与事件
|
|
|
+const props = defineProps({
|
|
|
+ data: {
|
|
|
+ type: Object,
|
|
|
+ default: {}
|
|
|
+ },
|
|
|
+ // 是否可以批增
|
|
|
+ isAdd: {
|
|
|
+ type: Boolean,
|
|
|
+ default: true
|
|
|
+ }
|
|
|
+});
|
|
|
+const isDialogVisible = defineModel({
|
|
|
+ default: false
|
|
|
+});
|
|
|
+const emits = defineEmits(['complete']);
|
|
|
+
|
|
|
+// 数据
|
|
|
+const isSubmit = ref(false);
|
|
|
+const tableData = ref<any>([]);
|
|
|
+const insuranceData = ref<any>([]);
|
|
|
+const insuranceAllData = ref<any>([]);
|
|
|
+const mainInsuranceProducts = ref<any>([]);
|
|
|
+const driverAccidentProducts = ref<any>([]);
|
|
|
+
|
|
|
+watch(isDialogVisible, (newVal) => {
|
|
|
+ if (newVal) isSubmit.value = false;
|
|
|
+});
|
|
|
+watch(() => props.data.tableList, (val) => {
|
|
|
+ // table数据监听
|
|
|
+ const a = val.filter((item: any) => item.kindType === 0 || item.kindType === 1).map((item: any) => {
|
|
|
+ // 对筛选后的元素进行处理,返回新对象
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ amount: !item.amount ? '投保' : item.amount,
|
|
|
+ // state: 0 退保
|
|
|
+ state: item.kindType === 0 || (item.kindCode === 'A' || item.kindCode === 'SY_WBDWGZ') ? 0 : 1
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const b = val.filter((item: any) => item.kindType === 2);
|
|
|
+ mainInsuranceProducts.value = [...a];
|
|
|
+ driverAccidentProducts.value = [...b];
|
|
|
+ tableData.value = [...a, ...b];
|
|
|
+ console.log(tableData.value)
|
|
|
+}, {
|
|
|
+ immediate: false,
|
|
|
+});
|
|
|
+
|
|
|
+// 表单弹窗
|
|
|
+const isFormDialogVisible = ref(false);
|
|
|
+const form = reactive({
|
|
|
+ type: 'main', // 'main' or 'driver'
|
|
|
+ isEditing: false,
|
|
|
+ title: '',
|
|
|
+ editingId: null as number | null,
|
|
|
+});
|
|
|
+const formData = ref<any>({});
|
|
|
+const formRef = ref<FormInstance>();
|
|
|
+const cascaderRef = ref();
|
|
|
+const rules = reactive<FormRules>({
|
|
|
+ kindCode: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择保险产品',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ formtype: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择批改类型',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ afterAmount: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择保额',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ quantity: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入1-99之间的整数',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ pattern: /^([1-9]\d?|99)$/,
|
|
|
+ message: '请输入1-99之间的整数',
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ premium: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入0-999999.99之间的数字(支持两位小数)',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ // 检查是否在0-99999.99之间
|
|
|
+ if (value < 0 || value > 99999.99) {
|
|
|
+ callback(new Error('请输入0-99999.99之间的数字'));
|
|
|
+ } else {
|
|
|
+ // 检查小数位数是否超过2位
|
|
|
+ const decimalPart = value.toString().split('.')[1];
|
|
|
+ if (decimalPart && decimalPart.length > 2) {
|
|
|
+ callback(new Error('最多支持两位小数'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ tmoney: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入0-999999.99之间的数字(支持两位小数)',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ // 检查是否在0-99999.99之间
|
|
|
+ if (value < 0 || value > 99999.99) {
|
|
|
+ callback(new Error('请输入0-99999.99之间的数字'));
|
|
|
+ } else {
|
|
|
+ // 检查小数位数是否超过2位
|
|
|
+ const decimalPart = value.toString().split('.')[1];
|
|
|
+ if (decimalPart && decimalPart.length > 2) {
|
|
|
+ callback(new Error('最多支持两位小数'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+});
|
|
|
+
|
|
|
+// 批改弹窗的部分item判断控制
|
|
|
+const getItemShow = (data: any, key: string) => {
|
|
|
+ let flag = false;
|
|
|
+ let feild = data.kindType === 2 ? 'quantity' : 'afterAmount';
|
|
|
+ if (key === 'tu') {
|
|
|
+ flag = data.formtype === 2 || (data.formtype === 1 && (data[feild] && data.amount > data[feild]));
|
|
|
+ }
|
|
|
+ if (key === 'bu') {
|
|
|
+ flag = data.formtype === 1 && data.amount < data[feild];
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+};
|
|
|
+
|
|
|
+// 关闭弹窗
|
|
|
+const handleClose = () => {
|
|
|
+ isDialogVisible.value = false;
|
|
|
+ clearData();
|
|
|
+ if (!isSubmit.value) {
|
|
|
+ api.insurancePolicyApi.adjustRemove(props.data.orderNo);
|
|
|
+ }
|
|
|
+};
|
|
|
+// 清空数据,以防残留数据
|
|
|
+const clearData = () => {
|
|
|
+ mainInsuranceProducts.value = [];
|
|
|
+ driverAccidentProducts.value = [];
|
|
|
+};
|
|
|
+
|
|
|
+// 批增操作
|
|
|
+const isMainVisible = ref(false);
|
|
|
+const isDrivingVisible = ref(false);
|
|
|
+const drivingTypeRef: any = ref(null);
|
|
|
+const handleAddInsurance = (type: 'main' | 'driver', item?: any) => {
|
|
|
+ if (type === 'main') {
|
|
|
+ api.projectApi.getBusinessInsurance().then((res: any) => {
|
|
|
+ if(res.code == 200) {
|
|
|
+ let arr = mainInsuranceProducts.value.map((item: any) => item.kindCode);
|
|
|
+ insuranceAllData.value = res.data.map((item: any) => ({
|
|
|
+ ...item,
|
|
|
+ label: item.kindName,
|
|
|
+ value: item.kindCode,
|
|
|
+ disabled: arr.indexOf(item.kindCode) !== -1
|
|
|
+ }));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ formData.value.formtype = 3;
|
|
|
+ isMainVisible.value = true;
|
|
|
+ }
|
|
|
+ if (type === 'driver') {
|
|
|
+ isDrivingVisible.value = true;
|
|
|
+ nextTick(()=>{
|
|
|
+ let arr = driverAccidentProducts.value.map((item: any) => item.kindCode);
|
|
|
+ // 参数:当前值, 索引, props.data.companyId
|
|
|
+ drivingTypeRef.value.initEditData(arr, 0, '1738811735599347566', true);
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+const handleAddSubmit = async (e: any, type: 'main' | 'driver') => {
|
|
|
+ if (type === 'main') {
|
|
|
+ if (!formRef.value) return
|
|
|
+ await formRef.value.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ // 获取选中的节点信息(包含label)
|
|
|
+ const checkedNodes = cascaderRef.value.getCheckedNodes();
|
|
|
+ // push数据
|
|
|
+ mainInsuranceProducts.value.push({
|
|
|
+ id: Date.now(),
|
|
|
+ kindCode: formData.value.kindCode[0],
|
|
|
+ kindName: checkedNodes[0].parent.label,
|
|
|
+ // 险种类型 0.交强 1.商业 2.非车
|
|
|
+ kindType: formData.value.kindCode[0] === 'J1' ? 0 : 1,
|
|
|
+ amount: formData.value.kindCode[1],
|
|
|
+ premium: formData.value.tmoney,
|
|
|
+ type: 3,
|
|
|
+ });
|
|
|
+ isMainVisible.value = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (type === 'driver') {
|
|
|
+ console.log('add', e);
|
|
|
+ const data = e.list;
|
|
|
+ if (data.length > 0) {
|
|
|
+ let arr = driverAccidentProducts.value.map((item: any) => item.kindCode);
|
|
|
+ let newData = data.filter((item: any) => arr.indexOf(item.productCode) === -1);
|
|
|
+ newData.map((item: any) => {
|
|
|
+ driverAccidentProducts.value.push({
|
|
|
+ id: item.id,
|
|
|
+ kindCode: item.productCode,
|
|
|
+ kindName: item.productName,
|
|
|
+ // 险种类型 0.交强 1.商业 2.非车
|
|
|
+ kindType: 2,
|
|
|
+ amount: 1,
|
|
|
+ premium: item.premium - 0,
|
|
|
+ type: 3,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ isDrivingVisible.value = false;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 获取state文本
|
|
|
+const getStateText = (field: string, item?: any) => {
|
|
|
+ let text = '--';
|
|
|
+ // 批改信息
|
|
|
+ if (field === 'type') {
|
|
|
+ if (item[field] === 1) {
|
|
|
+ text = '保额批改';
|
|
|
+ } else if (item[field] === 2) {
|
|
|
+ text = '退保';
|
|
|
+ } else if (item[field] === 3) {
|
|
|
+ text = '批增';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return text;
|
|
|
+};
|
|
|
+// 批改操作
|
|
|
+const openFormDialog = (type: 'main' | 'driver', item?: any) => {
|
|
|
+ form.type = type;
|
|
|
+ if (item) {
|
|
|
+ form.isEditing = true;
|
|
|
+ form.editingId = item.kindCode;
|
|
|
+ form.title = type === 'main' ? '批改险种' : '批改驾意险';
|
|
|
+ formData.value = {
|
|
|
+ ...item,
|
|
|
+ };
|
|
|
+ if (item.kindType === 2) {
|
|
|
+ formData.value.quantity = item.amount;
|
|
|
+ }
|
|
|
+ console.log(item, formData.value)
|
|
|
+ }
|
|
|
+ isFormDialogVisible.value = true;
|
|
|
+};
|
|
|
+const handleChange = (e: any) => {
|
|
|
+ // 重置数据
|
|
|
+ formRef.value && formRef.value.resetFields();
|
|
|
+ const selectedItem = mainInsuranceProducts.value.find((option: any) => option.kindCode === e);
|
|
|
+ console.log(e, selectedItem)
|
|
|
+ formData.value = {
|
|
|
+ ...formData.value,
|
|
|
+ ...selectedItem,
|
|
|
+ quantity: '',
|
|
|
+ afterAmount: ''
|
|
|
+ };
|
|
|
+ insuranceData.value = [];
|
|
|
+ // 保险产品不支持「保额批改」1,则默认为「退保」2
|
|
|
+ if (selectedItem?.state === 0) {
|
|
|
+ formData.value.formtype = 2;
|
|
|
+ }
|
|
|
+};
|
|
|
+const handleTypeChange = (e: any) => {
|
|
|
+ if (e === 1 && formData.value.kindType !== 2) {
|
|
|
+ getInsuranceData(formData.value)
|
|
|
+ }
|
|
|
+};
|
|
|
+// 获取保额数据
|
|
|
+const getInsuranceData = (item: any) => {
|
|
|
+ api.insurancePolicyApi.getBusinessInsuranceByKindType({
|
|
|
+ kindCode: item.kindCode
|
|
|
+ }).then((res: any) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ insuranceData.value = res.data[0].options;
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+// 批改的提交逻辑
|
|
|
+const handleFormSubmit = async () => {
|
|
|
+ if (!formRef.value) return
|
|
|
+ await formRef.value.validate((valid, fields) => {
|
|
|
+ if (valid) {
|
|
|
+ console.log('submit!')
|
|
|
+ const data = formData.value;
|
|
|
+ if (form.isEditing) {
|
|
|
+ // 更新逻辑
|
|
|
+ const targetArray = form.type === 'main' ? mainInsuranceProducts.value : driverAccidentProducts.value;
|
|
|
+ const itemIndex = targetArray.findIndex((p: any) => p.kindCode === form.editingId);
|
|
|
+ if (itemIndex !== -1) {
|
|
|
+ targetArray[itemIndex] = {
|
|
|
+ ...targetArray[itemIndex],
|
|
|
+ ...data,
|
|
|
+ type: data.formtype
|
|
|
+ };
|
|
|
+ }
|
|
|
+ console.log(targetArray[itemIndex])
|
|
|
+ }
|
|
|
+ isFormDialogVisible.value = false;
|
|
|
+ ElMessage.success(form.isEditing ? '修改成功' : '新增成功');
|
|
|
+ // 重置数据
|
|
|
+ formRef.value && formRef.value.resetFields();
|
|
|
+ } else {
|
|
|
+ console.log('error submit!', fields)
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 从表格中删除一项
|
|
|
+ * @param type - 'main' or 'driver'
|
|
|
+ * @param index - 删除的项在数组中的索引
|
|
|
+ */
|
|
|
+const handleDelete = (type: 'main' | 'driver', index: number) => {
|
|
|
+ if (type === 'main') {
|
|
|
+ mainInsuranceProducts.value.splice(index, 1);
|
|
|
+ } else {
|
|
|
+ driverAccidentProducts.value.splice(index, 1);
|
|
|
+ }
|
|
|
+ ElMessage.success('删除成功');
|
|
|
+};
|
|
|
+
|
|
|
+// 提交所有批改申请
|
|
|
+const handleSubmit = () => {
|
|
|
+ // 检查所有险种的批改信息
|
|
|
+ let allData = [...mainInsuranceProducts.value, ...driverAccidentProducts.value];
|
|
|
+ if (allData.length === 0) {
|
|
|
+ ElMessage.error(`数据为空,不能提交!`);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const endorsementValid = allData.some((item: any) => !!item.type);
|
|
|
+ const index = allData.findIndex((item: any) => !item.type);
|
|
|
+
|
|
|
+ if (!endorsementValid) {
|
|
|
+ ElMessage.error(`请对${allData[index].kindType === 2 ? '驾意险' : '险种'}【${allData[index].kindName}】进行批改!`);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // table数据转化
|
|
|
+ let vosList = allData.map((item: any) => {
|
|
|
+ let adjustType = null, afterPremium = null, curItem = { ...item };
|
|
|
+ // 为什么用quantity, 因为输入框方式不一样
|
|
|
+ let feild = item.kindType === 2 ? 'quantity' : 'afterAmount';
|
|
|
+ // 三种批改方式的字段再计算
|
|
|
+ if (item.type === 2 || (item.type === 1 && (item[feild] && item.amount > item[feild]))) {
|
|
|
+ adjustType = 1;
|
|
|
+ afterPremium = item.premium - item.tmoney;
|
|
|
+ } else if (item.amount < item[feild] && item.type === 1) {
|
|
|
+ adjustType = 0;
|
|
|
+ afterPremium = item.premium + (item.tmoney - 0);
|
|
|
+ }
|
|
|
+ if (item.type === 3) {
|
|
|
+ adjustType = 0;
|
|
|
+ curItem.afterAmount = item.amount;
|
|
|
+ afterPremium = item.premium - 0;
|
|
|
+ curItem.tmoney = item.kindType === 2 ? item.amount * item.premium : item.premium;
|
|
|
+ curItem.amount = 0;
|
|
|
+ curItem.premium = 0;
|
|
|
+ }
|
|
|
+ if (item.type !== 3 && item.kindType === 2) {
|
|
|
+ curItem.afterAmount = item.quantity;
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ adjustId: props.data.adjustId,
|
|
|
+ kindType: curItem.kindType,
|
|
|
+ kindCode: curItem.kindCode,
|
|
|
+ kindName: curItem.kindName,
|
|
|
+ // 金额or数量
|
|
|
+ amount: curItem.amount === '投保' ? null : curItem.amount,
|
|
|
+ afterAmount: curItem.afterAmount ? curItem.afterAmount - 0 : null,
|
|
|
+ // 保费
|
|
|
+ premium: curItem.premium,
|
|
|
+ // 批改类型 0.未批改 1.保额批改 2.退保 3.批增
|
|
|
+ type: curItem.type,
|
|
|
+ // 调整类型 0.补缴 1.退款
|
|
|
+ adjustType: adjustType,
|
|
|
+ // 调整金额
|
|
|
+ adjustAmount: curItem.tmoney ? curItem.tmoney - 0 : null,
|
|
|
+ afterPremium: afterPremium
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 提交数据
|
|
|
+ let params = {
|
|
|
+ id: props.data.adjustId,
|
|
|
+ orderNo: props.data.orderNo,
|
|
|
+ changeInfoVosList: [...vosList]
|
|
|
+ };
|
|
|
+ console.log('pa', params);
|
|
|
+ console.log('Submitting Main Insurance Products:', mainInsuranceProducts.value.map((p: any) => ({ ...p })));
|
|
|
+ console.log('Submitting Driver Accident Products:', driverAccidentProducts.value.map((p: any) => ({ ...p })));
|
|
|
+
|
|
|
+ api.insurancePolicyApi.changeSubmit(params).then((res: any) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ ElMessage.success(res.msg || '批改申请已提交!');
|
|
|
+ // 关闭弹窗
|
|
|
+ isSubmit.value = true;
|
|
|
+ isDialogVisible.value = false;
|
|
|
+ // emits
|
|
|
+ emits('complete');
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+onUnmounted(() => {
|
|
|
+ if (isDialogVisible.value) {
|
|
|
+ console.log('处理页面刷新时,单子没关闭')
|
|
|
+ clearData();
|
|
|
+ api.insurancePolicyApi.adjustRemove(props.data.orderNo);
|
|
|
+ }
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+
|
|
|
+</style>
|