Files
ebiz-ai-knowledge-manage/src/views/riskCheck/taDataSubmit.vue
2025-07-25 15:03:48 +08:00

1336 lines
45 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="ta-data-form">
<h3>审批单录入</h3>
<!-- 审批单基本信息 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>审批单基本信息</span>
</div>
<el-row :gutter="20">
<el-col :span="12">
<el-form ref="form" :model="formData" label-width="120px">
<el-form-item label="审批单号">
<el-input
v-model="formData.orderCode"
placeholder="请输入审批单号"
></el-input>
</el-form-item>
<el-form-item label="审批单出单时间">
<el-date-picker
v-model="formData.orderTime"
type="datetime"
placeholder="选择日期时间"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12">
<!-- 右侧留空保持对称 -->
</el-col>
</el-row>
</el-card>
<!-- 基本信息 -->
<!-- 基本信息 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>基本信息</span>
</div>
<el-row :gutter="20">
<el-col :span="12">
<el-form
ref="form"
:model="formData.data.baseInfo"
label-width="120px"
>
<el-form-item label="客户名称">
<el-input
v-model="formData.data.baseInfo.customerName"
placeholder="请输入客户名称"
></el-input>
</el-form-item>
<el-form-item label="起保日期">
<el-date-picker
v-model="formData.data.baseInfo.insureStartDate"
type="date"
placeholder="选择起保日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item label="归属机构">
<el-input
type="text"
placeholder="输入归属机构"
v-model="formData.data.baseInfo.orgName"
></el-input>
</el-form-item>
<el-form-item label="是否续保">
<el-radio-group v-model="formData.data.baseInfo.isRenew">
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="业务来源">
<el-input
type="text"
placeholder="输入业务来源"
v-model="formData.data.baseInfo.bizSource"
></el-input>
</el-form-item>
<el-form-item label="签报有效起期">
<el-date-picker
v-model="formData.data.baseInfo.signStartDate"
type="date"
placeholder="选择签报有效起期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item label="业务详细说明">
<el-input
type="textarea"
:rows="3"
placeholder="说明业务来源、背景及分公司初步风险判断"
v-model="formData.data.baseInfo.bizDescription"
></el-input>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12">
<el-form
ref="form"
:model="formData.data.baseInfo"
label-width="120px"
>
<el-form-item label="终保日期">
<el-date-picker
v-model="formData.data.baseInfo.insureEndDate"
type="date"
placeholder="选择终保日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item label="共保标志">
<el-select
v-model="formData.data.baseInfo.isCoUnderwriting"
placeholder="请选择共保标志"
>
<el-option label="独家承保" value="独家承保"></el-option>
<el-option label="共保" value="共保"></el-option>
</el-select>
</el-form-item>
<el-form-item label="业务细分">
<el-input
type="text"
placeholder="输入业务细分"
v-model="formData.data.baseInfo.bizDetailSource"
></el-input>
</el-form-item>
<el-form-item label="签报有效止期">
<el-date-picker
v-model="formData.data.baseInfo.signEndDate"
type="date"
placeholder="选择签报有效止期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<!-- 补充的字段 -->
<el-form-item label="主险代码">
<el-input
v-model="formData.data.baseInfo.mainRiskCode"
placeholder="请输入主险代码"
></el-input>
</el-form-item>
<el-form-item label="总保额">
<el-input
v-model="formData.data.baseInfo.totalAmt"
placeholder="请输入总保额"
></el-input>
</el-form-item>
<el-form-item label="总保费">
<el-input
v-model="formData.data.baseInfo.totalPrem"
placeholder="请输入总保费"
></el-input>
</el-form-item>
<el-form-item label="币种">
<el-input
v-model="formData.data.baseInfo.currency"
placeholder="如CNY"
></el-input>
</el-form-item>
</el-form>
</el-col>
</el-row>
</el-card>
<!-- 标的基本信息 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>标的基本信息</span>
</div>
<el-row :gutter="20">
<el-col :span="12">
<el-form
ref="form"
:model="formData.data.targetInfo"
label-width="120px"
>
<el-form-item label="企业是否首次投保">
<el-radio-group v-model="formData.data.targetInfo.isFirstAppnt">
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="渠道名称">
<el-select
v-model="formData.data.targetInfo.channelName"
placeholder="请选择渠道名称"
>
<el-option label="线上渠道" value="线上渠道"></el-option>
<el-option label="线下渠道" value="线下渠道"></el-option>
</el-select>
</el-form-item>
<el-form-item label="首席承保人名称">
<el-input
v-model="formData.data.targetInfo.firstAppntName"
placeholder="请输入首席承保人名称"
></el-input>
</el-form-item>
<el-form-item label="我司份额">
<el-input
v-model="formData.data.targetInfo.myShare"
placeholder="请输入我司份额"
></el-input>
</el-form-item>
<el-form-item label="绿色产业">
<el-radio-group v-model="formData.data.targetInfo.isGreen">
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="投保工伤人数">
<el-input
v-model="formData.data.targetInfo.insureInjuryCount"
placeholder="请输入投保工伤人数"
></el-input>
</el-form-item>
<el-form-item label="雇员总人数">
<el-input
v-model="formData.data.targetInfo.totalEmployeeCount"
placeholder="请输入雇员总人数"
></el-input>
</el-form-item>
<el-form-item label="年龄结构65岁以内比例">
<el-input
v-model="formData.data.targetInfo.agePercentUnder65"
placeholder="请输入比例"
></el-input>
</el-form-item>
<el-form-item label="续保类型">
<el-select
v-model="formData.data.targetInfo.renewType"
placeholder="请选择续保类型"
>
<el-option label="正常续保" value="正常续保"></el-option>
<el-option label="降额续保" value="降额续保"></el-option>
</el-select>
</el-form-item>
<el-form-item label="是否存在系统外赔案">
<el-radio-group
v-model="formData.data.targetInfo.hasOutofSysClaim"
>
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12">
<el-form
ref="form"
:model="formData.data.targetInfo"
label-width="120px"
>
<el-form-item label="是否渠道业务">
<el-radio-group
v-model="formData.data.targetInfo.isChannelBusiness"
>
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="审批单有效期">
<el-input
v-model="formData.data.targetInfo.approvalValidityPeriod"
placeholder="请输入审批单有效期"
></el-input>
</el-form-item>
<el-form-item label="首席承保人比例">
<el-input
v-model="formData.data.targetInfo.chiefInsurerRatio"
placeholder="请输入首席承保人比例"
></el-input>
</el-form-item>
<el-form-item label="原审批号">
<el-input
v-model="formData.data.targetInfo.originTaCode"
placeholder="请输入原审批号"
></el-input>
</el-form-item>
<el-form-item label="投保雇员人数">
<el-input
v-model="formData.data.targetInfo.insuredEmployeeCount"
placeholder="请输入投保雇员人数"
></el-input>
</el-form-item>
<el-form-item label="年龄结构67岁以上比例">
<el-input
v-model="formData.data.targetInfo.agePercentAbove67"
placeholder="请输入比例"
></el-input>
</el-form-item>
<el-form-item label="续保单号">
<el-input
v-model="formData.data.targetInfo.renewalPolicyNumber"
placeholder="请输入续保单号"
></el-input>
</el-form-item>
<el-form-item label="未决立案是否充足">
<el-radio-group
v-model="formData.data.targetInfo.isPendingCaseSufficient"
>
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</el-col>
</el-row>
</el-card>
<!-- 特别约定 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>特别约定</span>
<el-button
style="float: right;"
size="mini"
type="primary"
@click="addSpecAgreement"
>新增约定</el-button
>
</div>
<!-- 特别约定表格 -->
<el-table
:data="formData.data.specAgreement"
border
style="width: 100%"
v-if="formData.data.specAgreement.length > 0"
>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="specCode" label="特别约定编码" width="180">
<template slot-scope="scope">
<el-input
v-model="scope.row.specCode"
placeholder="请输入编码"
></el-input>
</template>
</el-table-column>
<el-table-column prop="specName" label="特别约定名称" width="180">
<template slot-scope="scope">
<el-input
v-model="scope.row.specName"
placeholder="请输入名称"
></el-input>
</template>
</el-table-column>
<el-table-column prop="specContent" label="特别约定内容">
<template slot-scope="scope">
<el-input
v-model="scope.row.specContent"
type="textarea"
:rows="2"
placeholder="请详细描述约定内容"
></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="deleteSpecAgreement(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 主险-->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>主险信息</span>
</div>
<el-form
ref="mainRiskForm"
:model="formData.data.mainRisk"
label-width="140px"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="风险代码">
<el-input
v-model="formData.data.mainRisk.riskCode"
placeholder="请输入风险代码"
></el-input>
</el-form-item>
<el-form-item label="风险名称">
<el-input
v-model="formData.data.mainRisk.riskName"
placeholder="如雇主责任险2015版"
></el-input>
</el-form-item>
<el-form-item label="是否计入总保额">
<el-radio-group v-model="formData.data.mainRisk.incluedAmt">
<el-radio label="计入总保额">计入总保额</el-radio>
<el-radio label="不计入总保额">不计入总保额</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="累计赔偿限额">
<el-input
v-model="formData.data.mainRisk.aggregateLiabilityLimit"
placeholder="请输入累计赔偿限额"
></el-input>
</el-form-item>
<el-form-item label="费率 (‰)">
<el-input
v-model="formData.data.mainRisk.rate"
placeholder="如0.789474"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保险保费">
<el-input
v-model="formData.data.mainRisk.insurePrem"
placeholder="请输入保险保费"
></el-input>
</el-form-item>
<el-form-item label="项目保费">
<el-input
v-model="formData.data.mainRisk.itemPrem"
placeholder="请输入项目保费"
></el-input>
</el-form-item>
<!-- 这里是占位为免赔设置和责任限额预留空间实际中可能需要更复杂的组件 -->
<el-form-item label="免赔设置">
<el-button type="text" disabled
>待实现 (DeductibleDTO[])</el-button
>
</el-form-item>
<el-form-item label="责任赔偿限额">
<el-button type="text" disabled
>待实现 (LiabilityLimitDTO[])</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 附加险 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>附加险</span>
<el-button
style="float: right;"
size="mini"
type="primary"
@click="addAdditionalRisk"
>新增附加险</el-button
>
</div>
<!-- 附加险表格 -->
<el-table
:data="formData.data.additionalRisk"
border
style="width: 100%"
v-if="formData.data.additionalRisk.length > 0"
>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="riskCode" label="风险代码" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.riskCode"
placeholder="请输入代码"
></el-input>
</template>
</el-table-column>
<el-table-column prop="riskName" label="风险名称" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.riskName"
placeholder="如附加24小时"
></el-input>
</template>
</el-table-column>
<el-table-column prop="incluedAmt" label="是否计入总保额" width="120">
<template slot-scope="scope">
<el-radio-group v-model="scope.row.incluedAmt">
<el-radio label="计入">计入</el-radio>
<el-radio label="不计入">不计入</el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column
prop="personDailyLiabilityLimit"
label="每人每日责任限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.personDailyLiabilityLimit"
placeholder="请输入限额"
></el-input>
</template>
</el-table-column>
<el-table-column prop="indemnityDays" label="赔偿天数" width="100">
<template slot-scope="scope">
<el-input
v-model="scope.row.indemnityDays"
placeholder="请输入天数"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="aggregateLiabilityLimit"
label="累计赔偿限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.aggregateLiabilityLimit"
placeholder="请输入限额"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="personLiabilityLimit"
label="每人赔偿限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.personLiabilityLimit"
placeholder="可为空"
></el-input>
</template>
</el-table-column>
<el-table-column prop="rate" label="费率 (‰)" width="120">
<template slot-scope="scope">
<el-input v-model="scope.row.rate" placeholder="如0.1"></el-input>
</template>
</el-table-column>
<el-table-column prop="shortRateLabel" label="短期费率标签" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.shortRateLabel"
placeholder="如3"
></el-input>
</template>
</el-table-column>
<el-table-column prop="insurePrem" label="保险保费" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.insurePrem"
placeholder="请输入保费"
></el-input>
</template>
</el-table-column>
<el-table-column prop="itemPrem" label="项目保费" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.itemPrem"
placeholder="请输入保费"
></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="deleteAdditionalRisk(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 标的物清单 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>标的物清单按岗位分类</span>
<el-button
style="float: right;"
size="mini"
type="primary"
@click="addTargetListItem"
>新增岗位</el-button
>
</div>
<!-- 标的物清单表格 -->
<el-table
:data="formData.data.targetListInfo"
border
style="width: 100%"
v-if="formData.data.targetListInfo.length > 0"
>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column
prop="insureEmployeeCount"
label="投保员工人数"
width="120"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.insureEmployeeCount"
placeholder="请输入人数"
></el-input>
</template>
</el-table-column>
<el-table-column prop="jobType" label="工种代码" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.jobType"
placeholder="请输入代码"
></el-input>
</template>
</el-table-column>
<el-table-column prop="jobTypeName" label="工种名称" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.jobTypeName"
placeholder="请输入名称"
></el-input>
</template>
</el-table-column>
<el-table-column prop="jobCategory" label="岗位类别代码" width="130">
<template slot-scope="scope">
<el-input
v-model="scope.row.jobCategory"
placeholder="请输入代码"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="jobCategoryName"
label="岗位类别名称"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.jobCategoryName"
placeholder="请输入名称"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="jobClassification"
label="岗位分类代码"
width="130"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.jobClassification"
placeholder="请输入代码"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="jobClassificationName"
label="岗位分类名称"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.jobClassificationName"
placeholder="请输入名称"
></el-input>
</template>
</el-table-column>
<el-table-column prop="industry" label="行业类别" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.industry"
placeholder="请输入编码"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="perInjuryDustLimit"
label="每人伤残赔偿限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.perInjuryDustLimit"
placeholder="请输入限额"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="perInjuryDustLimitFee"
label="伤残限额费率 (‰)"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.perInjuryDustLimitFee"
placeholder="如1"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="lawCostDustLimit"
label="法律费用赔偿限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.lawCostDustLimit"
placeholder="可为空"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="lawCostDustLimitFee"
label="法律费用费率 (‰)"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.lawCostDustLimitFee"
placeholder="可为空"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="perMedicalCostLimit"
label="每人医疗费用限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.perMedicalCostLimit"
placeholder="请输入限额"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="perMedicalCostLimitFee"
label="医疗费用费率 (‰)"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.perMedicalCostLimitFee"
placeholder="如0.555556"
></el-input>
</template>
</el-table-column>
<el-table-column prop="prem" label="岗位保费" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.prem"
placeholder="请输入保费"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="aggregateLiabilityLimit"
label="累计赔偿限额"
width="150"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.aggregateLiabilityLimit"
placeholder="请输入限额"
></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="deleteTargetListItem(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 销售成本 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>销售成本</span>
<el-button
style="float: right;"
size="mini"
type="primary"
@click="addSellingCost"
>新增成本项</el-button
>
</div>
<!-- 销售成本表格 -->
<el-table
:data="formData.data.sellingCosts"
border
style="width: 100%"
v-if="formData.data.sellingCosts.length > 0"
>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="riskCode" label="风险代码" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.riskCode"
placeholder="请输入代码"
></el-input>
</template>
</el-table-column>
<el-table-column prop="costType" label="成本类型" width="160">
<template slot-scope="scope">
<el-input
v-model="scope.row.costType"
placeholder="如:基本绩效比例"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="announceCostRate"
label="公布成本率 (%)"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.announceCostRate"
placeholder="如2"
></el-input>
</template>
</el-table-column>
<el-table-column prop="costRate" label="实际成本率 (%)" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.costRate"
placeholder="如2"
></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="deleteSellingCost(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 手续费/佣金信息 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>手续费/佣金信息</span>
<el-button
style="float: right;"
size="mini"
type="primary"
@click="addCommission"
>新增佣金项</el-button
>
</div>
<!-- 手续费/佣金信息表格 -->
<el-table
:data="formData.data.commission"
border
style="width: 100%"
v-if="formData.data.commission.length > 0"
>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="riskCode" label="风险代码" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.riskCode"
placeholder="请输入代码"
></el-input>
</template>
</el-table-column>
<el-table-column prop="costType" label="成本类型" width="160">
<template slot-scope="scope">
<el-input
v-model="scope.row.costType"
placeholder="如:代理手续费"
></el-input>
</template>
</el-table-column>
<el-table-column
prop="announceCostRate"
label="公布成本率 (%)"
width="140"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.announceCostRate"
placeholder="如13"
></el-input>
</template>
</el-table-column>
<el-table-column prop="costRate" label="实际成本率 (%)" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.costRate"
placeholder="如13"
></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="deleteCommission(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>影像件上传</span>
</div>
<el-form label-width="270px">
<!-- 文件上传-->
<el-form-item
label=""
required
prop="file"
label-width="0"
class="el-form--label-top"
>
<div
@click.stop="createFiled"
@dragover.prevent="handleDragOver"
@dragleave.prevent="handleDragLeave"
@drop.prevent="handleDrop"
class="upload-demo"
:class="{ 'drag-over': isDragOver }"
>
<el-empty v-if="fileList.length === 0">
<template #image>
<img :src="uloadPng" alt="" style="width: 50px;height: 50px;" />
</template>
<template #description>
<div class="flex flex-direction-c">
<span class="upload-tip">点击或将图片拖拽到这里上传</span>
<span class="upload-tip-field">支持扩展名.jpg.png</span>
</div>
</template>
</el-empty>
<div v-else>
<el-result
v-if="fileList.length === 1"
icon="success"
title="文件上传成功"
:sub-title="`已上传文件:${fileList[0].name}`"
style="height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center;"
>
<template slot="extra">
<el-button
type="primary"
size="medium"
@click.stop="removeFile(0)"
>移除</el-button
>
</template>
</el-result>
<el-result v-else class="more-files">
<template slot="icon">
<div class="text-left">
<el-button class="line-button" size="medium">
文件上传</el-button
>
</div>
</template>
<template slot="extra" style="width: 100%;">
<r-table
:data="fileList"
:columns="columns"
style="width: 100%;"
@removeFiled="removeFiled"
:deletion="false"
></r-table>
</template>
</el-result>
</div>
</div>
</el-form-item>
</el-form>
</el-card>
<!-- 提交按钮 -->
<div class="form-actions">
<el-button type="primary" @click="handleSubmit">提交</el-button>
<el-button @click="handleReset">重置</el-button>
</div>
<!-- &lt;!&ndash; 当前表单数据预览 &ndash;&gt;-->
<!-- <div class="form-preview">-->
<!-- <h4>当前表单数据JSON 预览</h4>-->
<!-- <pre>{{ JSON.stringify(formData, null, 4) }}</pre>-->
<!-- </div>-->
</div>
</template>
<script>
import { taDataSubmit } from '@/api/riskCheck'
import uloadPng from '@/assets/images/konwledge/upload.png'
export default {
name: 'TaDataForm',
data() {
return {
isDragOver: false,
fileList: [], //列表 文件
uloadPng,
formData: {
orderCode: '', // 审批单号
orderTime: '', // 审批单出单时间
data: {
// 基本信息
baseInfo: {
customerName: '', // 客户名称
insureStartDate: '', // 起保日期
insureEndDate: '', // 终保日期
isRenew: '', // 是否续保
orgCode: '', // 承保机构编码
orgName: '', // 承保机构名称
isCoUnderwriting: '', // 是否共保
bizSource: '', //业务来源编码及名称如“1990203-专业代理”,
bizDetailSource: '', // 业务细类来源如“1990203001-其他”
signStartDate: '', // 签单开始日期格式yyyy-MM-dd
signEndDate: '', // 签单结束日期格式yyyy-MM-dd
bizDescription: '', // 业务详细说明描述
mainRiskCode: '', //主险代码
totalAmt: '', // 总保额(金额数值,单位分或元,依系统而定)
totalPrem: '', //总保费(金额数值)
currency: '' //币种:如 CNY
},
// 标的信息
targetInfo: {
isFirstAppnt: '', // 是否为首席承保人:是/否
isChannel: '', // 是否通过渠道出单:是/否
channelCode: '', // 渠道编码
channelName: '', // 渠道名称
effectivePeriod: '', // 承保有效期例如“2个月”
firstAppntName: '', // 首席承保人名称
firstAppntRate: '', // 首席承保人份额比例如“60%”
ourPortion: '', // 我司承保份额说明
originTaCode: '', // 原审批号(用于续保或关联旧单)
isGreen: '', // 是否绿色项目:是/否
insureInjuryCount: '', // 投保伤残人数
insureEmployeeCount: '', // 投保员工人数
totalEmployeeCount: '', // 总员工人数
agePercentUnder65: '', // 年龄在65岁以下人员占比
agePercentBetween65And67: '', // 年龄在65至67岁之间人员占比
agePercentAbove67: '', // 年龄超过67岁人员占比
renewType: '', // 续保类型(空表示无)
renewContCode: '', // 续保合同编号
canProvideClaim: '', // 是否能提供理赔数据支持:是/否
isOutstandingAdequate: '', // 出险准备金是否充足:是/否
hasOutofSysClaim: '' // 是否存在系统外理赔记录:是/否
},
// 特别约定
specAgreement: [],
// 主险信息
mainRisk: {
riskCode: '', // 风险代码
riskName: '', // 风险名称如“雇主责任险2015版
incluedAmt: '', // 是否计入总保额:“计入总保额” / “不计入总保额”
aggregateLiabilityLimit: '', // 累计赔偿限额
rate: '', // 费率如“0.789474‰”
insurePrem: '', // 保险保费
itemPrem: '', // 项目保费
deductible: [], // 免赔设置列表(数组,元素为 DeductibleDTO 结构)
liabilityLimit: [] // 责任赔偿限额列表(数组,元素为 LiabilityLimitDTO 结构)
},
// 附加险
additionalRisk: [],
// 标的物清单:按岗位分类的被保人明细列表
targetListInfo: [],
// 销售成本:各项销售绩效费用比例信息
sellingCosts: [],
// 手续费/佣金信息:各项代理、经纪、渠道等佣金比例
commission: []
}
}
}
},
methods: {
handleSubmit() {
let formData = new FormData()
this.fileList.forEach(file => {
formData.append('files', file)
})
formData.append('formData', JSON.stringify(this.formData))
this.fileList = []
taDataSubmit(formData).then(res => {
if (res.success) {
this.handleReset()
localStorage.setItem(
'riskResult',
JSON.stringify(res.content.content)
)
this.goToRiskResultView()
}
})
},
handleReset() {
this.formData = ''
},
// 新增特别约定
addSpecAgreement() {
this.formData.data.specAgreement.push({
specCode: '',
specName: '',
specContent: ''
})
},
// 删除特别约定
deleteSpecAgreement(index) {
// 至少保留一条
this.formData.data.specAgreement.splice(index, 1)
},
// 新增附加险
addAdditionalRisk() {
this.formData.data.additionalRisk.push({
riskCode: '',
riskName: '',
incluedAmt: '',
personDailyLiabilityLimit: '',
indemnityDays: '',
aggregateLiabilityLimit: '',
personLiabilityLimit: '',
rate: '',
shortRate: '', // 注意:虽然数据结构里有,但表单未展示
shortRateLabel: '',
insurePrem: '',
itemPrem: '',
deductible: [],
liabilityLimit: []
})
},
// 删除附加险
deleteAdditionalRisk(index) {
this.formData.data.additionalRisk.splice(index, 1)
},
// 标的物清单
addTargetListItem() {
this.formData.data.targetListInfo.push({
insureEmployeeCount: '',
jobType: '',
jobTypeName: '',
jobCategory: '',
jobCategoryName: '',
jobClassification: '',
jobClassificationName: '',
industry: '',
perInjuryDustLimit: '',
perInjuryDustLimitFee: '',
lawCostDustLimit: '',
lawCostDustLimitFee: '',
perMedicalCostLimit: '',
perMedicalCostLimitFee: '',
prem: '',
aggregateLiabilityLimit: ''
})
},
deleteTargetListItem(index) {
this.formData.data.targetListInfo.splice(index, 1)
},
// 销售成本
addSellingCost() {
this.formData.data.sellingCosts.push({
riskCode: '',
costType: '',
announceCostRate: '',
costRate: ''
})
},
deleteSellingCost(index) {
this.formData.data.sellingCosts.splice(index, 1)
},
// 手续费/佣金信息
addCommission() {
this.formData.data.commission.push({
riskCode: '',
costType: '',
announceCostRate: '',
costRate: ''
})
},
deleteCommission(index) {
this.formData.data.commission.splice(index, 1)
},
// 生成filed
createFiled() {
let input = document.createElement('input')
input.type = 'file'
input.multiple = true // 支持多文件选择
// 对文件的类型做出限制
input.accept = '.jpg,.png'
input.onchange = e => {
const newFiles = Array.from(e.target.files)
if (this.fileList.length + newFiles.length > 10) {
this.$message.error('最多只能上传10个文件')
return
}
// 校验 最新上传的文件是否之前上传过
for (let i = 0; i < newFiles.length; i++) {
for (let j = 0; j < this.fileList.length; j++) {
if (newFiles[i].name === this.fileList[j].name) {
this.$message.error('请勿重复上传文件,请检查文件')
return
}
}
}
this.fileList = [...this.fileList, ...newFiles] // 将新选择的文件添加到文件列表
}
input.click()
},
handleDragOver() {
this.isDragOver = true
},
handleDragLeave() {
this.isDragOver = false
},
handleDrop(event) {
this.isDragOver = false
const files = event.dataTransfer.files
if (this.fileList.length + files.length > 10) {
this.$message.error('最多只能上传10个文件')
return
}
this.fileList = [...this.fileList, ...Array.from(files)] // 将拖拽的文件添加到文件列表
},
removeFiled(item) {
this.removeFile(item.index)
},
// 新增:移除文件
removeFile(index) {
this.fileList.splice(index, 1)
},
formatFileSize(size) {
return (size / 1024 / 1024).toFixed(2) + 'MB'
},
goToRiskResultView() {
this.$router.push(`/riskResult`)
}
},
computed: {
columns: vm => {
return [
{
type: 'index',
title: '序号'
},
{
title: '文件名称',
prop: 'name'
},
{
title: '文件大小',
prop: 'size',
render: (h, params) => {
return h('span', vm.formatFileSize(params.row.size))
}
},
{
title: '文件类型',
prop: 'type',
render: (h, params) => {
// 根据文件类型展示 是什么类型文件
switch (params.row.type) {
case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
return h('span', 'Excel')
case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
return h('span', 'Word')
case 'application/pdf':
return h('span', 'PDF')
case 'text/plain':
return h('span', 'TXT')
}
return h('span', params.row.type)
}
},
{
title: '操作',
selfBtn: [
{
name: '移除',
size: 'mini',
type: 'primary',
method: 'removeFiled',
class: 'tableBtn'
}
]
}
]
}
}
}
</script>
<style scoped>
.ta-data-form {
max-width: 1200px;
margin: 20px auto;
padding: 20px;
font-family: Arial, sans-serif;
}
.box-card {
margin-bottom: 20px;
}
.form-actions {
text-align: center;
margin-top: 20px;
}
.form-preview {
margin-top: 20px;
background: #f5f5f5;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
overflow: auto;
font-size: 12px;
}
</style>