Browse Source

Merge branch 'dev' into test

liujt 2 months ago
parent
commit
99a7615cf9

+ 1 - 1
src/api/financialManage/advanceReceipt/index.js

@@ -72,7 +72,7 @@ export async function withdraw(data) {
 }
 
 // 完结
-export async function complete(data) {
+export async function completeInfo(data) {
   const res = await request.post('/eom/finadvance/complete?id=' + data.id);
   if (res.data.code == 0) {
     return res.data.data;

+ 14 - 5
src/api/financialManage/prepayment/index.js

@@ -2,7 +2,7 @@ import request from '@/utils/request';
 
 // 预付款列表
 export async function prepaymentPageList(data) {
-  const res = await request.post('/eom/prepayment/page', data);
+  const res = await request.post('/eom/finprepay/page', data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -11,7 +11,7 @@ export async function prepaymentPageList(data) {
 
 // 预付款详情
 export async function getPrepaymentInfo(id) {
-  const res = await request.get(`/eom/prepayment/getById/${id}`);
+  const res = await request.get(`/eom/finprepay/getById/${id}`);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -20,7 +20,7 @@ export async function getPrepaymentInfo(id) {
 
 // 新增预付款
 export async function addPrepayment(data) {
-  const res = await request.post('/eom/prepayment/save', data);
+  const res = await request.post('/eom/finprepay/save', data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -29,7 +29,7 @@ export async function addPrepayment(data) {
 
 // 修改预付款
 export async function updatePrepayment(data) {
-  const res = await request.put('/eom/prepayment/update', data);
+  const res = await request.put('/eom/finprepay/update', data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -38,7 +38,16 @@ export async function updatePrepayment(data) {
 
 // 删除预付款
 export async function deletePrepayment(data) {
-  const res = await request.delete('/eom/prepayment/delete', { data });
+  const res = await request.delete('/eom/finprepay/delete', { data });
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 撤销
+export async function withdrawPrepayment(data) {
+  const res = await request.post(`/eom/finprepay/withdraw?id=${data.id}`);
   if (res.data.code == 0) {
     return res.data;
   }

+ 16 - 14
src/views/financialManage/advanceReceipt/components/addDialog.vue

@@ -187,7 +187,7 @@
         cacheKeyUrl="eos-advanceReceipt-inventoryTableDetails"
       ></inventoryTableDetails>
       <!-- 收款信息 -->
-      <div v-if="isDetail">
+      <div style="margin-top: 20px" v-if="isDetail">
         <headerTitle title="收款信息"></headerTitle>
         <div style="margin: 10px 0; font-size: 14px; color: #606266">
           <span>预收金额:{{ form.advanceTotalPrice || 0 }} 元</span>
@@ -206,8 +206,8 @@
           :datasource="form.detailList"
           :toolkit="[]"
         >
-          <template v-slot:attachment="{ row: r }">
-            <fileMain v-model="r.attachment" type="view" :limit="1"></fileMain>
+          <template v-slot:files="{ row: r }">
+            <fileMain v-model="r.files" type="view"></fileMain>
           </template>
         </ele-pro-table>
       </div>
@@ -242,7 +242,7 @@
       @changeParent="changeOrder"
     ></saleOrderListDialog>
     <!-- 收款条件 -->
-    <receiveTermsDialog ref="receiveTermsDialogRef" @changeParent="changeReceiveTerms"></receiveTermsDialog>
+    <receiveTermsDialog ref="receiveTermsDialogRef" conditionType="rules" @changeParent="changeReceiveTerms"></receiveTermsDialog>
     <bpmDetail
       v-if="activeComp === 'bpm' && form.processInstanceId"
       :id="form.processInstanceId"
@@ -293,32 +293,30 @@
             fixed: 'left'
           },
           {
-            prop: 'collectTime',
+            prop: 'receivedDate',
             label: '收款时间',
             align: 'center',
             minWidth: 160,
-            slot: 'collectTime'
           },
           {
-            prop: 'collectAmount',
+            prop: 'receivedTotalPrice',
             label: '已收金额',
             align: 'center',
             minWidth: 140,
-            slot: 'collectAmount'
+            slot: 'receivedTotalPrice'
           },
           {
-            prop: 'payType',
+            prop: 'paymentTypeName',
             label: '支付类型',
             align: 'center',
             minWidth: 140,
-            slot: 'payType'
           },
           {
-            prop: 'attachment',
+            prop: 'files',
             label: '附件',
             align: 'center',
             minWidth: 120,
-            slot: 'attachment'
+            slot: 'files'
           },
           {
             prop: 'remark',
@@ -343,6 +341,7 @@
           advanceTotalPrice: '',
           accountingSubjectId: '1779719367139792005',
           accountingSubjectCode: '2203',
+          accountingSubjectName: '预收账款',
           contactName: '',
           contactId: '',
           sourceType: 3,
@@ -384,7 +383,7 @@
         const list = this.form.detailList || [];
         return list
           .reduce((sum, item) => {
-            const val = parseFloat(item.collectAmount);
+            const val = parseFloat(item.receivedTotalPrice);
             return sum + (isNaN(val) ? 0 : val);
           }, 0)
           .toFixed(2);
@@ -436,14 +435,16 @@
           });
           this.form.accountingSubjectId = '1779719367139792005';
           this.form.accountingSubjectCode = '2203';
+          this.form.accountingSubjectName = '预收账款';
         }
         this.$nextTick(() => {
           this.$refs.form && this.$refs.form.clearValidate();
         });
       },
       changeSubjectInfo(val) {
-        const { code } = this.$refs.treeSelect.getNodeByValue(val);
+        const { code, name } = this.$refs.treeSelect.getNodeByValue(val);
         this.form.accountingSubjectCode = code;
+        this.form.accountingSubjectName = name;
       },
       //获取分类管理中的数据
       async getClassifyList(id, listName) {
@@ -502,6 +503,7 @@
           advanceTotalPrice: '',
           accountingSubjectId: '1779719367139792005',
           accountingSubjectCode: '2203',
+          accountingSubjectName: '预收账款',
           contactName: '',
           contactId: '',
           sourceType: 3,

+ 19 - 8
src/views/financialManage/advanceReceipt/components/collectDialog.vue

@@ -13,7 +13,7 @@
       <!-- 收款信息 -->
       <headerTitle title="收款信息" size="16px"></headerTitle>
       <div style="margin: 10px 0; font-size: 14px; color: #606266;">
-        <span>预收金额:{{ row.amount || 0 }} 元</span>
+        <span>预收金额:{{ row.advanceTotalPrice || 0 }} 元</span>
         <span style="margin-left: 20px;">已收金额:{{ receivedAmount }} 元</span>
         <span style="margin-left: 20px;">未收金额:{{ unreceivedAmount }} 元</span>
       </div>
@@ -123,6 +123,11 @@
   import headerTitle from '@/components/header-title';
   import fileMain from '@/components/addDoc/index.vue';
   import { saveDetailDetail } from '@/api/financialManage/advanceReceipt';
+  import {
+    addAdvanceReceipt,
+    updateAdvanceReceipt,
+    getAdvanceReceiptInfo
+  } from '@/api/financialManage/advanceReceipt';
 
   export default {
     components: {
@@ -133,6 +138,7 @@
       return {
         visible: false,
         loading: false,
+        info: {},
         row: {},
         form: {
           tableData: []
@@ -200,16 +206,17 @@
         }, 0).toFixed(2);
       },
       unreceivedAmount() {
-        const total = parseFloat(this.row.amount) || 0;
+        const total = parseFloat(this.row.advanceTotalPrice) || 0;
         const received = parseFloat(this.receivedAmount) || 0;
         return (total - received).toFixed(2);
       }
     },
     methods: {
-      open(row) {
+      async open(row) {
         this.visible = true;
         this.row = row || {};
-        this.form.tableData = [];
+        this.info = await getAdvanceReceiptInfo(row.id);
+        this.form.tableData = this.info.detailList || [];
       },
 
       addRow() {
@@ -258,10 +265,14 @@
         }
 
         this.loading = true;
-        saveDetailDetail({
-          // advanceId: this.row.id,
-          poList: this.form.tableData
-        }).then(() => {
+        const params = this.form.tableData.map(item => {
+          return {
+            ...item,
+            advanceId: this.row.id,
+            advanceCode: this.row.code,
+          }
+        })
+        saveDetailDetail(params).then(() => {
           this.loading = false;
           this.$message.success('收款成功');
           this.updateVisible(false);

+ 8 - 4
src/views/financialManage/advanceReceipt/components/receiveTermsDialog.vue

@@ -81,6 +81,10 @@
             type: Boolean,
             default: false
         },
+        conditionType: {
+            type: String,
+            default: ''
+        },
     },
     data() {
       return {
@@ -140,14 +144,14 @@
                 },
                 {
                     prop: 'name',
-                    label: '收款条件名称',
+                    label: this.conditionType === 'rules' ? '收款日计算日期' : '付款日条件名称',
                     align: 'center',
                     showOverflowTooltip: true,
                     minWidth: 160
                 },
                 {
                     prop: 'dateType',
-                    label: '收款日计算日期',
+                    label: this.conditionType === 'rules' ? '收款日计算日期' : '付款日计算日期',
                     align: 'center',
                     showOverflowTooltip: true,
                     minWidth: 160,
@@ -167,7 +171,7 @@
                 },
                 {
                     prop: 'determinationMethod',
-                    label: '收款日确认方式',
+                    label: this.conditionType === 'rules' ? '收款日确认方式' : '付款日确认方式',
                     align: 'center',
                     showOverflowTooltip: true,
                     minWidth: 140,
@@ -231,7 +235,7 @@
         const res = await receiveTermsPageList({
           pageNum: page,
           size: limit,
-          conditionConfigurationType: 'rules',
+          conditionConfigurationType: this.conditionType,
           ruleState: 1,
           ...where
         });

+ 59 - 4
src/views/financialManage/advanceReceipt/index.vue

@@ -20,6 +20,7 @@
           <!-- 表头工具栏 -->
           <template v-slot:toolbar>
             <el-button
+              v-if="$hasPermission('eom:finadvance:save')"
               size="small"
               type="primary"
               icon="el-icon-plus"
@@ -83,7 +84,7 @@
                 收款
               </el-link>
               <el-link
-                v-if="$hasPermission('eom:finadvance:complete')"
+                v-if="$hasPermission('eom:finadvance:complete') && row.status == 0"
                 type="success"
                 :underline="false"
                 @click="handleComplete(row)"
@@ -112,7 +113,7 @@
   import { paymentStatus, reviewStatus } from '@/enum/dict';
   import {
     advanceReceiptPageList,
-    deleteAdvanceReceipt,submit,approve, withdraw, complete
+    deleteAdvanceReceipt,submit,approve, withdraw, completeInfo
   } from '@/api/financialManage/advanceReceipt';
   
   export default {
@@ -243,6 +244,60 @@
               return reviewStatus[_row.approvalStatus];
             }
           },
+          {
+            prop: 'accountingSubjectName',
+            label: '会计科目',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'sourceType',
+            label: '来源类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              if (cellValue === 2) return '合同';
+              if (cellValue === 3) return '销售订单';
+              return '';
+            }
+          },
+          {
+            prop: 'sourceCode',
+            label: '来源编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'fundTypeName',
+            label: '款项类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'collectionConditionName',
+            label: '收款条件',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'createUserName',
+            label: '创建人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
           {
             columnKey: 'action',
             label: '操作',
@@ -331,11 +386,11 @@
       },
 
       // 完结
-      handleComplete() {
+      handleComplete(row) {
         this.$confirm('确定要完结该预收款吗?', '提示', {
           type: 'warning'
         }).then(() => {
-          complete({
+          completeInfo({
             id: row.id
           }).then((res) => {
             // TODO: 调用完结接口

+ 350 - 69
src/views/financialManage/prepayment/components/addDialog.vue

@@ -9,19 +9,32 @@
     :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="paymentDate">
+          <el-form-item label="预付日期:" prop="prepayDate">
             <el-date-picker
-              v-model="form.paymentDate"
+              v-model="form.prepayDate"
               type="date"
               placeholder="请选择"
               value-format="yyyy-MM-dd"
@@ -31,9 +44,9 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="预付金额:" prop="amount">
+          <el-form-item label="预付金额:" prop="prepayTotalPrice">
             <el-input
-              v-model="form.amount"
+              v-model="form.prepayTotalPrice"
               placeholder="请输入"
               :disabled="isDetail"
             >
@@ -42,36 +55,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="supplierName">
-            <el-select
-              v-model="form.supplierName"
+          <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 supplierOptions"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
+            />
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -82,13 +94,14 @@
               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-select
               v-model="form.sourceCode"
               placeholder="请选择"
               style="width: 100%"
@@ -101,7 +114,15 @@
                 :label="item.label"
                 :value="item.value"
               />
-            </el-select>
+            </el-select> -->
+            <el-input
+              clearable
+              v-model="form.sourceCode"
+              @click.native="openSource"
+              placeholder="请选择"
+              :disabled="isDetail"
+              readonly
+            />
           </el-form-item>
         </el-col>
       </el-row>
@@ -109,20 +130,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="paymentTerms">
-            <el-select
-              v-model="form.paymentTerms"
+          <el-form-item label="付款条件:" prop="paymentConditionName">
+            <!-- <el-select
+              v-model="form.paymentConditionName"
               placeholder="请选择"
               style="width: 100%"
               :disabled="isDetail"
@@ -133,7 +153,15 @@
                 :label="item.label"
                 :value="item.value"
               />
-            </el-select>
+            </el-select> -->
+            <el-input
+              clearable
+              v-model="form.paymentConditionName"
+              @click.native="openReceiveTerms"
+              placeholder="请选择"
+              :disabled="isDetail"
+              readonly
+            />
           </el-form-item>
         </el-col>
       </el-row>
@@ -149,8 +177,8 @@
           </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>
@@ -164,6 +192,28 @@
         :isSelected="false"
         cacheKeyUrl="eos-prepayment-inventoryTableDetails"
       ></inventoryTableDetails>
+
+      <!-- 付款信息 -->
+       <div style="margin-top: 20px" v-if="isDetail">
+        <headerTitle title="付款信息"></headerTitle>
+        <div style="margin: 10px 0; font-size: 14px; color: #606266;">
+          <span>预付金额:{{ form.amount || 0 }} 元</span>
+          <span style="margin-left: 20px;">已付金额:{{ paidAmount }} 元</span>
+          <span style="margin-left: 20px;">未付金额:{{ unpaidAmount }} 元</span>
+        </div>
+
+        <ele-pro-table
+          ref="table"
+          :needPage="false"
+          :columns="columns"
+          :datasource="form.detailList"
+          :toolkit="[]"
+        >
+          <template v-slot:files="{ row: r }">
+            <fileMain v-model="r.files" type="view" :limit="1"></fileMain>
+          </template>
+        </ele-pro-table>
+       </div>
     </el-form>
 
     <template v-slot:footer>
@@ -171,12 +221,53 @@
         <el-button @click="updateVisible(false)">关闭</el-button>
       </template>
       <template v-else>
-        <el-button type="primary" :loading="loading" @click="save">
-          确定
+        <el-button type="primary" :loading="loading" @click="save(0)">
+          保存
+        </el-button>
+        <el-button type="primary" :loading="loading" @click="save(1)">
+          提交
         </el-button>
         <el-button @click="updateVisible(false)">取消</el-button>
       </template>
     </template>
+    <contractListDialog
+      ref="selectContractRef"
+      @changeParent="changeContract"
+      :isChange="true"
+      :type="2"
+      :contactData="{
+        id: form.contactId
+      }"
+    ></contractListDialog>
+    <!-- 采购订单   -->
+    <orderListDialog
+      ref="orderListDialogRef"
+      :isMy="true"
+      :contactData="{
+        id: form.contactId
+      }"
+      @changeParent="changeOrder"
+    ></orderListDialog>
+    <!-- 供应商 -->
+    <parentList
+      ref="parentRef"
+      @changeParent="changeParent"
+      :classType="2"
+    ></parentList>
+    <!-- 付款条件 -->
+    <receiveTermsDialog ref="receiveTermsDialogRef" conditionType="terms" @changeParent="changeReceiveTerms"></receiveTermsDialog>
+    <bpmDetail
+      v-if="activeComp === 'bpm' && form.processInstanceId"
+      :id="form.processInstanceId"
+    ></bpmDetail>
+
+    <process-submit-dialog
+      :isNotNeedProcess="false"
+      :processSubmitDialogFlag.sync="processSubmitDialogFlag"
+      v-if="processSubmitDialogFlag"
+      ref="processSubmitDialogRef"
+      @reload="reload"
+    ></process-submit-dialog>
   </ele-modal>
 </template>
 
@@ -184,46 +275,113 @@
   import headerTitle from '@/components/header-title';
   import inventoryTableDetails from '@/BIZComponents/inventoryTableDetails.vue';
   import fileMain from '@/components/addDoc/index.vue';
-  import { addPrepayment, updatePrepayment } from '@/api/financialManage/prepayment';
+  import { addPrepayment, updatePrepayment, getPrepaymentInfo } from '@/api/financialManage/prepayment';
+  import { getTreeByPid } from '@/api/classifyManage';
+  import parentList from '@/views/purchasingManage/supplierManage/components/parentList.vue';
+  import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
+  import orderListDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/orderListDialog.vue';
+  import { getByIdCondition } from '@/api/purchasingManage/purchaseOrder';
+  import receiveTermsDialog from '@/views/financialManage/advanceReceipt/components/receiveTermsDialog.vue';
+  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
+  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
 
   export default {
     components: {
       headerTitle,
       inventoryTableDetails,
-      fileMain
+      fileMain,
+      parentList,
+      contractListDialog,
+      orderListDialog,
+      receiveTermsDialog,
+      bpmDetail,
+      processSubmitDialog
     },
     data() {
       return {
+        activeComp: 'main',
         visible: false,
         loading: false,
         isUpdate: false,
         isDetail: false,
+        processSubmitDialogFlag: false,
         supplierOptions: [],
         sourceCodeOptions: [],
         paymentTermsOptions: [],
+        accountingSubjectList: [],
+        businessId: '',
+        tabOptions: [
+          { key: 'main', name: '预付款项' },
+          { key: 'bpm', name: '流程详情' }
+        ],
         form: {
           id: null,
           code: '',
-          paymentDate: '',
-          amount: '',
-          accountSubject: '预付款项',
-          supplierName: '',
-          sourceType: '采购订单',
+          prepayDate: '',
+          prepayTotalPrice: '',
+          accountingSubjectId: '1779719367139791007',
+          accountingSubjectCode: '1123',
+          accountingSubjectName: '预付账款',
+          contactName: '',
+          contactId: '',
+          sourceType: 3,
           sourceCode: '',
-          fundType: '预付款',
-          paymentTerms: '',
+          sourceId: '',
+          fundType: 1,
+          paymentConditionName: '',
+          paymentConditionId: '',
           remark: '',
-          attachment: []
+          files: []
         },
         rules: {
-          paymentDate: [{ required: true, message: '请选择预付日期', trigger: 'change' }],
-          amount: [{ required: true, message: '请输入预付金额', trigger: 'blur' }],
-          accountSubject: [{ required: true, message: '请选择会计科目', trigger: 'change' }],
-          supplierName: [{ required: true, message: '请选择供应商名称', trigger: 'change' }],
+          prepayDate: [{ required: true, message: '请选择预付日期', trigger: 'change' }],
+          prepayTotalPrice: [{ 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' }]
-        }
+        },
+        columns: [
+          {
+            type: 'index',
+            label: '序号',
+            width: 55,
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            prop: 'paidDate',
+            label: '付款时间',
+            align: 'center',
+            minWidth: 160
+          },
+          {
+            prop: 'paidTotalPrice',
+            label: '已付金额',
+            align: 'center',
+            minWidth: 140
+          },
+          {
+            prop: 'paymentTypeName',
+            label: '支付类型',
+            align: 'center',
+            minWidth: 140
+          },
+          {
+            prop: 'files',
+            label: '附件',
+            align: 'center',
+            minWidth: 120,
+            slot: 'files'
+          },
+          {
+            prop: 'remark',
+            label: '备注',
+            align: 'center',
+            minWidth: 140
+          }
+        ]
       };
     },
     methods: {
@@ -236,47 +394,124 @@
         this.form.code = `YFK${year}${month}${day}${random}`;
       },
 
-      open(type, row) {
+      async open(type, row) {
         this.visible = true;
+        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 getPrepaymentInfo(row.id);
+          this.businessId = row.id;
           this.$nextTick(() => {
             this.$refs.inventoryTableDetailsRef &&
-              this.$refs.inventoryTableDetailsRef.putTableValue(row.productList || []);
+              this.$refs.inventoryTableDetailsRef.putTableValue(this.form || []);
           });
         } else {
           this.resetForm();
-          this.generateCode();
+          // this.generateCode();
           this.$nextTick(() => {
             this.$refs.inventoryTableDetailsRef &&
               this.$refs.inventoryTableDetailsRef.putTableValue([]);
           });
+          this.form.accountingSubjectId = '1779719367139791007';
+          this.form.accountingSubjectCode = '1123';
+          this.form.accountingSubjectName = '预付账款';
         }
         this.$nextTick(() => {
           this.$refs.form && this.$refs.form.clearValidate();
         });
       },
 
+      openReceiveTerms() {
+        this.$refs.receiveTermsDialogRef.open();
+      },
+
+      changeReceiveTerms(row, index) {
+        console.log('changeReceiveTerms~~~', row)
+        this.form.paymentConditionId = row.id;
+        this.form.paymentConditionName = row.name;
+        console.log('changeReceiveTerms!!!', this.form)
+        this.$forceUpdate()
+      },
+
+      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.prepayTotalPrice = contractVO.discountTotalPrice;
+      },
+
+      async changeOrder(row) {
+        this.form.sourceCode = row.orderNo;
+        this.form.sourceId = row.id;
+        const { productList, receiptPaymentList, payAmount } =
+          await getByIdCondition(row.id, 2);
+
+        this.$refs.inventoryTableDetailsRef.putTableValue({ productList });
+        this.form.prepayTotalPrice = payAmount;
+      },
+
+      openSource() {
+        if (!this.form.contactName) {
+          this.$message.error('请选择供应商');
+          return;
+        }
+        if (!this.form.sourceType) {
+          this.$message.error('请选择来源类型');
+          return;
+        }
+        if (this.form.sourceType == 3) {
+          this.$refs.orderListDialogRef.open()
+        } else {
+          this.$refs.selectContractRef.open();
+        }
+      },
+
+      //获取分类管理中的数据
+      async getClassifyList(id, listName) {
+        let res = await getTreeByPid(id);
+        this[listName] = res.data;
+      },
+
+      changeSubjectInfo(val) {
+        const { code, name } = this.$refs.treeSelect.getNodeByValue(val);
+        this.form.accountingSubjectCode = code;
+        this.form.accountingSubjectName = name;
+      },
+
+      async changeParent(obj) {
+        this.form.contactName = obj.name;
+        this.form.contactId = obj.id;
+      },
+
       resetForm() {
         this.form = {
           id: null,
           code: '',
-          paymentDate: '',
-          amount: '',
-          accountSubject: '预付款项',
-          supplierName: '',
-          sourceType: '采购订单',
+          prepayDate: '',
+          prepayTotalPrice: '',
+          accountingSubjectId: '1779719367139791007',
+          accountingSubjectCode: '1123',
+          accountingSubjectName: '预付账款',
+          contactName: '',
+          contactId: '',
+          sourceType: 3,
           sourceCode: '',
-          fundType: '预付款',
-          paymentTerms: '',
+          sourceId: '',
+          fundType: 1,
+          paymentConditionName: '',
+          paymentConditionId: '',
           remark: '',
-          attachment: []
+          files: []
         };
       },
 
-      save() {
+      save(type) {
         this.$refs.form.validate((valid) => {
           if (!valid) return;
           this.loading = true;
@@ -291,6 +526,11 @@
             .then(() => {
               this.loading = false;
               this.$message.success(this.isUpdate ? '修改成功' : '新增成功');
+              console.log('sub', type)
+              if(type == 1) {
+                console.log('提交', res)
+                this.sub(res);
+              } 
               this.updateVisible(false);
               this.$emit('done');
             })
@@ -300,6 +540,47 @@
         });
       },
 
+      async sub(res) {
+        const data = await getPrepaymentInfo(
+          this.businessId || res
+        );
+        this.processSubmitDialogFlag = true;
+        let key = 'fin_prepay_approve';
+        this.$nextTick(() => {
+          let params = {
+            businessId: data.id,
+            businessKey: key,
+            formCreateUserId: data.createUserId,
+            variables: {
+              businessCode: data.code,
+              businessName: data.contactName,
+              fundType: data.fundTypeName,
+              sourceType: data.sourceType,
+              businessType: '预付款项'
+            }
+          };
+
+          this.$refs.processSubmitDialogRef.init(params);
+        });
+
+        // submit({
+        //   businessId: this.businessId || res,
+        //   receiveType: this.form.receiveType,
+        //   sourceType,
+        //   variables: {
+        //     storemanIds
+        //   }
+        // }).then((res) => {
+        //   this.cancel();
+        //   this.$emit('done');
+        // });
+      },
+
+      reload() {
+        this.updateVisible(false);
+        this.$emit('done');
+      },
+
       updateVisible(value) {
         this.visible = value;
         if (!value) {

+ 18 - 18
src/views/financialManage/prepayment/components/searchForm.vue

@@ -19,24 +19,24 @@
             type: 'input',
             placeholder: '编码、名称、型号、规格'
           },
-          {
-            label: '下拉检索:',
-            value: 'searchType',
-            type: 'select',
-            placeholder: '请选择',
-            planList: [
-              { label: '编码', value: 'code' },
-              { label: '名称', value: 'name' },
-              { label: '型号', value: 'model' },
-              { label: '规格', value: 'specification' }
-            ]
-          },
-          {
-            label: '关键词:',
-            value: 'searchName2',
-            type: 'input',
-            placeholder: '编码、名称、型号、规格'
-          },
+          // {
+          //   label: '下拉检索:',
+          //   value: 'searchType',
+          //   type: 'select',
+          //   placeholder: '请选择',
+          //   planList: [
+          //     { label: '编码', value: 'code' },
+          //     { label: '名称', value: 'name' },
+          //     { label: '型号', value: 'model' },
+          //     { label: '规格', value: 'specification' }
+          //   ]
+          // },
+          // {
+          //   label: '关键词:',
+          //   value: 'searchName2',
+          //   type: 'input',
+          //   placeholder: '编码、名称、型号、规格'
+          // },
           {
             label: '创建时间:',
             value: 'createTime',

+ 154 - 62
src/views/financialManage/prepayment/index.vue

@@ -20,6 +20,7 @@
           <!-- 表头工具栏 -->
           <template v-slot:toolbar>
             <el-button
+              v-if="$hasPermission('eom:finprepay:save')"
               size="small"
               type="primary"
               icon="el-icon-plus"
@@ -30,17 +31,17 @@
             </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">
+            <template v-if="row.approvalStatus === 0">
               <el-link
+                v-if="$hasPermission('eom:finprepay:update')"
                 type="primary"
                 :underline="false"
                 @click="openEdit('edit', row)"
@@ -48,6 +49,7 @@
                 修改
               </el-link>
               <el-link
+                v-if="$hasPermission('eom:finprepay:submit')"
                 type="primary"
                 :underline="false"
                 @click="handleSubmit(row)"
@@ -55,6 +57,7 @@
                 提交
               </el-link>
               <el-popconfirm
+                v-if="$hasPermission('eom:finprepay:delete')"
                 class="ele-action"
                 title="确定要删除此信息吗?"
                 @confirm="remove([row.id])"
@@ -64,15 +67,9 @@
                 </template>
               </el-popconfirm>
             </template>
-            <template v-else-if="row.status === 1">
-              <el-link
-                type="primary"
-                :underline="false"
-                @click="handlePay(row)"
-              >
-                付款
-              </el-link>
+            <template v-else-if="row.approvalStatus === 1">
               <el-link
+                v-if="$hasPermission('eom:finprepay:withdraw')"
                 type="warning"
                 :underline="false"
                 @click="handleRevoke(row)"
@@ -80,7 +77,7 @@
                 撤销
               </el-link>
             </template>
-            <template v-else-if="row.status === 2">
+            <template v-else-if="row.approvalStatus === 2">
               <el-link
                 type="primary"
                 :underline="false"
@@ -89,6 +86,7 @@
                 付款
               </el-link>
               <el-link
+                v-if="$hasPermission('eom:finprepay:complete')"
                 type="success"
                 :underline="false"
                 @click="handleComplete(row)"
@@ -107,6 +105,14 @@
     <add-dialog ref="addDialogRef" @done="reload"></add-dialog>
     <pay-dialog ref="payDialogRef" @done="reload"></pay-dialog>
     <detail-dialog ref="detailDialogRef"></detail-dialog>
+    <process-submit-dialog
+      :isNotNeedProcess="false"
+      :processSubmitDialogFlag.sync="processSubmitDialogFlag"
+      isCloseRefresh="false"
+      v-if="processSubmitDialogFlag"
+      ref="processSubmitDialogRef"
+      @reload="reload"
+    ></process-submit-dialog>
   </div>
 </template>
 
@@ -116,11 +122,14 @@
   import payDialog from './components/payDialog.vue';
   import detailDialog from './components/detailDialog.vue';
   import tabMixins from '@/mixins/tableColumnsMixin';
-  import { paymentType } from '@/enum/dict';
+  import { paymentType, reviewStatus } from '@/enum/dict';
   import {
     prepaymentPageList,
-    deletePrepayment
+    deletePrepayment,
+    getPrepaymentInfo,
+    withdrawPrepayment
   } from '@/api/financialManage/prepayment';
+  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
 
   export default {
     mixins: [tabMixins],
@@ -128,12 +137,14 @@
       searchForm,
       addDialog,
       payDialog,
-      detailDialog
+      detailDialog,
+      processSubmitDialog
     },
     data() {
       return {
         selection: [],
         loading: false,
+        processSubmitDialogFlag: false,
         columns: [
           {
             width: 45,
@@ -155,32 +166,33 @@
             label: '预付款项编码',
             align: 'center',
             sortable: true,
+            slot: 'code',
             showOverflowTooltip: true,
             minWidth: 180
           },
           {
-            prop: 'supplierName',
+            prop: 'contactName',
             label: '供应商名称',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 160
           },
           {
-            prop: 'paymentDate',
+            prop: 'prepayDate',
             label: '预付日期',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 120
           },
           {
-            prop: 'amount',
+            prop: 'prepayTotalPrice',
             label: '预付金额',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 120
           },
           {
-            prop: 'confirmedAmount',
+            prop: 'confirmedTotalPrice',
             label: '预付款确付金额',
             align: 'center',
             showOverflowTooltip: true,
@@ -201,21 +213,21 @@
             minWidth: 140
           },
           {
-            prop: 'unpaidAmount',
+            prop: 'unpaidAdvanceAmount',
             label: '预付款未付金额',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 140
           },
           {
-            prop: 'transferToPayableAmount',
+            prop: 'unpaidToPayableAmount',
             label: '未付转应付金额',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 140
           },
           {
-            prop: 'status',
+            prop: 'paymentStatus',
             label: '付款状态',
             align: 'center',
             showOverflowTooltip: true,
@@ -224,6 +236,83 @@
               return paymentType.find(item => item.value == cellValue)?.label || '';
             }
           },
+          {
+            prop: 'status',
+            label: '状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              if (cellValue === 0) return '未完结';
+              if (cellValue === 1) return '已完结';
+              if (cellValue === 2) return '已完结转应收';
+              return '';
+            }
+          },
+          {
+            prop: 'approvalStatus',
+            label: '审核状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              return reviewStatus[_row.approvalStatus];
+            }
+          },
+          {
+            prop: 'accountingSubjectName',
+            label: '会计科目',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'sourceTyp',
+            label: '来源类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              if (cellValue === 2) return '合同';
+              if (cellValue === 3) return '采购订单';
+              return '';
+            }
+          },
+          {
+            prop: 'sourceCode',
+            label: '来源编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'fundTypeName',
+            label: '款项类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'paymentConditionName',
+            label: '付款条件',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'createUserName',
+            label: '创建人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
           {
             columnKey: 'action',
             label: '操作',
@@ -240,32 +329,12 @@
     },
     methods: {
       /* 表格数据源 */
-      datasource() {
-        // TODO: 假数据,上线前删除
-        return Promise.resolve({
-          list: [
-            {
-              id: 1,
-              code: 'YFK20260604001',
-              supplierName: '广州供应商有限公司',
-              paymentDate: '2026-06-04',
-              amount: 80000.00,
-              confirmedAmount: 50000.00,
-              reconciledAmount: 30000.00,
-              unreconciledAmount: 20000.00,
-              unpaidAmount: 30000.00,
-              transferToPayableAmount: 0,
-              status: 2,
-              completionStatus: 0
-            }
-          ],
-          total: 1
+      datasource({ page, limit, where }) {
+        return prepaymentPageList({
+          pageNum: page,
+          size: limit,
+          ...where
         });
-        // return prepaymentPageList({
-        //   pageNum: page,
-        //   size: limit,
-        //   ...where
-        // });
       },
 
       /* 刷新表格 */
@@ -280,7 +349,7 @@
 
       // 查看详情
       openDetail(row) {
-        this.$refs.detailDialogRef.open(row);
+        this.$refs.addDialogRef.open('detail', row);
       },
 
       // 删除
@@ -292,12 +361,31 @@
       },
 
       // 提交
-      handleSubmit() {
-        this.$confirm('确定要提交该预付款吗?', '提示', { type: 'warning' }).then(() => {
-          // TODO: 调用提交接口
-          this.$message.success('提交成功');
-          this.reload();
+      async handleSubmit(res) {
+        // this.$confirm('确定要提交该预付款吗?', '提示', { type: 'warning' }).then(() => {
+        //   // TODO: 调用提交接口
+        //   this.$message.success('提交成功');
+        //   this.reload();
+        // });
+        const data = await getPrepaymentInfo(res.id);
+
+        this.processSubmitDialogFlag = true;
+        let key = 'fin_prepay_approve';
+        this.$nextTick(() => {
+          let params = {
+            businessId: data.id,
+            businessKey: key,
+            formCreateUserId: data.createUserId,
+            variables: {
+              businessCode: data.code,
+              fundType: data.fundTypeName,
+              sourceType: data.sourceType,
+              businessType: '预付款项'
+            }
+          };
+          this.$refs.processSubmitDialogRef.init(params);
         });
+      
       },
 
       // 付款
@@ -306,12 +394,16 @@
       },
 
       // 撤销
-      handleRevoke() {
+      handleRevoke(row) {
         this.$confirm('确定要撤销该预付款吗?', '提示', { type: 'warning' }).then(() => {
           // TODO: 调用撤销接口
-          this.$message.success('撤销成功');
-          this.reload();
-        });
+          withdrawPrepayment({
+            id: row.id
+          }).then(() => {
+            this.$message.success('撤销成功');
+            this.reload();
+          });
+        })
       },
 
       // 完结

+ 4 - 4
src/views/purchasingManage/purchaseOrder/components/addDialogNew.vue

@@ -2280,10 +2280,10 @@
             return;
           }
 
-          if (is) {
-            this.$message.error('同产品,工序、批次号、颜色不能完全一致!');
-            return;
-          }
+          // if (is) {
+          //   this.$message.error('同产品,工序、批次号、颜色不能完全一致!');
+          //   return;
+          // }
           let productList = [
             ...tabList,
             ...rawDetailList.map((item) => {

+ 4 - 4
src/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog.vue

@@ -534,10 +534,10 @@
             });
           });
 
-          if (is) {
-            this.$message.error('同产品,工序、批次号、颜色不能完全一致!');
-            return;
-          }
+          // if (is) {
+          //   this.$message.error('同产品,工序、批次号、颜色不能完全一致!');
+          //   return;
+          // }
           if (this.isUpdate) {
             UpdateReceiveInformation(commitData)
               .then(async (res) => {

+ 4 - 1
src/views/saleManage/saleOrder/invoice/index.vue

@@ -578,8 +578,11 @@
     },
     computed: {
       exportParams() {
+        const temp = JSON.parse(JSON.stringify(this.params));
+        delete temp.size;
+        delete temp.pageNum;
         return {
-          ...this.params,
+          ...temp,
           sendRecordIds: this.selection.map(item => item.id)
         }
       }