Procházet zdrojové kódy

fix: 开发补录订单、操作日志

wuguojie před 1 rokem
rodič
revize
4fbb7b1bac
41 změnil soubory, kde provedl 5801 přidání a 133 odebrání
  1. 5 1
      src/api/index.ts
  2. 26 0
      src/api/modules/additional.ts
  3. 2 2
      src/api/modules/common.ts
  4. 4 2
      src/api/modules/insurance.ts
  5. 8 0
      src/api/modules/log.ts
  6. binární
      src/assets/images/additional/car1.png
  7. 0 0
      src/assets/images/additional/car2.png
  8. binární
      src/assets/images/additional/file1.png
  9. binární
      src/assets/images/additional/file2.png
  10. 0 0
      src/assets/images/additional/history1.png
  11. binární
      src/assets/images/additional/history2.png
  12. 0 0
      src/assets/images/additional/insurance1.png
  13. binární
      src/assets/images/additional/insurance2.png
  14. 0 0
      src/assets/images/additional/ower1.png
  15. binární
      src/assets/images/additional/ower2.png
  16. 0 0
      src/assets/images/additional/quote1.png
  17. binární
      src/assets/images/additional/quote2.png
  18. binární
      src/assets/images/additional/right.png
  19. binární
      src/assets/images/additional/tips.png
  20. 10 0
      src/assets/styles/common/style.scss
  21. 6 1
      src/layouts/components/DrivingType/index.vue
  22. 0 1
      src/layouts/components/InsuranceType/index.vue
  23. 14 2
      src/router/modules/additionalOrder.ts
  24. 38 0
      src/router/modules/system.ts
  25. 8 0
      src/router/routes.ts
  26. 1662 5
      src/views/additionalOrder/additional/index.vue
  27. 83 0
      src/views/additionalOrder/additional/modules/carTypeSelect.vue
  28. 1589 0
      src/views/additionalOrder/additional/modules/imageData.vue
  29. 180 0
      src/views/additionalOrder/additional/modules/insuranceSelect.vue
  30. 154 0
      src/views/additionalOrder/additional/modules/salesmanSelect.vue
  31. 470 5
      src/views/additionalOrder/order/index.vue
  32. 833 0
      src/views/additionalOrder/order/orderDetail.vue
  33. 220 5
      src/views/additionalOrder/temporarily/index.vue
  34. 10 0
      src/views/contentManagement/modules/addAdvertisement.vue
  35. 0 1
      src/views/operationManagement/modules/addOperation.vue
  36. 5 1
      src/views/personnel/modules/editInstitution.vue
  37. 86 76
      src/views/quoteConfig/insuranceCompanyAccount/insuranceCompanyAccount.vue
  38. 91 29
      src/views/quoteConfig/insuranceCompanyAccount/modules/insuranceAccountAdd.vue
  39. 12 2
      src/views/quoteConfig/project/modules/projectAdd.vue
  40. 168 0
      src/views/systemManage/logManage/index.vue
  41. 117 0
      src/views/systemManage/logManage/logDetail.vue

+ 5 - 1
src/api/index.ts

@@ -26,6 +26,8 @@ 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'
 
 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 +123,8 @@ const api = {
   advertisementApi:advertisementApi(axiosInstance),
   agreementApi:agreementApi(axiosInstance),
   insuranceApi: insuranceApi(axiosInstance),
-  projectApi: projectApi(axiosInstance)
+  projectApi: projectApi(axiosInstance),
+  additionalApi: additionalApi(axiosInstance),
+  logApi: logApi(axiosInstance)
 }
 export default api

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

@@ -0,0 +1,26 @@
+import { ApiInstance } from '../type'
+
+/*
+* 性别        gender
+  民族        nation
+  婚姻状况     marriage
+  政治面貌     political_status
+  健康状况     health_status
+  学历        educational
+  银行        bank_info
+* */
+const additionalApi = (axiosInstance: ApiInstance) => ({
+  dictDetails: (data: string) => axiosInstance.get(`/dict/dictDetails?type=${data}`),
+  drivingPermit: (data: any) => axiosInstance.post('/order/identify/drivingPermit', data), // 行驶证识别
+  idCard: (data: any) => axiosInstance.post('/order/identify/idCard', 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

+ 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ární
src/assets/images/additional/car1.png


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


binární
src/assets/images/additional/file1.png


binární
src/assets/images/additional/file2.png


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


binární
src/assets/images/additional/history2.png


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


binární
src/assets/images/additional/insurance2.png


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


binární
src/assets/images/additional/ower2.png


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


binární
src/assets/images/additional/quote2.png


binární
src/assets/images/additional/right.png


binární
src/assets/images/additional/tips.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;
+}

+ 6 - 1
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)

+ 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',
+            },
+          },
+      ]
     },
 
     {

+ 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

+ 8 - 0
src/router/routes.ts

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

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 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()
+            }
+          })
         }
       }
     }

+ 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");

+ 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;

+ 12 - 2
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>
@@ -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,6 +210,15 @@ 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) => {

+ 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>

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů