祁鹏飞 пре 3 месеци
родитељ
комит
dafc375d78

+ 6 - 0
src/api/modules/finance.ts

@@ -127,6 +127,12 @@ const financeApi = (axiosInstance: ApiInstance) => ({
     getCommissionReceivableTotalAmount: (data: any) => axiosInstance.post('/receivable/getCommissionReceivableTotalAmount', data),//手续
     getOtherReceivableTotalAmount: (data: any) => axiosInstance.post('/receivable/getOtherReceivableTotalAmount', data),//跟单
     getPlatformReceivableTotalAmount: (data: any) => axiosInstance.post('/receivable/getPlatFormReceivableTotalAmount', data),//平台
+    // 跟单开票
+    followInvoicePageList: (data: any) => axiosInstance.post(`/receivable/followInvoicePageList`,data), // 列表
+    calculateTotalSum: (data: any) => axiosInstance.get(`/receivable/calculateTotalSum?sumList=${data}`), // 相加
+    followInvoicing: (data: any) => axiosInstance.post(`/receivable/followInvoicing`,data), // 开票
+    followSettlement: (data: any) => axiosInstance.post(`/receivable/followSettlement`,data), // 结算
+    followInvoiceAndSettlement: (data: any) => axiosInstance.post(`/receivable/followInvoiceAndSettlement`,data), // 开票结算
 })
 
 export default financeApi

+ 5 - 5
src/views/platform/ticket.vue

@@ -163,11 +163,11 @@
         <el-input-number v-model="countForm.actualReceivedAmount" style="width: 100%;" :min="0" :precision="4"
           controls-position="right" @change="handleChange" />
       </el-form-item>
-      <el-form-item prop="paymentDifference" label="回款差额">
-        <el-input v-model="countForm.paymentDifference" disabled></el-input>
+      <el-form-item prop="settlementPaymentDifference" label="回款差额">
+        <el-input v-model="countForm.settlementPaymentDifference" disabled></el-input>
       </el-form-item>
-      <el-form-item prop="paymentReason" label="差额原因">
-        <el-input v-model="countForm.paymentReason" placeholder="请输入"></el-input>
+      <el-form-item prop="settlementPaymentReason" label="差额原因">
+        <el-input v-model="countForm.settlementPaymentReason" placeholder="请输入"></el-input>
       </el-form-item>
       <el-form-item prop="receivePaymentDate" label="收款日期">
         <el-date-picker v-model="countForm.receivePaymentDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
@@ -568,7 +568,7 @@ const uploadImage = async (file, fileList) => {
 
 const handleChange = async () => {
   const num = await calSub(countForm.value.actualReceivedAmount, receivablePremium.value)
-  countForm.value.paymentDifference = num
+  countForm.value.settlementPaymentDifference = num
 }
 
 /**

+ 60 - 36
src/views/receivable/documentary/documentaryRecord.vue

@@ -16,22 +16,25 @@
         </el-col>
         <el-col :span="8">
           <el-form-item prop="invoiceParty" label="开票方">
-            <el-select v-model="form.invoiceParty" clearable >
-              <el-option v-for="item in optionObj['invoice_party']" :key="item.value" :value="item.value" :label="item.label"></el-option>
+            <el-select v-model="form.invoiceParty" clearable>
+              <el-option v-for="item in optionObj['invoice_party']" :key="item.value" :value="item.value"
+                :label="item.label"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item prop="invoiceType" label="应收项">
-            <el-select v-model="form.accountsReceivable" clearable >
-              <el-option v-for="item in optionObj['invoice_risk_type']" :key="item.value" :value="item.value" :label="item.label"></el-option>
+            <el-select v-model="form.accountsReceivable" clearable>
+              <el-option v-for="item in optionObj['invoice_risk_type']" :key="item.value" :value="item.value"
+                :label="item.label"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item prop="status" label="结算状态">
-            <el-select v-model="form.settlementStatus" clearable >
-              <el-option v-for="item in optionObj['settlement_status']" :key="item.value" :value="item.value" :label="item.label"></el-option>
+            <el-select v-model="form.settlementStatus" clearable>
+              <el-option v-for="item in optionObj['settlement_status']" :key="item.value" :value="item.value"
+                :label="item.label"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
@@ -46,28 +49,28 @@
               format="YYYY-MM-DD HH:mm:ss" />
           </el-form-item>
         </el-col>
-        <el-col :span="16">
+        <el-col :span="16" style="display: flex; align-items: start; justify-content: flex-end">
           <el-button type="primary" @click="search">查询</el-button>
           <el-button plain type="primary" @click="reset">重置</el-button>
         </el-col>
       </el-row>
     </el-form>
     <el-table :data="tableData" style="height: calc(100% - 192px)" show-summary :summary-method="getSummaries">
-      <el-table-column prop="recordId" label="开票记录编号" width="200"></el-table-column>
-      <el-table-column prop="companyId" label="保险公司" width="150">
-        <template #default="scope">
-          {{ getCompanyName(scope.row) }}
-        </template>
+      <el-table-column prop="id" label="开票记录编号" width="200"></el-table-column>
+      <el-table-column prop="companyAllName" label="保险公司" width="150">
       </el-table-column>
-      <el-table-column prop="invoiceParty" label="开票方" width="150"></el-table-column>
+      <el-table-column prop="companyNameSimple" label="保险机构" width="150"></el-table-column>
       <el-table-column prop="invoiceNo" label="开票号" width="150"></el-table-column>
+      <el-table-column prop="invoiceParty" label="开票方" width="150"></el-table-column>
       <el-table-column prop="accountsReceivable" label="应收项" width="100"></el-table-column>
-      <el-table-column prop="receivableSupervisePremium" label="应收跟单费" width="120"></el-table-column>
+      <el-table-column prop="receivableAmount" label="应收金额" width="120"></el-table-column>
       <el-table-column prop="overinflatedAmount" label="虚增金额" width="120"></el-table-column>
+      <el-table-column prop="paymentReason" label="差额原因" width="120"></el-table-column>
       <el-table-column prop="taxPoint" label="税点" width="120"></el-table-column>
-      <el-table-column prop="receivableSupervisePremium" label="应收金额" width="120"></el-table-column>
-      <el-table-column prop="settlementStatus" label="结算状态" width="120"></el-table-column>
-      <el-table-column prop="a" label="已结算" width="120"></el-table-column>
+      <el-table-column prop="receivableSupervisePremium" 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="createBy" label="开票人" width="120"></el-table-column>
       <el-table-column prop="createTime" label="开票时间" width="150"></el-table-column>
       <el-table-column label="操作" width="150" fixed="right">
@@ -86,8 +89,8 @@
         <el-form-item prop="invoiceParty" label="开票方">
           <el-input v-model="countForm.invoiceParty" disabled placeholder="请输入"></el-input>
         </el-form-item>
-        <el-form-item prop="receivableSupervisePremium" label="应收手续费">
-          <el-input v-model="countForm.receivableSupervisePremium" disabled placeholder="请输入"></el-input>
+        <el-form-item prop="receivableAmount" label="应收金额">
+          <el-input v-model="countForm.receivableAmount" disabled placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="overinflatedAmount" label="虚增金额">
           <el-input v-model="countForm.overinflatedAmount" disabled placeholder="请输入"></el-input>
@@ -95,14 +98,21 @@
         <el-form-item prop="taxPoint" label="税点">
           <el-input v-model="countForm.taxPoint" disabled placeholder="请输入"></el-input>
         </el-form-item>
-        <el-form-item prop="receivableSupervisePremium" label="应收金额">
+        <el-form-item prop="receivableSupervisePremium" label="开票金额">
           <el-input v-model="countForm.receivableSupervisePremium" disabled placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="actualReceivedAmount" label="实收金额">
-          <el-input v-model="countForm.actualReceivedAmount" placeholder="请输入"></el-input>
+          <el-input-number v-model="countForm.actualReceivedAmount" style="width: 100%;" :min="0" :max="countForm.remainSettlementAmount" :precision="2"
+            controls-position="right" @change="handleChange()" />
+        </el-form-item>
+        <el-form-item label="回款差额">
+          <el-input v-model="countForm.settlementPaymentDifference" disabled placeholder="自动计算" />
+        </el-form-item>
+        <el-form-item prop="settlementPaymentReason" label="差额原因">
+          <el-input v-model="countForm.settlementPaymentReason" placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="receivePaymentDate" label="收款日期">
-          <el-date-picker v-model="countForm.receivePaymentDate" type="daterange" />
+          <el-date-picker v-model="countForm.receivePaymentDate" type="date" value-format="YYYY-MM-DD" />
         </el-form-item>
         <el-form-item prop="attachmentIds" label="收款凭证" class="upload-btn">
           <el-upload style="margin: 0 10px 10px 0" :auto-upload="false" multiple v-if="!countForm.h"
@@ -140,12 +150,7 @@ import api from "@/api";
 import { ElMessage } from 'element-plus'
 
 let form = ref({})
-let tableData = ref([{}])
-
-const getCompanyName = (row) => {
-  let company = companyList.value.find(item => item.companyCode === row.companyId)
-  return company?.name || ''
-}
+let tableData = ref([])
 
 let pages = ref(1)
 let size = ref(10)
@@ -185,14 +190,18 @@ let countRules = ref({
   receivePaymentDate: [{ required: true, trigger: "change", message: "请选择" }],
   attachmentIds: [{ required: true, message: "请上传" }]
 })
-let imageUrl = ref('')
+let imageUrl = ref([])
 let attachmentIds = ref([])
 let invoicingId = ref('')
 const handleCount = (row) => {
   countShow.value = true
+  imageUrl.value = []
+  attachmentIds.value = []
   invoicingId.value = row.id
   countForm.value = {
     invoiceParty: row.invoiceParty,
+    remainSettlementAmount: row.remainSettlementAmount,
+    receivableAmount: row.receivableAmount,
     receivableSupervisePremium: row.receivableSupervisePremium,
     overinflatedAmount: row.overinflatedAmount,
     taxPoint: row.taxPoint,
@@ -210,6 +219,25 @@ const uploadImage = async (file) => {
   }
 }
 
+/** 计算实收金额与应收监管保费的差值,并将结果赋值给付款差额字段 */
+const handleChange = async () => {
+  const num = await calSub(countForm.value.actualReceivedAmount, countForm.value.receivableSupervisePremium)
+  countForm.value.settlementPaymentDifference = num
+}
+/** 计算应收监管保费差额并更新虚增金额 */
+
+
+/**
+ * 计算两个数值的差值(被减数 - 减数)
+ * @param minuend 被减数
+ * @param subtrahend 减数
+ * @returns 差值,若接口无数据则返回 0
+ */
+const calSub = async (minuend: number = 0, subtrahend: number) => {
+  const res = await api.financeApi.calSub({ minuend, subtrahend })
+  return res.data || 0
+}
+
 // 列表
 const initList = () => {
   api.invoiceRecordApi.invoiceRecord({
@@ -252,7 +280,7 @@ const handelComfirm = (CountForm) => {
   if (!CountForm) return
   CountForm.validate((valid) => {
     if (valid) {
-      api.financeApi.settlement({
+      api.financeApi.followSettlement({
         invoicingId: invoicingId.value,
         actualReceivedAmount: countForm.value.actualReceivedAmount,
         receivePaymentDate: countForm.value.receivePaymentDate,
@@ -260,15 +288,11 @@ const handelComfirm = (CountForm) => {
       }).then((res: any) => {
         countShow.value = false
         if (res.code == 200) {
+          reset()
           ElMessage({
             message: res.msg,
             type: 'success'
           })
-        } else {
-          ElMessage({
-            message: res.msg,
-            type: 'warning'
-          })
         }
       })
     }
@@ -289,7 +313,7 @@ const handelCancel = () => {
   imageUrl.value = []
 }
 
-const optionObj=ref({})
+const optionObj = ref({})
 const initOption = () => {
   let list = ['invoice_risk_type', 'invoice_party', 'settlement_status']
   list.forEach(item => {

+ 3 - 8
src/views/receivable/documentary/index.vue

@@ -122,7 +122,7 @@
             <el-button class="radius-2px width-100" type="primary" @click="addShow = true">添加应收</el-button>
           </div>
           <div class="col-108 m-r-8">
-            <el-button class="radius-2px width-100" type="primary" @click="handleInvoice">跟单费开票</el-button>
+            <el-button class="radius-2px width-100" type="primary" @click="handleInvoiceSubmit">跟单费开票</el-button>
           </div>
           <div class="col-108 m-r-8">
             <el-button class="radius-2px width-100" type="primary" @click="handleExport(1)">导出</el-button>
@@ -314,7 +314,7 @@
             <el-button class="radius-2px width-100" type="primary" @click="addShow = true">添加应收</el-button>
           </div>
           <div class="col-108 m-r-8">
-            <el-button class="radius-2px width-100" type="primary" @click="handleInvoice">跟单费开票</el-button>
+            <el-button class="radius-2px width-100" type="primary" @click="handleInvoiceSubmit">跟单费开票</el-button>
           </div>
           <div class="col-108 m-r-8">
             <el-button class="radius-2px width-100" type="primary" @click="dropdownCommand('删除')">删除</el-button>
@@ -818,12 +818,7 @@ let invoiceShow = ref(false)
 let invoiceRadio = ref(null)
 const handleInvoiceSubmit = () => {
   myRouter.push({
-    name: 'HandingFeeTicket',
-    query: {
-      id: invoiceRadio.value,
-      selectedList: JSON.stringify(selectedList.value),
-      invoiceType: activeName.value == '1' ? '2' : activeName.value == '2' ? '4' : ''
-    }
+    name: 'documentaryTicket'
   })
 }
 

+ 361 - 0
src/views/receivable/documentary/ticket.vue

@@ -0,0 +1,361 @@
+<template>
+  <div class="ticket">
+    <div class="search-list">
+      <div class="search-left">
+        <el-select v-model="logicJudge">
+          <el-option value="and" label="并且"></el-option>
+          <el-option value="or" label="或者"></el-option>
+        </el-select>
+      </div>
+      <div class="search-right">
+        <div class="search-type" v-for="(item, index) in searchList">
+          <el-select v-model="item.name" style="margin-right: 20px; width: 220px" disabled>
+            <el-option value="companyId" label="保险公司"></el-option>
+            <el-option value="signYear" label="年份"></el-option>
+          </el-select>
+          <el-select v-model="item.type" v-if="item.name != 'signDate'" style="margin-right: 20px; width: 150px"
+            @change="val => signDateSelectChange(index, val)">
+            <el-option value="等于" label="等于"></el-option>
+            <el-option value="包含" label="包含"></el-option>
+          </el-select>
+          <el-select class="w-350px" v-if="item.name == 'companyId'" v-model="item.search" placeholder="请选择" clearable
+            filterable :disabled="item.type == '为空'">
+            <el-option v-for="item in companyList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+          </el-select>
+          <el-date-picker v-if="item.name == 'signYear'" style="width: 350px" format="YYYY" value-format="YYYY"
+            v-model="yearrangesearch" type="yearrange" range-separator="-" :disabled="item.type == '为空'"
+            @change="handlePtlAgreementChange(index, $event)" />
+        </div>
+        <el-button type="primary" class="w-88px" @click="initData">搜索</el-button>
+
+      </div>
+    </div>
+    <el-table :data="tableData" ref="tableRef" style="height: calc(100% - 160px)" @select="handleSelection"
+      @select-all="handleSelectAll">
+      <el-table-column type="selection" width="50" fixed="left" :selectable="selectable"></el-table-column>
+      <el-table-column prop="partnerCompanyName" label="保险公司"></el-table-column>
+      <el-table-column prop="year" label="年"></el-table-column>
+      <el-table-column prop="month" label="月"></el-table-column>
+      <el-table-column prop="receivablePremium" label="应收总额"></el-table-column>
+      <el-table-column prop="invoiced" label="已开票"></el-table-column>
+      <el-table-column prop="uninvoiced" label="未开票"></el-table-column>
+    </el-table>
+    <div class="footer">
+      <el-button plain @click="router.back()">取消</el-button>
+      <el-button plain type="primary" @click="handleTicket(true)">开票并结算</el-button>
+      <el-button type="primary" @click="handleTicket(false)">开票</el-button>
+    </div>
+    <el-dialog :close-on-click-modal="false" v-model="countShow" width="600" :title="isSettlement ? '开票并结算' : '开票'">
+      <el-form ref="CountForm" :model="countForm" :rules="countRules" label-width="120">
+        <el-form-item prop="invoiceParty" label="开票方">
+          <el-select v-model="countForm.invoiceParty" placeholder="请选择开票方">
+            <el-option label="我方开票" value="1"></el-option>
+            <el-option label="保司开票" value="2"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="invoiceNo" label="开票号" v-if="countForm.invoiceParty == '1'">
+          <el-input v-model="countForm.invoiceNo" placeholder="请输入"></el-input>
+        </el-form-item>
+        <el-form-item prop="taxPoint" label="税点">
+          <el-input v-model="countForm.taxPoint" placeholder="请输入"></el-input>
+        </el-form-item>
+        <el-form-item prop="receivableSupervisePremium" label="应收金额">
+          <el-input v-model="receivableSupervisePremium" placeholder="请输入" disabled></el-input>
+        </el-form-item>
+        <el-form-item prop="receivableSupervisePremium" label="开票金额">
+          <el-input-number :disabled="selectedList.length > 1" v-model="countForm.receivableSupervisePremium"
+            style="width: 100%;" :min="0" :precision="2" controls-position="right"
+            @change="handleChange(); handleChange1()" />
+        </el-form-item>
+        <el-form-item prop="overinflatedAmount" label="虚增金额">
+          <el-input v-model="countForm.overinflatedAmount" disabled></el-input>
+        </el-form-item>
+        <el-form-item prop="paymentReason" label="虚增金额原因">
+          <el-input v-model="countForm.paymentReason" placeholder="请输入"></el-input>
+        </el-form-item>
+        <el-form-item v-if="isSettlement" prop="actualReceivedAmount" label="实收金额">
+          <el-input-number v-model="countForm.actualReceivedAmount" style="width: 100%;" :min="0"
+            :max="countForm.receivableSupervisePremium" :precision="2" controls-position="right"
+            @change="handleChange" />
+        </el-form-item>
+        <el-form-item v-if="isSettlement" prop="settlementPaymentDifference" label="回款差额">
+          <el-input v-model="countForm.settlementPaymentDifference" disabled></el-input>
+        </el-form-item>
+        <el-form-item v-if="isSettlement" prop="settlementPaymentReason" label="差额原因">
+          <el-input v-model="countForm.settlementPaymentReason" placeholder="请输入"></el-input>
+        </el-form-item>
+        <el-form-item prop="invoiceTime" label="开票日期">
+          <el-date-picker v-model="countForm.invoiceTime" style="width: 100%;" type="date"
+            value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" />
+        </el-form-item>
+        <el-form-item v-if="isSettlement" prop="receivePaymentDate" label="收款日期">
+          <el-date-picker v-model="countForm.receivePaymentDate" style="width: 100%;" type="date"
+            value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" />
+        </el-form-item>
+        <el-form-item v-if="isSettlement" prop="attachmentIds" label="收款凭证" class="upload-btn">
+          <el-upload action="https://tennat.baoxianzhanggui.com/api/file/upload" drag
+            v-model:file-list="countForm.attachmentIds" multiple list-type="picture-card">
+            <el-icon>
+              <Plus />
+            </el-icon>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button class="border-[#0083FF] color-[#0083FF]" plain @click="countShow = false">取消</el-button>
+        <el-button type="primary" @click="handelComfirm()">确定</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+
+import { ElMessage } from "element-plus";
+import { getLeft } from '@imengyu/vue3-context-menu/lib/ContextMenuUtils';
+
+let route = useRoute()
+let router = useRouter()
+const selectedList = ref([])//选中的应收单据
+const companyList = ref()//保险公司
+const year = new Date().getFullYear() + ''
+const yearrangesearch = ref([year, year])
+
+const countShow = ref(false)
+const countForm = ref({})
+
+const tableRef = ref('')
+
+const selCompanyId = ref('')
+/** 处理选择变更,更新选中的公司ID和选中列表 */
+const handleSelection = (val: any) => {
+  if (val.length) selCompanyId.value = val[0].partnerCompanyId
+  if (!val.length) selCompanyId.value = ''
+  selectedList.value = val
+}
+/** 处理全选/多选操作,确保所选行仅限于同一合作公司:选取首项的公司ID作为当前选中公司,过滤掉不同公司的选项并取消其选中状态 */
+const handleSelectAll = (val: any) => {
+  if (val.length) selCompanyId.value = val[0].partnerCompanyId
+  if (!val.length) selCompanyId.value = ''
+  selectedList.value = val.filter(v => v.partnerCompanyId === selCompanyId.value)
+  val.filter(v => v.partnerCompanyId !== selCompanyId.value).forEach(v => tableRef.value.toggleRowSelection(v, false));
+}
+
+const selectable = (row: any, index: number) => {
+  if (!selCompanyId.value) return true
+  if (row.partnerCompanyId == selCompanyId.value) return true
+  return false
+}
+
+//保险公司协议
+
+let logicJudge = ref('and')
+let searchList = ref([
+  {
+    name: 'companyId',
+    type: '等于',
+    search: ''
+  }, {
+    name: 'signYear',
+    type: '等于',
+    search: ''
+  }
+])
+const datesearch = ref('')
+
+// 出单协议多选转换
+const handlePtlAgreementChange = (index: any, e: any) => {
+  if (Array.isArray(e)) {
+    searchList.value[index].search = e.join(',') || ''
+  } else {
+    searchList.value[index].search = e || ''
+  }
+}
+
+// 签单时间选择器改变时触发
+const signDateSelectChange = (index: any, e: any) => {
+  switch (e) {
+    case '为空':
+      searchList.value[index].search = ''
+      break;
+    case '大于等于':
+    case '小于等于':
+      searchList.value[index].search = ''
+      datesearch.value = ''
+      break;
+  }
+}
+
+let tableData = ref([])
+const receivableSupervisePremium = ref('')
+const isSettlement = ref(false)
+const handleTicket = async (bool: boolean) => {
+  if (selectedList.value.length == 0) {
+    ElMessage.error('请选择应收单据')
+    return
+  }
+  isSettlement.value = bool
+  const arr = selectedList.value.map(v => v.uninvoiced)
+  const res = await api.financeApi.calculateTotalSum(arr.join())
+  if (res.code == 200) {
+    openCountForm()
+    countForm.value.companyId = selectedList.value[0].companyId
+    receivableSupervisePremium.value = res.data
+    if (selectedList.value.length > 1) countForm.value.receivableSupervisePremium = res.data
+    if (selectedList.value.length === 1) countForm.value.selectFlag = 0
+    handleChange1()
+  }
+}
+
+/** 计算实收金额与应收监管保费的差值,并将结果赋值给付款差额字段 */
+const handleChange = async () => {
+  const num = await calSub(countForm.value.actualReceivedAmount, countForm.value.receivableSupervisePremium)
+  countForm.value.settlementPaymentDifference = num
+}
+/** 计算应收监管保费差额并更新虚增金额 */
+
+const handleChange1 = async () => {
+  const num = await calSub(countForm.value.receivableSupervisePremium, receivableSupervisePremium.value)
+  countForm.value.overinflatedAmount = num
+}
+
+/**
+ * 计算两个数值的差值(被减数 - 减数)
+ * @param minuend 被减数
+ * @param subtrahend 减数
+ * @returns 差值,若接口无数据则返回 0
+ */
+const calSub = async (minuend: number = 0, subtrahend: number) => {
+  const res = await api.financeApi.calSub({ minuend, subtrahend })
+  return res.data || 0
+}
+
+const openCountForm = () => {
+  countForm.value = {
+    selectFlag: 1
+  }
+  countShow.value = true
+}
+const handelComfirm = () => {
+  const attachmentIds = countForm.value.attachmentIds?.map(v => v.response.data.id)
+  let params: any = {
+    details: selectedList.value,
+    ...countForm.value,
+    attachmentIds
+  }
+  let apiFn = api.financeApi.followInvoicing
+  if (isSettlement.value) {
+    apiFn = api.financeApi.followInvoiceAndSettlement
+    params = {
+      invoiceVO: params,
+      ...countForm.value,
+      attachmentIds
+    }
+  }
+  apiFn(params).then((sub: any) => {
+    if (sub.code == 200) {
+      countShow.value = false
+      ElMessage({
+        message: sub.msg,
+        type: 'success'
+      })
+      initData()
+    }
+  })
+}
+
+const initData = () => {
+  handlePtlAgreementChange(1, yearrangesearch.value)
+  const params = {
+    searchList: searchList.value,
+    logicJudge: logicJudge.value,
+  }
+  api.financeApi.followInvoicePageList(params).then((res: any) => {
+    if (res.code == 200) {
+      tableData.value = res.data
+    }
+  })
+}
+// 保险公司
+const initCompany = () => {
+  api.insuranceApi.leftList('').then((res: any) => {
+    if (res.code == 200) {
+      companyList.value = res.data
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+  initCompany()
+})
+
+</script>
+
+<style scoped lang="scss">
+.ticket {
+  height: calc(100vh - 135px);
+  width: calc(100% - 24px);
+  margin: 12px auto;
+  padding: 12px;
+  background: #FFFFFF;
+  overflow-y: auto;
+
+  .search-list {
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+
+    .search-left {
+      width: 150px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-right: 20px;
+    }
+
+    .search-right {
+      display: grid;
+      grid-template-columns: repeat(1, 1fr);
+      gap: 0 12px;
+
+      .search-type {
+        display: flex;
+        align-items: center;
+        justify-content: flex-start;
+        margin-bottom: 10px;
+      }
+    }
+  }
+
+  .tips {
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+
+    p {
+      margin-right: 30px;
+    }
+  }
+
+  .footer {
+    width: 100%;
+    position: fixed;
+    left: 0;
+    bottom: 0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 80px;
+  }
+}
+
+:deep(.el-upload-dragger) {
+  height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 39 - 30
src/views/receivable/handingFee/invoiceRecord.vue

@@ -64,18 +64,17 @@
     </el-form>
     <el-table :data="tableData" height="calc(100% - 192px)" show-summary :summary-method="getSummaries">
       <el-table-column prop="id" label="开票记录编号" width="200"></el-table-column>
-      <el-table-column prop="companyALlName" label="保险公司" width="150">
+      <el-table-column prop="companyAllName" label="保险公司" width="150">
       </el-table-column>
       <el-table-column prop="companyNameSimple" label="保险机构" width="150"></el-table-column>
       <el-table-column prop="invoiceNo" label="开票号" width="150"></el-table-column>
       <el-table-column prop="invoiceParty" label="开票方" width="150"></el-table-column>
       <el-table-column prop="accountsReceivable" label="应收项" width="100"></el-table-column>
-      <el-table-column prop="receivableSupervisePremium" label="应收手续费" width="120"></el-table-column>
+      <el-table-column prop="receivableAmount" label="应收手续费" width="120"></el-table-column>
       <el-table-column prop="overinflatedAmount" label="虚增金额" width="120"></el-table-column>
       <el-table-column prop="paymentReason" 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="remainSettlementAmount" label="应收金额" width="120"></el-table-column>
+      <el-table-column prop="receivableSupervisePremium" 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>
@@ -84,8 +83,10 @@
       <el-table-column prop="createTime" label="开票时间" width="150"></el-table-column>
       <el-table-column label="操作" width="200" fixed="right" align="center">
         <template #default="scope">
-          <el-button link type="primary" v-if="scope.row.settlementStatus == '未结算'"  @click="handleCount(scope.row)">结算</el-button>
-          <el-button link type="primary" v-if="scope.row.settlementStatus == '已结算'" @click="handleView(scope.row)">明细查询</el-button>
+          <el-button link type="primary" v-if="scope.row.settlementStatus == '未结算'"
+            @click="handleCount(scope.row)">结算</el-button>
+          <el-button link type="primary" v-if="scope.row.settlementStatus == '已结算'"
+            @click="handleView(scope.row)">明细查询</el-button>
           <el-button link type="primary" @click="handleDelete(scope.row)">删除</el-button>
         </template>
       </el-table-column>
@@ -100,8 +101,8 @@
         <el-form-item prop="invoiceParty" label="开票方">
           <el-input v-model="countForm.invoiceParty" disabled placeholder="请输入"></el-input>
         </el-form-item>
-        <el-form-item prop="receivableSupervisePremium" label="应收手续费">
-          <el-input v-model="countForm.receivableSupervisePremium" disabled placeholder="请输入"></el-input>
+        <el-form-item prop="receivableAmount" label="应收手续费">
+          <el-input v-model="countForm.receivableAmount" disabled placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="overinflatedAmount" label="虚增金额">
           <el-input v-model="countForm.overinflatedAmount" disabled placeholder="请输入"></el-input>
@@ -109,17 +110,18 @@
         <el-form-item prop="taxPoint" label="税点">
           <el-input v-model="countForm.taxPoint" disabled placeholder="请输入"></el-input>
         </el-form-item>
-        <el-form-item prop="receivableSupervisePremium" label="应收金额">
+        <el-form-item prop="receivableSupervisePremium" label="开票金额">
           <el-input v-model="countForm.receivableSupervisePremium" disabled placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="actualReceivedAmount" label="实收金额">
-          <el-input v-model="countForm.actualReceivedAmount" placeholder="请输入"></el-input>
+          <el-input-number v-model="countForm.actualReceivedAmount" style="width: 100%;" :min="0" :precision="2"
+            controls-position="right" @change="handleChange()" />
         </el-form-item>
         <el-form-item label="回款差额">
-          <el-input v-model="countForm.paymentDifference" disabled placeholder="自动计算" />
+          <el-input v-model="countForm.settlementPaymentDifference" disabled placeholder="自动计算" />
         </el-form-item>
-        <el-form-item prop="actualReceivedAmount" label="差额原因">
-          <el-input v-model="countForm.paymentReason" placeholder="请输入"></el-input>
+        <el-form-item prop="settlementPaymentReason" label="差额原因">
+          <el-input v-model="countForm.settlementPaymentReason" placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="receivePaymentDate" label="收款日期">
           <el-date-picker v-model="countForm.receivePaymentDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
@@ -225,24 +227,31 @@ const handleCount = (row) => {
     invoiceParty: row.invoiceParty,
     receivableSupervisePremium: row.receivableSupervisePremium,
     overinflatedAmount: row.overinflatedAmount,
-    actualReceivedAmount: row.remainSettlementAmount,
+    actualReceivedAmount: row.receivableSupervisePremium,
     taxPoint: row.taxPoint,
-    paymentDifference: row.paymentDifference, // 回款差额(自动计算)
-    paymentReason: row.paymentReason, // 回款原因
     receivePaymentDate: row.receivePaymentDate, // 收款日期
     attachmentIds: row.attachmentIds // 凭证
   }
 }
-// 监听实收金额变化 → 自动计算回款差额
-watch(
-  () => countForm.value.actualReceivedAmount,
-  (newVal) => {
-    const receivable = Number(countForm.value.receivableSupervisePremium) || 0
-    const actual = Number(newVal) || 0
-    // 回款差额 = 实收 - 应收
-    countForm.value.paymentDifference = (actual - receivable).toFixed(5)
-  }
-)
+
+/** 计算实收金额与应收监管保费的差值,并将结果赋值给付款差额字段 */
+const handleChange = async () => {
+  const num = await calSub(countForm.value.actualReceivedAmount, countForm.value.receivableSupervisePremium)
+  countForm.value.settlementPaymentDifference = num
+}
+/** 计算应收监管保费差额并更新虚增金额 */
+
+
+/**
+ * 计算两个数值的差值(被减数 - 减数)
+ * @param minuend 被减数
+ * @param subtrahend 减数
+ * @returns 差值,若接口无数据则返回 0
+ */
+const calSub = async (minuend: number = 0, subtrahend: number) => {
+  const res = await api.financeApi.calSub({ minuend, subtrahend })
+  return res.data || 0
+}
 const uploadImage = async (file, fileList) => {
   let files = file.raw
   const params = new FormData(); // 声明formData数据类型
@@ -332,9 +341,9 @@ const company = (name: string) => {
   });
 }
 const partnerCompanyIdChange = (value: any) => {
-    if (value) {
-        form.value.companyNameSimple = value[value.length - 1]
-    }
+  if (value) {
+    form.value.companyNameSimple = value[value.length - 1]
+  }
 }
 let imageShow = ref(false)
 let bigImageUrl = ref('')
@@ -540,4 +549,4 @@ onMounted(() => {
   width: 100%;
   height: 100%;
 }
-</style>
+</style>

+ 7 - 7
src/views/receivable/handingFee/ticket.vue

@@ -176,22 +176,22 @@
         </el-form-item>
         <el-form-item prop="receivableSupervisePremium" label="开票金额">
           <el-input-number v-model="countForm.receivableSupervisePremium" style="width: 100%;" :min="0" :precision="5"
-            controls-position="right" @change="isSettlement?handleChange():handleChange1()" />
+            controls-position="right" @change="handleChange();handleChange1()" />
         </el-form-item>
         <el-form-item v-if="isSettlement" prop="actualReceivedAmount" label="实收金额">
           <el-input-number v-model="countForm.actualReceivedAmount" style="width: 100%;" :min="0" :precision="5"
             controls-position="right" @change="handleChange" />
         </el-form-item>
-        <el-form-item v-if="isSettlement" prop="paymentDifference" label="回款差额">
-          <el-input v-model="countForm.paymentDifference" disabled></el-input>
+        <el-form-item v-if="isSettlement" prop="settlementPaymentDifference" label="回款差额">
+          <el-input v-model="countForm.settlementPaymentDifference" disabled></el-input>
         </el-form-item>
         <el-form-item v-else prop="overinflatedAmount" label="虚增金额">
           <el-input v-model="countForm.overinflatedAmount" disabled></el-input>
         </el-form-item>
-        <el-form-item v-if="isSettlement" prop="paymentReason" label="差额原因">
-          <el-input v-model="countForm.paymentReason" placeholder="请输入"></el-input>
+        <el-form-item v-if="isSettlement" prop="settlementPaymentReason" label="差额原因">
+          <el-input v-model="countForm.settlementPaymentReason" placeholder="请输入"></el-input>
         </el-form-item>
-        <el-form-item v-else prop="paymentReason" label="虚增金额原因">
+        <el-form-item prop="paymentReason" label="虚增金额原因">
           <el-input v-model="countForm.paymentReason" placeholder="请输入"></el-input>
         </el-form-item>
         <el-form-item prop="invoiceTime" label="开票日期">
@@ -528,7 +528,7 @@ const calBeforeInvoice = async (params: any) => {
 /** 计算实收金额与应收监管保费的差值,并将结果赋值给付款差额字段 */
 const handleChange = async () => {
   const num = await calSub(countForm.value.actualReceivedAmount, countForm.value.receivableSupervisePremium)
-  countForm.value.paymentDifference = num
+  countForm.value.settlementPaymentDifference = num
 }
 /** 计算应收监管保费差额并更新虚增金额 */