|
|
@@ -25,7 +25,7 @@
|
|
|
:style="{
|
|
|
'--el-select-disabled-color': row.type !== 1 ? '#a8abb2' : '#F56C6C'
|
|
|
}">
|
|
|
- <el-option :label="row.amount" :value="row.amount" />
|
|
|
+ <el-option :label="getValAlias(row.kindCode, row.amount)" :value="row.amount" />
|
|
|
</el-select>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
@@ -77,7 +77,7 @@
|
|
|
<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"
|
|
|
+ <el-input-number :disabled="true"
|
|
|
class="w-full" controls-position="right"
|
|
|
v-model="row.amount" :min="1">
|
|
|
<template #suffix>
|
|
|
@@ -146,7 +146,7 @@
|
|
|
|
|
|
<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-select v-model="formData.afterAmount" placeholder="请选择保额" class="w-full" @change="formData.tmoney = ''">
|
|
|
<el-option
|
|
|
v-for="item in insuranceData" :key="item.value"
|
|
|
:label="item.label" :value="item.value"
|
|
|
@@ -202,17 +202,42 @@
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
|
<el-button @click="isMainVisible = false">取 消</el-button>
|
|
|
- <el-button type="primary" @click="handleAddSubmit($event, 'main')">确 定</el-button>
|
|
|
+ <el-button type="primary" @click="handleAddSubmit('main')">确 定</el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
<!-- 选择驾意险 -->
|
|
|
<el-dialog
|
|
|
- width="700"
|
|
|
+ width="500"
|
|
|
title="选择驾意险"
|
|
|
append-to-body
|
|
|
v-model="isDrivingVisible"
|
|
|
>
|
|
|
- <Driving ref="drivingTypeRef" @close="handleAddSubmit($event, 'driver')" />
|
|
|
+ <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="handleDriverChange">
|
|
|
+ <el-option v-for="(item, i) in driverAllData" :key="i"
|
|
|
+ :value="item.productCode" :label="item.productName"
|
|
|
+ :disabled="item.disabled"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </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="quantity">
|
|
|
+ <el-input v-model="formData.quantity" type="number" placeholder="请输入份数" />
|
|
|
+ </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="isDrivingVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="handleAddSubmit('driver')">确 定</el-button>
|
|
|
+ </template>
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
|
|
|
@@ -220,7 +245,6 @@
|
|
|
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({
|
|
|
@@ -243,6 +267,7 @@ const emits = defineEmits(['complete']);
|
|
|
const isSubmit = ref(false);
|
|
|
const tableData = ref<any>([]);
|
|
|
const insuranceData = ref<any>([]);
|
|
|
+const driverAllData = ref<any>([]);
|
|
|
const insuranceAllData = ref<any>([]);
|
|
|
const mainInsuranceProducts = ref<any>([]);
|
|
|
const driverAccidentProducts = ref<any>([]);
|
|
|
@@ -256,16 +281,23 @@ watch(() => props.data.tableList, (val) => {
|
|
|
// 对筛选后的元素进行处理,返回新对象
|
|
|
return {
|
|
|
...item,
|
|
|
+ // 批增数据被返回时会带着数据,所以清空
|
|
|
+ type: '',
|
|
|
+ // 投保数据被返回时是null,所以修改
|
|
|
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);
|
|
|
+ const b = val.filter((item: any) => item.kindType === 2).map((item: any) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ type: '',
|
|
|
+ }
|
|
|
+ });
|
|
|
mainInsuranceProducts.value = [...a];
|
|
|
driverAccidentProducts.value = [...b];
|
|
|
tableData.value = [...a, ...b];
|
|
|
- console.log(tableData.value)
|
|
|
}, {
|
|
|
immediate: false,
|
|
|
});
|
|
|
@@ -313,6 +345,16 @@ const rules = reactive<FormRules>({
|
|
|
pattern: /^([1-9]\d?|99)$/,
|
|
|
message: '请输入1-99之间的整数',
|
|
|
trigger: ['blur', 'change']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validator(rule, value, callback) {
|
|
|
+ if (formData.value.key === 'tu' && value > formData.value.amount) {
|
|
|
+ callback(new Error(`数量不能超过${formData.value.amount}份`))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: ['blur', 'change']
|
|
|
}
|
|
|
],
|
|
|
premium: [
|
|
|
@@ -328,7 +370,7 @@ const rules = reactive<FormRules>({
|
|
|
callback(new Error('请输入0-99999.99之间的数字'));
|
|
|
} else {
|
|
|
// 检查小数位数是否超过2位
|
|
|
- const decimalPart = value.toString().split('.')[1];
|
|
|
+ const decimalPart = value && value.toString().split('.')[1];
|
|
|
if (decimalPart && decimalPart.length > 2) {
|
|
|
callback(new Error('最多支持两位小数'));
|
|
|
} else {
|
|
|
@@ -352,11 +394,15 @@ const rules = reactive<FormRules>({
|
|
|
callback(new Error('请输入0-99999.99之间的数字'));
|
|
|
} else {
|
|
|
// 检查小数位数是否超过2位
|
|
|
- const decimalPart = value.toString().split('.')[1];
|
|
|
+ const decimalPart = value && value.toString().split('.')[1];
|
|
|
if (decimalPart && decimalPart.length > 2) {
|
|
|
callback(new Error('最多支持两位小数'));
|
|
|
} else {
|
|
|
- callback();
|
|
|
+ if (formData.value.key === 'tu' && value > formData.value.premium) {
|
|
|
+ callback(new Error(`金额不能超过¥${formData.value.premium}`))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -375,6 +421,7 @@ const getItemShow = (data: any, key: string) => {
|
|
|
if (key === 'bu') {
|
|
|
flag = data.formtype === 1 && data.amount < data[feild];
|
|
|
}
|
|
|
+ formData.value.key = data.formtype === 2 || (data.formtype === 1 && (data[feild] && data.amount > data[feild])) ? 'tu' : '';
|
|
|
return flag;
|
|
|
};
|
|
|
|
|
|
@@ -391,12 +438,34 @@ const clearData = () => {
|
|
|
mainInsuranceProducts.value = [];
|
|
|
driverAccidentProducts.value = [];
|
|
|
};
|
|
|
+const resetForm = () => {
|
|
|
+ // 重置数据
|
|
|
+ formData.value = {};
|
|
|
+ formRef.value && formRef.value.resetFields();
|
|
|
+};
|
|
|
+// 获取计算值
|
|
|
+const handleCompute = (a: any, b: any, operator: '+' | '-' = '-') => {
|
|
|
+ // 将输入转为数字
|
|
|
+ const numA = Number(a) || 0;
|
|
|
+ const numB = Number(b) || 0;
|
|
|
+
|
|
|
+ let val;
|
|
|
+ if (operator === '+') {
|
|
|
+ val = ((numA * 100) + (numB * 100)) / 100;
|
|
|
+ } else {
|
|
|
+ val = ((numA * 100) - (numB * 100)) / 100;
|
|
|
+ }
|
|
|
+
|
|
|
+ return val || 0;
|
|
|
+};
|
|
|
|
|
|
// 批增操作
|
|
|
const isMainVisible = ref(false);
|
|
|
const isDrivingVisible = ref(false);
|
|
|
-const drivingTypeRef: any = ref(null);
|
|
|
-const handleAddInsurance = (type: 'main' | 'driver', item?: any) => {
|
|
|
+const handleDriverChange = (val: any) => {
|
|
|
+ formData.value.kindName = driverAllData.value.find((opt: any) => opt.productCode === val).productName;
|
|
|
+};
|
|
|
+const handleAddInsurance = (type: 'main' | 'driver') => {
|
|
|
if (type === 'main') {
|
|
|
api.projectApi.getBusinessInsurance().then((res: any) => {
|
|
|
if(res.code == 200) {
|
|
|
@@ -413,15 +482,24 @@ const handleAddInsurance = (type: 'main' | 'driver', item?: any) => {
|
|
|
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);
|
|
|
+ // props.data.companyId
|
|
|
+ let id = '1738811735599347566';
|
|
|
+ api.projectApi.jyxList({
|
|
|
+ company: id
|
|
|
+ }).then((res: any) => {
|
|
|
+ if(res.code == 200) {
|
|
|
+ let arr = driverAccidentProducts.value.map((item: any) => item.kindCode);
|
|
|
+ driverAllData.value = res.data.map((item: any) => ({
|
|
|
+ ...item,
|
|
|
+ disabled: arr.indexOf(item.productCode) !== -1
|
|
|
+ }));
|
|
|
+ }
|
|
|
});
|
|
|
+ formData.value.formtype = 3;
|
|
|
+ isDrivingVisible.value = true;
|
|
|
}
|
|
|
};
|
|
|
-const handleAddSubmit = async (e: any, type: 'main' | 'driver') => {
|
|
|
+const handleAddSubmit = async (type: 'main' | 'driver') => {
|
|
|
if (type === 'main') {
|
|
|
if (!formRef.value) return
|
|
|
await formRef.value.validate((valid) => {
|
|
|
@@ -440,33 +518,43 @@ const handleAddSubmit = async (e: any, type: 'main' | 'driver') => {
|
|
|
type: 3,
|
|
|
});
|
|
|
isMainVisible.value = false;
|
|
|
+ // 重置数据
|
|
|
+ resetForm();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
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) => {
|
|
|
+ if (!formRef.value) return
|
|
|
+ await formRef.value.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ // push数据
|
|
|
driverAccidentProducts.value.push({
|
|
|
- id: item.id,
|
|
|
- kindCode: item.productCode,
|
|
|
- kindName: item.productName,
|
|
|
+ id: Date.now(),
|
|
|
+ kindCode: formData.value.kindCode,
|
|
|
+ kindName: formData.value.kindName,
|
|
|
// 险种类型 0.交强 1.商业 2.非车
|
|
|
kindType: 2,
|
|
|
- amount: 1,
|
|
|
- premium: item.premium - 0,
|
|
|
+ amount: formData.value.quantity - 0,
|
|
|
+ premium: formData.value.tmoney,
|
|
|
type: 3,
|
|
|
});
|
|
|
- });
|
|
|
- }
|
|
|
- isDrivingVisible.value = false;
|
|
|
+ isDrivingVisible.value = false;
|
|
|
+ // 重置数据
|
|
|
+ resetForm();
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+// 换取对应保额的别名
|
|
|
+const getValAlias = (code: any, val: any) => {
|
|
|
+ let data = insuranceAllData.value;
|
|
|
+ // 特殊处理,null转为投保的值
|
|
|
+ if (val === null) val = '1';
|
|
|
+ let objs = data.find((item: any) => item.kindCode === code)?.options.find((item: any) => item.value == val);
|
|
|
+ return objs ? objs.label : '';
|
|
|
+};
|
|
|
// 获取state文本
|
|
|
const getStateText = (field: string, item?: any) => {
|
|
|
let text = '--';
|
|
|
@@ -484,6 +572,8 @@ const getStateText = (field: string, item?: any) => {
|
|
|
};
|
|
|
// 批改操作
|
|
|
const openFormDialog = (type: 'main' | 'driver', item?: any) => {
|
|
|
+ // 重置数据
|
|
|
+ resetForm();
|
|
|
form.type = type;
|
|
|
if (item) {
|
|
|
form.isEditing = true;
|
|
|
@@ -491,11 +581,11 @@ const openFormDialog = (type: 'main' | 'driver', item?: any) => {
|
|
|
form.title = type === 'main' ? '批改险种' : '批改驾意险';
|
|
|
formData.value = {
|
|
|
...item,
|
|
|
+ afterAmount: '',
|
|
|
};
|
|
|
if (item.kindType === 2) {
|
|
|
formData.value.quantity = item.amount;
|
|
|
}
|
|
|
- console.log(item, formData.value)
|
|
|
}
|
|
|
isFormDialogVisible.value = true;
|
|
|
};
|
|
|
@@ -503,7 +593,6 @@ 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,
|
|
|
@@ -517,6 +606,10 @@ const handleChange = (e: any) => {
|
|
|
}
|
|
|
};
|
|
|
const handleTypeChange = (e: any) => {
|
|
|
+ // 清空金额
|
|
|
+ formData.value.tmoney = '';
|
|
|
+ formRef.value && formRef.value.clearValidate();
|
|
|
+ // 获取保额数据
|
|
|
if (e === 1 && formData.value.kindType !== 2) {
|
|
|
getInsuranceData(formData.value)
|
|
|
}
|
|
|
@@ -536,7 +629,6 @@ 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) {
|
|
|
// 更新逻辑
|
|
|
@@ -549,12 +641,11 @@ const handleFormSubmit = async () => {
|
|
|
type: data.formtype
|
|
|
};
|
|
|
}
|
|
|
- console.log(targetArray[itemIndex])
|
|
|
}
|
|
|
isFormDialogVisible.value = false;
|
|
|
ElMessage.success(form.isEditing ? '修改成功' : '新增成功');
|
|
|
// 重置数据
|
|
|
- formRef.value && formRef.value.resetFields();
|
|
|
+ resetForm();
|
|
|
} else {
|
|
|
console.log('error submit!', fields)
|
|
|
}
|
|
|
@@ -600,19 +691,20 @@ const handleSubmit = () => {
|
|
|
// 三种批改方式的字段再计算
|
|
|
if (item.type === 2 || (item.type === 1 && (item[feild] && item.amount > item[feild]))) {
|
|
|
adjustType = 1;
|
|
|
- afterPremium = item.premium - item.tmoney;
|
|
|
+ afterPremium = handleCompute(item.premium, item.tmoney, '-');
|
|
|
} else if (item.amount < item[feild] && item.type === 1) {
|
|
|
adjustType = 0;
|
|
|
- afterPremium = item.premium + (item.tmoney - 0);
|
|
|
+ afterPremium = handleCompute(item.premium, item.tmoney, '+');
|
|
|
}
|
|
|
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.tmoney = afterPremium = item.premium - 0;
|
|
|
+ // 置为0,是因为table展示是这俩字段
|
|
|
curItem.amount = 0;
|
|
|
curItem.premium = 0;
|
|
|
}
|
|
|
+ // 非批增且为驾意险,因为驾意险使用字段不一样
|
|
|
if (item.type !== 3 && item.kindType === 2) {
|
|
|
curItem.afterAmount = item.quantity;
|
|
|
}
|
|
|
@@ -627,7 +719,7 @@ const handleSubmit = () => {
|
|
|
// 保费
|
|
|
premium: curItem.premium,
|
|
|
// 批改类型 0.未批改 1.保额批改 2.退保 3.批增
|
|
|
- type: curItem.type,
|
|
|
+ type: curItem.type || 0,
|
|
|
// 调整类型 0.补缴 1.退款
|
|
|
adjustType: adjustType,
|
|
|
// 调整金额
|
|
|
@@ -657,6 +749,18 @@ const handleSubmit = () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+onBeforeMount(() => {
|
|
|
+ api.projectApi.getBusinessInsurance().then((res: any) => {
|
|
|
+ if(res.code == 200) {
|
|
|
+ insuranceAllData.value = res.data.map((item: any) => ({
|
|
|
+ ...item,
|
|
|
+ label: item.kindName,
|
|
|
+ value: item.kindCode,
|
|
|
+ }));
|
|
|
+ }
|
|
|
+ });
|
|
|
+});
|
|
|
+
|
|
|
onUnmounted(() => {
|
|
|
if (isDialogVisible.value) {
|
|
|
console.log('处理页面刷新时,单子没关闭')
|