Просмотр исходного кода

fix: 完善方案管理功能数据交互

wuguojie 1 год назад
Родитель
Сommit
474173a5b2

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

@@ -22,7 +22,8 @@ const projectApi = (axiosInstance: ApiInstance) => ({
     productId: string,
     schemeType: string
   }) => axiosInstance.get(`/scheme/getSchemeByCompany?companyId=${data.companyId}&productId=${data.productId}&schemeType=${data.schemeType}`), // 新增时如果有方案获取对应方案
-  getCompanyList:() => axiosInstance.get('/scheme/getCompanyList')
+  getCompanyList:() => axiosInstance.get('/scheme/getCompanyList'), // 保司list
+  getById: (data: string) => axiosInstance.get(`/jyxConfig/getById?id=${data}`), // 驾意险详情
 })
 
 export default projectApi

+ 70 - 22
src/layouts/components/DrivingType/index.vue

@@ -11,12 +11,24 @@
           <el-checkbox style="display: block;" v-for="JYX in JYXList" :key="JYX.id" :value="JYX.id" :label="JYX.productName"></el-checkbox>
         </el-checkbox-group>-->
         <div class="insuranceLeft">
-          <div class="insuranceItem" v-for="(item, index) in handleSearchName" @click="handleType(item, index)">
+<!--          <div class="insuranceItem" v-for="(item, index) in handleSearchName" @click="handleType(item, index)">
           <span class="checkIcon" :class="{ 'active': item.checked }">
             <el-icon><Select /></el-icon>
           </span>
             <span>{{ item.productName }}</span>
-          </div>
+          </div>-->
+          <el-tree
+            ref="treeRef"
+            :data="JYXList"
+            :props="defaultProps"
+            show-checkbox
+            node-key="id"
+            @check="handleCheckChange"
+            :check-strictly="true"
+            :default-expand-all="true"
+            :default-checked-keys="selectedKeys"
+            :filter-node-method="handleSearchName"
+          ></el-tree>
         </div>
       </el-col>
       <el-divider direction="vertical" style="height: 100%;"></el-divider>
@@ -42,19 +54,52 @@
 
 <script setup lang="ts">
 
-const emits = defineEmits(['close'])
-
 // 查找
 import api from "@/api";
-import {ElMessage} from "element-plus";
+import { ElMessage } from "element-plus";
+import type { ElTree } from 'element-plus'
+
+const treeRef = ref<InstanceType<typeof ElTree>>()
+
+const emits = defineEmits(['close'])
 
 let searchName = ref('')
-const handleSearchName = computed(() => {
-  return JYXList.value.filter(a => a.productName.includes(searchName.value))
+
+watch(searchName, (val) => {
+  treeRef.value!.filter(val)
 })
+// const handleSearchName = computed(() => {
+//   return JYXList.value.filter(a => a.productName.includes(searchName.value))
+// })
+const handleSearchName = (value: string, data: any) => {
+  if (!value) return true
+  return data.productName.includes(value)
+}
+
+// 默认勾选的数据
+let selectedKeys = ref([])
 
 // 驾意险
 let JYXList = ref([])
+const defaultProps = {
+  children: 'children',
+  label: 'productName',
+}
+const handleCheckChange = (data, row) => {
+  if(row.checkedNodes.length > 0) {
+    let list1 = row.checkedNodes.filter(a => a.parentId == '0')
+    let list2 = row.checkedNodes.filter(a => a.parentId != '0')
+    if(list1.length > 0) {
+      let list3 = list1.filter(a => list2.some(b => b.parentId == a.id))
+      selectedList.value = row.checkedNodes.filter(a => !list3.some(b => b.id == a.id))
+    } else {
+      selectedList.value = list2
+    }
+    selectedList.value .forEach(item => {
+      item.drivingIntentionId = item.id
+    })
+  }
+}
 // const initJYX = () => {
 //   api.projectApi.jyxList({
 //     company: '173881173559933834'
@@ -89,11 +134,13 @@ const handleType = (item, index) => {
 // 删除
 const handleDel = (item, index) => {
   selectedList.value.splice(index, 1)
-  JYXList.value?.forEach(sub => {
-    if(sub.id === item.id) {
-      sub.checked = false
-    }
-  })
+  selectedKeys.value = selectedList.value.map(a => a.drivingIntentionId)
+  treeRef.value!.setCheckedKeys(selectedKeys.value, true)
+  // JYXList.value?.forEach(sub => {
+  //   if(sub.id === item.id) {
+  //     sub.checked = false
+  //   }
+  // })
 }
 
 // 编辑
@@ -112,19 +159,20 @@ const initEditData = (data, index) => {
         res.data.forEach(item => {
           item.checked = false
           item.drivingIntentionId = item.id
-          item.id = ''
         })
       }
       JYXList.value = res.data
       if(data && data.length > 0) {
-        data.forEach(item => {
-          item.checked = true
-        })
-        JYXList.value = res.data.map(a => {
-          let obj = data.find(b => b.drivingIntentionId === a.drivingIntentionId)
-          return obj || a
-        })
-        selectedList.value = JYXList.value.filter(a => a.checked)
+        // data.forEach(item => {
+        //   item.checked = true
+        // })
+        // JYXList.value = res.data.map(a => {
+        //   let obj = data.find(b => b.drivingIntentionId === a.drivingIntentionId)
+        //   return obj || a
+        // })
+        // selectedList.value = JYXList.value.filter(a => a.checked)
+        selectedList.value = JSON.parse(JSON.stringify(data))
+        selectedKeys.value = selectedList.value.map(a => a.drivingIntentionId)
       }
     } else {
       ElMessage({
@@ -145,7 +193,7 @@ const handleCancel = () => {
 // 保存
 const handleConfirm = () => {
   emits('close', {
-    list: JYXList.value,
+    list: selectedList.value,
     index: editIndex.value
   })
 }

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

@@ -121,6 +121,7 @@ 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 => {

+ 75 - 0
src/layouts/components/JYXDetail/index.vue

@@ -0,0 +1,75 @@
+<template>
+  <div>
+    <el-row :gutter="20">
+      <el-col class="m-top-10" :span="12">
+        产品类型:{{ detailData?.productType=='1'?'主险':detailData?.productType=='2'?'附加险':'--' }}
+      </el-col>
+      <el-col class="m-top-10" :span="12">
+        上级产品:--
+      </el-col>
+      <el-col class="m-top-10" :span="12">
+        产品名称:{{ detailData?.productName?detailData?.productName:'--' }}
+      </el-col>
+      <el-col class="m-top-10" :span="12">
+        产品别名:{{ detailData?.alias?detailData?.alias:'--' }}
+      </el-col>
+      <el-col class="m-top-10" :span="12">
+        保险公司:{{ detailData?.companyName?detailData?.companyName:'--' }}
+      </el-col>
+      <el-col class="m-top-10" :span="12">
+        价格设置:{{ detailData?.premiumSetting=='1'?'统一价格':detailData?.premiumSetting=='2'?'座位数价格':'--' }}
+      </el-col>
+      <el-col class="m-top-10" :span="12" v-if="detailData?.premiumSetting=='1'">
+        总保额:{{ detailData?.coverage?`${detailData?.coverage}万`:'--' }}
+      </el-col>
+      <el-col class="m-top-10" :span="12" v-if="detailData?.premiumSetting=='1'">
+        总保费:{{ detailData?.premium?detailData?.premium:'--' }}
+      </el-col>
+      <el-divider></el-divider>
+      <el-col :span="4"  v-if="detailData?.premiumSetting=='2'">座位数:</el-col>
+      <el-col :span="20" v-if="detailData?.premiumSetting=='2'">
+        <el-row :gutter="20">
+          <el-col :span="12" v-for="item in detailData?.blameList">
+            {{ item.seats }}座 | {{ item.coverage }}万 | {{ item.premium }}元
+          </el-col>
+        </el-row>
+      </el-col>
+      <el-col class="m-top-10" :span="4">保障范围:</el-col>
+      <el-col class="m-top-10" :span="20">
+        <el-table
+          :data="detailData?.blameList"
+        >
+          <el-table-column prop="blame" label="保障范围"></el-table-column>
+          <el-table-column prop="blameCoverage" label="保额"></el-table-column>
+          <el-table-column prop="blamePremium" label="保费"></el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from "@/api";
+import {ElMessage} from "element-plus";
+
+let detailData = ref(undefined)
+let initData = (id) => {
+  api.projectApi.getById(id).then(res => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+defineExpose({
+  initData
+})
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 0 - 2
src/views/marketingManagement/configurate.vue

@@ -511,8 +511,6 @@ const deleteDeptData = (scope) => {
       checkedDeptIds.value = [...brr]
       basicForm.value.deptIds = [...checkedDeptIds.value]
       deptData.value = [...checkedDeptData.value]
-      console.log(123, basicForm.value.deptIds)
-      console.log(456, deptData.value)
     }
   }).catch(( action ) => {
 

+ 1 - 1
src/views/quoteConfig/project/index.vue

@@ -121,7 +121,7 @@ const initCompany = () => {
 }
 const companyChose = (item, index) => {
   companyIndex.value = index
-  companyId.value = item.companyCode
+  companyId.value = item.id
   initData()
 }
 

+ 58 - 31
src/views/quoteConfig/project/modules/projectAdd.vue

@@ -64,7 +64,7 @@
                   >
                     <el-table-column label="名称" prop="productName">
                       <template #default="scope">
-                        <a>{{ scope.row.productName }}</a>
+                        <el-button link type="primary" @click="getJYXDetail(scope.row)">{{ scope.row.productName }}</el-button>
                       </template>
                     </el-table-column>
                     <el-table-column label="客户端状态" prop="selectedStatus">
@@ -109,17 +109,17 @@
                     </el-table-column>
                     <el-table-column label="保额" prop="optionId">
                       <template #default="scope">
-                        <el-select v-if="projectAddFrom.schemeType === 2" v-model="scope.row.moneyId" style="width: 150px" multiple>
+                        <el-select :disabled="projectAddFrom.productId == '0330' || projectAddFrom.productId == '0330034002' || projectAddFrom.productId == '0330034001'" v-if="projectAddFrom.schemeType === 2" v-model="scope.row.moneyId" style="width: 150px" multiple>
                           <el-option v-for="m in scope.row.options" :label="m.label" :key="m.id" :value="m.id"></el-option>
                         </el-select>
-                        <el-select v-else v-model="scope.row.moneyId" style="width: 150px" @change="">
+                        <el-select :disabled="projectAddFrom.productId == '0330' || projectAddFrom.productId == '0330034002' || projectAddFrom.productId == '0330034001'" v-else v-model="scope.row.moneyId" style="width: 150px" @change="">
                           <el-option v-for="m in scope.row.options" :label="m.label" :key="m.id" :value="m.id"></el-option>
                         </el-select>
                       </template>
                     </el-table-column>
                     <el-table-column label="操作">
                       <template #default="scope">
-                        <el-button link type="primary" @click="insuranceTypeDel(item, scope.row)">删除</el-button>
+                        <el-button :disabled="projectAddFrom.productId == '0330' || projectAddFrom.productId == '0330034002' || projectAddFrom.productId == '0330034001'" link type="primary" @click="insuranceTypeDel(item, scope.row)">删除</el-button>
                       </template>
                     </el-table-column>
                   </el-table>
@@ -148,6 +148,13 @@
     >
       <insurance ref="InsuranceTypeRef" @close="handleClose" ></insurance>
     </el-dialog>
+    <el-dialog
+      v-model="JYXDetailShow"
+      title="驾意险详情"
+      width="600"
+    >
+      <detail ref="JYXDetail"></detail>
+    </el-dialog>
   </div>
 </template>
 
@@ -159,12 +166,15 @@ import { useRouter, useRoute } from 'vue-router'
 import insurance from '../../../../layouts/components/InsuranceType/index.vue'
 import driving from '../../../../layouts/components/DrivingType/index.vue'
 import rule from '../../../../components/ruleConditionContainer/index.vue'
+import detail from '../../../../layouts/components/JYXDetail/index.vue'
+import Detail from "@/views/representative/detail.vue";
 
 const myRouter = useRouter()
 const myRoute = useRoute()
 const ProjectAddRef = ref<FormInstance>()
 const InsuranceTypeRef = ref(null)
 const DrivingTypeRef = ref(null)
+const JYXDetail = ref(null)
 
 // 是否编辑
 let isEdit = ref(false)
@@ -191,8 +201,17 @@ let projectAddRules = ref<FormRules>({
   ]
 })
 
+// 驾意险详情
+let JYXDetailShow = ref(false)
+const getJYXDetail = (row) => {
+  JYXDetailShow.value = true
+  nextTick(() => {
+    JYXDetail.value.initData(row.drivingIntentionId)
+  })
+}
+
 // 新增的时候初始化已有的方案
-const initProduct = () => {
+const initProduct = (e) => {
   api.projectApi.getSchemeByCompany({
     companyId: projectAddFrom.value.companyId,
     productId: projectAddFrom.value.productId,
@@ -217,18 +236,36 @@ const initProduct = () => {
       }
     } else {
       projectAddFrom.value.ruleAttrs = []
-      projectAddFrom.value.schemeList  = [{
-        schemeName: '',
-        description: '',
-        tableData: [],
-        drivingList: [],
-        schemeInsuranceList: [],
-        drivingIntentionList: []
-      }]
-      ElMessage({
-        message: res.msg,
-        type: 'warning'
-      })
+      if(e == '0330' || e == '0330034002' || e == '0330034001') {
+        let obj = insuranceTypeList.value.find(a => a.alias == '交强险')
+        if(obj) {
+          obj.insuranceId = obj.id
+          let sub = obj.options.find(b => b.label == '投保')
+          obj.optionId = projectAddFrom.value.schemeType==1?sub?.id:projectAddFrom.value.schemeType==2?[sub?.id]:''
+          obj.moneyId = sub?.id
+        }
+        projectAddFrom.value.schemeList  = [{
+          schemeName: '',
+          description: '',
+          tableData: [obj],
+          drivingList: [],
+          schemeInsuranceList: [obj],
+          drivingIntentionList: []
+        }]
+      } else {
+        projectAddFrom.value.schemeList  = [{
+          schemeName: '',
+          description: '',
+          tableData: [],
+          drivingList: [],
+          schemeInsuranceList: [],
+          drivingIntentionList: []
+        }]
+      }
+      // ElMessage({
+      //   message: res.msg,
+      //   type: 'warning'
+      // })
     }
   })
 }
@@ -255,17 +292,7 @@ const initInsurance = () => {
 
 // 方案类型切换
 const schemeTypeChange = (e) => {
-  projectAddFrom.value.ruleAttrs = []
-  projectAddFrom.value.schemeList  = [{
-    schemeName: '',
-    description: '',
-    tableData: [],
-    drivingList: [],
-    schemeInsuranceList: [],
-    drivingIntentionList: []
-  }]
-  initProduct()
-  // rulesAttrList.value = defaultAttrList.value
+  initProduct(projectAddFrom.value.productId)
 }
 
 // 保险公司
@@ -369,13 +396,13 @@ const handleDriving = (item, index) => {
 }
 const handleDrivingClose = ( obj ) => {
   if(obj.list && obj.list.length > 0) {
-    let selectList = obj.list.filter(a => a.checked)
-    selectList.forEach(sub => {
+    // let selectList = obj.list.filter(a => a.checked)
+    obj.list.forEach(sub => {
       sub.drivingIntentionId = sub.drivingIntentionId
       sub.selectedStatus = sub.selectedStatus?sub.selectedStatus:'1'
       sub.quantity = sub.quantity?sub.quantity:'1'
     })
-    projectAddFrom.value.schemeList[obj.index].drivingList = selectList
+    projectAddFrom.value.schemeList[obj.index].drivingList = obj.list
   }
   drivingShow.value = false
 }