Browse Source

Merge remote-tracking branch 'origin/dev' into dev

jiakai 3 months ago
parent
commit
6032bca296

+ 2 - 2
src/api/modules/settlement.ts

@@ -2,10 +2,10 @@ import { ApiInstance } from '../type'
 
 const settlementApi = (axiosInstance: ApiInstance) => ({
     companySuperviseSettlementReport: (data: any) => axiosInstance.post('/receivable/companySuperviseSettlementReport', data), // 保险公司报表
-    superviseSettlementExcel: (data: any) => axiosInstance.post('/receivable/superviseSettlementExcel',data), // 结算记录
+    superviseSettlementExcel: (data: any) => axiosInstance.post('/receivable/platformSettlementExcel',data), // 结算记录
     superviseSettlementDetailExcel: (data: any) => axiosInstance.post('/receivable/superviseSettlementDetailExcel',data), // 结算明细
 
-    exportSuperviseSettlementExcel: (data: any) => axiosInstance.post('/receivable/exportSuperviseSettlementExcel', data, {responseType: 'blob'}), // 手续费结算报表导出
+    exportPlatformSettlementExcel: (data: any) => axiosInstance.post('/receivable/exportPlatformSettlementExcel', data, {responseType: 'blob'}), // 手续费结算报表导出
     exportSuperviseSettlementDetailExcel: (data: any) => axiosInstance.post('/receivable/exportSuperviseSettlementDetailExcel', data, {responseType: 'blob'}), // 手续费车险结算报表导出
     exportSuperviseSettlementDetailJyExcel: (data: any) => axiosInstance.post('/receivable/exportSuperviseSettlementDetailJyExcel', data, {responseType: 'blob'}), // 手续费非车险结算报表导出
 

+ 6 - 6
src/views/finance/index.vue

@@ -94,7 +94,7 @@
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="16" style="display: flex;align-items: flex-start; justify-content: flex-end">
+            <el-col :span="isTrue?24:16" style="display: flex;align-items: flex-start; justify-content: flex-end">
               <el-button plain @click="handleExport('0')">数据导出</el-button>
               <el-button type="primary" @click="handleSearch">搜索</el-button>
               <el-button plain @click="handleReset">重置</el-button>
@@ -107,7 +107,7 @@
             </el-col>
           </el-row>
         </el-form>
-        <el-table :data="firstData" :height="isTrue ? 'calc(100% - 312px)' : 'calc(100% - 212px)'"
+        <el-table :data="firstData" :height="isTrue ? 'calc(100% - 294px)' : 'calc(100% - 212px)'"
           style="width: 100%; margin-top: 20px;">
           <el-table-column prop="orderNo" label="订单号" width="120"></el-table-column>
           <el-table-column prop="companyALlName" label="保险公司" width="120"></el-table-column>
@@ -239,7 +239,7 @@
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="16" style="display: flex;align-items: flex-start; justify-content: flex-end">
+            <el-col :span="isTrue?24:16" style="display: flex;align-items: flex-start; justify-content: flex-end">
               <el-button plain @click="handleExport('1')">数据导出</el-button>
               <el-button type="primary" @click="handleSearch">搜索</el-button>
               <el-button plain @click="handleReset">重置</el-button>
@@ -252,7 +252,7 @@
             </el-col>
           </el-row>
         </el-form>
-        <el-table :data="secondData" :height="isTrue ? 'calc(100% - 312px)' : 'calc(100% - 212px)'"
+        <el-table :data="secondData" :height="isTrue ? 'calc(100% - 294px)' : 'calc(100% - 212px)'"
           style="width: 100%; margin-top: 20px;">
           <el-table-column prop="orderNo" label="订单号" width="120"></el-table-column>
           <el-table-column prop="companyALlName" label="保险公司" width="120"></el-table-column>
@@ -385,7 +385,7 @@
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="16" style="display: flex;align-items: flex-start; justify-content: flex-end">
+            <el-col :span="isTrue?24:16" style="display: flex;align-items: flex-start; justify-content: flex-end">
               <el-button plain @click="handleExport('2')">数据导出</el-button>
               <el-button type="primary" @click="handleSearch">搜索</el-button>
               <el-button plain @click="handleReset">重置</el-button>
@@ -398,7 +398,7 @@
             </el-col>
           </el-row>
         </el-form>
-        <el-table :data="thirdData" :height="isTrue ? 'calc(100% - 312px)' : 'calc(100% - 212px)'"
+        <el-table :data="thirdData" :height="isTrue ? 'calc(100% - 294px)' : 'calc(100% - 212px)'"
           style="width: 100%; margin-top: 20px;">
           <el-table-column prop="orderNo" label="订单号" width="120"></el-table-column>
           <el-table-column prop="companyALlName" label="保险公司" width="120"></el-table-column>

+ 32 - 31
src/views/insurancePolicy/index.vue

@@ -3588,44 +3588,45 @@ const quoteInsurance = async (companyId: any, companyIndex: any) => {
     if (res.code == 200 && res.data) {
       // 计算总保费
         // 替换保险公司返回的正确日期
-        if (res.data.ciStartDate) {
-          res.data.ciRiskInfoVo.startDate = res.data.ciStartDate
-          res.data.ciRiskInfoVo.endDate = res.data.ciEndDate
-          insurancePolicyForm.value.JQStartDate = res.data.ciStartDate
-          insurancePolicyForm.value.JQEndDate = res.data.ciEndDate
-        }
-        if (res.data.biStartDate) {
-          res.data.biRiskInfoVo.startDate = res.data.biStartDate
-          res.data.biRiskInfoVo.endDate = res.data.biEndDate
-          insurancePolicyForm.value.SYStartDate = res.data.biStartDate
-          insurancePolicyForm.value.SYEndDate = res.data.biEndDate
-        }
+        if (res.data.ciStartDate && res.data.ciRiskInfoVo) {
+        res.data.ciRiskInfoVo.startDate = res.data.ciStartDate
+        res.data.ciRiskInfoVo.endDate = res.data.ciEndDate
+        insurancePolicyForm.value.JQStartDate = res.data.ciStartDate
+        insurancePolicyForm.value.JQEndDate = res.data.ciEndDate
+      }
+      if (res.data.biStartDate && res.data.biRiskInfoVo) {
+        res.data.biRiskInfoVo.startDate = res.data.biStartDate
+        res.data.biRiskInfoVo.endDate = res.data.biEndDate
+        insurancePolicyForm.value.SYStartDate = res.data.biStartDate
+        insurancePolicyForm.value.SYEndDate = res.data.biEndDate
+      }
       // 设置折扣信息
+      const feeOrders = res.data?.feeOrders || {};
       quoteData.value[companyIndex].discounts = [
         {
           name: '交强',  // 交强险费用明细
-          additionalPremium: res.data?.feeOrders?.jqAdditionalPremium,
-          additionalRatio: res.data?.feeOrders?.jqAdditionalRatio,
-          commissionPremium: res.data?.feeOrders?.jqCommissionPremium,
-          commissionRatio: res.data?.feeOrders?.jqCommissionRatio,
-          exportPremium: res.data?.feeOrders?.jqExportPremium,
-          exportRatio: res.data?.feeOrders?.jqExportRatio,
+          additionalPremium: feeOrders.jqAdditionalPremium ?? 0,
+          additionalRatio: feeOrders.jqAdditionalRatio ?? 0,
+          commissionPremium: feeOrders.jqCommissionPremium ?? 0,
+          commissionRatio: feeOrders.jqCommissionRatio ?? 0,
+          exportPremium: feeOrders.jqExportPremium ?? 0,
+          exportRatio: feeOrders.jqExportRatio ?? 0,
         }, {
           name: '商业',  // 商业险费用明细
-          additionalPremium: res.data?.feeOrders?.syAdditionalPremium,
-          additionalRatio: res.data?.feeOrders?.syAdditionalRatio,
-          commissionPremium: res.data?.feeOrders?.syCommissionPremium,
-          commissionRatio: res.data?.feeOrders?.syCommissionRatio,
-          exportPremium: res.data?.feeOrders?.syExportPremium,
-          exportRatio: res.data?.feeOrders?.syExportRatio,
+          additionalPremium: feeOrders.syAdditionalPremium ?? 0,
+          additionalRatio: feeOrders.syAdditionalRatio ?? 0,
+          commissionPremium: feeOrders.syCommissionPremium ?? 0,
+          commissionRatio: feeOrders.syCommissionRatio ?? 0,
+          exportPremium: feeOrders.syExportPremium ?? 0,
+          exportRatio: feeOrders.syExportRatio ?? 0,
         }, {
           name: '驾意险',  // 驾意险费用明细
-          additionalPremium: res.data?.feeOrders?.jyAdditionalPremium,
-          additionalRatio: res.data?.feeOrders?.jyAdditionalRatio,
-          commissionPremium: res.data?.feeOrders?.jyCommissionPremium,
-          commissionRatio: res.data?.feeOrders?.jyCommissionRatio,
-          exportPremium: res.data?.feeOrders?.jyExportPremium,
-          exportRatio: res.data?.feeOrders?.jyExportRatio,
+          additionalPremium: feeOrders.jyAdditionalPremium ?? 0,
+          additionalRatio: feeOrders.jyAdditionalRatio ?? 0,
+          commissionPremium: feeOrders.jyCommissionPremium ?? 0,
+          commissionRatio: feeOrders.jyCommissionRatio ?? 0,
+          exportPremium: feeOrders.jyExportPremium ?? 0,
+          exportRatio: feeOrders.jyExportRatio ?? 0,
         },
       ]
       // 保存报价结果
@@ -4233,4 +4234,4 @@ onMounted(() => {
     }
   }
 }
-</style>
+</style>

+ 7 - 0
src/views/platform/index.vue

@@ -1016,6 +1016,13 @@ const batchSettle = () => {
     })
     return
   }
+  if(selectedList.value.some((item:any) => item.settlementStatusName == '已结算')) {
+    ElMessage({
+      message: '存在已结算数据,不能结算!',
+      type: 'warning'
+    })
+    return
+  }
   api.financeApi.getReceivableCompany({
     incomeIds: [...selectedList.value]
   }).then((res: any) => {

+ 25 - 9
src/views/platform/platformRecord.vue

@@ -57,22 +57,22 @@
         <el-col :span="8" style="display: flex; justify-content: flex-end">
           <el-button type="primary" @click="search()">查询</el-button>
           <el-button plain type="primary" @click="reset()">重置</el-button>
-          <el-button type="primary" @click="exportSuperviseSettlementExcel()">导出结算记录</el-button>
+          <el-button type="primary" @click="exportPlatformSettlementExcel()">导出结算记录</el-button>
         </el-col>
       </el-row>
     </el-form>
     <el-table class="tableRecord" style="height: calc(100% - 192px)" :data="tableData">
       <el-table-column prop="settlementId" label="结算记录编号" width="200"></el-table-column>
-      <el-table-column prop="orderNo" label="订单号" width="200"></el-table-column>
-      <el-table-column prop="companyName" label="保险公司" ></el-table-column>
-
+      <el-table-column prop="companyName" label="保险公司" width="200"></el-table-column>
       <el-table-column prop="invoiceType" label="应收项" width="200"></el-table-column>
       <el-table-column prop="taxPoint" label="税点" width="100"></el-table-column>
       <el-table-column prop="actualReceivedAmount" label="实收金额" width="150"></el-table-column>
       <el-table-column prop="receivePaymentDate" label="收款日期" width="200"></el-table-column>
       <el-table-column label="收款凭证" width="100">
         <template #default="scope">
-          <el-button link type="primary" @click="view">查看凭证(1)</el-button>
+          <el-button link type="primary" v-if="scope.row.fileUrl" @click="view(scope.row)">查看凭证({{
+            scope.row.fileUrl.split(',').length }})</el-button>
+          <span v-else>无凭证</span>
         </template>
       </el-table-column>
       <el-table-column prop="createBy" label="结算人" width="200"></el-table-column>
@@ -88,7 +88,13 @@
         layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange($event)"
         @current-change="handleCurrentChange($event)"></el-pagination>
     </div>
+
   </PageMain>
+  <el-dialog v-model="viewCredential" title="查看凭证" width="400">
+    <div class="text-center text-[14px] text-[#999] pb-[20px]">点击图片放大预览</div>
+    <el-image style="width: 100%; height: 300px" :src="CredentialList[0]" :zoom-rate="1.2" :max-scale="7"
+      :min-scale="0.2" :preview-src-list="CredentialList" show-progress :initial-index="4" alt="凭证图片" fit="cover" />
+  </el-dialog>
 </template>
 
 <script setup lang="ts">
@@ -99,7 +105,8 @@ const router = useRouter();
 
 let form = ref({});
 let tableData = ref([]);
-
+const viewCredential = ref(false)//查看凭证弹窗
+const CredentialList = ref([])//凭证图片
 let pages = ref(1);
 let size = ref(10);
 let total = ref(0);
@@ -131,8 +138,12 @@ const reset = () => {
   initList();
 };
 
-const exportSuperviseSettlementExcel = () => {
-  api.settlementApi.exportSuperviseSettlementExcel({}).then((res: any) => {
+const exportPlatformSettlementExcel = () => {
+  api.settlementApi.exportPlatformSettlementExcel({
+    agreementType: "1",
+    invoiceTypes: ["5", "6"],
+    ...form.value,
+  }).then((res: any) => {
     const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
     const fileName = '手续费应收结算报表明细' + new Date().getTime() + '.xlsx';
     if ('download' in document.createElement('a')) {
@@ -197,10 +208,15 @@ const viewDetail = (row) => {
     name: 'platformReport',
     query: {
       settlementId: row.settlementId,
-      activeName:"3"
+      activeName: "3"
     }
   })
 }
+const view = (scope) => {
+  CredentialList.value = scope.fileUrl.split(',')
+  viewCredential.value = true
+}
+
 onMounted(() => {
   initList();
   initOption();

+ 12 - 19
src/views/platform/platformReport.vue

@@ -206,20 +206,11 @@ const handleClick = (e) => {
       initData2()
       break;
     case '3':
-      initData3(['1'])
-      break;
-    case '4':
-      initData3(['3'])
+      initData3()
       break;
   }
 }
-if(route.query.activeName){
-  activeName.value = route.query.activeName as string
-  recordForm2.value.settlementId = route.query.settlementId as string
-}
-else{
-  activeName.value = '1'
-}
+
 // 保险公司
 let companyList = ref([])
 const initCompany = () => {
@@ -318,18 +309,14 @@ const initData2 = () => {
     }
   })
 }
-const initData3 = (invoiceTypes) => {
+const initData3 = () => {
   api.settlementApi.superviseSettlementDetailExcel({
-    invoiceId: recordForm2.invoiceId,
-    companyId: recordForm2.companyId,
-    invoiceParty: recordForm2.invoiceParty,
-    settlementPerson: recordForm2.settlementPerson,
-    status: recordForm2.status,
+    ...recordForm2.value,
     settlementTimeStart: recordForm2.value.settlementTime?.[0],
     settlementTimeEnd: recordForm2.value.settlementTime?.[1],
     pages: pages.value,
     size: size.value,
-    invoiceTypes: invoiceTypes,
+    invoiceTypes: ['5', '6'],
     agreementType: '1'
   }).then((res: any) => {
     if (res.code == 200) {
@@ -431,7 +418,13 @@ const initOption = () => {
 }
 
 onMounted(() => {
-  initData1();
+  if (route.query.activeName === '3') {
+    recordForm2.value.settlementId = route.query.settlementId
+    activeName.value = '3'
+    initData3();
+  } else {
+    initData1();
+  }
   initCompany();
   initOption();
 })

+ 3 - 3
src/views/quoteConfig/agreement/agreementDetails.vue

@@ -611,7 +611,7 @@ const columns = [
     prop: "ptlAgreementCostTypeList", label: "交强险费用", width: '300', formatter: (row: any) => {
       let info = row.ptlAgreementCostTypeList.find((val: any) => val.costType == '交强险');
       if (info) {
-        return `入口:${info.inlet.toFixed(2)}% 出口:${info.export.toFixed(2)}%\n加投:${info.addThrow.toFixed(2)}% 手续费:${info.commission.toFixed(2)}%`
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}% 手续费:${info.commission?.toFixed(2)}%`
       } else {
         return '-'
       }
@@ -621,7 +621,7 @@ const columns = [
     prop: "agreementAbbreviation", label: "商业险费用", width: '300', formatter: (row: any) => {
       let info = row.ptlAgreementCostTypeList.find((val: any) => val.costType == '商业险');
       if (info) {
-        return `入口:${info.inlet.toFixed(2)}% 出口:${info.export.toFixed(2)}%\n加投:${info.addThrow.toFixed(2)}% 手续费:${info.commission.toFixed(2)}%`
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}% 手续费:${info.commission?.toFixed(2)}%`
       } else {
         return '-'
       }
@@ -631,7 +631,7 @@ const columns = [
     prop: "deptName", label: "驾意险费用", width: '300', formatter: (row: any) => {
       let info = row.ptlAgreementCostTypeList.find((val: any) => val.costType == '驾意险');
       if (info) {
-        return `入口:${info.inlet.toFixed(2)}% 出口:${info.export.toFixed(2)}%\n加投:${info.addThrow.toFixed(2)}% 手续费:${info.commission.toFixed(2)}%`
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}% 手续费:${info.commission?.toFixed(2)}%`
       } else {
         return '-'
       }

+ 54 - 44
src/views/quoteConfig/costManagement.vue

@@ -77,7 +77,8 @@
       </div>
       <template #footer>
         <div class="dialog-footer">
-          <el-button class="border-[#0083FF] color-[#0083FF]" plain @click="agreementSelectionVisible = false">取消</el-button>
+          <el-button class="border-[#0083FF] color-[#0083FF]" plain
+            @click="agreementSelectionVisible = false">取消</el-button>
           <el-button type="primary" @click="agreementSelectionConfirm" :disabled="!ruleInfo">
             确定
           </el-button>
@@ -110,8 +111,8 @@ interface PageInfo {
 }
 onBeforeMount(async () => {
   await loadDicts(['valid_status', 'is_enable', 'audit_status', 'insurance_type']);//获取多个字典
-  if(id.value){
-    formInline.agreement=id.value;
+  if (id.value) {
+    formInline.agreement = id.value;
   }
   findpage();//列表数据
   getDeptTree();
@@ -160,22 +161,22 @@ const formInline = reactive({
 // 保险公司
 let companyOption = ref([])
 const initCompany = () => {
-    // api.projectApi.getCompanyList().then(res => {
-    api.insuranceApi.leftList('').then((res: any) => {
-        if(res.code == 200) {
-            companyOption.value = res.data.map(item => {
-                return {
-                    label: item.name,
-                    value: item.id
-                }
-            })
-        } else {
-            ElMessage({
-                message: res.msg,
-                type: 'warning'
-            })
+  // api.projectApi.getCompanyList().then(res => {
+  api.insuranceApi.leftList('').then((res: any) => {
+    if (res.code == 200) {
+      companyOption.value = res.data.map(item => {
+        return {
+          label: item.name,
+          value: item.id
         }
-    })
+      })
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
 }
 
 //表格字段数据
@@ -215,18 +216,18 @@ const fields = ref([
       formInline.failureTime = value;
     }
   },
-    {
-        label: "保险公司", model: "companyId", type: "select", placeholder: "选择保险公司", options: companyOption, filterable: true
-    },
-    {
-        label: "对接人", model: "contactPerson", type: "input", placeholder: "输入对接人",
-    },
-    {
-        label: "修改时间", model: "updateTimeArr", type: "date", dateType: "datetimerange", startplaceholder: "开始时间", endplaceholder: "结束时间",
-        onChange: (value: any) => {
-            formInline.updateTimeArr = value;
-        }
-    },
+  {
+    label: "保险公司", model: "companyId", type: "select", placeholder: "选择保险公司", options: companyOption, filterable: true
+  },
+  {
+    label: "对接人", model: "contactPerson", type: "input", placeholder: "输入对接人",
+  },
+  {
+    label: "修改时间", model: "updateTimeArr", type: "date", dateType: "datetimerange", startplaceholder: "开始时间", endplaceholder: "结束时间",
+    onChange: (value: any) => {
+      formInline.updateTimeArr = value;
+    }
+  },
 ]);
 
 //费用数据查询
@@ -251,7 +252,7 @@ function agreement() {
   });
 }
 const columns = [
-    { prop: "companyName", label: "保险公司", width: '120', },
+  { prop: "companyName", label: "保险公司", width: '120', },
   {
     prop: "agreementAbbreviation", label: "协议信息", width: '300',
     formatter: (row: any) => {
@@ -263,10 +264,10 @@ const columns = [
   },
   { prop: "productName", label: "险种", width: '120', },
   {
-      prop: "costRules", label: "费用规则", width: '500',
+    prop: "costRules", label: "费用规则", width: '500',
   },
   {
-      prop: "costDescribe", label: "费用描述", width: '500',
+    prop: "costDescribe", label: "费用描述", width: '500',
   },
   {
     prop: "isEnabled", label: "费用状态", width: '100', component: "Tag",
@@ -286,10 +287,10 @@ const columns = [
       }
     }
   },
-    { prop: "dockingPerson", label: "对接人", width: '100' },
-    { prop: "effectiveTime", label: "生效时间", width: '200' },
-    { prop: "failureTime", label: "失效时间", width: '200' },
-    { prop: "updateTime", label: "修改时间", width: '200' },
+  { prop: "dockingPerson", label: "对接人", width: '100' },
+  { prop: "effectiveTime", label: "生效时间", width: '200' },
+  { prop: "failureTime", label: "失效时间", width: '200' },
+  { prop: "updateTime", label: "修改时间", width: '200' },
   {
     prop: "ruleConditions", label: "交强费用", width: '300', formatter: (row: any) => {
       let info = row.ruleConditions.find((val: any) => val.costType == '交强险');
@@ -571,13 +572,14 @@ const AgreementId = ref();//规则id
 const ruleId = ref();//规则id
 const ruleList = ref();//协议规则列表
 const agreementSelection = () => {
+  AgreementId.value = '';
+  ruleList.value = []
   agreementSelectionVisible.value = true;
 }
 const ItemClick = (item: any) => {
-  console.log(item)
-  console.log(ruleInfo.value)
   AgreementInfo.value = item;
   AgreementId.value = item.id;
+  ruleId.value = '';
   api.agreementApi.agreementRulesList(AgreementId.value).then((res: any) => {
     if (res.code == '200') {
       ruleList.value = res.data;
@@ -590,6 +592,14 @@ const ruleItemclick = (value: string | number | boolean | undefined) => {
   ruleInfo.value = info;
 }
 const agreementSelectionConfirm = () => {
+  if (!AgreementId.value) {
+    ElMessage.error('请选择协议')
+    return
+  }
+  if (!ruleId.value) {
+    ElMessage.error('请选择规则')
+    return
+  }
   agreementSelectionVisible.value = false;
   ruleFeeVisible.value = true;
 }
@@ -605,11 +615,11 @@ const ruleFeeSave = (data: object) => {
       ruleFeeVisible.value = false;
       findpage();
     } else {
-        ElMessage({
-            type: 'error',
-            message: res.msg,
-            plain: true,
-        })
+      ElMessage({
+        type: 'error',
+        message: res.msg,
+        plain: true,
+      })
     }
   });
 }

+ 51 - 149
src/views/quoteConfig/dispatch/components/other.vue

@@ -1,11 +1,5 @@
 <template>
-  <el-dialog
-    v-model="dialogVisible"
-    title="其他情况"
-    width="704px"
-    :before-close="handleClose"
-    align-center
-  >
+  <el-dialog v-model="dialogVisible" title="其他情况" width="704px" :before-close="handleClose" align-center>
     <div class="dialog-content">
       <div class="left">
         <div class="description-text">
@@ -14,44 +8,23 @@
 
         <div class="section-title">将执行以下动作</div>
 
-        <el-form
-          ref="formRef"
-          :model="formData"
-          label-width="auto"
-          class="action-form"
-        >
-          <el-form-item
-            v-for="(item, index) in formData.actions"
-            :key="item.keyid"
-            :prop="`actions.${index}`"
-            :error="item.actionJson.duplicateError"
-          >
-            <el-select
-              v-model="item.actionCode"
-              placeholder="请选择动作"
-              style="width: 276px; margin-right: 9px"
-              @change="(val) => handleActionChange(val, index)"
-              @blur="() => checkDuplicate(index)"
-            >
-              <el-option
-                v-for="dictItem in getAvailableActions(index)"
-                :key="dictItem.value"
-                :value="dictItem.value"
-                :label="dictItem.label"
-              />
+        <el-form ref="formRef" :model="formData" label-width="auto" class="action-form">
+          <el-form-item v-for="(item, index) in formData.actions" :key="item.keyid" :prop="`actions.${index}`"
+            :error="item.actionJson.duplicateError">
+            <el-select v-model="item.actionCode" placeholder="请选择动作" style="width: 276px; margin-right: 9px"
+              @change="(val) => handleActionChange(val, index)" @blur="() => checkDuplicate(index)">
+              <el-option v-for="dictItem in getAvailableActions(index)" :key="dictItem.value" :value="dictItem.value"
+                :label="dictItem.label" />
             </el-select>
-            <img
-              src="@/assets/images/delete.png"
-              alt="删除"
-              style="width: 18px; height: 18px; cursor: pointer"
-              @click="deleteItem(index)"
-              v-if="formData.actions.length > 1"
-            />
+            <img src="@/assets/images/delete.png" alt="删除" style="width: 18px; height: 18px; cursor: pointer"
+              @click="deleteItem(index)" v-if="formData.actions.length > 1" />
           </el-form-item>
         </el-form>
 
         <el-button type="text" class="add-action-btn" @click="addItem">
-          <el-icon><Plus /></el-icon>添加动作
+          <el-icon>
+            <Plus />
+          </el-icon>添加动作
         </el-button>
       </div>
 
@@ -63,177 +36,105 @@
           </div>
         </div>
         <!-- 指定协议 -->
-        <div
-          v-if="
-            formData.actions.length > 0 &&
-            lastActionLabel === '报价失败指定协议'
-          "
-          style="margin-top: 20px"
-        >
-          <div
-            style="
+        <div v-if="
+          formData.actions.length > 0 &&
+          lastActionLabel === '报价失败指定协议'
+        " style="margin-top: 20px">
+          <div style="
               font-weight: 600;
               font-size: 16px;
               margin-bottom: 4px;
               color: #333333;
-            "
-          >
+            ">
             选择报价协议
           </div>
           <div style="font-size: 14px; color: #666666; margin-bottom: 12px">
             不满足所有规则的车辆报价,将使用该协议报价
           </div>
-          <el-select
-            v-model="
-              formData.actions[formData.actions.length - 1].actionJson
-                .agreementId
-            "
-            placeholder=""
-            style="width: 304px"
-            :rules="[
+          <el-select v-model="formData.actions[formData.actions.length - 1].actionJson
+              .agreementId
+            " placeholder="" style="width: 304px" :rules="[
               {
                 required: lastActionLabel === '报价失败指定协议',
                 message: '请选择报价协议',
                 trigger: 'blur',
               },
-            ]"
-          >
-            <el-option
-              v-for="item in agreementList"
-              :key="item.id"
-              :label="item.agreementName"
-              :value="item.id"
-            />
+            ]">
+            <el-option v-for="item in agreementList" :key="item.id" :label="item.agreementName" :value="item.id" />
           </el-select>
         </div>
         <!-- 终止报价 -->
-        <div
-          v-if="formData.actions.length > 0 && lastActionLabel === '终止报价'"
-          style="margin-top: 20px"
-        >
-          <div
-            style="
+        <div v-if="formData.actions.length > 0 && lastActionLabel === '终止报价'" style="margin-top: 20px">
+          <div style="
               font-weight: 600;
               font-size: 16px;
               margin-bottom: 4px;
               color: #333333;
-            "
-          >
+            ">
             提示文案
           </div>
           <div style="font-size: 14px; color: #666666; margin-bottom: 12px">
             设置终止该车辆报价的提示文案
           </div>
-          <el-input
-            v-model="
-              formData.actions[formData.actions.length - 1].actionJson.message
-            "
-            style="width: 100%"
-            :rows="4"
-            type="textarea"
-            placeholder="请输入提示文案"
-            maxlength="500"
-            show-word-limit
-          />
+          <el-input v-model="formData.actions[formData.actions.length - 1].actionJson.message
+            " style="width: 100%" :rows="4" type="textarea" placeholder="请输入提示文案" maxlength="500" show-word-limit />
         </div>
         <!-- 补录订单 -->
-        <div
-          v-if="formData.actions.length > 0 && lastActionLabel === '补录订单'"
-        >
+        <div v-if="formData.actions.length > 0 && lastActionLabel === '补录订单'">
           <div style="font-size: 14px; color: #666666; margin-top: 10px">
             终止报价,将报价信息写入补录订单内,生成一笔暂存的补录订单。
           </div>
         </div>
         <!-- 发送通知消息 -->
-        <div
-          v-if="
-            formData.actions.length > 0 && lastActionLabel === '发送通知消息'
-          "
-          style="margin-top: 20px"
-        >
-          <div
-            style="
+        <div v-if="
+          formData.actions.length > 0 && lastActionLabel === '发送通知消息'
+        " style="margin-top: 20px">
+          <div style="
               font-weight: 600;
               font-size: 16px;
               margin-bottom: 4px;
               color: #333333;
-            "
-          >
+            ">
             接收人
           </div>
           <div style="font-size: 14px; color: #666666; margin-bottom: 12px">
             发送通知消息给接收人
           </div>
-          <el-radio-group
-            v-model="
-              formData.actions[formData.actions.length - 1].actionJson.type
-            "
-            @change="handleTypeChange"
-            style="
+          <el-radio-group v-model="formData.actions[formData.actions.length - 1].actionJson.type
+            " @change="handleTypeChange" style="
               display: flex;
               flex-direction: column;
               align-items: start;
               gap: 12px;
-            "
-          >
+            ">
             <el-radio :value="1">业务员的管理人</el-radio>
             <el-radio :value="2">
               指定人员
-              <el-select
-                v-model="
-                  formData.actions[formData.actions.length - 1].actionJson
-                    .user_id
-                "
-                placeholder="请选择人员"
-                style="width: 204px; margin-left: 20px"
-                clearable
-                :disabled="
-                  formData.actions[formData.actions.length - 1].actionJson
+              <el-select v-model="formData.actions[formData.actions.length - 1].actionJson
+                  .user_id
+                " placeholder="请选择人员" style="width: 204px; margin-left: 20px" clearable :disabled="formData.actions[formData.actions.length - 1].actionJson
                     .type !== 2
-                "
-              >
-                <el-option
-                  v-for="item in followerList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+                  ">
+                <el-option v-for="item in followerList" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
             </el-radio>
           </el-radio-group>
           <div style="font-size: 14px; margin: 20px 0px 10px 0px">标题</div>
           <div>
-            <el-input
-              v-model="
-                formData.actions[formData.actions.length - 1].actionJson.title
-              "
-              style="width: 100%"
-              placeholder="请输入标题"
-              maxlength="50"
-              show-word-limit
-            />
+            <el-input v-model="formData.actions[formData.actions.length - 1].actionJson.title
+              " style="width: 100%" placeholder="请输入标题" maxlength="50" show-word-limit />
           </div>
           <div style="font-size: 14px; margin: 20px 0px 10px 0px">内容</div>
-          <el-input
-            v-model="
-              formData.actions[formData.actions.length - 1].actionJson.content
-            "
-            style="width: 100%"
-            :rows="4"
-            type="textarea"
-            placeholder="请输入通知内容"
-            maxlength="500"
-            show-word-limit
-          />
+          <el-input v-model="formData.actions[formData.actions.length - 1].actionJson.content
+            " style="width: 100%" :rows="4" type="textarea" placeholder="请输入通知内容" maxlength="500" show-word-limit />
         </div>
       </div>
     </div>
 
     <template #footer>
       <div class="dialog-footer">
-        <el-button class="border-[#0083FF] color-[#0083FF]" plain @click="(dialogVisible = false), emit('close')"
-          >取消</el-button
-        >
+        <el-button class="border-[#0083FF] color-[#0083FF]" plain
+          @click="(dialogVisible = false), emit('close')">取消</el-button>
         <el-button type="primary" @click="handleSave">保存</el-button>
       </div>
     </template>
@@ -567,7 +468,7 @@ onMounted(async () => {
   dictionaries.value = dictData || [];
   followerList.value = userList;
   // formData.value.companyId = props.companyId;
-  console.log( props.companyId);
+  console.log(props.companyId);
 });
 
 /**
@@ -644,6 +545,7 @@ watch(
 .add-action-btn {
   margin-top: 8px;
   color: #409eff;
+
   &:hover {
     color: #66b1ff;
   }

+ 3 - 3
src/views/quoteConfig/project/index.vue

@@ -29,7 +29,7 @@
         </div>
         <el-form class="p-[20px_8px_0_24px]" :model="projectForm" ref="projectRefs">
           <el-row :gutter="20">
-            <el-col :span="4">
+            <el-col :span="8">
               <el-form-item label="方案类型">
                 <el-select clearable v-model="projectForm.schemeType" placeholder="请选择" @change="search">
                   <el-option key="1" value="1" label="基础方案"></el-option>
@@ -37,7 +37,7 @@
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="8">
               <el-form-item label="险种">
                 <el-select clearable v-model="projectForm.productId" placeholder="请选择" @change="search">
                   <el-option v-for="item in insuranceType" :key="item.value" :value="item.value"
@@ -45,7 +45,7 @@
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="8">
               <el-form-item>
                 <el-input clearable prefix-icon="search" placeholder="输入规则描述查找" @keyup.enter="search"
                   v-model="projectForm.ruleDesc"></el-input>

File diff suppressed because it is too large
+ 404 - 420
src/views/quoteConfig/project/modules/projectAdd.vue


+ 9 - 0
src/views/receivable/documentary/index.vue

@@ -153,6 +153,7 @@
           <el-table-column prop="companyName" label="保险公司" width="120"></el-table-column>
           <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
           <el-table-column prop="agreementName" label="出单协议" width="150"></el-table-column>
+          <el-table-column prop="invoiceStatusName" label="开票状态" width="100"></el-table-column>
           <el-table-column prop="orderType" label="订单类型" width="100"></el-table-column>
           <el-table-column prop="licenseNo" label="车牌号" width="100"></el-table-column>
           <el-table-column prop="otherCostsPremiums" label="应收跟单费" width="100"></el-table-column>
@@ -327,6 +328,7 @@
           <el-table-column prop="companyName" label="保险公司" width="120"></el-table-column>
           <el-table-column prop="deptName" label="出单机构" width="120"></el-table-column>
           <el-table-column prop="agreementName" label="出单协议" width="150"></el-table-column>
+          <el-table-column prop="invoiceStatusName" label="开票状态" width="100"></el-table-column>
           <el-table-column prop="orderType" label="订单类型" width="100"></el-table-column>
           <el-table-column prop="licenseNo" label="车牌号" width="100"></el-table-column>
           <el-table-column prop="otherCostsPremiums" label="应收跟单费" width="100"></el-table-column>
@@ -620,6 +622,13 @@ const handleInvoice = () => {
     })
     return
   }
+  if(selectedList.value.some((item:any) => item.invoiceStatusName == '已开票')) {
+    ElMessage({
+      message: '存在已开票数据,不能开票!',
+      type: 'warning'
+    })
+    return
+  }
   invoiceShow.value = true
   let arr = selectedList.value.map((item) => {
     return item.id

+ 7 - 0
src/views/receivable/handingFee/index.vue

@@ -617,6 +617,13 @@ const handleInvoice = () => {
     })
     return
   }
+  if(selectedList.value.some((item:any) => item.invoiceStatusName == '已开票')) {
+    ElMessage({
+      message: '存在已开票数据,不能开票!',
+      type: 'warning'
+    })
+    return
+  }
   invoiceShow.value = true
   let arr = selectedList.value.map((item) => {
     return item.id

+ 2 - 2
src/views/receivable/handingFee/invoiceRecord.vue

@@ -73,12 +73,12 @@
       <el-table-column prop="overinflatedAmount" label="虚增金额" width="120"></el-table-column>
       <el-table-column prop="taxPoint" label="税点" width="120"></el-table-column>
       <el-table-column prop="actualReceivedAmount" label="开票金额" width="120"></el-table-column>
-      <el-table-column prop="receivableSupervisePremium" label="应收金额" width="120"></el-table-column>
+      <el-table-column prop="remainSettlementAmount" label="应收金额" width="120"></el-table-column>
       <el-table-column prop="settlementStatus" label="结算状态" width="120">
 
       </el-table-column>
       <el-table-column prop="settlementAmount" label="已结算金额" width="120"></el-table-column>
-      <el-table-column prop="remainSettlementAmount" label="待结算金额" width="120"></el-table-column>
+      <!-- <el-table-column prop="remainSettlementAmount" label="待结算金额" width="120"></el-table-column> -->
       <el-table-column prop="createBy" label="开票人" width="120"></el-table-column>
       <el-table-column prop="createTime" label="开票时间" width="150"></el-table-column>
       <el-table-column label="操作" width="200" fixed="right" align="center">

+ 3 - 3
src/views/representative/quoteApproval.vue

@@ -181,7 +181,7 @@ const columns = [
     prop: "ruleConditions", label: "交强费用", width: '300', formatter: (row: any) => {
       let info = row.ruleConditions.find((val: any) => val.costType == '交强险');
       if (info) {
-        return `入口:${info.inlet.toFixed(2)}% 出口:${info.export.toFixed(2)}%\n加投:${info.addThrow.toFixed(2)}% 手续费:${info.commission.toFixed(2)}%`
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}% 手续费:${info.commission?.toFixed(2)}%`
       } else {
         return '-';
       }
@@ -191,7 +191,7 @@ const columns = [
     prop: "ruleConditions", label: "商业费用", width: '300', formatter: (row: any) => {
       let info = row.ruleConditions.find((val: any) => val.costType == '商业险');
       if (info) {
-        return `入口:${info.inlet.toFixed(2)}% 出口:${info.export.toFixed(2)}%\n加投:${info.addThrow.toFixed(2)}% 手续费:${info.commission.toFixed(2)}%`
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}% 手续费:${info.commission?.toFixed(2)}%`
       } else {
         return '-';
       }
@@ -201,7 +201,7 @@ const columns = [
     prop: "ruleConditions", label: "驾意险费用", width: '300', formatter: (row: any) => {
       let info = row.ruleConditions.find((val: any) => val.costType == '驾意险');
       if (info) {
-        return `入口:${info.inlet.toFixed(2)}% 出口:${info.export.toFixed(2)}%\n加投:${info.addThrow.toFixed(2)}% 手续费:${info.commission.toFixed(2)}%`
+        return `入口:${info.inlet?.toFixed(2)}% 出口:${info.export?.toFixed(2)}%\n加投:${info.addThrow?.toFixed(2)}% 手续费:${info.commission?.toFixed(2)}%`
       } else {
         return '-';
       }

Some files were not shown because too many files changed in this diff