浏览代码

fix: 对接首页接口

wuguojie 5 月之前
父节点
当前提交
5d9200b0eb

+ 1 - 0
src/api/modules/home.ts

@@ -6,6 +6,7 @@ const homeApi = (axiosInstance: ApiInstance) => ({
     businessFunnel: () => axiosInstance.get('/homepage/business/funnel'), // 业务漏斗
     distribution: () => axiosInstance.get('/homepage/business-type/distribution'), // 业务类型分布
     businessDistribution: (data: string) => axiosInstance.get(`/homepage/business/distribution?province=${data}`), // 业务员分布
+    commonFunctions: () => axiosInstance.get('/menu/common/functions'), // 首页常用功能
 })
 
 export default homeApi

+ 1 - 0
src/assets/images/home/huiyuan.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#0098FD" d="M688.3 199.5c7.5 0 16.5 4.5 21.3 10.6l0.2 0.3 0.2 0.3 174.7 217.6c8.5 11.1 7.2 27.8-3.1 39.2L535 841.2l-0.1 0.1-0.1 0.1c-4.2 4.6-10.7 7.4-19.3 8.2h-0.6c-6.3 0-13.5-2.7-18.7-7l-2.6-2.6L140 465.8c-9.4-10.6-10.5-26.5-2.4-36.3l0.3-0.4 0.3-0.4 175-218v-0.2c5.9-7.3 13.2-11.1 21.7-11.1h353.4m0-67.9H335c-28.6 0-55.7 12.7-74.8 36.6l-175 218C55 422.7 58.1 476.8 90 511.9l354.9 375.6 4.8 4.8c17.5 15.9 41.4 25.5 65.2 25.5h3.2c25.5-1.6 49.3-11.1 66.8-30.2l346.9-374c33.4-36.6 35-90.7 6.4-127.3l-175-218c-17.6-22.5-46.3-36.8-74.9-36.8z"  /><path fill="#0098FD" d="M320.6 437.8c-7.7 0-15.4 2.8-22.1 8.8-12.7 11.1-12.7 31.8-1.6 44.6l171.9 181.4 3.2 3.2c12.1 11.4 27.5 16.9 43 16.9 17.1 0 34.4-6.8 47.7-20.1l165.5-179.8c11.1-12.7 11.1-33.4-1.6-44.6-6.4-5-13.9-7.4-21.2-7.4-9 0-17.9 3.6-24.9 10.6L523.6 618.7c-2.4 2.5-5.6 3.8-8.8 3.8-3.2 0-6.3-1.2-8.7-3.7L344.6 448.2c-6.8-6.8-15.3-10.4-24-10.4z"  /></svg>

+ 290 - 0
src/components/Equities/index.vue

@@ -0,0 +1,290 @@
+<template>
+    <div>
+        <el-dialog
+            title="权益选择"
+            v-model="props.show"
+            width="1000"
+        >
+            <el-form :model="equitiesForm">
+                <el-row :gutter="20" style="display: flex; align-items: flex-end">
+                    <el-col :span="10">
+                        <el-form-item label="选择权益接收人">
+                            <el-select v-model="equitiesForm.person">
+                                <el-option value="1" label="1"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="10">
+                        <el-form-item label="用户所在地区">
+                            <el-select v-model="equitiesForm.area">
+                                <el-option value="1" label="1"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                        <el-button type="primary" @click="handleEquitiesSearch">查询</el-button>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <div class="change">
+                <span class="common" :class="{ 'changeActive': changeIndex === index }" v-for="(item, index) in ['权益套餐', '权益单品']" @click="changeIndex = index">{{ item }}</span>
+            </div>
+            <div class="combo" v-show="changeIndex == 0">
+                <el-row :gutter="10">
+                    <el-col :span="6">
+                        <div class="comboList">
+                            <div class="comboItem" :class="{'comboActive': comboIndex == index}" v-for="(item, index) in comboList" @click="handleCombo(item, index)">{{ item.name }}</div>
+                        </div>
+                        <div class="tips">1年12次洗车,2次救援,3次小保养</div>
+                    </el-col>
+                    <el-col :span="12">
+                        <div>套餐明细</div>
+                        <div class="count">
+                            <span>数量:12张</span>
+                            <span>价格:200.00元</span>
+                            <span style="width: 60px; display: flex; align-items: center">
+                              <span class="countIcon">
+                                  <el-icon size="small" color="#0083FF">
+                                      <Minus />
+                                  </el-icon>
+                              </span>
+                              <span style="width: calc(100% - 32px); text-align: center">1</span>
+                              <span class="countIcon">
+                                  <el-icon size="small" color="#0083FF">
+                                      <Plus />
+                                  </el-icon>
+                              </span>
+                          </span>
+                        </div>
+                        <el-table
+                            :show-header="false"
+                            :data="comboData"
+                            style="width: 100%"
+                        >
+                            <el-table-column prop="a"></el-table-column>
+                            <el-table-column prop="b"></el-table-column>
+                            <el-table-column prop="c"></el-table-column>
+                        </el-table>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="chosed">
+                            <span>已选择:3分驾意险</span>
+                            <span style="display: flex; align-items: center; cursor: pointer; color: #0083FF;">
+                              <el-icon size="small" color="#0083FF">
+                                  <Delete />
+                              </el-icon>
+                              清除
+                          </span>
+                        </div>
+                        <div class="chosedList">
+                            <div class="chosedItem" v-for="(item, index) in chosedList">
+                                <div class="top">
+                                    <span>xxx权益xxx权益xxx权益xxx权益xxx权益</span>
+                                    <span>x2</span>
+                                </div>
+                                <div class="bottom">
+                                    <span>数量:12张</span>
+                                    <span>价格:200.00元</span>
+                                    <span style="display: flex; align-items: center; cursor: pointer; color: #0083FF;">
+                                      <el-icon>
+                                          <Delete />
+                                      </el-icon>
+                                  </span>
+                                </div>
+                            </div>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+            <div class="single" v-show="changeIndex == 1">
+                <el-row :gutter="10">
+                    <el-col :span="17">
+                        <el-table
+                            :data="comboData"
+                            style="width: 100%"
+                        >
+                            <el-table-column prop="a" label="权益名称"></el-table-column>
+                            <el-table-column prop="b" label="单价"></el-table-column>
+                            <el-table-column prop="c" label="发放数量">
+                                <template #default>
+                                    <el-input-number></el-input-number>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="d" label="总价"></el-table-column>
+                        </el-table>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="chosed">
+                            <span>已选择:3分驾意险</span>
+                            <span style="display: flex; align-items: center; cursor: pointer; color: #0083FF;">
+                              <el-icon size="small" color="#0083FF">
+                                  <Delete />
+                              </el-icon>
+                              清除
+                          </span>
+                        </div>
+                        <div class="chosedList">
+                            <div class="chosedItem" v-for="(item, index) in chosedList">
+                                <div class="top">
+                                    <span>xxx权益xxx权益xxx权益xxx权益xxx权益</span>
+                                    <span>x2</span>
+                                </div>
+                                <div class="bottom">
+                                    <span>数量:12张</span>
+                                    <span>价格:200.00元</span>
+                                    <span style="display: flex; align-items: center; cursor: pointer; color: #0083FF;">
+                                      <el-icon>
+                                          <Delete />
+                                      </el-icon>
+                                  </span>
+                                </div>
+                            </div>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+            <template #footer>
+                <div class="btns">
+                    <el-button @click="handelCancel">取消</el-button>
+                    <el-button @click="handelConfirm" type="primary">确定</el-button>
+                </div>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+
+let props = defineProps({
+    show: {
+        type: Boolean,
+        default: false
+    }
+})
+let emits = defineEmits(['close'])
+
+let equitiesForm = ref({
+    person: '',
+    area: ''
+})
+let changeIndex = ref(0)
+const handleEquitiesSearch = ()=> {
+
+}
+
+let comboList = ref([
+    {
+        id: 1,
+        name: 'xxx套餐xxx套餐xxx套餐xxx套餐xxx套餐'
+    },{
+        id: 2,
+        name: 'xxx套餐xxx套餐xxx套餐xxx套餐xxx套餐'
+    }
+])
+let comboIndex = ref(0)
+const handleCombo = (item, index) => {
+    comboIndex.value = index
+}
+let comboData = ref([
+    {
+        a: 1,
+        b: 2,
+        c: 3
+    }
+])
+let chosedList = ref([
+    {
+        id: 1
+    }
+])
+
+const handelCancel = () => {
+    emits('close', false)
+}
+const handelConfirm = () => {
+    emits('close', false)
+}
+
+</script>
+
+<style scoped lang="scss">
+.change{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin: 20px 0;
+    .common{
+        padding: 6px 10px;
+        border: 1px solid #E5E5E5;
+        cursor: pointer;
+    }
+    .changeActive{
+        background: linear-gradient( 93deg, #4FCAFF 0%, #2B62FF 100%), #0083FF;
+        color: #ffffff;
+        border-color: #0083FF;
+    }
+}
+.combo, .single{
+    max-height: 400px;
+    .comboList{
+        width: 100%;
+        height: calc(100% - 20px);
+        overflow-y: auto;
+        .comboItem{
+            width: 100%;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            line-height: 34px;
+            cursor: pointer;
+        }
+        .comboActive{
+            background: #f6fbff;
+            border-radius: 4px;
+            color: #0083FF;
+        }
+    }
+    .tips{
+        line-height: 20px;
+    }
+    .count{
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .countIcon{
+            border: 1px solid #ccc;
+            width: 16px;
+            height: 16px;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            border-radius: 50%;
+            cursor: pointer;
+        }
+    }
+    .chosed{
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+    }
+    .chosedList{
+        margin-top: 10px;
+        .chosedItem{
+            background: #F7F7F7;
+            padding: 10px;
+            border-radius: 4px;
+            .top{
+                display: flex;
+                align-items: flex-start;
+                justify-content: space-between;
+                margin-bottom: 10px;
+            }
+            .bottom{
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+            }
+        }
+    }
+}
+</style>

+ 1 - 0
src/types/components.d.ts

@@ -11,6 +11,7 @@ declare module 'vue' {
     ComplexTable: typeof import('./../components/complexTable/index.vue')['default']
     DialogSetDeptLeader: typeof import('./../components/DialogSetDeptLeader/index.vue')['default']
     Empty: typeof import('./../components/empty/index.vue')['default']
+    Equities: typeof import('./../components/Equities/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     FixedActionBar: typeof import('./../components/FixedActionBar/index.vue')['default']
     HButton: typeof import('./../layouts/ui-kit/HButton.vue')['default']

+ 98 - 2
src/views/additionalOrder/additional/index.vue

@@ -1654,6 +1654,52 @@
                   </template>
               </el-collapse-item>
           </div>
+          <div id="equities">
+              <el-collapse-item name="equities">
+                  <template #title>
+                      <span class="title">权益信息</span>
+                  </template>
+                  <div class="equities">
+                      <div class="header">
+                          <span>生活服务权益</span>
+                          <el-button class="choseEquities" color="#E5F3FF" size="small" @click="handleOpenEquities">选择权益</el-button>
+                      </div>
+                      <el-table
+                        :data="equitiesData"
+                        style="width: 100%"
+                      >
+                          <el-table-column prop="a" label="权益名称"></el-table-column>
+                          <el-table-column prop="a" label="权益类型"></el-table-column>
+                          <el-table-column prop="a" label="接收人"></el-table-column>
+                          <el-table-column prop="a" label="发放数量"></el-table-column>
+                          <el-table-column prop="a" label="价格"></el-table-column>
+                      </el-table>
+                      <div class="total">
+                          <div class="money">
+                              <div class="totalItem">
+                                  <span>可用金额:</span>
+                                  <span>{{ useMoney }}</span>
+                              </div>
+                              <div class="totalItem">
+                                  <span>已使用:</span>
+                                  <span>{{ usedMoney }}</span>
+                              </div>
+                              <div class="totalItem">
+                                  <span>剩余金额:</span>
+                                  <span style="color: #FF8C21">{{ lastMoney }}</span>
+                              </div>
+                          </div>
+                      </div>
+                  </div>
+                  <template #icon="{ isActive }">
+                    <span class="icon">
+                      <span class="icon-ele">
+                        {{ isActive ? '收起' : '展开' }}
+                      </span>
+                    </span>
+                  </template>
+              </el-collapse-item>
+          </div>
       </el-form>
     </el-collapse>
     <div class="footer">
@@ -1702,6 +1748,7 @@
     >
       <imageData ref="ImageDataRef" @close="handleImageData"></imageData>
     </el-dialog>
+      <Equities :show="equitiesShow" @close="handleEquities"></Equities>
   </div>
 </template>
 
@@ -1717,6 +1764,8 @@ import insurance1 from '@/assets/images/additional/insurance1.png'
 import insurance2 from '@/assets/images/additional/insurance2.png'
 import history1 from '@/assets/images/additional/history1.png'
 import history2 from '@/assets/images/additional/history2.png'
+import equities1 from '@/assets/images/additional/equities1.png'
+import equities2 from '@/assets/images/additional/equities2.png'
 import image from "@/assets/images/image.png";
 import pdf from "@/assets/images/pdf.png";
 import word from "@/assets/images/word.png";
@@ -1830,6 +1879,12 @@ const taps = ref([
     img: history1,
     active: history2
   },
+    {
+        text: '权益信息',
+        href: 'equities',
+        img: equities2,
+        active: equities1
+    }
 ])
 const handleTap = (item, index) => {
   tapIndex.value = index
@@ -1839,7 +1894,7 @@ const handleTap = (item, index) => {
   }
 }
 //折叠面板
-let activeName = ref(['car','ower','ower1','ower2','insurance','quote','history1','history2'])
+let activeName = ref(['car','ower','ower1','ower2','insurance','quote','history1','history2', 'equities'])
 // const handleChange = (val) => {
 //
 // }
@@ -3886,6 +3941,21 @@ const longTime = (type) => {
     }
 }
 
+// 权益
+let equitiesData = ref([])
+let useMoney = ref(0)
+let usedMoney = ref(0)
+let lastMoney = ref(0)
+
+let equitiesShow = ref(false)
+const handleOpenEquities = () => {
+    equitiesShow.value = true
+}
+
+const handleEquities = (bool) => {
+    equitiesShow.value = bool
+}
+
 onMounted(() => {
   initOption()
   initEditData()
@@ -3908,7 +3978,7 @@ onMounted(() => {
     justify-content: space-between;
     margin: 10px 0 16px;
     .anchor-item{
-      width: 19%;
+      width: 16%;
       height: 44px;
       text-decoration: none;
       color: #333333;
@@ -4086,6 +4156,32 @@ onMounted(() => {
         }
       }
     }
+      .equities{
+          padding: 0 24px;
+          .header{
+              display: flex;
+              align-items: center;
+              justify-content: flex-start;
+              .choseEquities{
+                  color: #0083FF;
+                  margin-left: 10px;
+              }
+          }
+          .total{
+              display: flex;
+              justify-content: flex-end;
+              margin-top: 20px;
+              .money{
+                  width: 200px;
+                  margin-right: 30px;
+                  .totalItem{
+                      display: flex;
+                      align-items: center;
+                      justify-content: space-between;
+                  }
+              }
+          }
+      }
   }
   .fileInfo{
     display: flex;

+ 60 - 2
src/views/additionalOrder/order/orderDetail.vue

@@ -323,6 +323,35 @@
               <el-table-column prop="result" label="保司反馈"></el-table-column>
           </el-table>
       </div>
+        <div id="equities" style="margin-top: 10px;">
+            <div class="title">权益信息</div>
+            <el-table
+                    :data="equitiesData"
+                    height="300"
+            >
+                <el-table-column prop="a" label="权益名称"></el-table-column>
+                <el-table-column prop="a" label="权益类型"></el-table-column>
+                <el-table-column prop="a" label="接收人"></el-table-column>
+                <el-table-column prop="a" label="发放数量"></el-table-column>
+                <el-table-column prop="a" label="价格"></el-table-column>
+            </el-table>
+            <div class="total">
+                <div class="money">
+                    <div class="totalItem">
+                        <span>可用金额:</span>
+                        <span>{{ useMoney }}</span>
+                    </div>
+                    <div class="totalItem">
+                        <span>已使用:</span>
+                        <span>{{ usedMoney }}</span>
+                    </div>
+                    <div class="totalItem">
+                        <span>剩余金额:</span>
+                        <span style="color: #FF8C21">{{ lastMoney }}</span>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
     <el-dialog
       title="图片预览"
@@ -354,6 +383,8 @@ 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 equities1 from '@/assets/images/additional/equities1.png'
+import equities2 from '@/assets/images/additional/equities2.png'
 import file1 from '@/assets/images/additional/file1.png'
 import file2 from '@/assets/images/additional/file2.png'
 
@@ -426,7 +457,13 @@ const taps = ref([
       href: 'line',
       img: file1,
       active: file2
-  }
+  },
+    {
+        text: '权益信息',
+        href: 'equities',
+        img: equities2,
+        active: equities1
+    }
 ])
 const handleTap = (item, index) => {
   tapIndex.value = index
@@ -596,6 +633,13 @@ const initTrack = () => {
         }
     })
 }
+
+// 权益
+let equitiesData = ref([])
+let useMoney = ref(0)
+let usedMoney = ref(0)
+let lastMoney = ref(0)
+
 const viewDetail = (row) => {
     myRouter.push({
         name: 'InsurancePolicyViewDetail',
@@ -745,7 +789,7 @@ onMounted(() => {
       justify-content: space-between;
       margin: 10px 0 0;
       .anchor-item{
-        width: 14%;
+        width: 12%;
         height: 44px;
         text-decoration: none;
         color: #333333;
@@ -890,6 +934,20 @@ onMounted(() => {
 
       }
     }
+    .total{
+      display: flex;
+      justify-content: flex-end;
+      margin-top: 20px;
+      .money{
+        width: 200px;
+        margin-right: 30px;
+        .totalItem{
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+        }
+      }
+    }
   }
   :deep(.hiddenHeader .el-table__header-wrapper) {
     display: none;

+ 4 - 0
src/views/finance/audit.vue

@@ -119,6 +119,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>
@@ -263,6 +264,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>
@@ -408,6 +410,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>
@@ -554,6 +557,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>

+ 1 - 0
src/views/finance/autoAudit.vue

@@ -14,6 +14,7 @@
             <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
             <el-table-column prop="productName" label="险种" width="120"></el-table-column>
             <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+            <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
             <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
             <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
             <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>

+ 3 - 0
src/views/finance/index.vue

@@ -111,6 +111,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>
@@ -248,6 +249,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>
@@ -386,6 +388,7 @@
                     <el-table-column prop="agreementName" label="出单协议" width="120"></el-table-column>
                     <el-table-column prop="productName" label="险种" width="120"></el-table-column>
                     <el-table-column prop="sumPremium" label="保费总计" width="120"></el-table-column>
+                    <el-table-column prop="qyPremium" label="权益金额" width="120"></el-table-column>
                     <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
                     <el-table-column prop="createTime" label="录单时间" width="120"></el-table-column>
                     <el-table-column prop="createBy" label="录单人" width="120"></el-table-column>

+ 24 - 3
src/views/index.vue

@@ -9,6 +9,8 @@ meta:
 import * as echarts from 'echarts'
 import api from '@/api'
 
+import { useRouter } from 'vue-router'
+
 import up from '@/assets/images/home/up.png'
 import down from '@/assets/images/home/down.png'
 import cxcd from '@/assets/images/home/cxcd.png'
@@ -90,6 +92,8 @@ echarts.registerMap('西藏', xizang)
 echarts.registerMap('云南', yunnan)
 echarts.registerMap('浙江', zhejiang)
 
+let myRouter = useRouter()
+
 function open(url: string) {
   window.open(url, '_blank')
 }
@@ -732,6 +736,22 @@ const initBusinessDistribution = () => {
     })
 }
 
+let functionsList = ref([])
+const initCommonFunctions = () => {
+    api.homeApi.commonFunctions().then((res:any) => {
+        if(res.code == 200) {
+            functionsList.value = res.data
+        } else {
+            functionsList.value = []
+        }
+    })
+}
+const handleRouterChange = (item, index) => {
+    myRouter.push({
+        name: item.name,
+    })
+}
+
 onMounted(() => {
     let userInfo = JSON.parse(localStorage.getItem('userInfo'))
     if(userInfo?.province) {
@@ -742,6 +762,7 @@ onMounted(() => {
     initBusinessFunnel();
     initDistribution();
     initBusinessDistribution();
+    initCommonFunctions();
     // initChinaMap();
     // initTrend();
     // initFunnel();
@@ -848,9 +869,9 @@ onMounted(() => {
         <PageMain class="ecology">
             <div class="title">常用功能</div>
             <div class="functionList">
-                <div class="item" v-for="(item, index) in functionList" :key="item.id">
-                    <img class="icon" :src="item.icon" />
-                    <div class="name">{{ item.name }}</div>
+                <div class="item" v-for="(item, index) in functionsList" :key="item.id" @click="handleRouterChange(item, index)">
+                    <img class="icon" :src="item.ican" />
+                    <div class="name">{{ item.title }}</div>
                 </div>
             </div>
         </PageMain>

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

@@ -884,6 +884,21 @@
           >
             <el-table-column type="expand">
               <template #default="scope">
+                  <div class="equities">
+                      <div style="color: #333333; font-size: 16px;">客户权益</div>&nbsp;&nbsp;
+                      <div class="equitiesBox">
+                          <div class="equitiesLabel">
+                              <img src="@/assets/images/home/huiyuan.svg" />&nbsp;&nbsp;
+                              <div>掌柜权益</div>
+                          </div>
+                          <div class="circle"></div>
+                          <div>为车主提供 "省心、省时、又省钱" 的全场景服务</div>
+                          <el-button style="margin: 0 20px" size="small" type="primary" @click="handleOpenEquities">选择权益</el-button>
+                      </div>&nbsp;&nbsp;&nbsp;&nbsp;
+                      <div class="equitiesChoice">
+                          已选<span style="color: #0083FF">12</span>项去权益,共计<span style="color: #FF8C21">135.35</span>元
+                      </div>
+                  </div>
                 <div class="expandFlex">
                   <p class="expandTitle">车险方案</p>
                   <div style="width: calc(100% - 50px); overflow-x: hidden">
@@ -1465,6 +1480,7 @@
               <el-button size="small" type="primary" @click="handlePayCodeClose">关闭</el-button>
           </template>
       </el-dialog>
+      <Equities :show="equitiesShow" @close="handleEquities"></Equities>
   </div>
 </template>
 
@@ -2433,6 +2449,16 @@ const syChange = (e) => {
 // 报价公司
 let currentRow = ref([])
 let quoteData = ref([])
+
+// 选择权益
+let equitiesShow = ref(false)
+const handleOpenEquities = () => {
+    equitiesShow.value = true
+}
+const handleEquities = (bool) => {
+    equitiesShow.value = bool
+}
+
 const handleSelect = (a, b) => {
     currentRow.value = a
   // currentRow.value = a
@@ -3671,6 +3697,36 @@ onMounted(() => {
       background: #F6FBFF;
     }
   }
+  .equities{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    margin-bottom: 10px;
+    .equitiesBox{
+      display: flex;
+      align-items: center;
+      justify-content: flex-start;
+      background: #F0F8FF;
+      border-radius: 2px;
+      .equitiesLabel{
+        display: flex;
+        align-items: center;
+        justify-content: flex-start;
+        background: #DFF1FF;
+        padding: 6px 10px;
+        img{
+          width: 14px;
+          height: 14px;
+        }
+      }
+      .circle{
+        width: 0;
+        height: 0;
+        border-bottom: 37px solid #DFF1FF;
+        border-right: 20px solid transparent;
+      }
+    }
+  }
   :deep(.el-collapse-item__header) {
     display: flex;
     align-items: center;

+ 142 - 62
src/views/insurancePolicy/modules/underwriting.vue

@@ -1,73 +1,108 @@
 <template>
   <div class="underwriting">
-    <div class="title">
-      <span class="text">影像信息</span>
-      <el-popover :visible="imageTypeShow" placement="bottom-start" :width="600" trigger="click">
-        <template #reference>
-          <el-button plain type="primary" icon="Plus" size="small" @click="addImages">添加影像资料</el-button>
-        </template>
-        <imageTypeSelect ref="ImageTypeSelect" @close="handleImageTypeSelect"></imageTypeSelect>
-      </el-popover>
-    </div>
-    <div class="images">
-      <el-row :gutter="20">
-        <el-col class="col-m-b-16" style="margin-bottom: 16px" :span="6" v-for="(item, index) in images" :key="index">
-          <el-upload v-if="!item.fileUrl" :auto-upload="false" :show-file-list="false"@change="uploadImage($event, item)">
-            <div class="upload-box">
-              <div class="icon-box">
-                <el-icon style="font-size: 20px"><Camera /></el-icon>
-                <p>{{ item.label }}</p>
-              </div>
+      <div class="change">
+          <span class="common" :class="{ 'changeActive': changeIndex === index }" v-for="(item, index) in ['核保信息', '权益信息']" @click="changeIndex = index">{{ item }}</span>
+      </div>
+        <div v-show="changeIndex == 0">
+            <div class="title">
+                <span class="text">影像信息</span>
+                <el-popover :visible="imageTypeShow" placement="bottom-start" :width="600" trigger="click">
+                    <template #reference>
+                        <el-button plain type="primary" icon="Plus" size="small" @click="addImages">添加影像资料</el-button>
+                    </template>
+                    <imageTypeSelect ref="ImageTypeSelect" @close="handleImageTypeSelect"></imageTypeSelect>
+                </el-popover>
             </div>
-          </el-upload>
-          <div class="fileInfo" v-else>
-            <div class="file-box">
-              <div class="btn-top">
-                <img class="image-close" @click="deleteImage(item)" src="@/assets/images/close.png" />
-              </div>
-              <img class="file-img" :src="item.fileUrl" />
-              <div class="btn-bottom">
-                <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, item)" style="display: flex; align-items: center; justify-content: center; color: white">
-                  <el-icon><Upload /></el-icon>重新上传
-                </el-upload>
-                <div class="width-50" style="display: flex; align-items: center; justify-content: center; color: white; cursor:pointer;" @click="downloadImage(item)">
-                  <el-icon><Download /></el-icon>下载资料
-                </div>
-              </div>
+            <div class="images">
+                <el-row :gutter="20">
+                    <el-col class="col-m-b-16" style="margin-bottom: 16px" :span="6" v-for="(item, index) in images" :key="index">
+                        <el-upload v-if="!item.fileUrl" :auto-upload="false" :show-file-list="false"@change="uploadImage($event, item)">
+                            <div class="upload-box">
+                                <div class="icon-box">
+                                    <el-icon style="font-size: 20px"><Camera /></el-icon>
+                                    <p>{{ item.label }}</p>
+                                </div>
+                            </div>
+                        </el-upload>
+                        <div class="fileInfo" v-else>
+                            <div class="file-box">
+                                <div class="btn-top">
+                                    <img class="image-close" @click="deleteImage(item)" src="@/assets/images/close.png" />
+                                </div>
+                                <img class="file-img" :src="item.fileUrl" />
+                                <div class="btn-bottom">
+                                    <el-upload class="width-50" :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, item)" style="display: flex; align-items: center; justify-content: center; color: white">
+                                        <el-icon><Upload /></el-icon>重新上传
+                                    </el-upload>
+                                    <div class="width-50" style="display: flex; align-items: center; justify-content: center; color: white; cursor:pointer;" @click="downloadImage(item)">
+                                        <el-icon><Download /></el-icon>下载资料
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+            <div class="title">
+                <span class="text">特别约定</span>
             </div>
+            <el-table
+                    ref="ClauseRefs"
+                    :data="tableData"
+                    row-key="id"
+                    @selection-change="selectionChange"
+            >
+                <el-table-column type="selection" width="50" align="center" :selectable="selectable"></el-table-column>
+                <el-table-column label="特约类型" prop="riskCode" align="center">
+                    <template #default="scope">
+                        <div v-if="scope.row.riskCode == '0507'">交强</div>
+                        <div v-if="scope.row.riskCode == '0510'">商业</div>
+                    </template>
+                </el-table-column>
+                <el-table-column label="特约名称" prop="clauseName" align="center"></el-table-column>
+                <el-table-column label="编码" prop="clauseCode" align="center"></el-table-column>
+                <el-table-column label="特别约定内容" prop="" width="300" align="center">
+                    <template #default="scope">
+                        <div v-if="!scope.row.edit" @click="() => { scope.row.edit = true }">{{ scope.row.clauseContent }}</div>
+                        <el-input type="textarea" v-model="scope.row.clauseContent" v-if="scope.row.edit"></el-input>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+      <div v-show="changeIndex == 1">
+          <el-button icon="plus" type="primary" @click="handleOpenEquities">选择权益</el-button>
+          <el-table
+              :data="equitiesData"
+              style="margin-top: 20px"
+          >
+              <el-table-column prop="a" label="权益名称"></el-table-column>
+              <el-table-column prop="a" label="权益类型"></el-table-column>
+              <el-table-column prop="a" label="接收人"></el-table-column>
+              <el-table-column prop="a" label="发放数量"></el-table-column>
+              <el-table-column prop="a" label="价格"></el-table-column>
+          </el-table>
+          <div class="total">
+              <div class="money">
+                  <div class="totalItem">
+                      <span>可用金额:</span>
+                      <span>{{ useMoney }}</span>
+                  </div>
+                  <div class="totalItem">
+                      <span>已使用:</span>
+                      <span>{{ usedMoney }}</span>
+                  </div>
+                  <div class="totalItem">
+                      <span>剩余金额:</span>
+                      <span style="color: #FF8C21">{{ lastMoney }}</span>
+                  </div>
+              </div>
           </div>
-        </el-col>
-      </el-row>
-    </div>
-    <div class="title">
-      <span class="text">特别约定</span>
-    </div>
-    <el-table
-      ref="ClauseRefs"
-      :data="tableData"
-      row-key="id"
-      @selection-change="selectionChange"
-    >
-      <el-table-column type="selection" width="50" align="center" :selectable="selectable"></el-table-column>
-      <el-table-column label="特约类型" prop="riskCode" align="center">
-          <template #default="scope">
-              <div v-if="scope.row.riskCode == '0507'">交强</div>
-              <div v-if="scope.row.riskCode == '0510'">商业</div>
-          </template>
-      </el-table-column>
-      <el-table-column label="特约名称" prop="clauseName" align="center"></el-table-column>
-      <el-table-column label="编码" prop="clauseCode" align="center"></el-table-column>
-      <el-table-column label="特别约定内容" prop="" width="300" align="center">
-        <template #default="scope">
-          <div v-if="!scope.row.edit" @click="() => { scope.row.edit = true }">{{ scope.row.clauseContent }}</div>
-          <el-input type="textarea" v-model="scope.row.clauseContent" v-if="scope.row.edit"></el-input>
-        </template>
-      </el-table-column>
-    </el-table>
+      </div>
     <div class="footer">
       <el-button plain type="primary" @click="handleSubmit(false)">取消</el-button>
       <el-button type="primary" @click="handleSubmit(true)">提交核保</el-button>
     </div>
+      <Equities :show="equitiesShow" @close="handleEquities"></Equities>
   </div>
 </template>
 
@@ -234,6 +269,22 @@ const initEdit = (data) => {
     }
 }
 
+let changeIndex = ref(1)
+
+// 权益
+let equitiesData = ref([])
+let useMoney = ref(0)
+let usedMoney = ref(0)
+let lastMoney = ref(0)
+// 选择权益
+let equitiesShow = ref(false)
+const handleOpenEquities = () => {
+    equitiesShow.value = true
+}
+const handleEquities = (bool) => {
+    equitiesShow.value = bool
+}
+
 defineExpose({
   initEdit
 })
@@ -245,6 +296,22 @@ defineExpose({
   max-height: 400px;
   overflow-y: auto;
   overflow-x: hidden;
+  .change{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin: 20px 0;
+    .common{
+      padding: 6px 10px;
+      border: 1px solid #E5E5E5;
+      cursor: pointer;
+    }
+    .changeActive{
+      background: linear-gradient( 93deg, #4FCAFF 0%, #2B62FF 100%), #0083FF;
+      color: #ffffff;
+      border-color: #0083FF;
+    }
+  }
   .title{
     display: flex;
     align-items: center;
@@ -341,8 +408,21 @@ defineExpose({
         }
       }
     }
-
   }
+    .total{
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+        .money{
+            width: 200px;
+            margin-right: 30px;
+            .totalItem{
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+            }
+        }
+    }
   .footer{
     display: flex;
     align-items: center;

+ 57 - 3
src/views/insurancePolicy/orderDetail.vue

@@ -960,6 +960,34 @@
                     <el-table-column prop="result" label="保司反馈"></el-table-column>
                 </el-table>
             </div>
+            <div id="equities" class="equities">
+                <div class="title">权益信息</div>
+                <el-table
+                    :data="equitiesData"
+                >
+                    <el-table-column prop="a" label="权益名称"></el-table-column>
+                    <el-table-column prop="a" label="权益类型"></el-table-column>
+                    <el-table-column prop="a" label="接收人"></el-table-column>
+                    <el-table-column prop="a" label="发放数量"></el-table-column>
+                    <el-table-column prop="a" label="价格"></el-table-column>
+                </el-table>
+                <div class="total">
+                    <div class="money">
+                        <div class="totalItem">
+                            <span>可用金额:</span>
+                            <span>{{ useMoney }}</span>
+                        </div>
+                        <div class="totalItem">
+                            <span>已使用:</span>
+                            <span>{{ usedMoney }}</span>
+                        </div>
+                        <div class="totalItem">
+                            <span>剩余金额:</span>
+                            <span style="color: #FF8C21">{{ lastMoney }}</span>
+                        </div>
+                    </div>
+                </div>
+            </div>
         </div>
         <div class="buttonList">
             <el-button type="primary" plain @click="handleEdit" v-if="detailData?.order?.orderStatus === '6' || detailData?.order?.orderStatus === '1' || detailData?.order?.orderStatus === '3' || detailData?.order?.orderStatus === '4' || detailData?.order?.orderStatus === '7'">编辑订单</el-button>
@@ -1022,6 +1050,7 @@ import dianzi from '@/assets/images/insurancePolicy/dianzi.png'
 import baofei from '@/assets/images/insurancePolicy/baofei.png'
 import feiyong from '@/assets/images/insurancePolicy/feiyong.png'
 import guiji from '@/assets/images/insurancePolicy/guiji.png'
+import equities2 from '@/assets/images/additional/equities2.png'
 import detail from '../../layouts/components/JYXDetail/index.vue'
 import costView from './modules/costView.vue'
 
@@ -1089,7 +1118,11 @@ let tipsList = ref([
         name: '订单轨迹',
         id: 'lineMsg',
         url: guiji
-    },
+    },{
+        name: '权益信息',
+        id: 'equities',
+        url: equities2,
+    }
 ])
 const handleTipsIndexChange = (item, index) => {
     tipsIndex.value = index
@@ -1881,7 +1914,6 @@ const onComplete = () => {
 // 换取对应保额的别名
 const getValAlias = (code: any, val: any) => {
     let data = insuranceAllData.value;
-    console.log(12312323, insuranceAllData.value)
     // 特殊处理,null转为投保的值
     if (val === null) val = '1';
     let objs = data.find((item: any) => item.kindCode === code)?.options.find((item: any) => item.value == val);
@@ -1896,6 +1928,12 @@ const initData = () => {
     });
 };
 
+// 权益
+let equitiesData = ref([])
+let useMoney = ref(0)
+let usedMoney = ref(0)
+let lastMoney = ref(0)
+
 onMounted(() => {
     initData();
     initDetail();
@@ -2094,7 +2132,7 @@ onMounted(() => {
                 justify-content: flex-end;
             }
         }
-        .TBMsg, .carMsg, .personMsg, .imageMsg, .payMsg, .appointMsg, .fileMsg, .premiumMsg, .costMsg, .lineMsg{
+        .TBMsg, .carMsg, .personMsg, .imageMsg, .payMsg, .appointMsg, .fileMsg, .premiumMsg, .costMsg, .lineMsg, .equities{
             background: #FFFFFF;
             border-radius: 6px;
             padding: 12px 24px;
@@ -2252,6 +2290,22 @@ onMounted(() => {
                 height: 128px;
             }
         }
+        .equities{
+            .total{
+                display: flex;
+                justify-content: flex-end;
+                margin-top: 20px;
+                .money{
+                    width: 200px;
+                    margin-right: 30px;
+                    .totalItem{
+                        display: flex;
+                        align-items: center;
+                        justify-content: space-between;
+                    }
+                }
+            }
+        }
         :deep(.el-table th.el-table__cell.is-leaf) {
             background: #FAFAFA;
         }