Jelajahi Sumber

协议管理添加非车配置

@dongkboy 2 tahun lalu
induk
melakukan
c05a0595c2

+ 40 - 0
src/http/moudules/insCompany.js

@@ -532,3 +532,43 @@ export const auditBatch = (data) => {
     data
   })
 }
+// 根据协议id获取意外险信息
+export const getDrivingInsurance = (data) => {
+  return axios({
+    url: '/api/drivingInsurance/getDrivingInsurance',
+    method: "post",
+    data
+  })
+}
+//指定意外险添加匹配规则
+export const addDrivingInsurance = (data) => {
+  return axios({
+    url: '/api/drivingInsurance/addDrivingInsurance',
+    method: "post",
+    data
+  })
+}
+//非车规则分页查询
+export const InsuranceRuleQuery = (data) => {
+  return axios({
+    url: '/api/drivingInsurance/catDrivingInsuranceRule',
+    method: "post",
+    data
+  })
+}
+//非车规则编辑
+export const updateDrivingInsurance = (data) => {
+  return axios({
+    url: '/api/drivingInsurance/updateDrivingInsurance',
+    method: "post",
+    data
+  })
+}
+//非车规则删除
+export const deleteDrivingInsurance = (data) => {
+  return axios({
+    url: '/api/drivingInsurance/deleteDrivingInsurance',
+    method: "post",
+    data
+  })
+}

+ 317 - 3
src/views/AgreementManage/CarInsurance/AgreementEntry.vue

@@ -138,6 +138,10 @@
                     <kt-button label="承保规则" :size="overSize" type="text" perms="agreement:input:underwritingRules"
                       @click="underwritingRulesButton(scope.$index, scope.row)" />
                   </el-dropdown-item>
+                  <el-dropdown-item>
+                    <kt-button label="非车配置" :size="overSize" type="text" perms="agreement:input:underwritingRules"
+                      @click="nonVehicleConfigButton(scope.$index, scope.row)" />
+                  </el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
             </el-button>
@@ -384,7 +388,8 @@
           <el-checkbox v-for="city in productsTypeoptions" :label="city.dictValue" :key="city.dictValue">{{ city.dictTag
           }}</el-checkbox>
         </el-checkbox-group>
-        <el-button type="success" size="small" style="margin-left: 20px" :disabled="productCostForm.productId.length==0" @click="productAdd">产品录入</el-button>
+        <el-button type="success" size="small" style="margin-left: 20px" :disabled="productCostForm.productId.length == 0"
+          @click="productAdd">产品录入</el-button>
         <el-button type="success" size="small" style="margin-left: 20px" @click="productHistory">历史记录</el-button>
       </div>
       <el-form :inline="true" :model="productpageRequest" class="demo-form-inline" size="small">
@@ -407,7 +412,7 @@
         </el-form-item>
         <el-form-item label="费用止期">
           <el-date-picker style="width: 100%" v-model="productpageRequest.costsEndDate" type="date" placeholder="选择费用结束日期"
-            value-format="yyyy-MM-dd">
+            @change="costsEndDateChange" value-format="yyyy-MM-dd">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="费用描述">
@@ -1092,6 +1097,96 @@
         :operator="operatorlist" over-size="small" @cancelForm="underwritingRulesHistoryDetailsDialogVisible = false"
         :disabled="true"></Product-Cost-Form>
     </el-dialog>
+    <el-dialog title="非车配置" :visible.sync="nonVehicleConfigDialogVisible" width="80%" :fullscreen="true">
+      <div class="flex a-c p-2">
+        <el-form :inline="true" :model="accidentalInsuranceRequest" class="demo-form-inline" size="small"
+          label-width="100px">
+          <el-form-item label="规则起期">
+            <el-date-picker style="width: 100%" v-model="accidentalInsuranceRequest.ruleEndTime" type="date"
+              placeholder="选择开始日期" value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="规则止期">
+            <el-date-picker style="width: 100%" v-model="accidentalInsuranceRequest.ruleStartTime" type="date"
+              placeholder="选择结束日期" value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="accidentalInsuranceFindPage">查询</el-button>
+            <el-button @click="accidentAddRule" type="success" size="small">添加规则</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <kt-common-table :tableHeights="700" :SerialShow="false" :operationWidth="200" :showOperation="true"
+        :showBatchDelete="false" :showBatchSettled="false" :showBatchPrint="false" :data="accidentalInsuranceResult"
+        :columns="accidentalInsuranceColumns" @findPage="accidentalInsuranceFindPage" button2Name="编辑"
+        permsButton2="agreement:input:underwritingRules" permsButton3="agreement:input:underwritingRules"
+        button2Background="#E6A23C" @handleButton2="accidentalInsuranceUpdate" button2Icon="" button3Name="删除"
+        button3Background="#F56C6C" @handleButton3="accidentalInsuranceDelete" button3Icon="">
+      </kt-common-table>
+    </el-dialog>
+    <el-dialog title="规则配置" :visible.sync="nonVehicleRuledialogVisible" width="60%">
+      <el-form :model="nonVehicleRuleObject" class="demo-form-inline" size="small" label-width="100px">
+        <el-form-item label="意外险大类">
+          <el-select clearable filterable v-model="nonVehicleRuleObject.parentId" placeholder="选择意外险" style="width:400px"
+            @change="accidentalInsuranceCategoryChange">
+            <el-option v-for="(item, index) in accidentalInsuranceCategoryList" :key="index" :label="item.projectName"
+              :value="item.projectCode"></el-option>
+          </el-select>
+          <el-select clearable filterable v-model="nonVehicleRuleObject.productId" placeholder="选择意外险"
+            @change="accidentalInsuranceSubcategoryChange" v-if="accidentalInsuranceSubcategoryList.length > 0"
+            style="width:400px">
+            <el-option v-for="(item, index) in accidentalInsuranceSubcategoryList" :key="index" :label="item.projectName"
+              :value="item.projectCode"></el-option>
+          </el-select>
+        </el-form-item>
+        <div class="ruleConfigurationItem">
+          <span>规则配置项</span>
+        </div>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="座位数">
+              <el-input-number v-model="nonVehicleRuleObject.seatNumMin" :min="0" :max="10" label="最小"></el-input-number>
+              <i class="el-icon-minus"></i>
+              <el-input-number v-model="nonVehicleRuleObject.seatNumMax" :min="0" :max="10" label="最大"></el-input-number>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="三者保额	">
+              <el-input-number v-model="nonVehicleRuleObject.thirdPartyLnsuranceMin" :min="0" :max="1000" :step="50"
+                label="最小"></el-input-number>
+              <i class="el-icon-minus"></i>
+              <el-input-number v-model="nonVehicleRuleObject.thirdPartyLnsuranceMax" :min="0" :max="1000" :step="50"
+                label="最大"></el-input-number>
+              <span>万元</span>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="使用性质">
+              <el-select v-model="nonVehicleRuleObject.useNature" placeholder="选择使用性质" style="width:300px">
+                <el-option v-for="(item, index) in natureOfVehicleUseoptions" :key="index" :label="item.dictTag"
+                  :value="item.dictValue"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="排序">
+              <el-input-number v-model="nonVehicleRuleObject.sort" :min="0" :max="10"></el-input-number>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="规则描述">
+              <el-input type="textarea" v-model="nonVehicleRuleObject.ruleDesc" maxlength="100"
+                show-word-limit></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="nonVehicleRuledialogVisible = false">取 消</el-button>
+        <el-button size="small" type="primary" @click="nonVehicleRuleObjectSubmit">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -1112,6 +1207,40 @@ export default {
   },
   data() {
     return {
+      data: [
+        {
+          projectCode: "02746045001001",
+          projectName: "国任VIP驾乘-非营运客车",
+          children: [
+            {
+              id: 222,
+            }
+          ],
+        }
+      ],
+      nonVehicleRuleObject: {
+        parentId: "",
+        parentName: "",
+        productId: "",
+        productName: "",
+        seatNumMin: 0,
+        seatNumMax: 0,
+        thirdPartyLnsuranceMin: 0,
+        thirdPartyLnsuranceMax: 0,
+        useNature: "",
+        ruleDesc: "",
+        sort: 0,
+      },//非车规则对象
+
+      accidentalInsuranceRequest: {
+        ruleEndTime: "",
+        ruleStartTime: "",
+      },
+
+      accidentalInsuranceCategoryList: [],//意外险大类
+      accidentalInsuranceSubcategoryList: [],//子类
+      nonVehicleRuledialogVisible: false,
+      nonVehicleRuledialogType: 'add',
       operationTypeOption: [
         {
           label: '新增',
@@ -1126,6 +1255,14 @@ export default {
       ],
       areaOptions: [],
       productCostCopyInfo: {},
+      accidentalInsuranceColumns: [
+        { prop: "productId", label: "产品代码", minWidth: 180, formatter: this.productIdFormatter },
+        { prop: "productName", label: "方案名称", minWidth: 160, formatter: this.productNameFormatter },
+        { prop: "ruleDesc", label: "规则描述", minWidth: 160 },
+        { prop: "useNature", label: "使用性质", minWidth: 160, formatter: this.useNatureFormatter },
+        { prop: "seatNumMin", label: "座位数/座", minWidth: 160, formatter: this.seatNumMinFormatter },
+        { prop: "thirdPartyLnsuranceMin", label: "三者保额/万元", minWidth: 160, formatter: this.thirdPartyLnsuranceMinFormatter },
+      ],
       agreementHistoryRecordColumns: [
         { prop: "agreementCode", label: "协议代码", minWidth: 180 },
         { prop: "agreementName", label: "协议名称", minWidth: 160 },
@@ -1619,6 +1756,7 @@ export default {
       underwritingRulesVehicleFactorVisible: false, //承保规则    显示/隐藏
       underwritingRulesAddVehicleFactorVisible: false, //承保规则录入    显示/隐藏
       productCostCopyDialogVisible: false,//费用复制弹窗
+      nonVehicleConfigDialogVisible: false,//非车配置窗口
       //产品list获取
       roductList1: [], //产品绑定list
       treedata: [], //授权结构树
@@ -1732,7 +1870,7 @@ export default {
       productcopyItemPageRequest: {
         productCode: "",
         agreementId: "",
-        costsDescription:"",
+        costsDescription: "",
         pageNum: 1,
         pageSize: 20,
       },
@@ -1788,6 +1926,7 @@ export default {
       underwritingRulesResult: [], //承保规则集合
       agreementhistoryRecordResult: [], //协议历史
       productcopyItemResult: [],//协议费用列表
+      accidentalInsuranceResult: [],//非车规则列表
       pageRequest: {
         //查询的默认条件
         pageNum: 1,
@@ -1956,6 +2095,8 @@ export default {
       productsTypeoptions: [], //车险产品字典
       productsTypeRuleoptions: [], //车险产品字典(不含费用的兜底配置)
       InsInsuranceKindoptions: [],//险种配置
+      natureOfVehicleUseoptions: [],//车辆使用性质
+
       //操作符字典
       operator: { "pageNum": 1, "pageSize": 10, "columnFilters": { "label": { "name": "label", "value": "agreement_operator" } } },
       operatorlist: [],
@@ -2061,6 +2202,7 @@ export default {
     this.getDicType("supplierTypeEnum"); //供应商类型
     this.getDicType("approvalStatus"); //审批状态
     this.getDicType("productsType"); //车险产品
+    this.getDicType("natureOfVehicleUse"); //车险产品
     this.findPage();
     this.$api.insCompany.gainTopList("1").then((res) => {
       this.prodInsurance = res.data;
@@ -2093,6 +2235,66 @@ export default {
     this.findLeftTreeData();
   },
   methods: {
+    accidentAddRule() {
+      this.nonVehicleRuledialogVisible = true;
+      this.nonVehicleRuledialogType = "add";
+      for (const key in this.nonVehicleRuleObject) {
+        if (key !== "agreementId") {
+          this.nonVehicleRuleObject[key] = "";
+        }
+      }
+    },
+    accidentalInsuranceCategoryChange(value) {
+      this.nonVehicleRuleObject.parentName = this.accidentalInsuranceCategoryList.find(val => val.projectCode == value).projectName;
+      this.accidentalInsuranceSubcategoryList = this.accidentalInsuranceCategoryList.find(val => val.projectCode == value).children;
+    },
+    accidentalInsuranceSubcategoryChange(value) {
+      this.nonVehicleRuleObject.productName = this.accidentalInsuranceSubcategoryList.find(val => val.projectCode == value).projectName;
+    },
+    nonVehicleRuleObjectSubmit() {
+      let VehicleRuleObj = this.nonVehicleRuleObject;
+      if (VehicleRuleObj.thirdPartyLnsuranceMin) {
+        VehicleRuleObj.thirdPartyLnsuranceMin = VehicleRuleObj.thirdPartyLnsuranceMin * 10000;
+        VehicleRuleObj.thirdPartyLnsuranceMax = VehicleRuleObj.thirdPartyLnsuranceMax * 10000;
+      }
+      if (this.nonVehicleRuledialogType == 'add') {
+        this.$api.insCompany.addDrivingInsurance({
+          agreementId: this.agreementId,
+          ...VehicleRuleObj,
+        }).then((res) => {
+          if (res.code == '200') {
+            this.nonVehicleRuledialogVisible = false;
+            this.accidentalInsuranceFindPage();
+            this.$message({
+              type: 'success',
+              message: res.msg,
+            });
+          } else {
+            this.$message({
+              type: 'error',
+              message: res.msg,
+            });
+          }
+        });
+      } else {
+        this.$api.insCompany.updateDrivingInsurance(this.nonVehicleRuleObject).then((res) => {
+          if (res.code == '200') {
+            this.nonVehicleRuledialogVisible = false;
+            this.accidentalInsuranceFindPage();
+            this.$message({
+              type: 'success',
+              message: res.msg,
+            });
+          } else {
+            this.$message({
+              type: 'error',
+              message: res.msg,
+            });
+          }
+        });
+      }
+
+    },
     //协议历史操作时间
     agreementHistorydaterange(e) {
       if (e) {
@@ -2182,6 +2384,16 @@ export default {
       });
 
 
+    },
+    costsEndDateChange(e) {
+      let tempStartDate = this.productpageRequest.costStartDate;
+      if (!tempStartDate) {
+        this.productpageRequest.costsEndDate = null;
+        this.$message({
+          message: "起期不能为空",
+          type: "error",
+        });
+      }
     },
     productcopyItemQuery() {
       this.productcopyItemFindPage();
@@ -2391,6 +2603,24 @@ export default {
       this.agreementHistoryCostFindPage();
       this.agreementHistoryRecordDialogVisible = true;
     },
+    //非车规则分页查询
+    accidentalInsuranceFindPage(data) {
+      let params = {
+        pageNum: 1,
+        pageSize: 20,
+        agreementId: this.agreementId,
+        ...this.accidentalInsuranceRequest,
+      }
+      if (data && data.pageRequest) {
+        params.pageNum = data.pageRequest.pageNum;
+        params.pageSize = data.pageRequest.pageSize;
+      }
+      this.$api.insCompany
+        .InsuranceRuleQuery(params)
+        .then((res) => {
+          this.accidentalInsuranceResult = res.data;
+        });
+    },
     agreementHistoryCostFindPage(data) {
       if (data && data.pageRequest) {
         this.productpageRequest.pageNum = data.pageRequest.pageNum;
@@ -2492,6 +2722,21 @@ export default {
       this.underwritingRulesAddDialogTitle = "承保规则录入";
       this.underwritingRulesAddVehicleFactorVisible = true;
     },
+    nonVehicleConfigButton(index, row) {
+      this.agreementId = row.id;
+      this.accidentalInsuranceFindPage();
+      this.$api.insCompany.getDrivingInsurance({ agreementId: row.id }).then((res) => {
+        if (res.code == '200') {
+          this.accidentalInsuranceCategoryList = res.data;
+          this.nonVehicleConfigDialogVisible = true;
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
     //产品删除
     productDelete({ row, column }) {
       this.$confirm("此操作将永久删除, 是否继续?", "提示", {
@@ -2565,6 +2810,32 @@ export default {
         }
       });
     },
+    //非车规则编辑
+    accidentalInsuranceUpdate({ row, column }) {
+      console.log(row)
+      this.nonVehicleRuledialogType = "edit";
+      this.nonVehicleRuleObject = Object.assign({}, row);
+      this.nonVehicleRuleObject.thirdPartyLnsuranceMin = this.nonVehicleRuleObject.thirdPartyLnsuranceMin / 10000;
+      this.nonVehicleRuleObject.thirdPartyLnsuranceMax = this.nonVehicleRuleObject.thirdPartyLnsuranceMax / 10000;
+      this.nonVehicleRuledialogVisible = true;
+
+    },
+    accidentalInsuranceDelete({ row, column }) {
+      this.$api.insCompany.deleteDrivingInsurance({ id: row.id }).then((res) => {
+        if (res.code == '200') {
+          this.accidentalInsuranceFindPage();
+          this.$message({
+            type: 'success',
+            message: res.msg,
+          });
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
     //承保规则编辑
     underwritingRulesUpdate({ row, column }) {
       this.$api.insCompany.getUndwrtRulesFactorQuery(row.id).then((res) => {
@@ -3056,6 +3327,40 @@ export default {
           return '删除'
       }
     },
+    useNatureFormatter(row, column) {
+      let natureOfVehicle = row.useNature;
+      return CommonUtil.getDataName({
+        dataList: this.natureOfVehicleUseoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: natureOfVehicle,
+      });
+    },
+    productIdFormatter(row, column) {
+
+      if (row.productId) {
+        return row.productId
+      } else {
+        return row.parentId
+      }
+    },
+    productNameFormatter(row, column) {
+      if (row.productName) {
+        return row.productName
+      } else {
+        return row.parentName
+      }
+    },
+    seatNumMinFormatter(row, column) {
+      let NumMin = row.seatNumMin;
+      let NumMax = row.seatNumMax;
+      return NumMin + "~" + NumMax;
+    },
+    thirdPartyLnsuranceMinFormatter(row, column) {
+      let NumMin = row.thirdPartyLnsuranceMin / 10000;
+      let NumMax = row.thirdPartyLnsuranceMax / 10000;
+      return NumMin + "~" + NumMax;
+    },
     auditTypeFormation(row, column) {
       let expenseAudit = row.isAudit;
       let expense = this.expenseAuditlist.find(val => val.value == expenseAudit).label;
@@ -3423,4 +3728,13 @@ export default {
 .el-icon-arrow-down {
   font-size: 12px;
 }
+
+.ruleConfigurationItem {
+  padding: 20px;
+
+  span {
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
 </style>