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

外部协议费用支持复制

祁鹏飞 4 недель назад
Родитель
Сommit
abb84cd48a

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

@@ -86,6 +86,8 @@ const agreementApi = (axiosInstance: ApiInstance) => ({
   contactAdd: (data: any) => axiosInstance.post('/agreement/contactAdd', data),
   //外部协议修改
   contactEdit: (data: any) => axiosInstance.post('/agreement/contactEdit', data),
+  //协议规则费用复制
+  copyCostExternal: (data: any) => axiosInstance.post('/ptlAgreementCostExternal/copyCostExternal', data),
   //费用列表崔查询
   costExternalList: (data: any) => axiosInstance.post('/ptlAgreementCostExternal/costExternalList', data),
   //补录协议费用新增

+ 229 - 6
src/views/externalAgreement/agreement/agreementDetails.vue

@@ -28,7 +28,7 @@
             <el-tag type="primary" style="margin-right: 20px;">{{
               getDict('is_enable').find(val => val.value == agreementInfo.isEnable)?.label}}</el-tag>
             <el-tag type="success">{{getDict('valid_status').find(val => val.value == agreementInfo.validStatus)?.label
-            }}</el-tag>
+              }}</el-tag>
           </div>
         </div>
         <el-descriptions :column="3" style="margin-top: 10px;">
@@ -50,9 +50,9 @@
         <el-tab-pane label="协议信息" name="agreementInfo">
           <el-descriptions title="基本信息" class="m-top-20" :column="3">
             <el-descriptions-item label="协议名称:">{{ agreementInfo.agreementTitle
-              }}</el-descriptions-item>
+            }}</el-descriptions-item>
             <el-descriptions-item label="协议简称:">{{ agreementInfo.agreementAbbreviation
-              }}</el-descriptions-item>
+            }}</el-descriptions-item>
             <el-descriptions-item label="协议生效时间:">{{ agreementInfo.startDate }}</el-descriptions-item>
             <el-descriptions-item label="协议失效时间:">{{ agreementInfo.endDate }}</el-descriptions-item>
             <el-descriptions-item label="是否含增值税结算:">
@@ -65,7 +65,7 @@
             <el-descriptions-item label="协议归属:">{{ agreementInfo.deptName }} </el-descriptions-item>
             <el-descriptions-item label="保险公司:"> {{ agreementInfo.companyId }}</el-descriptions-item>
             <el-descriptions-item label="协议类型:">{{getDict('agreement_type').find(a => a.value ==
-              agreementInfo.agreementType)?.label }} </el-descriptions-item>
+              agreementInfo.agreementType)?.label}} </el-descriptions-item>
             <el-descriptions-item label="管理人:"> {{ agreementInfo.custodianId }}</el-descriptions-item>
           </el-descriptions>
         </el-tab-pane>
@@ -86,10 +86,12 @@
                   <div class="flex a-c">
                     <img src="../../../assets/images/fee.png" alt="">
                     <span class="strong m-left-10">{{ item.contactPerson
-                      }}</span>
+                    }}</span>
                     <span class="strong m-left-10">{{ item.contactMobile }}</span>
                   </div>
                   <div class="flex">
+                    <el-button link type="primary" :icon="CopyDocument" @click="handleCopy(item, {})">复制费用</el-button>
+
                     <!-- <el-button link type="primary" :icon="Delete"
                       @click="contactPersonDel(item.contactMobile)">删除</el-button>
                     <el-button link type="primary" :icon="Edit" @click="contactPersonEdit(item)">编辑</el-button> -->
@@ -121,6 +123,19 @@
         </el-tab-pane>
       </el-tabs>
     </PageMain>
+    <el-dialog :close-on-click-modal="false" v-model="copyDialog" title="批量复制" fullscreen>
+      <div class="h-[calc(100vh-159px)]">
+        <SearchForm :fields="fields" isOffset :formInline="formInline" :onSearch="findpage" :onReset="resetForm" />
+        <ComplexTable :tableData="tableData" tableheight="calc(100vh - 340px)" :showOperation="false"
+          :columns="columns1" :columnwidth="200" :showSelect="true" :pageInfo="pageInfo" @getList="getList"
+          @selectionChange="selectionChange" >
+
+        </ComplexTable>
+      </div>
+      <template #footer>
+        <el-button type="primary" @click="costitemCopy">确定</el-button>
+      </template>
+    </el-dialog>
     <!-- 协议授权弹窗 -->
     <auth-Drawer ref="authDrawerRef" @save="DrawerSave" @query="Drawerquery" :deptlist="deptauthList"
       :checkedKeys="checkedKeys" :checkedIds="checkedIds"></auth-Drawer>
@@ -145,7 +160,7 @@ import { loadDicts, getDict } from '@/utils/composables/dictService';//字典组
 import authDrawer from "./components/agreementAuth.vue";
 import contactPersonFeeDialog from "./components/contactPersonFeeDialog.vue";
 import contactPersonFeeDialogEdit from "./components/contactPersonFeeDialogEdit.vue";
-import { Delete, Edit } from '@element-plus/icons-vue'
+import { CopyDocument } from '@element-plus/icons-vue'
 interface Agreement {
   [key: string]: string | number; // 协议名称
 }
@@ -610,6 +625,214 @@ const itemDel = (id: string) => {
       });
     })
 }
+
+
+const copyDialog = ref(false)
+const contactObj = ref({})
+/** 复制操作处理:记录当前行的ID并打开复制确认对话框 */
+const handleCopy = (item, costitem) => {
+  console.log("🚀 ~ handleCopy ~ item:", item)
+  formInline.ptlAgreementId = agreementInfo.value.id
+  contactObj.value = item
+  resetForm();
+  copyDialog.value = true
+}
+//表格字段数据
+const fields = ref([
+  { label: "所属协议", model: "agreement", type: "input", placeholder: "输入代码,名称,简称查找" },
+  {
+    label: "险种", model: "productId", type: "select", options: getDict('insurance_type'),
+  },
+  {
+    label: "费用描述", model: "costDescribe", type: "input", placeholder: "输入费用规则关键字查找",
+  },
+  {
+    label: "费用状态", model: "agreementStatus", type: "select", placeholder: "选择状态", options: getDict('is_enable'),
+  },
+  {
+    label: "审核状态", model: "auditStatus", type: "select", placeholder: "选择状态", options: getDict('audit_status'),
+  },
+  {
+    label: "有效状态", model: "validState", type: "select", placeholder: "请选择状态", options: getDict('valid_status'),
+  },
+  {
+    label: "生效时间", model: "effectiveTime", type: "date", dateType: "datetimerange", startplaceholder: "开始时间", endplaceholder: "结束时间",
+    format: "YYYY-MM-DD HH:mm:ss", valueFormat: "YYYY-MM-DD HH:mm:ss", timeFormat: "HH:mm:ss",
+    onChange: (value: any) => {
+      console.log(value)
+      formInline.effectiveTime = value;
+    }
+  },
+  {
+    label: "失效时间", model: "failureTime", type: "date", dateType: "datetimerange", startplaceholder: "开始时间", endplaceholder: "结束时间",
+    format: "YYYY-MM-DD HH:mm:ss", valueFormat: "YYYY-MM-DD HH:mm:ss", timeFormat: "HH:mm:ss",
+    onChange: (value: any) => {
+      formInline.failureTime = value;
+    }
+  },
+]);
+const columns1 = [
+  {
+    prop: "agreementAbbreviation", label: "协议信息", width: '300',
+    formatter: (row: any) => {
+      return `${row.agreementCode}\n${row.agreementAbbreviation}`
+    }
+  },
+  { prop: "productName", label: "险种", width: '120', },
+  {
+    prop: "contactPerson", label: "对接人", width: '200', formatter: (row: any) => {
+      return `${row.contactPerson} ${row.contactMobile}`
+    }
+  },
+  {
+    prop: "isInquiry", label: "是否现询", width: '120', formatter: (row: any) => {
+      if (row.isInquiry == '0') {
+        return '是'
+      } else {
+        return "否"
+      }
+    }
+  },
+  {
+    prop: "auditMethod", label: "审核方式", width: '120', formatter: (row: any) => {
+      if (row.auditMethod == '0') {
+        return '自动审核'
+      } else {
+        return "手动审核"
+      }
+    }
+  },
+  {
+    prop: "isEnabled", label: "费用状态", width: '100', component: "Tag",
+    formatter: (row: any) => {
+      let name = getDict('is_enable').find(val => val.value == row.isEnabled).label
+      if (name) {
+        return { type: 'primary', text: name };
+      }
+    }
+  },
+  {
+    prop: "auditStatus", label: "审核状态", width: '120', component: "Tag",
+    formatter: (row: any) => {
+      let name = getDict('audit_status').find(val => val.value == row.auditStatus).label
+      if (name) {
+        return { type: 'warning', text: name };
+      }
+    }
+  },
+  { prop: "effectiveTime", label: "生效时间", width: '200' },
+  { prop: "failureTime", label: "失效时间", width: '200' },
+  {
+    prop: "costDescribe", label: "费用描述", width: '500',
+  },
+  {
+    prop: "costExternalTypeAdds", label: "交强险费用", width: '300', formatter: (row: any) => {
+      let info = row.costExternalTypeAdds.find((val: any) => val.costType == '交强险');
+      if (info) {
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}%`
+      } else {
+        return '-'
+      }
+    }
+  },
+  {
+    prop: "costExternalTypeAdds", label: "商业险费用", width: '300', formatter: (row: any) => {
+      let info = row.costExternalTypeAdds.find((val: any) => val.costType == '商业险');
+      if (info) {
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}%`
+      } else {
+        return '-'
+      }
+    }
+  },
+  {
+    prop: "costExternalTypeAdds", label: "驾意险费用", width: '300', formatter: (row: any) => {
+      let info = row.costExternalTypeAdds.find((val: any) => val.costType == '驾意险');
+      if (info) {
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}%`
+      } else {
+        return '-'
+      }
+    }
+  },
+];
+
+const costIds = ref<string[]>([])//选中id
+//多选事件
+const selectionChange = (val: any) => {
+  console.log("🚀 ~ selectionChange ~ val:", val)
+  costIds.value = val;
+}
+const pageInfo = ref({
+  pageNum: 1,
+  pageSize: 20,
+  sizes: [10, 20, 30, 40, 50],
+  total: 100,
+});
+const tableData = ref([]);
+const formInline = reactive({
+  agreement: '',//协议信息
+  ptlAgreementId: '',//协议信息
+  productId: "",//归属
+  rulesName: '',//保险公司id
+  costRules: '',//协议类型
+  agreementStatus: "",//有效状态
+  auditStatus: "",//协议状态
+  validState: "",
+  effectiveTime: [],
+  failureTime: [],
+})
+const resetForm = () => {
+  formInline.agreement = '';//协议信息
+  formInline.productId = "";//归属
+  formInline.rulesName = '';//保险公司id
+  formInline.costRules = '';//协议类型
+  formInline.agreementStatus = "";//有效状态
+  formInline.auditStatus = "";//协议状态
+  formInline.validState = "";
+  formInline.effectiveTime = [];
+  formInline.failureTime = [];
+  findpage();
+}
+function findpage() {
+  api.agreementApi.CostExternalFeePageList({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...formInline }).then((res: any) => {
+    if (res.code == '200') {
+      tableData.value = res.data.records;
+      pageInfo.value.pageNum = res.data.current;
+      pageInfo.value.pageSize = res.data.size;
+      pageInfo.value.total = res.data.total;
+    }
+  });
+}
+
+//复制费用
+const costitemCopy = () => {
+  ElMessageBox.confirm(
+    '确定要复制该费用,请确认是否复制?',
+    '复制费用',
+    {
+      confirmButtonText: '确定复制',
+      type: 'warning',
+      center: true,
+      confirmButtonClass: 'el-button--primary',
+    }
+  ).then(() => {
+    const params = {
+      costIds: costIds.value,
+      agreementId: agreementInfo.value.id,
+      contactMobile: contactObj.value.contactMobile,
+      contactPerson: contactObj.value.contactPerson,
+    }
+    api.agreementApi.copyCostExternal(params).then((res: any) => {
+      if (res.code == '200') {
+        costExternalList();
+        if (res.msg) ElMessage.warning(res.msg)
+        if (!res.msg) ElMessage.success('复制成功')
+        copyDialog.value = false
+      }
+    });
+  })
+}
 </script>
 <!-- 样式区域 -->
 <style lang='scss' scoped>

+ 7 - 6
src/views/externalAgreement/agreement/components/contactPersonFeeDialog.vue

@@ -112,16 +112,16 @@
             <el-table-column prop="costType" label="类型"></el-table-column>
             <el-table-column prop="inlet" label="入口比例" width="180" align="center">
               <template #default="scope">
-                <el-input-number v-model="scope.row.inlet" :precision="2" controls-position="right" style="width: 100%;"
-                  :min="0" :max="100" @change="handelRK(scope)">
+                <el-input-number v-model="scope.row.inlet" :disabled="item.isInquiry === '0'" :precision="2"
+                  controls-position="right" style="width: 100%;" :min="0" :max="100" @change="handelRK(scope)">
                   <template #suffix>%</template>
                 </el-input-number>
               </template>
             </el-table-column>
             <el-table-column prop="export" label="出口比例" width="180" align="center">
               <template #default="scope">
-                <el-input-number v-model="scope.row.export" :precision="2" controls-position="right"
-                  style="width: 100%;" :min="0" :max="100" @change="handelCK(scope)">
+                <el-input-number v-model="scope.row.export" :disabled="item.isInquiry === '0'" :precision="2"
+                  controls-position="right" style="width: 100%;" :min="0" :max="100" @change="handelCK(scope)">
                   <template #suffix>%</template>
                 </el-input-number>
               </template>
@@ -251,7 +251,7 @@ onMounted(async () => {
   await loadDicts(['insurance_type'])
   const dict = getDict('insurance_type');
   ruleFeeinfo.productType = dict[0].value
-  ruleFeeinfo.insuranceTypeList=dict
+  ruleFeeinfo.insuranceTypeList = dict
   agreementList();
   ruleFeeinfo.ptlAgreementCostExternalAddList = dict.map((val: any) => {
     const filteredList: any = filterCostTypeList(val.label);//根据险种匹配列表
@@ -298,7 +298,8 @@ const contactPersonChange = (value: string) => {
   let info = contactPersonList.value.find((val: any) => val.contactMobile == value);
   ruleFeeinfo.ptlAgreementCostExternalAddList = info.costExternalListVo;
   activeName.value = ruleFeeinfo.ptlAgreementCostExternalAddList[0].productName;
-
+  ruleFeeinfo.contactMobile = info.contactMobile
+  ruleFeeinfo.contactPerson = info.contactPerson
 }
 //下拉框出现事件
 const contactvisiblechange = (visible: boolean) => {