Quellcode durchsuchen

协议管理页面改版

@dongkboy vor 2 Jahren
Ursprung
Commit
35be812300

+ 0 - 1
src/assets/css/common.css

@@ -125,7 +125,6 @@
 .dialog-title{
     font-weight: bold;
     padding-bottom: 10px;
-    border-bottom:  1px solid #F1F3F6;
 }
 .el-pager li.active,.el-select-dropdown__item.selected,.el-button--text,.el-tabs__item.is-active,.el-select-dropdown.is-multiple .el-select-dropdown__item.selected,
 .el-checkbox__input.is-checked+.el-checkbox__label,.el-button--primary.is-plain:focus{

+ 540 - 365
src/components/Form/ProductCostForm.vue

@@ -1,391 +1,475 @@
 <template>
-  <div style="padding-bottom:100px;">
-    <el-form ref="productCostForm" :model="localForm" label-width="200px" :size="overSize" :disabled="disabled">
-      <el-card shadow="hover" class="margin-bom">
-        <div slot="header" class="clearfix flex j-s a-c">
-          <div class="flex j-s a-c">
-            <img src="../../../src/icon/car.png" alt class="icon-img" />
-            <span>车辆信息</span>
+  <div class="flex j-s " style="position: relative;">
+    <div class="sidebarShortcut">
+      <ul class="flex j-c a-c f-c">
+        <li v-if="underwritingRulesForm" :class="{ sidebarstyle: sidebarItem == 'gzxx' }" class="flex a-c " @click="scrollToSection('gzxx')">
+          <div :style="{ opacity: sidebarItem == 'gzxx' ? 1 : 0 }" class="ornament flex a-c j-c" ></div>规则信息
+        </li>
+        <li :class="{ sidebarstyle: sidebarItem == 'clxx' }" class="flex a-c " @click="scrollToSection('clxx')">
+          <div :style="{ opacity: sidebarItem == 'clxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>车辆信息
+        </li>
+        <li :class="{ sidebarstyle: sidebarItem == 'czxx' }" class="flex a-c " @click="scrollToSection('czxx')">
+          <div :style="{ opacity: sidebarItem == 'czxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>车主信息
+        </li>
+        <li :class="{ sidebarstyle: sidebarItem == 'tbrxx' }" class="flex a-c " @click="scrollToSection('tbrxx')">
+          <div :style="{ opacity: sidebarItem == 'tbrxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>投保人信息
+        </li>
+        <li :class="{ sidebarstyle: sidebarItem == 'bbrxx' }" class="flex a-c " @click="scrollToSection('bbrxx')">
+          <div :style="{ opacity: sidebarItem == 'bbrxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>被保人信息
+        </li>
+        <li :class="{ sidebarstyle: sidebarItem == 'xbxx' }" class="flex a-c " @click="scrollToSection('xbxx')">
+          <div :style="{ opacity: sidebarItem == 'xbxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>险别信息
+        </li>
+        <li :class="{ sidebarstyle: sidebarItem == 'bsfyyz' }" class="flex a-c " @click="scrollToSection('bsfyyz')">
+          <div :style="{ opacity: sidebarItem == 'bsfyyz' ? 1 : 0 }" class="ornament flex a-c j-c"></div>保司费用因子
+        </li>
+      </ul>
+    </div>
+    <div class="tab-panecent1">
+      <el-form ref="productCostForm" :model="localForm" label-width="120px" :size="overSize" :disabled="disabled">
+        <el-card shadow="hover" class="margin-bom" id="gzxx" v-if="underwritingRulesForm">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>规则信息</span>
+            </div>
           </div>
-          <el-button @click="toggle('Car')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
-            CarCollapsed
-            ? '收起' : '展开'
-          }}</el-button>
-        </div>
-        <div class="p-2" v-show="CarCollapsed">
-          <el-col v-for=" (formItems, index) in CarAttr" :key="index" :span="formItems.attrType == 'checkbox' ? 24 : 11">
-            <el-form-item :label="formItems.attrName">
-              <template v-if="formItems.attrType == 'inputNumber'">
-                <template v-if="formItems.operator == '1' || formItems.operator == null">
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                  <i class="el-icon-minus"></i>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '2'">
-                  <span><</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '3'">
-                  <span>≤</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '4'">
-                  <span>></span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
+          <div class="p-2" v-show="CarCollapsed">
+            <el-form ref="form" :model="underwritingRulesForm" label-width="80px" size="small">
+              <el-col :span="8">
+                <el-form-item label="是否有效">
+                  <el-select v-model="underwritingRulesForm.validInd" placeholder="请选择活动区域">
+                    <el-option label="有效" value="1"></el-option>
+                    <el-option label="无效" value="0"></el-option>
+                    <el-option label="待审核" value="2"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="规则起期">
+                  <el-date-picker value-format="yyyy-MM-dd" v-model="underwritingRulesForm.rulesStartDate" type="date"
+                    placeholder="选择日期">
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="规则止期">
+                  <el-date-picker value-format="yyyy-MM-dd" v-model="underwritingRulesForm.rulesEndDate" type="date"
+                    @change="rulesEndDateChange" placeholder="选择日期">
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24">
+                <el-form-item label="规则描述">
+                  <el-input type="textarea" v-model="underwritingRulesForm.ruleDescription" placeholder="请输入承保规则描述" maxlength="100"
+                    show-word-limit></el-input>
+                </el-form-item>
+              </el-col>
+            </el-form>
+          </div>
+        </el-card>
+        <el-card shadow="hover" class="margin-bom" id="clxx">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>车辆信息</span>
+            </div>
+            <!-- <el-button @click="toggle('Car')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
+              CarCollapsed
+              ? '收起' : '展开'
+            }}</el-button> -->
+          </div>
+          <div class="p-2" v-show="CarCollapsed">
+            <el-col v-for=" (formItems, index) in CarAttr" :key="index"
+              :span="formItems.attrType == 'checkbox' ? 24 : 11">
+              <el-form-item :label="formItems.attrName">
+                <template v-if="formItems.attrType == 'inputNumber'">
+                  <template v-if="formItems.operator == '1' || formItems.operator == null">
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                    <i class="el-icon-minus"></i>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '2'">
+                    <span><</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '3'">
+                    <span>≤</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '4'">
+                    <span>></span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '5'">
+                    <span>≥</span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
+                    placeholder="请选择" style="width: 120px;margin-left: 20px;">
+                    <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
+                      :value="operatoritem.value"></el-option>
+                  </el-select>
                 </template>
-                <template v-if="formItems.operator == '5'">
-                  <span>≥</span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
+                <div v-if="formItems.attrType == 'select'" style="display: flex;">
+                  <el-select multiple v-model="formItems.minArray" placeholder="请选择" style="width: 100%;"
+                    @change="selectChange($event, formItems.id, 'min')">
+                    <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
+                      :value="dict.name"></el-option>
+                  </el-select>
+                  <el-checkbox style="margin-left: 10px;" v-if="formItems.attrCode == 'LicenseNo'"
+                    v-model="LicenseNoChecked"
+                    @change="LicenseNoCheckedChange($event, 'LicenseNo', 'min')">全选</el-checkbox>
+                </div>
+                <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"
+                  placeholder="输入(宝马、奥迪等)多个输入,用,隔开"></el-input>
+                <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.minArray"
+                  @change="checkboxChange($event, formItems.id, 'min')">
+                  <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
+                </el-checkbox-group>
+                <div class="flex " v-if="formItems.attrType == 'radio'">
+                  <el-radio-group v-model="formItems.min">
+                    <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
+                    }}</el-radio-button>
+                  </el-radio-group>
+                  <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
+                    @click="radiouncheck(formItems)">取消选择</el-button>
+                </div>
+              </el-form-item>
+            </el-col>
+          </div>
+        </el-card>
+        <el-card shadow="hover" class="margin-bom" id="czxx">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>车主信息</span>
+            </div>
+            <!-- <el-button @click="toggle('Carowners')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
+              CarownersCollapsed
+              ? '收起' : '展开'
+            }}</el-button> -->
+          </div>
+          <div class="p-2" v-show="CarownersCollapsed">
+            <el-col v-for=" (formItems, index) in CarownersAttr" :key="index"
+              :span="formItems.attrType == 'checkbox' ? 24 : 12">
+              <el-form-item :label="formItems.attrName">
+                <template v-if="formItems.attrType == 'inputNumber'">
+                  <template v-if="formItems.operator == '1' || formItems.operator == null">
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                    <i class="el-icon-minus"></i>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '2'">
+                    <span><</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '3'">
+                    <span>≤</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '4'">
+                    <span>></span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '5'">
+                    <span>≥</span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
+                    placeholder="请选择" style="width: 120px;margin-left: 20px;">
+                    <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
+                      :value="operatoritem.value"></el-option>
+                  </el-select>
                 </template>
-                <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
-                  placeholder="请选择" style="width: 120px;margin-left: 20px;">
-                  <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
-                    :value="operatoritem.value"></el-option>
-                </el-select>
-              </template>
-              <div v-if="formItems.attrType == 'select'" style="display: flex;">
-                <el-select multiple v-model="formItems.minArray" placeholder="请选择" style="width: 100%;"
-                  @change="selectChange($event, formItems.id, 'min')">
+                <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
+                  style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
                   <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
                     :value="dict.name"></el-option>
                 </el-select>
-                <el-checkbox style="margin-left: 10px;" v-if="formItems.attrCode == 'LicenseNo'"
-                  v-model="LicenseNoChecked" @change="LicenseNoCheckedChange($event, 'LicenseNo', 'min')">全选</el-checkbox>
-              </div>
-              <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"
-                placeholder="输入(宝马、奥迪等)多个输入,用,隔开"></el-input>
-              <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.minArray"
-                @change="checkboxChange($event, formItems.id, 'min')">
-                <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
-              </el-checkbox-group>
-              <div class="flex " v-if="formItems.attrType == 'radio'">
-                <el-radio-group v-model="formItems.min">
-                  <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
-                  }}</el-radio-button>
-                </el-radio-group>
-                <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
-                  @click="radiouncheck(formItems)">取消选择</el-button>
-              </div>
-            </el-form-item>
-          </el-col>
-        </div>
-      </el-card>
-      <el-card shadow="hover" class="margin-bom">
-        <div slot="header" class="clearfix flex j-s a-c">
-          <div class="flex j-s a-c">
-            <img src="../../../src/icon/car.png" alt class="icon-img" />
-            <span>车主信息</span>
-          </div>
-          <el-button @click="toggle('Carowners')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
-            CarownersCollapsed
-            ? '收起' : '展开'
-          }}</el-button>
-        </div>
-        <div class="p-2" v-show="CarownersCollapsed">
-          <el-col v-for=" (formItems, index) in CarownersAttr" :key="index"
-            :span="formItems.attrType == 'checkbox' ? 24 : 12">
-            <el-form-item :label="formItems.attrName">
-              <template v-if="formItems.attrType == 'inputNumber'">
-                <template v-if="formItems.operator == '1' || formItems.operator == null">
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                  <i class="el-icon-minus"></i>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '2'">
-                  <span><</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '3'">
-                  <span>≤</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '4'">
-                  <span>></span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '5'">
-                  <span>≥</span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
-                  placeholder="请选择" style="width: 120px;margin-left: 20px;">
-                  <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
-                    :value="operatoritem.value"></el-option>
-                </el-select>
-              </template>
-              <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
-                style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
-                <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
-                  :value="dict.name"></el-option>
-              </el-select>
-              <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
+                <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
 "></el-input>
-              <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
-                @change="checkboxChange($event, formItems.id, 'min')">
-                <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
-              </el-checkbox-group>
-              <el-radio-group v-if="formItems.attrType == 'radio'" v-model="formItems.min">
-                <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
-                }}</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </div>
-      </el-card>
-      <el-card shadow="hover" class="margin-bom">
-        <div slot="header" class="clearfix flex j-s a-c">
-          <div class="flex j-s a-c">
-            <img src="../../../src/icon/car.png" alt class="icon-img" />
-            <span>投保人信息</span>
+                <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
+                  @change="checkboxChange($event, formItems.id, 'min')">
+                  <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
+                </el-checkbox-group>
+                <div class="flex " v-if="formItems.attrType == 'radio'">
+                  <el-radio-group v-model="formItems.min">
+                    <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
+                    }}</el-radio-button>
+                  </el-radio-group>
+                  <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
+                    @click="radiouncheck(formItems)">取消选择</el-button>
+                </div>
+              </el-form-item>
+            </el-col>
           </div>
-          <el-button @click="toggle('Applicant')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
-            ApplicantCollapsed
-            ? '收起' : '展开'
-          }}</el-button>
-        </div>
-        <div class="p-2" v-show="ApplicantCollapsed">
-          <el-col v-for=" (formItems, index) in ApplicantAttr" :key="index"
-            :span="formItems.attrType == 'checkbox' ? 24 : 12">
-            <el-form-item :label="formItems.attrName">
-              <template v-if="formItems.attrType == 'inputNumber'">
-                <template v-if="formItems.operator == '1' || formItems.operator == null">
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                  <i class="el-icon-minus"></i>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '2'">
-                  <span><</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '3'">
-                  <span>≤</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '4'">
-                  <span>></span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '5'">
-                  <span>≥</span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
+        </el-card>
+        <el-card shadow="hover" class="margin-bom" id="tbrxx">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>投保人信息</span>
+            </div>
+            <!-- <el-button @click="toggle('Applicant')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
+              ApplicantCollapsed
+              ? '收起' : '展开'
+            }}</el-button> -->
+          </div>
+          <div class="p-2" v-show="ApplicantCollapsed">
+            <el-col v-for=" (formItems, index) in ApplicantAttr" :key="index"
+              :span="formItems.attrType == 'checkbox' ? 24 : 12">
+              <el-form-item :label="formItems.attrName">
+                <template v-if="formItems.attrType == 'inputNumber'">
+                  <template v-if="formItems.operator == '1' || formItems.operator == null">
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                    <i class="el-icon-minus"></i>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '2'">
+                    <span><</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '3'">
+                    <span>≤</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '4'">
+                    <span>></span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '5'">
+                    <span>≥</span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <el-select v-model="formItems.operator" placeholder="请选择"
+                    @change="selectoperatorChange($event, formItems.id)" style="width: 120px;margin-left: 20px;">
+                    <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
+                      :value="operatoritem.value"></el-option>
+                  </el-select>
                 </template>
-                <el-select v-model="formItems.operator" placeholder="请选择"
-                  @change="selectoperatorChange($event, formItems.id)" style="width: 120px;margin-left: 20px;">
-                  <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
-                    :value="operatoritem.value"></el-option>
+                <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
+                  style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
+                  <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
+                    :value="dict.name"></el-option>
                 </el-select>
-              </template>
-              <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
-                style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
-                <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
-                  :value="dict.name"></el-option>
-              </el-select>
-              <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
+                <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
 "></el-input>
-              <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
-                @change="checkboxChange($event, formItems.id, 'min')">
-                <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
-              </el-checkbox-group>
-              <el-radio-group v-if="formItems.attrType == 'radio'" v-model="formItems.min">
-                <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
-                }}</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </div>
-      </el-card>
-      <el-card shadow="hover" class="margin-bom">
-        <div slot="header" class="clearfix flex j-s a-c">
-          <div class="flex j-s a-c">
-            <img src="../../../src/icon/car.png" alt class="icon-img" />
-            <span>被保人信息</span>
+                <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
+                  @change="checkboxChange($event, formItems.id, 'min')">
+                  <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
+                </el-checkbox-group>
+                <div class="flex " v-if="formItems.attrType == 'radio'">
+                  <el-radio-group v-model="formItems.min">
+                    <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
+                    }}</el-radio-button>
+                  </el-radio-group>
+                  <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
+                    @click="radiouncheck(formItems)">取消选择</el-button>
+                </div>
+              </el-form-item>
+            </el-col>
           </div>
-          <el-button @click="toggle('Insured')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
-            InsuredCollapsed
-            ? '收起' : '展开'
-          }}</el-button>
-        </div>
-        <div class="p-2" v-show="InsuredCollapsed">
-          <el-col v-for=" (formItems, index) in InsuredAttr" :key="index"
-            :span="formItems.attrType == 'checkbox' ? 24 : 12">
-            <el-form-item :label="formItems.attrName">
-              <template v-if="formItems.attrType == 'inputNumber'">
-                <template v-if="formItems.operator == '1' || formItems.operator == null">
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                  <i class="el-icon-minus"></i>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '2'">
-                  <span><</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '3'">
-                  <span>≤</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '4'">
-                  <span>></span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '5'">
-                  <span>≥</span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
+        </el-card>
+        <el-card shadow="hover" class="margin-bom" id="bbrxx">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>被保人信息</span>
+            </div>
+            <!-- <el-button @click="toggle('Insured')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
+              InsuredCollapsed
+              ? '收起' : '展开'
+            }}</el-button> -->
+          </div>
+          <div class="p-2" v-show="InsuredCollapsed">
+            <el-col v-for=" (formItems, index) in InsuredAttr" :key="index"
+              :span="formItems.attrType == 'checkbox' ? 24 : 12">
+              <el-form-item :label="formItems.attrName">
+                <template v-if="formItems.attrType == 'inputNumber'">
+                  <template v-if="formItems.operator == '1' || formItems.operator == null">
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                    <i class="el-icon-minus"></i>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '2'">
+                    <span><</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '3'">
+                    <span>≤</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '4'">
+                    <span>></span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '5'">
+                    <span>≥</span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
+                    placeholder="请选择" style="width: 120px;margin-left: 20px;">
+                    <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
+                      :value="operatoritem.value"></el-option>
+                  </el-select>
                 </template>
-                <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
-                  placeholder="请选择" style="width: 120px;margin-left: 20px;">
-                  <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
-                    :value="operatoritem.value"></el-option>
+                <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
+                  style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
+                  <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
+                    :value="dict.name"></el-option>
                 </el-select>
-              </template>
-              <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
-                style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
-                <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
-                  :value="dict.name"></el-option>
-              </el-select>
-              <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
+                <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
 "></el-input>
-              <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
-                @change="checkboxChange($event, formItems.id, 'min')">
-                <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
-              </el-checkbox-group>
-              <el-radio-group v-if="formItems.attrType == 'radio'" v-model="formItems.min">
-                <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
-                }}</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </div>
-      </el-card>
-      <el-card shadow="hover" class="margin-bom">
-        <div slot="header" class="clearfix flex j-s a-c">
-          <div class="flex j-s a-c">
-            <img src="../../../src/icon/car.png" alt class="icon-img" />
-            <span>险别信息</span>
+                <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
+                  @change="checkboxChange($event, formItems.id, 'min')">
+                  <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
+                </el-checkbox-group>
+                <div class="flex " v-if="formItems.attrType == 'radio'">
+                  <el-radio-group v-model="formItems.min">
+                    <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
+                    }}</el-radio-button>
+                  </el-radio-group>
+                  <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
+                    @click="radiouncheck(formItems)">取消选择</el-button>
+                </div>
+              </el-form-item>
+            </el-col>
           </div>
-          <el-button @click="toggle('insuranceType')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
-            insuranceTypeCollapsed
-            ? '收起' : '展开'
-          }}</el-button>
-        </div>
-        <div class="p-2" v-show="insuranceTypeCollapsed">
-          <el-col v-for=" (formItems, index) in insuranceTypeAttr" :key="index"
-            :span="formItems.attrType == 'checkbox' ? 24 : 12">
-            <el-form-item :label="formItems.attrName">
-              <template v-if="formItems.attrType == 'inputNumber'">
-                <template v-if="formItems.operator == '1' || formItems.operator == null">
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                  <i class="el-icon-minus"></i>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '2'">
-                  <span><</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '3'">
-                  <span>≤</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '4'">
-                  <span>></span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '5'">
-                  <span>≥</span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
+        </el-card>
+        <el-card shadow="hover" class="margin-bom" id="xbxx">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>险别信息</span>
+            </div>
+            <!-- <el-button @click="toggle('insuranceType')" style="float: right; padding: 3px 0; color: #ff9000;"
+              type="text">{{
+                insuranceTypeCollapsed
+                ? '收起' : '展开'
+              }}</el-button> -->
+          </div>
+          <div class="p-2" v-show="insuranceTypeCollapsed">
+            <el-col v-for=" (formItems, index) in insuranceTypeAttr" :key="index"
+              :span="formItems.attrType == 'checkbox' ? 24 : 12">
+              <el-form-item :label="formItems.attrName">
+                <template v-if="formItems.attrType == 'inputNumber'">
+                  <template v-if="formItems.operator == '1' || formItems.operator == null">
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                    <i class="el-icon-minus"></i>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '2'">
+                    <span><</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '3'">
+                    <span>≤</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '4'">
+                    <span>></span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '5'">
+                    <span>≥</span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
+                    placeholder="请选择" style="width: 120px;margin-left: 20px;">
+                    <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
+                      :value="operatoritem.value"></el-option>
+                  </el-select>
                 </template>
-                <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
-                  placeholder="请选择" style="width: 120px;margin-left: 20px;">
-                  <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
-                    :value="operatoritem.value"></el-option>
+                <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
+                  style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
+                  <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
+                    :value="dict.name"></el-option>
                 </el-select>
-              </template>
-              <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
-                style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
-                <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
-                  :value="dict.name"></el-option>
-              </el-select>
-              <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"></el-input>
-              <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
-                @change="checkboxChange($event, formItems.id, 'min')">
-                <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
-              </el-checkbox-group>
-              <el-radio-group v-if="formItems.attrType == 'radio'" v-model="formItems.min">
-                <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
-                }}</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </div>
-      </el-card>
-      <el-card shadow="hover" class="margin-bom">
-        <div slot="header" class="clearfix flex j-s a-c">
-          <div class="flex j-s a-c">
-            <img src="../../../src/icon/car.png" alt class="icon-img" />
-            <span>保司费用因子</span>
+                <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"></el-input>
+                <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
+                  @change="checkboxChange($event, formItems.id, 'min')">
+                  <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
+                </el-checkbox-group>
+                <div class="flex " v-if="formItems.attrType == 'radio'">
+                  <el-radio-group v-model="formItems.min">
+                    <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
+                    }}</el-radio-button>
+                  </el-radio-group>
+                  <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
+                    @click="radiouncheck(formItems)">取消选择</el-button>
+                </div>
+              </el-form-item>
+            </el-col>
           </div>
-          <el-button @click="toggle('insurerCostFactor')" style="float: right; padding: 3px 0; color: #ff9000;"
-            type="text">{{
-              insurerCostFactorCollapsed
-              ? '收起' : '展开'
-            }}</el-button>
-        </div>
-        <div class="p-2" v-show="insurerCostFactorCollapsed">
-          <el-col v-for=" (formItems, index) in insurerCostFactorAttr" :key="index"
-            :span="formItems.attrType == 'checkbox' ? 24 : 12">
-            <el-form-item :label="formItems.attrName">
-              <template v-if="formItems.attrType == 'inputNumber'">
-                <template v-if="formItems.operator == '1' || formItems.operator == null">
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                  <i class="el-icon-minus"></i>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '2'">
-                  <span><</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '3'">
-                  <span>≤</span>
-                  <el-input-number v-model="formItems.min"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '4'">
-                  <span>></span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
-                </template>
-                <template v-if="formItems.operator == '5'">
-                  <span>≥</span>
-                  <el-input-number v-model="formItems.max"></el-input-number>
+        </el-card>
+        <el-card shadow="hover" class="margin-bom" id="bsfyyz">
+          <div slot="header" class="clearfix flex j-s a-c">
+            <div class="flex j-s a-c">
+              <span>保司费用因子</span>
+            </div>
+            <!-- <el-button @click="toggle('insurerCostFactor')" style="float: right; padding: 3px 0; color: #ff9000;"
+              type="text">{{
+                insurerCostFactorCollapsed
+                ? '收起' : '展开'
+              }}</el-button> -->
+          </div>
+          <div class="p-2" v-show="insurerCostFactorCollapsed">
+            <el-col v-for=" (formItems, index) in insurerCostFactorAttr" :key="index"
+              :span="formItems.attrType == 'checkbox' ? 24 : 12">
+              <el-form-item :label="formItems.attrName">
+                <template v-if="formItems.attrType == 'inputNumber'">
+                  <template v-if="formItems.operator == '1' || formItems.operator == null">
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                    <i class="el-icon-minus"></i>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '2'">
+                    <span><</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '3'">
+                    <span>≤</span>
+                    <el-input-number v-model="formItems.min"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '4'">
+                    <span>></span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <template v-if="formItems.operator == '5'">
+                    <span>≥</span>
+                    <el-input-number v-model="formItems.max"></el-input-number>
+                  </template>
+                  <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
+                    placeholder="请选择" style="width: 120px;margin-left: 20px;">
+                    <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
+                      :value="operatoritem.value"></el-option>
+                  </el-select>
                 </template>
-                <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
-                  placeholder="请选择" style="width: 120px;margin-left: 20px;">
-                  <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
-                    :value="operatoritem.value"></el-option>
+                <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
+                  style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
+                  <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
+                    :value="dict.name"></el-option>
                 </el-select>
-              </template>
-              <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
-                style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
-                <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
-                  :value="dict.name"></el-option>
-              </el-select>
-              <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"></el-input>
-              <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
-                @change="checkboxChange($event, formItems.id, 'min')">
-                <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
-              </el-checkbox-group>
-              <el-radio-group v-if="formItems.attrType == 'radio'" v-model="formItems.min">
-                <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
-                }}</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </div>
-      </el-card>
-    </el-form>
-    <div class="flex j-c a-c" :class="{
-      'footer': true,
+                <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"></el-input>
+                <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
+                  @change="checkboxChange($event, formItems.id, 'min')">
+                  <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
+                </el-checkbox-group>
+                <div class="flex " v-if="formItems.attrType == 'radio'">
+                  <el-radio-group v-model="formItems.min">
+                    <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
+                    }}</el-radio-button>
+                  </el-radio-group>
+                  <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
+                    @click="radiouncheck(formItems)">取消选择</el-button>
+                </div>
+              </el-form-item>
+            </el-col>
+          </div>
+        </el-card>
+      </el-form>
+    </div>
+    <!-- <div class="flex j-c a-c" :class="{
+      'footer': false,
     }">
       <el-button size="small" @click="cancelForm">取消</el-button>
       <el-button v-if="!disabled" type="warning" size="small" @click="saveForm">保存</el-button>
-    </div>
+    </div> -->
   </div>
 </template>
 <script>
@@ -393,6 +477,7 @@ export default {
   name: "ProductForm",
   props: {
     form: Array,
+    underwritingRulesForm: Object,
     overSize: String,
     cardList: Array,
     operator: Array,
@@ -403,6 +488,7 @@ export default {
   },
   data() {
     return {
+      sidebarItem: "clxx",
       localForm: { myArray: this.form },
       CarCollapsed: true,
       CarownersCollapsed: true,
@@ -414,6 +500,7 @@ export default {
     };
   },
   created() {
+    console.log(this.underwritingRulesForm)
   },
   computed: {
     CarAttr() {
@@ -442,8 +529,38 @@ export default {
     }
   },
   methods: {
+    rulesEndDateChange() {
+      let tempStartDate = this.underwritingRulesForm.rulesStartDate;
+      let tempEndDate = this.underwritingRulesForm.rulesEndDate;
+      if (!tempStartDate) {
+        this.underwritingRulesForm.rulesEndDate = null;
+        this.$message({
+          message: "请先选择规则起期!",
+          type: "error",
+        });
+      }
+      if (!this.validateEndDate(tempStartDate, tempEndDate)) {
+        this.underwritingRulesForm.rulesEndDate = null;
+        this.$message({
+          message: "规则止期不能小于规则起期!",
+          type: "error",
+        });
+      }
+    },
+    validateEndDate(startDateStr, endDateStr) {
+      const startDate = new Date(startDateStr);
+      const endDate = new Date(endDateStr);
+      return endDate.getTime() > startDate.getTime();
+    },
+    scrollToSection(sectionId) {
+      this.sidebarItem = sectionId;
+      const element = document.getElementById(sectionId);
+      if (element) {
+        element.scrollIntoView({ behavior: 'smooth' });
+      }
+    },
     radiouncheck(data) {
-      data.min=null;
+      data.min = null;
     },
     //车牌全选
     LicenseNoCheckedChange(value, name, prop) {
@@ -507,13 +624,71 @@ export default {
 }
 </script>
 <style scoped lang="scss">
+.sidebarstyle {
+  background: rgba(45, 77, 137, 0.1);
+  border-radius: 4px;
+  font-weight: bold;
+  color: #2D4D89;
+}
+
+.sidebarShortcut {
+  width: 136px;
+  height: auto;
+  background: #fff;
+  padding: 0 6px;
+  border-radius: 4px;
+  box-sizing: border-box;
+  font-size: 14px;
+
+  ul {
+    list-style: none;
+    padding: 0;
+  }
+
+  ul>li {
+    padding: 6px;
+    box-sizing: border-box;
+    width: 100%;
+    margin-top: 2px;
+  }
+
+  li:hover {
+    background: rgba(45, 77, 137, 0.1);
+    border-radius: 4px 4px 4px 4px;
+    color: #2D4D89;
+    cursor: pointer;
+  }
+
+  .ornament {
+    width: 12px;
+    height: 12px;
+    border-radius: 50%;
+    background: rgba(45, 77, 137, 0.2);
+    margin-right: 10px;
+  }
+
+  .ornament::after {
+    content: "";
+    width: 6px;
+    height: 6px;
+    background: #2D4D89;
+    border-radius: 50%;
+  }
+}
+
+.tab-panecent1 {
+  height: 600px;
+  width: 90%;
+  overflow-y: auto;
+}
+
 /deep/ {
   .el-card__body {
     padding: 0;
   }
 
   .el-card__header {
-    background-color: antiquewhite;
+    background-color: #F7F7F7;
     border: none;
     padding: 15px 18px;
   }

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

@@ -218,6 +218,12 @@ export const agreementPage = (data) => {
     data
   })
 }
+export const getAllAgreement = () => {
+  return axios({
+    url: '/plt/agreement/getAllAgreement  ',
+    method: "get",
+  })
+}
 //根据id查询协议信息
 export const agreementId = (agreementId) => {
   return axios({

Datei-Diff unterdrückt, da er zu groß ist
+ 349 - 375
src/views/AgreementManage/CarInsurance/AgreementEntry.vue


+ 689 - 0
src/views/AgreementManage/CarInsurance/AgreementHistoryRecord.vue

@@ -0,0 +1,689 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+
+    <!-- 模板内容 -->
+    <div class="p-1 flex j-s ">
+      <el-form ref="queryFormRef" :inline="true" :model="productpageRequestForm" label-width="100px">
+        <el-form-item label="操作人">
+          <el-input clearable style="width:220px" size="small" placeholder="操作人"
+            v-model="productpageRequestForm.operator"></el-input>
+        </el-form-item>
+        <el-form-item label="操作类型">
+          <el-select clearable size="small" v-model="productpageRequestForm.operatorType" placeholder="请选择">
+            <el-option v-for="item in operationTypeOption" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="操作时间">
+          <el-date-picker clearable v-model="agreementHistoryOperatorTime" type="daterange" size="small"
+            value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+            @change="agreementHistorydaterange">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div>
+        <el-button size="small" type="primary" @click="agreementHistoryCostFindPage">查询</el-button>
+      </div>
+
+    </div>
+    <kt-common-table :tableHeights="650" :SerialShow="false" :operationWidth="100" :showOperation="true" button2Name="详情"
+      button2Type="text" :button2style="{ color: '#2D4D89' }" @handleButton2="agreementsHistory" :showBatchDelete="false"
+      :showBatchSettled="false" :showBatchPrint="false" :data="agreementHistoryRecordResult"
+      :columns="agreementHistoryRecordColumns" @findPage="agreementHistoryCostFindPage">
+    </kt-common-table>
+    <el-dialog title="协议历史记录详情" :visible.sync="agreementsHistoryDialogVisible" width="60%" top="6vh"
+      @close="agreementsHistorycloseDialog">
+      <el-tabs v-model="activeTabs" type="card" @tab-click="handleClickTab">
+        <el-tab-pane label="协议信息" name="first" class="tab-panestyle">
+          <div class="tab-panecent">
+            <el-form :size="overSize" :model="agreementsHistoryInfo.agreement" ref="addAgreementRef" disabled
+              label-width="130px">
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="协议代码">
+                    <el-input v-model="agreementsHistoryInfo.agreement.agreementCode" disabled placeholder="请输入协议代码"
+                      style="width: 100%"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="协议名称" prop="agreementName">
+                    <el-input v-model="agreementsHistoryInfo.agreement.agreementName" placeholder="请输入协议名称"
+                      style="width: 100%"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+
+                <el-col :span="12">
+                  <el-form-item label="协议简称" prop="agreementAbbreviation">
+                    <el-input v-model="agreementsHistoryInfo.agreement.agreementAbbreviation" placeholder="请输入协议简称"
+                      style="width: 100%"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="协议类型" prop="agreementType">
+                    <el-select v-model="agreementsHistoryInfo.agreement.agreementType" placeholder="请选择协议类型"
+                      style="width: 100%" @change="agreementTypeChange">
+                      <el-option v-for="item in agreementTypeoptions" :key="item.dictValue" :label="item.dictTag"
+                        :value="item.dictValue"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="保险公司" :prop="supplierType == '1' ? '' : 'insuranceCompanyId'">
+                    <el-cascader :disabled="supplierType == '1' || operType == 'EDIT'" style="width: 100%"
+                      v-model="agreementsHistoryInfo.agreement.insuranceCompanyId" :show-all-levels="false"
+                      :options="prodInsurance" :props="optionProps" clearable filterable></el-cascader>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="合作公司" prop="partnerCompaniesId">
+                    <el-cascader :disabled="operType == 'EDIT'" style="width: 100%"
+                      v-model="agreementsHistoryInfo.agreement.partnerCompaniesId" :show-all-levels="false"
+                      :options="ztreeNodes" :props="optionProps" clearable filterable></el-cascader>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="对接人" prop="dockingPerson">
+                    <el-input v-model="agreementsHistoryInfo.agreement.dockingPerson" placeholder="请添加对接人"
+                      style="width: 100%"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="联系方式" prop="dockingPhone">
+                    <el-input maxlength="11" show-word-limit v-model="agreementsHistoryInfo.agreement.dockingPhone"
+                      placeholder="请输入联系方式" style="width: 100%" type="text"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="含增值税结算" prop="withTax">
+                    <el-select v-model="agreementsHistoryInfo.agreement.withTax" placeholder="请选择是否含增值税结算"
+                      style="width: 100%">
+                      <el-option label="是" value="是"></el-option>
+                      <el-option label="否" value="否"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="保单日期类型" prop="matchType">
+                    <el-select v-model="agreementsHistoryInfo.agreement.matchType" placeholder="请选择保单日期类型"
+                      style="width: 100%">
+                      <el-option v-for="item in matchTypeoptions" :key="item.dictValue" :label="item.dictTag"
+                        :value="item.dictValue"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="协议生效日期" prop="startDate">
+                    <el-date-picker style="width: 100%" v-model="agreementsHistoryInfo.agreement.startDate" type="date"
+                      placeholder="选择协议生效日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="协议失效日期" prop="endDate">
+                    <el-date-picker style="width: 100%" v-model="agreementsHistoryInfo.agreement.endDate" type="date"
+                      placeholder="选择失效日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="佣金发放方式" prop="moneyType">
+                    <el-select v-model="agreementsHistoryInfo.agreement.moneyType" placeholder="请选择佣金发放方式"
+                      style="width: 100%">
+                      <el-option v-for="item in moneyTypeoptions" :key="item.dictValue" :label="item.dictTag"
+                        :value="item.dictValue"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="有效状态" prop="validStatus">
+                    <el-select v-model="agreementsHistoryInfo.agreement.validStatus" placeholder="请选择有效状态"
+                      style="width: 100%">
+                      <el-option label="有效" value="1"></el-option>
+                      <el-option label="无效" value="2"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="结算周期" prop="moneyTime">
+                    <el-select v-model="agreementsHistoryInfo.agreement.moneyTime" placeholder="请选择结算周期"
+                      style="width: 100%">
+                      <el-option :label="'T+' + item" :value="item" v-for="item of 60" :key="item"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="审核方式">
+                    <el-select v-model="agreementsHistoryInfo.agreement.auditType" placeholder="请选择审核方式"
+                      style="width: 100%">
+                      <el-option label="人工审核" value="1"></el-option>
+                      <el-option label="自动审核" value="2"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="险种配置">
+                    <el-select v-model="productFilterList" multiple placeholder="选择险种" style="width: 100%"
+                      @change="productFilterListChange">
+                      <el-option v-for="item in InsInsuranceKindoptions" :key="item.dictValue" :label="item.dictTag"
+                        :value="item.dictValue"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="序号" prop="serialNumber">
+                    <el-input-number :min="0" v-model="agreementsHistoryInfo.agreement.serialNumber"></el-input-number>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="24">
+                  <el-form-item label="描述" prop="underwritingDescription">
+                    <el-input type="textarea" :rows="2" placeholder="请输入内容"
+                      v-model="agreementsHistoryInfo.agreement.underwritingDescription"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+
+        </el-tab-pane>
+        <el-tab-pane label="保险公司账号配置" name="inscommany" class="tab-panestyle">
+          <div class="tab-panecent">
+            <el-form class="demo-ruleForm wrap-scrollbar scroll-style" :model="agreementsHistoryInfo.attributionform"
+              ref="attributionform" label-width="160px" size="small">
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item class="apistyle" label="api类型:">
+                    <el-select disabled class="widths1" v-model="agreementsHistoryInfo.attributionform.apiType">
+                      <el-option label="API" :value="1"></el-option>
+                      <el-option label="python" :value="2"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <div v-if="agreementsHistoryInfo.attributionform.apiType == 2">
+                  <el-col :span="24">
+                    <div>
+                      <h4>账号配置</h4>
+                    </div>
+                  </el-col>
+                  <el-col :span="11">
+                    <el-form-item label="用户名:" prop="username">
+                      <el-input disabled v-model="agreementsHistoryInfo.attributionform.username"
+                        placeholder="请输入用户名"></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="11">
+                    <el-form-item label="密码:" prop="password">
+                      <el-input disabled v-model="agreementsHistoryInfo.attributionform.password"
+                        placeholder="请输入密码"></el-input>
+                    </el-form-item>
+                  </el-col>
+                </div>
+                <template>
+                  <el-col :span="24">
+                    <div>
+                      <h4>配置参数</h4>
+                    </div>
+                  </el-col>
+                  <el-col :span="11" v-for="(domain, index) in agreementsHistoryInfo.attributionform.fields"
+                    :key="domain.index">
+                    <el-form-item :label="domain.label + ':'" :prop="'fields.' + index + '.value'" :rules="{
+                      required: domain.isEdit,
+                      message: domain.label + '不能为空',
+                      trigger: 'blur',
+                    }">
+                      <el-input class="widths1" v-model="domain.value" :type="domain.type"></el-input>
+                    </el-form-item>
+                  </el-col>
+                </template>
+              </el-row>
+            </el-form>
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="授权" name="authorize" class="tab-panestyle">
+          <div class="tab-panecent">
+            <el-tree class="filter-tree" :data="treedata" accordion :props="defaultProps" show-checkbox node-key="id"
+              :filter-node-method="filterNode" :default-checked-keys="treekeys" ref="trees"
+              :default-expand-all="expandshow">
+            </el-tree>
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import CommonUtil from "@/utils/comutil.js";
+export default {
+  // 数据存放区域
+  components: {
+    KtCommonTable
+  },
+  data() {
+    return {
+      expandshow: false,
+      InsInsuranceKindoptions: [],//险种配置
+      supplierType: "1", //协议类型
+      operType: "ADD", //'ADD','EDIT'
+      ztreeNodes: [],
+
+      optionProps: {
+        //公司下拉列表配置
+        checkStrictly: true,
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      treekeys: [],
+      defaultProps: {
+        //自定义参数
+        children: "children",
+        label: "name",
+      },
+      treedata: [],
+      prodInsurance: [],
+      productFilterList: [],
+      //协议json
+      agreementsHistoryInfo: {
+        agreement: {},
+        attributionform: {},
+        dept: [],
+      },
+      overSize: "small",
+      activeTabs: "first",
+      agreementsHistoryDialogVisible: false,
+      agreementHistoryRecordResult: [],
+      productpageRequestForm: {},//协议历史记录检索数据
+      agreementHistoryOperatorTime: "",
+      agreementHistoryRecordColumns: [
+        { prop: "agreementCode", label: "协议代码", minWidth: 180 },
+        { prop: "agreementName", label: "协议名称", minWidth: 160 },
+        { prop: "agreementAbbreviation", label: "协议简称", minWidth: 120 },
+        {
+          prop: "agreementType",
+          label: "协议类型",
+          minWidth: 160,
+          formatter: this.agreementtypeFormatter,
+        },
+        { prop: "insuranceCompany", label: "合作公司", minWidth: 160 },
+        { prop: "dockingPerson", label: "对接人", minWidth: 160 },
+        { prop: "dockingPhone", label: "联系方式(对接人)", minWidth: 160 },
+        { prop: "withTax", label: "含增值税结算", minWidth: 160 },
+        {
+          prop: "matchType",
+          label: "保单日期类型",
+          minWidth: 160,
+          formatter: this.matchtypeFormatter,
+        },
+        { prop: "startDate", label: "协议起期", minWidth: 160 },
+        { prop: "endDate", label: "协议止期", minWidth: 160 },
+        {
+          prop: "moneyType",
+          label: "佣金发放方式",
+          minWidth: 160,
+          formatter: this.moneyTypeFormatter,
+        },
+        {
+          prop: "validStatus",
+          label: "有效状态",
+          minWidth: 160,
+          formatter: this.agreestatusFormatter,
+        },
+        {
+          prop: "moneyTime",
+          label: "结算周期",
+          minWidth: 160,
+          formatter: this.moneytimeFormatter,
+        },
+        {
+          prop: "ptlAgreementAttribution",
+          label: " 保险公司账号配置",
+          minWidth: 1060,
+        },
+        { prop: "operatorName", label: "操作人", minWidth: 160 },
+        { prop: "operatorType", label: "操作类型", formatter: this.operatorTypeFormatter },
+        { prop: "operatorTime", label: "操作时间", minWidth: 160 },
+      ],
+      operationTypeOption: [
+        {
+          label: '新增',
+          value: 'add'
+        }, {
+          label: '修改',
+          value: 'update'
+        }, {
+          label: '删除',
+          value: 'delete'
+        },
+      ],
+      statusalloptions: [
+        { value: "0", label: "待审核" },
+        { value: "1", label: "审核通过" },
+        { value: "2", label: "退回修改" },
+        { value: "99", label: "已失效" },
+      ],
+      productpageRequest: {
+        pageNum: 1,
+        pageSize: 20,
+        agreementId: "",
+      },
+      //------------协议下拉框数据   begin-----------------
+      agreementTypeoptions: [], //协议类型
+      matchTypeoptions: [], //保单匹配协议日期类型
+      moneyTypeoptions: [], //佣金发放方式
+      supplierTypeEnumoptions: [], //供应商类型
+      approvalStatusoptions: [], //审批状态
+    }
+  },
+  // 生命周期函数
+  created() {
+    this.productpageRequest.agreementId = this.$route.query.id;
+    this.getDicType("InsInsuranceKind"); //险种类型
+    this.getDicType("agreementType"); //协议类型
+    this.getDicType("matchType"); //保单日期类型
+    this.getDicType("moneyType"); //佣金发放方式
+    this.getDicType("supplierTypeEnum"); //供应商类型
+    this.getDicType("approvalStatus"); //审批状态
+    this.$api.insCompany.gainTopList("1").then((res) => {
+      this.prodInsurance = res.data;
+    });
+    this.$api.dept.findDeptTree("9", "").then((res) => {
+      this.treedata = res.data;
+    });
+    this.$api.insCompany.shutdown().then((res) => {
+      this.permissions = res.data;
+    });
+    this.agreementHistoryCostFindPage();
+  },
+  // 方法函数
+  methods: {
+    findLeftTreeData: function () {
+      let params = {
+        classname: "",
+        type: this.supplierType,
+      };
+      this.$api.insCompany.findLeftInsTree(params).then((res) => {
+        this.ztreeNodes = res.data;
+      });
+    },
+    //授权树节点过滤
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    productFilterListChange(e) {
+      let productstring = e.join(",")
+      this.agreement.productsCode = productstring;
+    },
+    //--数据字典 begin --
+    getDicType(type) {
+      this.$api.insCompany.dicType(type).then((res) => {
+        if (res.code == 200) {
+          this[type + "options"] = res.data.ddList;
+        }
+      });
+    },
+    agreementTypeChange(value) {
+      this.agreement.agreementType = value;
+    },
+    //切换tab页
+    handleClickTab(tab, event) {
+      if (tab.name == "Noncarproductcost") {
+      }
+    },
+    agreementsHistorycloseDialog() {
+      if (this.treekeys.length) {
+        this.$refs.trees.setCheckedKeys([]);
+        this.expandshow = false;
+        this.parentkeys = [];
+      }
+    },
+    // 协议历史记录详情
+    agreementsHistory({ row, column }) {
+      this.dept = [];
+      this.treekeys = [];
+      this.$api.insCompany.agreementhistoryGetDetail(row.batch).then((res) => {
+        if (res.code == '200') {
+          this.agreementsHistoryDialogVisible = true;
+          if (res.data.ptlAgreementHistory.productsCode) {
+            let productsCodeList = res.data.ptlAgreementHistory.productsCode.split(",");
+            this.productFilterList = productsCodeList;
+          }
+          this.agreementsHistoryInfo.agreement = res.data.ptlAgreementHistory;
+          this.agreementsHistoryInfo.attributionform = res.data.ptlAgreementAttributionHistory ? res.data.ptlAgreementAttributionHistory : '{}';
+          if (res.data.deptHistories.length > 0) {
+            res.data.deptHistories.map((ele, index) => {
+              this.dept.push(ele.deptId);
+              return ele;
+            });
+          }
+          this.treekeys = this.dept;
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
+    //协议历史操作时间
+    agreementHistorydaterange(e) {
+      if (e) {
+        this.productpageRequestForm.operatorStartTime = e[0];
+        this.productpageRequestForm.operatorEndTime = e[1];
+      } else {
+        this.productpageRequestForm.operatorStartTime = "";
+        this.productpageRequestForm.operatorEndTime = "";
+      }
+    },
+    agreementHistoryCostFindPage(data) {
+      if (data && data.pageRequest) {
+        this.productpageRequest.pageNum = data.pageRequest.pageNum;
+        this.productpageRequest.pageSize = data.pageRequest.pageSize;
+      } else {
+        this.productpageRequest.pageNum = 1;
+        this.productpageRequest.pageSize = 20;
+      }
+      this.$api.insCompany
+        .agreementHistory({ ...this.productpageRequest, ...this.productpageRequestForm })
+        .then((res) => {
+          this.agreementHistoryRecordResult = res.data;
+        });
+    },
+    agreementtypeFormatter(row, column) {
+      //协议类型
+      let agreementType = row.agreementType;
+      return CommonUtil.getDataName({
+        dataList: this.agreementTypeoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: agreementType,
+      });
+    },
+    matchtypeFormatter(row, column) {
+      //匹配日期类型
+      let matchType = row.matchType;
+      return CommonUtil.getDataName({
+        dataList: this.matchTypeoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: matchType,
+      });
+    },
+    agreestatusFormatter(row, column) {
+      //状态
+      let endTime = new Date(row.endDate + " 23:59:59").getTime();
+      let currentTime = new Date().getTime();
+      if (currentTime > endTime) {
+        return "已失效";
+      } else {
+        let agreestatus = row.validStatus;
+        return CommonUtil.getDataName({
+          dataList: this.statusalloptions,
+          value: "value",
+          label: "label",
+          data: agreestatus,
+        });
+      }
+    },
+    operatorTypeFormatter(row, column) {
+      let operatorType = row.operatorType;
+      switch (operatorType) {
+        case "add":
+          return '新增'
+        case "update":
+          return '修改'
+        case "delete":
+          return '删除'
+      }
+    },
+    moneyTypeFormatter(row, column) {
+      let moneyType = row.moneyType;
+      return CommonUtil.getDataName({
+        dataList: this.moneyTypeoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: moneyType,
+      });
+    },
+    agreementtypeFormatter(row, column) {
+      //协议类型
+      let agreementType = row.agreementType;
+      return CommonUtil.getDataName({
+        dataList: this.agreementTypeoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: agreementType,
+      });
+    },
+    matchtypeFormatter(row, column) {
+      //匹配日期类型
+      let matchType = row.matchType;
+      return CommonUtil.getDataName({
+        dataList: this.matchTypeoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: matchType,
+      });
+    },
+    moneytimeFormatter(row, column) {
+      //结算周期
+      return "T+" + row.moneyTime;
+    },
+  },
+  // 计算属性
+  computed: {
+
+  },
+  mounted() {
+    this.findLeftTreeData();
+  },
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+.tab-panestyle {
+  padding: 20px;
+  background: #F2F2F2;
+}
+
+.tab-panecent {
+  background: #fff;
+  border-radius: 4px;
+  padding: 15px;
+  box-sizing: border-box;
+  max-height: 630px;
+  overflow-y: auto;
+}
+
+/deep/ {
+  .el-pagination.is-background .el-pager li:not(.disabled).active {
+    background-color: #2D4D89;
+  }
+
+  .el-radio-button__orig-radio:checked+.el-radio-button__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+    box-shadow: -1px 0 0 0 #2D4D89;
+  }
+
+  .el-radio-button__inner:hover {
+    color: #2D4D89;
+  }
+
+  .el-radio__input.is-checked .el-radio__inner,
+  .el-checkbox__input.is-checked .el-checkbox__inner,
+  .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+  }
+
+  .el-button:hover {
+    color: #fff;
+  }
+
+  .el-checkbox__input.is-checked+.el-checkbox__label {
+    color: #2D4D89 !important;
+  }
+
+  .el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-button--primary.is-plain:focus,
+  el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-select-dropdown__item.selected {
+    color: #2D4D89 !important;
+    border-color: #2D4D89;
+
+  }
+
+  .el-dialog__header {
+    font-weight: bold;
+    border-bottom: 1px solid #D7DBE7;
+  }
+
+  .el-dialog__body {
+    padding: 0;
+  }
+
+  .el-tabs__item.is-active {
+    color: #fff;
+    background: #2D4D89;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav,
+  .el-tabs--card>.el-tabs__header,
+  .el-tabs--card>.el-tabs__header .el-tabs__item {
+    border: none;
+    margin: 0;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav {
+    padding-left: 20px;
+  }
+
+  .el-dialog__footer {
+    padding: 10px 20px 10px 10px;
+  }
+}
+</style>

+ 436 - 0
src/views/AgreementManage/CarInsurance/AgreementNonVehicleConfig.vue

@@ -0,0 +1,436 @@
+<template>
+  <div>
+    <div style="font-weight: bold;font-size: 15px;color: #242833;" class="p-1 flex j-s ">
+      <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>
+      <div>
+        <el-button size="small" type="primary" @click="accidentalInsuranceFindPage">查询</el-button>
+        <el-button @click="accidentAddRule" type="success" size="small"
+          style="background: #2D4D89;color: #fff;border-color: #2D4D89;">添加规则</el-button>
+      </div>
+    </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="删除"
+      button3Type="text" button2Type="text" :button2style="{ color: '#2D4D89' }" :button3style="{ color: '#D42426' }"
+      button3Background="#F56C6C" @handleButton3="accidentalInsuranceDelete" button3Icon="">
+    </kt-common-table>
+    <el-dialog title="规则配置" :visible.sync="nonVehicleRuledialogVisible" width="60%" top="6vh">
+      <div class="tab-panestyle">
+        <el-form :model="nonVehicleRuleObject" class="demo-form-inline tab-panecent" 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-select v-model="nonVehicleRuleObject.productCode" placeholder="选择产品类型" style="width:300px">
+                  <el-option v-for="(item, index) in productsTypeoptions" :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>
+      </div>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="nonVehicleRuledialogVisible = false">取 消</el-button>
+        <el-button size="small" type="primary" @click="nonVehicleRuleObjectSubmit"
+          style="background: #2D4D89;color: #fff;border-color: #2D4D89;">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import ProductCostForm from '@/components/Form/ProductCostForm.vue';//表单组件
+import CommonUtil from "@/utils/comutil.js";
+
+export default {
+  // 数据存放区域
+  components: {
+    KtCommonTable,
+    ProductCostForm
+  },
+  data() {
+    return {
+      accidentalInsuranceCategoryList: [],
+      accidentalInsuranceSubcategoryList: [],//子类
+      accidentalInsuranceResult: [],
+      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 },
+      ],
+      accidentalInsuranceRequest: {
+        ruleEndTime: "",
+        ruleStartTime: "",
+      },
+      nonVehicleRuleObject: {
+        parentId: "",
+        parentName: "",
+        productId: "",
+        productName: "",
+        seatNumMin: 0,
+        seatNumMax: 0,
+        thirdPartyLnsuranceMin: 0,
+        thirdPartyLnsuranceMax: 0,
+        useNature: "",
+        ruleDesc: "",
+        sort: 0,
+      },//非车规则对象
+      agreementId: "",
+      nonVehicleRuledialogVisible: false,
+      nonVehicleRuledialogType: "add",
+      natureOfVehicleUseoptions: [],//车辆使用性质
+      productsTypeoptions:[],
+    }
+  },
+  // 生命周期函数
+  created() {
+    this.agreementId = this.$route.query.id;
+    this.$api.insCompany.getDrivingInsurance({ agreementId: this.agreementId }).then((res) => {
+      if (res.code == '200') {
+        this.accidentalInsuranceCategoryList = res.data;
+      } else {
+        this.$message({
+          type: 'error',
+          message: res.msg,
+        });
+      }
+    });
+    this.getDicType("natureOfVehicleUse"); //车险产品
+    this.getDicType("productsType"); //车险产品
+  },
+
+  // 方法函数
+  methods: {
+    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,
+            });
+          }
+        });
+      }
+
+    },
+    getDicType(type) {
+      this.$api.insCompany.dicType(type).then((res) => {
+        if (res.code == 200) {
+          this[type + "options"] = res.data.ddList;
+        }
+      });
+    },
+    //非车规则编辑
+    accidentalInsuranceUpdate({ row, column }) {
+      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,
+          });
+        }
+      });
+    },
+    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;
+    },
+    accidentAddRule() {
+      this.nonVehicleRuledialogVisible = true;
+      this.nonVehicleRuledialogType = "add";
+      for (const key in this.nonVehicleRuleObject) {
+        if (key !== "agreementId") {
+          this.nonVehicleRuleObject[key] = "";
+        }
+      }
+    },
+    //非车规则分页查询
+    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;
+        });
+    },
+    useNatureFormatter(row, column) {
+      let natureOfVehicle = row.useNature;
+      return CommonUtil.getDataName({
+        dataList: this.natureOfVehicleUseoptions,
+        value: "dictValue",
+        label: "dictTag",
+        data: natureOfVehicle,
+      });
+    },
+    thirdPartyLnsuranceMinFormatter(row, column) {
+      let NumMin = row.thirdPartyLnsuranceMin / 10000;
+      let NumMax = row.thirdPartyLnsuranceMax / 10000;
+      return NumMin + "~" + NumMax;
+    },
+    seatNumMinFormatter(row, column) {
+      let NumMin = row.seatNumMin;
+      let NumMax = row.seatNumMax;
+      return NumMin + "~" + NumMax;
+    },
+    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
+      }
+    },
+  },
+  // 计算属性
+  computed: {
+
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+.ruleConfigurationItem {
+  padding: 20px;
+
+  span {
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+
+.tab-panecent {
+  background: #fff;
+  border-radius: 4px;
+  padding: 15px;
+  box-sizing: border-box;
+}
+
+/deep/ {
+
+  .el-pagination.is-background .el-pager li:not(.disabled).active {
+    background-color: #2D4D89;
+  }
+
+  .el-radio-button__orig-radio:checked+.el-radio-button__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+    box-shadow: -1px 0 0 0 #2D4D89;
+  }
+
+  .el-radio-button__inner:hover {
+    color: #2D4D89;
+  }
+
+  .el-radio__input.is-checked .el-radio__inner,
+  .el-checkbox__input.is-checked .el-checkbox__inner,
+  .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+  }
+
+  .el-button:hover {
+    color: #fff;
+  }
+
+  .el-checkbox__input.is-checked+.el-checkbox__label {
+    color: #2D4D89 !important;
+  }
+
+  .el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-button--primary.is-plain:focus,
+  el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-select-dropdown__item.selected {
+    color: #2D4D89 !important;
+    border-color: #2D4D89;
+
+  }
+
+  .el-dialog__header {
+    font-weight: bold;
+    border-bottom: 1px solid #D7DBE7;
+  }
+
+  .el-dialog__body {
+    padding: 0;
+  }
+
+  .el-tabs__item.is-active {
+    color: #fff;
+    background: #2D4D89;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav,
+  .el-tabs--card>.el-tabs__header,
+  .el-tabs--card>.el-tabs__header .el-tabs__item {
+    border: none;
+    margin: 0;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav {
+    padding-left: 20px;
+  }
+
+  .el-dialog__footer {
+    padding: 10px 20px 10px 10px;
+  }
+}
+
+.tab-panestyle {
+  padding: 20px;
+  background: #F2F2F2;
+}
+
+.ktbuttonactive {
+  background: #f2f7fc;
+  border-color: #fff;
+}
+
+.ktbuttonactive {
+  background: #f2f7fc;
+  border-color: #fff;
+}
+</style>
+

+ 1891 - 0
src/views/AgreementManage/CarInsurance/AgreementProductFee.vue

@@ -0,0 +1,1891 @@
+<template>
+  <div>
+    <el-form :model="productpageRequest" size="small" label-width="140px">
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="产品类型">
+            <el-select v-model="productpageRequest.productCode" style="width: 100%;" placeholder="选择产品" clearable
+              multiple>
+              <el-option v-for="item in productsTypeoptions" :key="item.dictValue" :label="item.dictTag"
+                :value="item.dictValue"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="审核状态">
+            <el-select v-model="productpageRequest.isAudit" style="width: 100%;" clearable>
+              <el-option v-for="(item, index) in expenseAuditlist" :key="index" :label="item.label"
+                :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="费用起期">
+            <el-date-picker style="width: 100%;" v-model="productpageRequest.costStartDate" type="date"
+              placeholder="选择费用开始日期" value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="费用止期">
+            <el-date-picker style="width: 100%;" v-model="productpageRequest.costsEndDate" type="date"
+              placeholder="选择费用结束日期" @change="costsEndDateChange" value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="是否有效">
+            <el-select style="width: 100%;" v-model="productpageRequest.isEffective" clearable>
+              <el-option label="失效" value="1"></el-option>
+              <el-option label="有效" value="2"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="费用描述">
+            <el-input v-model="productpageRequest.costsDescription" clearable
+              placeholder="关键字搜索 例:新能源、非车险、评分等"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item>
+            <el-button type="primary" @click="productExpenseSearch">查询</el-button>
+            <el-button type="success" @click="expenseCopy"
+              style="background-color: #2D4D89;border-color:#2D4D89;">费用复制</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <div style="padding:0 10px 10px 10px ;" class=" flex j-s a-c">
+      <span style="font-weight: bold;font-size: 15px;color: #242833;">
+        产品详情
+      </span>
+      <div class="flex a-c ">
+        <span style="margin-right: 10px;color: #262626;font-size: 14px;">产品类型</span>
+        <el-checkbox-group v-model="roductList1" @change="pruductChange">
+          <el-checkbox v-for="city in productsTypeoptions" :label="city.dictValue" :key="city.dictValue">{{ city.dictTag
+          }}</el-checkbox>
+        </el-checkbox-group>
+        <el-button size="small" style="margin-left: 20px" :disabled="productCostForm.productId.length == 0"
+          @click="productAdd" class="ktbuttonactive"
+          :style="productCostForm.productId.length > 0 ? ktbuttonStyle : '{}'">产品录入</el-button>
+        <el-button class="ktbuttonactive" size="small" :style="ktbuttonStyle" @click="productHistory">历史记录</el-button>
+      </div>
+    </div>
+    <kt-common-table :tableHeights="610" :SerialShow="false" :operationWidth="250" :showOperation="true"
+      :showBatchDelete="true" :showBatchSettled="false" :showBatchPrint="false" :customToolseletted="true"
+      :data="productPageResult" :columns="productColumns" @findPage="productCostFindPage" button2Name="编辑"
+      button2Type="text" button3Type="text" button5Type="text" :button2style="{ color: '#2D4D89' }"
+      :button3style="{ color: '#D42426' }" :button5style="{ color: '#2D4D89' }" permsButton2="agreement:input:productCost"
+      @handleButton2="productUpdate" deleteName="批量修改" @handleDelete="batchUpdate" @customTool="batchDelete"
+      customToolName="批量删除" button3Name="删除" permsButton3="agreement:input:productCost" @handleButton3="productDelete"
+      button5Name="轨迹" @handleButton5="trajectory" button3Icon="">
+    </kt-common-table>
+    <el-dialog :title="productCostAddDialogTitle" :visible.sync="productCostAddVehicleFactorVisible" width="80%" top="6vh"
+      @close="productcloseDialog">
+      <el-tabs v-model="activeName" type="card">
+        <el-tab-pane :label="tabtitle + '费用'" name="feiyong" class="tab-panestyle">
+          <div class="tab-panecent">
+            <el-form ref="productCostForm" :model="productCostForm" label-width="130px" :size="overSize"
+              :rules="costformRules">
+              <el-row>
+                <h4>费用详情</h4>
+                <el-col :span="20" :offset="2" v-if="productCostAddDialogType == 'edit'">
+                  <el-form-item label="产品">
+                    <el-select v-model="productUpdateObj.productId" placeholder="请选择" @change="productUpdateChange">
+                      <el-option v-for="(item, index) in productsTypeoptions" :label="item.dictTag"
+                        :value="item.dictValue" :key="index">
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="20" :offset="2">
+                  <el-form-item label="费用描述">
+                    <el-input type="textarea" v-model="productCostForm.costsDescription"
+                      placeholder="输入费用描述内容"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="10" :offset="2">
+                  <el-form-item label="费用起期" prop="costsStartDate">
+                    <el-date-picker style="width: 100%" v-model="productCostForm.costsStartDate" type="datetime"
+                      placeholder="选择费用开始日期" value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions"
+                      @change="cleanEndDate">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="10">
+                  <el-form-item label="费用止期" prop="costsEndDate">
+                    <el-date-picker style="width: 100%" v-model="productCostForm.costsEndDate" type="datetime"
+                      placeholder="选择费用结束日期" value-format="yyyy-MM-dd HH:mm:ss" @change="checkStartDate">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="10" :offset="2">
+                  <el-form-item label="优先级">
+                    <el-input style="width: 100%" v-model="productCostForm.priorityLevel"
+                      onkeyup="value=value.replace(/\D/g,'')" placeholder="输入数字"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+
+              <el-row v-if="productjqincludes">
+                <h4>交强险费用</h4>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="费用比例" prop="jqCarCostsProportion">
+                    <el-input v-model="productCostForm.jqCarCostsProportion"
+                      @blur="costRatioInput('jqCostsProportion', 'jqCarCostsProportion', 'jqCarOtherCostsProportion')"
+                      placeholder="请输入费用比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1" v-if="permissions">
+                  <el-form-item label="其他费用比例">
+                    <el-input disabled v-model="productCostForm.jqCarOtherCostsProportion"
+                      placeholder="请输入其他费用比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1" v-if="permissions">
+                  <el-form-item label="总费用比例" prop="jqCostsProportion">
+                    <el-input v-model="productCostForm.jqCostsProportion"
+                      @blur="totalCostRatioInput('jqCostsProportion', 'jqCarCostsProportion', 'jqCarOtherCostsProportion')"
+                      placeholder="请输入总费用比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="交强管理比例一级	" prop="jqExportRadioLevel1">
+                    <el-input v-model="productCostForm.jqExportRadioLevel1" placeholder="请输入管理费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="交强管理比例二级	" prop="jqExportRadioLevel2">
+                    <el-input v-model="productCostForm.jqExportRadioLevel2" placeholder="请输入管理费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="交强管理比例三级	" prop="jqExportRadioLevel3">
+                    <el-input v-model="productCostForm.jqExportRadioLevel3" placeholder="请输入管理费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="交强管理比例四级	" prop="jqExportRadioLevel4">
+                    <el-input v-model="productCostForm.jqExportRadioLevel4" placeholder="请输入管理费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="交强管理比例五级	" prop="jqExportRadioLevel5">
+                    <el-input v-model="productCostForm.jqExportRadioLevel5" placeholder="请输入管理费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="交强出口手续比例" prop="jqCostsExportProportion">
+                    <el-input v-model="productCostForm.jqCostsExportProportion" placeholder="请输入出口手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row v-if="productsyincludes">
+                <h4>商业险费用</h4>
+
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="费用比例" prop="syCarCostsProportion">
+                    <el-input v-model="productCostForm.syCarCostsProportion"
+                      @blur="totalCostRatioInput('syCostsProportion', 'syCarCostsProportion', 'syCarOtherCostsProportion')"
+                      placeholder="请输入费用比例"></el-input>
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="5" :offset="1" v-if="permissions">
+                  <el-form-item label="其他费用比例">
+                    <el-input v-model="productCostForm.syCarOtherCostsProportion" placeholder="请输入其他费用比例"
+                      disabled></el-input>
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="5" :offset="1" v-if="permissions">
+                  <el-form-item label="总费用比例" prop="syCostsProportion">
+                    <el-input v-model="productCostForm.syCostsProportion" placeholder="请输入总费用比例"
+                      @blur="totalCostRatioInput('syCostsProportion', 'syCarCostsProportion', 'syCarOtherCostsProportion')"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="商业手续比例一级	" prop="syExportRadioLevel1">
+                    <el-input v-model="productCostForm.syExportRadioLevel1" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="商业手续比例二级	" prop="syExportRadioLevel2">
+                    <el-input v-model="productCostForm.syExportRadioLevel2" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="商业手续比例三级	" prop="syExportRadioLevel3">
+                    <el-input v-model="productCostForm.syExportRadioLevel3" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="商业手续比例四级	" prop="syExportRadioLevel4">
+                    <el-input v-model="productCostForm.syExportRadioLevel4" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="商业手续比例五级	" prop="syExportRadioLevel5">
+                    <el-input v-model="productCostForm.syExportRadioLevel5" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="商业出口手续比例" prop="syCostsExportProportion">
+                    <el-input v-model="productCostForm.syCostsExportProportion" placeholder="请输入出口手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <h4>非车费用</h4>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="费用比例" prop="noCarCostsProportion">
+                    <el-input v-model="productCostForm.noCarCostsProportion"
+                      @blur="totalCostRatioInput('noCostsProportion', 'noCarCostsProportion', 'noCarOtherCostsProportion')"
+                      placeholder="请输入费用比例"></el-input>
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="5" :offset="1" v-if="permissions">
+                  <el-form-item label="其他费用比例">
+                    <el-input v-model="productCostForm.noCarOtherCostsProportion" placeholder="请输入其他费用比例"
+                      disabled></el-input>
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="5" :offset="1" v-if="permissions">
+                  <el-form-item label="总费用比例" prop="noCostsProportion">
+                    <el-input v-model="productCostForm.noCostsProportion" placeholder="请输入总费用比例"
+                      @blur="totalCostRatioInput('noCostsProportion', 'noCarCostsProportion', 'noCarOtherCostsProportion')"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="非车手续比例一级	" prop="noCarExportRadioLevel1">
+                    <el-input v-model="productCostForm.noCarExportRadioLevel1" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="非车手续比例二级	" prop="noCarExportRadioLevel2">
+                    <el-input v-model="productCostForm.noCarExportRadioLevel2" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="非车手续比例三级	" prop="noCarExportRadioLevel3">
+                    <el-input v-model="productCostForm.noCarExportRadioLevel3" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="非车手续比例四级	" prop="noCarExportRadioLevel4">
+                    <el-input v-model="productCostForm.noCarExportRadioLevel4" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="非车手续比例五级	" prop="noCarExportRadioLevel5">
+                    <el-input v-model="productCostForm.noCarExportRadioLevel5" placeholder="请输入手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5" :offset="1">
+                  <el-form-item label="非车出口手续比例" prop="noCostsExportProportion">
+                    <el-input v-model="productCostForm.noCostsExportProportion" placeholder="请输入出口手续费比例"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+
+        </el-tab-pane>
+        <el-tab-pane label="产品费用因子" name="yinzi" class="tab-panestyle">
+          <div class="tab-panecent2">
+            <Product-Cost-Form ref="ProductRef" v-if="productCostAddVehicleFactorVisible" :form="dynamicFormArray"
+              :operator="operatorlist" over-size="small"></Product-Cost-Form>
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+      <span slot="footer" class="dialog-footer">
+        <el-button :size="overSize" style="background: #EAEDF1;color: #2D4D89;"
+          @click="productCostAddVehicleFactorVisible = false">取 消</el-button>
+        <el-button :size="overSize" style="background: #2D4D89;color: #fff;border-color: #2D4D89;" type="primary"
+          @click="productCostAddSubmit('productCostForm')">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="ddgjdialogVisible" width="25%" title="订单轨迹">
+      <div class="tab-panestyle">
+        <div style="height: 400px; overflow-y: auto;padding: 6px;">
+          <el-steps direction="vertical" :active="trajectoryTable.length - 1">
+            <el-step :title="item.createTime" :key="item.id" v-for="item in trajectoryTable">
+              <template slot="description">
+                <div class="tab-panecent1">
+                  <div>{{ item.readme }}</div>
+                  <span>提交人:{{ item.createBy }}</span>
+                </div>
+
+              </template>
+            </el-step>
+          </el-steps>
+        </div>
+      </div>
+    </el-dialog>
+    <el-dialog title="产品历史记录" :visible.sync="productHistoryRecordDialogVisible" width="70%" :fullscreen="true">
+      <div class="p-2">
+        <el-row class="queryFrom">
+          <el-form ref="queryFormRef" :model="productHistoryRecordForm" label-width="80px">
+            <el-col :span="5">
+              <el-form-item label="操作人">
+                <el-input clearable style="width:220px" size="small" placeholder="操作人"
+                  v-model="productHistoryRecordForm.operator"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="5">
+              <el-form-item label="操作类型">
+                <el-select clearable size="small" v-model="productHistoryRecordForm.operatorType" placeholder="请选择">
+                  <el-option v-for="item in operationTypeOption" :key="item.value" :label="item.label"
+                    :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="5">
+              <el-form-item label="操作时间">
+                <el-date-picker clearable v-model="productHistoryOperatorTime" type="daterange" size="small"
+                  value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+                  @change="productHistorydaterange">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="3">
+              <el-form-item label="">
+                <el-button size="small" type="primary" @click="productHistoryCostFindPage">查询</el-button>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+        <kt-common-table :tableHeights="700" :SerialShow="false" :operationWidth="200" :showOperation="true"
+          button2Name="详情" button2Type="text" :button2style="{ color: '#2D4D89' }" @handleButton2="productHistoryDetails"
+          :showBatchDelete="false" :showBatchSettled="false" :showBatchPrint="false" :data="productHistoryRecordResult"
+          :columns="productHistoryRecordColumns" @findPage="productHistoryCostFindPage">
+        </kt-common-table>
+      </div>
+
+    </el-dialog>
+    <el-dialog title="批量操作" :visible.sync="batchdialogVisible" width="30%">
+      <div class="tab-panestyle">
+
+
+        <el-form :inline="true" :model="batchUpdateForm" class="demo-form-inline  tab-panecent" style="padding: 20px;">
+          <el-form-item label="费用起期:">
+            <el-date-picker size="small" style="width: 300px" v-model="batchUpdateForm.costsStartDate" type="datetime"
+              placeholder="选择结束日期" value-format="yyyy-MM-dd HH:mm:ss">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="费用止期:">
+            <el-date-picker size="small" style="width: 300px" v-model="batchUpdateForm.costsEndDate" type="datetime"
+              placeholder="选择结束日期" value-format="yyyy-MM-dd HH:mm:ss" @change="checkStartDate1">
+            </el-date-picker>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="batchdialogVisible = false">取 消</el-button>
+        <el-button size="small" style="background: #2D4D89;color: #fff;border-color: #2D4D89;" type="primary"
+          @click="batchCostsubmit">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="费用复制窗口" :visible.sync="productCostCopyDialogVisible" :close-on-click-modal="false"
+      :fullscreen="true">
+      <div class="p-2">
+        <el-form :inline="true" :model="productcopyItemPageRequest" class="demo-form-inline" size="small"
+          label-width="80px">
+          <el-form-item label="选择协议">
+            <el-select v-model="productcopyItemPageRequest.agreementId" placeholder="请选择协议">
+              <el-option v-for="(item, index) in protocolpageResult" :key="index" :label="item.agreementAbbreviation"
+                :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="产品">
+            <el-select v-model="productcopyItemPageRequest.productCode" placeholder="选择产品" multiple clearable>
+              <el-option v-for="item in productsTypeoptions" :key="item.dictValue" :label="item.dictTag"
+                :value="item.dictValue"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="是否有效">
+            <el-select v-model="productcopyItemPageRequest.isEffective" clearable>
+              <el-option label="失效" value="1"></el-option>
+              <el-option label="有效" value="2"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="费用起期">
+            <el-date-picker style="width: 100%" v-model="productcopyItemPageRequest.costStartDate" 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="productcopyItemPageRequest.costsEndDate" type="date"
+              placeholder="选择费用结束日期" @change="costsEndDateChange1" :picker-options="productcopypickerOptions"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="费用描述">
+            <el-input v-model="productcopyItemPageRequest.costsDescription" clearable placeholder="费用描述"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="productcopyItemQuery">查询</el-button>
+          </el-form-item>
+        </el-form>
+        <kt-common-table :tableHeights="650" :SerialShow="false" :operationWidth="250" :showOperation="false"
+          :customToolseletted="true" customToolName="批量复制" permscustomTool="agreement:input:productCost"
+          @customTool="customTool" :showBatchDelete="false" :showBatchSettled="false" :showBatchPrint="false"
+          :data="productcopyItemResult" :columns="productcopyItemColumns" @findPage="productcopyItemFindPage">
+        </kt-common-table>
+      </div>
+    </el-dialog>
+    <el-dialog title="产品费用历史记录详情" :visible.sync="productHistoryDetailsDialogVisible" width="80%" top="6vh">
+      <div class="tab-panestyle">
+        <Product-Cost-Form v-if="productHistoryDetailsDialogVisible" :form="dynamicFormArray" :operator="operatorlist"
+          over-size="small" @cancelForm="productHistoryDetailsDialogVisible = false" :disabled="true"></Product-Cost-Form>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import ProductCostForm from '@/components/Form/ProductCostForm.vue';//表单组件
+export default {
+  // 数据存放区域
+  components: {
+    KtCommonTable,
+    ProductCostForm
+  },
+  data() {
+    return {
+      protocolpageResult: [],
+      productcopyItemResult: [],//协议费用列表
+      productcopyItemPageRequest: {
+        productCode: [],
+        agreementId: "",
+        costStartDate: "",
+        costsEndDate: "",
+        isEffective: "",
+        costsDescription: "",
+        pageNum: 1,
+        pageSize: 20,
+      },
+      productHistoryOperatorTime: "",
+      batchUpdateForm: {
+        ids: [],
+        costsEndDate: null,
+        costsStartDate: null,
+      },
+      productHistoryDetailsDialogVisible: false,
+      productCostCopyDialogVisible: false,//费用复制
+      batchdialogVisible: false,
+      productHistoryRecordResult: [],
+      productcopyItemColumns: [
+        //数据列
+        { prop: "productName", label: " 产品名称", minWidth: 160 },
+        { prop: "costsStartDate", label: "费用起期", minWidth: 160 },
+        { prop: "costsEndDate", label: "费用止期", minWidth: 160 },
+        { prop: "costsDescription", label: "费用描述", minWidth: 220 },
+        { prop: "desc", label: "费用因子描述", minWidth: 520 },
+        { prop: "priorityLevel", label: "方案优先级", minWidth: 120 },
+        {
+          prop: "jqCarCostsProportion",
+          label: "费用比例(交强)",
+          minWidth: 120,
+        },
+        {
+          prop: "jqCarOtherCostsProportion",
+          label: "其他费用比例(交强)",
+          minWidth: 160,
+        },
+        {
+          prop: "jqCostsProportion",
+          label: "总费用比例(交强)",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel1",
+          label: "交强出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel2",
+          label: "交强出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel3",
+          label: "交强出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel4",
+          label: "交强出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel5",
+          label: "交强出口比例五级",
+          minWidth: 160,
+        },
+
+        {
+          prop: "syCarCostsProportion",
+          label: "费用比例(商业)",
+          minWidth: 120,
+        },
+        {
+          prop: "syCarOtherCostsProportion",
+          label: "其他费用比例(商业)",
+          minWidth: 160,
+        },
+        {
+          prop: "syCostsProportion",
+          label: "总费用比例(商业)",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel1",
+          label: "商业出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel2",
+          label: "商业出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel3",
+          label: "商业出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel4",
+          label: "商业出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel5",
+          label: "商业出口比例五级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarCostsProportion",
+          label: "费用比例(非车)",
+          minWidth: 120,
+        },
+        {
+          prop: "noCarOtherCostsProportion",
+          label: "其他费用比例(非车)",
+          minWidth: 160,
+        },
+        {
+          prop: "noCostsProportion",
+          label: "总费用比例(非车)",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel1",
+          label: "非车出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel2",
+          label: "非车出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel3",
+          label: "非车出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel4",
+          label: "非车出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel5",
+          label: "非车出口比例五级",
+          minWidth: 160,
+        },
+
+      ],
+      productHistoryRecordColumns: [
+        //数据列
+        { prop: "productName", label: "产品名称", minWidth: 160 },
+        { prop: "modifierName", label: "操作人", minWidth: 120 },
+        { prop: "operatorTime", label: "操作时间", minWidth: 160 },
+        { prop: "operatorType", label: "操作类型", minWidth: 120, formatter: this.operatorTypeFormatter },
+        { prop: "costsDescription", label: "费用描述", minWidth: 120 },
+        { prop: "costsAttrLinks", label: "费用因子描述", minWidth: 680 },
+        { prop: "costsStartDate", label: "费用起期", minWidth: 180 },
+        { prop: "costsEndDate", label: "费用止期", minWidth: 180 },
+        { prop: "priorityLevel", label: "方案优先级", minWidth: 180 },
+        {
+          prop: "jqCarCostsProportion",
+          label: "费用比例(交强)",
+          minWidth: 120,
+        },
+        {
+          prop: "jqCarOtherCostsProportion",
+          label: "其他费用比例(交强)",
+          minWidth: 160,
+        },
+        {
+          prop: "jqCostsProportion",
+          label: "总费用比例(交强)",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel1",
+          label: "交强出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel2",
+          label: "交强出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel3",
+          label: "交强出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel4",
+          label: "交强出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel5",
+          label: "交强出口比例五级",
+          minWidth: 160,
+        },
+        {
+          prop: "syCarCostsProportion",
+          label: "费用比例(商业)",
+          minWidth: 120,
+        },
+        {
+          prop: "syCarOtherCostsProportion",
+          label: "其他费用比例(商业)",
+          minWidth: 160,
+        },
+        {
+          prop: "syCostsProportion",
+          label: "总费用比例(商业)",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel1",
+          label: "商业出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel2",
+          label: "商业出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel3",
+          label: "商业出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel4",
+          label: "商业出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel5",
+          label: "商业出口比例五级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarCostsProportion",
+          label: "费用比例(非车)",
+          minWidth: 120,
+        },
+        {
+          prop: "noCarOtherCostsProportion",
+          label: "其他费用比例(非车)",
+          minWidth: 160,
+        },
+        {
+          prop: "noCostsProportion",
+          label: "总费用比例(非车)",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel1",
+          label: "非车出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel2",
+          label: "非车出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel3",
+          label: "非车出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel4",
+          label: "非车出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel5",
+          label: "非车出口比例五级",
+          minWidth: 160,
+        },
+
+      ],
+      operationTypeOption: [
+        {
+          label: '新增',
+          value: 'add'
+        }, {
+          label: '修改',
+          value: 'update'
+        }, {
+          label: '删除',
+          value: 'delete'
+        },
+      ],
+      productHistoryRecordForm: {},//产品历史记录检索数据
+      productHistoryRecordDialogVisible: false,//历史记录弹窗
+      ddgjdialogVisible: false,
+      trajectoryTable: [],
+      tabtitle: '',
+      overSize: "small",
+      ktbuttonStyle: {
+        border: '1px solid #2D4D89',
+        color: "#2D4D89",
+      },
+      roductList1: [],
+      //操作符字典
+      operator: { "pageNum": 1, "pageSize": 10, "columnFilters": { "label": { "name": "label", "value": "agreement_operator" } } },
+      operatorlist: [],
+      //操作符字典
+      //费用审核状态
+      expenseAudit: { "pageNum": 1, "pageSize": 10, "columnFilters": { "label": { "name": "label", "value": "agreement_audit_status" } } },
+      expenseAuditlist: [],
+      productsTypeoptions: [],
+      productColumns: [
+        //数据列
+        { prop: "id", label: " ID", minWidth: 160 },
+        { prop: "productName", label: " 产品名称", minWidth: 160 },
+        { prop: "costsStartDate", label: "费用起期", minWidth: 160 },
+        { prop: "costsEndDate", label: "费用止期", minWidth: 160 },
+        { prop: "costsDescription", label: "费用描述", minWidth: 220 },
+        { prop: "desc", label: "费用因子描述", minWidth: 520 },
+        { prop: "priorityLevel", label: "方案优先级", minWidth: 120 },
+        { prop: "isAudit", label: "审核状态", minWidth: 160, formatter: this.auditTypeFormation },
+        {
+          prop: "jqCarCostsProportion",
+          label: "费用比例(交强)",
+          minWidth: 120,
+        },
+        {
+          prop: "jqCarOtherCostsProportion",
+          label: "其他费用比例(交强)",
+          minWidth: 160,
+        },
+        {
+          prop: "jqCostsProportion",
+          label: "总费用比例(交强)",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel1",
+          label: "交强出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel2",
+          label: "交强出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel3",
+          label: "交强出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel4",
+          label: "交强出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "jqExportRadioLevel5",
+          label: "交强出口比例五级",
+          minWidth: 160,
+        },
+        {
+          prop: "syCarCostsProportion",
+          label: "费用比例(商业)",
+          minWidth: 120,
+        },
+        {
+          prop: "syCarOtherCostsProportion",
+          label: "其他费用比例(商业)",
+          minWidth: 160,
+        },
+        {
+          prop: "syCostsProportion",
+          label: "总费用比例(商业)",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel1",
+          label: "商业出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel2",
+          label: "商业出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel3",
+          label: "商业出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel4",
+          label: "商业出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "syExportRadioLevel5",
+          label: "商业出口比例五级",
+          minWidth: 160,
+        },
+
+        {
+          prop: "noCarCostsProportion",
+          label: "费用比例(非车)",
+          minWidth: 120,
+        },
+        {
+          prop: "noCarOtherCostsProportion",
+          label: "其他费用比例(非车)",
+          minWidth: 160,
+        },
+        {
+          prop: "noCostsProportion",
+          label: "总费用比例(非车)",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel1",
+          label: "非车出口比例一级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel2",
+          label: "非车出口比例二级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel3",
+          label: "非车出口比例三级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel4",
+          label: "非车出口比例四级",
+          minWidth: 160,
+        },
+        {
+          prop: "noCarExportRadioLevel5",
+          label: "非车出口比例五级",
+          minWidth: 160,
+        },
+
+
+      ],
+      costformRules: {
+        costsStartDate: [
+          { required: true, message: "请选择费用起期", trigger: "change" },
+        ],
+        costsEndDate: [
+          { required: true, message: "请选择费用止期", trigger: "change" },
+        ],
+
+        jqNewCarCostsProportion: [
+          { required: true, message: "请输入新车费用比例", trigger: "blur" },
+          {
+            pattern: /^([0-4])$/,
+            message: "请输入0-4的整数",
+            trigger: "blur",
+          },
+        ],
+        jqOldCarCostsProportion: [
+          { required: true, message: "请输入旧车费用比例", trigger: "blur" },
+          {
+            pattern: /^([0-4])$/,
+            message: "请输入0-4的整数",
+            trigger: "blur",
+          },
+        ],
+        jqCostsProportion: [
+          { required: true, message: "请输入总费用比例", trigger: "blur" },
+          {
+            pattern: /^100$|^[1-9]?\d(\.\d+)?$|^0(\.\d+)?$/,
+            message: "请输入0-100数",
+            trigger: "blur",
+          },
+        ],
+
+        syNewCarCostsProportion: [
+          { required: true, message: "请输入新车费用比例", trigger: "blur" },
+          {
+            pattern: /^([0-9]{1,2}|100)$/,
+            message: "请输入0-100的整数",
+            trigger: "blur",
+          },
+        ],
+        syOldCarCostsProportion: [
+          { required: true, message: "请输入旧车费用比例", trigger: "blur" },
+          {
+            pattern: /^([0-9]{1,2}|100)$/,
+            message: "请输入0-100的整数",
+            trigger: "blur",
+          },
+        ],
+        syCostsProportion: [
+          { required: true, message: "请输入总费用比例", trigger: "blur" },
+          {
+            pattern: /^100$|^[1-9]?\d(\.\d+)?$|^0(\.\d+)?$/,
+            message: "请输入0-100的数",
+            trigger: "blur",
+          },
+        ],
+      },
+      //分页数据
+      productpageRequest: {
+        isAudit: null,
+        productCode: [],
+        costStartDate: "",
+        costsEndDate: "",
+        costsDescription: "",
+        isEffective: "2",
+        pageNum: 1,
+        pageSize: 20,
+        agreementId: "",
+      },
+      productPageResult: [],
+      insuranceCompanyId: "",
+      //产品费用
+      productCostForm: {
+        agreementId: '',
+        productName: [],
+        productId: [],
+        costsDescription: "", //费用描述
+        costsStartDate: "", //费用起期
+        costsEndDate: "", //费用止期
+        priorityLevel: "", //方案优先级
+        jqCarCostsProportion: 4, //费用比例(交强)
+        jqCarOtherCostsProportion: "", //其他费用比例(交强)
+        jqCostsProportion: "", //总费用比例(交强)
+        jqExportRadioLevel1: "",//交强出口比例1级
+        jqExportRadioLevel2: "",//交强出口比例2级
+        jqExportRadioLevel3: "",//交强出口比例3级
+        jqExportRadioLevel4: "",//交强出口比例4级
+        jqExportRadioLevel5: "",//交强出口比例5级
+        syCarCostsProportion: "", //费用比例(商业)
+        syCarOtherCostsProportion: "", //其他费用比例(商业)
+        syCostsProportion: "", //总费用比例(商业)
+        syExportRadioLevel1: "",//商业出口比例1级
+        syExportRadioLevel2: "",//商业出口比例2级
+        syExportRadioLevel3: "",//商业出口比例3级
+        syExportRadioLevel4: "",//商业出口比例4级
+        syExportRadioLevel5: "",//商业出口比例5级
+        noCarExportRadioLevel1: "",//非车出口比例1级
+        noCarExportRadioLevel2: "",//非车出口比例2级
+        noCarExportRadioLevel3: "",//非车出口比例3级
+        noCarExportRadioLevel4: "",//非车出口比例4级
+        noCarExportRadioLevel5: "",//非车出口比例5级
+        jqExportInvestmentRadio: "",//交强出口加投比例
+        syExportInvestmentRadio: "",//商业出口加投比例
+        noCarExportInvestmentRadio: "",//非车出口加投比例
+        noCarCostsProportion: "",//费用比例(非车)
+        noCarOtherCostsProportion: "",//其他费用比例(非车)
+        noCostsProportion: "",//总费用比例(非车)
+        costsAttrLinks: [],//费用因子
+      },
+      areanumberplateList: [],//车牌号列表
+      dynamicFormArray: [],
+      productCostAddDialogTitle: "产品录入",
+      productCostAddDialogType: "add",
+      productCostAddVehicleFactorVisible: false,
+      activeName: 'feiyong',
+      productUpdateObj: {
+        productId: "",
+        productName: "",
+      },
+      permissions: null,
+    }
+  },
+  // 生命周期函数
+  created() {
+    this.insuranceCompanyId = this.$route.query.insuranceCompanyId;
+    this.productpageRequest.agreementId = this.$route.query.id;
+    this.productCostForm.agreementId = this.$route.query.id;
+    this.licenseQuery();
+    this.getFactorTemplate();
+    this.getDicType("productsType"); //车险产品
+    //获取操作符
+    this.$api.dict.findPage(this.operator).then(res => {
+      this.operatorlist = res.data.content;
+    })
+    this.$api.dict.findPage(this.expenseAudit).then(res => {
+      this.expenseAuditlist = res.data.content;
+    })
+    this.$api.insCompany.shutdown().then((res) => {
+      this.permissions = res.data;
+    });
+    this.$api.insCompany.getAllAgreement().then((res) => {
+      if (res.code == 200) {
+        this.protocolpageResult = res.data;
+      } else {
+        this.$message.error(res.msg);
+      }
+    });
+  },
+  // 方法函数
+  methods: {
+    disabledDate1(time) {
+      let datetime = this.productcopyItemPageRequest.costStartDate;
+      const disabledTime = new Date(datetime).getTime() - 8.64e7;
+      return time.getTime() < disabledTime;
+    },
+    productcopyItemQuery() {
+      this.productcopyItemFindPage();
+    },
+    customTool(ids) {
+      this.$confirm('是否确认提交?', '提示', {
+        confirmButtonText: '提交',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        let params = {
+          newAgreementId: this.productCostForm.agreementId,
+          orgCostsIds: ids,
+        }
+        this.$api.insCompany.productContbatchCopy(params).then((res) => {
+          if (res.code == '200') {
+            this.$message({
+              type: 'success',
+              message: "批量复制成功",
+            });
+            this.productCostCopyDialogVisible = false;
+          } else {
+            this.$message({
+              type: 'error',
+              message: res.msg,
+            });
+          }
+        });
+      }).catch(() => {
+
+      });
+
+
+    },
+    productcopyItemFindPage(data) {
+      if (data && data.pageRequest) {
+        this.productcopyItemPageRequest.pageNum = data.pageRequest.pageNum;
+        this.productcopyItemPageRequest.pageSize = data.pageRequest.pageSize;
+      } else {
+        this.productcopyItemPageRequest.pageNum = 1;
+        this.productcopyItemPageRequest.pageSize = 20;
+      }
+      this.$api.insCompany
+        .productCostQuery(this.productcopyItemPageRequest)
+        .then((res) => {
+          this.productcopyItemResult = res;
+        });
+    },
+    costsEndDateChange1(e) {
+      let tempStartDate = this.productcopyItemPageRequest.costStartDate;
+      let tempEndDate = this.productcopyItemPageRequest.costsEndDate;
+      if (!tempStartDate) {
+        this.productcopyItemPageRequest.costsEndDate = null;
+        this.$message({
+          message: "起期不能为空",
+          type: "error",
+        });
+      }
+    },
+    //产品历史记录详情
+    productHistoryDetails({ row, column }) {
+      this.$api.insCompany.productCostHistoryDetails(row.batch).then((res) => {
+        if (res.code == '200') {
+          let obj = Object.assign({}, res.data.agreementProductCostsNewHistory);
+          obj.costsAttrLinkList.map(val => {
+            switch (val.attrType) {
+              case 'inputNumber':
+                if (!val.operator) {
+                  val.operator = '1';
+                }
+                break;
+            }
+            if (val.attrCode == 'LicenseNo') {
+              val.dictLabal = this.areanumberplateList;
+            }
+            return val;
+          })
+          this.dynamicFormArray = obj.costsAttrLinkList;
+          this.productCostForm = obj;
+          // this.productUpdateObj.productId= this.productCostForm.productId;
+          // this.productUpdateObj.productName= this.productCostForm.productName;
+          this.productCostForm.productId = [this.productCostForm.productId]
+          this.productCostForm.productName = [this.productCostForm.productName]
+          this.productHistoryDetailsDialogVisible = true;
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+      // this.productHistoryDetailsDialogVisible = true;
+
+    },
+    productHistoryCostFindPage(data) {
+      if (data && data.pageRequest) {
+        this.productpageRequest.pageNum = data.pageRequest.pageNum;
+        this.productpageRequest.pageSize = data.pageRequest.pageSize;
+      } else {
+        this.productpageRequest.pageNum = 1;
+        this.productpageRequest.pageSize = 20;
+      }
+      this.$api.insCompany
+        .productCostHistory({ ...this.productpageRequest, ...this.productHistoryRecordForm })
+        .then((res) => {
+          this.productHistoryRecordResult = res.data;
+        });
+    },
+    //产品费用操作时间
+    productHistorydaterange(e) {
+      if (e) {
+        this.productHistoryRecordForm.operatorStartTime = e[0];
+        this.productHistoryRecordForm.operatorEndTime = e[1];
+      } else {
+        this.productHistoryRecordForm.operatorStartTime = "";
+        this.productHistoryRecordForm.operatorEndTime = "";
+      }
+    },
+    //产品历史记录
+    productHistory() {
+      this.productHistoryCostFindPage();
+      this.productHistoryRecordDialogVisible = true;
+    },
+    productUpdateChange(e) {
+      let name = this.productsTypeoptions.find(item => item.dictValue == e).dictTag;
+      this.productUpdateObj.productName = name;
+      this.productCostForm.productName = [name];
+    },
+    // productCostFactorCancelForm(data) {
+    //   this.productCostAddVehicleFactorVisible = data;
+    // },
+    // productCostFactorSaveForm(data) {
+    //   this.productCostForm.costsAttrLinks = data;
+    //   this.productCostAddVehicleFactorVisible = false;
+    // },
+    //弹框关闭事件
+    productcloseDialog() {
+      for (const key in this.productCostForm) {
+        if (key !== "agreementId" && key !== "costsAttrLinks") {
+          this.productCostForm[key] = "";
+        }
+      }
+      this.productCostForm.productId = [];
+      this.productCostForm.productName = [];
+      this.getFactorTemplate();
+      this.roductList1 = [];
+    },
+    totalCostRatioInput(total, partial, other) {
+      //参数1为总费用,参数2为费用
+      let pay1 = this.productCostForm[total]; //总
+      let pay2 = this.productCostForm[partial]; //费用
+      if (pay1) {
+        if (Number(pay1) >= Number(pay2)) {
+          var otherPay = pay1 - pay2;
+          this.productCostForm[other] = Math.round(otherPay * 100) / 100;
+        } else {
+          //如果总比例不够扣减,则置空重新填
+          this.productCostForm[total] = null;
+          this.productCostForm[partial] = null;
+          this.$message({
+            message: "总费用比例必须大于费用比例",
+            type: "error",
+          });
+        }
+      }
+    },
+    batchCostsubmit() {
+      this.$api.insCompany.endDateBatch(this.batchUpdateForm).then((res) => {
+        if (res.code == '200') {
+          this.batchdialogVisible = false;
+          this.productCostFindPage();
+          this.$message({
+            type: 'success',
+            message: res.msg,
+          });
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
+    productCostAddSubmit(formName) {
+      const Arraydata = this.$refs.ProductRef.localForm;
+      this.productCostForm.costsAttrLinks = Arraydata.myArray;
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          if (this.productCostAddDialogType == "add") {
+            this.$api.insCompany
+              .productCostSave(this.productCostForm)
+              .then((res) => {
+                if (res.code == "200") {
+                  this.$message({
+                    type: "success",
+                    message: res.msg,
+                  });
+                  this.productCostAddVehicleFactorVisible = false;
+                  this.productCostFindPage();
+                } else {
+                  this.$message({
+                    type: "error",
+                    message: res.msg,
+                  });
+                }
+              });
+          } else {
+            if (this.productUpdateObj.productId) {
+              this.productCostForm.productId = [this.productUpdateObj.productId];
+              this.productCostForm.productName = [this.productUpdateObj.productName];
+            }
+            this.$api.insCompany
+              .productCostUpdate(this.productCostForm)
+              .then((res) => {
+                if (res.code == "200") {
+                  this.$message({
+                    type: "success",
+                    message: res.msg,
+                  });
+                  this.productCostAddVehicleFactorVisible = false;
+                  this.productCostFindPage();
+                } else {
+                  this.$message({
+                    type: "error",
+                    message: res.msg,
+                  });
+                }
+              });
+          }
+        }
+      });
+    },
+    //改变费用止期时,校验必须先填费用起期
+    checkStartDate() {
+      let tempStartDate = this.productCostForm.costsStartDate;
+      let tempEndDate = this.productCostForm.costsEndDate;
+      if (!tempStartDate) {
+        this.productCostForm.costsEndDate = null;
+        this.$message({
+          message: "请先选择费用起期!",
+          type: "error",
+        });
+      }
+      if (!this.validateEndDate(tempStartDate, tempEndDate)) {
+        this.productCostForm.costsEndDate = null;
+        this.$message({
+          message: "费用止期不能小于/等于费用起期!",
+          type: "error",
+        });
+      }
+    },
+    validateEndDate(startDateStr, endDateStr) {
+      const startDate = new Date(startDateStr);
+      const endDate = new Date(endDateStr);
+      return endDate.getTime() > startDate.getTime();
+    },
+    //改变费用起期时,同步清空对应费用止期,重新填写
+    cleanEndDate() {
+      this.productCostForm.costsEndDate = null;
+    },
+    productAdd() {
+      this.tabtitle = this.productCostForm.productName.join(', '); // 使用逗号和空格作为分隔符
+      this.productCostAddDialogTitle = "产品录入";
+      this.productCostAddDialogType = "add";
+      this.productCostAddVehicleFactorVisible = true;
+    },
+    //添加产品
+    pruductChange(event) {
+      this.productCostForm.productName = [];
+      this.productCostForm.productId = event;
+      event.map(val => {
+        let list = this.productsTypeoptions.find(item => item.dictValue == val).dictTag;
+        this.productCostForm.productName.push(list)
+      })
+    },
+    //产品费用复制
+    expenseCopy() {
+      this.productCostCopyDialogVisible = true;
+      this.productcopyItemPageRequest.agreementId = "";
+      this.productcopyItemPageRequest.productCode = [];
+      this.productcopyItemResult = [];
+
+    },
+    //产品删除
+    productDelete({ row, column }) {
+      this.$confirm("此操作将永久删除, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$api.insCompany.productCostDelete(row.id).then((res) => {
+            if (res.code == "200") {
+              this.$message({
+                type: "success",
+                message: res.msg,
+              });
+              this.productCostFindPage();
+            } else {
+              this.$message({
+                type: "error",
+                message: res.msg,
+              });
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    // 费用因子轨迹
+    trajectory(item) {
+      this.$api.insCompany.trajectoryGet({ costsId: item.row.id }).then((res) => {
+        if (res.code == 200 && res.data.length > 0) {
+          this.ddgjdialogVisible = true;
+          this.trajectoryTable = res.data;
+        } else {
+          this.$message({
+            message: res.msg || "暂无数据!",
+            type: "warning",
+          });
+        }
+      });
+    },
+    batchDelete(data) {
+      this.$api.insCompany.deleteBatch(data).then((res) => {
+        if (res.code == '200') {
+          this.productCostFindPage();
+          this.$message({
+            type: 'success',
+            message: res.msg,
+          });
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
+    checkStartDate1() {
+      let tempStartDate = this.batchUpdateForm.costsStartDate;
+      let tempEndDate = this.batchUpdateForm.costsEndDate;
+      if (!tempStartDate) {
+        this.batchUpdateForm.costsEndDate = null;
+        this.$message({
+          message: "请先选择费用起期!",
+          type: "error",
+        });
+      }
+      if (!this.validateEndDate(tempStartDate, tempEndDate)) {
+        this.batchUpdateForm.costsEndDate = null;
+        this.$message({
+          message: "费用止期不能小于/等于费用起期!",
+          type: "error",
+        });
+      }
+    },
+    //产品批量编辑
+    batchUpdate(data) {
+      this.batchUpdateForm.ids = data;
+      this.batchdialogVisible = true;
+    },
+    //产品编辑
+    productUpdate({ row, column }) {
+      this.$api.insCompany.productcostFactorQuery(row.id).then((res) => {
+        if (res.code == '200') {
+          let obj = Object.assign({}, res.data);
+          obj.costsAttrLinks.map(val => {
+            switch (val.attrType) {
+              case 'inputNumber':
+                if (!val.operator) {
+                  val.operator = '1';
+                }
+                break;
+            }
+            if (val.attrCode == 'LicenseNo') {
+              val.dictLabal = this.areanumberplateList;
+            }
+            return val;
+          })
+          this.dynamicFormArray = obj.costsAttrLinks;
+          this.productCostForm = obj;
+          this.productUpdateObj.productId = this.productCostForm.productId;
+          this.productUpdateObj.productName = this.productCostForm.productName;
+          this.productCostForm.productId = [this.productCostForm.productId]
+          this.productCostForm.productName = [this.productCostForm.productName]
+          this.tabtitle = this.productCostForm.productName.join(', '); // 使用逗号和空格作为分隔符
+          this.productCostAddDialogType = "edit";
+          this.productCostAddDialogTitle = "产品编辑";
+          this.productCostAddVehicleFactorVisible = true;
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
+    productExpenseSearch() {
+      let tempStartDate = this.productpageRequest.costStartDate;
+      let tempEndDate = this.productpageRequest.costsEndDate;
+      if (tempStartDate && !tempEndDate) {
+        this.$message({
+          message: "止期必传!",
+          type: "error",
+        });
+      } else {
+        this.productCostFindPage();
+
+      }
+    },
+    costsEndDateChange(e) {
+      let tempStartDate = this.productpageRequest.costStartDate;
+      if (!tempStartDate) {
+        this.productpageRequest.costsEndDate = null;
+        this.$message({
+          message: "起期不能为空",
+          type: "error",
+        });
+      }
+    },
+    //产品分页json
+    productCostFindPage(data) {
+      if (data && data.pageRequest) {
+        this.productpageRequest.pageNum = data.pageRequest.pageNum;
+        this.productpageRequest.pageSize = data.pageRequest.pageSize;
+      } else {
+        this.productpageRequest.pageNum = 1;
+        this.productpageRequest.pageSize = 20;
+      }
+      this.$api.insCompany
+        .productCostQuery(this.productpageRequest)
+        .then((res) => {
+          this.productPageResult = res;
+        });
+    },
+    getFactorTemplate() {
+      this.$api.insCompany.productConfigItem(this.insuranceCompanyId).then(res => {
+        if (res.code == '200') {
+          let data = res.data;
+          data.map(ele => {
+            switch (ele.attrType) {
+              case 'inputNumber':
+                ele.operator = '1';
+                break;
+            }
+            if (ele.attrName == '车牌号') {
+              ele.dictLabal = this.areanumberplateList;
+            }
+          })
+          // this.productCostForm.costsAttrLinks = data;
+          this.dynamicFormArray = data;
+        }
+      })
+    },
+    licenseQuery() {
+      this.$api.insCompany.getAreaLicense("14").then((res) => {
+        let data = [];
+        res.data.map(val => {
+          data.push({
+            code: val.areaNumber,
+            name: val.license,
+          })
+          return val;
+        })
+        this.areanumberplateList = data;
+      });
+    },
+    //--数据字典 begin --
+    getDicType(type) {
+      this.$api.insCompany.dicType(type).then((res) => {
+        if (res.code == 200) {
+          this[type + "options"] = res.data.ddList;
+        }
+      });
+    },
+    auditTypeFormation(row, column) {
+      let expenseAudit = row.isAudit;
+      let expense = this.expenseAuditlist.find(val => val.value == expenseAudit).label;
+      return <el-tag type="success">{expense}</el-tag>;
+    },
+    operatorTypeFormatter(row, column) {
+      let operatorType = row.operatorType;
+      switch (operatorType) {
+        case "add":
+          return '新增'
+        case "update":
+          return '修改'
+        case "delete":
+          return '删除'
+      }
+    },
+  },
+  // 计算属性
+  computed: {
+
+    productjqincludes() {
+      let a = ['单交', '交三', '交商', '兜底配置'];
+      let b = this.productCostForm.productName;
+      let contains = b.every(item => a.includes(item));
+      return contains
+    },
+    productsyincludes() {
+      let a = ['单商', '单三', '交商', '交三', '兜底配置'];
+      let b = this.productCostForm.productName;
+      let contains = b.every(item => a.includes(item));
+      return contains
+    },
+    productcopypickerOptions() {
+      return {
+        disabledDate: this.disabledDate1,
+      };
+    },
+    pickerOptions() {
+      return {
+        disabledDate: this.disabledDate,
+      };
+    },
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+/deep/ {
+  .el-step__icon.is-text {
+    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .1);
+    color: #2D4D89;
+  }
+
+  .el-pagination.is-background .el-pager li:not(.disabled).active {
+    background-color: #2D4D89;
+  }
+
+  .el-radio-button__orig-radio:checked+.el-radio-button__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+    box-shadow: -1px 0 0 0 #2D4D89;
+  }
+
+  .el-radio-button__inner:hover {
+    color: #2D4D89;
+  }
+
+  .el-radio__input.is-checked .el-radio__inner,
+  .el-checkbox__input.is-checked .el-checkbox__inner,
+  .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+  }
+
+  .el-button:hover {
+    color: #fff;
+  }
+
+  .el-checkbox__input.is-checked+.el-checkbox__label {
+    color: #2D4D89 !important;
+  }
+
+  .el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-button--primary.is-plain:focus,
+  el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-select-dropdown__item.selected {
+    color: #2D4D89 !important;
+    border-color: #2D4D89;
+
+  }
+
+  .el-dialog__header {
+    font-weight: bold;
+    border-bottom: 1px solid #D7DBE7;
+  }
+
+  .el-dialog__body {
+    padding: 0;
+  }
+
+  .el-step__title.is-finish,
+  .el-step__title.is-process {
+    color: #333;
+    font-size: 13px;
+  }
+
+  .el-tabs__item.is-active {
+    color: #fff;
+    background: #2D4D89;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav,
+  .el-tabs--card>.el-tabs__header,
+  .el-tabs--card>.el-tabs__header .el-tabs__item {
+    border: none;
+    margin: 0;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav {
+    padding-left: 20px;
+  }
+
+  .el-dialog__footer {
+    padding: 10px 20px 10px 10px;
+  }
+}
+
+.tab-panestyle {
+  padding: 20px;
+  background: #F2F2F2;
+}
+
+.tab-panecent {
+  background: #fff;
+  border-radius: 4px;
+  padding: 15px;
+  box-sizing: border-box;
+  max-height: 600px;
+  overflow-y: auto;
+}
+
+.tab-panecent2 {
+  border-radius: 4px;
+  box-sizing: border-box;
+}
+
+.tab-panecent1 {
+  background: #fff;
+  border-radius: 4px;
+  padding: 10px;
+  box-sizing: border-box;
+
+  >div {
+    font-size: 15px;
+    color: #2D4D89;
+    font-weight: bold;
+  }
+
+  >span {
+    color: rgba(51, 51, 51, 0.8);
+    font-size: 13px;
+  }
+}
+
+.ktbuttonactive {
+  background: #f2f7fc;
+  border-color: #fff;
+}
+
+/* 图二 */
+.el-divider {
+  margin: 10px 0px 15px !important;
+}
+
+.queryForm .el-row {
+  margin: 0px;
+}
+
+.queryForm .el-form-item {
+  margin-bottom: 5px;
+  display: flex;
+}
+
+.products {
+
+  // margin: 20px;
+  .productCosts {
+    text-align: center;
+
+    span {
+      font-weight: bold;
+    }
+  }
+}
+
+.ruleStyle {
+  /deep/ .el-divider__text {
+    color: red;
+  }
+}
+
+.products>div {
+  margin: 5px;
+}
+
+.productstitle {
+  width: 100%;
+  border-bottom: 2px solid #409eff;
+  text-align: center;
+}
+
+.productstitle>div {
+  width: 100px;
+  height: 26px;
+  line-height: 30px;
+  background: #409eff;
+  color: #fff;
+  border-top-right-radius: 15px;
+  padding: 2px;
+  font-size: 12px;
+}
+
+/deep/ {
+  .queryForm .el-form-item {
+    width: 100%;
+  }
+
+  .el-pagination.is-background .el-pager li:not(.disabled).active {
+    background-color: #2D4D89;
+  }
+
+  .el-button--warning {
+    color: #fff;
+    background-color: #ee7000;
+    border-color: #ee7000;
+
+    &:hover {
+      color: #fff;
+      background-color: #ee6f00ce;
+      border-color: #ee6f00ce;
+    }
+  }
+
+  .el-step__title,
+  .el-step__icon-inner {}
+
+  .el-step__description.is-finish,
+  .el-step__head.is-finish {
+    color: #333;
+    border: none;
+
+  }
+
+  .el-step:last-of-type .el-step__description {
+    padding-right: 10% !important;
+  }
+
+  .el-step__icon.is-text {
+    border: none;
+    box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.1);
+  }
+
+  .el-step__icon.is-text {
+    font-size: 15px;
+  }
+
+  .el-step__icon {
+    width: 28px;
+    height: 28px;
+  }
+
+  .el-step.is-vertical .el-step__main {
+    padding-left: 20px
+  }
+
+  .el-step__line,
+  .el-step.is-vertical .el-step__line {
+    left: 14px;
+    background-color: #E2E5EB;
+    width: 1px
+  }
+
+  .el-step__line-inner {
+    height: 0;
+    display: none
+  }
+
+  .is-flex {
+
+    .el-step__icon {
+      background: #2D4D89;
+    }
+
+    .el-step__icon-inner {
+      color: #fff;
+    }
+  }
+
+}
+
+.apistyle /deep/ .el-form-item__label {
+  min-width: 180px;
+}
+
+.el-dropdown-link {
+  cursor: pointer;
+  color: #409eff;
+}
+
+.el-icon-arrow-down {
+  font-size: 12px;
+}
+
+.ruleConfigurationItem {
+  padding: 20px;
+
+  span {
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+
+.deptOption {
+  height: auto;
+  line-height: 1;
+  padding: 0;
+  background-color: #fff;
+}
+
+.depttree {
+  padding: 4px 20px;
+  font-weight: 400;
+}
+
+.ktbuttonactive {
+  background: #f2f7fc;
+  border-color: #fff;
+}
+</style>
+

+ 714 - 0
src/views/AgreementManage/CarInsurance/AgreementUnderwritingRule.vue

@@ -0,0 +1,714 @@
+<template>
+  <div>
+    <div style="font-weight: bold;font-size: 15px;color: #242833;" class="p-1 flex j-s a-c">
+      <span>
+        规则详情
+      </span>
+      <div>
+        <el-button class="ktbuttonactive" size="small" :style="ktbuttonStyle"
+          @click="addUnderwritingRule">添加规则</el-button>
+        <el-button class="ktbuttonactive" size="small" :style="ktbuttonStyle"
+          @click="underwritingRulesHistory">历史记录</el-button>
+      </div>
+    </div>
+    <kt-common-table :tableHeights="700" :SerialShow="false" :operationWidth="200" :showOperation="true"
+      :showBatchDelete="false" :showBatchSettled="false" :showBatchPrint="false" :data="underwritingRulesResult"
+      :columns="underwritingRulesColumns" @findPage="underwritingRulesFindPage" button2Name="编辑"  button2Type="text"  button3Type="text" :button2style="{ color: '#2D4D89' }"
+      permsButton2="agreement:input:underwritingRules" permsButton3="agreement:input:underwritingRules"
+      button2Background="#E6A23C" @handleButton2="underwritingRulesUpdate" button2Icon="" button3Name="删除"
+      button3Background="#F56C6C" @handleButton3="underwritingRulesDelete" button3Icon="">
+    </kt-common-table>
+    <el-dialog :title="underwritingRulesAddDialogTitle" :visible.sync="underwritingRulesAddVehicleFactorVisible"
+      :close-on-click-modal="false" width="80%" top="6vh" @close="underwritingRulescloseDialog">
+      <div class="tab-panestyle">
+        <Product-Cost-Form ref="ProductRef" v-if="underwritingRulesAddVehicleFactorVisible" :form="dynamicFormArray"
+          :operator="operatorlist" over-size="small" :underwritingRulesForm="underwritingRulesForm"></Product-Cost-Form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" style="background: #EAEDF1;color: #2D4D89;"
+          @click="underwritingRulesAddVehicleFactorVisible = false">取 消</el-button>
+        <el-button size="small" style="background: #2D4D89;color: #fff;border-color: #2D4D89;" type="primary"
+          @click="underwritingAddSubmit">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="承保规则历史记录" :visible.sync="underwritingRulesHistoryRecordDialogVisible" :fullscreen="true">
+      <div class="p-2">
+        <el-row class="queryFrom">
+          <el-form ref="queryFormRef" :model="underwritingRulesHistoryCostFindForm" label-width="80px">
+            <el-col :span="5">
+              <el-form-item label="操作人">
+                <el-input clearable style="width:220px" size="small" placeholder="操作人"
+                  v-model="underwritingRulesHistoryCostFindForm.modifier"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="5">
+              <el-form-item label="操作类型">
+                <el-select clearable size="small" v-model="underwritingRulesHistoryCostFindForm.operatorType"
+                  placeholder="请选择">
+                  <el-option v-for="item in operationTypeOption" :key="item.value" :label="item.label"
+                    :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="5">
+              <el-form-item label="操作时间">
+                <el-date-picker clearable v-model="underwritingRulesHistoryOperatorTime" type="daterange" size="small"
+                  value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+                  @change="underwritingRulesHistorydaterange">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="3">
+              <el-form-item label="">
+                <el-button size="small" type="primary" @click="underwritingRulesHistoryCostFindPage">查询</el-button>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+        <kt-common-table :tableHeights="700" :SerialShow="false" :operationWidth="200" :showOperation="true"
+          :showBatchDelete="false" :showBatchSettled="false" :showBatchPrint="false" button2Name="详情" button2Type="text"
+          @handleButton2="underwritingRulesHistoryDetails" :data="underwritingRulesHistoryRecordResult"
+          :columns="underwritingRulesHistoryRecordColumns" @findPage="underwritingRulesHistoryCostFindPage">
+        </kt-common-table>
+      </div>
+    </el-dialog>
+    <el-dialog title="承保规则历史记录详情" :visible.sync="underwritingRulesHistoryDetailsDialogVisible" width="80%">
+      <div class="tab-panestyle">
+        <Product-Cost-Form v-if="underwritingRulesHistoryDetailsDialogVisible" :form="dynamicFormArray"
+          :operator="operatorlist" over-size="small"  :underwritingRulesForm="underwritingRulesForm"
+          :disabled="true"></Product-Cost-Form>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import ProductCostForm from '@/components/Form/ProductCostForm.vue';//表单组件
+export default {
+  // 数据存放区域
+  components: {
+    KtCommonTable,
+    ProductCostForm
+  },
+  data() {
+    return {
+      underwritingRulesHistoryOperatorTime: "",
+      underwritingRulesHistoryRecordResult: [],
+      underwritingRulesHistoryDetailsDialogVisible:false,
+      operationTypeOption: [
+        {
+          label: '新增',
+          value: 'add'
+        }, {
+          label: '修改',
+          value: 'update'
+        }, {
+          label: '删除',
+          value: 'delete'
+        },
+      ],
+      ktbuttonStyle: {
+        border: '1px solid #2D4D89',
+        color: "#2D4D89",
+      },
+      //操作符字典
+      operator: { "pageNum": 1, "pageSize": 10, "columnFilters": { "label": { "name": "label", "value": "agreement_operator" } } },
+      operatorlist: [],
+      //操作符字典
+      underwritingRulesHistoryRecordColumns: [
+        { prop: "modifier", label: "操作人", minWidth: 120 },
+        { prop: "operatorTime", label: "操作时间", minWidth: 160 },
+        { prop: "operatorType", label: "操作类型", minWidth: 120, formatter: this.operatorTypeFormatter },
+        { prop: "validInd", label: "是否启用", minWidth: 160, formatter: this.validIndFormatter, },
+        { prop: "ruleDescription", label: "规则描述", minWidth: 160 },
+        {
+          prop: "costsAttrLinks",
+          label: "规则因子描述",
+          minWidth: 660,
+        },
+      ],
+      underwritingRulesColumns: [
+        { prop: "validInd", label: "是否启用", minWidth: 160, formatter: this.validIndFormatter, },
+        { prop: "rulesStartDate", label: "规则起期", minWidth: 160 },
+        { prop: "rulesEndDate", label: "规则止期", minWidth: 160 },
+        { prop: "ruleDescription", label: "规则描述", minWidth: 160 },
+        { prop: "desc", label: "规则因子描述", minWidth: 660 },
+      ],
+      underwritingRulesResult: [], //承保规则集合
+      underwritingRulesHistoryCostFindForm: {},//规则历史记录检索数据
+      insuranceCompanyId: "",
+      underwritingRulesForm: {
+        //承保因子表单项
+        agreementId: "", //协议id
+        ruleDescription: "", //规则描述
+        rulesStartDate: "",//规则起期
+        rulesEndDate: "",//规则止期
+        validInd: "1", //是否有效
+        rulesAttrList: [],//规则属性
+      },
+      underwritingRulesAddDialogType: "add",
+      underwritingRulesAddDialogTitle: "承保规则录入",
+      underwritingRulesHistoryRecordDialogVisible: false,
+      underwritingRulesAddVehicleFactorVisible: false,
+      pageRequest: {
+        pageNum: 1,
+        pageSize: 20,
+        agreementId: "",
+      },
+      areanumberplateList: [],
+      dynamicFormArray: [],
+    }
+  },
+  // 生命周期函数
+  created() {
+    this.insuranceCompanyId = this.$route.query.insuranceCompanyId;
+    this.pageRequest.agreementId = this.$route.query.id;
+    this.underwritingRulesForm.agreementId = this.$route.query.id;
+    this.licenseQuery();
+    this.getFactorTemplate();
+    this.$api.dict.findPage(this.operator).then(res => {
+      this.operatorlist = res.data.content;
+    })
+  },
+
+  // 方法函数
+  methods: {
+    //承保规则历史记录详情
+    underwritingRulesHistoryDetails({ row, column }) {
+      this.$api.insCompany.undwrtRulesHistoryPageDetails(row.batch).then((res) => {
+        if (res.code == '200') {
+          let obj = Object.assign({}, res.data.agreementUndwrtRulesNewHistory);
+          obj.costsAttrLinkList.map(val => {
+            switch (val.attrType) {
+              case 'inputNumber':
+                if (!val.operator) {
+                  val.operator = '1';
+                }
+                break;
+            }
+            if (val.attrCode == 'LicenseNo') {
+              val.dictLabal = this.areanumberplateList;
+            }
+            return val;
+          })
+          this.$nextTick(() => {
+            this.dynamicFormArray = obj.costsAttrLinkList;
+            this.underwritingRulesForm = {
+              id: obj.id,
+              agreementId: obj.agreementId, //协议id
+              ruleDescription: obj.ruleDescription, //规则描述
+              validInd: obj.validInd, //是否有效
+              rulesAttrList: [],//规则属性
+            };
+          });
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+      this.underwritingRulesHistoryDetailsDialogVisible = true;
+
+    },
+    //承保规则操作时间
+    underwritingRulesHistorydaterange(e) {
+      if (e) {
+        this.underwritingRulesHistoryCostFindForm.operatorStartTime = e[0];
+        this.underwritingRulesHistoryCostFindForm.operatorEndTime = e[1];
+      } else {
+        this.underwritingRulesHistoryCostFindForm.operatorStartTime = "";
+        this.underwritingRulesHistoryCostFindForm.operatorEndTime = "";
+      }
+    },
+    //承保规则编辑
+    underwritingRulesUpdate({ row, column }) {
+      this.$api.insCompany.getUndwrtRulesFactorQuery(row.id).then((res) => {
+        if (res.code == '200') {
+          let obj = Object.assign({}, res.data);
+          obj.costsAttrLinks.map(val => {
+            switch (val.attrType) {
+              case 'inputNumber':
+                if (!val.operator) {
+                  val.operator = '1';
+                }
+                break;
+            }
+            if (val.attrCode == 'LicenseNo') {
+              val.dictLabal = this.areanumberplateList;
+            }
+            return val;
+          })
+          this.$nextTick(() => {
+            this.dynamicFormArray = obj.costsAttrLinks;
+            this.underwritingRulesForm = {
+              id: obj.id,
+              agreementId: obj.agreementId, //协议id
+              ruleDescription: obj.ruleDescription, //规则描述
+              validInd: obj.validInd, //是否有效
+              rulesStartDate: obj.rulesStartDate,
+              rulesEndDate: obj.rulesEndDate,
+              rulesAttrList: [],//规则属性
+            };
+          });
+          this.underwritingRulesAddDialogType = "edit";
+          this.underwritingRulesAddDialogTitle = "承保规则编辑";
+          this.underwritingRulesAddVehicleFactorVisible = true;
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
+    //承保规则删除
+    underwritingRulesDelete({ row, column }) {
+      this.$confirm("此操作将永久删除, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$api.insCompany.undwrtRulesDelete(row.id).then((res) => {
+            if (res.code == "200") {
+              this.$message({
+                type: "success",
+                message: res.msg,
+              });
+              this.underwritingRulesFindPage();
+            } else {
+              this.$message({
+                type: "error",
+                message: res.msg,
+              });
+            }
+          })
+
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    underwritingRulesHistoryCostFindPage(data) {
+      if (data && data.pageRequest) {
+        this.pageRequest.pageNum = data.pageRequest.pageNum;
+        this.pageRequest.pageSize = data.pageRequest.pageSize;
+      } else {
+        this.pageRequest.pageNum = 1;
+        this.pageRequest.pageSize = 20;
+      }
+      this.$api.insCompany
+        .undwrtRulesHistoryPage({ ...this.pageRequest, ...this.underwritingRulesHistoryCostFindForm })
+        .then((res) => {
+          this.underwritingRulesHistoryRecordResult = res.data;
+        });
+    },
+    underwritingRulesFindPage(data) {
+      if (data && data.pageRequest) {
+        this.pageRequest.pageNum = data.pageRequest.pageNum;
+        this.pageRequest.pageSize = data.pageRequest.pageSize;
+      } else {
+        this.pageRequest.pageNum = 1;
+        this.pageRequest.pageSize = 20;
+      }
+      this.$api.insCompany
+        .getUndwrtRulesQuery(this.pageRequest)
+        .then((res) => {
+          this.underwritingRulesResult = res;
+        });
+    },
+    underwritingAddSubmit() {
+      const Arraydata = this.$refs.ProductRef.localForm;
+      const RulesForm = this.$refs.ProductRef.underwritingRulesForm;
+      RulesForm.rulesAttrList = Arraydata.myArray;
+      if (this.underwritingRulesAddDialogType == "add") {
+        this.$api.insCompany
+          .undwrtRulesSaveCostSave(RulesForm)
+          .then((res) => {
+            if (res.code == "200") {
+              this.$message({
+                type: "success",
+                message: res.msg,
+              });
+              this.underwritingRulesAddVehicleFactorVisible = false;
+              this.underwritingRulesFindPage();
+            } else {
+              this.$message({
+                type: "error",
+                message: res.msg,
+              });
+            }
+          });
+      } else {
+        this.$api.insCompany
+          .undwrtRulesUpdate(RulesForm)
+          .then((res) => {
+            if (res.code == "200") {
+              this.$message({
+                type: "success",
+                message: res.msg,
+              });
+              this.underwritingRulesAddVehicleFactorVisible = false;
+              this.underwritingRulesFindPage();
+            } else {
+              this.$message({
+                type: "error",
+                message: res.msg,
+              });
+            }
+          });
+      }
+    },
+    //清空事件
+    underwritingRulescloseDialog() {
+      for (let key in this.underwritingRulesForm) {
+        if (key !== "agreementId" && key !== "rulesAttrList") {
+          this.underwritingRulesForm[key] = "";
+        }
+      }
+      if (this.underwritingRulesAddDialogType == 'edit') {
+        this.getFactorTemplate();
+      }
+    },
+    underwritingRulesHistory() {
+      this.underwritingRulesHistoryCostFindPage();
+      this.underwritingRulesHistoryRecordDialogVisible = true;
+    },
+    //添加承保规则
+    addUnderwritingRule() {
+      this.underwritingRulesAddDialogType = "add";
+      this.underwritingRulesAddDialogTitle = "承保规则录入";
+      this.underwritingRulesAddVehicleFactorVisible = true;
+    },
+    getFactorTemplate() {
+      this.$api.insCompany.productConfigItem(this.insuranceCompanyId).then(res => {
+        if (res.code == '200') {
+          let data = res.data;
+          data.map(ele => {
+            switch (ele.attrType) {
+              case 'inputNumber':
+                ele.operator = '1';
+                break;
+            }
+            if (ele.attrName == '车牌号') {
+              ele.dictLabal = this.areanumberplateList;
+            }
+          })
+          // this.productCostForm.costsAttrLinks = data;
+          this.dynamicFormArray = data;
+        }
+      })
+    },
+    licenseQuery() {
+      this.$api.insCompany.getAreaLicense("14").then((res) => {
+        let data = [];
+        res.data.map(val => {
+          data.push({
+            code: val.areaNumber,
+            name: val.license,
+          })
+          return val;
+        })
+        this.areanumberplateList = data;
+      });
+    },
+    //-- formatter begin--
+    operatorTypeFormatter(row, column) {
+      let operatorType = row.operatorType;
+      switch (operatorType) {
+        case "add":
+          return '新增'
+        case "update":
+          return '修改'
+        case "delete":
+          return '删除'
+      }
+    },
+    validIndFormatter(row, column) {
+      let validInd = row.validInd;
+      if (validInd == 1) {
+        return <span style="background:linear-gradient( 180deg, #66CDBB 0%, #33A08D 100%); borderRadius: 4px;padding:4px 10px;color:#fff">启用</span>
+      } else {
+        return <span style="background:#A6A6A6; borderRadius: 4px;padding:4px 10px;color:#fff">禁用</span>
+      }
+    },
+  },
+  // 计算属性
+  computed: {
+
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+/deep/ {
+  .el-step__icon.is-text {
+    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .1);
+    color: red;
+  }
+
+  .el-pagination.is-background .el-pager li:not(.disabled).active {
+    background-color: #2D4D89;
+  }
+
+  .el-radio-button__orig-radio:checked+.el-radio-button__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+    box-shadow: -1px 0 0 0 #2D4D89;
+  }
+
+  .el-radio-button__inner:hover {
+    color: #2D4D89;
+  }
+
+  .el-radio__input.is-checked .el-radio__inner,
+  .el-checkbox__input.is-checked .el-checkbox__inner,
+  .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+    background: #2D4D89 !important;
+    border-color: #2D4D89 !important;
+  }
+
+  .el-button:hover {
+    color: #fff;
+  }
+
+  .el-checkbox__input.is-checked+.el-checkbox__label {
+    color: #2D4D89 !important;
+  }
+
+  .el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-button--primary.is-plain:focus,
+  el-select .el-input.is-focus .el-input__inner,
+  .el-input__inner:focus,
+  .el-select .el-input__inner:focus,
+  .el-select-dropdown__item.selected {
+    color: #2D4D89 !important;
+    border-color: #2D4D89;
+
+  }
+
+  .el-dialog__header {
+    font-weight: bold;
+    border-bottom: 1px solid #D7DBE7;
+  }
+
+  .el-dialog__body {
+    padding: 0;
+  }
+
+  .el-tabs__item.is-active {
+    color: #fff;
+    background: #2D4D89;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav,
+  .el-tabs--card>.el-tabs__header,
+  .el-tabs--card>.el-tabs__header .el-tabs__item {
+    border: none;
+    margin: 0;
+  }
+
+  .el-tabs--card>.el-tabs__header .el-tabs__nav {
+    padding-left: 20px;
+  }
+
+  .el-dialog__footer {
+    padding: 10px 20px 10px 10px;
+  }
+}
+
+.tab-panestyle {
+  padding: 20px;
+  background: #F2F2F2;
+}
+
+.tab-panecent {
+  background: #fff;
+  border-radius: 4px;
+  padding: 15px;
+  box-sizing: border-box;
+  height: 600px;
+  overflow-y: auto;
+}
+
+
+.ktbuttonactive {
+  background: #f2f7fc;
+  border-color: #fff;
+}
+
+/* 图二 */
+.el-divider {
+  margin: 10px 0px 15px !important;
+}
+
+.queryForm .el-row {
+  margin: 0px;
+}
+
+.queryForm .el-form-item {
+  margin-bottom: 5px;
+  display: flex;
+}
+
+.products {
+
+  // margin: 20px;
+  .productCosts {
+    text-align: center;
+
+    span {
+      font-weight: bold;
+    }
+  }
+}
+
+.ruleStyle {
+  /deep/ .el-divider__text {
+    color: red;
+  }
+}
+
+.products>div {
+  margin: 5px;
+}
+
+.productstitle {
+  width: 100%;
+  border-bottom: 2px solid #409eff;
+  text-align: center;
+}
+
+.productstitle>div {
+  width: 100px;
+  height: 26px;
+  line-height: 30px;
+  background: #409eff;
+  color: #fff;
+  border-top-right-radius: 15px;
+  padding: 2px;
+  font-size: 12px;
+}
+
+/deep/ {
+  .queryForm .el-form-item {
+    width: 100%;
+  }
+
+  .el-pagination.is-background .el-pager li:not(.disabled).active {
+    background-color: #2D4D89;
+  }
+
+  .el-button--warning {
+    color: #fff;
+    background-color: #ee7000;
+    border-color: #ee7000;
+
+    &:hover {
+      color: #fff;
+      background-color: #ee6f00ce;
+      border-color: #ee6f00ce;
+    }
+  }
+
+  .el-step__title,
+  .el-step__icon-inner {}
+
+  .el-step__description.is-finish,
+  .el-step__head.is-finish {
+    color: #333;
+    border: none
+  }
+
+  .el-step__icon.is-text {
+    border: none;
+    box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.1);
+  }
+
+  .el-step__icon.is-text {
+    font-size: 22px;
+  }
+
+  .el-step__icon {
+    width: 28px;
+    height: 28px;
+  }
+
+  .el-step.is-vertical .el-step__main {
+    padding-left: 20px
+  }
+
+  .el-step__line,
+  .el-step.is-vertical .el-step__line {
+    left: 14px;
+    background-color: #E2E5EB;
+    width: 1px
+  }
+
+  .el-step__line-inner {
+    height: 0;
+    display: none
+  }
+
+  .is-flex {
+
+    .el-step__icon {
+      background: var(--themeColor)
+    }
+
+    .el-step__icon-inner {
+      color: #fff;
+    }
+  }
+
+}
+
+.apistyle /deep/ .el-form-item__label {
+  min-width: 180px;
+}
+
+.el-dropdown-link {
+  cursor: pointer;
+  color: #409eff;
+}
+
+.el-icon-arrow-down {
+  font-size: 12px;
+}
+
+.ruleConfigurationItem {
+  padding: 20px;
+
+  span {
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+
+.deptOption {
+  height: auto;
+  line-height: 1;
+  padding: 0;
+  background-color: #fff;
+}
+
+.depttree {
+  padding: 4px 20px;
+  font-weight: 400;
+}
+
+.ktbuttonactive {
+  background: #f2f7fc;
+  border-color: #fff;
+}
+</style>
+

+ 107 - 267
src/views/Core/KtCommonTable.vue

@@ -1,49 +1,23 @@
 <template>
   <div style="position: relative" ref="commonTable">
     <!--表格栏-->
-    <el-table
-      id="commonTable"
-      ref="doLayout"
-      :data="data.content"
-      :highlight-current-row="highlightCurrentRow"
-      @selection-change="selectionChange"
-      @row-click="rowClick"
-      @current-change="handleCurrentChange"
-      :element-loading-text="$t('action.loading')"
-      :border="border"
-      :stripe="stripe"
-      :show-summary="showSummary"
-      :summary-method="getSummaries"
-      :show-overflow-tooltip="showOverflowTooltip"
-      :height="tableHeights ? tableHeights : tableHeight"
-      :size="size"
-      :align="align"
-      :header-cell-style="{
+    <el-table id="commonTable" ref="doLayout" :data="data.content" :highlight-current-row="highlightCurrentRow"
+      @selection-change="selectionChange" @row-click="rowClick" @current-change="handleCurrentChange"
+      :element-loading-text="$t('action.loading')" :border="border" :stripe="stripe" :show-summary="showSummary"
+      :summary-method="getSummaries" :show-overflow-tooltip="showOverflowTooltip"
+      :height="tableHeights ? tableHeights : tableHeight" :size="size" :align="align" :header-cell-style="{
         background: '#F2F7FC',
         fontWeight: '900',
         color: '#606266',
-      }"
-      style="width: 100%"
-      :row-class-name="tableRowClassName"
-    >
+      }" style="width: 100%" :row-class-name="tableRowClassName">
       <el-table-column type="expand" v-if="showSysUserAccountCardList" style="display: flex;">
         <template slot-scope="scope">
-          <el-table
-            :data="scope.row.sysUserAccountCardList"
-            size="small"
-            :header-cell-style="{
-              background: '#ccc',
-              fontWeight: '900',
-              color: '#606266',
-            }"
-            style="width: 55%"
-          >
-            <el-table-column
-              type="index"
-              width="50"
-              align="center"
-              label="序号"
-            >
+          <el-table :data="scope.row.sysUserAccountCardList" size="small" :header-cell-style="{
+            background: '#ccc',
+            fontWeight: '900',
+            color: '#606266',
+          }" style="width: 55%">
+            <el-table-column type="index" width="50" align="center" label="序号">
             </el-table-column>
             <el-table-column prop="bankAccount" label="银行" style="flex: 1">
             </el-table-column>
@@ -54,184 +28,63 @@
           </el-table>
         </template>
       </el-table-column>
-      <el-table-column
-        type="selection"
-        width="50"
-        fixed
-        align="center"
-        v-if="
-          showBatchDelete ||
-          showBatchSettled ||
-          showBatchPrint ||
-          customToolseletted
-        "
-      ></el-table-column>
-      <el-table-column
-        v-if="SerialShow"
-        label="序号"
-        type="index"
-        width="50"
-        align="center"
-      ></el-table-column>
+      <el-table-column type="selection" width="50" fixed align="center" v-if="showBatchDelete ||
+        showBatchSettled ||
+        showBatchPrint ||
+        customToolseletted
+        "></el-table-column>
+      <el-table-column v-if="SerialShow" label="序号" type="index" width="50" align="center"></el-table-column>
 
       <template v-for="column in columns">
-        <el-table-column
-          header-align="center"
-          align="center"
-          :prop="column.prop"
-          :label="column.label"
-          :width="column.width"
-          :min-width="column.minWidth"
-          :fixed="column.fixed"
-          :key="column.prop"
-          :type="column.type"
-          :formatter="column.formatter"
-          :sortable="column.sortable ? column.sortable : false"
-          v-if="column.signIcon || column.isImg || column.isBtn"
-        >
+        <el-table-column header-align="center" align="center" :prop="column.prop" :label="column.label"
+          :width="column.width" :min-width="column.minWidth" :fixed="column.fixed" :key="column.prop" :type="column.type"
+          :formatter="column.formatter" :sortable="column.sortable ? column.sortable : false"
+          v-if="column.signIcon || column.isImg || column.isBtn">
           <template slot-scope="scope">
-            <el-switch
-              :disabled="column.isDisabled"
-              v-if="column.signIcon"
-              v-model="scope.row[column.prop]"
-              active-value="1"
-              inactive-value="0"
-              @change="signStateChanged(scope.$index, scope.row)"
-            ></el-switch>
-            <img
-              v-if="column.isImg"
-              :width="column.imgWidth"
-              :height="column.imgHeight"
-              :src="scope.row[column.prop]"
-            />
-            <kt-button
-              v-if="column.isBtn"
-              icon="fa fa-edit"
-              :label="column.btnName"
-              :size="size"
-              :perms="column.permsEdit"
-              @click="handleBtnEdit(scope.$index, scope.row)"
-            />
+            <el-switch :disabled="column.isDisabled" v-if="column.signIcon" v-model="scope.row[column.prop]"
+              active-value="1" inactive-value="0" @change="signStateChanged(scope.$index, scope.row)"></el-switch>
+            <img v-if="column.isImg" :width="column.imgWidth" :height="column.imgHeight" :src="scope.row[column.prop]" />
+            <kt-button v-if="column.isBtn" icon="fa fa-edit" :label="column.btnName" :size="size"
+              :perms="column.permsEdit" @click="handleBtnEdit(scope.$index, scope.row)" />
           </template>
         </el-table-column>
-        <el-table-column
-          header-align="center"
-          align="center"
-          :prop="column.prop"
-          :label="column.label"
-          :width="column.width"
-          :min-width="column.minWidth"
-          :fixed="column.fixed"
-          :key="column.prop"
-          :type="column.type"
-          :formatter="column.formatter"
-          :sortable="column.sortable ? column.sortable : false"
-          v-else
-        >
+        <el-table-column header-align="center" align="center" :prop="column.prop" :label="column.label"
+          :width="column.width" :min-width="column.minWidth" :fixed="column.fixed" :key="column.prop" :type="column.type"
+          :formatter="column.formatter" :sortable="column.sortable ? column.sortable : false" v-else>
           <template v-for="columnchildren in column.children">
-            <el-table-column
-              v-if="columnchildren"
-              header-align="center"
-              align="center"
-              :prop="columnchildren.prop"
-              :label="columnchildren.label"
-              :width="columnchildren.width"
-              :min-width="columnchildren.minWidth"
-              :fixed="columnchildren.fixed"
-              :key="columnchildren.prop"
-              :type="columnchildren.type"
-              :formatter="columnchildren.formatter"
-              :sortable="
-                columnchildren.sortable == null ? true : columnchildren.sortable
-              "
-            >
+            <el-table-column v-if="columnchildren" header-align="center" align="center" :prop="columnchildren.prop"
+              :label="columnchildren.label" :width="columnchildren.width" :min-width="columnchildren.minWidth"
+              :fixed="columnchildren.fixed" :key="columnchildren.prop" :type="columnchildren.type"
+              :formatter="columnchildren.formatter" :sortable="columnchildren.sortable == null ? true : columnchildren.sortable
+                ">
             </el-table-column>
           </template>
         </el-table-column>
       </template>
-      <el-table-column
-        :label="$t('action.operation')"
-        :width="operationWidth"
-        fixed="right"
-        v-if="showOperation"
-        header-align="center"
-        align="center"
-      >
+      <el-table-column :label="$t('action.operation')" :width="operationWidth" fixed="right" v-if="showOperation"
+        header-align="center" align="center">
         <template slot-scope="scope">
-          <kt-button
-            type="primary"
-            v-if="editButtonName"
-            icon="fa fa-edit"
-            :label="editButtonName"
-            :perms="permsEdit"
-            :size="size"
-            @click="handleEdit(scope.$index, scope.row)"
-          />
-          <kt-button
-            v-if="deleteButtonName"
-            icon="fa fa-trash"
-            :label="deleteButtonName"
-            :perms="permsDelete"
-            :size="size"
-            type="danger"
-            @click="handleDeleteFlag(scope.$index, scope.row)"
-          />
-          <kt-button
-            :style="{
-              background: button1Background + '',
-              border: '1px solid' + button1Background,
-              color: '#fff',
-            }"
-            v-if="button1Name"
-            :label="button1Name"
-            :perms="permsButton1"
-            :size="size"
-            :icon="button1Icon"
-            @click="handleButton1(scope.$index, scope.row)"
-          />
-          <kt-button
-            v-if="button2Name"
-            :label="button2Name"
-            :perms="permsButton2"
-            :size="size"
-            :type="button2Type"
-            :icon="button2Icon"
-            @click="handleButton2(scope.$index, scope.row)"
-          />
-          <kt-button
-            v-if="button3Name"
-            :label="button3Name"
-            :perms="permsButton3"
-            :size="size"
-            :type="button3Type"
-            :icon="button3Icon"
-            @click="handleButton3(scope.$index, scope.row)"
-          />
-          <kt-button
-            v-if="button4Name"
-            :icon="button4Icon"
-            :type="button4Type"
-            :label="button4Name"
-            :perms="permsButton4"
-            :size="size"
-            @click="handleButton4(scope.$index, scope.row)"
-          />
-          <kt-button
-            v-if="button5Name"
-            :label="button5Name"
-            :size="size"
-            :type="button5Type"
-            :icon="button5Icon"
-            @click="handleButton5(scope.$index, scope.row)"
-          />
-          <kt-button
-            v-if="button6Name"
-            :label="button6Name"
-            :size="size"
-            :type="button6Type"
-            @click="handleButton6(scope.$index, scope.row)"
-          />
-          <el-button type="text" size="small" v-if="buttonDropdown.length>0">
+          <kt-button type="primary" v-if="editButtonName" icon="fa fa-edit" :label="editButtonName" :perms="permsEdit"
+            :size="size" @click="handleEdit(scope.$index, scope.row)" />
+          <kt-button v-if="deleteButtonName" icon="fa fa-trash" :label="deleteButtonName" :perms="permsDelete"
+            :size="size" type="danger" @click="handleDeleteFlag(scope.$index, scope.row)" />
+          <kt-button :style="{
+            background: button1Background + '',
+            border: '1px solid' + button1Background,
+            color: '#fff',
+          }" v-if="button1Name" :label="button1Name"  :perms="permsButton1" :size="size" :icon="button1Icon"
+            @click="handleButton1(scope.$index, scope.row)" />
+          <kt-button v-if="button2Name" :label="button2Name" :style="button2style" :perms="permsButton2" :size="size" :type="button2Type"
+            :icon="button2Icon" @click="handleButton2(scope.$index, scope.row)" />
+          <kt-button v-if="button3Name" :label="button3Name" :style="button3style" :perms="permsButton3" :size="size" :type="button3Type"
+            :icon="button3Icon" @click="handleButton3(scope.$index, scope.row)" />
+          <kt-button v-if="button4Name" :icon="button4Icon" :style="button4style" :type="button4Type" :label="button4Name" :perms="permsButton4"
+            :size="size" @click="handleButton4(scope.$index, scope.row)" />
+          <kt-button v-if="button5Name" :label="button5Name" :style="button5style" :size="size" :type="button5Type" :icon="button5Icon"
+            @click="handleButton5(scope.$index, scope.row)" />
+          <kt-button v-if="button6Name" :label="button6Name" :size="size" :type="button6Type"
+            @click="handleButton6(scope.$index, scope.row)" />
+          <el-button type="text" size="small" v-if="buttonDropdown.length > 0">
             <el-dropdown trigger="click">
               <span class="el-dropdown-link">
                 更多
@@ -239,7 +92,9 @@
               </span>
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item v-for="val in buttonDropdown" :key="val.label">
-                  <el-button style="width:100%" size="mini" type="text"  v-if="!val.hide || (val.hide && val.hide(scope.row))"  @click="val.click(scope.row)">{{ val.label }}</el-button>
+                  <el-button style="width:100%" size="mini" type="text"
+                    v-if="!val.hide || (val.hide && val.hide(scope.row))" @click="val.click(scope.row)">{{ val.label
+                    }}</el-button>
                 </el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
@@ -249,58 +104,21 @@
     </el-table>
     <!--分页栏-->
     <!-- 底部分页 -->
-    <div class="bottomFixed" ref="bottomFixed">
-      <kt-button
-        :label="customToolName"
-        :perms="permscustomTool"
-        :size="size"
-        type="danger"
-        @click="customToolMethod()"
-        :disabled="selections.length === 0"
-        style="float: left"
-        v-if="customToolseletted"
-      />
-      <kt-button
-        class="debutton"
-        :label="deleteName"
-        :perms="permsDelete"
-        :size="size"
-        type="danger"
-        @click="handleBatchDelete()"
-        :disabled="selections.length === 0"
-        style="float: left"
-        v-if="showBatchDelete & showOperation"
-      />
-      <kt-button
-        :label="settledName"
-        :perms="permsSettled"
-        :size="size"
-        type="danger"
-        @click="handleBatchSettled()"
-        :disabled="selections.length === 0"
-        style="float: left"
-        v-if="showBatchSettled"
-      />
-      <kt-button
-        label="导出Excel"
-        :perms="permsExcel"
-        :size="size"
-        type="danger"
-        @click="handleBatchPrint()"
-        style="float: left"
-        v-if="showBatchPrint"
-      />
-      <el-pagination
-        @size-change="handleSizeChange"
-        layout="total, sizes, prev, pager, next, jumper"
-        @current-change="refreshPageRequest"
-        :current-page="data.pageNum"
-        :page-size="data.pageSize"
-        :page-sizes="[10, 20, 50, 100, 200, 300, 400, 500]"
-        :total="data.totalSize"
-        style="float: left; margin-left: 20px"
-        v-if="isshowpagination"
-      >
+    <div class="bottomFixed " ref="bottomFixed">
+      <div>
+        <kt-button :label="customToolName" :perms="permscustomTool" :size="size" @click="customToolMethod()"
+          :disabled="selections.length === 0" style="float: left;" v-if="customToolseletted" />
+        <kt-button class="debutton" :label="deleteName" :perms="permsDelete" :size="size" @click="handleBatchDelete()"
+          :disabled="selections.length === 0" style="float: left" v-if="showBatchDelete & showOperation" />
+        <kt-button :label="settledName" :perms="permsSettled" :size="size" @click="handleBatchSettled()"
+          :disabled="selections.length === 0" style="float: left" v-if="showBatchSettled" />
+        <kt-button label="导出Excel" :perms="permsExcel" :size="size" @click="handleBatchPrint()" style="float: left"
+          v-if="showBatchPrint" />
+      </div>
+      <el-pagination @size-change="handleSizeChange" background layout="total, sizes, prev, pager, next, jumper"
+        @current-change="refreshPageRequest" :current-page="data.pageNum" :page-size="data.pageSize"
+        :page-sizes="[10, 20, 50, 100, 200, 300, 400, 500]" :total="data.totalSize" style="float: right; "
+        v-if="isshowpagination">
       </el-pagination>
     </div>
   </div>
@@ -377,9 +195,9 @@ export default {
     button6Name: {
       type: String,
     },
-    buttonDropdown:{
+    buttonDropdown: {
       type: Array,
-      default:()=>[],
+      default: () => [],
     },
     permsButton1: {
       type: String,
@@ -521,6 +339,29 @@ export default {
       type: Boolean,
       default: false,
     },
+    button1style: {
+      type: Object,
+      default: () => ({ }),
+    },
+    button2style: {
+      type: Object,
+      default: () => ({ }),
+    },
+    button3style: {
+      type: Object,
+      default: () => ({}),
+
+    },
+    button4style: {
+      type: Object,
+      default: () => ({ }),
+
+    },
+    button5style: {
+      type: Object,
+      default: () => ({ }),
+
+    }
   },
   data() {
     return {
@@ -785,7 +626,7 @@ export default {
             callback: callback,
           });
         })
-        .catch(() => {});
+        .catch(() => { });
     },
     //批量结算
     handleBatchSettled: function () {
@@ -830,12 +671,10 @@ export default {
 /* 底部固定分页 */
 .bottomFixed {
   height: 40px;
-  position: fixed;
   bottom: 0;
   width: 100%;
   background: #fff;
-  /* margin-top: 10px; */
-  /* box-shadow: 0 -2px 0 0 #efefef; */
+  margin-top: 10px;
 }
 
 .el-table .warningRow {
@@ -845,9 +684,10 @@ export default {
 .el-table .successRow {
   background: #f0f9eb;
 }
-.el-dropdown-link{
+
+.el-dropdown-link {
   cursor: pointer;
-    color: var(--themeColor);
-    font-size: 12px;
+  color: var(--themeColor);
+  font-size: 12px;
 }
 </style>

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.