Przeglądaj źródła

Merge branch 'dev' of http://www.baoxianzhanggui.com:8090/sxzgd/vue-insagent-pc into dev

lihongxiao 2 lat temu
rodzic
commit
8cf655f54b
29 zmienionych plików z 5222 dodań i 849 usunięć
  1. BIN
      src/assets/api.png
  2. BIN
      src/assets/api1.png
  3. 0 1
      src/assets/css/common.css
  4. BIN
      src/assets/python.png
  5. BIN
      src/assets/python1.png
  6. 539 365
      src/components/Form/ProductCostForm.vue
  7. 48 1
      src/http/moudules/dept.js
  8. 6 0
      src/http/moudules/insCompany.js
  9. 9 0
      src/http/moudules/user.js
  10. 379 372
      src/views/AgreementManage/CarInsurance/AgreementEntry.vue
  11. 733 0
      src/views/AgreementManage/CarInsurance/AgreementHistoryRecord.vue
  12. 433 0
      src/views/AgreementManage/CarInsurance/AgreementNonVehicleConfig.vue
  13. 1882 0
      src/views/AgreementManage/CarInsurance/AgreementProductFee.vue
  14. 711 0
      src/views/AgreementManage/CarInsurance/AgreementUnderwritingRule.vue
  15. 4 3
      src/views/Core/KtCommonTable.vue
  16. 22 7
      src/views/FinancialManagement/AcountWithdrawal/WithdrawalReview.vue
  17. 9 1
      src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/DocumentaryFeesDetail.vue
  18. 1 1
      src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/DocumentaryFeesSettled.vue
  19. 5 9
      src/views/FinancialManagement/CarInsurance/CompanySettlement/NoCarInsurance/DocumentaryFeesDetail.vue
  20. 49 27
      src/views/FinancialManagement/CarInsurance/PlatformSettlement/NonVehicleBalance.vue
  21. 3 1
      src/views/Letter/Wallet/FundsWallet.vue
  22. 2 2
      src/views/PeopleManage/Agent/AgentManage.vue
  23. 3 3
      src/views/PeopleManage/Player/PlayerManage.vue
  24. 3 3
      src/views/PeopleManage/Player/PlayerManageteam.vue
  25. 45 42
      src/views/PeopleManage/Staff/AreaOrganization.vue
  26. 320 0
      src/views/PeopleManage/Staff/AreaPeople.vue
  27. 5 3
      src/views/PeopleManage/Staff/StaffManage.vue
  28. 3 2
      src/views/PeopleManage/TeamLeader/TeamLeaderManage.vue
  29. 8 6
      src/views/Task/daikeComponents/KtLetter.vue

BIN
src/assets/api.png


BIN
src/assets/api1.png


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

BIN
src/assets/python.png


BIN
src/assets/python1.png


+ 539 - 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,
@@ -442,8 +528,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 +623,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;
   }

+ 48 - 1
src/http/moudules/dept.js

@@ -250,7 +250,7 @@ export const sysDeptInternalAgentQueryPage = (data) => {
 // 机构类型
 export const sysDeptInternalAgentType = (data) => {
     return axios({
-        url: '/sysDict/dictDetails/sysDeptInternalAgentType',
+        url: '/dict/dictListByType?type=sysDeptInternalAgentType',
         method: 'get',
         data
     })
@@ -263,4 +263,51 @@ export const sysDeptInternalAgentDelete = (data) => {
         method: 'post',
         data
     })
+}
+
+
+// 查询后线人员配置内部机构列表+分页
+export const sysUserLinkDeptInternalAgentQueryPage = (data) => {
+    return axios({
+        url: '/sysUserLinkDeptInternalAgent/queryPage',
+        method: 'post',
+        data
+    })
+}
+
+// 获取内部机构树
+export const sysUserLinkDeptInternalAgentQueryOrgTree = (data) => {
+    return axios({
+        url: '/sysUserLinkDeptInternalAgent/queryOrgTree',
+        method: 'get',
+        data
+    })
+}
+
+// 后线人员配置内部机构删除
+export const sysUserLinkDeptInternalAgentDelete = (data) => {
+    return axios({
+        url: '/sysUserLinkDeptInternalAgent/delete',
+        method: 'post',
+        data
+    })
+}
+
+// 后线人员配置内部机构添加修改
+export const sysUserLinkDeptInternalAgentAddOrUpdate = (data) => {
+    return axios({
+        url: '/sysUserLinkDeptInternalAgent/addOrUpdate',
+        method: 'post',
+        data
+    })
+}
+
+
+// 后线人员配置内部机构添加修改
+export const sysUserLinkDeptInternalAgentFindAllUserList = (data) => {
+    return axios({
+        url: '/sysUserLinkDeptInternalAgent/findAllUserList',
+        method: 'post',
+        data
+    })
 }

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

+ 9 - 0
src/http/moudules/user.js

@@ -348,6 +348,15 @@ export const findBackUserList = (data) => {
     data
   })
 }
+
+// 后弦人员管理列表1
+export const findBackUserList1 = (data) => {
+  return axios({
+    url: '/user/findBackUserList1',
+    method: 'post',
+    data
+  })
+}
 // 渠道数据统计
 export const quTeamNum = (data) => {
   return axios({

Plik diff jest za duży
+ 379 - 372
src/views/AgreementManage/CarInsurance/AgreementEntry.vue


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

@@ -0,0 +1,733 @@
+<!-- 模板区域 -->
+<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>
+                <div class="flex a-c">
+                  <span style="font-weight: bold;">api类型</span>
+                    <div class="apiTypestyle flex j-start a-c " style="pointer-events: none;" :class="{'apiactive':agreementsHistoryInfo.attributionform.apiType==item.id}"  v-for="(item,index) in apiTypelist" :key="index" >
+                      <img :src="agreementsHistoryInfo.attributionform.apiType==item.id?item.activeImg:item.img" alt="">
+                      <span  style="margin:auto">{{ item.label }}</span>
+                    </div>
+                </div>
+                <!-- <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 {
+      apiTypelist:[
+        {
+          id:1,
+          label:"API",
+          img:require('@/assets/api.png'),
+          activeImg:require('@/assets/api1.png')
+        },
+        {
+          id:2,
+          label:"python",
+          img:require('@/assets/python.png'),
+          activeImg:require('@/assets/python1.png')
+
+        }
+      ],
+      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-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;
+  }
+}
+.apiTypestyle {
+  padding: 4px;
+  box-sizing: border-box;
+  margin-left:50px;
+  width: 124px;
+  height: auto;
+  background: #F1F2F6;
+  border-radius: 4px 4px 4px 4px;
+  cursor: pointer;
+  img{
+    width: 28px;
+    height:28px;
+  }
+  >span{
+    // color: rgba(38,38,38,0.8);
+    font-size: 14px;
+  }
+}
+
+.apiactive {
+  background: #fff;
+  border: 1px solid #2D4D89;
+  color:#2D4D89;
+  font-weight: bold;
+}
+</style>

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

@@ -0,0 +1,433 @@
+<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-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>
+

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

@@ -0,0 +1,1882 @@
+<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 && tempEndDate) {
+        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-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>
+

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

@@ -0,0 +1,711 @@
+<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-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>
+

+ 4 - 3
src/views/Core/KtCommonTable.vue

@@ -291,6 +291,7 @@
         v-if="showBatchPrint"
       />
       <el-pagination
+        background
         @size-change="handleSizeChange"
         layout="total, sizes, prev, pager, next, jumper"
         @current-change="refreshPageRequest"
@@ -379,7 +380,7 @@ export default {
     },
     buttonDropdown:{
       type: Array,
-      default:()=>[],
+      default: () => [],
     },
     permsButton1: {
       type: String,
@@ -847,7 +848,7 @@ export default {
 }
 .el-dropdown-link{
   cursor: pointer;
-    color: var(--themeColor);
-    font-size: 12px;
+  color: var(--themeColor);
+  font-size: 12px;
 }
 </style>

+ 22 - 7
src/views/FinancialManagement/AcountWithdrawal/WithdrawalReview.vue

@@ -3,6 +3,9 @@
         <el-main ref="elMain" style="padding: 0px;">
             <el-row>
                 <el-form :inline="true" :model="queryForm" class="demo-form-inline" label-width="130px" size="small">
+                    <el-form-item label="工号">
+                        <el-input v-model="queryForm.userId" placeholder="工号" clearable></el-input>
+                    </el-form-item>
                     <el-form-item label="姓名">
                         <el-input v-model="queryForm.userName" placeholder="姓名" clearable></el-input>
                     </el-form-item>
@@ -32,7 +35,7 @@
             </el-row>
             <kt-common-table button2Type="text" button3Type="text" :showBatchDelete="false" 
              :data="pageResult" :columns="columns"
-                @findPage="findPage" button3Name="审核通过" @handleButton3="handleButton3" button2Name="审核驳回"
+                @findPage="findPage" button3Name="审核通过" @handleButton3="handleButton3" button2Name="审核驳回" 
                 @handleButton2="handleButton2"></kt-common-table>
         </el-main>
     </div>
@@ -67,11 +70,13 @@ export default {
             },
             columns: [
                 //数据列
+                { prop: "userId", label: "工号" },
                 { prop: "userName", label: "姓名" },
                 { prop: "bankNumber", label: "卡号" },
                 { prop: "bankAccount", label: "银行" },
                 { prop: "bankAddress", label: "开户行" },
                 { prop: "auditStatus", label: "状态",formatter:this.statusFormatter },
+                { prop: "remark", label: "驳回原因" },
             ],
         };
     },
@@ -84,7 +89,7 @@ export default {
       },
         // 右侧列表的方法Start
         findPage(data) {
-            if(data.pageRequest){
+            if(data && data.pageRequest){
                 this.pageRequest.pageNum=data.pageRequest.pageNum
                 this.pageRequest.pageSize=data.pageRequest.pageSize
             }
@@ -103,20 +108,30 @@ export default {
       
       
         handleButton3({ row, index }) {
-            this.$api.task
-                .auditByBankNumber({id:row.id,auditStatus:'1'})
-                .then(res => {
+            this.$confirm('确认审核通过?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.$api.task.auditByBankNumber({id:row.id,auditStatus:'1'}).then(res => {
                     if (res.code == 200) {
                         this.findPage()
                         this.$message({
-                        message: '操作成功' ||res.msg,
-                        type: 'success'
+                            message: '操作成功' ||res.msg,
+                            type: 'success'
                         });
                     }
                     else{
                         this.$message.error(res.msg)
                     }
                 })
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '已取消删除'
+                });          
+            });
+
         },
         handleButton2({ row, index }) {
             this.$prompt('输入驳回原因', '提示', {

+ 9 - 1
src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/DocumentaryFeesDetail.vue

@@ -165,7 +165,7 @@
         <el-button size="small" type="primary" @click="onSubmitAdd('formDataAdd')">保存</el-button>
       </span>
     </el-dialog>
-  <el-dialog  :visible.sync="dialogVisibleradio" width="40%" >
+  <el-dialog  :visible.sync="dialogVisibleradio" width="60%" >
       <el-upload style="margin-bottom:10px" action="#" class="upload-demo" :limit="1" :auto-upload="false"
             :on-change="drivinguploadRadio"  ref="upload3" :file-list="fileListRadio">
             <el-button size="small" type="primary">点击上传</el-button>
@@ -186,6 +186,14 @@
           <el-table-column
             prop="syPolicyno"
             label="商业保单号">
+          </el-table-column>
+            <el-table-column
+            prop="jqOtherCostsProportion"
+            label="交强跟单比例">
+          </el-table-column>
+            <el-table-column
+            prop="syOtherCostsProportion"
+            label="商业跟单比例">
           </el-table-column>
             <el-table-column
             prop="jqOtherCostsPremium"

+ 1 - 1
src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/DocumentaryFeesSettled.vue

@@ -79,7 +79,7 @@ export default {
                         type: "text"
                     },
                     {
-                        prop: "jqPolicyno",
+                        prop: "policyno",
                         label: "交强保单号",
                         type: "text"
                     },

+ 5 - 9
src/views/FinancialManagement/CarInsurance/CompanySettlement/NoCarInsurance/DocumentaryFeesDetail.vue

@@ -125,7 +125,7 @@
         <el-button size="small" type="primary" @click="onSubmitAdd('formDataAdd')">保存</el-button>
       </span>
     </el-dialog>
-  <el-dialog  :visible.sync="dialogVisibleradio" width="40%" >
+  <el-dialog  :visible.sync="dialogVisibleradio" width="50%" >
       <el-upload style="margin-bottom:10px" action="#" class="upload-demo" :limit="1" :auto-upload="false"
             :on-change="drivinguploadRadio"  ref="upload3" :file-list="fileListRadio">
             <el-button size="small" type="primary">点击上传</el-button>
@@ -142,19 +142,15 @@
           <el-table-column
             prop="noPolicyno"
             label="非车保单号">
+          </el-table-column>
+            <el-table-column
+            prop="noOtherCostsProportion"
+            label="非车跟单比例">
           </el-table-column>
           <el-table-column
             prop="noOtherCostsPremium"
             label="非车跟单金额">
           </el-table-column>
-            <el-table-column
-            prop="otherFeevalue"
-            label="跟单金额">
-          </el-table-column>
-            <el-table-column
-            prop="otherFeerate"
-            label="跟单比例">
-          </el-table-column>
         </el-table>
     </el-dialog>
     <el-dialog  :visible.sync="dialogVisibleprogress" width="25%" >

+ 49 - 27
src/views/FinancialManagement/CarInsurance/PlatformSettlement/NonVehicleBalance.vue

@@ -135,7 +135,7 @@
               <el-input v-model="formDataList.noOtherCostsProportion" class="inputType"></el-input>
             </el-form-item>
         </el-col>
-      </el-row> 
+      </el-row>
     </el-form>
     <span slot="footer" class="dialog-footer">
     <el-button size="small" @click="dialogVisibleDetail = false">取消</el-button>
@@ -180,7 +180,7 @@
       </el-upload>
     </el-col>
   </el-row>
-  
+
     <el-table
     v-if="importData.resultList"
         border
@@ -308,27 +308,50 @@
             <el-input v-model="formDataListAdd.noPremium" class="inputType" size="small"></el-input>
           </el-form-item>
         </el-col>
+<!--        <el-col :span="8">-->
+<!--          <el-form-item label="交强手续费比例">-->
+<!--            <el-input v-model="formDataListAdd.jqSuperviseCostsProportion" class="inputType" size="small"></el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="8">-->
+<!--          <el-form-item label="商业手续费比例">-->
+<!--            <el-input v-model="formDataListAdd.sySuperviseCostsProportion" class="inputType" size="small"></el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="8">-->
+<!--          <el-form-item label="非车手续费比例">-->
+<!--            <el-input v-model="formDataListAdd.noSuperviseCostsProportion" class="inputType" size="small"></el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+
+<!--        <el-col :span="8">-->
+<!--          <el-form-item label="交强跟单比例">-->
+<!--            <el-input v-model="formDataListAdd.jqOtherCostsProportion" class="inputType" size="small"></el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="8">-->
+<!--          <el-form-item label="商业跟单比例">-->
+<!--            <el-input v-model="formDataListAdd.syOtherCostsProportion" class="inputType" size="small"></el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
         <el-col :span="8">
-          <el-form-item label="交强应收比例">
-            <el-input v-model="formDataListAdd.jqReceivableProportion" class="inputType" size="small"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="商业应收比例">
-            <el-input v-model="formDataListAdd.syReceivableProportion" class="inputType" size="small"></el-input>
+          <el-form-item label="跟单金额">
+            <el-input v-model="formDataListAdd.otherFeevalue" class="inputType" size="small"></el-input>
           </el-form-item>
         </el-col>
+
         <el-col :span="8">
-          <el-form-item label="非车应收比例">
-            <el-input v-model="formDataListAdd.noReceivableProportion" class="inputType" size="small"></el-input>
+          <el-form-item label="手续费金额">
+            <el-input v-model="formDataListAdd.commissionFeevalue" class="inputType" size="small"></el-input>
           </el-form-item>
         </el-col>
+
         <el-col :span="8">
-          <el-form-item label="应收金额" prop="receivableAmount">
+          <el-form-item label="应收金额" >
             <el-input v-model="formDataListAdd.receivableAmount" class="inputType" size="small"></el-input>
           </el-form-item>
         </el-col>
-      </el-row> 
+      </el-row>
     </el-form>
     <span slot="footer" class="dialog-footer">
       <el-button size="small" @click="handleCloseAdd">取消</el-button>
@@ -385,7 +408,7 @@ export default {
           prop: "companyName",
           type: "company",
         },
-       
+
         {
           label: "险种",
           prop: "riskcode",
@@ -397,7 +420,7 @@ export default {
           prop: "partnerCompaniesName",
           type: "input",
         },
-       
+
         {
           label: "对接人",
           name: "dockingPerson",
@@ -429,7 +452,7 @@ export default {
               value:'0'
             }
           ]
-        }, 
+        },
         {
           label: "结算日期",
           prop: "settlementTime",
@@ -752,7 +775,7 @@ export default {
             label: "商业跟单金额",
             type: "text"
           },
-        
+
         ],
         loading: true,
       },
@@ -810,7 +833,7 @@ export default {
       },
     };
   },
- 
+
   created(){
     this.findPage();
     this.$api.task
@@ -851,7 +874,7 @@ export default {
 
 
   },
-  
+
   methods: {
     // 上传凭证
     handleUpload(file, fileList) {
@@ -891,7 +914,7 @@ export default {
         this.$message({
           type: 'info',
           message: '已取消删除'
-        });          
+        });
       });
     },
     // 新增
@@ -901,8 +924,8 @@ export default {
     submitAdd(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          this.$api.task.queryPagePtInsert({ 
-            ...this.formDataListAdd, 
+          this.$api.task.queryPagePtInsert({
+            ...this.formDataListAdd,
             companyName: this.formDataListAdd.companyId ? this.InsCompanyList.find(val => val.id == this.formDataListAdd.companyId).name : ''
           })
           .then(res => {
@@ -928,7 +951,7 @@ export default {
     handleCloseAdd() {
       this.dialogVisibleAdd = false
     },
-    
+
     agrmentlist() {
       this.$api.task.findPtlAgreementList().then((res) => {
         this.agreementTypeoptions = res.data
@@ -960,7 +983,7 @@ export default {
         this.$refs.dataTable.toggleRowSelection(selection[0]);
       }
       this.selectionOption=selection
-     
+
     },
     selectDate(val){
       let month= val.getMonth() + 1;
@@ -1220,7 +1243,7 @@ export default {
     },
     handleClose(){
       this.dialogVisibleDetail=false
-    },  
+    },
     haldUpload(row){
       this.formDataId=row.id
       this.dialogVisibleDetail=true
@@ -1237,7 +1260,7 @@ export default {
   }
 };
 </script>
-    
+
   <style scoped>
 
 .customStyle{
@@ -1254,4 +1277,3 @@ export default {
   width:180px
 }
 </style>
-    

+ 3 - 1
src/views/Letter/Wallet/FundsWallet.vue

@@ -222,7 +222,9 @@ export default {
     },
     instantWithdrawal() {
       this.extract=null
-      this.$api.letter.getUserBankList().then((res) => {
+      this.$api.letter.getUserBankList({
+        auditStatus: '1'
+      }).then((res) => {
         if (res.code == '200' && res.data.length) {
           this.bankList.map(val => {
             res.data.map(ele => {

+ 2 - 2
src/views/PeopleManage/Agent/AgentManage.vue

@@ -199,7 +199,7 @@
               <el-col :span="8">
                 <el-form-item label="领导人" prop="leaderId">
                   <el-select style="width: 200px" clearable filterable  v-model="formData.leaderId" placeholder="请选择">
-                    <el-option v-for="val in leaderOptions" :label="val.name" :value="val.id" :key="val.id"></el-option>
+                    <el-option v-for="val in leaderOptions" :label="val.name" :value="val.userId" :key="val.userId"></el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -797,7 +797,7 @@ export default {
       let res = await this.$api.user.getUserDatail(params.userId);
       if (res.code == 200) {
         this.$api.user
-          .findListByDeptId({ deptId: res.data.sysUser.deptId, id: params.userId })
+        .findBackUserList1({agentFlag: 0})
           .then((res) => {
             this.leaderOptions = res.data;
           });

+ 3 - 3
src/views/PeopleManage/Player/PlayerManage.vue

@@ -176,8 +176,8 @@
                     <el-option
                       v-for="val in leaderOptions"
                       :label="val.name"
-                      :value="val.id"
-                      :key="val.id"
+                      :value="val.userId"
+                      :key="val.userId"
                     ></el-option>
                   </el-select>
                 </el-form-item>
@@ -479,7 +479,7 @@ export default {
             this.recommenderOptions = res.data;
           });
           this.$api.user
-          .findBackListByDeptId({ deptId: res.data.sysUser.deptId })
+        .findBackUserList1({agentFlag: 0})
           .then((res) => {
             this.leaderOptions = res.data;
           });

+ 3 - 3
src/views/PeopleManage/Player/PlayerManageteam.vue

@@ -190,8 +190,8 @@
                     <el-option
                       v-for="val in leaderOptions"
                       :label="val.name"
-                      :value="val.id"
-                      :key="val.id"
+                      :value="val.userId"
+                      :key="val.userId"
                     ></el-option>
                   </el-select>
                 </el-form-item>
@@ -727,7 +727,7 @@ export default {
       let res = await this.$api.user.getUserDatail(params.userId);
       if (res.code == 200) {
         this.$api.user
-          .findBackListByDeptId({ deptId: res.data.sysUser.deptId })
+        .findBackUserList1({agentFlag: 0})
           .then((res) => {
             this.leaderOptions = res.data;
           });

+ 45 - 42
src/views/PeopleManage/Staff/AreaOrganization.vue

@@ -5,38 +5,25 @@
       <el-main ref="elMain" style="padding: 0px">
         <!-- 搜索 新增-展开折叠 -->
         <div style="margin-bottom: 20px; margin-top: 15px" class="flex a-start">
-          <el-button
-            size="small"
-            type="primary"
-            plain
-            icon="el-icon-plus"
-            :label="$t('action.addCompany')"
-            @click="handleAddCompany"
-            >新增子机构</el-button
-          >
-          <el-button
-            size="small"
-            type="info"
-            plain
-            icon="el-icon-sort"
-            @click="fold()"
-            >展开折叠</el-button
-          >
-          <!-- <el-form
-            :inline="true"
-            class="demo-form-inline"
-            size="small"
-            style="margin-left: 30px"
-          >
+          <el-button size="small" type="primary" plain icon="el-icon-plus" :label="$t('action.addCompany')" @click="handleAddCompany">新增子机构</el-button>
+          <el-button size="small" type="info" plain icon="el-icon-sort" @click="fold()" >展开折叠</el-button>
+          <el-form :inline="true" class="demo-form-inline" size="small" style="margin-left: 30px">
+            <el-form-item label="机构名称">
+              <el-cascader v-model="formData.id" size="small"
+                :show-all-levels="false" :options="formListData" :props="{ label: 'name', value: 'id', children: 'children', checkStrictly: true }" clearable
+                filterable></el-cascader>
+            </el-form-item>
+            <el-form-item label="机构类型">
+              <el-select style="width:200px" clearable v-model="formData.comtype" placeholder="请选择">
+                <el-option v-for="val in comtypeoptions" :label="val.label" :value="val.value"
+                  :key="val.value"></el-option>
+              </el-select>
+            </el-form-item>
             <el-form-item>
-              <el-button
-                type="primary"
-                size="small"
-                @click="managementSourceQuery"
-                >查询</el-button
-              >
+              <el-button size="small" @click="resultList">重置</el-button>
+              <el-button type="primary" size="small" @click="findTreeData">查询</el-button>
             </el-form-item>
-          </el-form> -->
+          </el-form>
         </div>
         <!-- 表格渲染 -->
         <el-table
@@ -148,9 +135,9 @@
               >
                 <el-option
                   v-for="item in comtypeoptions"
-                  :key="item.dictValue"
-                  :label="item.dictTag"
-                  :value="item.dictValue"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
                 ></el-option>
               </el-select>
             </el-form-item>
@@ -195,12 +182,6 @@ export default {
     tree,
     KtCommonTable,
   },
-  created() {
-    this.findTreeData(); // 获取左边机构树数据
-    this.$api.dept.sysDeptInternalAgentType().then(res => {
-      this.comtypeoptions = res.data.ddList
-    })
-  },
   data() {
     return {
       loading: false,
@@ -265,14 +246,29 @@ export default {
       isshow: false,
       expanded: false, // 在这里定义了展开与否的标志
       parentName: '',
+      formListData: [], // 全部树
+      formData: {},
     };
   },
+  created() {
+    this.findTreeData();
+    this.$api.dept.sysDeptInternalAgentType().then(res => {
+      this.comtypeoptions = res.data
+    })
+    this.$api.dept.sysDeptInternalAgentFindTree().then((res) => {
+      this.formListData = res.data;
+    });
+  },
   mounted() {
     this.changeTreeWidth(); // 初始化树的宽度
     this.filters.id = "9";
     this.findSubDeptPage(); //初始化数据
   },
   methods: {
+    resultList() {
+      this.formData = {}
+      this.findTreeData()
+    },
     //点击每一行的事件
     rowClick(row, treeNode) {
       //点每行展开折叠
@@ -320,8 +316,15 @@ export default {
     },
     findTreeData() {
       // 获取机构树的数据
+      let queryData = {
+        comtype: this.formData.comtype
+      }
+      if (this.formData.id) {
+        queryData.deptId = this.formData.id[this.formData.id.length-1]
+      }
       this.loading = true;
-      this.$api.dept.sysDeptInternalAgentFindTree().then((res) => {
+      this.$api.dept.sysDeptInternalAgentFindTree(queryData).then((res) => {
+        this.ztreeNodes = []
         this.ztreeNodes = res.data;
         this.loading = false;
       });
@@ -404,8 +407,8 @@ export default {
       let comtype = row.comtype;
       return CommonUtil.getDataName({
         dataList: this.comtypeoptions,
-        value: "dictValue",
-        label: "dictTag",
+        value: "value",
+        label: "label",
         data: comtype,
       });
     },

+ 320 - 0
src/views/PeopleManage/Staff/AreaPeople.vue

@@ -0,0 +1,320 @@
+<template>
+  <div>
+    <el-main ref="elMain" style="padding: 0px">
+      <Split :gutterSize="2" style="height: calc(100vh - 120px)">
+        <!-- 左侧树Start -->
+        <SplitArea :size="leftSplitWidth" :minSize="240">
+          <div>
+            <div>
+              <kt-button style="background-color: #ffc000;border: #ffc000;" icon="fa fa-plus" label="添加人员" 
+                type="primary" perms="sys:backline:add" @click="handleAddButton" />
+            </div>
+            <el-divider></el-divider>
+            <!-- 左侧树形结构 -->
+            <el-tree :data="treeData" :props="{ children: 'children', label: 'name' }" node-key="id"
+              :default-expanded-keys="['9']" @node-click="onZTreeClick"></el-tree>
+          </div>
+        </SplitArea>
+        <!-- 左侧树End -->
+
+        <!-- 右侧列表页面Start -->
+        <SplitArea :size="rightSplitWidth">
+          <!-- 筛选区域Start -->
+          <el-row class="queryFrom">
+            <el-form ref="queryFormRef" :model="pageData" label-width="80px" size="small">
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item label="工号">
+                    <el-input clearable placeholder="工号" v-model="pageData.userId"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="名称">
+                    <el-input clearable placeholder="后线人员名称" v-model="pageData.userName"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item>
+                    <el-button type="primary" @click="findPage">查询</el-button>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </el-row>
+          <kt-common-table permsEdit="sys:backline:edit" :data="pageResult" :columns="columns" deleteButtonName="删除"
+            :showBatchDelete="false" @findPage="findPage" @handleDeleteFlag="handleDelete">
+          </kt-common-table>
+          <!--  editButtonName="编辑"  @handleEdit="handleTableEdit" -->
+        </SplitArea>
+      </Split>
+    </el-main>
+    <!-- 新增修改界面 -->
+    <el-dialog :title="dialogTitle" width="50%" :visible.sync="dialogVisible" :close-on-click-modal="false" @close="closeDialog" v-dialogDrag>
+        <el-table :data="addListData" border ref="personneTable" width="100%" size="small"
+          align="center" :header-cell-style="{
+            background: '#F2F7FC',
+            fontWeight: '900',
+            color: '#606266',
+          }" >
+          <!-- :row-class-name="tableRowClassName" -->
+          <el-table-column type="selection" width="55">
+          </el-table-column>
+          <el-table-column prop="userId" label="工号">
+          </el-table-column>
+          <el-table-column prop="name" label="名称">
+          </el-table-column>
+          <el-table-column prop="deptName" label="机构名称">
+          </el-table-column>
+      </el-table>
+      <el-pagination @size-change="handleSizeChange" @current-change="refreshPageRequest"
+          :current-page="addListDataPage.pageNum" :page-sizes="[10, 20, 50, 100, 200, 300, 400, 500]"
+          :page-size="addListDataPage.pageSize" layout="total, sizes, prev, pager, next, jumper"
+          :total="addListDataPage.total">
+      </el-pagination>
+      <span slot="footer">
+        <kt-button label="确定" type="primary" perms="sys:backline:add" @click="addSubmit" />
+      </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import KtButton from "@/views/Core/KtButton"; // 按钮权限组件
+import tree from "@/components/ztree.vue"; // 机构树组件
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import { validateSfz } from "../../../utils/validate.js";
+import peopleImage from '@/components/PeopleImage/index.vue' //影像组件
+import mixa from '../mixin'
+import { RELEASE_TYPES } from "semver";
+const mixin = new mixa({
+  treeTypeNum: null
+})
+export default {
+  components: {
+    KtButton,
+    tree,
+    KtCommonTable,
+    peopleImage
+  },
+  mixins: [mixin],
+  data() {
+    return {
+      activeName: '1',
+      isShow: true,
+      //56个民族
+      pageData: {
+        pageNum: 1,
+        pageSize: 20,
+      },
+      queryFrom: {},
+      pageResult: {},
+      columns: [
+        { prop: "createTime", label: "创建时间", minWidth: 80, sortable: false },
+        { prop: "deptId", label: "	机构编码", minWidth: 100, sortable: false },
+        { prop: "deptName", label: "机构名称", minWidth: 100, sortable: false },
+        // { prop: "id", label: "id", minWidth: 100, sortable: false },
+        { prop: "userId", label: "后线人员工号", minWidth: 100, sortable: false },
+        { prop: "userName", label: "后线人员名称", minWidth: 100, sortable: false },
+      ],
+      dialogTitle: "",
+      dialogVisible: false, // 新增编辑界面是否显示
+      treeData: [],
+      addListData: [],
+      addListDataPage: {
+        pageNum: 1,
+        pageSize: 20,
+        total: 0
+      },
+      deptNBId: '',
+    };
+  },
+  created() {
+    this.getLeftData()
+  },
+  methods: {
+    // 删除
+    handleDelete(row) {
+      this.$confirm('是否确认删除?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.$api.dept.sysUserLinkDeptInternalAgentDelete({
+            ids: [row.row.id]
+          }).then(res => {
+            if (res.code == 200) {
+              this.$message.success(res.msg)
+              this.findPage()
+            } else {
+              this.$message.error(res.msg)
+            }
+          })
+        }).catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消删除'
+          });          
+        });
+      
+    },
+    // 新增
+    // 确定新增
+    addSubmit() {
+      let ids = []
+      this.$refs.personneTable.selection.forEach(val => {
+        ids.push(val.userId)
+      })
+      let data = {
+        userIds: ids,
+        deptId: this.deptNBId
+      }
+      this.$api.dept.sysUserLinkDeptInternalAgentAddOrUpdate(data).then(res => {
+        if (res.code == 200) {
+          this.$message.success(res.msg)
+          this.findPage();
+          this.closeDialog()
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    refreshPageRequest: function (pageNum) {
+      this.addListDataPage.pageNum = pageNum;
+      this.handleAddButton()
+    },
+    handleSizeChange(pageSize) {
+      this.addListDataPage.pageSize = pageSize;
+      this.handleAddButton()
+    },
+    addListChange(selection) {
+        console.log(selection, 'selection')
+    },
+    tableRowClassName(row) {
+        if (row.row.flag) {
+            return 'flagRow';
+        } else {
+            return '';
+        }
+      },
+    getLeftData() {
+      this.$api.dept.sysDeptInternalAgentFindTree().then(res => {
+        this.treeData = res.data
+      })
+    },
+    onZTreeClick: function (evt, treeId, treeNode) {
+      this.currentTreeNode = evt;
+      this.deptNBId = evt.id
+      this.deptId = this.currentTreeNode.id;
+      this.pageData.pageNum = 1;
+      this.findPage();
+
+    },
+    findPage(data) {
+      // 获取分页数据
+      if (data && data.pageRequest) {
+        this.pageData.pageNum = data.pageRequest.pageNum;
+        this.pageData.pageSize = data.pageRequest.pageSize;
+      }
+      this.pageData.deptId = this.deptNBId
+      this.$api.dept.sysUserLinkDeptInternalAgentQueryPage(this.pageData).then(res => {
+        this.pageResult = {
+            content: res.data.content,
+            pageNum: res.data.pageNum,
+            pageSize: res.data.size,
+            totalPages: res.data.totalPages,
+            totalSize: res.data.totalSize,
+          };
+      })
+    },
+    //编辑人员
+    async handleTableEdit(params) {
+      this.deptNBId = params.row.deptId
+      this.handleAddButton()
+    },
+    //添加人员
+    handleAddButton() {
+      if (!this.deptNBId) {
+        this.$message.error('请选择内部机构')
+        return
+      }
+      this.$api.dept.sysUserLinkDeptInternalAgentFindAllUserList({
+        agentFlag: 0,
+        columnFilters: {
+          additionalProperties1: {
+            name: '',
+            value: ''
+          }
+        },
+        deptId: '',
+        deptNBId: this.deptNBId,
+        leaderName: '',
+        mobile: '',
+        name: '',
+        pageNum: this.addListDataPage.pageNum,
+        pageSize: this.addListDataPage.pageSize,
+        roleId: '',
+        status: '',
+        userId: ''
+      }).then((res) => {
+        this.addListData = res.data.content
+        this.addListDataPage.pageNum = res.data.pageNum
+        this.addListDataPage.pageSize = res.data.pageSize
+        this.addListDataPage.total = res.data.totalSize
+        this.dialogVisible = true;
+        this.$nextTick().then(() => {
+          res.data.content.forEach(val => {
+            if (val.flag) {
+              this.$refs.personneTable.toggleRowSelection(val)
+            }
+          })
+        })
+      })
+    },
+    closeDialog() {
+      this.dialogVisible = false;
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+
+>>> .el-table .flagRow {
+  background: rgba(212, 36, 38, 0.2) !important;
+}
+.el-divider--horizontal {
+  margin: 4px 0;
+}
+
+/* 顶部查询条件样式Start */
+.queryFrom .el-row {
+  margin: 10px 0px;
+}
+
+.queryFrom .el-form-item {
+  margin-bottom: 0px;
+}
+
+.queryFrom .queryButton .el-form-item__content {
+  margin-left: 0px !important;
+}
+
+.disc {
+  -webkit-text-security: disc;
+  position: relative;
+}
+
+.none {
+  -webkit-text-security: none;
+  position: relative;
+}
+
+.icon {
+  color: #ccc;
+  position: absolute;
+  right: 0;
+  top: 10px;
+  text-align: center
+}
+</style>

+ 5 - 3
src/views/PeopleManage/Staff/StaffManage.vue

@@ -156,7 +156,7 @@
               <el-col :span="8">
                 <el-form-item label="领导人" prop="leaderId">
                   <el-select style="width: 200px" clearable filterable  v-model="formData.leaderId" placeholder="请选择">
-                    <el-option v-for="val in leaderOptions" :label="val.name" :value="val.id" :key="val.id"></el-option>
+                    <el-option v-for="val in leaderOptions" :label="val.name" :value="val.userId" :key="val.userId"></el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -628,13 +628,15 @@ export default {
         agentFlag: 0,
         leaderName: this.pageData.leaderId,
         roleId: '22',
+        pageNum: this.pageData.pageNum,
+        pageSize: this.pageData.pageSize
       }
       // .findUserList({
       //     ...this.pageData,
       //     dto: { ...data, roleId: "20", deptId: this.deptId,agentFlag: "2", },
       //   })
       this.$api.user
-        .findBackUserList({ dto, pageNum: this.pageData.pageNum, pageSize: this.pageData.pageSize })
+        .findBackUserList(dto)
         .then((res) => {
           res.data.records.forEach(val => {
             if (val.sex && val.sex !== '' && val.sex !== null) {
@@ -682,7 +684,7 @@ export default {
       let res = await this.$api.user.getUserDatail(params.row.userId)
       if (res.code == 200) {
         this.$api.user
-          .findListByDeptId({ deptId: res.data.sysUser.deptId, id: params.row.userId })
+        .findBackUserList1({agentFlag: 0})
           .then((res) => {
             this.leaderOptions = res.data;
           });

+ 3 - 2
src/views/PeopleManage/TeamLeader/TeamLeaderManage.vue

@@ -247,7 +247,7 @@
               <el-col :span="8">
                 <el-form-item label="领导人" prop="leaderId">
                   <el-select style="width: 200px" clearable filterable  v-model="formData.leaderId" placeholder="请选择">
-                    <el-option v-for="val in leaderOptions" :label="val.name" :value="val.id" :key="val.id"></el-option>
+                    <el-option v-for="val in leaderOptions" :label="val.name" :value="val.userId" :key="val.userId"></el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -776,7 +776,8 @@ export default {
       let res = await this.$api.user.getUserDatail(params.row.userId);
       if (res.code == 200) {
         this.$api.user
-          .findListByDeptId({ deptId: res.data.sysUser.deptId, id: params.row.userId })
+          // .findListByDeptId({ deptId: res.data.sysUser.deptId, id: params.row.userId })
+        .findBackUserList1({agentFlag: 0})
           .then((res) => {
             this.leaderOptions = res.data;
           });

+ 8 - 6
src/views/Task/daikeComponents/KtLetter.vue

@@ -731,7 +731,7 @@
               <el-input v-model="policyNumberForm.sypolicyno" placeholder="请输入商业保单号" type="text"></el-input>
             </el-form-item>
           </el-col>
-          
+
           <el-col  :span="8" >
             <el-form-item label="商业险保费" prop="sypremium">
               <el-input v-model="policyNumberForm.sypremium" placeholder="请输入商业险保费" type="text"></el-input>
@@ -747,7 +747,7 @@
               <el-input v-model="policyNumberForm.jypolicyno" placeholder="请输入驾意保单号" type="text"></el-input>
             </el-form-item>
           </el-col>
-         
+
           <el-col  :span="8" >
             <el-form-item label="驾意险保费" prop="jypremium">
               <el-input v-model="policyNumberForm.jypremium" placeholder="请输入驾意险保费" type="text"></el-input>
@@ -776,7 +776,7 @@
                 type="text"></el-input>
             </el-form-item>
           </el-col> -->
-        
+
           <el-col  :span="8" >
             <el-form-item label="车船税" prop="taxamount">
               <el-input v-model="policyNumberForm.taxamount" placeholder="请输入车船税" type="text"></el-input>
@@ -830,7 +830,7 @@
             <el-col :span="1" >
               <!-- <el-checkbox v-if="isLetter !== '3'" style="margin:0 10px 0 10px"
                 @change="handleCheckAllChange"></el-checkbox>-->
-              <span style="font-size:14px; ">选择</span> 
+              <span style="font-size:14px; ">选择</span>
             </el-col>
             <el-col :span="2" style="margin: 0 42px 0 35px;">
               <span >保险公司</span>
@@ -2824,6 +2824,8 @@ export default {
         sypremium: '',
         jypremium: '',
         taxamount: '',
+        commissionFeevalue: '',
+        otherFeevalue: '',
         jqSuperviseCostsProportion: '',
         sySuperviseCostsProportion: '',
         noSuperviseCostsProportion: '',
@@ -4742,7 +4744,7 @@ export default {
       if (index) {
         this.TkDrivingChange(this.taikangaccidentDataList.find(val => val.projectCode == index));
       }
-      
+
       if (!index) {
         return;
       }
@@ -5649,7 +5651,7 @@ export default {
       this.accidentForm.fen = 1;
       this.accidentForm.premium = 0;
     },
-    
+
     clearAccidentFormTk() {
       this.taikangaccidentalDrivingVo = {};
       this.taikangInsuranceDataTable = []

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików