Jelajahi Sumber

feat: 预付管理功能

liujt 2 hari lalu
induk
melakukan
644ac3e755

+ 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;

+ 5 - 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,7 @@ 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;
   }

+ 10 - 12
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>
@@ -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',
@@ -384,7 +382,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);

+ 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);

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

@@ -83,7 +83,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 +112,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 {
@@ -331,11 +331,11 @@
       },
 
       // 完结
-      handleComplete() {
+      handleComplete(row) {
         this.$confirm('确定要完结该预收款吗?', '提示', {
           type: 'warning'
         }).then(() => {
-          complete({
+          completeInfo({
             id: row.id
           }).then((res) => {
             // TODO: 调用完结接口

+ 75 - 46
src/views/financialManage/prepayment/components/addDialog.vue

@@ -19,9 +19,9 @@
       <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 +31,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,24 +42,29 @@
           </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-form-item label="供应商名称:" prop="contactName">
             <el-select
-              v-model="form.supplierName"
+              v-model="form.contactName"
               placeholder="请选择"
               style="width: 100%"
               :disabled="isDetail"
@@ -82,7 +87,8 @@
               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>
@@ -109,20 +115,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-form-item label="付款条件:" prop="paymentConditionName">
             <el-select
-              v-model="form.paymentTerms"
+              v-model="form.paymentConditionName"
               placeholder="请选择"
               style="width: 100%"
               :disabled="isDetail"
@@ -149,8 +154,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" :disabled="isDetail"></fileMain>
           </el-form-item>
         </el-col>
       </el-row>
@@ -185,6 +190,7 @@
   import inventoryTableDetails from '@/BIZComponents/inventoryTableDetails.vue';
   import fileMain from '@/components/addDoc/index.vue';
   import { addPrepayment, updatePrepayment } from '@/api/financialManage/prepayment';
+  import { getTreeByPid } from '@/api/classifyManage';
 
   export default {
     components: {
@@ -201,25 +207,30 @@
         supplierOptions: [],
         sourceCodeOptions: [],
         paymentTermsOptions: [],
+        accountingSubjectList: [],
         form: {
           id: null,
           code: '',
-          paymentDate: '',
-          amount: '',
-          accountSubject: '预付款项',
-          supplierName: '',
-          sourceType: '采购订单',
+          prepayDate: '',
+          prepayTotalPrice: '',
+          accountingSubjectId: '1779719367139791007',
+          accountingSubjectCode: '1123',
+          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' }]
@@ -236,8 +247,9 @@
         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) {
@@ -248,31 +260,48 @@
           });
         } else {
           this.resetForm();
-          this.generateCode();
+          // this.generateCode();
           this.$nextTick(() => {
             this.$refs.inventoryTableDetailsRef &&
               this.$refs.inventoryTableDetailsRef.putTableValue([]);
           });
+          this.form.accountingSubjectId = '1779719367139792005';
+          this.form.accountingSubjectCode = '2203';
         }
         this.$nextTick(() => {
           this.$refs.form && this.$refs.form.clearValidate();
         });
       },
 
+      //获取分类管理中的数据
+      async getClassifyList(id, listName) {
+        let res = await getTreeByPid(id);
+        this[listName] = res.data;
+      },
+
+      changeSubjectInfo(val) {
+        const { code } = this.$refs.treeSelect.getNodeByValue(val);
+        this.form.accountingSubjectCode = code;
+      },
+
       resetForm() {
         this.form = {
           id: null,
           code: '',
-          paymentDate: '',
-          amount: '',
-          accountSubject: '预付款项',
-          supplierName: '',
-          sourceType: '采购订单',
+          prepayDate: '',
+          prepayTotalPrice: '',
+          accountingSubjectId: '1779719367139791007',
+          accountingSubjectCode: '1123',
+          contactName: '',
+          contactId: '',
+          sourceType: 3,
           sourceCode: '',
-          fundType: '预付款',
-          paymentTerms: '',
+          sourceId: '',
+          fundType: 1,
+          paymentConditionName: '',
+          paymentConditionId: '',
           remark: '',
-          attachment: []
+          files: []
         };
       },
 

+ 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',

+ 5 - 25
src/views/financialManage/prepayment/index.vue

@@ -240,32 +240,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
-        // });
       },
 
       /* 刷新表格 */

+ 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) => {