Explorar el Código

Merge remote-tracking branch 'origin/wuguojie' into dev

# Conflicts:
#	.env.development
wuguojie hace 1 año
padre
commit
1c6f0a8889
Se han modificado 54 ficheros con 9871 adiciones y 198 borrados
  1. 2 2
      .env.development
  2. 8 1
      src/api/index.ts
  3. 27 0
      src/api/modules/additional.ts
  4. 2 2
      src/api/modules/common.ts
  5. 4 2
      src/api/modules/insurance.ts
  6. 14 0
      src/api/modules/insurancePolicy.ts
  7. 8 0
      src/api/modules/log.ts
  8. BIN
      src/assets/images/additional/car1.png
  9. 0 0
      src/assets/images/additional/car2.png
  10. BIN
      src/assets/images/additional/file1.png
  11. BIN
      src/assets/images/additional/file2.png
  12. 0 0
      src/assets/images/additional/history1.png
  13. BIN
      src/assets/images/additional/history2.png
  14. 0 0
      src/assets/images/additional/insurance1.png
  15. BIN
      src/assets/images/additional/insurance2.png
  16. 0 0
      src/assets/images/additional/ower1.png
  17. BIN
      src/assets/images/additional/ower2.png
  18. 0 0
      src/assets/images/additional/quote1.png
  19. BIN
      src/assets/images/additional/quote2.png
  20. BIN
      src/assets/images/additional/right.png
  21. BIN
      src/assets/images/additional/tips.png
  22. BIN
      src/assets/images/insurancePolicy/company.png
  23. BIN
      src/assets/images/insurancePolicy/sao.png
  24. 10 0
      src/assets/styles/common/style.scss
  25. 1 1
      src/components/ruleCondition/index.vue
  26. 8 3
      src/layouts/components/DrivingType/index.vue
  27. 0 1
      src/layouts/components/InsuranceType/index.vue
  28. 14 2
      src/router/modules/additionalOrder.ts
  29. 47 0
      src/router/modules/insurancePolicy.ts
  30. 38 0
      src/router/modules/system.ts
  31. 16 0
      src/router/routes.ts
  32. 2 2
      src/store/modules/user.ts
  33. 1662 5
      src/views/additionalOrder/additional/index.vue
  34. 83 0
      src/views/additionalOrder/additional/modules/carTypeSelect.vue
  35. 1589 0
      src/views/additionalOrder/additional/modules/imageData.vue
  36. 180 0
      src/views/additionalOrder/additional/modules/insuranceSelect.vue
  37. 154 0
      src/views/additionalOrder/additional/modules/salesmanSelect.vue
  38. 470 5
      src/views/additionalOrder/order/index.vue
  39. 833 0
      src/views/additionalOrder/order/orderDetail.vue
  40. 220 5
      src/views/additionalOrder/temporarily/index.vue
  41. 10 0
      src/views/contentManagement/modules/addAdvertisement.vue
  42. 2442 0
      src/views/insurancePolicy/index.vue
  43. 30 0
      src/views/insurancePolicy/modules/calculating.vue
  44. 1067 0
      src/views/insurancePolicy/modules/recognition.vue
  45. 219 0
      src/views/insurancePolicy/modules/underwriting.vue
  46. 144 0
      src/views/insurancePolicy/order.vue
  47. 0 1
      src/views/operationManagement/modules/addOperation.vue
  48. 3 3
      src/views/operationManagement/modules/addTeam.vue
  49. 5 1
      src/views/personnel/modules/editInstitution.vue
  50. 86 76
      src/views/quoteConfig/insuranceCompanyAccount/insuranceCompanyAccount.vue
  51. 91 29
      src/views/quoteConfig/insuranceCompanyAccount/modules/insuranceAccountAdd.vue
  52. 97 57
      src/views/quoteConfig/project/modules/projectAdd.vue
  53. 168 0
      src/views/systemManage/logManage/index.vue
  54. 117 0
      src/views/systemManage/logManage/logDetail.vue

+ 2 - 2
.env.development

@@ -4,10 +4,10 @@ VITE_APP_SETTING = true
 VITE_APP_TITLE = 租户平台
 # 接口请求地址,会设置到 axios 的 baseURL 参数上
 # VITE_APP_API_BASEURL = https://test.baoxianzhanggui.com/web-api #默认地址
-# VITE_APP_API_BASEURL = http://192.168.0.253:8001  #田智
+VITE_APP_API_BASEURL = http://192.168.0.253:8001  #田智
 # VITE_APP_API_BASEURL = http://192.168.0.55:8001  #董鑫
 # VITE_APP_API_BASEURL = http://192.168.0.106:8001  #屈晨
-VITE_APP_API_BASEURL = http://192.168.0.59:8001  #徐强
+# VITE_APP_API_BASEURL = http://192.168.0.59:8001  #徐强
 
 # 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
 VITE_APP_DEBUG_TOOL =

+ 8 - 1
src/api/index.ts

@@ -26,6 +26,10 @@ import agreementApi  from "@/api/modules/agreement";
 import lotteryApi from '@/api/modules/lottery.ts';
 import insuranceApi from '@/api/modules/insurance.ts'
 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,
@@ -121,6 +125,9 @@ const api = {
   advertisementApi:advertisementApi(axiosInstance),
   agreementApi:agreementApi(axiosInstance),
   insuranceApi: insuranceApi(axiosInstance),
-  projectApi: projectApi(axiosInstance)
+  projectApi: projectApi(axiosInstance),
+  additionalApi: additionalApi(axiosInstance),
+  logApi: logApi(axiosInstance),
+  insurancePolicyApi: insurancePolicyApi(axiosInstance)
 }
 export default api

+ 27 - 0
src/api/modules/additional.ts

@@ -0,0 +1,27 @@
+import { ApiInstance } from '../type'
+
+/*
+* 性别        gender
+  民族        nation
+  婚姻状况     marriage
+  政治面貌     political_status
+  健康状况     health_status
+  学历        educational
+  银行        bank_info
+* */
+const additionalApi = (axiosInstance: ApiInstance) => ({
+  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), // 暂存/提交
+  pageList: (data: any) => axiosInstance.post('/supplementOrder/pageList', data), // 订单列表
+  deleteById: (data: string) => axiosInstance.get(`/supplementOrder/deleteById?id=${data}`), // 订单删除
+  selectById: (data: string) => axiosInstance.get(`/supplementOrder/selectById?id=${data}`), // 详情
+  updateOrders: (data: any) => axiosInstance.post('/supplementOrder/updateOrders', data), // 编辑
+})
+
+export default additionalApi
+

+ 2 - 2
src/api/modules/common.ts

@@ -1,13 +1,13 @@
 import { ApiInstance } from '../type'
 
-/*
-* 性别        gender
+/** 性别        gender
   民族        nation
   婚姻状况     marriage
   政治面貌     political_status
   健康状况     health_status
   学历        educational
   银行        bank_info
+  证件        taxpayerIdentifier
 * */
 const commonApi = (axiosInstance: ApiInstance) => ({
   personInfo: (data: string) => axiosInstance.get(`/dict/get?dictCode=${data}`),

+ 4 - 2
src/api/modules/insurance.ts

@@ -35,12 +35,14 @@ const insuranceApi = (axiosInstance: ApiInstance) => ({
   leftList: (data: any) => axiosInstance.get(`/esmInsCompany/gainTopList?type=${data}`), //获取顶级保险公司
   getDeptTree: (data: { sysCode: string }) => axiosInstance.post('/dept/getDeptTree', data), // 归属
   addAgreementAttribution: (data: AddAgreementAttribution) => axiosInstance.post('/manager/attribution/addAgreementAttribution', data), // 新增
-  getPtlInsAttributionTemplate: (data: { insCompanyId: string }) => axiosInstance.post('/manager/attributionTemplate/getPtlInsAttributionTemplate', data), // 配置
+  getPtlInsAttributionTemplate: (data: { insCompanyId: string, apiType: string }) => axiosInstance.post('/manager/attributionTemplate/getPtlInsAttributionTemplate', data), // 配置
   getLoginUrl: (data: { companyId: string }) => axiosInstance.post('/manager/attribution/getLoginUrl', data), // 登录地址
   getAgreementAttribution: (data: { id: string }) => axiosInstance.post('/manager/attribution/getAgreementAttribution', data), // 详情
   updateAgreementAttribution: (data: any) => axiosInstance.post('/manager/attribution/updateAgreementAttribution', data), // 编辑
   enableAgreementAttribution: (data: { ids: string[] }) => axiosInstance.post('/manager/attribution/enableAgreementAttribution', data), // 启用
   disableAgreementAttribution: (data: { ids: string[] }) => axiosInstance.post('/manager/attribution/disableAgreementAttribution', data), // 禁用
-  deleteAgreementAttribution: (data: { ids: string[] }) => axiosInstance.post('/manager/attribution/deleteAgreementAttribution', data)
+  deleteAgreementAttribution: (data: { ids: string[] }) => axiosInstance.post('/manager/attribution/deleteAgreementAttribution', data), // 删除
+  deptTree: (data: { id: string, deptName?: string }) => axiosInstance.get(`/manager/attribution/deptTree?id=${data.id}&deptName=${data.deptName}`), // 授权tree
+  authorization: (data: { id: string, deptIds: string[] }) => axiosInstance.post('/manager/attribution/authorization', data)
 })
 export default insuranceApi

+ 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

+ 8 - 0
src/api/modules/log.ts

@@ -0,0 +1,8 @@
+import { ApiInstance } from '../type'
+
+const logApi = (axiosInstance: ApiInstance) => ({
+  list: (data: any) => axiosInstance.post('/operatorTrajectory/list', data), // 列表
+  selectById: (data: string) => axiosInstance.get(`/operatorTrajectory/selectById?id=${data}`), // 详情
+})
+
+export default logApi

BIN
src/assets/images/additional/car1.png


+ 0 - 0
src/assets/images/additional/info.png → src/assets/images/additional/car2.png


BIN
src/assets/images/additional/file1.png


BIN
src/assets/images/additional/file2.png


+ 0 - 0
src/assets/images/additional/car.png → src/assets/images/additional/history1.png


BIN
src/assets/images/additional/history2.png


+ 0 - 0
src/assets/images/additional/insurance.png → src/assets/images/additional/insurance1.png


BIN
src/assets/images/additional/insurance2.png


+ 0 - 0
src/assets/images/additional/ower.png → src/assets/images/additional/ower1.png


BIN
src/assets/images/additional/ower2.png


+ 0 - 0
src/assets/images/additional/quote.png → src/assets/images/additional/quote1.png


BIN
src/assets/images/additional/quote2.png


BIN
src/assets/images/additional/right.png


BIN
src/assets/images/additional/tips.png


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


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


+ 10 - 0
src/assets/styles/common/style.scss

@@ -38,6 +38,12 @@ is-plain
 .col-33 {
   width: 33%;
 }
+.col-m-b-6 {
+  margin-bottom: 6px;
+}
+.col-m-b-16 {
+  margin-bottom: 16px;
+}
 
 /*
 表单样式
@@ -46,3 +52,7 @@ is-plain
   background: #FFFFFF;
   padding: 24px;
 }
+.white-m-p24{
+  background: #FFFFFF;
+  padding: 0 24px;
+}

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

@@ -261,7 +261,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':

+ 8 - 3
src/layouts/components/DrivingType/index.vue

@@ -35,7 +35,7 @@
       <el-col :span="11">
         <div style="display: flex; align-items: center; justify-content: space-between; margin: 8px 0">
           <span>已选: {{ selectedList.length }}份驾意险</span>
-          <el-button link type="primary">清空</el-button>
+          <el-button link type="primary" @click="clear">清空</el-button>
         </div>
         <div class="selectedList">
           <div style="display: flex; align-items: center; justify-content: space-between; margin: 10px" v-for="(JYX, index) in selectedList" :key="JYX.id">
@@ -131,6 +131,11 @@ const handleType = (item, index) => {
     }
   })
 }
+// 清空
+const clear = () => {
+  selectedList.value = []
+  treeRef.value!.setCheckedKeys([], true)
+}
 // 删除
 const handleDel = (item, index) => {
   selectedList.value.splice(index, 1)
@@ -145,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) {

+ 0 - 1
src/layouts/components/InsuranceType/index.vue

@@ -121,7 +121,6 @@ const handleConfirm = () => {
 // 修改数据
 let editIndex = ref(0)
 const initEditData = (data, index, type) => {
-  console.log(1111, data)
   editIndex.value = index
   insuranceType.value = type
   api.projectApi.getBusinessInsurance().then(res => {

+ 14 - 2
src/router/modules/additionalOrder.ts

@@ -3,9 +3,9 @@ import type { RouteRecordRaw } from 'vue-router'
 const Layout = () => import('@/layouts/index.vue')
 
 const routes: RouteRecordRaw = {
-  path: '/additionalOrder/index',
+  path: '/additionalOrder',
   component: Layout,
-  redirect: '/additionalOrder/additional/index',
+  redirect: '/additionalOrder/additional',
   name: 'AdditionalOrder',
   meta: {
     title: '补录订单',
@@ -60,6 +60,18 @@ const routes: RouteRecordRaw = {
         title: '订单管理',
         // auth:['role.add','role.view','role.delete','role.edit']
       },
+      children: [
+          {
+            path: 'orderDetail',
+            name: 'OrderDetail',
+            component: () => import('@/views/additionalOrder/order/orderDetail.vue'),
+            meta: {
+              title: '订单详情',
+              menu: false,
+              activeMenu: '/additionalOrder/order',
+            },
+          },
+      ]
     },
 
     {

+ 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

+ 38 - 0
src/router/modules/system.ts

@@ -0,0 +1,38 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw = {
+  path: '/systemManage',
+  component: Layout,
+  redirect: '/systemManage/logManage/index',
+  name: 'SystemManage',
+  meta: {
+    title: '系统管理',
+  },
+  children: [
+    {
+      path: 'logManage',
+      name: 'LogManage',
+      component: () => import('@/views/systemManage/logManage/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',
+          },
+        },
+      ]
+    }
+  ],
+}
+
+export default routes

+ 16 - 0
src/router/routes.ts

@@ -12,6 +12,8 @@ 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";
 // 固定路由(默认路由
 // console.log(useUserStore)
@@ -126,6 +128,20 @@ const asyncRoutes: Route.recordMainRaw[] = [
       icon: "i-uim:box",
     },
     children: [additionalOrder],
+  },
+  {
+    meta: {
+      title: '车险出单',
+      icon: "i-uim:box",
+    },
+    children: [insurancePolicy],
+  },
+  {
+    meta: {
+      title: '系统管理',
+      icon: "i-uim:box",
+    },
+    children: [systemManage],
   }
   // {
   //   meta: {

+ 2 - 2
src/store/modules/user.ts

@@ -36,9 +36,9 @@ const useUserStore = defineStore(
       const res = await api.userApi.login(data)
 
       localStorage.setItem('userName', data.userName)
-      localStorage.setItem('token', res.data)
+      localStorage.setItem('token', res.data.token)
       userName.value = data.userName
-      token.value = res.data
+      token.value = res.data.token
       avatar.value = 'https://fantastic-admin.hurui.me/logo.png'
       const result = await api.userApi.getCurUserInfo()
       localStorage.setItem('userDeptId', result.data.deptId)

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1662 - 5
src/views/additionalOrder/additional/index.vue


+ 83 - 0
src/views/additionalOrder/additional/modules/carTypeSelect.vue

@@ -0,0 +1,83 @@
+<template>
+  <div class="carTypeSelect">
+    <el-row :gutter="20">
+      <el-col :span="8">
+        <el-input v-model="searchValue" prefix-icon="Search" placeholder="请输入车辆识别代码查询"></el-input>
+      </el-col>
+      <el-col :span="8">
+        <el-button type="primary" @click="handleSearch">查询</el-button>
+      </el-col>
+    </el-row>
+    <el-table
+      ref="CarTypeRef"
+      row-key="a"
+      :data="tableData"
+      style="margin: 24px 0; max-height: 400px"
+      @select="handleSelect"
+    >
+      <el-table-column type="selection" width="80"></el-table-column>
+      <el-table-column label="厂牌型号代码" prop="a"></el-table-column>
+      <el-table-column label="厂牌型号" prop="b"></el-table-column>
+      <el-table-column label="新车购置价" prop="c"></el-table-column>
+      <el-table-column label="年款" prop="d"></el-table-column>
+      <el-table-column label="座位数" prop="e"></el-table-column>
+      <el-table-column label="排量" prop="f"></el-table-column>
+      <el-table-column label="配置" prop="g"></el-table-column>
+    </el-table>
+    <div class="footer">
+      <el-button plain @click="handleCancel">取消</el-button>
+      <el-button type="primary" @click="handleConfirm">确定</el-button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+
+const emits = defineEmits(['close'])
+const CarTypeRef = ref()
+
+// 查询
+let searchValue = ref('')
+const handleSearch = () => {
+
+}
+
+// 列表
+let selectItem = ref(null)
+let tableData = ref([
+  {
+    a: 1
+  },{
+    a: 2
+  },{
+    a: 3
+  }
+])
+const handleSelect = (val, row) => {
+  selectItem.value = row
+  if(val.length > 1) {
+    CarTypeRef.value.clearSelection()
+    CarTypeRef.value.toggleRowSelection(row);
+  }
+}
+
+// 取消
+const handleCancel = () => {
+  emits('close', selectItem.value)
+}
+// 确定
+const handleConfirm = () => {
+  emits('close', selectItem.value)
+}
+
+</script>
+
+<style scoped lang="scss">
+.carTypeSelect{
+  .footer{
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 1589 - 0
src/views/additionalOrder/additional/modules/imageData.vue

@@ -0,0 +1,1589 @@
+<template>
+  <div class="imageData">
+    <h3>车辆信息</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!drivingLicenseHomePage" :auto-upload="false" :show-file-list="false"@change="uploadImage($event, 1)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>行驶证主页</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(1)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="drivingLicenseHomePage" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 1)" 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(1)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!drivingLicenseReversePage" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 2)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>行驶证副页</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(2)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="drivingLicenseReversePage" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 2)" 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(2)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleRegistrationCertificate" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 3)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>机动车辆登记证书</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(3)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleRegistrationCertificate" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 3)" 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(3)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!carCertificate" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 4)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>新车合格证</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(4)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="carCertificate" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 4)" 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(4)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!purchaseInvoice" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 5)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>购车发票</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(5)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="purchaseInvoice" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 5)" 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(5)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <h3>车主信息</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!IDCardFront" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 6)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>车主身份证(正面)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(6)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="IDCardFront" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 6)" 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(6)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!IDCardBack" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 7)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>车主身份证(反面)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(7)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="IDCardBack" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 7)" 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(7)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!carBusinessLicense" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 8)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>车主营业执照</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(8)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="carBusinessLicense" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 8)" 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(8)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <h3>投保人信息</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuredIDCardFront" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 9)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>投保人身份证(正面)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(9)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuredIDCardFront" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 9)" 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(9)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuredIDCardBack" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 10)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>投保人身份证(反面)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(10)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuredIDCardBack" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 10)" 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(10)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuredCarBusinessLicense" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 11)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>投保人营业执照</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(11)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuredCarBusinessLicense" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 11)" 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(11)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <h3>被保人信息</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuredPersonIDCardFront" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 12)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>被投保人身份证(正面)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(12)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuredPersonIDCardFront" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 12)" 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(12)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuredPersonIDCardBack" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 13)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>被投保人身份证(反面)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(13)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuredPersonIDCardBack" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 13)" 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(13)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuredPersonCarBusinessLicense" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 14)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>被投保人营业执照</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(14)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuredPersonCarBusinessLicense" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 14)" 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(14)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <h3>关系证明</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!relationship" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 15)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>关系证明</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(15)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="relationship" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 15)" 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(15)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <h3>验车照</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarFrame" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 16)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(车架)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(16)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarFrame" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 16)" 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(16)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarBL" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 17)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(后左)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(17)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarBL" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 17)" 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(17)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarBR" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 18)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(后右)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(18)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarBR" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 18)" 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(18)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarFR" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 19)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(前右)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(19)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarFR" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 19)" 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(19)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarFL" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 20)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(前左)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(20)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarFL" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 20)" 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(20)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarFrant" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 21)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(正前)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(21)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarFrant" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 21)" 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(21)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarBack" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 22)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(正后)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(22)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarBack" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 22)" 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(22)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarPC" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 23)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(人车合影)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(23)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarPC" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 23)" 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(23)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarLogo" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 24)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(地标合影)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(24)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarLogo" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 24)" 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(24)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarWork" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 25)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(工作台)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(25)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarWork" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 25)" 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(25)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!vehicleCarWindow" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 26)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>验车照(天窗)</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(26)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="vehicleCarWindow" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 26)" 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(26)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <h3>上年商业险保单</h3>
+    <el-row :gutter="20">
+      <el-col class="col-m-b-16" :span="8">
+        <el-upload v-if="!insuranceFile" :auto-upload="false" :show-file-list="false" @change="uploadImage($event, 27)">
+          <div class="upload-box">
+            <div class="icon-box">
+              <el-icon style="font-size: 20px"><Camera /></el-icon>
+              <p>上年商业险保单</p>
+            </div>
+          </div>
+        </el-upload>
+        <div class="fileInfo" v-else>
+          <div class="file-box">
+            <div class="btn-top">
+              <img class="image-close" @click="deleteImage(27)" src="@/assets/images/close.png" />
+            </div>
+            <img class="file-img" :src="insuranceFile" />
+            <div class="btn-bottom">
+              <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 27)" 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(27)">
+                <el-icon><Download /></el-icon>下载资料
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <div class="footer">
+      <el-button plain @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";
+
+let fileForm = ref({})
+
+const emits = defineEmits(['close'])
+
+// 车辆信息
+let drivingLicenseHomePage = ref('') // 行驶证主页
+let drivingLicenseHomePageUrl = ref('') // 行驶证主页地址
+let drivingLicenseReversePage = ref('') // 行驶证副页
+let drivingLicenseReversePageUrl = ref('') // 行驶证副页地址
+let vehicleRegistrationCertificate = ref('') // 机动车辆登记证书
+let vehicleRegistrationCertificateUrl = ref('') // 机动车辆登记证书地址
+let carCertificate = ref('') // 新车合格证
+let carCertificateUrl = ref('') // 新车合格证地址
+let purchaseInvoice = ref('') // 购车发票
+let purchaseInvoiceUrl = ref('') // 购车发票地址
+// 车主信息
+let IDCardFront = ref('') // 身份证正面
+let IDCardFrontUrl = ref('') // 身份证正面地址
+let IDCardBack = ref('') // 身份证反面
+let IDCardBackUrl = ref('') // 身份证反面地址
+let carBusinessLicense = ref('') // 车主营业执照
+let carBusinessLicenseUrl = ref('') // 车主营业执照地址
+// 投保人信息
+let insuredIDCardFront = ref('') // 身份证正面
+let insuredIDCardFrontUrl = ref('') // 身份证正面地址
+let insuredIDCardBack = ref('') // 身份证反面
+let insuredIDCardBackUrl = ref('') // 身份证反面地址
+let insuredCarBusinessLicense = ref('') // 投保人营业执照
+let insuredCarBusinessLicenseUrl = ref('') // 投保人营业执照地址
+// 被投保人信息
+let insuredPersonIDCardFront = ref('') // 身份证正面
+let insuredPersonIDCardFrontUrl = ref('') // 身份证正面地址
+let insuredPersonIDCardBack = ref('') // 身份证反面
+let insuredPersonIDCardBackUrl = ref('') // 身份证反面地址
+let insuredPersonCarBusinessLicense = ref('') // 被投保人营业执照
+let insuredPersonCarBusinessLicenseUrl = ref('') // 被投保人营业执照地址
+// 关系证明
+let relationship = ref('') // 关系证明
+let relationshipUrl = ref('') // 关系证明地址
+//验车照
+let vehicleCarFrame = ref('') // 验车照车架
+let vehicleCarFrameUrl = ref('') // 验车照车架地址
+let vehicleCarBL = ref('') // 验车照后左
+let vehicleCarBLUrl = ref('') // 验车照后左地址
+let vehicleCarBR = ref('') // 验车照后右
+let vehicleCarBRUrl = ref('') // 验车照后右地址
+let vehicleCarFR = ref('') // 验车照前右
+let vehicleCarFRUrl = ref('') // 验车照前右地址
+let vehicleCarFL = ref('') // 验车照前左
+let vehicleCarFLUrl = ref('') // 验车照前左地址
+let vehicleCarFrant = ref('') // 验车照正前
+let vehicleCarFrantUrl = ref('') // 验车照正前地址
+let vehicleCarBack = ref('') // 验车照正后
+let vehicleCarBackUrl = ref('') // 验车照正后地址
+let vehicleCarPC = ref('') // 验车照人车合影
+let vehicleCarPCUrl = ref('') // 验车照人车合影地址
+let vehicleCarLogo = ref('') // 验车照地标合影
+let vehicleCarLogoUrl = ref('') // 验车照地标合影地址
+let vehicleCarWork = ref('') // 验车照工作台
+let vehicleCarWorkUrl = ref('') // 验车照工作台地址
+let vehicleCarWindow = ref('') // 验车照天窗
+let vehicleCarWindowUrl = ref('') // 验车照天窗地址
+// 上年商业险保单
+let insuranceFile = ref('') // 上年商业险保单
+let insuranceFileUrl = ref('') // 上年商业险保单地址
+
+// 图片删除
+const deleteImage = (type) => {
+  switch (type) {
+    case 1:
+      drivingLicenseHomePage.value = ''
+      drivingLicenseHomePageUrl.value = ''
+      break;
+    case 2:
+      drivingLicenseReversePage.value = ''
+      drivingLicenseReversePageUrl.value = ''
+      break;
+    case 3:
+      vehicleRegistrationCertificate.value = ''
+      vehicleRegistrationCertificateUrl.value = ''
+      break;
+    case 4:
+      carCertificate.value = ''
+      carCertificateUrl.value = ''
+      break;
+    case 5:
+      purchaseInvoice.value = ''
+      purchaseInvoiceUrl.value = ''
+      break;
+    case 6:
+      IDCardFront.value = ''
+      IDCardFrontUrl.value = ''
+      break;
+    case 7:
+      IDCardBack.value = ''
+      IDCardBackUrl.value = ''
+      break;
+    case 8:
+      carBusinessLicense.value = ''
+      carBusinessLicenseUrl.value = ''
+      break;
+    case 9:
+      insuredIDCardFront.value = ''
+      insuredIDCardFrontUrl.value = ''
+      break;
+    case 10:
+      insuredIDCardBack.value = ''
+      insuredIDCardBackUrl.value = ''
+      break;
+    case 11:
+      insuredCarBusinessLicense.value = ''
+      insuredCarBusinessLicenseUrl.value = ''
+      break;
+    case 12:
+      insuredPersonIDCardFront.value = ''
+      insuredPersonIDCardFrontUrl.value = ''
+      break;
+    case 13:
+      insuredPersonIDCardBack.value = ''
+      insuredPersonIDCardBackUrl.value = ''
+      break;
+    case 14:
+      insuredPersonCarBusinessLicense.value = ''
+      insuredPersonCarBusinessLicenseUrl.value = ''
+      break;
+    case 15:
+      relationship.value = ''
+      relationshipUrl.value = ''
+      break;
+    case 16:
+      vehicleCarFrame.value = ''
+      vehicleCarFrameUrl.value = ''
+      break;
+    case 17:
+      vehicleCarBL.value = ''
+      vehicleCarBLUrl.value = ''
+      break;
+    case 18:
+      vehicleCarBR.value = ''
+      vehicleCarBRUrl.value = ''
+      break;
+    case 19:
+      vehicleCarFR.value = ''
+      vehicleCarFRUrl.value = ''
+      break;
+    case 20:
+      vehicleCarFL.value = ''
+      vehicleCarFLUrl.value = ''
+      break;
+    case 21:
+      vehicleCarFrant.value = ''
+      vehicleCarFrantUrl.value = ''
+      break;
+    case 22:
+      vehicleCarBack.value = ''
+      vehicleCarBackUrl.value = ''
+      break;
+    case 23:
+      vehicleCarPC.value = ''
+      vehicleCarPCUrl.value = ''
+      break;
+    case 24:
+      vehicleCarLogo.value = ''
+      vehicleCarLogoUrl.value = ''
+      break;
+    case 25:
+      vehicleCarWork.value = ''
+      vehicleCarWorkUrl.value = ''
+      break;
+    case 26:
+      vehicleCarWindow.value = ''
+      vehicleCarWindowUrl.value = ''
+      break;
+    case 27:
+      insuranceFile.value = ''
+      insuranceFileUrl.value = ''
+      break;
+  }
+}
+
+// 上传图片
+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 1:
+        drivingLicenseHomePage.value = result.downloadUrl
+        drivingLicenseHomePageUrl.value = result.fileName
+        fileForm.value.drivingLicenseHomePage = result.id
+        break;
+      case 2:
+        drivingLicenseReversePage.value = result.downloadUrl
+        drivingLicenseReversePageUrl.value = result.fileName
+        fileForm.value.drivingLicenseReversePage = result.id
+        break;
+      case 3:
+        vehicleRegistrationCertificate.value = result.downloadUrl
+        vehicleRegistrationCertificateUrl.value = result.fileName
+        fileForm.value.vehicleRegistrationCertificate = result.id
+        break;
+      case 4:
+        carCertificate.value = result.downloadUrl
+        carCertificateUrl.value = result.fileName
+        fileForm.value.carCertificate = result.id
+        break;
+      case 5:
+        purchaseInvoice.value = result.downloadUrl
+        purchaseInvoiceUrl.value = result.fileName
+        fileForm.value.purchaseInvoice = result.id
+        break;
+      case 6:
+        IDCardFront.value = result.downloadUrl
+        IDCardFrontUrl.value = result.fileName
+        fileForm.value.IDCardFront = result.id
+        break;
+      case 7:
+        IDCardBack.value = result.downloadUrl
+        IDCardBackUrl.value = result.fileName
+        fileForm.value.IDCardBack = result.id
+        break;
+      case 8:
+        carBusinessLicense.value = result.downloadUrl
+        carBusinessLicenseUrl.value = result.fileName
+        fileForm.value.carBusinessLicense = result.id
+        break;
+      case 9:
+        insuredIDCardFront.value = result.downloadUrl
+        insuredIDCardFrontUrl.value = result.fileName
+        fileForm.value.insuredIDCardFront = result.id
+        break;
+      case 10:
+        insuredIDCardBack.value = result.downloadUrl
+        insuredIDCardBackUrl.value = result.fileName
+        fileForm.value.insuredIDCardBack = result.id
+        break;
+      case 11:
+        insuredCarBusinessLicense.value = result.downloadUrl
+        insuredCarBusinessLicenseUrl.value = result.fileName
+        fileForm.value.insuredCarBusinessLicense = result.id
+        break;
+      case 12:
+        insuredPersonIDCardFront.value = result.downloadUrl
+        insuredPersonIDCardFrontUrl.value = result.fileName
+        fileForm.value.insuredPersonIDCardFront = result.id
+        break;
+      case 13:
+        insuredPersonIDCardBack.value = result.downloadUrl
+        insuredPersonIDCardBackUrl.value = result.fileName
+        fileForm.value.insuredPersonIDCardBack = result.id
+        break;
+      case 14:
+        insuredPersonCarBusinessLicense.value = result.downloadUrl
+        insuredPersonCarBusinessLicenseUrl.value = result.fileName
+        fileForm.value.insuredPersonCarBusinessLicense = result.id
+        break;
+      case 15:
+        relationship.value = result.downloadUrl
+        relationshipUrl.value = result.fileName
+        fileForm.value.relationship = result.id
+        break;
+      case 16:
+        vehicleCarFrame.value = result.downloadUrl
+        vehicleCarFrameUrl.value = result.fileName
+        fileForm.value.vehicleCarFrame = result.id
+        break;
+      case 17:
+        vehicleCarBL.value = result.downloadUrl
+        vehicleCarBLUrl.value = result.fileName
+        fileForm.value.vehicleCarBL = result.id
+        break;
+      case 18:
+        vehicleCarBR.value = result.downloadUrl
+        vehicleCarBRUrl.value = result.fileName
+        fileForm.value.vehicleCarBR = result.id
+        break;
+      case 19:
+        vehicleCarFR.value = result.downloadUrl
+        vehicleCarFRUrl.value = result.fileName
+        fileForm.value.vehicleCarFR = result.id
+        break;
+      case 20:
+        vehicleCarFL.value = result.downloadUrl
+        vehicleCarFLUrl.value = result.fileName
+        fileForm.value.vehicleCarFL = result.id
+        break;
+      case 21:
+        vehicleCarFrant.value = result.downloadUrl
+        vehicleCarFrantUrl.value = result.fileName
+        fileForm.value.vehicleCarFrant = result.id
+        break;
+      case 22:
+        vehicleCarBack.value = result.downloadUrl
+        vehicleCarBackUrl.value = result.fileName
+        fileForm.value.vehicleCarBack = result.id
+        break;
+      case 23:
+        vehicleCarPC.value = result.downloadUrl
+        vehicleCarPCUrl.value = result.fileName
+        fileForm.value.vehicleCarPC = result.id
+        break;
+      case 24:
+        vehicleCarLogo.value = result.downloadUrl
+        vehicleCarLogoUrl.value = result.fileName
+        fileForm.value.vehicleCarLogo = result.id
+        break;
+      case 25:
+        vehicleCarWork.value = result.downloadUrl
+        vehicleCarWorkUrl.value = result.fileName
+        fileForm.value.vehicleCarWork = result.id
+        break;
+      case 26:
+        vehicleCarWindow.value = result.downloadUrl
+        vehicleCarWindowUrl.value = result.fileName
+        fileForm.value.vehicleCarWindow = result.id
+        break;
+      case 27:
+        insuranceFile.value = result.downloadUrl
+        insuranceFileUrl.value = result.fileName
+        fileForm.value.insuranceFile = result.id
+        break;
+    }
+  } 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 = (type) => {
+  switch (type) {
+    case 1:
+      download(drivingLicenseHomePage.value,drivingLicenseHomePageUrl.value)
+      break;
+    case 2:
+      download(drivingLicenseReversePage.value,drivingLicenseReversePageUrl.value)
+      break;
+    case 3:
+      download(vehicleRegistrationCertificate.value,vehicleRegistrationCertificateUrl.value)
+      break;
+    case 4:
+      download(carCertificate.value,carCertificateUrl.value)
+      break;
+    case 5:
+      download(purchaseInvoice.value,purchaseInvoiceUrl.value)
+      break;
+    case 6:
+      download(IDCardFront.value,IDCardFrontUrl.value)
+      break;
+    case 7:
+      download(IDCardBack.value,IDCardBackUrl.value)
+      break;
+    case 8:
+      download(carBusinessLicense.value,carBusinessLicenseUrl.value)
+      break;
+    case 9:
+      download(insuredIDCardFront.value,insuredIDCardFrontUrl.value)
+      break;
+    case 10:
+      download(insuredIDCardBack.value,insuredIDCardBackUrl.value)
+      break;
+    case 11:
+      download(insuredCarBusinessLicense.value,insuredCarBusinessLicenseUrl.value)
+      break;
+    case 12:
+      download(insuredPersonIDCardFront.value,insuredPersonIDCardFrontUrl.value)
+      break;
+    case 13:
+      download(insuredPersonIDCardBack.value,insuredPersonIDCardBackUrl.value)
+      break;
+    case 14:
+      download(insuredPersonCarBusinessLicense.value,insuredPersonCarBusinessLicenseUrl.value)
+      break;
+    case 15:
+      download(relationship.value,relationshipUrl.value)
+      break;
+    case 16:
+      download(vehicleCarFrame.value,vehicleCarFrameUrl.value)
+      break;
+    case 17:
+      download(vehicleCarBL.value,vehicleCarBLUrl.value)
+      break;
+    case 18:
+      download(vehicleCarBR.value,vehicleCarBRUrl.value)
+      break;
+    case 19:
+      download(vehicleCarFR.value,vehicleCarFRUrl.value)
+      break;
+    case 20:
+      download(vehicleCarFL.value,vehicleCarFLUrl.value)
+      break;
+    case 21:
+      download(vehicleCarFrant.value,vehicleCarFrantUrl.value)
+      break;
+    case 22:
+      download(vehicleCarBack.value,vehicleCarBackUrl.value)
+      break;
+    case 23:
+      download(vehicleCarPC.value,vehicleCarPCUrl.value)
+      break;
+    case 24:
+      download(vehicleCarLogo.value,vehicleCarLogoUrl.value)
+      break;
+    case 25:
+      download(vehicleCarWork.value,vehicleCarWorkUrl.value)
+      break;
+    case 26:
+      download(vehicleCarWindow.value,vehicleCarWindowUrl.value)
+      break;
+    case 27:
+      download(insuranceFile.value,insuranceFileUrl.value)
+      break;
+  }
+}
+
+// 取消
+const handleCancel = () => {
+  emits('close', [])
+}
+// 确定
+const handleConfirm = () => {
+  let images = [
+    {
+      imageType: 'C01',
+      imageId: fileForm.value.drivingLicenseHomePage
+    },
+    {
+      imageType: 'D01',
+      imageId: fileForm.value.drivingLicenseReversePage
+    },
+    {
+      imageType: 'TAR05',
+      imageId: fileForm.value.vehicleRegistrationCertificate
+    },
+    {
+      imageType: 'XC00',
+      imageId: fileForm.value.carCertificate
+    },
+    {
+      imageType: 'GC00',
+      imageId: fileForm.value.purchaseInvoice
+    },
+    {
+      imageType: 'C02',
+      imageId: fileForm.value.IDCardFront
+    },
+    {
+      imageType: 'D02',
+      imageId: fileForm.value.IDCardBack
+    },
+    {
+      imageType: 'Y02',
+      imageId: fileForm.value.carBusinessLicense
+    },
+    {
+      imageType: 'C03',
+      imageId: fileForm.value.insuredIDCardFront
+    },
+    {
+      imageType: 'D03',
+      imageId: fileForm.value.insuredIDCardBack
+    },
+    {
+      imageType: 'Y03',
+      imageId: fileForm.value.insuredCarBusinessLicense
+    },
+    {
+      imageType: 'C04',
+      imageId: fileForm.value.insuredPersonIDCardFront
+    },
+    {
+      imageType: 'D04',
+      imageId: fileForm.value.insuredPersonIDCardBack
+    },
+    {
+      imageType: 'Y04',
+      imageId: fileForm.value.insuredPersonCarBusinessLicense
+    },
+    {
+      imageType: 'GX00',
+      imageId: fileForm.value.relationship
+    },
+    {
+      imageType: 'C0500',
+      imageId: fileForm.value.vehicleCarFrame
+    },
+    {
+      imageType: 'C0501',
+      imageId: fileForm.value.vehicleCarBL
+    },
+    {
+      imageType: 'C0502',
+      imageId: fileForm.value.vehicleCarBR
+    },
+    {
+      imageType: 'C0503',
+      imageId: fileForm.value.vehicleCarFR
+    },
+    {
+      imageType: 'C0504',
+      imageId: fileForm.value.vehicleCarFL
+    },
+    {
+      imageType: 'C0506',
+      imageId: fileForm.value.vehicleCarFrant
+    },
+    {
+      imageType: 'C0507',
+      imageId: fileForm.value.vehicleCarBack
+    },
+    {
+      imageType: 'C0505',
+      imageId: fileForm.value.vehicleCarPC
+    },
+    {
+      imageType: 'C0508',
+      imageId: fileForm.value.vehicleCarLogo
+    },
+    {
+      imageType: 'C0509',
+      imageId: fileForm.value.vehicleCarWork
+    },
+    {
+      imageType: 'C0510',
+      imageId: fileForm.value.vehicleCarWindow
+    },
+    {
+      imageType: 'LAST_INSURANCE_POLICY',
+      imageId: fileForm.value.insuranceFile
+    },
+  ]
+  emits('close', [...images])
+}
+
+// 回显
+const initData = (data, type) => {
+  if(type) {
+    if(data) {
+      if(data.find(a => a.imageType === 'C01')) {
+        let result = data.find(a => a.imageType === 'C01')
+        console.log(123, result)
+        drivingLicenseHomePage.value = result.previewUrl
+        drivingLicenseHomePageUrl.value = result.fileName
+        fileForm.value.drivingLicenseHomePage = result.id
+      }
+      if(data.find(a => a.imageType === 'D01')) {
+        let result = data.find(a => a.imageType === 'D01')
+        drivingLicenseReversePage.value = result.previewUrl
+        drivingLicenseReversePageUrl.value = result.fileName
+        fileForm.value.drivingLicenseReversePage = result.id
+      }
+      if(data.find(a => a.imageType === 'TAR05')) {
+        let result = data.find(a => a.imageType === 'TAR05')
+        vehicleRegistrationCertificate.value = result.previewUrl
+        vehicleRegistrationCertificateUrl.value = result.fileName
+        fileForm.value.vehicleRegistrationCertificate = result.id
+      }
+      if(data.find(a => a.imageType === 'XC00')) {
+        let result = data.find(a => a.imageType === 'XC00')
+        carCertificate.value = result.previewUrl
+        carCertificateUrl.value = result.fileName
+        fileForm.value.carCertificate = result.id
+      }
+      if(data.find(a => a.imageType === 'GC00')) {
+        let result = data.find(a => a.imageType === 'GC00')
+        purchaseInvoice.value = result.previewUrl
+        purchaseInvoiceUrl.value = result.fileName
+        fileForm.value.purchaseInvoice = result.id
+      }
+      if(data.find(a => a.imageType === 'C02')) {
+        let result = data.find(a => a.imageType === 'C02')
+        IDCardFront.value = result.previewUrl
+        IDCardFrontUrl.value = result.fileName
+        fileForm.value.IDCardFront = result.id
+      }
+      if(data.find(a => a.imageType === 'D02')) {
+        let result = data.find(a => a.imageType === 'D02')
+        IDCardBack.value = result.previewUrl
+        IDCardBackUrl.value = result.fileName
+        fileForm.value.IDCardBack = result.id
+      }
+      if(data.find(a => a.imageType === 'Y02')) {
+        let result = data.find(a => a.imageType === 'Y02')
+        carBusinessLicense.value = result.previewUrl
+        carBusinessLicenseUrl.value = result.fileName
+        fileForm.value.carBusinessLicense = result.id
+      }
+      if(data.find(a => a.imageType === 'C03')) {
+        let result = data.find(a => a.imageType === 'C03')
+        insuredIDCardFront.value = result.previewUrl
+        insuredIDCardFrontUrl.value = result.fileName
+        fileForm.value.insuredIDCardFront = result.id
+      }
+      if(data.find(a => a.imageType === 'D03')) {
+        let result = data.find(a => a.imageType === 'D03')
+        insuredIDCardBack.value = result.previewUrl
+        insuredIDCardBackUrl.value = result.fileName
+        fileForm.value.insuredIDCardBack = result.id
+      }
+      if(data.find(a => a.imageType === 'Y03')) {
+        let result = data.find(a => a.imageType === 'Y03')
+        insuredCarBusinessLicense.value = result.previewUrl
+        insuredCarBusinessLicenseUrl.value = result.fileName
+        fileForm.value.insuredCarBusinessLicense = result.id
+      }
+      if(data.find(a => a.imageType === 'C04')) {
+        let result = data.find(a => a.imageType === 'C04')
+        insuredPersonIDCardFront.value = result.previewUrl
+        insuredPersonIDCardFrontUrl.value = result.fileName
+        fileForm.value.insuredPersonIDCardFront = result.id
+      }
+      if(data.find(a => a.imageType === 'D04')) {
+        let result = data.find(a => a.imageType === 'D04')
+        insuredPersonIDCardBack.value = result.previewUrl
+        insuredPersonIDCardBackUrl.value = result.fileName
+        fileForm.value.insuredPersonIDCardBack = result.id
+      }
+      if(data.find(a => a.imageType === 'Y04')) {
+        let result = data.find(a => a.imageType === 'Y04')
+        insuredPersonCarBusinessLicense.value = result.previewUrl
+        insuredPersonCarBusinessLicenseUrl.value = result.fileName
+        fileForm.value.insuredPersonCarBusinessLicense = result.id
+      }
+      if(data.find(a => a.imageType === 'GX00')) {
+        let result = data.find(a => a.imageType === 'GX00')
+        relationship.value = result.previewUrl
+        relationshipUrl.value = result.fileName
+        fileForm.value.relationship = result.id
+      }
+      if(data.find(a => a.imageType === 'C0500')) {
+        let result = data.find(a => a.imageType === 'C0500')
+        vehicleCarFrame.value = result.previewUrl
+        vehicleCarFrameUrl.value = result.fileName
+        fileForm.value.vehicleCarFrame = result.id
+      }
+      if(data.find(a => a.imageType === 'C0501')) {
+        let result = data.find(a => a.imageType === 'C0501')
+        vehicleCarBL.value = result.previewUrl
+        vehicleCarBLUrl.value = result.fileName
+        fileForm.value.vehicleCarBL = result.id
+      }
+      if(data.find(a => a.imageType === 'C0502')) {
+        let result = data.find(a => a.imageType === 'C0502')
+        vehicleCarBR.value = result.previewUrl
+        vehicleCarBRUrl.value = result.fileName
+        fileForm.value.vehicleCarBR = result.id
+      }
+      if(data.find(a => a.imageType === 'C0503')) {
+        let result = data.find(a => a.imageType === 'C0503')
+        vehicleCarFR.value = result.previewUrl
+        vehicleCarFRUrl.value = result.fileName
+        fileForm.value.vehicleCarFR = result.id
+      }
+      if(data.find(a => a.imageType === 'C0504')) {
+        let result = data.find(a => a.imageType === 'C0504')
+        vehicleCarFL.value = result.previewUrl
+        vehicleCarFLUrl.value = result.fileName
+        fileForm.value.vehicleCarFL = result.id
+      }
+      if(data.find(a => a.imageType === 'C0505')) {
+        let result = data.find(a => a.imageType === 'C0505')
+        vehicleCarFrant.value = result.previewUrl
+        vehicleCarFrantUrl.value = result.fileName
+        fileForm.value.vehicleCarFrant = result.id
+      }
+      if(data.find(a => a.imageType === 'C0506')) {
+        let result = data.find(a => a.imageType === 'C0506')
+        vehicleCarBack.value = result.previewUrl
+        vehicleCarBackUrl.value = result.fileName
+        fileForm.value.vehicleCarBack = result.id
+      }
+      if(data.find(a => a.imageType === 'C0507')) {
+        let result = data.find(a => a.imageType === 'C0507')
+        vehicleCarPC.value = result.previewUrl
+        vehicleCarPCUrl.value = result.fileName
+        fileForm.value.vehicleCarPC = result.id
+      }
+      if(data.find(a => a.imageType === 'C0508')) {
+        let result = data.find(a => a.imageType === 'C0508')
+        vehicleCarLogo.value = result.previewUrl
+        vehicleCarLogoUrl.value = result.fileName
+        fileForm.value.vehicleCarLogo = result.id
+      }
+      if(data.find(a => a.imageType === 'C0509')) {
+        let result = data.find(a => a.imageType === 'C0509')
+        vehicleCarWork.value = result.previewUrl
+        vehicleCarWorkUrl.value = result.fileName
+        fileForm.value.vehicleCarWork = result.id
+      }
+      if(data.find(a => a.imageType === 'C0510')) {
+        let result = data.find(a => a.imageType === 'C0510')
+        vehicleCarWindow.value = result.previewUrl
+        vehicleCarWindowUrl.value = result.fileName
+        fileForm.value.vehicleCarWindow = result.id
+      }
+      if(data.find(a => a.imageType === 'LAST_INSURANCE_POLICY')) {
+        let result = data.find(a => a.imageType === 'LAST_INSURANCE_POLICY')
+        insuranceFile.value = result.previewUrl
+        insuranceFileUrl.value = result.fileName
+        fileForm.value.insuranceFile = result.id
+      }
+    }
+  } else {
+    if(data) {
+      drivingLicenseHomePage.value = data.xszFrontResult.downloadUrl
+      drivingLicenseHomePageUrl.value = data.xszFrontResult.fileName
+      drivingLicenseReversePage.value = data.xszBackResult.downloadUrl
+      drivingLicenseReversePageUrl.value = data.xszBackResult.fileName
+      IDCardFront.value = data.sfzFrontResult.downloadUrl
+      IDCardFrontUrl.value = data.sfzFrontResult.fileName
+      IDCardBack.value = data.sfzBackResult.downloadUrl
+      IDCardBackUrl.value = data.sfzBackResult.fileName
+      insuredIDCardFront.value = data.sfz1FrontResult.downloadUrl
+      insuredIDCardFrontUrl.value = data.sfz1FrontResult.fileName
+      insuredIDCardBack.value = data.sfz1BackResult.downloadUrl
+      insuredIDCardBackUrl.value = data.sfz1BackResult.fileName
+      insuredPersonIDCardFront.value = data.sfz2FrontResult.downloadUrl
+      insuredPersonIDCardFrontUrl.value = data.sfz2FrontResult.fileName
+      insuredPersonIDCardBack.value = data.sfz2BackResult.downloadUrl
+      insuredPersonIDCardBackUrl.value = data.sfz2BackResult.fileName
+      fileForm.value = {
+        drivingLicenseHomePage: data.xszFrontResult.id,
+        drivingLicenseReversePage: data.xszBackResult.id,
+        IDCardFront: data.sfzFrontResult.id,
+        IDCardBack: data.sfzBackResult.id,
+        insuredIDCardFront: data.sfz1FrontResult.id,
+        insuredIDCardBack: data.sfz1BackResult.id,
+        insuredPersonIDCardFront: data.sfz2FrontResult.id,
+        insuredPersonIDCardBack: data.sfz2BackResult.id,
+      }
+    }
+  }
+}
+
+defineExpose({
+  initData
+})
+
+</script>
+
+<style scoped lang="scss">
+@use "@/assets/styles/common/style";
+.fileInfo{
+  display: flex;
+  align-items: center;
+  justify-content: flex-start;
+  border-radius: 5px;
+  margin: 0 0 16px;
+  .fileName{
+    width: 200px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  .fileBtn{
+    display: flex;
+    align-items: center;
+    .btn-icon{
+      margin: 0 10px;
+      font-size: 16px;
+      cursor: pointer;
+      &:hover{
+        color: #00a0f4;
+      }
+    }
+  }
+
+  .file-box{
+    position: relative;
+    .btn-top{
+      width: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      position: absolute;
+      top: 0;
+      left: 0;
+      .image-close{
+        display: block;
+        width: 12px;
+        height: 12px;
+        cursor: pointer;
+      }
+    }
+    .file-img{
+      display: block;
+      width: 208px;
+      height: 130px;
+      border-radius: 5px;
+    }
+    .btn-bottom{
+      position: absolute;
+      left: 0;
+      bottom: 0;
+      z-index: 1000;
+      display: flex;
+      align-items: center;
+      height: 24px;
+      width: 100%;
+      background: url("@/assets/images/btn-bg.png") no-repeat;
+      background-size: 100% 100%;
+      .width-50{
+        width: 50%;
+      }
+    }
+  }
+
+}
+.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;
+    }
+  }
+}
+</style>

+ 180 - 0
src/views/additionalOrder/additional/modules/insuranceSelect.vue

@@ -0,0 +1,180 @@
+<template>
+  <div class="insuranceSelect">
+    <div class="insuranceList">
+      <div class="insuranceLeft">
+        <div class="insuranceItem" v-for="(item, index) in insuranceTypeList" @click="handleType(item, index)">
+          <span class="checkIcon" :class="{ 'active': item.checked }">
+            <el-icon><Select /></el-icon>
+          </span>
+          <span>{{ item.kindName }}</span>
+        </div>
+      </div>
+      <el-divider direction="vertical" style="height: 100%;"></el-divider>
+      <div class="insuranceRight" v-show="choiceItem.id === item.id" v-for="(item, index) in insuranceTypeList">
+        <p class="account" :class="{'active': sub.checked}" v-for="sub in item.options" @click="handleSubType(item, sub, index)">{{ sub.label }}</p>
+      </div>
+    </div>
+    <div class="footer" >
+      <el-button plain @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";
+
+// emits
+const emits = defineEmits(['close'])
+
+// 方案类型
+let insuranceType = ref(null)
+
+// 当前选择的险种
+let choiceItem = ref({})
+// 初始化险种数据
+let insuranceTypeList = ref([])
+let typeList = ref([])
+const handleType = (item, index) => {
+  choiceItem.value = item
+}
+// 投保金额选择
+const handleSubType =( item, sub, index) => {
+  // if(insuranceType.value === 1) {
+  //   item.options.forEach(a => {
+  //     a.checked = false
+  //   })
+  //   sub.checked = true
+  //   item.checked = true
+  // } else {
+  //   sub.checked = !sub.checked
+  //   let bool = item.options.some(a => a.checked)
+  //   item.checked = bool
+  // }
+  item.options.forEach(a => {
+    a.checked = false
+  })
+  sub.checked = true
+  item.checked = true
+}
+
+// 取消
+const handleCancel = () => {
+  emits('close', {
+    list: []
+  })
+}
+// 保存
+const handleConfirm = () => {
+  let list = [...insuranceTypeList.value]
+  let checkedList = list.filter(a => a.checked)
+  emits('close', {
+    list: checkedList
+  })
+}
+
+// 修改数据
+const initEditData = (data, type) => {
+  insuranceType.value = type
+  api.projectApi.getBusinessInsurance().then((res: any) => {
+    if(res.code == 200) {
+      if(res.data&&res.data.length>0) {
+        choiceItem.value = res.data[0]
+        res.data.forEach(item => {
+          item.checked = false
+          item.options.forEach(sub => {
+            sub.checked = false
+          })
+        })
+        typeList.value = JSON.parse(JSON.stringify(res.data))
+        if(data && data.length > 0) {
+          data.forEach(item => {
+            item.checked = true
+            item.options.forEach(sub => {
+              if(item.optionId === sub.id) {
+                sub.checked = true
+              }
+            })
+          })
+          insuranceTypeList.value = res.data.map(a => {
+            let obj = data.find(b => b.insuranceId === a.insuranceId)
+            return obj || a
+          })
+        } else {
+          insuranceTypeList.value = res.data
+        }
+      }
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+defineExpose({
+  initEditData
+})
+</script>
+
+<style scoped lang="scss">
+.insuranceSelect{
+  height: 300px;
+  .insuranceList{
+    height: calc(100% - 40px);
+    overflow: hidden;
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 10px;
+    .insuranceLeft, .insuranceRight{
+      height: 100%;
+      overflow-y: auto;
+    }
+    .insuranceLeft{
+      width: calc(100% - 110px);
+      .insuranceItem{
+        cursor: pointer;
+        display: flex;
+        align-items: center;
+        margin: 10px 0;
+        span{
+          margin-left: 10px;
+        }
+        .checkIcon{
+          width: 14px;
+          height: 14px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          border: 1px solid #ccc;
+          border-radius: 2px;
+          font-size: 10px;
+          color: #fff;
+        }
+        .active{
+          color: #fff;
+          background: #3994FB;
+          border-color: #3994FB;
+        }
+      }
+    }
+    .insuranceRight{
+      width: 70px;
+      .account{
+        text-align: center;
+        cursor: pointer;
+      }
+      .active{
+        color: #3994FB;
+      }
+    }
+  }
+  .footer{
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+}
+</style>

+ 154 - 0
src/views/additionalOrder/additional/modules/salesmanSelect.vue

@@ -0,0 +1,154 @@
+<template>
+  <div class="salesmanSelect">
+    <div class="search">
+      <el-input v-model="searchValue" prefix-icon="Search" placeholder="请输入负责人姓名,工号,手机号查找" clearable></el-input>
+      <el-button class="btn" link type="primary" @click="handleSearch">搜索</el-button>
+    </div>
+    <div class="salesman">
+      <div class="salesman-item" :class="{'active': item.checked}" v-for="(item, index) in newList" @click="handleSelect(item, index)">
+        <div class="content">
+          <div class="name">
+            <span>{{ item.name }}</span>
+            <span>{{ item.mobile }}</span>
+          </div>
+          <div class="depart">
+            {{ item.deptName }}
+          </div>
+        </div>
+        <el-icon v-show="item.checked"><Check /></el-icon>
+      </div>
+    </div>
+    <el-divider style="width: 100%"></el-divider>
+    <div class="footer">
+      <el-button plain @click="handleCancel">取消</el-button>
+      <el-button type="primary" @click="handleConfirm">确定</el-button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+
+import {ElMessage} from "element-plus";
+import api from "@/api";
+
+const emits = defineEmits(['close'])
+
+let searchValue = ref('')
+let list = ref([])
+let newList = ref([])
+const handleSearch = () => {
+  newList.value = list.value.filter(a => a.name.includes(searchValue.value))
+}
+
+// 选择
+let checkedItem = ref(null)
+const handleSelect = (item, index) => {
+  let list = newList.value.filter(a => a.name != item.name)
+  list.forEach(a => a.checked = false)
+  item.checked = !item.checked
+  checkedItem.value = item
+}
+
+// 取消
+const handleCancel = () => {
+  emits('close', checkedItem.value)
+}
+// 确定
+const handleConfirm = () => {
+  if(checkedItem.value) {
+    emits('close', checkedItem.value)
+  } else {
+    ElMessage({
+      message: '请选择业务员!',
+      type: 'warning'
+    })
+  }
+}
+
+// 初始化
+const initData = () => {
+  api.operationApi.operationList({
+    isMember: 2,
+  }).then((res: any) => {
+    if(res.code == 200) {
+      if(res.data.records) {
+        res.data.records.forEach(item => {
+          item.checked = false
+        })
+      }
+      list.value = res.data.records
+      newList.value = list.value
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'error'
+      })
+    }
+  })
+}
+
+// 编辑回显
+const initEditData = (data) => {
+
+}
+
+defineExpose({
+  initEditData
+})
+
+onMounted(() => {
+  initData()
+})
+</script>
+
+<style scoped lang="scss">
+.salesmanSelect{
+  .search{
+    width: 100%;
+    position: relative;
+    .btn{
+      position: absolute;
+      top: 6px;
+      right: 10px;
+    }
+  }
+  .salesman{
+    max-height: 400px;
+    overflow-y: auto;
+    margin: 8px 0;
+    .salesman-item{
+      height: 64px;
+      padding: 8px 12px;
+      font-size: 14px;
+      color: #333333;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .name{
+        display: flex;
+        align-items: center;
+        justify-content: flex-start;
+        margin-bottom: 8px;
+        span:nth-child(1) {
+          font-size: 16px;
+          color: black;
+          width: 60px;
+        }
+      }
+      &:hover{
+        background: #F4FAFF;
+        border-radius: 4px;
+      }
+    }
+    .active{
+      background: #F4FAFF;
+      border-radius: 4px;
+    }
+  }
+  .footer{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+}
+</style>

+ 470 - 5
src/views/additionalOrder/order/index.vue

@@ -1,13 +1,478 @@
 <template>
-  <div>
-    订单管理
+  <div class="order">
+    <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+      <el-tab-pane name="first">
+        <template #label>
+          待审核(12)
+        </template>
+        <el-form label-width="100" label-position="left" :model="form">
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="订单号">
+                <el-input v-model="form.orderNo" placeholder="请输入订单号查找"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员信息">
+                <el-input v-model="form.salesman" placeholder="请输入业务员信息,手机号查找"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员归属">
+                <el-cascader
+                  clearable
+                  style="width: 100%"
+                  v-model="form.salesmanCompany"
+                  :options="option"
+                  :props="tableProps"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="保险公司">
+                <el-select v-model="form.companyName" placeholder="请选择">
+                  <el-option label="公司1" value="1" key="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="车牌号">
+                <el-input v-model="form.licenseNo" placeholder="输入车牌号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="录单时间">
+                <el-date-picker
+                  v-model="form.recordingTime"
+                  type="daterange"
+                  range-separator="至"
+                  start-placeholder="开始时间"
+                  end-placeholder="结束时间"
+                  format="YYYY-MM-DD"
+                  value-format="YYYY-MM-DD"
+                  @change="timeChange"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" style="display: flex; justify-content: flex-end">
+              <el-button type="primary" @click="search">查询</el-button>
+              <el-button plain type="primary" @click="reset">重置</el-button>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-table
+          :data="tableData"
+          style="margin-top: 24px"
+          hight="500"
+        >
+          <el-table-column label="订单号" prop="a" width="200">
+            <template #default="scope">
+              <el-button link type="primary" @click="handleDetail(scope.row)">{{ scope.row.quoteNo }}</el-button>
+            </template>
+          </el-table-column  >
+          <el-table-column label="业务员信息" prop="auditName" width="120"></el-table-column>
+          <el-table-column label="业务员归属" prop="salesmanCompany" width="120"></el-table-column>
+          <el-table-column label="保险公司" prop="companyName" width="120"></el-table-column>
+          <el-table-column label="车牌号" prop="licenseNo" width="120"></el-table-column>
+          <el-table-column label="交强险保费" prop="jqPremium" width="120"></el-table-column>
+          <el-table-column label="车船税" prop="taxPremium" width="120"></el-table-column>
+          <el-table-column label="商业险保费" prop="syPremium" width="120"></el-table-column>
+          <el-table-column label="驾意险保费" prop="jyPremium" width="120"></el-table-column>
+          <el-table-column label="保费总额" prop="sumPremium" width="120"></el-table-column>
+          <el-table-column label="录单时间" prop="createTime" width="150"></el-table-column>
+          <el-table-column label="录单人" prop="createBy" width="100"></el-table-column>
+          <el-table-column label="操作" fixed="right" width="200">
+            <template #default="scope">
+              <el-button link type="primary">审核</el-button>
+              <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button>
+              <el-button link type="primary" @click="handleDel(scope.row)">删除</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-tab-pane>
+      <el-tab-pane name="second">
+        <template #label>
+          审核通过(12)
+        </template>
+        <el-form label-width="100" label-position="left" :model="form">
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="订单号">
+                <el-input v-model="form.orderNo" placeholder="请输入订单号查找"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员信息">
+                <el-input v-model="form.salesman" placeholder="请输入业务员信息,手机号查找"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员归属">
+                <el-cascader
+                  clearable
+                  style="width: 100%"
+                  v-model="form.salesmanCompany"
+                  :options="option"
+                  :props="tableProps"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="保险公司">
+                <el-select v-model="form.companyName" placeholder="请选择">
+                  <el-option label="公司1" value="1" key="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="车牌号">
+                <el-input v-model="form.licenseNo" placeholder="输入车牌号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="录单时间">
+                <el-date-picker
+                  v-model="form.recordingTime"
+                  type="daterange"
+                  range-separator="至"
+                  start-placeholder="开始时间"
+                  end-placeholder="结束时间"
+                  format="YYYY-MM-DD"
+                  value-format="YYYY-MM-DD"
+                  @change="timeChange"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" style="display: flex; justify-content: flex-end">
+              <el-button type="primary" @click="search">查询</el-button>
+              <el-button plain type="primary" @click="reset">重置</el-button>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-table
+          :data="tableData"
+          style="margin-top: 24px"
+          hight="500"
+        >
+          <el-table-column label="订单号" prop="a" width="200">
+            <template #default="scope">
+              <el-button link type="primary" @click="handleDetail(scope.row)">{{ scope.row.quoteNo }}</el-button>
+            </template>
+          </el-table-column  >
+          <el-table-column label="业务员信息" prop="auditName" width="120"></el-table-column>
+          <el-table-column label="业务员归属" prop="salesmanCompany" width="120"></el-table-column>
+          <el-table-column label="保险公司" prop="companyName" width="120"></el-table-column>
+          <el-table-column label="车牌号" prop="licenseNo" width="120"></el-table-column>
+          <el-table-column label="交强险保费" prop="jqPremium" width="120"></el-table-column>
+          <el-table-column label="车船税" prop="taxPremium" width="120"></el-table-column>
+          <el-table-column label="商业险保费" prop="syPremium" width="120"></el-table-column>
+          <el-table-column label="驾意险保费" prop="jyPremium" width="120"></el-table-column>
+          <el-table-column label="保费总额" prop="sumPremium" width="120"></el-table-column>
+          <el-table-column label="录单时间" prop="createTime" width="150"></el-table-column>
+          <el-table-column label="录单人" prop="createBy" width="100"></el-table-column>
+          <el-table-column label="操作" fixed="right" width="200">
+            <template #default="scope">
+              <el-button link type="primary">审核</el-button>
+              <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button>
+              <el-button link type="primary" @click="handleDel(scope.row)">删除</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-tab-pane>
+      <el-tab-pane name="third">
+        <template #label>
+          审核不通过(12)
+        </template>
+        <el-form label-width="100" label-position="left" :model="form">
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="订单号">
+                <el-input v-model="form.orderNo" placeholder="请输入订单号查找"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员信息">
+                <el-input v-model="form.salesman" placeholder="请输入业务员信息,手机号查找"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员归属">
+                <el-cascader
+                  clearable
+                  style="width: 100%"
+                  v-model="form.salesmanCompany"
+                  :options="option"
+                  :props="tableProps"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="保险公司">
+                <el-select v-model="form.companyName" placeholder="请选择">
+                  <el-option label="公司1" value="1" key="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="车牌号">
+                <el-input v-model="form.licenseNo" placeholder="输入车牌号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="录单时间">
+                <el-date-picker
+                  v-model="form.recordingTime"
+                  type="daterange"
+                  range-separator="至"
+                  start-placeholder="开始时间"
+                  end-placeholder="结束时间"
+                  format="YYYY-MM-DD"
+                  value-format="YYYY-MM-DD"
+                  @change="timeChange"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" style="display: flex; justify-content: flex-end">
+              <el-button type="primary" @click="search">查询</el-button>
+              <el-button plain type="primary" @click="reset">重置</el-button>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-table
+          :data="tableData"
+          style="margin-top: 24px"
+          height="500"
+        >
+          <el-table-column label="订单号" prop="a" width="200">
+            <template #default="scope">
+              <el-button link type="primary" @click="handleDetail(scope.row)">{{ scope.row.quoteNo }}</el-button>
+            </template>
+          </el-table-column  >
+          <el-table-column label="业务员信息" prop="auditName" width="120"></el-table-column>
+          <el-table-column label="业务员归属" prop="salesmanCompany" width="120"></el-table-column>
+          <el-table-column label="保险公司" prop="companyName" width="120"></el-table-column>
+          <el-table-column label="车牌号" prop="licenseNo" width="120"></el-table-column>
+          <el-table-column label="交强险保费" prop="jqPremium" width="120"></el-table-column>
+          <el-table-column label="车船税" prop="taxPremium" width="120"></el-table-column>
+          <el-table-column label="商业险保费" prop="syPremium" width="120"></el-table-column>
+          <el-table-column label="驾意险保费" prop="jyPremium" width="120"></el-table-column>
+          <el-table-column label="保费总额" prop="sumPremium" width="120"></el-table-column>
+          <el-table-column label="录单时间" prop="createTime" width="150"></el-table-column>
+          <el-table-column label="录单人" prop="createBy" width="100"></el-table-column>
+          <el-table-column label="操作" fixed="right" width="200">
+            <template #default="scope">
+              <el-button link type="primary">审核</el-button>
+              <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button>
+              <el-button link type="primary" @click="handleDel(scope.row)">删除</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-tab-pane>
+    </el-tabs>
   </div>
 </template>
 
-<script setup>
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import { ElMessage, ElMessageBox } from "element-plus";
 
-</script>
+const myRouter = useRouter()
+
+let activeName = ref('first')
+let type = ref('first')
+const handleClick = (e) => {
+  pages.value = 1
+  size.value = 10
+  reset()
+  type.value = e.props.name
+  switch (e.props.name) {
+    case 'first':
+      initData(0)
+      break;
+    case 'second':
+      initData(1)
+      break;
+    case 'third':
+      initData(2)
+      break;
+  }
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  switch (type.value) {
+    case 'first':
+      initData(0)
+      break;
+    case 'second':
+      initData(1)
+      break;
+    case 'third':
+      initData(2)
+      break;
+  }
+}
+const reset = () => {
+  form.value = {}
+}
+
+// 列表
+let tableData = ref([])
+const handleDetail = (row) => {
+  myRouter.push({
+    path: '/additionalOrder/order/orderDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+const handleEdit = (row) => {
+  myRouter.push({
+    path: '/additionalOrder/additionalOrderIndex',
+    query: {
+      id: row.id
+    }
+  })
+}
+const handleDel = (row) => {
+  ElMessageBox({
+    title: '提示',
+    message: '确认要删除当前数据吗?',
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+    center:true
+  }).then((action) => {
+    if(action === 'confirm') {
+      api.additionalApi.deleteById(row.id).then((res: any) => {
+        if(res.code == 200) {
+          ElMessage({
+            message: res.msg,
+            type: 'success'
+          })
+          switch (type.value) {
+            case 'first':
+              initData(0)
+              break;
+            case 'second':
+              initData(1)
+              break;
+            case 'third':
+              initData(2)
+              break;
+          }
+        } else {
+          ElMessage({
+            message: res.msg,
+            type: 'warning'
+          })
+        }
+      })
+    }
+  })
+}
 
-<style scoped>
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData(type.value)
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData(type.value)
+}
+
+const initData = (type) => {
+  api.additionalApi.pageList({
+    pages: pages.value,
+    size: size.value,
+    isTemporarily: 0,
+    auditStatus: type,
+    orderNo: form.value.orderNo,
+    salesman: form.value.salesman,
+    salesmanCompany: form.value.salesmanCompany,
+    companyName: form.value.companyName,
+    licenseNo: form.value.licenseNo,
+    recordingTime: form.value.recordingTime
+  }).then((res: any) => {
+    if(res.code == 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData(0);
+})
+
+</script>
 
+<style scoped lang="scss">
+.order{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
 </style>

+ 833 - 0
src/views/additionalOrder/order/orderDetail.vue

@@ -0,0 +1,833 @@
+<template>
+  <div class="orderDetail">
+    <div class="state" v-if="dataDetail?.audit_status == 2">
+      <el-icon :size="20" style="color: red; margin: 3px 10px 0 0;">
+        <CircleClose />
+      </el-icon>
+      <div>
+        <h3>审核不通过</h3>
+        <p>{{ dataDetail?.auditComments }}如有问题,请联系审核人员或者拨打客服电话400-400-400。</p>
+        <p>审核人:admin 审核时间:2025.3.15 12:00:00</p>
+        <el-button link type="primary" @click="editDetail">修改并重提交</el-button>
+      </div>
+    </div>
+    <div class="userInfo">
+      <el-row :gutter="20">
+        <el-col :span="12" class="right">
+          <img class="userLogo" :src="car1"/>
+          <span class="userName">{{ dataDetail?.quoteNo }}</span>
+          <span class="userState">{{ dataDetail?.audit_status===0?'待审核':dataDetail?.audit_status===1?'已审核':dataDetail?.audit_status===2?'已驳回':'--' }}</span>
+        </el-col>
+        <el-col :span="12" class="left">
+          <el-button class="radius-2px" plain type="primary" @click="editDetail">编辑</el-button>
+          <el-button class="radius-2px" plain type="primary">删除</el-button>
+        </el-col>
+      </el-row>
+      <div class="tap">
+        <a class="anchor-item" :class="{'active': tapIndex===index}" v-for="(item, index) in taps" :href="`#${item.href}`" @click.prevent="handleTap(item, index)">
+          <img :src="tapIndex===index?item.active:item.img"/>
+          {{ item.text }}
+        </a>
+      </div>
+    </div>
+    <div class="content">
+      <div id="quote">
+        <div class="title">投保信息</div>
+        <el-row :gutter="20">
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">保险公司:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">签单日期:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.signingTime || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">评分:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.scope || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">车船税:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.taxPremium || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">交强险保单号:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.jqApplyNo || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">交强险续保:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.jqRenewal || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">交强险保费:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.jqPremium || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">驾意险保费:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.jyPremium || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">商业险保单号:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.syPolicyNo || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">商业险续保:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.syRenewal || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">商业险保费:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.syPremium || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">保费总额:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.sumPremium || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">是否过户车:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">商业险是否过户:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">是否脱保:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">是否二手车:</span>
+            <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
+          </el-col>
+        </el-row>
+      </div>
+      <div id="history">
+        <div class="title">费用信息</div>
+        <el-row :gutter="20">
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">交强险:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">费用字段:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">费用字段:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">商业险:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">费用字段:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">费用字段:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">驾意险:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">费用字段:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">费用字段:</span>
+            <span>--</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+
+          </el-col>
+        </el-row>
+      </div>
+      <div id="insurance">
+        <div class="title">险种信息</div>
+        <el-row :gutter="20" style="margin-bottom: 16px">
+          <el-col :span="14">
+            <el-table
+              :data="dataDetail?.insOrdersRiskList"
+              :span-method="typeSpanMethod"
+              border
+            >
+              <el-table-column label="类型"></el-table-column>
+              <el-table-column label="时间">
+                <template #default="scope">{{ scope.row.startDate }}至{{ scope.row.endDate }}</template>
+              </el-table-column>
+              <el-table-column label="险种" prop="riskName"></el-table-column>
+              <el-table-column label="保额" prop="premium"></el-table-column>
+            </el-table>
+          </el-col>
+          <el-col :span="10">
+            <el-table
+              :data="carData"
+              :span-method="carSpanMethod"
+              border
+              class="hiddenHeader"
+            >
+              <el-table-column label="" prop="a"></el-table-column>
+              <el-table-column label="" prop="b"></el-table-column>
+              <el-table-column label="" prop="c"></el-table-column>
+            </el-table>
+          </el-col>
+        </el-row>
+      </div>
+      <div id="car">
+        <div class="title">车辆信息</div>
+        <el-row :gutter="20">
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">车牌号:</span>
+            <span>{{ dataDetail?.carInfoVo?.licenseNo || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">车辆识别代码:</span>
+            <span>{{ dataDetail?.carInfoVo?.vinNo || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">发动机号:</span>
+            <span>{{ dataDetail?.carInfoVo?.engineNo || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">品牌型号:</span>
+            <span>{{ dataDetail?.carInfoVo?.brandName || '--' }}</span>
+          </el-col>
+        </el-row>
+      </div>
+      <div id="ower">
+        <div class="title">车主信息</div>
+        <el-row :gutter="20">
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">类型:</span>
+            <span>{{ dataDetail?.ownersInfo?.personType || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">车主姓名:</span>
+            <span>{{ dataDetail?.ownersInfo?.name || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">证件类型号码:</span>
+            <span>{{ dataDetail?.ownersInfo?.identifyNumber || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">手机号:</span>
+            <span>{{ dataDetail?.ownersInfo?.mobile || '--' }}</span>
+          </el-col>
+        </el-row>
+        <div class="title">投保人信息</div>
+        <el-row :gutter="20">
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">类型:</span>
+            <span>{{ dataDetail?.policyHolderInfo?.personType || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">车主姓名:</span>
+            <span>{{ dataDetail?.policyHolderInfo?.name || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">证件类型号码:</span>
+            <span>{{ dataDetail?.policyHolderInfo?.identifyNumber || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">手机号:</span>
+            <span>{{ dataDetail?.policyHolderInfo?.mobile || '--' }}</span>
+          </el-col>
+        </el-row>
+        <div class="title">被投保人信息</div>
+        <el-row :gutter="20">
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">类型:</span>
+            <span>{{ dataDetail?.insuredPersonInfo?.personType || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">车主姓名:</span>
+            <span>{{ dataDetail?.insuredPersonInfo?.name || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">证件类型号码:</span>
+            <span>{{ dataDetail?.insuredPersonInfo?.identifyNumber || '--' }}</span>
+          </el-col>
+          <el-col :span="6" class="col-m-b-16 item">
+            <span class="name">手机号:</span>
+            <span>{{ dataDetail?.insuredPersonInfo?.mobile || '--' }}</span>
+          </el-col>
+        </el-row>
+      </div>
+      <div id="file">
+        <div class="title">影像资料</div>
+        <div class="information">
+          <el-tabs v-model="activeName" tab-position="left" class="demo-tabs">
+            <el-tab-pane v-for="(item, index) in infoList" :label="item.label" :name="item.name">
+              <el-row :gutter="10" class="list">
+                <el-col :span="4" class="list-item" v-for="sub in item.list">
+                  <img :src="sub.previewUrl"/>
+                  <div class="tips">{{ sub.imageType === 'C01'?'行驶证主页':sub.imageType === 'D01'?'行驶证副页':sub.imageType === 'TAR05'?'机动车辆登记证书':sub.imageType === 'XC00'?'新车合格证':sub.imageType === 'GC00'?'购车发票':sub.imageType === 'C02'?'车主身份证(正面)':sub.imageType === 'D02'?'车主身份证(反面)':sub.imageType === 'Y02'?'车主营业执照':sub.imageType === 'C03'?'投保人身份证(正面)':sub.imageType === 'D03'?'投保人身份证(反面) ':sub.imageType === 'Y03'?'投保人营业执照':sub.imageType === 'C04'?'被保人身份证(正面)':sub.imageType === 'D04'?'被保人身份证(反面)':sub.imageType === 'Y04'?'被保人营业执照':sub.imageType === 'GX00'?'关系证明':sub.imageType === 'C0500'?'验车照(车架)':sub.imageType === 'C0501'?'验车照(后左)':sub.imageType === 'C0502'?'验车照(后右)':sub.imageType === 'C0503'?'验车照(前右)':sub.imageType === 'C0504'?'验车照(前左)':sub.imageType === 'C0506'?'验车照(正前)':sub.imageType === 'C0507'?'验车照(正后)':sub.imageType === 'C0505'?'验车照(人车合影)':sub.imageType === 'C0508'?'验车照(地标合影)':sub.imageType === 'C0509'?'验车照(工作台)':sub.imageType === 'C0510'?'验车照(天窗)':sub.imageType === 'LAST_INSURANCE_POLICY'?'上年商业险保单':'--' }}</div>
+                </el-col>
+              </el-row>
+            </el-tab-pane>
+          </el-tabs>
+        </div>
+        <div class="title">电子保单</div>
+        <div class="fileList">
+          <el-row :gutter="20">
+            <el-col :span="6" v-for="(item, index) in fileList" :key="index">
+              <p>{{ item.name }}</p>
+              <div class="fileInfo">
+                <img style="width: 40px; height: 40px" :src="item.fileName.includes('.png') || item.fileName.includes('.jpg') || item.fileName.includes('.jpeg')?image:item.fileName.includes('.pdf')?pdf:item.fileName.includes('.doc') || item.fileName.includes('.docx')?word:''" />
+                <div class="fileName">{{ item.fileName }}</div>
+                <div class="fileBtn">
+<!--                  <el-upload :auto-upload="false"  :show-file-list="false" accept=".png, .jpg, .jpeg, .pdf, .doc, .docx" @change="uploadImage($event, 7)" style="display: flex; align-items: center">
+                    <el-icon class="btn-icon"><Upload /></el-icon>
+                  </el-upload>-->
+                  <el-icon class="btn-icon" @click="imageView(item)"><View /></el-icon>
+                  <el-icon class="btn-icon" @click="download(item)"><Download /></el-icon>
+<!--                  <el-icon class="btn-icon" @click="deleteImage(7)"><Delete /></el-icon>-->
+                </div>
+              </div>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+    </div>
+    <el-dialog
+      title="图片预览"
+      v-model="imageShow"
+    >
+      <img class="image-view" :src="imageUrl" />
+    </el-dialog>
+    <el-dialog
+      title="文件预览"
+      v-model="fileShow"
+    >
+      <vue-office-docx
+        :src="fileUrl"
+        style="height: 600px; margin: 0; padding: 0"
+      ></vue-office-docx>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter, useRoute } from 'vue-router'
+import car1 from "@/assets/images/additional/car1.png";
+import car2 from "@/assets/images/additional/car2.png";
+import ower1 from "@/assets/images/additional/ower1.png";
+import ower2 from "@/assets/images/additional/ower2.png";
+import insurance1 from "@/assets/images/additional/insurance1.png";
+import insurance2 from "@/assets/images/additional/insurance2.png";
+import quote1 from "@/assets/images/additional/quote1.png";
+import quote2 from "@/assets/images/additional/quote2.png";
+import history1 from "@/assets/images/additional/history1.png";
+import history2 from "@/assets/images/additional/history2.png";
+import file1 from '@/assets/images/additional/file1.png'
+import file2 from '@/assets/images/additional/file2.png'
+
+import image from "@/assets/images/image.png";
+import pdf from "@/assets/images/pdf.png";
+import word from "@/assets/images/word.png";
+
+import api from '@/api'
+
+import VueOfficeDocx from "@vue-office/docx";
+import { ElMessage } from "element-plus";
+
+const myRuoter = useRouter()
+const myRoute = useRoute()
+
+let dataDetail = ref({
+  status: 5
+})
+const editDetail = () => {
+  myRuoter.push({
+    path: '/additionalOrder/additionalOrderIndex',
+    query: {
+      id: myRoute.query.id
+    }
+  })
+}
+
+
+// 页签
+let tapIndex = ref(0)
+const taps = ref([
+  {
+    text: '投保信息',
+    href: 'quote',
+    img: quote1,
+    active: quote2
+  },
+  {
+    text: '费用信息',
+    href: 'history',
+    img: history1,
+    active: history2
+  },
+  {
+    text: '选择险种',
+    href: 'insurance',
+    img: insurance1,
+    active: insurance2
+  },
+  {
+    text: '车辆信息',
+    href: 'car',
+    img: car1,
+    active: car2
+  },
+  {
+    text: '关系人信息',
+    href: 'ower',
+    img: ower1,
+    active: ower2
+  },
+  {
+    text: '附件信息',
+    href: 'file',
+    img: file1,
+    active: file2
+  }
+])
+const handleTap = (item, index) => {
+  tapIndex.value = index
+  const element = document.getElementById(`${item.href}`)
+  if(element) {
+    element.scrollIntoView({behavior: 'smooth'})
+  }
+}
+
+// 险种信息
+let typeData = ref([
+  {
+    a: 1,
+    b: 1,
+    c: 1,
+    d: 1
+  },{
+    a: 1,
+    b: 1,
+    c: 1,
+    d: 1
+  },
+])
+let carData = ref([
+  {
+    a: '车船税',
+    b: 1,
+    c: 2,
+    d: 3
+  },{
+    a: '车船税',
+    b: 1,
+    c: 2,
+    d: 3
+  },{
+    a: '车船税',
+    b: 1,
+    c: 2,
+    d: 3
+  },
+])
+
+const typeSpanMethod = ({
+  row,
+  column,
+  rowIndex,
+  columnIndex
+}) => {
+  if(columnIndex === 0) {
+    if(rowIndex === 1) {
+      return [typeData.value.length - 1, 1]
+    }
+  }
+}
+const carSpanMethod = ({
+  row,
+  column,
+  rowIndex,
+  columnIndex
+}) => {
+  if(columnIndex === 0) {
+    if(rowIndex === 0) {
+      return [carData.value.length, 1]
+    } else {
+      return [0,0]
+    }
+  }
+}
+
+// 影像资料
+let activeName = ref('car')
+let infoList = ref([
+  {
+    label: '车辆',
+    name: 'car',
+    list: []
+  },{
+    label: '车主',
+    name: 'ower',
+    list: []
+  },{
+    label: '投保人',
+    name: 'insured',
+    list: []
+  },{
+    label: '被保人',
+    name: 'person',
+    list: []
+  },{
+    label: '关系证明',
+    name: 'relation',
+    list: []
+  },{
+    label: '验车照',
+    name: 'photo',
+    list: []
+  },{
+    label: '上年商业险保单',
+    name: 'policy',
+    list: []
+  },
+])
+let fileList = ref([])
+
+// 图片预览
+let imageShow = ref(false)
+let imageUrl = ref('')
+let fileShow = ref(false)
+let fileUrl = ref('')
+const imageView = (item) => {
+  if(item.fileName.includes('.png') || item.fileName.includes('.jpg') || item.fileName.includes('.jpeg')) {
+    imageShow.value = true
+    imageUrl.value = item.fileName
+  }
+  if(item.fileName.includes('.pdf')) {
+    window.open(item.fileName, '_blank')
+  }
+  if(item.fileName.includes('.doc') || item.fileName.includes('.docx')) {
+    fileShow.value = true
+    nextTick(() => {
+      filePreview(item.fileName)
+    })
+  }
+}
+
+// word预览
+const filePreview = (file) => {
+  nextTick(() => {
+    fileUrl.value = file
+  })
+}
+
+// 下载
+const download = (item) => {
+  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 = item.fileName; // 设置图片名称
+    a.href = url; // 将生成的URL设置为a.href属性
+    a.dispatchEvent(event); // 触发a的单击事件
+  }
+  image.src = item.fileName
+}
+
+const initDetail = () => {
+  api.additionalApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      dataDetail.value = res.data
+      // 影像资料
+      let car = infoList.value.find(a => a.name === 'car'),
+        carType = ['C01', 'D01', 'TAR05', 'XC00', 'GC00'],
+        ower = infoList.value.find(a => a.name === 'ower'),
+        owerType = ['C02', 'D02', 'Y02'],
+        insured = infoList.value.find(a => a.name === 'insured'),
+        insuredType = ['C03', 'D03', 'Y03'],
+        person = infoList.value.find(a => a.name === 'person'),
+        personType = ['C04', 'D04', 'Y04'],
+        relation = infoList.value.find(a => a.name === 'relation'),
+        relationType = ['GX00'],
+        photo = infoList.value.find(a => a.name === 'photo'),
+        photoType = ['C0500', 'C0501', 'C0502', 'C0503', 'C0504', 'C0505', 'C0506', 'C0507', 'C0508', 'C0509', 'C0510',  ],
+        policy = infoList.value.find(a => a.name === 'policy'),
+        policyType = ['LAST_INSURANCE_POLICY'],
+        list = res.data?.imagesAdds?.images
+      car.list = list.filter(a => carType.includes(a.imageType))
+      ower.list = list.filter(a => owerType.includes(a.imageType))
+      insured.list = list.filter(a => insuredType.includes(a.imageType))
+      person.list = list.filter(a => personType.includes(a.imageType))
+      relation.list = list.filter(a => relationType.includes(a.imageType))
+      photo.list = list.filter(a => photoType.includes(a.imageType))
+      policy.list = list.filter(a => policyType.includes(a.imageType))
+
+      // 电子保单
+      // jqPolicy
+      // jqPolicyPreviewUrl
+      // jqSign
+      // jqSignPreviewUrl
+      // noPolicy
+      // noPolicyPreviewUrl
+      // orderNo
+      // syPolicy
+      // syPolicyPreviewUrl
+      // insOrdersExternalPolicy
+      fileList.value = [
+        {
+          name: '交强电子保单',
+          fileName: dataDetail.value?.insOrdersExternalPolicy?.jqPolicyPreviewUrl
+        },{
+          name: '商业电子保单',
+          fileName: dataDetail.value?.insOrdersExternalPolicy?.syPolicyPreviewUrl
+        },{
+          name: '驾意险电子保单',
+          fileName: dataDetail.value?.insOrdersExternalPolicy?.noPolicyPreviewUrl
+        },{
+          name: '交强险电子标志',
+          fileName: dataDetail.value?.insOrdersExternalPolicy?.jqSignPreviewUrl
+        }
+      ]
+
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+@use "@/assets/styles/common/style";
+.orderDetail{
+  height: calc(100vh - 120px);
+  overflow: hidden;
+  .state{
+    border: 1px solid #FF4545;
+    border-radius: 10px;
+    padding: 10px 20px;
+    background: #FFF4F4;
+    display: flex;
+    margin: 10px 24px;
+    font-weight: 400;
+    color: #333333;
+    h3{
+      font-size: 16px;
+      margin: 0 0 10px;
+      color: rgba(0,0,0,.64);
+    }
+    p{
+      font-size: 14px;
+      margin: 10px 0;
+    }
+  }
+  .userInfo{
+    margin: 10px 24px;
+    background: #FFFFFF;
+    padding: 24px;
+    border-radius: 6px;
+    .right{
+      display: flex;
+      align-items: center;
+      justify-content: flex-start;
+      .userLogo{
+        width: 26px;
+        height: 26px;
+      }
+      .userName{
+        font-size: 16px;
+        color: #333333;
+        margin: 0 12px 0 16px;
+      }
+      .userState{
+        padding: 2px 12px;
+        border: 1px solid #FF8C21;
+        background: #FFF4E9;
+        color: #FF8C21;
+        font-size: 12px;
+        border-radius: 3px;
+      }
+    }
+    .left{
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+    .tap{
+      width: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin: 10px 0 0;
+      .anchor-item{
+        width: 16%;
+        height: 44px;
+        text-decoration: none;
+        color: #333333;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        background: #FFFFFF;
+        border-radius: 4px;
+        font-size: 18px;
+        border: 1px solid #EEEEEE;
+        img{
+          width: 30px;
+          height: 30px;
+          margin-right: 5px;
+        }
+      }
+      .active{
+        color: #FFFFFF;
+        background: linear-gradient( 91deg, #4FCAFF 0%, #2B62FF 100%);
+      }
+    }
+  }
+  .content{
+    margin: 0 24px;
+    height: calc(100% - 150px);
+    background: #FFFFFF;
+    border-radius: 6px;
+    overflow-y: auto;
+    padding: 24px;
+    .title{
+      border-left: 4px solid #00a0f4;
+      padding: 0 0 0 12px;
+      margin-bottom: 16px;
+    }
+    .item{
+      color: #666666;
+      font-size: 14px;
+      display: flex;
+      .name{
+        width: 120px;
+      }
+    }
+    .information{
+      height: 280px;
+      margin-bottom: 16px;
+      .list{
+        height: 290px;
+        overflow-y: auto;
+        .list-item{
+          height: calc(50% - 12px);
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          position: relative;
+          margin: 0 0 12px;
+          border-radius: 0 0 6px 6px;
+          img{
+            width: 100%;
+            height: 130px;
+            border-radius: 0 0 6px 6px;
+          }
+          .tips {
+            position: absolute;
+            left: 5px;
+            bottom: 0;
+            width: calc(100% - 10px);
+            height: 24px;
+            background: url("@/assets/images/additional/tips.png") no-repeat;
+            background-size: 100% 100%;
+            text-align: center;
+            line-height: 24px;
+            color: #FFFFFF;
+          }
+        }
+      }
+    }
+    .fileList{
+      .fileInfo{
+        display: flex;
+        align-items: center;
+        justify-content: flex-start;
+        border: 1px solid #EEEEEE;
+        border-radius: 4px;
+        padding: 18px 24px;
+        .fileName{
+          width: 200px;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          white-space: nowrap;
+        }
+        .fileBtn{
+          display: flex;
+          align-items: center;
+          .btn-icon{
+            margin: 0 10px;
+            font-size: 16px;
+            cursor: pointer;
+            &:hover{
+              color: #00a0f4;
+            }
+          }
+        }
+
+        .file-box{
+          position: relative;
+          .btn-top{
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: flex-end;
+            position: absolute;
+            top: 0;
+            left: 0;
+            .image-close{
+              display: block;
+              width: 12px;
+              height: 12px;
+            }
+          }
+          .file-img{
+            display: block;
+            width: 208px;
+            height: 130px;
+            border-radius: 5px;
+          }
+          .btn-bottom{
+            position: absolute;
+            left: 0;
+            bottom: 0;
+            z-index: 1000;
+            display: flex;
+            align-items: center;
+            height: 24px;
+            width: 100%;
+            background: url("@/assets/images/btn-bg.png") no-repeat;
+            background-size: 100% 100%;
+            .width-50{
+              width: 50%;
+            }
+          }
+        }
+
+      }
+    }
+  }
+  :deep(.hiddenHeader .el-table__header-wrapper) {
+    display: none;
+  }
+}
+</style>

+ 220 - 5
src/views/additionalOrder/temporarily/index.vue

@@ -1,13 +1,228 @@
 <template>
-  <div>
-    暂存订单管理
+  <div class="order">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="订单号">
+            <el-input v-model="form.orderNo" placeholder="请输入订单号查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="业务员信息">
+            <el-input v-model="form.salesman" placeholder="请输入业务员信息,手机号查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="业务员归属">
+            <el-cascader
+              clearable
+              style="width: 100%"
+              v-model="form.salesmanCompany"
+              :options="option"
+              :props="tableProps"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="保险公司">
+            <el-select v-model="form.companyName" placeholder="请选择">
+              <el-option label="公司1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="车牌号">
+            <el-input v-model="form.licenseNo" placeholder="输入车牌号"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="录单时间">
+            <el-date-picker
+              v-model="form.recordingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="24" style="display: flex; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="订单号" prop="a" width="200">
+        <template #default="scope">
+          <el-button link type="primary" @click="handleDetail(scope.row)">{{ scope.row.quoteNo }}</el-button>
+        </template>
+      </el-table-column  >
+      <el-table-column label="业务员信息" prop="auditName" width="120"></el-table-column>
+      <el-table-column label="业务员归属" prop="salesmanCompany" width="120"></el-table-column>
+      <el-table-column label="保险公司" prop="companyName" width="120"></el-table-column>
+      <el-table-column label="车牌号" prop="licenseNo" width="120"></el-table-column>
+      <el-table-column label="交强险保费" prop="jqPremium" width="120"></el-table-column>
+      <el-table-column label="车船税" prop="taxPremium" width="120"></el-table-column>
+      <el-table-column label="商业险保费" prop="syPremium" width="120"></el-table-column>
+      <el-table-column label="驾意险保费" prop="jyPremium" width="120"></el-table-column>
+      <el-table-column label="保费总额" prop="sumPremium" width="120"></el-table-column>
+      <el-table-column label="录单时间" prop="createTime" width="150"></el-table-column>
+      <el-table-column label="录单人" prop="createBy" width="100"></el-table-column>
+      <el-table-column label="操作" fixed="right" width="200">
+        <template #default="scope">
+          <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button link type="primary" @click="handleDel(scope.row)">删除</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>
   </div>
 </template>
 
-<script setup>
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import { ElMessage, ElMessageBox } from "element-plus";
 
-</script>
+const myRouter = useRouter()
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  initData()
+}
+const reset = () => {
+  form.value = {}
+}
+
+// 列表
+let tableData = ref([])
+const handleDetail = (row) => {
+  myRouter.push({
+    path: '/additionalOrder/order/orderDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+const handleEdit = (row) => {
+  myRouter.push({
+    path: '/additionalOrder/additionalOrderIndex',
+    query: {
+      id: row.id
+    }
+  })
+}
+const handleDel = (row) => {
+  ElMessageBox({
+    title: '提示',
+    message: '确认要删除当前数据吗?',
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+    center:true
+  }).then((action) => {
+    if(action === 'confirm') {
+      api.additionalApi.deleteById(row.id).then((res: any) => {
+        if(res.code == 200) {
+          ElMessage({
+            message: res.msg,
+            type: 'success'
+          })
+          initData()
+        } else {
+          ElMessage({
+            message: res.msg,
+            type: 'warning'
+          })
+        }
+      })
+    }
+  })
+}
 
-<style scoped>
+// 分页
+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 = () => {
+  api.additionalApi.pageList({
+    pages: pages.value,
+    size: size.value,
+    isTemporarily: 1,
+    orderNo: form.value.orderNo,
+    salesman: form.value.salesman,
+    salesmanCompany: form.value.salesmanCompany,
+    companyName: form.value.companyName,
+    licenseNo: form.value.licenseNo,
+    recordingTime: form.value.recordingTime
+  }).then((res: any) => {
+    if(res.code == 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData();
+})
+
+</script>
 
+<style scoped lang="scss">
+.order{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
 </style>

+ 10 - 0
src/views/contentManagement/modules/addAdvertisement.vue

@@ -222,6 +222,16 @@ const submitForm = async (formEl: FormInstance | undefined) => {
               })
             }
           })
+        } else {
+          api.advertisementApi.posterAdd({
+            ...ruleForm,
+            orgId:orgId.value
+          }).then(res=>{
+            if(res.code===200){
+              ElMessage.success(res.msg)
+              router.back()
+            }
+          })
         }
       }
     }

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

@@ -0,0 +1,2442 @@
+<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" :loading="loading" @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
+}
+
+// 提交
+let loading = ref(false)
+const handleSubmit = async (InsurancePolicyRefs: FormInstance | undefined) => {
+  if(!InsurancePolicyRefs) {
+    InsurancePolicyRefs?.resetFields()
+    return
+  }
+  await InsurancePolicyRefs.validate((valid) => {
+    if(valid) {
+      loading.value = true
+      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'
+          })
+          quoteData.value[drivingRow.value].quoteResult = res.data
+          loading.value = false
+        } else {
+          ElMessage({
+            message: res.msg,
+            type: 'warning'
+          })
+          loading.value = false
+        }
+        // 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>

+ 0 - 1
src/views/operationManagement/modules/addOperation.vue

@@ -992,7 +992,6 @@ const imageView = (type) => {
 
 // 图片下载
 const download = (url, name) => {
-  alert(1)
   let image = new Image();
   // 解决跨域 Canvas 污染问题
   image.setAttribute("crossOrigin", "anonymous");

+ 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: "请选择管理人" }
+  ]
 })
 
 // 编辑初始化数据

+ 5 - 1
src/views/personnel/modules/editInstitution.vue

@@ -144,12 +144,12 @@ onMounted(() => {
         id: route.query.id,
       })
       .then((res: any) => {
-        console.log(res);
         if (res.code === 200) {
           for (let key in res.data) {
             form[key] = res.data[key];
           }
           form.area = [res.data.province, res.data.city, res.data.area];
+          console.log(123, form)
         }
       });
   }else{
@@ -167,6 +167,10 @@ onMounted(() => {
   }
 });
 
+const handleChange = (e) => {
+  console.log(123123123, e)
+}
+
 //禁用机构选择
 function disabledEditTree(list) {
   for (let i = 0; i < list.length; i++) {

+ 86 - 76
src/views/quoteConfig/insuranceCompanyAccount/insuranceCompanyAccount.vue

@@ -62,7 +62,7 @@
             <el-dropdown-item command="删除">删除</el-dropdown-item>
             <el-dropdown-item command="启用">启用</el-dropdown-item>
             <el-dropdown-item command="禁用">禁用</el-dropdown-item>
-            <el-dropdown-item command="账号授权">账号授权</el-dropdown-item>
+<!--            <el-dropdown-item command="账号授权">账号授权</el-dropdown-item>-->
           </el-dropdown-menu>
         </template>
       </el-dropdown>
@@ -82,6 +82,11 @@
       </el-table-column>
       <el-table-column prop="insCompanyName" label="保险公司"></el-table-column>
       <el-table-column prop="url" label="账号登录地址"></el-table-column>
+      <el-table-column prop="apiType" label="报价对接方式">
+        <template #default="scope">
+          {{ scope.row.apiType == '1'?'直连':'非直连' }}
+        </template>
+      </el-table-column>
       <el-table-column prop="deptName" label="归属"></el-table-column>
       <el-table-column prop="useStatus">
         <template #header>
@@ -148,23 +153,24 @@
       title="账号授权"
       :size="800"
     >
-      <el-row :gutter="10" style="height: 100%;">
-        <el-col :span="8" style="height: 100%;">
-          <el-input prefix-icon="search" @keyup.enter="searchInsurance"></el-input>
-          <div class="insuranceItem" v-for="item in insuranceList" :key="item.id">{{ item.name }}</div>
-        </el-col>
-        <el-divider direction="vertical" style="height: 100%;"></el-divider>
-        <el-col :span="15" style="height: 100%;">
-          <el-checkbox @change="insuranceSelectAll">全选</el-checkbox>
-          <el-tree
-            ref="insuranceTreeRefs"
-            :data="insuranceTree"
-            show-checkbox
-            default-expand-all
-            node-key="id"
-          />
-        </el-col>
-      </el-row>
+      <el-input prefix-icon="search" v-model="searchValue" @keyup.enter="searchInsurance"></el-input>
+      <div style="height: calc(100vh - 200px); margin: 10px 0;">
+        <el-checkbox @change="insuranceSelectAll">全选</el-checkbox>
+        <el-tree
+          ref="insuranceTreeRefs"
+          :props="treeProps"
+          :data="insuranceTree"
+          show-checkbox
+          default-expand-all
+          node-key="id"
+          :default-checked-keys="checkedKeys"
+          @check="handleCheckChange"
+        />
+      </div>
+      <div style="display: flex; justify-content: flex-end">
+        <el-button plain @click="accreditDrawer = false">取消</el-button>
+        <el-button type="primary" @click="handleSave">确定</el-button>
+      </div>
     </el-drawer>
   </div>
 </template>
@@ -289,10 +295,10 @@ const batchCommand = (e) => {
         }
       })
       break;
-    case '账号授权':
-      // 账号授权的逻辑
-      accreditDrawer.value = true
-      break;
+    // case '账号授权':
+    //   // 账号授权的逻辑
+    //   accreditDrawer.value = true
+    //   break;
   }
 }
 // 单条数据操作
@@ -371,9 +377,60 @@ const tableDataCommand = (scope, e) => {
     case '账号授权':
       // 账号授权的逻辑
       accreditDrawer.value = true
+      initTree(scope.row.id)
       break;
   }
 }
+
+// 授权机构树
+let searchValue = ref('')
+let searchId = ref('')
+let deptIds = ref([])
+let checkedKeys = ref([])
+const initTree = ( id: string ) => {
+  searchId.value = id
+  api.insuranceApi.deptTree({
+    id: id,
+    deptName: searchValue.value
+  }).then((res: any) => {
+    checkedKeys.value = []
+    if(res.code == 200) {
+      checkedKeys.value = res.data.deptIds
+      insuranceTree.value = res.data.deptList
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+// 授权勾选
+const handleCheckChange = (node, keys) => {
+  deptIds.value = keys.checkedKeys
+}
+
+// 授权保存
+const handleSave = () => {
+  api.insuranceApi.authorization({
+    id: searchId.value,
+    deptIds: deptIds.value
+  }).then((res: any) => {
+    if(res.code == 200) {
+      ElMessage({
+        message: res.msg,
+        type: 'success'
+      })
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+    accreditDrawer.value = false
+  })
+}
+
 // 表格多选
 let selectRows = ref([])
 const tableSelectChange = (rows) => {
@@ -385,7 +442,7 @@ const tableSelectChange = (rows) => {
   }
 }
 // 分页功能
-let currentPage = ref(0)
+let currentPage = ref(1)
 let pageSize = ref(10)
 let total = ref(0)
 
@@ -409,61 +466,14 @@ let insuranceList = ref([
     id: '2'
   }
 ])
-let insuranceTree = ref([
-  {
-    id: 1,
-    label: 'Level one 1',
-    children: [
-      {
-        id: 4,
-        label: 'Level two 1-1',
-        children: [
-          {
-            id: 9,
-            label: 'Level three 1-1-1',
-          },
-          {
-            id: 10,
-            label: 'Level three 1-1-2',
-          },
-        ],
-      },
-    ],
-  },
-  {
-    id: 2,
-    label: 'Level one 2',
-    children: [
-      {
-        id: 5,
-        label: 'Level two 2-1',
-      },
-      {
-        id: 6,
-        label: 'Level two 2-2',
-      },
-    ],
-  },
-  {
-    id: 3,
-    label: 'Level one 3',
-    children: [
-      {
-        id: 7,
-        label: 'Level two 3-1',
-      },
-      {
-        id: 8,
-        label: 'Level two 3-2',
-      },
-    ],
-  }
-])
+let insuranceTree = ref([])
 const treeProps = {
-
+  value: 'id',
+  label: 'name',
+  children: 'children'
 }
 const searchInsurance = () => {
-
+  initTree(searchId.value)
 }
 const insuranceSelectAll = (e) => {
 
@@ -542,7 +552,7 @@ onMounted(() => {
   }
   .paginationBox{
     display: flex;
-    justify-content: center;
+    justify-content: flex-end;
     margin-top: 20px;
   }
   .insuranceItem{

+ 91 - 29
src/views/quoteConfig/insuranceCompanyAccount/modules/insuranceAccountAdd.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="insuranceAccountAdd">
-    <el-form :model="insuranceAccountForm" :rules="insuranceAccountRules" ref="insuranceAccountRefs" label-width="130" style="height: 700px">
+    <el-form :model="insuranceAccountForm" :rules="insuranceAccountRules" ref="insuranceAccountRefs" label-width="130" style="height: calc(100vh - 200px); overflow-y: auto; overflow-x: hidden;">
       <el-descriptions title="基本信息">
         <el-descriptions-item>
           <template #default>
@@ -8,7 +8,7 @@
               <el-col :span="12">
                 <el-form-item label="保险公司" prop="insCompanyId">
                   <el-select v-model="insuranceAccountForm.insCompanyId" placeholder="请选择" clearable @change="companyChange" filterable>
-                    <el-option v-for="item in bankOption" :key="item.companyCode" :value="item.companyCode" :label="item.name"></el-option>
+                    <el-option v-for="item in bankOption" :key="item.id" :value="item.id" :label="item.name"></el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -26,7 +26,7 @@
               </el-col>
               <el-col :span="12">
                 <el-form-item label="报价对接方式" prop="apiType">
-                  <el-select v-model="insuranceAccountForm.apiType" placeholder="请选择" clearable @change="companyChange" filterable>
+                  <el-select v-model="insuranceAccountForm.apiType" placeholder="请选择" clearable @change="apiTypeChange" filterable>
                     <el-option key="1" value="1" label="直连"></el-option>
                     <el-option key="2" value="2" label="非直连"></el-option>
                   </el-select>
@@ -40,12 +40,12 @@
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="用户名" prop="username">
+                <el-form-item v-if="insuranceAccountForm.apiType!='1'" label="用户名" prop="username">
                   <el-input v-model="insuranceAccountForm.username" placeholder="请填写用户名" clearable></el-input>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="密码" prop="password">
+                <el-form-item v-if="insuranceAccountForm.apiType!='1'" label="密码" prop="password">
                   <el-input v-model="insuranceAccountForm.password" placeholder="请填写密码" clearable></el-input>
                 </el-form-item>
               </el-col>
@@ -90,7 +90,10 @@ const myRouter = useRouter()
 
 const insuranceAccountRefs = ref(null)
 
-let insuranceAccountForm = ref({})
+let insuranceAccountForm = ref({
+  apiType: '2',
+  userDept: localStorage.getItem('userDeptId')
+})
 let insuranceAccountRules = ref<FormRules>({
   insCompanyId: [
     { required: true, trigger: "change", message: "请选择保险公司"  }
@@ -147,11 +150,6 @@ const initDept = () => {
     }
   })
 }
-// 获取配置
-const companyChange = (e) => {
-  getPtlInsAttributionTemplate(e, insuranceAccountRefs.value)
-  getLoginUrl(e)
-}
 // 获取登录地址
 let loginUrlOption = ref([])
 const getLoginUrl = (id) => {
@@ -168,31 +166,94 @@ const getLoginUrl = (id) => {
 }
 // 配置项
 let fielsOption = ref([])
-const getPtlInsAttributionTemplate = (id, formRef) => {
-  api.insuranceApi.getPtlInsAttributionTemplate({ insCompanyId: id }).then(res => {
-    if(res.code == 200) {
-      if(res.data.fields&&res.data.fields.length>0) {
-        fielsOption.value = res.data.fields
-        res.data.fields.forEach(item => {
-          insuranceAccountRules.value[item.field] = [
-            { required: true, trigger: "blur", message: `请填写${item.label}` }
-          ]
+const getPtlInsAttribution = (id, api, formRef) => {
+  if(id && api) {
+    api.insuranceApi.getPtlInsAttributionTemplate({ insCompanyId: id, apiType: api }).then(res => {
+      if(res.code == 200) {
+        if(res.data.fields&&res.data.fields.length>0) {
+          fielsOption.value = res.data.fields
+          res.data.fields.forEach(item => {
+            insuranceAccountRules.value[item.field] = [
+              { required: true, trigger: "blur", message: `请填写${item.label}` }
+            ]
+          })
+          setTimeout(() => {
+            formRef.clearValidate()
+          }, 50)
+        }
+      } else {
+        ElMessage({
+          message: res.msg,
+          type: 'warning'
         })
-        setTimeout(() => {
-          formRef.clearValidate()
-        }, 50)
+        fielsOption.value = []
       }
-    } else {
-      ElMessage({
-        message: res.msg,
-        type: 'warning'
+    })
+  }
+}
+// 获取配置
+const companyChange = (e) => {
+  nextTick(() => {
+    if(e && insuranceAccountForm.value.apiType) {
+      api.insuranceApi.getPtlInsAttributionTemplate({ insCompanyId: e, apiType: insuranceAccountForm.value.apiType }).then(res => {
+        if(res.code == 200) {
+          if(res.data.fields&&res.data.fields.length>0) {
+            fielsOption.value = res.data.fields
+            res.data.fields.forEach(item => {
+              insuranceAccountRules.value[item.field] = [
+                { required: true, trigger: "blur", message: `请填写${item.label}` }
+              ]
+            })
+            setTimeout(() => {
+              insuranceAccountRefs.value.clearValidate()
+            }, 50)
+          }
+        } else {
+          ElMessage({
+            message: res.msg,
+            type: 'warning'
+          })
+          fielsOption.value = []
+        }
       })
     }
+    getLoginUrl(e)
+  })
+}
+const apiTypeChange = (e) => {
+  nextTick(() => {
+    if(insuranceAccountForm.value.insCompanyId && e) {
+      api.insuranceApi.getPtlInsAttributionTemplate({ insCompanyId: insuranceAccountForm.value.insCompanyId, apiType: e }).then(res => {
+        if(res.code == 200) {
+          if(res.data.fields&&res.data.fields.length>0) {
+            fielsOption.value = res.data.fields
+            res.data.fields.forEach(item => {
+              insuranceAccountRules.value[item.field] = [
+                { required: true, trigger: "blur", message: `请填写${item.label}` }
+              ]
+            })
+            setTimeout(() => {
+              insuranceAccountRefs.value.clearValidate()
+            }, 50)
+          }
+        } else {
+          ElMessage({
+            message: res.msg,
+            type: 'warning'
+          })
+          fielsOption.value = []
+        }
+      })
+    }
+    getLoginUrl(insuranceAccountForm.value.insCompanyId)
   })
 }
 
 const cancel = (formRef) => {
   formRef.resetFields()
+  myRouter.push({
+    path: '/quoteConfig/agreement/insuranceCompanyAccount'
+  })
 }
 const submit = async (formRef) => {
   if(!formRef) {
@@ -265,7 +326,7 @@ const initEditData = () => {
     api.insuranceApi.getAgreementAttribution({ id: myRoute.query.id }).then(res => {
       if(res.code == 200) {
         insuranceAccountForm.value = {...res.data}
-        getPtlInsAttributionTemplate(insuranceAccountForm.value.insCompanyId, insuranceAccountRefs.value)
+        getPtlInsAttribution(insuranceAccountForm.value.insCompanyId, insuranceAccountForm.value.apiType, insuranceAccountRefs.value)
         getLoginUrl(insuranceAccountForm.value.insCompanyId)
         if(res.data.fields.length>0) {
           res.data.fields.forEach(item => {
@@ -301,7 +362,8 @@ onMounted(() => {
   width: 100%;
   height: 100%;
   background: white;
-  padding: 20px;
+  padding: 24px;
+  overflow: hidden;
   .buts{
     display: flex;
     justify-content: center;

+ 97 - 57
src/views/quoteConfig/project/modules/projectAdd.vue

@@ -4,7 +4,7 @@
       <el-descriptions title="基本信息">
         <el-descriptions-item>
           <el-form-item label="保险公司" prop="companyId">
-            <el-select :disabled="isEdit" v-model="projectAddFrom.companyId" placeholder="请选择" style="width: 40%" @change="initProduct">
+            <el-select :disabled="isEdit" filterable v-model="projectAddFrom.companyId" placeholder="请选择" style="width: 40%" @change="initProduct">
               <el-option v-for="item in companyOption" :key="item.id" :value="item.id" :label="item.nameSimple"></el-option>
             </el-select>
           </el-form-item>
@@ -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>
@@ -78,7 +78,7 @@
                     </el-table-column>
                     <el-table-column label="份数" prop="quantity">
                       <template #default="scope">
-                        <el-input v-model="scope.row.quantity" style="width: 100px;"></el-input>份
+                        <el-input-number v-model="scope.row.quantity" style="width: 150px;" min="1" max="99" @change="numberChange($event, scope.row)"></el-input-number>份
                       </template>
                     </el-table-column>
                     <el-table-column label="操作">
@@ -180,6 +180,7 @@ const JYXDetail = ref(null)
 let isEdit = ref(false)
 let projectAddFrom = ref({
   ruleAttrs: [],
+  schemeType: 1,
   schemeList: [{
     schemeName: '',
     description: '',
@@ -209,65 +210,101 @@ const getJYXDetail = (row) => {
     JYXDetail.value.initData(row.drivingIntentionId)
   })
 }
+const numberChange = (e, row) => {
+  if(typeof e != 'number') {
+    // ElMessage({
+    //   message: '请输入驾意险份数!',
+    //   type: 'warning'
+    // })
+    row.quantity = 1
+  }
+}
 
 // 新增的时候初始化已有的方案
 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'
-      // })
-    }
-  })
+    })
+  }
 }
 
 // 险种
@@ -335,6 +372,9 @@ const saveRule = (data) => {
   }
   rulesShow.value = false
 }
+const handleDel = (index) => {
+  rulesAttrList.value.splice(index, 1)
+}
 
 // 险种类型
 let insuranceType = ref([])
@@ -382,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]
 }
 

+ 168 - 0
src/views/systemManage/logManage/index.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作工能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</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>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+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 = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/systemManage/logManage/logDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio