Преглед изворни кода

fix: 补录订单、报价开发

wuguojie пре 1 година
родитељ
комит
828f24aa85

+ 4 - 1
src/api/index.ts

@@ -29,6 +29,8 @@ import projectApi from '@/api/modules/project.ts'
 import additionalApi from '@/api/modules/additional.ts'
 import logApi from '@/api/modules/log.ts'
 
+import insurancePolicyApi from '@/api/modules/insurancePolicy.ts'
+
 const axiosInstance:ApiInstance = axios.create({
   baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true') ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL,
   timeout: 1000 * 60,
@@ -125,6 +127,7 @@ const api = {
   insuranceApi: insuranceApi(axiosInstance),
   projectApi: projectApi(axiosInstance),
   additionalApi: additionalApi(axiosInstance),
-  logApi: logApi(axiosInstance)
+  logApi: logApi(axiosInstance),
+  insurancePolicyApi: insurancePolicyApi(axiosInstance)
 }
 export default api

+ 2 - 1
src/api/modules/additional.ts

@@ -10,9 +10,10 @@ import { ApiInstance } from '../type'
   银行        bank_info
 * */
 const additionalApi = (axiosInstance: ApiInstance) => ({
-  dictDetails: (data: string) => axiosInstance.get(`/dict/dictDetails?type=${data}`),
+  dictDetails: (data: string) => axiosInstance.get(`/dict/get?dictCode=${data}`),
   drivingPermit: (data: any) => axiosInstance.post('/order/identify/drivingPermit', data), // 行驶证识别
   idCard: (data: any) => axiosInstance.post('/order/identify/idCard', data), // 身份证识别
+  businessLicense: (data: any) => axiosInstance.post('/order/identify/businessLicense', data), // 营业执照识别
   vinSearch:(data: string) => axiosInstance.get(`/order/carModel/vinSearch?frameNo=${data}`), // 根据车辆识别码查询车辆信息
   licenseSearch:(data: string) => axiosInstance.get(`/order/carModel/vinSearch?frameNo=${data}`), // 根据车牌查询车辆信息
   saveOrders: (data: any) => axiosInstance.post('/supplementOrder/saveOrders', data), // 暂存/提交

+ 14 - 0
src/api/modules/insurancePolicy.ts

@@ -0,0 +1,14 @@
+import { ApiInstance } from '../type'
+
+const insurancePolicyApi = (axiosInstance: ApiInstance) => ({
+  quote: (data: any) => axiosInstance.post('/unify/order/quote', data), // 报价
+  getQuoteNo:(data: any) => axiosInstance.get(`/unify/order/getQuoteNo?licenseNo=${data.licenseNo}&vinNo=${data.vinNo}&engineNo=${data.engineNo}`), // 获取报价号
+  ruleFilterCompany: (data: any) => axiosInstance.post('/scheme/ruleFilterCompany', data, {
+    headers: {
+      system_code: localStorage.getItem('login_system')
+    }
+  }), // 获取保司
+  getSchemeResult: (data: any) => axiosInstance.get(`scheme/getSchemeResult?companyId=${data.companyId}&&productId=${data.productId}`)
+})
+
+export default insurancePolicyApi

BIN
src/assets/images/insurancePolicy/company.png


BIN
src/assets/images/insurancePolicy/sao.png


+ 1 - 1
src/components/ruleCondition/index.vue

@@ -251,7 +251,7 @@ const change = (value: any, title: title) => {
 };
 // 遍历并处理每个数组
 const processArray = (array: any[]) => {
-  return array.map((val) => {
+  return array?.map((val) => {
     switch (val.attrType) {
       case 'inputNumber':
       case 'datetime':

+ 2 - 2
src/layouts/components/DrivingType/index.vue

@@ -150,14 +150,14 @@ const handleDel = (item, index) => {
 
 // 编辑
 let editIndex = ref(0)
-const initEditData = (data, index) => {
+const initEditData = (data, index, id) => {
   editIndex.value = index
   // JYXList.value.forEach(item => {
   //   item.checked = false
   // })
   // let list = [...JYXList.value]
   api.projectApi.jyxList({
-    company: '173881173559933834'
+    company: id?id:'1738811735599380291'
   }).then(res => {
     if(res.code == 200) {
       if(res.data && res.data.length > 0) {

+ 47 - 0
src/router/modules/insurancePolicy.ts

@@ -0,0 +1,47 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw = {
+  path: '/insurancePolicy',
+  component: Layout,
+  redirect: '/insurancePolicy/index',
+  name: 'InsurancePolicy',
+  meta: {
+    title: '车险出单',
+  },
+  children: [
+    {
+      path: 'index',
+      name: 'Index',
+      component: () => import('@/views/insurancePolicy/index.vue'),
+      meta: {
+        title: '车险报价',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      },
+      // children: [
+      //   {
+      //     path: 'logDetail',
+      //     name: 'LogDetail',
+      //     component: () => import('@/views/systemManage/logManage/logDetail.vue'),
+      //     meta: {
+      //       title: '日志详情',
+      //       menu: false,
+      //       activeMenu: '/systemManage/logManage',
+      //     },
+      //   },
+      // ]
+    },
+    {
+      path: 'order',
+      name: 'Order',
+      component: () => import('@/views/insurancePolicy/order.vue'),
+      meta: {
+        title: '订单管理',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      }
+    }
+  ],
+}
+
+export default routes

+ 8 - 0
src/router/routes.ts

@@ -12,6 +12,7 @@ import marketingManagement from "./modules/marketing";
 import quoteConfig from "./modules/quoteConfig";//报价配置
 import externalAgreement from "./modules/externalAgreement";//外部协议
 import additionalOrder from './modules/additionalOrder.ts'
+import insurancePolicy from './modules/insurancePolicy.ts'
 import systemManage from './modules/system.ts'
 // import {  } from "@/store/modules/user";
 // 固定路由(默认路由
@@ -128,6 +129,13 @@ const asyncRoutes: Route.recordMainRaw[] = [
     },
     children: [additionalOrder],
   },
+  {
+    meta: {
+      title: '车险出单',
+      icon: "i-uim:box",
+    },
+    children: [insurancePolicy],
+  },
   {
     meta: {
       title: '系统管理',

+ 0 - 3
src/views/additionalOrder/additional/index.vue

@@ -2416,7 +2416,6 @@ let insuranceData = ref([])
 let jqWork = ref([
   { text: '即时生效', checked: false }
 ])
-
 // 根据身份证号换算年龄
 const getAgeByIdCard = (idCard: any, type?: any) => {
   //获取用户身份证号码
@@ -2440,8 +2439,6 @@ const getAgeByIdCard = (idCard: any, type?: any) => {
   type.age = age
   return age
 }
-
-//
 const oneYearPast1 = (time) => {
   //明年减一秒
   let date = new Date(time);

+ 2436 - 0
src/views/insurancePolicy/index.vue

@@ -0,0 +1,2436 @@
+<template>
+  <div class="insurancePolicy">
+    <el-form ref="InsurancePolicyRefs" :model="insurancePolicyForm" :rules="insurancePolicyRules">
+      <el-row :gutter="20" class="formItem">
+        <el-col :span="6">
+          <el-form-item label="业务员:">
+            <el-input v-model="insurancePolicyForm.salesman" placeholder="输入业务员工姓名,手机号,工号查找" @click="handleFocus"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6" v-if="insurancePolicyForm.salesman">
+          <el-form-item label="手机号:">
+            <el-input v-model="insurancePolicyForm.mobile" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6" v-if="insurancePolicyForm.salesman">
+          <el-form-item label="归属:">
+            <el-cascader
+              clearable
+              style="width: 100%"
+              v-model="insurancePolicyForm.deptId"
+              :options="institutionList"
+              :props="tableProps"
+            ></el-cascader>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6" v-if="insurancePolicyForm.salesman">
+          <el-button link type="primary" @click="handleFocus">更换业务员</el-button>
+        </el-col>
+      </el-row>
+      <el-collapse  v-model="activeName">
+        <el-collapse-item name="car">
+          <template #title>
+            <span class="title">车辆信息</span>
+          </template>
+          <el-row :gutter="20" class="formItem formBlock">
+            <el-col :span="6">
+              <el-form-item label="车辆是否上牌?" prop="isRegistered">
+                <el-radio-group v-model="insurancePolicyForm.isRegistered">
+                  <el-radio value="1">是</el-radio>
+                  <el-radio value="2">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item :disabled="insurancePolicyForm.isRegistered==2" label="车牌" prop="licenseNo">
+                <el-input v-model="insurancePolicyForm.licenseNo" minlength="7" maxlength="8" placeholder="输入车牌号" @change="getQuoteNumber"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="车牌识别代码" prop="vinNo">
+                <el-input v-model="insurancePolicyForm.vinNo" placeholder="请输入车辆识别代码" @change="getQuoteNumber">
+                  <template #append>
+                    <el-button icon="Search" @click="handleCarNumber" />
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="品牌型号" prop="brandName">
+                <el-input v-model="insurancePolicyForm.brandName" placeholder="请输入品牌型号">
+                  <template #append>
+                    <el-button icon="Search" @click="handleCarCode" />
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="发动机号" prop="engineNo">
+                <el-input v-model="insurancePolicyForm.engineNo" placeholder="请输入发动机号" @change="getQuoteNumber"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="使用性质" prop="carNatureCode">
+                <el-select v-model="insurancePolicyForm.carNatureCode" placeholder="请选择">
+                  <el-option v-for="(item, index) in optionObj.car_nature_code" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="车辆用途" prop="vehicleUseCode">
+                <el-select v-model="insurancePolicyForm.vehicleUseCode" placeholder="请选择">
+                  <el-option v-for="(item, index) in optionObj.vehicle_use_code" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="车辆种类" prop="plateType">
+                <el-select v-model="insurancePolicyForm.plateType" placeholder="请选择">
+                  <el-option v-for="(item, index) in optionObj.car_kind_code" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="车辆类型" prop="carTypeCode">
+                <el-select v-model="insurancePolicyForm.carTypeCode" placeholder="请选择">
+                  <el-option v-for="(item, index) in optionObj.car_type_code" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="能源种类" prop="energyTypeCode">
+                <el-select v-model="insurancePolicyForm.energyTypeCode" placeholder="请选择">
+                  <el-option v-for="(item, index) in optionObj.energy_type_code" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="注册日期" prop="registerDate">
+                <el-date-picker
+                  v-model="insurancePolicyForm.registerDate"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  :disabled-date="disabledDateStart"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="发证日期" prop="issueDate">
+                <el-date-picker
+                  v-model="insurancePolicyForm.issueDate"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  :disabled-date="disabledDateStart"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="整备质量" prop="completeKerbMass">
+                <el-input v-model="insurancePolicyForm.completeKerbMass" placeholder="输入整备质量">
+                  <template #append>
+                    <span>千克(KG)</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="核定载质量" prop="limitLoad">
+                <el-input v-model="insurancePolicyForm.limitLoad" placeholder="请输入核定载质量">
+                  <template #append>
+                    <span>千克(KG)</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="座位数" prop="seatCount">
+                <el-input v-model="insurancePolicyForm.seatCount" placeholder="请输入座位数">
+                  <template #append>
+                    <span>座</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="年款" prop="carYear">
+                <el-input v-model="insurancePolicyForm.carYear" placeholder="请输入年款"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="新车购置价" prop="purchasePrice">
+                <el-input v-model="insurancePolicyForm.purchasePrice" placeholder="请输入新车购置价">
+                  <template #append>
+                    <span>元</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="排量" prop="displacement">
+                <el-input v-model="insurancePolicyForm.displacement" placeholder="请输入排量">
+                  <template #append>
+                    <span>升(L)</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="功率" prop="powerScale">
+                <el-input v-model="insurancePolicyForm.powerScale" placeholder="输入功率">
+                  <template #append>
+                    <span>千瓦(KW)</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+
+          </el-row>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <el-button link type="primary" @click.stop="handleRecognition"><img src="@/assets/images/insurancePolicy/sao.png" class="myIcon" />证件识别</el-button>
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="owner">
+          <template #title>
+            <span class="title">车主信息</span>
+          </template>
+          <el-row :gutter="20" class="formItem formBlock">
+            <el-col :span="6">
+              <el-form-item label="车主姓名" prop="name1">
+                <el-input v-model="insurancePolicyForm.name1" placeholder="输入车主姓名"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="车主手机号" prop="mobile1">
+                <el-input v-model="insurancePolicyForm.mobile1" placeholder="请输入车主手机号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="证件类型" prop="personType1">
+                <el-select v-model="insurancePolicyForm.identifyType1" placeholder="请选择">
+                  <el-option label="身份证" value="01" key="1"></el-option>
+                  <el-option label="营业执照" value="02" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col v-if="insurancePolicyForm.identifyType1 === '01'" :span="6">
+              <el-form-item label="证件号码" prop="identifyNumber1">
+                <el-input v-model="insurancePolicyForm.identifyNumber1" placeholder="请输入证件号码" @change="getAgeByIdCard($event, insurancePolicyForm)"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col v-else :span="6">
+              <el-form-item label="统一社会信用代码" prop="identifyNumber1">
+                <el-input v-model="insurancePolicyForm.identifyNumber1" placeholder="请输入证件号码"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item prop="identifyValidDate1" label="有效期起期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidDate1"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="identifyValidEndDate1" label="有效期止期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidEndDate1"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="地址" prop="addr1">
+                <el-input v-model="insurancePolicyForm.addr1" placeholder="请输入地址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="投保人座机" prop="telephone">
+                <el-input v-model="insurancePolicyForm.telephone1" placeholder="请输入投保人座机"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="投保人联系人" prop="person">
+                <el-input v-model="insurancePolicyForm.person1" placeholder="请输入投保人联系人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="联系人证件号码" prop="age">
+                <el-input v-model.number="insurancePolicyForm.age1" placeholder="请输入联系人证件号码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="identifyValidEndDate" label="有效期止期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidEndDate1"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="area" label="地区">
+                <el-cascader
+                  clearable
+                  style="width: 100%"
+                  v-model="insurancePolicyForm.address1"
+                  :options="areaOptins"
+                  :props="areaProps"
+                ></el-cascader>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="注册资金" prop="money">
+                <el-input v-model="insurancePolicyForm.registeredCapital1" placeholder="请输入注册资金">
+                  <template #append>
+                    <span>元</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="电子邮箱" prop="email">
+                <el-input v-model="insurancePolicyForm.email1" placeholder="请输入电子邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+<!--            <el-col :span="6">
+              <el-form-item label="是否二手车" prop="gender">
+                <el-select v-model="insurancePolicyForm.gender" placeholder="请选择">
+                  <el-option label="是" value="1" key="1"></el-option>
+                  <el-option label="否" value="2" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="商业险是否过户" prop="gender">
+                <el-select v-model="insurancePolicyForm.gender" placeholder="请选择">
+                  <el-option label="是" value="1" key="1"></el-option>
+                  <el-option label="否" value="2" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>-->
+          </el-row>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <el-button link type="primary" @click.stop="handleRecognition"><img src="@/assets/images/insurancePolicy/sao.png" class="myIcon" />证件识别</el-button>
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="owner1">
+          <template #title>
+            <span class="title">
+              投保人信息
+              <span class="ordinary" :class="{'active': item.checked}" v-for="(item, index) in btns.owner1" :key="item" @click.stop="handleChange(item, 'owner1')">
+                {{ item.text }}
+              </span>
+            </span>
+          </template>
+          <el-row :gutter="20" class="formItem formBlock">
+            <el-col :span="6">
+              <el-form-item label="车主姓名" prop="name2">
+                <el-input v-model="insurancePolicyForm.name2" placeholder="输入车主姓名"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="车主手机号" prop="mobile2">
+                <el-input v-model="insurancePolicyForm.mobile2" placeholder="请输入车主手机号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="证件类型" prop="personType2">
+                <el-select v-model="insurancePolicyForm.identifyType2" placeholder="请选择">
+                  <el-option label="身份证" value="01" key="1"></el-option>
+                  <el-option label="营业执照" value="02" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col v-if="insurancePolicyForm.identifyType2 === '01'" :span="6">
+              <el-form-item label="证件号码" prop="identifyNumber2">
+                <el-input v-model="insurancePolicyForm.identifyNumber2" placeholder="请输入证件号码" @change="getAgeByIdCard($event, insurancePolicyForm)"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col v-else :span="6">
+              <el-form-item label="统一社会信用代码" prop="identifyNumber2">
+                <el-input v-model="insurancePolicyForm.identifyNumber2" placeholder="请输入证件号码"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item prop="identifyValidDate2" label="有效期起期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidDate2"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="identifyValidEndDate2" label="有效期止期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidEndDate2"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="地址" prop="addr2">
+                <el-input v-model="insurancePolicyForm.addr2" placeholder="请输入地址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="投保人座机" prop="telephone">
+                <el-input v-model="insurancePolicyForm.telephone2" placeholder="请输入投保人座机"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="投保人联系人" prop="person">
+                <el-input v-model="insurancePolicyForm.person2" placeholder="请输入投保人联系人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="联系人证件号码" prop="age">
+                <el-input v-model.number="insurancePolicyForm.age2" placeholder="请输入联系人证件号码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="identifyValidEndDate" label="有效期止期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidEndDate2"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="area" label="地区">
+                <el-cascader
+                  clearable
+                  style="width: 100%"
+                  v-model="insurancePolicyForm.address2"
+                  :options="areaOptins"
+                  :props="areaProps"
+                ></el-cascader>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="注册资金" prop="money">
+                <el-input v-model="insurancePolicyForm.registeredCapital2" placeholder="请输入注册资金">
+                  <template #append>
+                    <span>元</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="电子邮箱" prop="email">
+                <el-input v-model="insurancePolicyForm.email2" placeholder="请输入电子邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+<!--            <el-col :span="6">
+              <el-form-item label="是否二手车" prop="gender">
+                <el-select v-model="insurancePolicyForm.policyHolderInfo.gender" placeholder="请选择">
+                  <el-option label="是" value="1" key="1"></el-option>
+                  <el-option label="否" value="2" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="商业险是否过户" prop="gender">
+                <el-select v-model="insurancePolicyForm.policyHolderInfo.gender" placeholder="请选择">
+                  <el-option label="是" value="1" key="1"></el-option>
+                  <el-option label="否" value="2" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>-->
+          </el-row>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <el-button link type="primary" @click.stop="handleRecognition"><img src="@/assets/images/insurancePolicy/sao.png" class="myIcon" />证件识别</el-button>
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="owner2">
+          <template #title>
+            <span class="title">
+              被保人信息
+              <span class="ordinary" :class="{'active': item.checked}" v-for="(item, index) in btns.owner2" :key="item" @click.stop="handleChange(item, 'owner2')">
+                {{ item.text }}
+              </span>
+            </span>
+          </template>
+          <el-row :gutter="20" class="formItem formBlock">
+            <el-col :span="6">
+              <el-form-item label="车主姓名" prop="name3">
+                <el-input v-model="insurancePolicyForm.name3" placeholder="输入车主姓名"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="车主手机号" prop="mobile3">
+                <el-input v-model="insurancePolicyForm.mobile3" placeholder="请输入车主手机号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="证件类型" prop="personType3">
+                <el-select v-model="insurancePolicyForm.identifyType3" placeholder="请选择">
+                  <el-option label="身份证" value="01" key="01"></el-option>
+                  <el-option label="营业执照" value="02" key="02"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col v-if="insurancePolicyForm.identifyType3 === '01'" :span="6">
+              <el-form-item label="证件号码" prop="identifyNumber3">
+                <el-input v-model="insurancePolicyForm.identifyNumber3" placeholder="请输入证件号码" @change="getAgeByIdCard($event, insurancePolicyForm)"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col v-else :span="6">
+              <el-form-item label="统一社会信用代码" prop="identifyNumber3">
+                <el-input v-model="insurancePolicyForm.identifyNumber3" placeholder="请输入证件号码"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item prop="identifyValidDate3" label="有效期起期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidDate3"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="identifyValidEndDate3" label="有效期止期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidEndDate3"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="地址" prop="addr3">
+                <el-input v-model="insurancePolicyForm.addr3" placeholder="请输入地址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="投保人座机" prop="telephone">
+                <el-input v-model="insurancePolicyForm.telephone3" placeholder="请输入投保人座机"></el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="投保人联系人" prop="person">
+                <el-input v-model="insurancePolicyForm.person3" placeholder="请输入投保人联系人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="联系人证件号码" prop="age">
+                <el-input v-model.number="insurancePolicyForm.age3" placeholder="请输入联系人证件号码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="identifyValidEndDate" label="有效期止期">
+                <el-date-picker
+                  v-model="insurancePolicyForm.identifyValidEndDate3"
+                  type="date"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item prop="area" label="地区">
+                <el-cascader
+                  clearable
+                  style="width: 100%"
+                  v-model="insurancePolicyForm.address3"
+                  :options="areaOptins"
+                  :props="areaProps"
+                ></el-cascader>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item label="注册资金" prop="money">
+                <el-input v-model="insurancePolicyForm.registeredCapital3" placeholder="请输入注册资金">
+                  <template #append>
+                    <span>元</span>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="电子邮箱" prop="email">
+                <el-input v-model="insurancePolicyForm.email3" placeholder="请输入电子邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+<!--            <el-col :span="6">
+              <el-form-item label="是否二手车" prop="gender">
+                <el-select v-model="insurancePolicyForm.gender3" placeholder="请选择">
+                  <el-option label="是" value="1" key="1"></el-option>
+                  <el-option label="否" value="2" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="商业险是否过户" prop="gender">
+                <el-select v-model="insurancePolicyForm.gender3" placeholder="请选择">
+                  <el-option label="是" value="1" key="1"></el-option>
+                  <el-option label="否" value="2" key="2"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>-->
+          </el-row>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <el-button link type="primary" @click.stop="handleRecognition"><img src="@/assets/images/insurancePolicy/sao.png" class="myIcon" />证件识别</el-button>
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="tax">
+          <template #title>
+            <span class="title">
+              车船税
+              <span class="ordinary" :class="{'active': item.checked}" v-for="(item, index) in btns.owner3" :key="item" @click.stop="handleChange(item, 'owner3')">
+                {{ item.text }}
+              </span>
+            </span>
+          </template>
+          <div v-if="btns.owner3show === '免税'" style="width: 100%">
+            <el-row :gutter="20" class="formItem formBlock">
+              <el-col :span="6">
+                <el-form-item label="减免税凭证号" prop="extendChar2">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.extendChar2" placeholder="请输入减免税凭证号"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="减免税原因" prop="relifReason">
+                  <el-select v-model="insurancePolicyForm.vehicleAndVesselTaxVo.relifReason" placeholder="请选择">
+                    <el-option label="原因1" value="1" key="1"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="税务机关代码" prop="taxComCode">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxComCode" placeholder="请输入税务机关代码"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="税务机关名称" prop="taxComName">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxComName" placeholder="请输入税务机关名称"></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+          <div v-if="btns.owner3show === '减税'" style="width: 100%">
+            <el-row :gutter="20" class="formItem formBlock">
+              <el-col :span="6">
+                <el-form-item label="减免税凭证号" prop="extendChar2">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.extendChar2" placeholder="请输入减免税凭证号"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="减免税原因" prop="relifReason">
+                  <el-select v-model="insurancePolicyForm.vehicleAndVesselTaxVo.relifReason" placeholder="请选择">
+                    <el-option label="原因1" value="1" key="1"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="税务机关代码" prop="taxComCode">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxComCode" placeholder="请输入税务机关代码"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="税务机关名称" prop="taxComName">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxComName" placeholder="请输入税务机关名称"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="减税比例" prop="taxRelief">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxRelief" placeholder="请输入减税比例">
+                    <template #append>
+                      <span>%</span>
+                    </template>
+                  </el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+          <div v-if="btns.owner3show === '完税'" style="width: 100%">
+            <el-row :gutter="20" class="formItem formBlock">
+              <el-col :span="6">
+                <el-form-item label="完税凭证号" prop="extendChar2">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.extendChar2" placeholder="请输入完税凭证号"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="税务机关代码" prop="taxComCode">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxComCode" placeholder="请输入税务机关代码"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label=" 税务机关名称" prop="taxComName">
+                  <el-input v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxComName" placeholder="请输入 税务机关名称"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item prop="taxDocumentDate" label="完税凭证填发日期">
+                  <el-date-picker
+                    v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxDocumentDate"
+                    type="date"
+                    placeholder="请选择"
+                    value-format="YYYY-MM-DD"
+                    style="width: 100%"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item prop="taxPaidAreaCode" label="完税凭证地区">
+                  <el-cascader
+                    clearable
+                    style="width: 100%"
+                    v-model="insurancePolicyForm.vehicleAndVesselTaxVo.taxPaidAreaCode"
+                    :options="areaOptins"
+                    :props="areaProps"
+                  ></el-cascader>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="insurance">
+          <template #title>
+            <span class="title">
+              投保信息
+              <span class="ordinary" :class="{'active': item.checked}" v-for="(item, index) in optionObj.insuranceType" :key="item.value" @click.stop="handleChange(item, 'insurance')">
+                {{ item.label }}
+              </span>
+            </span>
+          </template>
+          <el-form-item class="white-m-p24" label="车辆其他信息">
+            <el-radio-group v-model="insurancePolicyForm.insuranceType">
+              <el-radio value="1">商业险是否过户</el-radio>
+              <el-radio value="2">二手车</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <div class="insurance-jq" v-if="insurancePolicyForm.productId === '0330' || insurancePolicyForm.productId === '0330034002' || insurancePolicyForm.productId === '0330034001'">
+            <span>交强险</span>
+            <span class="checkbox" :class="{'cehcked': item.checked}" v-for="item in jqWork" :key="item" @click="JQChange(item)">{{ item.text }}</span>
+            <div class="time">
+              <el-form-item prop="startDate" label="">
+                <el-date-picker
+                  v-model="insurancePolicyForm.ciRiskInfoVo.startDate"
+                  type="datetime"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  style="width: 100%"
+                />
+              </el-form-item>
+              &nbsp;&nbsp;&nbsp;至&nbsp;&nbsp;&nbsp;
+              <el-form-item prop="endDate" label="">
+                <el-date-picker
+                  v-model="insurancePolicyForm.ciRiskInfoVo.endDate"
+                  type="datetime"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </div>
+          </div>
+          <div class="insurance-jq" v-if="insurancePolicyForm.productId === '034001' || insurancePolicyForm.productId === '034002' || insurancePolicyForm.productId === '0330034002' || insurancePolicyForm.productId === '0330034001'">
+            <span>商业险</span>
+            <span class="checkbox" :class="{'cehcked': item.checked}" v-for="item in syWork" :key="item" @click="SYChange(item)">{{ item.text }}</span>
+            <div class="time">
+              <el-form-item prop="startDate" label="">
+                <el-date-picker
+                  v-model="insurancePolicyForm.biRiskInfoVo.startDate"
+                  type="datetime"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  style="width: 100%"
+                />
+              </el-form-item>
+              &nbsp;&nbsp;&nbsp;至&nbsp;&nbsp;&nbsp;
+              <el-form-item prop="endDate" label="">
+                <el-date-picker
+                  v-model="insurancePolicyForm.biRiskInfoVo.endDate"
+                  type="datetime"
+                  placeholder="请选择"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </div>
+          </div>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="company">
+          <template #title>
+            <span class="title">
+              报价公司
+            </span>
+          </template>
+          <el-table
+            :data="quoteData"
+            style="width: calc(100% - 48px); margin: 0 24px"
+            row-key="id"
+            :preserve-expanded-content="true"
+            @selection-change="handleSelect"
+            @select="handelSelectRow"
+          >
+            <el-table-column type="expand">
+              <template #default="scope">
+                <div class="expandFlex">
+                  <p class="expandTitle">车险方案</p>
+                  <div style="width: calc(100% - 50px); overflow-x: hidden">
+                    <div class="product">
+                      <span class="productItem" :class="{'productActive': productIndex === index}" v-for="(item, index) in scope.row.projectList" @click.stop="handleProduct(item, index)">{{ item.schemeName }}</span>
+                    </div>
+                    <el-row :gutter="20">
+                      <el-col :span="12">
+                        <div class="quoteTitle">方案明细</div>
+                        <el-table
+                          :data="scope.row.projectList[productIndex].kinds"
+                        >
+                          <el-table-column width="50" align="center">
+                            <template #header>
+                              <el-icon style="cursor: pointer;" @click="handlePopover(scope)"><CirclePlus /></el-icon>
+                            </template>
+                            <template #default="props">
+                              <el-icon><Delete /></el-icon>
+                            </template>
+                          </el-table-column>
+                          <el-table-column label="险种" prop="kindName" align="center"></el-table-column>
+                          <el-table-column label="保额" align="center">
+                            <template #default="props">
+                              <el-select v-model="props.row.amount">
+                                <el-option v-for="item in props.row.options" :label="item.label" :value="item.value"></el-option>
+                              </el-select>
+                            </template>
+                          </el-table-column>
+                          <el-table-column label="保费" prop="unitAmount" align="center"></el-table-column>
+                        </el-table>
+                        <div class="quoteTitle">增值服务</div>
+                        <el-row :gutter="20">
+                          <el-col :span="6" class="quoteFlex">
+                            救援
+                            <el-select size="small" style="width: 80px; margin: 0 10px">
+                              <el-option label="1" value="1"></el-option>
+                            </el-select>
+                            次
+                          </el-col>
+                          <el-col :span="6" class="quoteFlex">
+                            检测
+                            <el-select size="small" style="width: 80px; margin: 0 10px">
+                              <el-option label="1" value="1"></el-option>
+                            </el-select>
+                            次
+                          </el-col>
+                          <el-col :span="6" class="quoteFlex">
+                            代驾
+                            <el-select size="small" style="width: 80px; margin: 0 10px">
+                              <el-option label="1" value="1"></el-option>
+                            </el-select>
+                            次
+                          </el-col>
+                          <el-col :span="6" class="quoteFlex">
+                            送检
+                            <el-select size="small" style="width: 80px; margin: 0 10px">
+                              <el-option label="1" value="1"></el-option>
+                            </el-select>
+                            次
+                          </el-col>
+                        </el-row>
+                        <div class="quoteTitle">驾意险</div>
+                        <el-table
+                          :data="scope.row.projectList[productIndex].drivings"
+                        >
+                          <el-table-column width="50" align="center">
+                            <template #header>
+                              <el-icon @click="handleDriving(scope)"><CirclePlus /></el-icon>
+                            </template>
+                            <template #default="props">
+                              <el-icon><Delete /></el-icon>
+                            </template>
+                          </el-table-column>
+                          <el-table-column label="产品名称" prop="productName" align="center"></el-table-column>
+                          <el-table-column label="数量" align="center">
+                            <template #default="props">
+                              <el-input v-model="props.row.quantity" style="width: 140px">
+                                <template #append>
+                                  <span>份</span>
+                                </template>
+                              </el-input>
+                            </template>
+                          </el-table-column>
+                          <el-table-column label="保费" prop="premium" align="center"></el-table-column>
+                        </el-table>
+                      </el-col>
+                      <el-col :span="12" style="border-left: 1px dashed #eeeeee">
+                        <p style="text-align: center">保费因素</p>
+                        <el-table
+                          class="factorTable"
+                          :data="scope.row.factorData"
+                        >
+                          <el-table-column label="评分" prop="" width="50">--</el-table-column>
+                          <el-table-column label="交强险折扣系数" prop="">--</el-table-column>
+                          <el-table-column label="鼎然车辆风险评分" prop="">--</el-table-column>
+                          <el-table-column label="交强评分" prop="" width="70">--</el-table-column>
+                          <el-table-column label="商业评分" prop="" width="70">--</el-table-column>
+                          <el-table-column label="出险信息" prop="" width="70">--</el-table-column>
+                          <el-table-column label="总赔付率" prop="" width="70">--</el-table-column>
+                          <el-table-column label="交强赔付率" prop="" width="80">--</el-table-column>
+                          <el-table-column label="商业赔付率" prop="" width="80">--</el-table-column>
+                        </el-table>
+                        <el-table
+                          class="factorTable"
+                          :data="scope.row.factorData"
+                        >
+                          <el-table-column label="类型" prop="" width="50">--</el-table-column>
+                          <el-table-column prop="">
+                            <template #header>
+                              <div style="display: flex; align-items: center; justify-content: center">
+                                <span>商业险折扣系数</span>
+                                <el-popover placement="bottom" width="200">
+                                  <div style="display: flex; align-items: center; justify-content: space-between;">
+                                    <span>NCD折扣系数</span>
+                                    <span>0.8</span>
+                                  </div>
+                                  <div style="display: flex; align-items: center; justify-content: space-between;">
+                                    <span>NCD折扣系数11</span>
+                                    <span>0.811</span>
+                                  </div>
+                                  <template #reference>
+                                    <div class="more">
+                                      <el-icon><MoreFilled /></el-icon>
+                                    </div>
+                                  </template>
+                                </el-popover>
+                              </div>
+                            </template>
+                            <template #default="props">
+                              <div style="display: flex; align-items: center; justify-content: center">
+                                <span>--</span>
+                                <el-popover placement="bottom" width="240" trigger="click">
+                                  <div class="number">
+                                    <p>商业险折扣系数和自主定价系数只能修改一个,修改后系统会重新报价,计算修改后的保费</p>
+                                    <el-radio-group>
+                                      <el-radio value="1" size="small" style="margin-bottom: 10px">
+                                        <template #default>
+                                          <div style="display: flex; justify-content: space-between; align-items: center; width: 180px">
+                                            <span>商业险折扣系数</span>
+                                            <el-input style="width: 80px" size="small"></el-input>
+                                          </div>
+                                        </template>
+                                      </el-radio>
+                                      <el-radio value="2" size="small">
+                                        <template #default>
+                                          <div style="display: flex; justify-content: space-between; align-items: center; width: 180px">
+                                            <span>自主定价系数</span>
+                                            <el-input style="width: 80px" size="small"></el-input>
+                                          </div>
+                                        </template>
+                                      </el-radio>
+                                    </el-radio-group>
+                                  </div>
+                                  <template #reference>
+                                    <el-icon style="font-size: 14px; color:#0083FF "><Edit /></el-icon>
+                                  </template>
+                                </el-popover>
+                              </div>
+                            </template>
+                          </el-table-column>
+                          <el-table-column label="交强出险次数" prop="" width="100">--</el-table-column>
+                          <el-table-column label="商业出险次数" prop="" width="100">--</el-table-column>
+                          <el-table-column label="交强续保" prop="" width="70">--</el-table-column>
+                          <el-table-column label="商业续保" prop="" width="70">--</el-table-column>
+                          <el-table-column label="总折扣率" prop="" width="70">--</el-table-column>
+                          <el-table-column label="商业折扣" prop="" width="70">--</el-table-column>
+                          <el-table-column label="交强折扣" prop="" width="70">--</el-table-column>
+                        </el-table>
+                      </el-col>
+                    </el-row>
+                  </div>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column type="selection" width="55" />
+            <el-table-column label="保险公司" prop="" align="center" width="150">
+              <template #default="scope">
+                <div class="company">
+                  <img :src="scope.row.logo"/>
+                  <span>{{ scope.row.name }}</span>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="报价协议" prop="" align="center">
+              <template #default="scope">
+                <el-select v-if="currentRow.some(a => a.id === scope.row.id)">
+                  <el-option v-for="item in scope.row.aggrements" :value="item.value" :label="item.label"></el-option>
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column prop="" align="center">
+              <template #header>
+                <div style="display: flex; align-items: center; justify-content: center">
+                  <span style="margin-right: 10px">报价结果</span>
+                  <el-checkbox>仅查看报价成功</el-checkbox>
+                </div>
+              </template>
+              <template #default="scope">
+                <div class="result" v-if="currentRow.some(a => a.id === scope.row.id)">
+                  <span class="resultItem">
+                    <span>保费:¥5687.06</span>
+                    <span class="resultTips">
+                      <el-icon style="color: #FF4545; font-size: 14px"><Warning /></el-icon>&nbsp;&nbsp;未匹配到销管费用,不建议投保
+                    </span>
+                  </span>
+                  <el-row class="resultItem">
+                    <el-col :span="6" style="text-align: left">交强:¥800</el-col>
+                    <el-col :span="6" style="text-align: left">车船税:¥200</el-col>
+                  </el-row>
+                  <el-row class="resultItem">
+                    <el-col :span="6" style="text-align: left">商业险:¥800</el-col>
+                    <el-col :span="6" style="text-align: left">驾意险:¥200</el-col>
+                  </el-row>
+                  <span class="resultItem">
+                    <span>交强险保险期:2025-03-13 00:00:00 至 2025-03-14 00:00:00</span>
+                  </span>
+                  <span class="resultItem">
+                    <span>商业险保险期:2025-03-13 00:00:00 至 2025-03-14 00:00:00</span>
+                  </span>
+                  <div>
+                    <div class="quoteFail">
+                      <el-icon style="color: #FF4545; font-size: 14px"><Warning /></el-icon>&nbsp;&nbsp;报价失败
+                    </div>
+                    <div class="quoteReason">报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因报价失败原因</div>
+                  </div>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center">
+              <template #default="scope">
+                <div v-if="currentRow.some(a => a.id === scope.row.id)">
+                  <el-button link type="primary" @click="handleCount(scope)">优惠测算</el-button>
+                  <el-button link type="primary">详情</el-button>
+                  <el-button link type="primary">计算保费</el-button>
+                  <el-button link type="primary" @click="handleShare(scope)">分享</el-button>
+                  <el-button link type="primary" @click="handleUnderwriting(scope)">核保</el-button>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+        <el-collapse-item name="history">
+          <template #title>
+            <span class="title">
+              报价历史
+            </span>
+          </template>
+          <el-table
+            :data="tableData"
+            style="width: calc(100% - 48px); margin: 0 24px"
+          >
+            <el-table-column label="保险公司" prop=""></el-table-column>
+            <el-table-column label="报价时间" prop=""></el-table-column>
+            <el-table-column label="险种" prop=""></el-table-column>
+            <el-table-column label="状态" prop="state">
+              <template #default="scope">
+                <span v-if="scope.row.state===1" class="success">报价成功</span>
+                <span v-if="scope.row.state===2" style="display: flex; align-items: center">
+                  <span class="fail">报价失败</span>
+                  <el-tooltip
+                    class="box-item"
+                    effect="dark"
+                    content="报价失败的原因"
+                    placement="bottom"
+                  >
+                    <el-icon style="color: #FF4545; font-size: 18px"><Warning /></el-icon>
+                  </el-tooltip>
+                </span>
+              </template>
+            </el-table-column>
+            <el-table-column label="保费计算" prop=""></el-table-column>
+            <el-table-column label="交强险" prop=""></el-table-column>
+            <el-table-column label="商业险" prop=""></el-table-column>
+            <el-table-column label="驾意险" prop=""></el-table-column>
+            <el-table-column label="操作">
+              <template #default="scope">
+                <el-button link type="primary">详情</el-button>
+                <el-button link type="primary">分享</el-button>
+                <el-button link type="primary">核保</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <template #icon="{ isActive }">
+            <span class="icon">
+              <span class="icon-ele">
+                {{ isActive ? '收起' : '展开' }}
+              </span>
+            </span>
+          </template>
+        </el-collapse-item>
+      </el-collapse>
+    </el-form>
+    <div class="footer">
+      <span>已选保司:{{ currentRow.length }}家</span>
+      <el-button type="primary" @click="handleSubmit(InsurancePolicyRefs)">确定</el-button>
+    </div>
+    <el-dialog
+      title="选择业务员"
+      v-model="salesmanShow"
+      width="700"
+    >
+      <salesmanSelect ref="SalesmanSelectRef" @close="handleSalesmanSelect"></salesmanSelect>
+    </el-dialog>
+    <el-dialog
+      v-model="shareShow"
+      width="300"
+      title="分享"
+    >
+      <div class="imageCode">
+        <img  />
+      </div>
+      <template #footer>
+        <el-button plain type="primary" @click="handleSaveImage">保存图片</el-button>
+        <el-button plain type="primary" @click="handleCopyLink">复制链接</el-button>
+      </template>
+    </el-dialog>
+    <el-dialog
+      title="优惠测算"
+      v-model="calculatingShow"
+      width="600"
+    >
+      <calculating ref="calculatingRefs"></calculating>
+    </el-dialog>
+    <el-dialog
+      title="提交核保"
+      width="930"
+      v-model="underwritingShow"
+    >
+      <underwriting ref="UnderwritingRefs" @close="handleUnderwritingClose"></underwriting>
+    </el-dialog>
+    <el-dialog
+      title="证件识别"
+      width="800"
+      v-model="imageShow"
+    >
+      <recognition ref="RecognitionRefs" @close="handleImageClose"></recognition>
+    </el-dialog>
+    <el-dialog
+      v-model="insuranceShow"
+      title="选择险种"
+      width="500"
+    >
+      <insurance ref="InsuranceTypeRef" @close="handleClose" ></insurance>
+    </el-dialog>
+    <el-dialog
+      v-model="drivingShow"
+      title="选择驾意险"
+      width="700"
+    >
+      <driving ref="DrivingTypeRef" @close="handleDrivingClose"></driving>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+import type { FormInstance, FormRules } from 'element-plus'
+import api from "@/api";
+import { ElMessage } from "element-plus";
+import underwriting from './modules/underwriting.vue'
+import recognition from './modules/recognition.vue'
+import calculating from './modules/calculating.vue'
+import salesmanSelect from '../additionalOrder/additional/modules/salesmanSelect.vue'
+import insurance from "../additionalOrder/additional/modules/insuranceSelect.vue";
+import driving from '../../layouts/components/DrivingType/index.vue'
+
+const SalesmanSelectRef = ref()
+const InsuranceTypeRef = ref()
+const DrivingTypeRef = ref()
+
+// 选择业务员
+let salesmanShow = ref(false)
+const handleFocus = () => {
+  salesmanShow.value = true
+  nextTick(() => {
+    SalesmanSelectRef.value.initEditData()
+  })
+}
+const handleSalesmanSelect = (data) => {
+  salesmanShow.value = false
+  if(data) {
+    insurancePolicyForm.value.salesman = data.name
+    insurancePolicyForm.value.mobile = data.mobile
+    insurancePolicyForm.value.deptId = data.deptId
+    initDept()
+  }
+}
+// 归属
+let institutionList = ref([])
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+})
+const initDept = () => {
+  api.insuranceApi.getDeptTree({ sysCode: localStorage.getItem('sysCode')}).then((res: any) => {
+    if(res.code == 200) {
+      institutionList.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+//折叠面板
+let activeName = ref(['car','owner','owner1','owner2','tax','insurance','company','history'])
+
+const InsurancePolicyRefs = ref<FormInstance>()
+
+let insurancePolicyForm = ref({
+  systemType: '2',
+  propertyCode: '1',
+  isRegistered: 0,
+  // 车辆
+  licenseNo: '',
+  vinNo: '',
+  brandName: '',
+  engineNo: '',
+  carNatureCode: '',
+  vehicleUseCode: '',
+  carTypeCode: '',
+  plateType: '',
+  energyTypeCode: '',
+  registerDate: '',
+  issueDate: '',
+  completeKerbMass: '',
+  limitLoad: '',
+  seatCount: '',
+  carYear: '',
+  purchasePrice: '',
+  displacement: '',
+  powerScale: '',
+  carOwner: '',
+
+  // 险种类型
+  productId: '',
+
+  // 车主信息
+  name1: '',
+  mobile1: '',
+  identifyType1: '01',
+  identifyNumber1: '',
+  identifyValidDate1: '',
+  identifyValidEndDate1: '',
+  addr1: '',
+  telephone1: '',
+  person1: '',
+  age1: '',
+  address1: '',
+  registeredCapital1: '',
+  email1: '',
+  personType1: '1',
+
+  // 投保人信息
+  name2: '',
+  mobile2: '',
+  identifyType2: '01',
+  identifyNumber2: '',
+  identifyValidDate2: '',
+  identifyValidEndDate2: '',
+  addr2: '',
+  telephone2: '',
+  person2: '',
+  age2: '',
+  address2: '',
+  registeredCapital2: '',
+  email2: '',
+  personType2: '1',
+
+  // 被保人信息
+  name3: '',
+  mobile3: '',
+  identifyType3: '01',
+  identifyNumber3: '',
+  identifyValidDate3: '',
+  identifyValidEndDate3: '',
+  addr3: '',
+  telephone3: '',
+  person3: '',
+  age3: '',
+  address3: '',
+  registeredCapital3: '',
+  email3: '',
+  personType3: '1',
+
+  order: {},
+  vehicleAndVesselTaxVo: {},
+  ciRiskInfoVo: {
+    riskCode: '0507',
+    startDate: '',
+    endDate: '',
+    instantFlag: false
+  },
+  biRiskInfoVo: {
+    riskCode: '0510',
+    startDate: '',
+    endDate: '',
+    instantFlag: false
+  }
+})
+let insurancePolicyRules = ref<FormRules>({
+  isRegistered: [
+    { required: true, trigger: 'change', message: '请选择车辆是否上牌' },
+  ],
+  licenseNo: [
+    { required: true, trigger: 'blur', message: '请输入车牌' }
+  ],
+  vinNo: [
+    { required: true, trigger: 'blur', message: '请输入车牌识别代码' }
+  ],
+  brandName: [
+    { required: true, trigger: 'blur', message: '请输入品牌型号' }
+  ],
+  engineNo: [
+    { required: true, trigger: 'blur', message: '请输入发动机号' }
+  ],
+  carNatureCode: [
+    { required: true, trigger: 'change', message: '请选择车辆是否上牌' },
+  ],
+  vehicleUseCode: [
+    { required: true, trigger: 'change', message: '请选择车辆是否上牌' },
+  ],
+  carTypeCode: [
+    { required: true, trigger: 'change', message: '请选择车辆是否上牌' },
+  ],
+  plateType: [
+    { required: true, trigger: 'change', message: '请选择车辆类型' },
+  ],
+  energyTypeCode: [
+    { required: true, trigger: 'change', message: '请选择车辆是否上牌' },
+  ],
+  registerDate: [
+    { required: true, trigger: 'change', message: '请选择注册日期' },
+  ],
+  issueDate: [
+    { required: true, trigger: 'change', message: '请选择发证日期' },
+  ],
+  completeKerbMass: [
+    { required: true, trigger: 'blur', message: '请输入整备质量' }
+  ],
+  limitLoad: [
+    { required: true, trigger: 'blur', message: '请输入核定载质量' }
+  ],
+  seatCount: [
+    { required: true, trigger: 'blur', message: '请输入座位数' }
+  ],
+  carYear: [
+    { required: true, trigger: 'blur', message: '请输入年款' }
+  ],
+  purchasePrice: [
+    { required: true, trigger: 'blur', message: '请输入新车购置价' }
+  ],
+  displacement: [
+    { required: true, trigger: 'blur', message: '请输入排量' }
+  ],
+  powerScale: [
+    { required: true, trigger: 'blur', message: '请输入功率' }
+  ],
+  name1: [
+    { required: true, trigger: 'blur', message: '请输入姓名' }
+  ],
+  mobile1: [
+    { required: true, trigger: 'blur', message: '请输入手机号' }
+  ],
+  personType1: [
+    { required: true, trigger: 'change', message: '请选择证件类型' }
+  ],
+  identifyNumber1: [
+    { required: true, trigger: 'blur', message: '请输入证件号' }
+  ],
+  identifyValidDate1: [
+    { required: true, trigger: 'change', message: '请选择有效期起期' }
+  ],
+  identifyValidEndDate1: [
+    { required: true, trigger: 'change', message: '请选择有效期止期' }
+  ],
+  addr1: [
+    { required: true, trigger: 'blur', message: '请输入地址' }
+  ],
+  name2: [
+    { required: true, trigger: 'blur', message: '请输入姓名' }
+  ],
+  mobile2: [
+    { required: true, trigger: 'blur', message: '请输入手机号' }
+  ],
+  personType2: [
+    { required: true, trigger: 'change', message: '请选择证件类型' }
+  ],
+  identifyNumber2: [
+    { required: true, trigger: 'blur', message: '请输入证件号' }
+  ],
+  identifyValidDate2: [
+    { required: true, trigger: 'change', message: '请选择有效期起期' }
+  ],
+  identifyValidEndDate2: [
+    { required: true, trigger: 'change', message: '请选择有效期止期' }
+  ],
+  addr2: [
+    { required: true, trigger: 'blur', message: '请输入地址' }
+  ],
+  name3: [
+    { required: true, trigger: 'blur', message: '请输入姓名' }
+  ],
+  mobile3: [
+    { required: true, trigger: 'blur', message: '请输入手机号' }
+  ],
+  personType3: [
+    { required: true, trigger: 'change', message: '请选择证件类型' }
+  ],
+  identifyNumber3: [
+    { required: true, trigger: 'blur', message: '请输入证件号' }
+  ],
+  identifyValidDate3: [
+    { required: true, trigger: 'change', message: '请选择有效期起期' }
+  ],
+  identifyValidEndDate3: [
+    { required: true, trigger: 'change', message: '请选择有效期止期' }
+  ],
+  addr3: [
+    { required: true, trigger: 'blur', message: '请输入地址' }
+  ]
+})
+
+// 使用性质,车辆用途,车辆类型,能源种类,车辆种类
+let optionObj = ref({
+  vehicle_use_code: [], // 车辆用途
+  car_nature_code: [], // 使用性质
+  energy_type_code: [], // 能源种类
+  car_kind_code: [], // 车辆种类
+  vehicleType: [],
+  taxpayerIdentifier: [], // 证件类型
+  insuranceType: [], // 险种类型
+  car_type_code: [], // 车辆类型
+})
+
+// 地区
+const areaOptins = ref([]);
+const areaProps = ref({
+  value: "areaCode",
+  label: "areaCname",
+  children: "child",
+});
+const getAreaList = () => {
+  api.areaApi.areaList({}).then((res) => {
+    areaOptins.value = res.data;
+  });
+};
+
+// 车牌识别
+const handleCarNumber = () => {
+  api.additionalApi.vinSearch(insurancePolicyForm.value.licenseNo).then((res: any) => {
+    if(res.code == 200) {
+
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+// 车架号识别
+const handleCarCode = () => {
+  api.additionalApi.licenseSearch(insurancePolicyForm.value.vinNo).then((res: any) => {
+    if(res.code == 200) {
+
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+// 获取报价号
+const getQuoteNumber = () => {
+  if(insurancePolicyForm.value.licenseNo&&insurancePolicyForm.value.vinNo&&insurancePolicyForm.value.engineNo) {
+    api.insurancePolicyApi.getQuoteNo({
+      licenseNo: insurancePolicyForm.value.licenseNo,
+      vinNo: insurancePolicyForm.value.vinNo,
+      engineNo: insurancePolicyForm.value.engineNo
+    }).then((res: any) => {
+      if(res.code == 200) {
+        // insuranceCompanyCode
+        insurancePolicyForm.value.order.quoteNo = res.msg
+      } else {
+        ElMessage({
+          message: res.msg,
+          type: "warning"
+        })
+      }
+    })
+  }
+}
+
+// 是否同车主/同投保人
+let btns = ref({
+  owner1Show: false,
+  owner2show: false,
+  owner3show: '正常交税',
+  owner1: [{
+    text: '同车主',
+    checked: false
+  },{
+    text: '其他人',
+    checked: false
+  },],
+  owner2: [{
+    text: '同被保人',
+    checked: false
+  },{
+    text: '同车主',
+    checked: false
+  },{
+    text: '其他人',
+    checked: false
+  }],
+  owner3: [{
+    text: '正常交税',
+    checked: true
+  },{
+    text: '免税',
+    checked: false
+  },{
+    text: '减税',
+    checked: false
+  },{
+    text: '完税',
+    checked: false
+  }],
+})
+const handleChange = (item, type) => {
+  switch (type) {
+    case 'owner1':
+      item.checked = !item.checked
+      let list1 = btns.value.owner1.filter(a => a.text != item.text)
+      list1.forEach(a => a.checked = false)
+      btns.value.owner1Show = btns.value.owner1.some(a => a.checked)
+      break;
+    case 'owner2':
+      item.checked = !item.checked
+      let list2 = btns.value.owner2.filter(a => a.text != item.text)
+      list2.forEach(a => a.checked = false)
+      btns.value.owner2show = btns.value.owner2.some(a => a.checked)
+      break;
+    case 'owner3':
+      item.checked = true
+      let list3 = btns.value.owner3.filter(a => a.text != item.text)
+      list3.forEach(a => a.checked = false)
+      btns.value.owner3show = btns.value.owner3.find(a => a.checked)?.text
+      insurancePolicyForm.value.vehicleAndVesselTaxVo.taxRelifFlag = btns.value.owner3show === '正常交税'?'1':btns.value.owner3show === '免税'?'2':btns.value.owner3show === '减税'?'3':btns.value.owner3show === '完税'?'4':''
+      break;
+    case 'insurance':
+      ruleFilterCompany(item)
+      let list4 = optionObj.value.insuranceType.filter(a => a.label != item.label)
+      list4.forEach(a => a.checked = false)
+      item.checked = true
+      insurancePolicyForm.value.productId = item.value
+      if(insurancePolicyForm.value.productId === '0330' || insurancePolicyForm.value.productId === '0330034001' || insurancePolicyForm.value.productId === '0330034002') {
+        let date = new Date()
+        let year = date.getFullYear()
+        let month = date.getMonth() + 1<10?`0${date.getMonth() + 1}`:date.getMonth() + 1
+        let day = date.getDate()
+        insurancePolicyForm.value.ciRiskInfoVo.startDate = `${year}-${month}-${day + 1} 00:00:00`
+        insurancePolicyForm.value.ciRiskInfoVo.endDate = `${year + 1}-${month}-${day} 23:59:59`
+      }
+      if(insurancePolicyForm.value.productId === '034001' || insurancePolicyForm.value.productId === '034002' || insurancePolicyForm.value.productId === '0330034001' || insurancePolicyForm.value.productId === '0330034002') {
+        let date = new Date()
+        let year = date.getFullYear()
+        let month = date.getMonth() + 1<10?`0${date.getMonth() + 1}`:date.getMonth() + 1
+        let day = date.getDate()
+        insurancePolicyForm.value.biRiskInfoVo.startDate = `${year}-${month}-${day + 1} 00:00:00`
+        insurancePolicyForm.value.biRiskInfoVo.endDate = `${year + 1}-${month}-${day} 23:59:59`
+      }
+      break;
+  }
+}
+
+const initOption = () => {
+  let list = ['vehicle_use_code', 'car_nature_code', 'energy_type_code', 'car_kind_code', 'car_type_code']
+  list.forEach(item => {
+    api.additionalApi.dictDetails(item).then((res: any) => {
+      if(res.code == 200) {
+        if(res.data) {
+          optionObj.value[item] = res.data
+        }
+      }
+    })
+  })
+  api.commonApi.personInfo('insurance_type').then((res: any) => {
+    if(res.code == 200) {
+      if(res.data&&res.data.length>0) {
+        res.data.forEach(a => {
+          a.checked = false
+        })
+        optionObj.value.insuranceType = res.data
+      }
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+// 交强即时生效
+let jqWork = ref([
+  { text: '即时生效', checked: false }
+])
+// 根据身份证号换算年龄
+const getAgeByIdCard = (idCard: any, type?: any) => {
+  //获取用户身份证号码
+  const userCard = idCard
+  //如果用户身份证号码为undefined则返回空
+  if (!userCard) {
+    return ''
+  }
+  // 获取出生日期
+  const yearBirth = userCard.substring(6, 10)
+  const monthBirth = userCard.substring(10, 12)
+  const dayBirth = userCard.substring(12, 14)
+  // 获取当前年月日并计算年龄
+  const myDate = new Date()
+  const monthNow = myDate.getMonth() + 1
+  const dayNow = myDate.getDate()
+  let age = myDate.getFullYear() - yearBirth
+  if (monthNow > monthBirth || (monthNow == monthBirth && dayNow > dayBirth)) {
+    age++
+  }
+  type.age = age
+  return age
+}
+const oneYearPast1 = (time) => {
+  //明年减一秒
+  let date = new Date(time);
+  date.setSeconds(date.getSeconds() - 1);
+  date.setFullYear(date.getFullYear() + 1); //一年后
+  date.setTime(date.getTime()); //一年后的前一天
+  let strYear: any = date.getFullYear();
+  let strDay: any = date.getDate();
+  let strMonth: any = date.getMonth() + 1;
+  let hh: any = date.getHours();
+  let minutes: any = date.getMinutes(); // 分
+  let Seconds: any = date.getSeconds();
+  if (hh < 10) {
+    hh = "0" + hh;
+  }
+  if (minutes < 10) {
+    minutes = "0" + minutes;
+  }
+  if (Seconds < 10) {
+    Seconds = "0" + Seconds;
+  }
+  if (strMonth < 10) {
+    strMonth = "0" + strMonth;
+  }
+  if (strDay < 10) {
+    strDay = "0" + strDay;
+  }
+  let datastr =
+    strYear +
+    "-" +
+    strMonth +
+    "-" +
+    strDay +
+    " " +
+    hh +
+    ":" +
+    minutes +
+    ":" +
+    Seconds;
+  return datastr;
+}
+//当前日期的次日
+const transformTime1 = () => {
+  let date = new Date();
+  date.setFullYear(date.getFullYear());
+  date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
+  let strYear: any = date.getFullYear();
+  let strDay: any = date.getDate();
+  let strMonth: any = date.getMonth() + 1;
+  let hh: any = date.getHours();
+  if (hh < 10) {
+    hh = "0" + hh;
+  }
+  if (strMonth < 10) {
+    strMonth = "0" + strMonth;
+  }
+  if (strDay < 10) {
+    strDay = "0" + strDay;
+  }
+  let datastr = strYear + "-" + strMonth + "-" + strDay + " " + "00:00:00";
+  return datastr;
+}
+const JQChange = (item) => {
+  item.checked = !item.checked
+  if(jqWork.value.some( a => a.checked )) {
+    let date: any = new Date();
+    date.setHours(date.getHours() + 2);
+    date.setMinutes(0);
+    date.setSeconds(0);
+    insurancePolicyForm.value.ciRiskInfoVo.startDate = date
+    insurancePolicyForm.value.ciRiskInfoVo.endDate = oneYearPast1(date)
+    insurancePolicyForm.value.ciRiskInfoVo.instantFlag = true
+  } else {
+    insurancePolicyForm.value.ciRiskInfoVo.startDate = transformTime1()
+    insurancePolicyForm.value.ciRiskInfoVo.endDate = oneYearPast1(insurancePolicyForm.value.ciRiskInfoVo.startDate)
+    insurancePolicyForm.value.ciRiskInfoVo.instantFlag = false
+  }
+}
+// 商业即时生效
+let syWork = ref([
+  { text: '即时生效', checked: false }
+])
+const SYChange = (item) => {
+  item.checked = !item.checked
+  if(jqWork.value.some( a => a.checked )) {
+    let date: any = new Date();
+    date.setHours(date.getHours() + 2);
+    date.setMinutes(0);
+    date.setSeconds(0);
+    insurancePolicyForm.value.biRiskInfoVo.startDate = date
+    insurancePolicyForm.value.biRiskInfoVo.endDate = oneYearPast1(date)
+    insurancePolicyForm.value.biRiskInfoVo.instantFlag = true
+  } else {
+    insurancePolicyForm.value.biRiskInfoVo.startDate = transformTime1()
+    insurancePolicyForm.value.biRiskInfoVo.endDate = oneYearPast1(insurancePolicyForm.value.biRiskInfoVo.startDate)
+    insurancePolicyForm.value.biRiskInfoVo.instantFlag = false
+  }
+}
+
+// 报价公司
+let currentRow = ref([])
+let quoteData = ref([])
+const handleSelect = (a, b) => {
+  // console.log(123, a, b)
+  // currentRow.value = a
+  // insurancePolicyForm.value.order.insuranceCompanyCode = a[0].id
+}
+const handelSelectRow = (a, b) => {
+  currentRow.value = a
+  if(a.some(c => c.id === b.id)) {
+    insurancePolicyForm.value.order.insuranceCompanyCode = b.id
+    if(insurancePolicyForm.value.productId) {
+      api.insurancePolicyApi.getSchemeResult({
+        companyId: b.id,
+        productId: insurancePolicyForm.value.productId
+      }).then((res: any) => {
+        if(res.data?.schemes) {
+          res.data?.schemes.forEach(item => {
+            item.checked = false
+          })
+        }
+        quoteData.value.forEach(item => {
+          if(item.id === b.id) {
+            item.projectList = res.data.schemes
+          }
+        })
+      })
+    }
+  } else {
+    insurancePolicyForm.value.order.insuranceCompanyCode = ''
+  }
+}
+// 选择险种
+let insuranceShow = ref(false)
+const handlePopover = (scope) => {
+  insuranceShow.value = true
+  nextTick(() => {
+    InsuranceTypeRef.value.initEditData()
+  })
+}
+const handleClose = (data) => {
+  insuranceShow.value = false
+  if(data&&data.list.length>0) {
+    data.list.forEach(item => {
+      let obj = item.options.find(a => a.checked)
+      item.amount = obj.value
+      item.unitAmount = obj.value
+    })
+  }
+  quoteData.value.forEach(a => {
+    if(insurancePolicyForm.value.order.insuranceCompanyCode === a.id) {
+      a.projectList[productIndex.value].kinds = data.list
+    }
+  })
+}
+
+// 选择驾意险
+let drivingShow = ref(false)
+let drivingRow = ref(0)
+const handleDriving = (scope) => {
+  drivingRow.value = scope.$index
+  drivingShow.value = true
+  nextTick(() => {
+    DrivingTypeRef.value.initEditData(scope.row.projectList[productIndex.value].drivingList, 0, insurancePolicyForm.value.order.insuranceCompanyCode)
+  })
+}
+const handleDrivingClose = (data) => {
+  if(data&&data.list.length>0) {
+    data.list.forEach(a => {
+      a.quantity = 1
+    })
+    quoteData.value[drivingRow.value].projectList[productIndex.value].drivings = [...data.list]
+  }
+  drivingShow.value = false
+}
+
+let productIndex = ref(0)
+const handleProduct = (e, index) => {
+  productIndex.value = index
+}
+
+// 报价历史
+let tableData = ref([
+  {
+    state: 1
+  },{
+    state: 2
+  }
+])
+
+// 分享
+let shareShow = ref(false)
+const handleShare = (scope) => {
+  shareShow.value = true
+}
+const handleSaveImage = () => {
+  shareShow.value = false
+}
+const handleCopyLink = () => {
+  shareShow.value = false
+}
+
+// 优惠测算
+let calculatingShow = ref(false)
+const handleCount = (scope) => {
+  calculatingShow.value = true
+}
+
+// 提交核保
+let underwritingShow = ref(false)
+const handleUnderwriting = (scope) => {
+  underwritingShow.value = true
+}
+const handleUnderwritingClose = () => {
+  underwritingShow.value = false
+}
+
+// 证件识别
+let imageShow = ref(false)
+const handleImageClose = (data) => {
+  imageShow.value = false
+  if(data) {
+    const { carForm, owerForm, ower1Form, ower2Form } = data
+    if(carForm) {
+      insurancePolicyForm.value.isRegistered = '1'
+      insurancePolicyForm.value.licenseNo = carForm.licenseNo
+      insurancePolicyForm.value.vinNo = carForm.vinNo
+      insurancePolicyForm.value.brandName = carForm.brandName
+      insurancePolicyForm.value.engineNo = carForm.engineNo
+      insurancePolicyForm.value.carNatureCode = carForm.carNatureCode
+      insurancePolicyForm.value.vehicleUseCode = carForm.vehicleUseCode
+      insurancePolicyForm.value.carTypeCode = carForm.carTypeCode
+      insurancePolicyForm.value.plateType = carForm.plateType
+      insurancePolicyForm.value.energyTypeCode = carForm.energyTypeCode
+      insurancePolicyForm.value.registerDate = carForm.registerDate
+      insurancePolicyForm.value.issueDate = carForm.issueDate
+      insurancePolicyForm.value.completeKerbMass = carForm.completeKerbMass
+      insurancePolicyForm.value.limitLoad = carForm.limitLoad
+      insurancePolicyForm.value.seatCount = carForm.seatCount
+      insurancePolicyForm.value.carYear = carForm.carYear
+      insurancePolicyForm.value.purchasePrice = carForm.purchasePrice
+      insurancePolicyForm.value.displacement = carForm.displacement
+      insurancePolicyForm.value.powerScale = carForm.powerScale
+      insurancePolicyForm.value.carOwner = carForm.carOwner
+      if(carForm.licenseNo&&carForm.vinNo&&carForm.engineNo) {
+        getQuoteNumber()
+      }
+    }
+    if(owerForm) {
+      insurancePolicyForm.value.name1 = owerForm.name
+      insurancePolicyForm.value.mobile1 = owerForm.mobile
+      insurancePolicyForm.value.identifyType1 = owerForm.identifyType
+      insurancePolicyForm.value.identifyNumber1 = owerForm.identifyNumber
+      insurancePolicyForm.value.identifyValidDate1 = owerForm.identifyValidDate
+      insurancePolicyForm.value.identifyValidEndDate1 = owerForm.identifyValidEndDate
+      insurancePolicyForm.value.addr1 = owerForm.addr
+      insurancePolicyForm.value.telephone1 = owerForm.telephone
+      insurancePolicyForm.value.person1 = owerForm.person
+      insurancePolicyForm.value.age1 = owerForm.age
+      insurancePolicyForm.value.address1 = owerForm.address
+      insurancePolicyForm.value.registeredCapital1 = owerForm.registeredCapital
+      insurancePolicyForm.value.email1 = owerForm.email
+    }
+    if(ower1Form) {
+      insurancePolicyForm.value.name2 = ower1Form.name
+      insurancePolicyForm.value.mobile2 = ower1Form.mobile
+      insurancePolicyForm.value.identifyType2 = ower1Form.identifyType
+      insurancePolicyForm.value.identifyNumber2 = ower1Form.identifyNumber
+      insurancePolicyForm.value.identifyValidDate2 = ower1Form.identifyValidDate
+      insurancePolicyForm.value.identifyValidEndDate2 = ower1Form.identifyValidEndDate
+      insurancePolicyForm.value.addr2 = ower1Form.addr
+      insurancePolicyForm.value.telephone2 = ower1Form.telephone
+      insurancePolicyForm.value.person2 = ower1Form.person
+      insurancePolicyForm.value.age2 = ower1Form.age
+      insurancePolicyForm.value.address2 = ower1Form.address
+      insurancePolicyForm.value.registeredCapital2 = ower1Form.registeredCapital
+      insurancePolicyForm.value.email2 = ower1Form.email
+    }
+    if(ower2Form) {
+      insurancePolicyForm.value.name3 = ower2Form.name
+      insurancePolicyForm.value.mobile3 = ower2Form.mobile
+      insurancePolicyForm.value.identifyType3 = ower2Form.identifyType
+      insurancePolicyForm.value.identifyNumber3 = ower2Form.identifyNumber
+      insurancePolicyForm.value.identifyValidDate3 = ower2Form.identifyValidDate
+      insurancePolicyForm.value.identifyValidEndDate3 = ower2Form.identifyValidEndDate
+      insurancePolicyForm.value.addr3 = ower2Form.addr
+      insurancePolicyForm.value.telephone3 = ower2Form.telephone
+      insurancePolicyForm.value.person3 = ower2Form.person
+      insurancePolicyForm.value.age3 = ower2Form.age
+      insurancePolicyForm.value.address3 = ower2Form.address
+      insurancePolicyForm.value.registeredCapital3 = ower2Form.registeredCapital
+      insurancePolicyForm.value.email3 = ower2Form.email
+    }
+  }
+}
+const handleRecognition = () => {
+  imageShow.value = true
+}
+
+const handleSubmit = async (InsurancePolicyRefs: FormInstance | undefined) => {
+  if(!InsurancePolicyRefs) {
+    InsurancePolicyRefs?.resetFields()
+    return
+  }
+  await InsurancePolicyRefs.validate((valid) => {
+    if(valid) {
+      let arr = [], brr = []
+      if(quoteData.value.length>0) {
+        let obj = quoteData.value.find(a => a.id === insurancePolicyForm.value.order.insuranceCompanyCode)
+        obj.projectList?.forEach(sub => {
+          sub.kinds?.forEach(max => {
+            arr.push(max)
+          })
+          sub.drivings?.forEach(max => {
+            brr.push(max)
+          })
+        })
+      }
+      let data = {
+        systemType: '2',
+        order: {
+          insuranceCompanyCode: insurancePolicyForm.value.order.insuranceCompanyCode,
+          quoteNo: '340149409004261376'
+        },
+        productId: insurancePolicyForm.value.productId,
+        carInfoVo: {
+          licenseKindCode: '02',
+          propertyCode: insurancePolicyForm.value.propertyCode,
+          licenseNo: insurancePolicyForm.value.licenseNo,
+          vinNo: insurancePolicyForm.value.vinNo,
+          brandName: insurancePolicyForm.value.brandName,
+          engineNo: insurancePolicyForm.value.engineNo,
+          carNatureCode: insurancePolicyForm.value.carNatureCode,
+          vehicleUseCode: insurancePolicyForm.value.vehicleUseCode,
+          carTypeCode: insurancePolicyForm.value.carTypeCode,
+          energyTypeCode: insurancePolicyForm.value.energyTypeCode,
+          registerDate: insurancePolicyForm.value.registerDate,
+          issueDate: insurancePolicyForm.value.issueDate,
+          completeKerbMass: insurancePolicyForm.value.completeKerbMass,
+          limitLoad: insurancePolicyForm.value.limitLoad,
+          seatCount: insurancePolicyForm.value.seatCount,
+          carYear: insurancePolicyForm.value.carYear,
+          purchasePrice: insurancePolicyForm.value.purchasePrice,
+          displacement: insurancePolicyForm.value.displacement,
+          powerScale: insurancePolicyForm.value.powerScale,
+        },
+        ownersInfo: {
+          property: 1,
+          name: insurancePolicyForm.value.name1,
+          mobile: insurancePolicyForm.value.mobile1,
+          identifyType: insurancePolicyForm.value.identifyType1,
+          identifyNumber: insurancePolicyForm.value.identifyNumber1,
+          identifyValidDate: insurancePolicyForm.value.identifyValidDate1,
+          identifyValidEndDate: insurancePolicyForm.value.identifyValidEndDate1,
+          addr: insurancePolicyForm.value.addr1,
+          telephone: insurancePolicyForm.value.telephone1,
+          person: insurancePolicyForm.value.person1,
+          age: insurancePolicyForm.value.age1,
+          address: insurancePolicyForm.value.address1,
+          registeredCapital: insurancePolicyForm.value.registeredCapital1,
+          email: insurancePolicyForm.value.email1,
+        },
+        policyHolderInfo: {
+          property: 1,
+          name: insurancePolicyForm.value.name2,
+          mobile: insurancePolicyForm.value.mobile2,
+          identifyType: insurancePolicyForm.value.identifyType2,
+          identifyNumber: insurancePolicyForm.value.identifyNumber2,
+          identifyValidDate: insurancePolicyForm.value.identifyValidDate2,
+          identifyValidEndDate: insurancePolicyForm.value.identifyValidEndDate2,
+          addr: insurancePolicyForm.value.addr2,
+          telephone: insurancePolicyForm.value.telephone2,
+          person: insurancePolicyForm.value.person2,
+          age: insurancePolicyForm.value.age2,
+          address: insurancePolicyForm.value.address2,
+          registeredCapital: insurancePolicyForm.value.registeredCapital2,
+          email: insurancePolicyForm.value.email2,
+        },
+        insuredPersonInfo: {
+          property: 1,
+          name: insurancePolicyForm.value.name3,
+          mobile: insurancePolicyForm.value.mobile3,
+          identifyType: insurancePolicyForm.value.identifyType3,
+          identifyNumber: insurancePolicyForm.value.identifyNumber3,
+          identifyValidDate: insurancePolicyForm.value.identifyValidDate3,
+          identifyValidEndDate: insurancePolicyForm.value.identifyValidEndDate3,
+          addr: insurancePolicyForm.value.addr3,
+          telephone: insurancePolicyForm.value.telephone3,
+          person: insurancePolicyForm.value.person3,
+          age: insurancePolicyForm.value.age3,
+          address: insurancePolicyForm.value.address3,
+          registeredCapital: insurancePolicyForm.value.registeredCapital3,
+          email: insurancePolicyForm.value.email3,
+        },
+        ciRiskInfoVo: insurancePolicyForm.value.ciRiskInfoVo.startDate&&insurancePolicyForm.value.ciRiskInfoVo.endDate?insurancePolicyForm.value.ciRiskInfoVo: null,
+        biRiskInfoVo: insurancePolicyForm.value.biRiskInfoVo.startDate&&insurancePolicyForm.value.biRiskInfoVo.endDate?insurancePolicyForm.value.biRiskInfoVo: null,
+        vehicleAndVesselTaxVo: insurancePolicyForm.value.vehicleAndVesselTaxVo,
+        kindInfoVo: [...arr],
+        accidentalDrivings: [...brr]
+      }
+      api.insurancePolicyApi.quote(data).then((res: any) => {
+        if(res.code == 200) {
+          ElMessage({
+            message: res.msg,
+            type: 'success'
+          })
+        } else {
+          ElMessage({
+            message: res.msg,
+            type: 'warning'
+          })
+        }
+        // InsurancePolicyRefs.resetFields()
+      })
+    }
+  })
+}
+
+// 获取保司
+const ruleFilterCompany = (item) => {
+  let data = {
+    productId: item.value,
+    carInfo: {
+      carOwner: insurancePolicyForm.value.carOwner,
+      licenseNo: insurancePolicyForm.value.licenseNo,
+      vinNo: insurancePolicyForm.value.vinNo,
+      brandName: insurancePolicyForm.value.brandName,
+      engineNo: insurancePolicyForm.value.engineNo,
+      carNatureCode: insurancePolicyForm.value.carNatureCode,
+      vehicleUseCode: insurancePolicyForm.value.vehicleUseCode,
+      carTypeCode: insurancePolicyForm.value.carTypeCode,
+      energyTypeCode: insurancePolicyForm.value.energyTypeCode,
+      registerDate: insurancePolicyForm.value.registerDate,
+      issueDate: insurancePolicyForm.value.issueDate,
+      completeKerbMass: insurancePolicyForm.value.completeKerbMass,
+      limitLoad: insurancePolicyForm.value.limitLoad,
+      seatCount: insurancePolicyForm.value.seatCount,
+      carYear: insurancePolicyForm.value.carYear,
+      purchasePrice: insurancePolicyForm.value.purchasePrice,
+      displacement: insurancePolicyForm.value.displacement,
+      powerScale: insurancePolicyForm.value.powerScale,
+      carKindCode: insurancePolicyForm.value.plateType
+    },
+    ownerInfo: {
+      name: insurancePolicyForm.value.name1,
+      mobile: insurancePolicyForm.value.mobile1,
+      identifyType: insurancePolicyForm.value.identifyType1,
+      identifyNumber: insurancePolicyForm.value.identifyNumber1,
+      identifyValidDate: insurancePolicyForm.value.identifyValidDate1,
+      identifyValidEndDate: insurancePolicyForm.value.identifyValidEndDate1,
+      addr: insurancePolicyForm.value.addr1,
+      telephone: insurancePolicyForm.value.telephone1,
+      person: insurancePolicyForm.value.person1,
+      age: insurancePolicyForm.value.age1,
+      address: insurancePolicyForm.value.address1,
+      registeredCapital: insurancePolicyForm.value.registeredCapital1,
+      email: insurancePolicyForm.value.email1,
+    },
+    applyInfo: {
+      name: insurancePolicyForm.value.name2,
+      mobile: insurancePolicyForm.value.mobile2,
+      identifyType: insurancePolicyForm.value.identifyType2,
+      identifyNumber: insurancePolicyForm.value.identifyNumber2,
+      identifyValidDate: insurancePolicyForm.value.identifyValidDate2,
+      identifyValidEndDate: insurancePolicyForm.value.identifyValidEndDate2,
+      addr: insurancePolicyForm.value.addr2,
+      telephone: insurancePolicyForm.value.telephone2,
+      person: insurancePolicyForm.value.person2,
+      age: insurancePolicyForm.value.age2,
+      address: insurancePolicyForm.value.address2,
+      registeredCapital: insurancePolicyForm.value.registeredCapital2,
+      email: insurancePolicyForm.value.email2,
+    },
+    insureInfo: {
+      name: insurancePolicyForm.value.name3,
+      mobile: insurancePolicyForm.value.mobile3,
+      identifyType: insurancePolicyForm.value.identifyType3,
+      identifyNumber: insurancePolicyForm.value.identifyNumber3,
+      identifyValidDate: insurancePolicyForm.value.identifyValidDate3,
+      identifyValidEndDate: insurancePolicyForm.value.identifyValidEndDate3,
+      addr: insurancePolicyForm.value.addr3,
+      telephone: insurancePolicyForm.value.telephone3,
+      person: insurancePolicyForm.value.person3,
+      age: insurancePolicyForm.value.age3,
+      address: insurancePolicyForm.value.address3,
+      registeredCapital: insurancePolicyForm.value.registeredCapital3,
+      email: insurancePolicyForm.value.email3,
+    },
+  }
+  api.insurancePolicyApi.ruleFilterCompany(data).then((res: any) => {
+    if(res.code == 200) {
+      quoteData.value = res.data
+    } else {
+      quoteData.value = []
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  getAreaList()
+  initOption()
+})
+
+</script>
+
+<style scoped lang="scss">
+@use "@/assets/styles/common/style";
+.insurancePolicy{
+  width: calc(100% - 48px);
+  height: calc(100vh - 128px);
+  margin: 10px 24px 0;
+  overflow-y: auto;
+  overflow-x: hidden;
+  .formItem{
+    padding: 24px;
+    background: #FFFFFF;
+    border-radius: 6px;
+  }
+  .title{
+    height: 18px;
+    border-left: 4px solid #00a0f4;
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    padding-left: 12px;
+    margin-left: 24px;
+    color: #333333;
+    font-size: 15px;
+  }
+  .icon{
+    padding-right: 24px;
+    display: flex;
+    align-items: center;
+  }
+  .myIcon{
+    display: inline-block;
+    width: 14px;
+    height: 14px;
+    margin-right: 10px;
+  }
+  .icon-ele{
+    margin-left: 10px;
+  }
+  .ordinary{
+    height: 22px;
+    line-height: 22px;
+    padding: 0 10px;
+    border: 1px solid #EEEEEE;
+    border-radius: 2px;
+    color: #666666;
+    display: flex;
+    font-size: 12px;
+    margin: 0 5px;
+  }
+  .active{
+    border: 1px solid #0083FF;
+    color: #0083FF;
+    background: url("@/assets/images/additional/right.png") no-repeat right bottom;
+    background-size: 12px 12px;
+  }
+  .insurance-jq{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    margin: 10px 0 24px 24px;
+    .checkbox{
+      margin: 0 24px;
+      height: 22px;
+      line-height: 22px;
+      padding: 0 10px;
+      border: 1px solid #EEEEEE;
+      border-radius: 2px;
+      color: #666666;
+      display: flex;
+      font-size: 12px;
+      cursor: pointer;
+    }
+    .cehcked{
+      border: 1px solid #0083FF;
+      color: #0083FF;
+      background: url("@/assets/images/additional/right.png") no-repeat right bottom;
+      background-size: 12px 12px;
+    }
+    .time{
+      display: flex;
+      align-items: center;
+      justify-content: flex-start;
+    }
+  }
+  .success{
+    color: #1DAEFF;
+    border: 1px solid #1DAEFF;
+    background: #E7F7FF;
+    padding: 2px 4px;
+    border-radius: 2px;
+    font-size: 12px;
+  }
+  .fail{
+    color: #FF4545;
+    border: 1px solid #FF4545;
+    background: #FFF4F4;
+    padding: 2px 4px;
+    border-radius: 2px;
+    font-size: 12px;
+    margin-right: 10px;
+  }
+  .company{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    img{
+      width: 24px;
+      height: 24px;
+      margin-right: 10px;
+    }
+  }
+  .resultItem{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    font-size: 12px;
+    .resultTips{
+      display: flex;
+      align-items: center;
+      justify-content: flex-start;
+      background: #FFFAEF;
+      border: 1px solid #FAA21E;
+      border-radius: 2px;
+      padding: 0 4px;
+      font-size: 10px;
+      margin-left: 10px;
+    }
+  }
+  .quoteFail{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    font-size: 12px;
+  }
+  .quoteReason{
+    text-align: left;
+    padding-left: 22px;
+    width: 100%;
+    display: -webkit-box;             /* 必须设置,用于多行溢出 */
+    -webkit-box-orient: vertical;     /* 设置盒子排列方向为垂直 */
+    -webkit-line-clamp: 2;            /* 限制显示的行数,例如显示 3 行 */
+    overflow: hidden;
+    font-size: 12px;
+  }
+  .product{
+    .productItem{
+      border: 1px solid #E5E5E5;
+      font-size: 12px;
+      padding: 0 4px;
+      border-radius: 2px;
+      color: #666666;
+      cursor: pointer;
+      margin: 0 10px 0 0;
+    }
+    .productActive{
+      border: 1px solid #0083FF;
+      color: #0083FF;
+    }
+  }
+  .quoteTitle{
+    height: 14px;
+    border-left: 2px solid #00a0f4;
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    padding-left: 6px;
+    margin: 14px 0;
+    color: #333333;
+    font-size: 14px;
+  }
+  .quoteFlex{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .imageCode{
+    height: 140px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    img{
+      width: 140px;
+      height: 140px;
+    }
+  }
+  .expandFlex{
+    display: flex;
+    .expandTitle{
+      text-align: center;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 40px;
+      padding: 0 8px;
+      margin: 0 10px 0 0;
+      background: #F6FBFF;
+    }
+  }
+  :deep(.el-collapse-item__header) {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+  :deep(.el-form-item) {
+    margin-bottom: 0;
+  }
+  .formBlock{
+    :deep(.el-form-item) {
+      display: block;
+    }
+  }
+  .factorTable{
+    .more{
+      border: 1px solid #0083FF;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      border-radius: 50%;
+      width: 12px;
+      height: 12px;
+      color: #0083FF;
+      font-size: 10px;
+      margin-left: 2px;
+    }
+    :deep(.cell) {
+      font-size: 10px;
+    }
+  }
+  :deep(thead .el-table__cell) {
+    background: #eeeeee;
+  }
+  .footer{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-top: 10px;
+    background: #FFFFFF;
+    padding: 16px 0;
+  }
+}
+</style>

+ 30 - 0
src/views/insurancePolicy/modules/calculating.vue

@@ -0,0 +1,30 @@
+<template>
+  <div class="calculating">
+    <el-table :data="tableData" border show-summary style="width: 100%">
+      <el-table-column prop="id" label="险种" />
+      <el-table-column prop="name" label="比例" />
+      <el-table-column prop="amount1" label="优惠金额" />
+      <el-table-column prop="amount2" label="返还测算比例" width="160">
+        <template #default="scope">
+          <el-input>
+            <template #append>
+              <span>%</span>
+            </template>
+          </el-input>
+        </template>
+      </el-table-column>
+      <el-table-column prop="amount3" label="返还金额" />
+    </el-table>
+  </div>
+</template>
+
+<script setup lang="ts">
+
+let tableData = ref([{
+  id: 1
+}])
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 1067 - 0
src/views/insurancePolicy/modules/recognition.vue

@@ -0,0 +1,1067 @@
+<template>
+  <div class="recognition">
+<!--    <div class="tips">
+      <p class="title">使用说明</p>
+      <p class="introduce">
+        点击示例图上传 或 拖拽证件照到对应虚线框内 放大:鼠标滚轮上下滑动可放大缩小图片 移动:鼠标左键按住图片可移动图片位置
+      </p>
+    </div>-->
+    <el-row :gutter="20" style="margin-bottom: 20px">
+      <el-col :span="11">
+        <div class="imageItem">
+          <p>行驶证正面页</p>
+          <el-upload v-if="!xszFront" @change="uploadImage($event, 'xszf')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传行驶证正面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'xszf')">
+            <div class="upload-box">
+              <img class="upload-image" :src="xszFront"/>
+            </div>
+          </el-upload>
+        </div>
+        <div class="imageItem">
+          <p>行驶证背面页</p>
+          <el-upload v-if="!xszBack" @change="uploadImage($event, 'xszb')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传行驶证背面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'xszb')">
+            <div class="upload-box">
+              <img class="upload-image" :src="xszBack"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="13" style="border-left: 1px dashed #eeeeee; padding-left: 40px">
+        <el-form :model="carForm" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="号牌号码">
+            <el-input v-model="carForm.licenseNo" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="车辆类型">
+            <el-select v-model="carForm.carTypeCode" placeholder="请选择">
+              <el-option value="1" label="类型1"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="所有人">
+            <el-input v-model="carForm.carOwner" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input placeholder="请填写" v-model="carForm.addr"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="品牌型号">
+            <el-input v-model="carForm.brandName" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="车辆识别代码">
+            <el-input v-model="carForm.vinNo" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="发动机号码">
+            <el-input v-model="carForm.engineNo" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="注册日期">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              v-model="carForm.registerDate"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="发证日期">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              v-model="carForm.issueDate"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="核载人数">
+            <el-input v-model="carForm.seatCount" placeholder="请填写">
+              <template #append>
+                <span>人</span>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="总质量">
+            <el-input placeholder="请填写">
+              <template #append>
+                <span>KG</span>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="整备质量">
+            <el-input v-model="carForm.completeKerbMass" placeholder="请填写">
+              <template #append>
+                <span>KG</span>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="外廓尺寸">
+            <el-input placeholder="请填写"></el-input>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+
+    <div class="type">
+      <span class="btnItem" :class="{'btnActive': btn.ownerShow === item}" v-for="item in btn.owner" @click="btn.ownerShow = item">{{ item }}</span>
+    </div>
+    <el-row :gutter="20" style="margin-bottom: 20px">
+      <el-col :span="11" v-if="btn.ownerShow === '车主身份证'">
+        <div class="imageItem">
+          <p>身份证正面页</p>
+          <el-upload v-if="!sfzFront" @change="uploadImage($event, 'sfzf')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传身份证正面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'xszf')">
+            <div class="upload-box">
+              <img class="upload-image" :src="sfzFront"/>
+            </div>
+          </el-upload>
+        </div>
+        <div class="imageItem">
+          <p>身份证背面页</p>
+          <el-upload v-if="!sfzBack" @change="uploadImage($event, 'sfzb')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传身份证背面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'xszb')">
+            <div class="upload-box">
+              <img class="upload-image" :src="sfzBack"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="11" v-if="btn.ownerShow === '车主营业执照'">
+        <div class="imageItem">
+          <p>营业执照</p>
+          <el-upload v-if="!yyzzFront" @change="uploadImage($event, 'yyzz')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传营业执照识别</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'yyzz')">
+            <div class="upload-box">
+              <img class="upload-image" :src="yyzzFront"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="13" style="border-left: 1px dashed #eeeeee; padding-left: 40px">
+        <el-form v-if="btn.ownerShow === '车主身份证'" :model="owerForm" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="姓名">
+            <el-input v-model="owerForm.name" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="性别">
+            <el-select v-model="owerForm.gender" placeholder="请选择">
+              <el-option value="1" label="男"></el-option>
+              <el-option value="2" label="女"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="民族">
+            <el-input placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input v-model="owerForm.addr" placeholder="请填写" ></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="出生日期">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="有效期起">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              v-model="owerForm.identifyValidDate"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="有效期止">
+            <el-date-picker
+              v-model="owerForm.identifyValidEndDate"
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+        </el-form>
+        <el-form v-if="btn.ownerShow === '车主营业执照'" :model="owerForm" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="社会信用代码">
+            <el-input v-model="owerForm.identifyNumber" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="名称">
+            <el-input v-model="owerForm.company" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="类型">
+            <el-input v-model="owerForm.types" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input v-model="owerForm.address" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="法人/负责人">
+            <el-input v-model="owerForm.legalRepresentative" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="注册资本">
+            <el-input v-model="owerForm.registeredCapital" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="经营范围">
+            <el-input v-model="owerForm.businessScope" placeholder="请填写"></el-input>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+
+    <div class="type">
+      <span class="btnItem" :class="{'btnActive': btn.owner1Show === item}" v-for="item in btn.owner1" @click="btn.owner1Show = item">{{ item }}</span>
+    </div>
+    <el-row :gutter="20" style="margin-bottom: 20px">
+      <el-col :span="11" v-if="btn.owner1Show === '投保人身份证'">
+        <div class="imageItem">
+          <p>身份证正面页</p>
+          <el-upload v-if="!tbrFront" @change="uploadImage($event, 'tbrf')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传身份证正面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'tbrf')">
+            <div class="upload-box">
+              <img class="upload-image" :src="tbrFront"/>
+            </div>
+          </el-upload>
+        </div>
+        <div class="imageItem">
+          <p>身份证背面页</p>
+          <el-upload v-if="!tbrBack" @change="uploadImage($event, 'tbrb')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传身份证背面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'tbrb')">
+            <div class="upload-box">
+              <img class="upload-image" :src="tbrBack"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="11" v-if="btn.owner1Show === '投保人营业执照'">
+        <div class="imageItem">
+          <p>营业执照</p>
+          <el-upload v-if="!tbryyzzFront" @change="uploadImage($event, 'tbryyzz')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传营业执照识别</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'tbryyzz')">
+            <div class="upload-box">
+              <img class="upload-image" :src="tbryyzzFront"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="13" style="border-left: 1px dashed #eeeeee; padding-left: 40px">
+        <el-form v-if="btn.owner1Show === '投保人身份证'" :model="ower1Form" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="姓名">
+            <el-input v-model="ower1Form.name" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="性别">
+            <el-select v-model="ower1Form.gender" placeholder="请选择">
+              <el-option value="1" label="男"></el-option>
+              <el-option value="2" label="女"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="民族">
+            <el-input placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input v-model="ower1Form.addr" placeholder="请填写" ></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="出生日期">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="有效期起">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              v-model="ower1Form.identifyValidDate"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="有效期止">
+            <el-date-picker
+              v-model="ower1Form.identifyValidEndDate"
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+        </el-form>
+        <el-form v-if="btn.owner1Show === '投保人营业执照'" :model="ower1Form" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="社会信用代码">
+            <el-input v-model="ower1Form.identifyNumber" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="名称">
+            <el-input v-model="ower1Form.company" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="类型">
+            <el-input v-model="ower1Form.types" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input v-model="ower1Form.address" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="法人/负责人">
+            <el-input v-model="ower1Form.legalRepresentative" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="注册资本">
+            <el-input v-model="ower1Form.registeredCapital" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="经营范围">
+            <el-input v-model="ower1Form.businessScope" placeholder="请填写"></el-input>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+
+    <div class="type">
+      <span class="btnItem" :class="{'btnActive': btn.owner2Show === item}" v-for="item in btn.owner2" @click="btn.owner2Show = item">{{ item }}</span>
+    </div>
+    <el-row :gutter="20" style="margin-bottom: 20px">
+      <el-col :span="11" v-if="btn.owner2Show === '被保人身份证'">
+        <div class="imageItem">
+          <p>身份证正面页</p>
+          <el-upload v-if="!bbrFront" @change="uploadImage($event, 'bbrf')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传身份证正面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'bbrf')">
+            <div class="upload-box">
+              <img class="upload-image" :src="bbrFront"/>
+            </div>
+          </el-upload>
+        </div>
+        <div class="imageItem">
+          <p>身份证背面页</p>
+          <el-upload v-if="!bbrBack" @change="uploadImage($event, 'bbrb')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传身份证背面</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'bbrb')">
+            <div class="upload-box">
+              <img class="upload-image" :src="bbrBack"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="11" v-if="btn.owner2Show === '被保人营业执照'">
+        <div class="imageItem">
+          <p>营业执照</p>
+          <el-upload v-if="!bbryyzzFront" @change="uploadImage($event, 'bbryyzz')" :auto-upload="false" :show-file-list="false">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>上传营业执照识别</p>
+              </div>
+            </div>
+          </el-upload>
+          <el-upload v-else :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 'bbryyzz')">
+            <div class="upload-box">
+              <img class="upload-image" :src="bbryyzzFront"/>
+            </div>
+          </el-upload>
+        </div>
+      </el-col>
+      <el-col :span="13" style="border-left: 1px dashed #eeeeee; padding-left: 40px">
+        <el-form v-if="btn.owner2Show === '被保人身份证'" :model="ower2Form" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="姓名">
+            <el-input v-model="ower2Form.name" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="性别">
+            <el-select v-model="ower2Form.gender" placeholder="请选择">
+              <el-option value="1" label="男"></el-option>
+              <el-option value="2" label="女"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="民族">
+            <el-input placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input v-model="ower2Form.addr" placeholder="请填写" ></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="出生日期">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="有效期起">
+            <el-date-picker
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              v-model="ower2Form.identifyValidDate"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="有效期止">
+            <el-date-picker
+              v-model="ower2Form.identifyValidEndDate"
+              type="datetime"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            ></el-date-picker>
+          </el-form-item>
+        </el-form>
+        <el-form v-if="btn.owner2Show === '被保人营业执照'" :model="ower2Form" label-width="120" label-position="left">
+          <el-form-item class="m-b-5" label="社会信用代码">
+            <el-input v-model="ower2Form.identifyNumber" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="名称">
+            <el-input v-model="ower2Form.company" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="类型">
+            <el-input v-model="ower2Form.types" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="住址">
+            <el-input v-model="ower2Form.address" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="法人/负责人">
+            <el-input v-model="ower2Form.legalRepresentative" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="注册资本">
+            <el-input v-model="ower2Form.registeredCapital" placeholder="请填写"></el-input>
+          </el-form-item>
+          <el-form-item class="m-b-5" label="经营范围">
+            <el-input v-model="ower2Form.businessScope" placeholder="请填写"></el-input>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+
+    <div class="footer">
+      <el-button plain type="primary" @click="handleCancel">取消</el-button>
+      <el-button type="primary" @click="handleConfirm">确定</el-button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { ElMessage } from 'element-plus'
+
+const emit = defineEmits(['close'])
+
+let xszFront = ref('')
+let xszFrontFile = ref(null)
+let xszBack = ref('')
+let xszBackFile = ref(null)
+
+let sfzFront = ref('')
+let sfzFrontFile = ref(null)
+let sfzBack = ref('')
+let sfzBackFile = ref(null)
+let yyzzFront = ref('')
+let yyzzFrontFile = ref(null)
+
+let tbrFront = ref('')
+let tbrFrontFile = ref(null)
+let tbrBack = ref('')
+let tbrBackFile = ref(null)
+let tbryyzzFront = ref('')
+let tbryyzzFrontFile = ref(null)
+
+let bbrFront = ref('')
+let bbrFrontFile = ref(null)
+let bbrBack = ref('')
+let bbrBackFile = ref(null)
+let bbryyzzFront = ref('')
+let bbryyzzFrontFile = ref(null)
+
+let carForm = ref({})
+let owerForm = ref({})
+let ower1Form = ref({})
+let ower2Form = ref({})
+let btn = ref({
+  ownerShow: '车主身份证',
+  owner1Show: '投保人身份证',
+  owner2Show: '被保人身份证',
+  owner: [
+    '车主身份证', '车主营业执照'
+  ],
+  owner1: [
+    '投保人身份证', '投保人营业执照'
+  ],
+  owner2: [
+    '被保人身份证', '被保人营业执照'
+  ],
+})
+
+// 根据身份证号换算年龄
+const getAgeByIdCard = (idCard: any, type?: any) => {
+  //获取用户身份证号码
+  const userCard = idCard
+  //如果用户身份证号码为undefined则返回空
+  if (!userCard) {
+    return ''
+  }
+  // 获取出生日期
+  const yearBirth = userCard.substring(6, 10)
+  const monthBirth = userCard.substring(10, 12)
+  const dayBirth = userCard.substring(12, 14)
+  // 获取当前年月日并计算年龄
+  const myDate = new Date()
+  const monthNow = myDate.getMonth() + 1
+  const dayNow = myDate.getDate()
+  let age = myDate.getFullYear() - yearBirth
+  if (monthNow > monthBirth || (monthNow == monthBirth && dayNow > dayBirth)) {
+    age++
+  }
+  // type?.age = age
+  return age
+}
+
+// 上传图片
+const uploadImage = async (file, type) => {
+  let files = file.raw
+  const params = new FormData(); // 声明formData数据类型
+  params.append("file", files);
+  params.append("type", "image");
+
+  const { code, data, msg } = await api.commonApi.fileUpload(params)
+  if(code == 200) {
+    let result: any = {...data}
+    switch (type) {
+      case 'xszf':
+        xszFront.value = result.downloadUrl
+        xszFrontFile.value = files
+        if(xszFront.value&&xszBack.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', xszFrontFile.value)
+          fileParams.append('image2', xszBackFile.value)
+          api.additionalApi.drivingPermit(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              let data = res.data.carInfo
+              carForm.value.licenseNo = data.plateNo // 车牌号
+              carForm.value.vinNo = data.vin // 车架号
+              carForm.value.carOwner = data.carOwner // 所有人
+              carForm.value.brandName = data.backOcrID // 品牌型号
+              carForm.value.engineNo = data.engine // 发动机
+              // carForm.value.carYear = data.carYear // 年款
+              carForm.value.seatCount = data.approvedPassengersCapacity // 座位数
+              carForm.value.completeKerbMass = data.unladenMass // 整备质量
+              carForm.value.limitLoad = data.limitLoad // 核定载质量
+              // carForm.value.displacement = data.displacement // 排量
+              carForm.value.powerScale = data.powerScale // 功率
+              // carForm.value.purchasePrice = data.purchasePrice // 新车购置价
+              carForm.value.carNatureCode = data.useNature // 使用性质
+              carForm.value.vehicleUseCode = data.vehicleUse // 车辆用途
+              carForm.value.carTypeCode = data.category // 车辆类型
+              carForm.value.energyTypeCode = data.energyTypeCode // 能源种类
+              carForm.value.plateType = data.plateType
+              carForm.value.registerDate = // 注册日期
+                data.registerDate.substring(0, 4) +
+                "-" +
+                data.registerDate.substring(4, 6) +
+                "-" +
+                data.registerDate.substring(6, 8);
+              carForm.value.issueDate = // 发证日期
+                data.issueDate.substring(0, 4) +
+                "-" +
+                data.issueDate.substring(4, 6) +
+                "-" +
+                data.issueDate.substring(6, 8);
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'xszb':
+        xszBack.value = result.downloadUrl
+        xszBackFile.value = files
+        if(xszFront.value&&xszBack.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', xszFrontFile.value)
+          fileParams.append('image2', xszBackFile.value)
+          api.additionalApi.drivingPermit(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              let data = res.data.carInfo
+              carForm.value.licenseNo = data.plateNo // 车牌号
+              carForm.value.vinNo = data.vin // 车架号
+              carForm.value.carOwner = data.carOwner // 所有人
+              carForm.value.brandName = data.backOcrID // 品牌型号
+              carForm.value.engineNo = data.engine // 发动机
+              // carForm.value.carYear = data.carYear // 年款
+              carForm.value.seatCount = data.approvedPassengersCapacity // 座位数
+              carForm.value.completeKerbMass = data.unladenMass // 整备质量
+              carForm.value.limitLoad = data.limitLoad // 核定载质量
+              // carForm.value.displacement = data.displacement // 排量
+              carForm.value.powerScale = data.powerScale // 功率
+              // carForm.value.purchasePrice = data.purchasePrice // 新车购置价
+              carForm.value.carNatureCode = data.useNature // 使用性质
+              carForm.value.vehicleUseCode = data.vehicleUse // 车辆用途
+              carForm.value.carTypeCode = data.category // 车辆类型
+              carForm.value.energyTypeCode = data.energyTypeCode // 能源种类
+              carForm.value.plateType = data.plateType
+              carForm.value.registerDate = // 注册日期
+                data.registerDate.substring(0, 4) +
+                "-" +
+                data.registerDate.substring(4, 6) +
+                "-" +
+                data.registerDate.substring(6, 8);
+              carForm.value.issueDate = // 发证日期
+                data.issueDate.substring(0, 4) +
+                "-" +
+                data.issueDate.substring(4, 6) +
+                "-" +
+                data.issueDate.substring(6, 8);
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'sfzf':
+        sfzFront.value = result.downloadUrl
+        sfzFrontFile.value = files
+        if(sfzFrontFile.value&&sfzBackFile.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', sfzFrontFile.value)
+          fileParams.append('image2', sfzBackFile.value)
+          api.additionalApi.idCard(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data.customerInfo
+              owerForm.value.name = data.name
+              owerForm.value.mobile = data.mobile
+              owerForm.value.addr = data.addr
+              owerForm.value.identifyNumber = data.identifyNumber
+              owerForm.value.identifyValidDate =
+                data.identifyValidDate.substring(0, 4) +
+                "-" +
+                data.identifyValidDate.substring(4, 6) +
+                "-" +
+                data.identifyValidDate.substring(6, 8);
+              owerForm.value.identifyValidEndDate = data.identifyValidEndDate?data.identifyValidEndDate==='长期'?'9999-12-31':
+                data.identifyValidEndDate.substring(0, 4) +
+                "-" +
+                data.identifyValidEndDate.substring(4, 6) +
+                "-" +
+                data.identifyValidEndDate.substring(6, 8):''
+              owerForm.value.age = getAgeByIdCard(data.identifyNumber)
+              owerForm.value.gender = data.identifyIssuedCom
+              owerForm.value.email = data.email
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'sfzb':
+        sfzBack.value = result.downloadUrl
+        sfzBackFile.value = files
+        if(sfzFrontFile.value&&sfzBackFile.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', sfzFrontFile.value)
+          fileParams.append('image2', sfzBackFile.value)
+          api.additionalApi.idCard(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data.customerInfo
+              owerForm.value.name = data.name
+              owerForm.value.mobile = data.mobile
+              owerForm.value.addr = data.addr
+              owerForm.value.identifyNumber = data.identifyNumber
+              owerForm.value.identifyValidDate =
+                data.identifyValidDate.substring(0, 4) +
+                "-" +
+                data.identifyValidDate.substring(4, 6) +
+                "-" +
+                data.identifyValidDate.substring(6, 8);
+              owerForm.value.identifyValidEndDate = data.identifyValidEndDate?data.identifyValidEndDate==='长期'?'9999-12-31':
+                data.identifyValidEndDate.substring(0, 4) +
+                "-" +
+                data.identifyValidEndDate.substring(4, 6) +
+                "-" +
+                data.identifyValidEndDate.substring(6, 8): ''
+              owerForm.value.age = getAgeByIdCard(data.identifyNumber)
+              owerForm.value.gender = data.identifyIssuedCom
+              owerForm.value.email = data.email
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'yyzz':
+        yyzzFront.value = result.downloadUrl
+        yyzzFrontFile.value = files
+        if(yyzzFront.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', yyzzFrontFile.value)
+          api.additionalApi.businessLicense(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data
+              owerForm.value.identifyNumber = data.socialCreditCode
+              owerForm.value.company = data.company
+              owerForm.value.types = data.types
+              owerForm.value.address = data.address
+              owerForm.value.legalRepresentative = data.legalRepresentative
+              owerForm.value.registeredCapital = data.registeredCapital
+              owerForm.value.businessScope = data.businessScope
+            }
+          })
+        }
+      case 'tbrf':
+        tbrFront.value = result.downloadUrl
+        tbrFrontFile.value = files
+        if(tbrFrontFile.value&&tbrBackFile.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', tbrFrontFile.value)
+          fileParams.append('image2', tbrBackFile.value)
+          api.additionalApi.idCard(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data.customerInfo
+              ower1Form.value.name = data.name
+              ower1Form.value.mobile = data.mobile
+              ower1Form.value.addr = data.addr
+              ower1Form.value.identifyNumber = data.identifyNumber
+              ower1Form.value.identifyValidDate =
+                data.identifyValidDate.substring(0, 4) +
+                "-" +
+                data.identifyValidDate.substring(4, 6) +
+                "-" +
+                data.identifyValidDate.substring(6, 8);
+              ower1Form.value.identifyValidEndDate = data.identifyValidEndDate?data.identifyValidEndDate==='长期'?'9999-12-31':
+                data.identifyValidEndDate.substring(0, 4) +
+                "-" +
+                data.identifyValidEndDate.substring(4, 6) +
+                "-" +
+                data.identifyValidEndDate.substring(6, 8):''
+              ower1Form.value.age = getAgeByIdCard(data.identifyNumber)
+              ower1Form.value.gender = data.identifyIssuedCom
+              ower1Form.value.email = data.email
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'tbrb':
+        tbrBack.value = result.downloadUrl
+        tbrBackFile.value = files
+        if(tbrFrontFile.value&&tbrBackFile.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', tbrFrontFile.value)
+          fileParams.append('image2', tbrBackFile.value)
+          api.additionalApi.idCard(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data.customerInfo
+              ower1Form.value.name = data.name
+              ower1Form.value.mobile = data.mobile
+              ower1Form.value.addr = data.addr
+              ower1Form.value.identifyNumber = data.identifyNumber
+              ower1Form.value.identifyValidDate =
+                data.identifyValidDate.substring(0, 4) +
+                "-" +
+                data.identifyValidDate.substring(4, 6) +
+                "-" +
+                data.identifyValidDate.substring(6, 8);
+              ower1Form.value.identifyValidEndDate = data.identifyValidEndDate?data.identifyValidEndDate==='长期'?'9999-12-31':
+                data.identifyValidEndDate.substring(0, 4) +
+                "-" +
+                data.identifyValidEndDate.substring(4, 6) +
+                "-" +
+                data.identifyValidEndDate.substring(6, 8): ''
+              ower1Form.value.age = getAgeByIdCard(data.identifyNumber)
+              ower1Form.value.gender = data.identifyIssuedCom
+              ower1Form.value.email = data.email
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'tbryyzz':
+        tbryyzzFront.value = result.downloadUrl
+        tbryyzzFrontFile.value = files
+        if(tbryyzzFront.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', tbryyzzFrontFile.value)
+          api.additionalApi.businessLicense(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data
+              ower1Form.value.identifyNumber = data.socialCreditCode
+              ower1Form.value.company = data.company
+              ower1Form.value.types = data.types
+              ower1Form.value.address = data.address
+              ower1Form.value.legalRepresentative = data.legalRepresentative
+              ower1Form.value.registeredCapital = data.registeredCapital
+              ower1Form.value.businessScope = data.businessScope
+            }
+          })
+        }
+      case 'bbrf':
+        bbrFront.value = result.downloadUrl
+        bbrFrontFile.value = files
+        if(bbrFrontFile.value&&bbrBackFile.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', bbrFrontFile.value)
+          fileParams.append('image2', bbrBackFile.value)
+          api.additionalApi.idCard(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data.customerInfo
+              ower2Form.value.name = data.name
+              ower2Form.value.mobile = data.mobile
+              ower2Form.value.addr = data.addr
+              ower2Form.value.identifyNumber = data.identifyNumber
+              ower2Form.value.identifyValidDate =
+                data.identifyValidDate.substring(0, 4) +
+                "-" +
+                data.identifyValidDate.substring(4, 6) +
+                "-" +
+                data.identifyValidDate.substring(6, 8);
+              ower2Form.value.identifyValidEndDate = data.identifyValidEndDate?data.identifyValidEndDate==='长期'?'9999-12-31':
+                data.identifyValidEndDate.substring(0, 4) +
+                "-" +
+                data.identifyValidEndDate.substring(4, 6) +
+                "-" +
+                data.identifyValidEndDate.substring(6, 8):''
+              ower2Form.value.age = getAgeByIdCard(data.identifyNumber)
+              ower2Form.value.gender = data.identifyIssuedCom
+              ower2Form.value.email = data.email
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'bbrb':
+        bbrBack.value = result.downloadUrl
+        bbrBackFile.value = files
+        if(bbrFrontFile.value&&bbrBackFile.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', bbrFrontFile.value)
+          fileParams.append('image2', bbrBackFile.value)
+          api.additionalApi.idCard(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data.customerInfo
+              ower2Form.value.name = data.name
+              ower2Form.value.mobile = data.mobile
+              ower2Form.value.addr = data.addr
+              ower2Form.value.identifyNumber = data.identifyNumber
+              ower2Form.value.identifyValidDate =
+                data.identifyValidDate.substring(0, 4) +
+                "-" +
+                data.identifyValidDate.substring(4, 6) +
+                "-" +
+                data.identifyValidDate.substring(6, 8);
+              ower2Form.value.identifyValidEndDate = data.identifyValidEndDate?data.identifyValidEndDate==='长期'?'9999-12-31':
+                data.identifyValidEndDate.substring(0, 4) +
+                "-" +
+                data.identifyValidEndDate.substring(4, 6) +
+                "-" +
+                data.identifyValidEndDate.substring(6, 8): ''
+              ower2Form.value.age = getAgeByIdCard(data.identifyNumber)
+              ower2Form.value.gender = data.identifyIssuedCom
+              ower2Form.value.email = data.email
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+        break;
+      case 'bbryyzz':
+        bbryyzzFront.value = result.downloadUrl
+        bbryyzzFrontFile.value = files
+        if(tbryyzzFront.value) {
+          const fileParams = new FormData()
+          fileParams.append('image1', bbryyzzFrontFile.value)
+          api.additionalApi.businessLicense(fileParams).then((res: any) => {
+            if(res.code == 200) {
+              const data = res.data
+              ower2Form.value.identifyNumber = data.socialCreditCode
+              ower2Form.value.company = data.company
+              ower2Form.value.types = data.types
+              ower2Form.value.address = data.address
+              ower2Form.value.legalRepresentative = data.legalRepresentative
+              ower2Form.value.registeredCapital = data.registeredCapital
+              ower2Form.value.businessScope = data.businessScope
+            }
+          })
+        }
+    }
+  } else {
+    ElMessage({
+      message: msg,
+      type: 'error'
+    })
+  }
+}
+
+const handleCancel = () => {
+  emit('close')
+}
+
+const handleConfirm = () => {
+  let data = {
+    carForm: {...carForm.value},
+    owerForm: {
+      ...owerForm.value,
+      identifyType: btn.value.ownerShow === '车主身份证'?'01':btn.value.ownerShow === '车主营业执照'?'02':''
+    },
+    ower1Form: {
+      ...ower1Form.value,
+      identifyType: btn.value.owner1Show === '投保人身份证'?'01':btn.value.owner1Show === '投保人营业执照'?'02':''
+    },
+    ower2Form: {
+      ...ower2Form.value,
+      identifyType: btn.value.owner2Show === '被保人身份证'?'01':btn.value.owner2Show === '被保人营业执照'?'02':''
+    }
+  }
+  console.log(123123123, data)
+  emit('close', data)
+}
+
+</script>
+
+<style scoped lang="scss">
+.recognition{
+  max-height: 600px;
+  overflow-y: auto;
+  overflow-x: hidden;
+  .tips{
+    border: 1px solid #1F92FF;
+    background: #EEF7FF;
+    border-radius: 4px;
+    padding: 0 16px;
+    color: #333333;
+    .title{
+      font-weight: 600;
+    }
+    .introduce{
+      font-size: 14px;
+    }
+  }
+  .upload-box{
+    width: 300px;
+    height: 180px;
+    background: #EEEEEE;
+    border: 1px solid #EEEEEE;
+    border-radius: 4px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    .icon-box{
+      text-align: center;
+      color: #999999;
+      p{
+        margin: 0;
+        font-size: 14px;
+      }
+    }
+    .upload-image{
+      width: 100%;
+      height: 100%;
+    }
+  }
+  .m-b-5{
+    margin-bottom: 5px !important;
+  }
+  .type{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin: 24px 0 16px;
+    .btnItem{
+      border: 1px solid #E5E5E5;
+      padding: 5px 12px;
+      cursor: pointer;
+    }
+    .btnActive{
+      border: 1px solid #0083FF;
+      color: #FFFFFF;
+      background: linear-gradient( 83deg, #4FCAFF 0%, #2B62FF 100%), #0083FF;
+    }
+  }
+  .footer{
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 219 - 0
src/views/insurancePolicy/modules/underwriting.vue

@@ -0,0 +1,219 @@
+<template>
+  <div class="underwriting">
+    <div class="title">
+      <span class="text">影像信息</span>
+      <el-button plain type="primary" icon="Plus" size="small">添加影响资料</el-button>
+    </div>
+    <div class="images">
+      <el-row :gutter="20">
+        <el-col class="col-m-b-16" style="margin-bottom: 16px" :span="6" v-for="(item, index) in images" :key="index">
+          <el-upload v-if="!item.fileUrl" :auto-upload="false" :show-file-list="false"@change="uploadImage($event, item)">
+            <div class="upload-box">
+              <div class="icon-box">
+                <el-icon style="font-size: 20px"><Camera /></el-icon>
+                <p>{{ item.text }}</p>
+              </div>
+            </div>
+          </el-upload>
+          <div class="fileInfo" v-else>
+            <div class="file-box">
+              <div class="btn-top">
+                <img class="image-close" @click="deleteImage(item)" src="@/assets/images/close.png" />
+              </div>
+              <img class="file-img" :src="item.fileUrl" />
+              <div class="btn-bottom">
+                <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, item)" style="display: flex; align-items: center; justify-content: center; color: white">
+                  <el-icon><Upload /></el-icon>重新上传
+                </el-upload>
+                <div class="width-50" style="display: flex; align-items: center; justify-content: center; color: white; cursor:pointer;" @click="downloadImage(item)">
+                  <el-icon><Download /></el-icon>下载资料
+                </div>
+              </div>
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="title">
+      <span class="text">特别约定</span>
+    </div>
+    <el-table
+      :data="tableData"
+    >
+      <el-table-column type="selection" width="50" align="center"></el-table-column>
+      <el-table-column label="特约类型" prop="" align="center"></el-table-column>
+      <el-table-column label="特约名称" prop="" align="center"></el-table-column>
+      <el-table-column label="编码" prop="" align="center"></el-table-column>
+      <el-table-column label="特别约定内容" prop="" width="300" align="center">
+        <template #default="scope">
+          <div v-if="scope.row.state === 1">特别约定内容</div>
+          <el-input type="textarea" v-if="scope.row.state === 2"></el-input>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="footer">
+      <el-button plain type="primary" @click="handleSubmit(false)">取消</el-button>
+      <el-button type="primary" @click="handleSubmit(true)">提交核保</el-button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { ElMessage } from 'element-plus'
+
+const emit = defineEmits(['close'])
+
+let images = ref([
+  {
+    text: '111',
+    fileName: '',
+    fileUrl: '',
+    imageType: '',
+    imageId: ''
+  },
+  {
+    text: '111',
+    fileName: '',
+    fileUrl: '',
+    imageType: '',
+    imageId: ''
+  },
+  {
+    text: '111',
+    fileName: '',
+    fileUrl: '',
+    imageType: '',
+    imageId: ''
+  },
+  {
+    text: '111',
+    fileName: '',
+    fileUrl: '',
+    imageType: '',
+    imageId: ''
+  },
+  {
+    text: '111',
+    fileName: '',
+    fileUrl: '',
+    imageType: '',
+    imageId: ''
+  },
+])
+
+// 图片删除
+const deleteImage = (item) => {
+  item.fileUrl = ''
+  item.imageId = ''
+  item.fileName = ''
+}
+
+// 上传图片
+const uploadImage = async (file, item) => {
+  let files = file.raw
+  const params = new FormData(); // 声明formData数据类型
+  params.append("file", files);
+  params.append("type", "image");
+  const { code, data, msg } = await api.commonApi.fileUpload(params)
+  if(code == 200) {
+    let result: any = {...data}
+    item.fileUrl = result.downloadUrl
+    item.imageId = result.id
+    item.fileName = result.fileName
+  } else {
+    ElMessage({
+      message: msg,
+      type: 'error'
+    })
+  }
+}
+
+// 下载
+// 图片下载
+const download = (url, name) => {
+  let image = new Image();
+  // 解决跨域 Canvas 污染问题
+  image.setAttribute("crossOrigin", "anonymous");
+  image.onload = function () {
+    let canvas = document.createElement("canvas");
+    canvas.width = image.width;
+    canvas.height = image.height;
+    let context = canvas.getContext("2d");
+    context.drawImage(image, 0, 0, image.width, image.height);
+    let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
+    let a = document.createElement("a"); // 生成一个a元素
+    let event = new MouseEvent("click"); // 创建一个单击事件
+    a.download = name; // 设置图片名称
+    a.href = url; // 将生成的URL设置为a.href属性
+    a.dispatchEvent(event); // 触发a的单击事件
+  }
+  image.src = url
+}
+const downloadImage = (item) => {
+  download(item.fileUrl,item.fileName)
+}
+
+// 特别约定
+let tableData = ref([
+  {
+    state: 1,
+  },{
+    state: 2
+  }
+])
+
+// 提交核保
+const handleSubmit = (bool) => {
+  if(bool) {
+    emit('close', false)
+  } else {
+    emit('close', false)
+  }
+}
+
+
+</script>
+
+<style scoped lang="scss">
+.underwriting{
+  max-height: 400px;
+  overflow-y: auto;
+  overflow-x: hidden;
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    margin-bottom: 10px;
+    .text{
+      margin-right: 10px;
+      border-left: 3px solid #00a0f4;
+      padding-left: 10px;
+    }
+  }
+  .upload-box{
+    width: 208px;
+    height: 130px;
+    background: #EEEEEE;
+    border: 1px solid #EEEEEE;
+    border-radius: 4px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    .icon-box{
+      text-align: center;
+      color: #999999;
+      p{
+        margin: 0 0;
+        font-size: 14px;
+      }
+    }
+  }
+  .footer{
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+    margin-top: 10px;
+  }
+}
+</style>

+ 144 - 0
src/views/insurancePolicy/order.vue

@@ -0,0 +1,144 @@
+<template>
+  <div class="order">
+    <el-form class="search" :model="orderForm" label-width="80">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="订单号">
+            <el-input placeholder="输入订单号查找" v-model="orderForm.orderNo"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="车牌号">
+            <el-input placeholder="输入车牌号查找" v-model="orderForm.carNo"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="报价时间">
+            <el-date-picker
+              v-model="orderForm.range"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8"></el-col>
+        <el-col :span="8"></el-col>
+        <el-col :span="8" style="display: flex; justify-content: flex-end">
+          <el-button plain>取消</el-button>
+          <el-button type="primary">搜索</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      style="margin-top: 24px; width: 100%"
+      height="640"
+    >
+      <el-table-column label="订单号" prop="a" width="200"></el-table-column>
+      <el-table-column label="保险公司" prop="b" width="200"></el-table-column>
+      <el-table-column label="车牌号" prop="c" width="200"></el-table-column>
+      <el-table-column label="车架号" prop="d" width="200"></el-table-column>
+      <el-table-column label="状态" prop="e" width="200"></el-table-column>
+      <el-table-column label="报价时间" prop="f" width="200"></el-table-column>
+      <el-table-column label="险种" prop="g" width="200"></el-table-column>
+      <el-table-column label="保费计算" prop="h" width="200"></el-table-column>
+      <el-table-column label="业务员信息" prop="i" width="200"></el-table-column>
+      <el-table-column label="业务员类型" prop="j" width="200"></el-table-column>
+      <el-table-column label="出单机构" prop="k" width="200"></el-table-column>
+      <el-table-column label="出单协议" prop="l" width="200"></el-table-column>
+      <el-table-column label="录单人" prop="m" width="200"></el-table-column>
+      <el-table-column label="签单时间" prop="n" width="200"></el-table-column>
+      <el-table-column label="支付时间" prop="o" width="200"></el-table-column>
+      <el-table-column label="交强险" prop="p" width="200"></el-table-column>
+      <el-table-column label="商业险" prop="q" width="200"></el-table-column>
+      <el-table-column label="驾意险" prop="r" width="200"></el-table-column>
+      <el-table-column label="操作" width="200" fixed="right">
+        <template #default="scope">
+          <el-button link type="primary">详情</el-button>
+          <el-button link type="primary">上传影像</el-button>
+          <el-button link type="primary">重新核保</el-button>
+          <el-button link type="primary">核保</el-button>
+          <el-button link type="primary">分享</el-button>
+          <el-button link type="primary" @click="payCode(scope)">支付码</el-button>
+          <el-button link type="danger">删除订单</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+    <el-dialog
+      v-model="payCodeShow"
+      width="400"
+      title="支付码"
+    >
+      <img class="payCode" src="">
+      <template #footer>
+        <el-button plain type="danger">撤销二维码</el-button>
+        <el-button plain type="primary">保存二维码</el-button>
+        <el-button plain type="primary">复制链接</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+let orderForm = ref({
+  orderNo: '',
+  carNo: '',
+  range: []
+})
+let tableData = ref([{},{},{},{},{},{},{},{},{},{}])
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+const initData = () => {
+
+}
+
+// 支付码
+let payCodeShow = ref(false)
+const payCode = (scope) => {
+  payCodeShow.value = true
+}
+</script>
+
+<style scoped lang="scss">
+.order{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+  .payCode{
+    display: block;
+    width: 140px;
+    height: 140px;
+    margin: 10px auto;
+  }
+}
+</style>

+ 3 - 3
src/views/operationManagement/modules/addTeam.vue

@@ -65,9 +65,9 @@ let teamRules = ref<FormRules>({
   deptId: [
     { required: true, trigger: "change", message: "请选择机构" }
   ],
-  // managerId: [
-  //   { required: true, trigger: "change", message: "请选择管理人" }
-  // ]
+  managerId: [
+    { required: true, trigger: "change", message: "请选择管理人" }
+  ]
 })
 
 // 编辑初始化数据

+ 85 - 55
src/views/quoteConfig/project/modules/projectAdd.vue

@@ -34,7 +34,7 @@
               </div>
             </div>-->
             <div style="width: 60%">
-              <rule-condition-container :rulesAttrList="rulesAttrList"></rule-condition-container>
+              <rule-condition-container :rulesAttrList="rulesAttrList" @Del="handleDel"></rule-condition-container>
             </div>
             <rule-condition :ruleConditionVisible="rulesShow" :attrIdList="rulesAttrList" @save="saveRule"></rule-condition>
           </div>
@@ -67,7 +67,7 @@
                         <el-button link type="primary" @click="getJYXDetail(scope.row)">{{ scope.row.productName }}</el-button>
                       </template>
                     </el-table-column>
-                    <el-table-column label="客户端状态" prop="selectedStatus">
+                    <el-table-column label="客户端状态" prop="selectedStatus" v-if="projectAddFrom.schemeType!=1">
                       <template #default="scope">
                         <el-select v-model="scope.row.selectedStatus">
                           <el-option label="默认不选中" key="1" value="1"></el-option>
@@ -222,62 +222,89 @@ const numberChange = (e, row) => {
 
 // 新增的时候初始化已有的方案
 const initProduct = (e) => {
-  api.projectApi.getSchemeByCompany({
-    companyId: projectAddFrom.value.companyId,
-    productId: projectAddFrom.value.productId,
-    schemeType: projectAddFrom.value.schemeType
-  }).then(res => {
-    if(res.code == 200) {
-      if(res.data && res.data.schemeList.length > 0) {
-        res.data.schemeList.forEach(item => {
-          item.drivingList = item.drivingIntentionList
-          item.tableData = item.schemeInsuranceList.map(sub => {
-            let obj = insuranceTypeList.value.find(a => a.id === sub.insuranceId)
-            return {
-              ...sub,
-              optionId: res.data.schemeType===1?`${sub.optionId[0]}`:sub.optionId,
-              moneyId: res.data.schemeType===1?`${sub.optionId[0]}`:sub.optionId,
-              options: obj.options
-            }
+  console.log(123, e)
+  if(e == '034002') {
+    let obj = insuranceTypeList.value.find(item => item.id == '2')
+    obj.insuranceId = obj.id
+    projectAddFrom.value.schemeList.forEach(item => {
+      item.drivingList = []
+      item.tableData = [obj]
+    })
+  } else if(e == '0330034002') {
+    let obj = insuranceTypeList.value.filter(item => item.id == '2' || item.id == '19')
+    if(obj) {
+      obj.forEach(item => {
+        item.insuranceId = item.id
+      })
+      projectAddFrom.value.schemeList.forEach(item => {
+        item.drivingList = []
+        item.tableData = [...obj]
+      })
+    }
+  } else {
+    projectAddFrom.value.schemeList.forEach(item => {
+      item.drivingList = []
+      item.tableData = []
+    })
+  }
+  if(projectAddFrom.value.companyId&&projectAddFrom.value.productId&&projectAddFrom.value.schemeType) {
+    api.projectApi.getSchemeByCompany({
+      companyId: projectAddFrom.value.companyId,
+      productId: projectAddFrom.value.productId,
+      schemeType: projectAddFrom.value.schemeType
+    }).then(res => {
+      if(res.code == 200) {
+        if(res.data && res.data.schemeList.length > 0) {
+          res.data.schemeList.forEach(item => {
+            item.drivingList = item.drivingIntentionList
+            item.tableData = item.schemeInsuranceList.map(sub => {
+              let obj = insuranceTypeList.value.find(a => a.id === sub.insuranceId)
+              return {
+                ...sub,
+                optionId: res.data.schemeType===1?`${sub.optionId[0]}`:sub.optionId,
+                moneyId: res.data.schemeType===1?`${sub.optionId[0]}`:sub.optionId,
+                options: obj.options
+              }
+            })
           })
-        })
-        projectAddFrom.value = res.data
-        rulesAttrList.value = res.data.ruleAttrs
-      }
-    } else {
-      projectAddFrom.value.ruleAttrs = []
-      if(e == '0330' || e == '0330034002' || e == '0330034001') {
-        let obj = insuranceTypeList.value.find(a => a.alias == '交强险')
-        if(obj) {
-          obj.insuranceId = obj.id
-          let sub = obj.options.find(b => b.label == '投保')
-          obj.optionId = projectAddFrom.value.schemeType==1?sub?.id:projectAddFrom.value.schemeType==2?[sub?.id]:''
-          obj.moneyId = sub?.id
+          projectAddFrom.value = res.data
+          rulesAttrList.value = res.data.ruleAttrs
         }
-        projectAddFrom.value.schemeList  = [{
-          schemeName: '',
-          description: '',
-          tableData: [obj],
-          drivingList: [],
-          schemeInsuranceList: [obj],
-          drivingIntentionList: []
-        }]
       } else {
-        projectAddFrom.value.schemeList  = [{
-          schemeName: '',
-          description: '',
-          tableData: [],
-          drivingList: [],
-          schemeInsuranceList: [],
-          drivingIntentionList: []
-        }]
+        projectAddFrom.value.ruleAttrs = []
+        if(e == '0330' || e == '0330034002' || e == '0330034001') {
+          let obj = insuranceTypeList.value.find(a => a.alias == '交强险')
+          if(obj) {
+            obj.insuranceId = obj.id
+            let sub = obj.options.find(b => b.label == '投保')
+            obj.optionId = projectAddFrom.value.schemeType==1?sub?.id:projectAddFrom.value.schemeType==2?[sub?.id]:''
+            obj.moneyId = sub?.id
+          }
+          projectAddFrom.value.schemeList  = [{
+            schemeName: '',
+            description: '',
+            tableData: [obj],
+            drivingList: [],
+            schemeInsuranceList: [obj],
+            drivingIntentionList: []
+          }]
+        } else {
+          projectAddFrom.value.schemeList  = [{
+            schemeName: '',
+            description: '',
+            tableData: [],
+            drivingList: [],
+            schemeInsuranceList: [],
+            drivingIntentionList: []
+          }]
+        }
+        // ElMessage({
+        //   message: res.msg,
+        //   type: 'warning'
+        // })
       }
-      // ElMessage({
-      //   message: res.msg,
-      //   type: 'warning'
-      // })
-    }
-  })
+    })
+  }
 }
 
 // 险种
@@ -345,6 +372,9 @@ const saveRule = (data) => {
   }
   rulesShow.value = false
 }
+const handleDel = (index) => {
+  rulesAttrList.value.splice(index, 1)
+}
 
 // 险种类型
 let insuranceType = ref([])
@@ -392,7 +422,7 @@ const handleClose = ( obj ) => {
 
 // 险种删除
 const insuranceTypeDel = (item, row) => {
-  let data = item.tableData.filter(a => a.id != row.id)
+  let data = item.tableData.filter(a => a.insuranceId != row.insuranceId)
   item.tableData = [...data]
 }