Quellcode durchsuchen

批量复制指定条件组到指定的规则

祁鹏飞 vor 1 Woche
Ursprung
Commit
24fd66c9bf

+ 2 - 0
src/api/modules/agreement.ts

@@ -54,6 +54,8 @@ const agreementApi = (axiosInstance: ApiInstance) => ({
   agreementRulesDelete: (id: any) => axiosInstance.delete(`agreementRules/rulesDelete?id=${id}`,),
   //复制承保规则
   rulesCopy: (agreementId: any,ruleId:any) => axiosInstance.get(`agreementRules/rulesCopy?agreementId=${agreementId}&ruleId=${ruleId}`,),
+  //复制承保规则
+  rulesAttrBatchCopy: (data) => axiosInstance.post(`agreementRules/rulesAttrBatchCopy`,data),
 
   /**
    *  费用管理接口

+ 71 - 25
src/views/quoteConfig/agreement/agreementDetails.vue

@@ -109,7 +109,7 @@
               </el-icon>
             </template>
           </el-button>
-          <el-button link type="primary" :icon="CopyDocument" @click="ruleCopy()">复制规则</el-button>
+          <el-button link type="primary" :icon="CopyDocument" @click="ruleCopy(false)">复制规则</el-button>
           <div class="flex f-c  RuleContainer" v-if="RulesList">
             <div class="list-item" v-for="(item, index) in RulesList" :key="index">
               <div class="header-title flex f-c ">
@@ -228,7 +228,15 @@
         </div>
         <div class="bg-[#FAFAFA] p-20px m-t-20px" v-for="rules in rulesAttrListInfo.rulesGroups" :key="rules.timeId">
           <!-- 规则选择容器 -->
-          <div class="flex items-center justify-end">
+          <div class="flex items-center justify-between">
+            <el-button type="primary" link @click="ruleCopy(true, rules)">
+              批量复制到规则
+              <template #icon>
+                <el-icon>
+                  <Copy />
+                </el-icon>
+              </template>
+            </el-button>
             <el-button type="primary" link @click="addRules('and', rules)">
               并且条件
               <template #icon>
@@ -286,22 +294,27 @@
     </el-dialog>
     <el-dialog :close-on-click-modal="false" v-model="copyDialog1" title="复制" width="600">
       <el-form inline>
-        <el-form-item label="协议">
-          <el-select style="width:200px" v-model="agreementId" placeholder="请选择协议" @change="changeAgreement1"
-            filterable>
-            <el-option v-for="item in agreementList" :key="item.id" :value="item.id"
-              :label="item.agreementAbbreviation"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="规则">
-          <el-select style="width:200px" :disabled="!agreementId" v-model="ruleId" placeholder="请选择规则">
-            <el-option v-for="(item, index) in rulesList" :key="item.id" :value="item.id"
-              :label="item.inputDescription"></el-option>
-          </el-select>
-        </el-form-item>
+        <div class="" v-for="item in selectList" :key="item.time">
+          <el-form-item label="协议">
+            <el-select style="width:200px" v-model="item.agreementId" placeholder="请选择协议"
+              @change="changeAgreement1(item)" filterable>
+              <el-option v-for="agreement in agreementList" :key="agreement.id" :value="agreement.id"
+                :label="agreement.agreementAbbreviation"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="规则">
+            <el-select style="width:200px" :disabled="!item.agreementId" v-model="item.ruleId" placeholder="请选择规则">
+              <el-option v-for="(rule, index) in item.rulesList" :key="rule.id" :value="rule.id"
+                :label="rule.inputDescription"></el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+        <el-button v-if="copyMultiple" type="primary" link
+          @click="selectList.push({ time: Date.now() })">新增一行</el-button>
       </el-form>
       <template #footer>
-        <autoLoadingButton type="primary" :on-click="submitCopy">确定</autoLoadingButton>
+        <autoLoadingButton v-if="copyMultiple" type="primary" :on-click="rulesAttrBatchCopy">确定</autoLoadingButton>
+        <autoLoadingButton v-if="!copyMultiple" type="primary" :on-click="submitCopy">确定</autoLoadingButton>
       </template>
     </el-dialog>
     <el-dialog :close-on-click-modal="false" v-model="copyDialog2" title="批量设置有效期" width="500">
@@ -806,12 +819,21 @@ const ruleDel = (id: string) => {
       });
     })
 }
-const ruleId = ref('')
 const copyDialog1 = ref(false)
+const copyMultiple = ref(false)
+const selectList = ref([{}])
+const rulesSel = ref([])
 
-const ruleCopy = () => {
+const ruleCopy = (multiple: boolean, rules: any) => {
+  copyMultiple.value = multiple
+  rulesSel.value = rules
+  selectList.value = [{ time: Date.now() }]
   agreementId.value = ''
-  api.agreementApi.agreementList({ size: 10000, companyId: agreementInfo.value.companyId }).then((res: any) => {
+  const params = {
+    size: 10000,
+    companyId: multiple ? '' : agreementInfo.value.companyId
+  }
+  api.agreementApi.agreementList(params).then((res: any) => {
     if (res.code == '200') {
       agreementList.value = res.data.records;
     }
@@ -820,15 +842,39 @@ const ruleCopy = () => {
 }
 //复制规则
 const submitCopy = async () => {
-  if (!agreementId.value) {
+  if (!selectList.value[0]?.agreementId) {
     ElMessage.error('请选择协议')
     return
   }
-  if (!ruleId.value) {
+  if (!selectList.value[0]?.ruleId) {
     ElMessage.error('请选择承保规则')
     return
   }
-  const res = await api.agreementApi.rulesCopy(agreementInfo.value.id, ruleId.value)
+  const res = await api.agreementApi.rulesCopy(agreementInfo.value.id, selectList.value[0]?.ruleId)
+  if (res.code == '200') {
+    agreementRulesList();
+    copyDialog1.value = false
+    ElMessage({
+      type: 'success',
+      message: '操作成功',
+      plain: true,
+    })
+  }
+}
+//复制规则
+const rulesAttrBatchCopy = async () => {
+  for (let i = 0; i < selectList.value.length; i++) {
+    const element = selectList.value[i];
+    if (!element?.agreementId) {
+      ElMessage.error('请选择协议')
+      return
+    }
+  }
+  const params = {
+    attrIds: rulesSel.value.rulesAttrList.map(v => v.id),
+    targets: selectList.value
+  }
+  const res = await api.agreementApi.rulesAttrBatchCopy(params)
   if (res.code == '200') {
     agreementRulesList();
     copyDialog1.value = false
@@ -1203,10 +1249,10 @@ const changeAgreement = () => {
     }
   });
 }
-const changeAgreement1 = () => {
-  api.agreementApi.agreementRulesList(agreementId.value).then((res: any) => {
+const changeAgreement1 = (item) => {
+  api.agreementApi.agreementRulesList(item.agreementId).then((res: any) => {
     if (res.code == '200') {
-      rulesList.value = res.data
+      item.rulesList = res.data
     }
   });
 }

+ 9 - 8
src/views/quoteConfig/agreement/components/ruleFeeDialog.vue

@@ -99,14 +99,15 @@
                         <span class="strong m-right-20">规则条件</span>
                       </ElCol>
                       <ElCol :md="24" :lg="21">
-                        <el-button type="default" @click="addRuleCondition(index, Costindex)">
-                          添加条件
-                          <template #icon>
-                            <el-icon>
-                              <Plus />
-                            </el-icon>
-                          </template>
-                        </el-button>
+
+                          <el-button type="default" @click="addRuleCondition(index, Costindex)">
+                            添加条件
+                            <template #icon>
+                              <el-icon>
+                                <Plus />
+                              </el-icon>
+                            </template>
+                          </el-button>
                         <rule-Condition-Container :rulesAttrList="Costitem.ruleConditions" @Del="rulesAttrDel"
                           @selectChange="rulesAttrselectChange" />
                       </ElCol>

+ 12 - 11
src/views/quoteConfig/agreement/components/ruleFeeDialogEdit.vue

@@ -86,14 +86,15 @@
               <span class="strong m-right-20">规则条件</span>
             </ElCol>
             <ElCol :md="24" :lg="21">
-              <el-button type="primary" :disabled="disabledShow" plain @click="addRules">
-                添加条件
-                <template #icon>
-                  <el-icon>
-                    <Plus />
-                  </el-icon>
-                </template>
-              </el-button>
+
+                <el-button type="primary" :disabled="disabledShow" plain @click="addRules">
+                  添加条件
+                  <template #icon>
+                    <el-icon>
+                      <Plus />
+                    </el-icon>
+                  </template>
+                </el-button>
               <rule-Condition-Container :rulesAttrList="costitemEditInfo.ruleConditions" @Del="rulesAttrDel"
                 @selectChange="rulesAttrselectChange" :disabled="disabledShow" />
             </ElCol>
@@ -437,7 +438,7 @@ const ptlAgreementCostTypeList = [
 const changeProductId = () => {
   const name = ruleFeeinfo.value.find(v => v.value === costitemEditInfo.value.productId).label
   costitemEditInfo.value.productName = name
-  const list= ptlAgreementCostTypeList.filter(item => {
+  const list = ptlAgreementCostTypeList.filter(item => {
     if (name === "单交" && item.costType === "商业险") {
       return false; // 当 name 为 "单交" 且 costType 为 "商业险" 时,返回 false,不包含该项
     }
@@ -449,8 +450,8 @@ const changeProductId = () => {
     }
     return true; // 其他情况返回 true,保留该项
   });
-  costitemEditInfo.value.ptlAgreementCostTypeList=list.map(v=>{
-    const obj=costitemEditInfo.value.ptlAgreementCostTypeList.find(k=>k.costType===v.costType) ?? {}
+  costitemEditInfo.value.ptlAgreementCostTypeList = list.map(v => {
+    const obj = costitemEditInfo.value.ptlAgreementCostTypeList.find(k => k.costType === v.costType) ?? {}
     return {
       ...v,
       ...obj