Browse Source

feat(financialManage): 重构预收款模块并新增审批流程

- 调整API路径为新的财务预收款接口
- 重构预收款表单字段,支持客户选择、合同/订单关联
- 新增提交、审批功能接口
- 优化详情页面,增加收款信息展示和流程详情标签页
- 新增预收款款项类型字典配置
- 移除假数据,接入真实数据源
yusheng 2 months ago
parent
commit
be65e8ada2

+ 22 - 5
src/api/financialManage/advanceReceipt/index.js

@@ -2,7 +2,7 @@ import request from '@/utils/request';
 
 // 预收款列表
 export async function advanceReceiptPageList(data) {
-  const res = await request.post('/eom/advanceReceipt/page', data);
+  const res = await request.post('/eom/finadvance/page', data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -11,7 +11,7 @@ export async function advanceReceiptPageList(data) {
 
 // 预收款详情
 export async function getAdvanceReceiptInfo(id) {
-  const res = await request.get(`/eom/advanceReceipt/getById/${id}`);
+  const res = await request.get(`/eom/finadvance/getById/${id}`);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -20,7 +20,7 @@ export async function getAdvanceReceiptInfo(id) {
 
 // 新增预收款
 export async function addAdvanceReceipt(data) {
-  const res = await request.post('/eom/advanceReceipt/save', data);
+  const res = await request.post('/eom/finadvance/save', data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -29,7 +29,7 @@ export async function addAdvanceReceipt(data) {
 
 // 修改预收款
 export async function updateAdvanceReceipt(data) {
-  const res = await request.put('/eom/advanceReceipt/update', data);
+  const res = await request.put('/eom/finadvance/update', data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -38,9 +38,26 @@ export async function updateAdvanceReceipt(data) {
 
 // 删除预收款
 export async function deleteAdvanceReceipt(data) {
-  const res = await request.delete('/eom/advanceReceipt/delete', { data });
+  const res = await request.delete('/eom/finadvance/delete', { data });
   if (res.data.code == 0) {
     return res.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+// 提交
+export async function submit(data) {
+  const res = await request.post('/eom/finadvance/submit', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 审批
+export async function approve(data) {
+  const res = await request.post('/eom/finadvance/approve', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 20 - 18
src/enum/dict.js

@@ -74,22 +74,23 @@ export default {
   调整类型: 'adjust_price_type',
   贮藏: 'layBy',
   支付类型: 'payment_type',
+  预收款款项类型: 'fin_advance_fund_type'
 };
 
 /**
-   * ClientEnum 枚举
-   * 特殊处理的客户环境id
-   * 1 主环境-601环境
-   * 2 soll-索尔环境
-   * 3 tg-碳谷环境
-   * 4 baoyue-宝悦环境
-   * 5 jiashi-嘉实环境
-   * 9 jiannan-江南
-   * 21 中能装备环境
-   * 6 润天智科
-   * 7 特瑞医疗
-   * 8 华泰
-   */
+ * ClientEnum 枚举
+ * 特殊处理的客户环境id
+ * 1 主环境-601环境
+ * 2 soll-索尔环境
+ * 3 tg-碳谷环境
+ * 4 baoyue-宝悦环境
+ * 5 jiashi-嘉实环境
+ * 9 jiannan-江南
+ * 21 中能装备环境
+ * 6 润天智科
+ * 7 特瑞医疗
+ * 8 华泰
+ */
 
 export const numberList = [
   'urgent_type',
@@ -101,7 +102,8 @@ export const numberList = [
   'production_status',
   'plan_type',
   'delivery_status',
-  'rule_status'
+  'rule_status',
+  'fin_advance_fund_type'
 ];
 
 //报价管理-审核枚举
@@ -282,7 +284,7 @@ export const outputSceneStateEnum = [
 export const pricingWayList = [
   { id: 1, name: '按数量计价' },
   { id: 2, name: '按重量计价' },
-  { id: 3, name: '按增重计价' },
+  { id: 3, name: '按增重计价' }
 ];
 //来源类型
 export const relationTypeOption = {
@@ -357,7 +359,7 @@ export const paymentTypeOp = [
     value: 4,
     label: '尾款'
   }
-]
+];
 
 //委外订单来源类型
 
@@ -693,7 +695,7 @@ export const payAndReceiveEnum = [
   {
     label: '其他',
     value: 99
-  },
+  }
 ];
 
 export const allocationType = [
@@ -712,4 +714,4 @@ export const dimensionType = [
   { code: 1, label: '物品维度' },
   { code: 2, label: '批次维度' },
   { code: 3, label: '包装维度' }
-];
+];

+ 298 - 86
src/views/financialManage/advanceReceipt/components/addDialog.vue

@@ -1,27 +1,41 @@
 <!-- 预收款新增/编辑弹窗 -->
 <template>
   <ele-modal
-    width="1100px"
+    width="70%"
     :visible="visible"
+    :maxable="true"
     :append-to-body="true"
     :close-on-click-modal="false"
     custom-class="ele-dialog-form"
-    :title="isDetail ? '预收款详情' : (isUpdate ? '修改预收款' : '新增预收款')"
+    :title="isDetail ? '预收款详情' : isUpdate ? '修改预收款' : '新增预收款'"
     @update:visible="updateVisible"
   >
+    <div class="switch_left" v-if="isDetail">
+      <ul>
+        <li
+          v-for="item in tabOptions"
+          :key="item.key"
+          :class="{ active: activeComp == item.key }"
+          @click="activeComp = item.key"
+        >
+          {{ item.name }}
+        </li>
+      </ul>
+    </div>
     <el-form
       ref="form"
       :model="form"
       :rules="rules"
       label-width="120px"
+      v-show="activeComp == 'main'"
     >
       <!-- 基本信息 -->
       <headerTitle title="基本信息" size="16px"></headerTitle>
       <el-row :gutter="20">
         <el-col :span="8">
-          <el-form-item label="预收日期:" prop="receiptDate">
+          <el-form-item label="预收日期:" prop="advanceDate">
             <el-date-picker
-              v-model="form.receiptDate"
+              v-model="form.advanceDate"
               type="date"
               placeholder="请选择"
               value-format="yyyy-MM-dd"
@@ -31,9 +45,9 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="预收金额:" prop="amount">
+          <el-form-item label="预收金额:" prop="advanceTotalPrice">
             <el-input
-              v-model="form.amount"
+              v-model="form.advanceTotalPrice"
               placeholder="请输入"
               :disabled="isDetail"
             >
@@ -42,36 +56,35 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="会计科目:" prop="accountSubject">
-            <el-select
-              v-model="form.accountSubject"
-              placeholder="请选择"
-              style="width: 100%"
+          <el-form-item label="会计科目:" prop="accountingSubjectId">
+            <ele-tree-select
+              clearable
               :disabled="isDetail"
-            >
-              <el-option label="预收款项" value="预收款项"></el-option>
-            </el-select>
+              filterable
+              ref="treeSelect"
+              :data="accountingSubjectList"
+              v-model="form.accountingSubjectId"
+              valueKey="id"
+              labelKey="name"
+              placeholder="请选择"
+              @change="changeSubjectInfo"
+              default-expand-all
+            />
           </el-form-item>
         </el-col>
       </el-row>
 
       <el-row :gutter="20">
         <el-col :span="8">
-          <el-form-item label="客户名称:" prop="customerName">
-            <el-select
-              v-model="form.customerName"
+          <el-form-item label="客户名称:" prop="contactName">
+            <el-input
+              clearable
+              v-model="form.contactName"
+              @click.native="$refs.parentRef.open()"
               placeholder="请选择"
-              style="width: 100%"
+              readonly
               :disabled="isDetail"
-              filterable
-            >
-              <el-option
-                v-for="item in customerOptions"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
+            />
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -82,26 +95,21 @@
               style="width: 100%"
               :disabled="isDetail"
             >
-              <el-option label="销售订单" value="销售订单"></el-option>
+              <el-option label="销售订单" :value="3"></el-option>
+              <el-option label="合同" :value="2"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="来源编码:" prop="sourceCode">
-            <el-select
+            <el-input
+              clearable
               v-model="form.sourceCode"
+              @click.native="openSource"
               placeholder="请选择"
-              style="width: 100%"
               :disabled="isDetail"
-              filterable
-            >
-              <el-option
-                v-for="item in sourceCodeOptions"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
+              readonly
+            />
           </el-form-item>
         </el-col>
       </el-row>
@@ -109,20 +117,19 @@
       <el-row :gutter="20">
         <el-col :span="8">
           <el-form-item label="款项类型:" prop="fundType">
-            <el-select
+            <DictSelection
+              dictName="预收款款项类型"
+              clearable
               v-model="form.fundType"
-              placeholder="请选择"
-              style="width: 100%"
               :disabled="isDetail"
             >
-              <el-option label="预付款" value="预付款"></el-option>
-            </el-select>
+            </DictSelection>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="收款条件:" prop="collectionTerms">
+          <el-form-item label="收款条件:" prop="collectionConditionId">
             <el-select
-              v-model="form.collectionTerms"
+              v-model="form.collectionConditionId"
               placeholder="请选择"
               style="width: 100%"
               :disabled="isDetail"
@@ -149,14 +156,21 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="附件:" prop="attachment">
-            <fileMain v-model="form.attachment" :disabled="isDetail"></fileMain>
+          <el-form-item label="附件:" prop="files">
+            <fileMain
+              v-model="form.files"
+              :type="isDetail ? 'view' : 'add'"
+            ></fileMain>
           </el-form-item>
         </el-col>
       </el-row>
 
       <!-- 物品清单 -->
-      <headerTitle title="物品清单" size="16px" style="margin-top: 20px"></headerTitle>
+      <headerTitle
+        title="物品清单"
+        size="16px"
+        style="margin-top: 20px"
+      ></headerTitle>
       <inventoryTableDetails
         ref="inventoryTableDetailsRef"
         :isAllPrice="false"
@@ -164,6 +178,31 @@
         :isSelected="false"
         cacheKeyUrl="eos-advanceReceipt-inventoryTableDetails"
       ></inventoryTableDetails>
+      <!-- 收款信息 -->
+      <div v-if="isDetail">
+        <headerTitle title="收款信息"></headerTitle>
+        <div style="margin: 10px 0; font-size: 14px; color: #606266">
+          <span>预收金额:{{ form.advanceTotalPrice || 0 }} 元</span>
+          <span style="margin-left: 20px"
+            >已收金额:{{ receivedAmount }} 元</span
+          >
+          <span style="margin-left: 20px"
+            >未收金额:{{ unreceivedAmount }} 元</span
+          >
+        </div>
+
+        <ele-pro-table
+          ref="table"
+          :needPage="false"
+          :columns="columns"
+          :datasource="form.detailList"
+          :toolkit="[]"
+        >
+          <template v-slot:attachment="{ row: r }">
+            <fileMain v-model="r.attachment" type="view" :limit="1"></fileMain>
+          </template>
+        </ele-pro-table>
+      </div>
     </el-form>
 
     <template v-slot:footer>
@@ -177,23 +216,106 @@
         <el-button @click="updateVisible(false)">取消</el-button>
       </template>
     </template>
+    <parentList ref="parentRef" @changeParent="changeParent"></parentList>
+    <contractListDialog
+      ref="selectContractRef"
+      @changeParent="changeContract"
+      :isChange="true"
+      :contactData="{
+        id: form.contactId
+      }"
+    ></contractListDialog>
+    <!--  销售订单  -->
+    <saleOrderListDialog
+      ref="saleOrderListDialogRef"
+      :contactData="{
+        id: form.contactId
+      }"
+      @changeParent="changeOrder"
+    ></saleOrderListDialog>
+    <bpmDetail
+      v-if="activeComp === 'bpm' && form.processInstanceId"
+      :id="form.processInstanceId"
+    ></bpmDetail>
   </ele-modal>
 </template>
 
 <script>
   import headerTitle from '@/components/header-title';
   import inventoryTableDetails from '@/BIZComponents/inventoryTableDetails.vue';
-  import fileMain from '@/components/addDoc/index.vue';
-  import { addAdvanceReceipt, updateAdvanceReceipt } from '@/api/financialManage/advanceReceipt';
-
+  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
+  import { getDetail } from '@/api/contractManage/contractBook';
+  import {
+    addAdvanceReceipt,
+    updateAdvanceReceipt,
+    getAdvanceReceiptInfo
+  } from '@/api/financialManage/advanceReceipt';
+  import { getTreeByPid } from '@/api/classifyManage';
+  import parentList from '@/views/saleManage/contact/components/parentList.vue';
+  import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
+  import saleOrderListDialog from '@/views/saleManage/saleOrder/invoice/components/orderListDialog.vue'; //销售订单
+  import { getSaleOrderDetail } from '@/api/saleManage/saleorder';
   export default {
     components: {
       headerTitle,
       inventoryTableDetails,
-      fileMain
+      contractListDialog,
+      saleOrderListDialog,
+      parentList,
+      bpmDetail
     },
     data() {
       return {
+        activeComp: 'main',
+
+        tabOptions: [
+          { key: 'main', name: '预收款项' },
+          { key: 'bpm', name: '流程详情' }
+        ],
+        columns: [
+          {
+            type: 'index',
+            label: '序号',
+            width: 55,
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            prop: 'collectTime',
+            label: '收款时间',
+            align: 'center',
+            minWidth: 160,
+            slot: 'collectTime'
+          },
+          {
+            prop: 'collectAmount',
+            label: '已收金额',
+            align: 'center',
+            minWidth: 140,
+            slot: 'collectAmount'
+          },
+          {
+            prop: 'payType',
+            label: '支付类型',
+            align: 'center',
+            minWidth: 140,
+            slot: 'payType'
+          },
+          {
+            prop: 'attachment',
+            label: '附件',
+            align: 'center',
+            minWidth: 120,
+            slot: 'attachment'
+          },
+          {
+            prop: 'remark',
+            label: '备注',
+            align: 'center',
+            minWidth: 140,
+            slot: 'remark'
+          }
+        ],
         visible: false,
         loading: false,
         isUpdate: false,
@@ -201,31 +323,65 @@
         customerOptions: [],
         sourceCodeOptions: [],
         collectionTermsOptions: [],
+        accountingSubjectList: [],
         form: {
           id: null,
           code: '',
-          receiptDate: '',
-          amount: '',
-          accountSubject: '预收款项',
-          customerName: '',
-          sourceType: '销售订单',
+          advanceDate: '',
+          advanceTotalPrice: '',
+          accountingSubjectId: '1779719367139792005',
+          accountingSubjectCode: '2203',
+          contactName: '',
+          contactId: '',
+          sourceType: 3,
           sourceCode: '',
-          fundType: '预付款',
-          collectionTerms: '',
+          fundType: '1',
+          collectionConditionId: '',
           remark: '',
-          attachment: []
+          files: [],
+          detailList: []
         },
         rules: {
-          receiptDate: [{ required: true, message: '请选择预收日期', trigger: 'change' }],
-          amount: [{ required: true, message: '请输入预收金额', trigger: 'blur' }],
-          accountSubject: [{ required: true, message: '请选择会计科目', trigger: 'change' }],
-          customerName: [{ required: true, message: '请选择客户名称', trigger: 'change' }],
-          sourceType: [{ required: true, message: '请选择来源类型', trigger: 'change' }],
-          sourceCode: [{ required: true, message: '请选择来源编码', trigger: 'change' }],
-          fundType: [{ required: true, message: '请选择款项类型', trigger: 'change' }]
+          advanceDate: [
+            { required: true, message: '请选择预收日期', trigger: 'change' }
+          ],
+          advanceTotalPrice: [
+            { required: true, message: '请输入预收金额', trigger: 'blur' }
+          ],
+          accountingSubjectId: [
+            { required: true, message: '请选择会计科目', trigger: 'change' }
+          ],
+          contactName: [
+            { required: true, message: '请选择客户名称', trigger: 'change' }
+          ],
+          sourceType: [
+            { required: true, message: '请选择来源类型', trigger: 'change' }
+          ],
+          sourceCode: [
+            { required: true, message: '请选择来源编码', trigger: 'change' }
+          ],
+          fundType: [
+            { required: true, message: '请选择款项类型', trigger: 'change' }
+          ]
         }
       };
     },
+    computed: {
+      receivedAmount() {
+        const list = this.form.detailList || [];
+        return list
+          .reduce((sum, item) => {
+            const val = parseFloat(item.collectAmount);
+            return sum + (isNaN(val) ? 0 : val);
+          }, 0)
+          .toFixed(2);
+      },
+      unreceivedAmount() {
+        const total = parseFloat(this.form.advanceTotalPrice) || 0;
+        const received = parseFloat(this.receivedAmount) || 0;
+        return (total - received).toFixed(2);
+      }
+    },
     methods: {
       generateCode() {
         const now = new Date();
@@ -236,15 +392,20 @@
         this.form.code = `YSK${year}${month}${day}${random}`;
       },
 
-      open(type, row) {
+      async open(type, row) {
         this.visible = true;
+        this.activeComp = 'main';
+        await this.getClassifyList(24, 'accountingSubjectList');
         this.isUpdate = type === 'edit';
         this.isDetail = type === 'detail';
         if ((this.isUpdate || this.isDetail) && row) {
-          this.form = { ...row };
+          this.form = await getAdvanceReceiptInfo(row.id);
+
           this.$nextTick(() => {
             this.$refs.inventoryTableDetailsRef &&
-              this.$refs.inventoryTableDetailsRef.putTableValue(row.productList || []);
+              this.$refs.inventoryTableDetailsRef.putTableValue(
+                this.form.productList || []
+              );
           });
         } else {
           this.resetForm();
@@ -253,26 +414,80 @@
             this.$refs.inventoryTableDetailsRef &&
               this.$refs.inventoryTableDetailsRef.putTableValue([]);
           });
+          this.form.accountingSubjectId = '1779719367139792005';
+          this.form.accountingSubjectCode = '2203';
         }
         this.$nextTick(() => {
           this.$refs.form && this.$refs.form.clearValidate();
         });
       },
+      changeSubjectInfo(val) {
+        const { code } = this.$refs.treeSelect.getNodeByValue(val);
+        this.form.accountingSubjectCode = code;
+      },
+      //获取分类管理中的数据
+      async getClassifyList(id, listName) {
+        let res = await getTreeByPid(id);
+        this[listName] = res.data;
+      },
+      async changeParent(obj) {
+        this.form.contactName = obj.name;
+        this.form.contactId = obj.id;
+      },
+
+      openSource() {
+        if (!this.form.contactName) {
+          this.$message.error('请选择客户');
+          return;
+        }
+        if (!this.form.sourceType) {
+          this.$message.error('请选择来源类型');
+          return;
+        }
+        if (this.form.sourceType == 3) {
+          this.$refs.saleOrderListDialogRef.open();
+        } else {
+          this.$refs.selectContractRef.open();
+        }
+      },
+      async changeOrder(row) {
+        this.form.sourceCode = row.orderNo;
+        this.form.sourceId = row.id;
+        const { productList, receiptPaymentList, payAmount } =
+          await getSaleOrderDetail(row.id);
 
+        this.$refs.inventoryTableDetailsRef.putTableValue({ productList });
+        this.form.advanceTotalPrice = payAmount;
+      },
+      async changeContract(row) {
+        console.log(row, 'dadas');
+        this.form.sourceCode = row.contractNumber;
+        this.form.sourceId = row.id;
+        const { productList, receiptPaymentList, contractVO } = await getDetail(
+          row.id
+        );
+
+        this.$refs.inventoryTableDetailsRef.putTableValue({ productList });
+        this.form.advanceTotalPrice = contractVO.discountTotalPrice;
+      },
       resetForm() {
         this.form = {
           id: null,
           code: '',
-          receiptDate: '',
-          amount: '',
-          accountSubject: '预收款项',
-          customerName: '',
-          sourceType: '销售订单',
+          advanceDate: '',
+          advanceTotalPrice: '',
+          accountingSubjectId: '1779719367139792005',
+          accountingSubjectCode: '2203',
+          contactName: '',
+          contactId: '',
+          sourceType: 3,
           sourceCode: '',
-          fundType: '预付款',
-          collectionTerms: '',
+          sourceId: '',
+          fundType: '1',
+          collectionConditionId: '',
           remark: '',
-          attachment: []
+          files: [],
+          detailList: []
         };
       },
 
@@ -281,13 +496,10 @@
           if (!valid) return;
           this.loading = true;
 
-          const productList = this.$refs.inventoryTableDetailsRef
-            ? this.$refs.inventoryTableDetailsRef.getTableValue()
-            : [];
-          const params = { ...this.form, productList };
-
-          const saveOrUpdate = this.isUpdate ? updateAdvanceReceipt : addAdvanceReceipt;
-          saveOrUpdate(params)
+          const saveOrUpdate = this.isUpdate
+            ? updateAdvanceReceipt
+            : addAdvanceReceipt;
+          saveOrUpdate(this.form)
             .then(() => {
               this.loading = false;
               this.$message.success(this.isUpdate ? '修改成功' : '新增成功');

+ 0 - 226
src/views/financialManage/advanceReceipt/components/detailDialog.vue

@@ -1,226 +0,0 @@
-<!-- 预收款详情弹窗 -->
-<template>
-  <ele-modal
-    custom-class="ele-dialog-form long-dialog-form"
-    :centered="true"
-    :visible="visible"
-    :title="title"
-    :close-on-click-modal="false"
-    append-to-body
-    width="60%"
-    :before-close="cancel"
-    :maxable="true"
-    :resizable="true"
-    @update:visible="cancel"
-  >
-    <div class="switch_left">
-      <ul>
-        <li
-          v-for="item in tabOptions"
-          :key="item.key"
-          :class="{ active: activeComp == item.key }"
-          @click="activeComp = item.key"
-        >
-          {{ item.name }}
-        </li>
-      </ul>
-    </div>
-    <div v-show="activeComp === 'main'">
-      <el-form ref="form" :model="form" class="el-form-box" label-width="140px">
-        <!-- 基本信息 -->
-        <headerTitle title="基本信息"></headerTitle>
-        <el-row :gutter="12">
-          <el-col :span="8">
-            <el-form-item label="预收日期">
-              <el-input v-model="form.receiptDate" disabled></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="预收金额">
-              <el-input v-model="form.amount" disabled>
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="会计科目">
-              <el-input v-model="form.accountSubject" disabled></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="12">
-          <el-col :span="8">
-            <el-form-item label="客户名称">
-              <el-input v-model="form.customerName" disabled></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="来源类型">
-              <el-input v-model="form.sourceType" disabled></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="来源编码">
-              <el-input v-model="form.sourceCode" disabled></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="12">
-          <el-col :span="8">
-            <el-form-item label="款项类型">
-              <el-input v-model="form.fundType" disabled></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="收款条件">
-              <el-input v-model="form.collectionTerms" disabled></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="12">
-          <el-col :span="8">
-            <el-form-item label="备注">
-              <el-input v-model="form.remark" disabled></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="附件">
-              <fileMain v-model="form.attachment" type="view"></fileMain>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <!-- 收款信息 -->
-        <headerTitle title="收款信息"></headerTitle>
-        <div style="margin: 10px 0; font-size: 14px; color: #606266;">
-          <span>预收金额:{{ form.amount || 0 }} 元</span>
-          <span style="margin-left: 20px;">已收金额:{{ receivedAmount }} 元</span>
-          <span style="margin-left: 20px;">未收金额:{{ unreceivedAmount }} 元</span>
-        </div>
-
-        <ele-pro-table
-          ref="table"
-          :needPage="false"
-          :columns="columns"
-          :datasource="form.collectList"
-          :toolkit="[]"
-        >
-          <template v-slot:attachment="{ row: r }">
-            <fileMain v-model="r.attachment" type="view" :limit="1"></fileMain>
-          </template>
-        </ele-pro-table>
-      </el-form>
-    </div>
-    <bpmDetail
-      v-if="activeComp === 'bpm' && form.processInstanceId"
-      :id="form.processInstanceId"
-    ></bpmDetail>
-    <div slot="footer" class="footer">
-      <el-button @click="cancel">返回</el-button>
-    </div>
-  </ele-modal>
-</template>
-
-<script>
-  import headerTitle from '@/components/header-title';
-  import fileMain from '@/components/addDoc/index.vue';
-  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
-  import { getAdvanceReceiptInfo } from '@/api/financialManage/advanceReceipt';
-
-  export default {
-    components: {
-      headerTitle,
-      fileMain,
-      bpmDetail
-    },
-    data() {
-      return {
-        visible: false,
-        activeComp: 'main',
-        title: '预收款详情',
-        tabOptions: [
-          { key: 'main', name: '预收款项详情' },
-          { key: 'bpm', name: '流程详情' }
-        ],
-        form: {
-          attachment: [],
-          collectList: []
-        },
-        columns: [
-          {
-            type: 'index',
-            label: '序号',
-            width: 55,
-            align: 'center',
-            fixed: 'left'
-          },
-          {
-            prop: 'collectTime',
-            label: '收款时间',
-            align: 'center',
-            minWidth: 160
-          },
-          {
-            prop: 'collectAmount',
-            label: '已收金额',
-            align: 'center',
-            minWidth: 140
-          },
-          {
-            prop: 'payType',
-            label: '支付类型',
-            align: 'center',
-            minWidth: 140
-          },
-          {
-            prop: 'attachment',
-            label: '附件',
-            align: 'center',
-            minWidth: 120,
-            slot: 'attachment'
-          },
-          {
-            prop: 'remark',
-            label: '备注',
-            align: 'center',
-            minWidth: 140
-          }
-        ]
-      };
-    },
-    computed: {
-      receivedAmount() {
-        const list = this.form.collectList || [];
-        return list.reduce((sum, item) => {
-          const val = parseFloat(item.collectAmount);
-          return sum + (isNaN(val) ? 0 : val);
-        }, 0).toFixed(2);
-      },
-      unreceivedAmount() {
-        const total = parseFloat(this.form.amount) || 0;
-        const received = parseFloat(this.receivedAmount) || 0;
-        return (total - received).toFixed(2);
-      }
-    },
-    methods: {
-      async open(row) {
-        this.visible = true;
-        this.activeComp = 'main';
-        try {
-          const data = await getAdvanceReceiptInfo(row.id);
-          this.form = data || { attachment: [], collectList: [] };
-        } catch (e) {
-          this.form = { attachment: [], collectList: [] };
-        }
-      },
-
-      cancel() {
-        this.visible = false;
-        this.form = { attachment: [], collectList: [] };
-      }
-    }
-  };
-</script>

+ 55 - 58
src/views/financialManage/advanceReceipt/index.vue

@@ -29,16 +29,13 @@
               新增
             </el-button>
           </template>
-
+          <template v-slot:code="{ row }">
+            <el-link type="primary" :underline="false" @click="openDetail(row)">
+              {{ row.code }}
+            </el-link>
+          </template>
           <!-- 操作列 -->
           <template v-slot:action="{ row }">
-            <el-link
-              type="primary"
-              :underline="false"
-              @click="openDetail(row)"
-            >
-              详情
-            </el-link>
             <template v-if="row.status === 0">
               <el-link
                 type="primary"
@@ -50,7 +47,7 @@
               <el-link
                 type="primary"
                 :underline="false"
-                @click="handleSubmit()"
+                @click="handleSubmit(row)"
               >
                 提交
               </el-link>
@@ -113,7 +110,6 @@
 
     <add-dialog ref="addDialogRef" @done="reload"></add-dialog>
     <collect-dialog ref="collectDialogRef" @done="reload"></collect-dialog>
-    <detail-dialog ref="detailDialogRef"></detail-dialog>
   </div>
 </template>
 
@@ -121,21 +117,18 @@
   import searchForm from './components/searchForm.vue';
   import addDialog from './components/addDialog.vue';
   import collectDialog from './components/collectDialog.vue';
-  import detailDialog from './components/detailDialog.vue';
   import tabMixins from '@/mixins/tableColumnsMixin';
-  import { paymentStatus } from '@/enum/dict';
+  import { paymentStatus, reviewStatus } from '@/enum/dict';
   import {
     advanceReceiptPageList,
-    deleteAdvanceReceipt
+    deleteAdvanceReceipt,submit,approve
   } from '@/api/financialManage/advanceReceipt';
-
   export default {
     mixins: [tabMixins],
     components: {
       searchForm,
       addDialog,
-      collectDialog,
-      detailDialog
+      collectDialog
     },
     data() {
       return {
@@ -160,34 +153,35 @@
           {
             prop: 'code',
             label: '预收款项编码',
+            slot: 'code',
             align: 'center',
             sortable: true,
             showOverflowTooltip: true,
             minWidth: 180
           },
           {
-            prop: 'customerName',
+            prop: 'contactName',
             label: '客户名称',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 160
           },
           {
-            prop: 'receiptDate',
+            prop: 'advanceDate',
             label: '预收日期',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 120
           },
           {
-            prop: 'amount',
+            prop: 'advanceTotalPrice',
             label: '预收金额',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 120
           },
           {
-            prop: 'confirmedAmount',
+            prop: 'confirmedTotalPrice',
             label: '预收款确收金额',
             align: 'center',
             showOverflowTooltip: true,
@@ -208,31 +202,34 @@
             minWidth: 140
           },
           {
-            prop: 'unreceivedAmount',
+            prop: 'uncollectedAdvanceAmount',
             label: '预收款未收金额',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 140
           },
           {
-            prop: 'transferToReceivableAmount',
+            prop: 'uncollectedToReceivableAmount',
             label: '未收转应收金额',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 140
           },
           {
-            prop: 'status',
+            prop: 'collectionStatus',
             label: '收款状态',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 100,
             formatter: (_row, _column, cellValue) => {
-              return paymentStatus.find(item => item.value == cellValue)?.label || '';
+              return (
+                paymentStatus.find((item) => item.value == cellValue)?.label ||
+                ''
+              );
             }
           },
           {
-            prop: 'completionStatus',
+            prop: 'status',
             label: '状态',
             align: 'center',
             showOverflowTooltip: true,
@@ -244,6 +241,16 @@
               return '';
             }
           },
+          {
+            prop: 'approvalStatus',
+            label: '审核状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              return reviewStatus[_row.approvalStatus];
+            }
+          },
           {
             columnKey: 'action',
             label: '操作',
@@ -260,32 +267,12 @@
     },
     methods: {
       /* 表格数据源 */
-      datasource() {
-        // TODO: 假数据,上线前删除
-        return Promise.resolve({
-          list: [
-            {
-              id: 1,
-              code: 'YSK20260604001',
-              customerName: '深圳市科技有限公司',
-              receiptDate: '2026-06-04',
-              amount: 50000.00,
-              confirmedAmount: 30000.00,
-              reconciledAmount: 20000.00,
-              unreconciledAmount: 10000.00,
-              unreceivedAmount: 20000.00,
-              transferToReceivableAmount: 0,
-              status: 2,
-              completionStatus: 0
-            }
-          ],
-          total: 1
+      datasource({ page, limit, where }) {
+        return advanceReceiptPageList({
+          pageNum: page,
+          size: limit,
+          ...where
         });
-        // return advanceReceiptPageList({
-        //   pageNum: page,
-        //   size: limit,
-        //   ...where
-        // });
       },
 
       /* 刷新表格 */
@@ -300,7 +287,7 @@
 
       // 查看详情
       openDetail(row) {
-        this.$refs.detailDialogRef.open(row);
+        this.$refs.addDialogRef.open('detail', row);
       },
 
       // 删除
@@ -312,11 +299,17 @@
       },
 
       // 提交
-      handleSubmit() {
-        this.$confirm('确定要提交该预收款吗?', '提示', { type: 'warning' }).then(() => {
-          // TODO: 调用提交接口
-          this.$message.success('提交成功');
-          this.reload();
+      handleSubmit(row) {
+        this.$confirm('确定要提交该预收款吗?', '提示', {
+          type: 'warning'
+        }).then(() => {
+          submit({
+            id: row.id
+          }).then((res) => {
+            // TODO: 调用提交接口
+            this.$message.success('提交成功');
+            this.reload();
+          });
         });
       },
 
@@ -327,7 +320,9 @@
 
       // 撤销
       handleRevoke() {
-        this.$confirm('确定要撤销该预收款吗?', '提示', { type: 'warning' }).then(() => {
+        this.$confirm('确定要撤销该预收款吗?', '提示', {
+          type: 'warning'
+        }).then(() => {
           // TODO: 调用撤销接口
           this.$message.success('撤销成功');
           this.reload();
@@ -336,7 +331,9 @@
 
       // 完结
       handleComplete() {
-        this.$confirm('确定要完结该预收款吗?', '提示', { type: 'warning' }).then(() => {
+        this.$confirm('确定要完结该预收款吗?', '提示', {
+          type: 'warning'
+        }).then(() => {
           // TODO: 调用完结接口
           this.$message.success('完结成功');
           this.reload();