Explorar o código

预付款功能开发

jingbb hai 4 meses
pai
achega
89add3fb51

+ 10 - 10
src/views/saleCode/advancePayment/advancePaymentForm.api.ts

@@ -4,16 +4,16 @@ import { useMessage } from "/@/hooks/web/useMessage";
 const { createConfirm } = useMessage();
 
 enum Api {
-  list = '/saleCode/saleQuotation/list',
-  save='/saleCode/saleQuotation/add',
-  edit='/saleCode/saleQuotation/edit',
-  deleteOne = '/saleCode/saleQuotation/delete',
-  deleteBatch = '/saleCode/saleQuotation/deleteBatch',
-  importExcel = '/saleCode/saleQuotation/importExcel',
-  exportXls = '/saleCode/saleQuotation/exportXls',
-  queryDataById = '/saleCode/saleQuotation/queryById',
-  submitBatch='/saleCode/saleQuotation/submitBatch',
-  cancelSubmitBatch='/saleCode/saleQuotation/returnSubmitBatch',
+  list = '/saleCode/saleAdvancePayment/list',
+  save='/saleCode/saleAdvancePayment/add',
+  edit='/saleCode/saleAdvancePayment/edit',
+  deleteOne = '/saleCode/saleAdvancePayment/delete',
+  deleteBatch = '/saleCode/saleAdvancePayment/deleteBatch',
+  importExcel = '/saleCode/saleAdvancePayment/importExcel',
+  exportXls = '/saleCode/saleAdvancePayment/exportXls',
+  queryDataById = '/saleCode/saleAdvancePayment/queryById',
+  submitBatch='/saleCode/saleAdvancePayment/submitBatch',
+  cancelSubmitBatch='/saleCode/saleAdvancePayment/returnSubmitBatch',
 }
 /**
  * 导出api

+ 9 - 5
src/views/saleCode/advancePayment/advancePaymentForm.data.ts

@@ -32,13 +32,13 @@ export const columns: BasicColumn[] = [
     align:"center",
     ellipsis:true,
     width:200,
-    dataIndex: 'saleOrderNumber'
+    dataIndex: 'saleOrder'
    },
    {
     title: '客户(customer)',
     align:"center",
     ellipsis:true,
-    dataIndex: 'customer'
+    dataIndex: 'customerName'
    },
    {
     title: 'F号(F number)',
@@ -51,7 +51,7 @@ export const columns: BasicColumn[] = [
     align:"center",
     width:250,
     ellipsis:true,
-    dataIndex: 'paymentAmount'
+    dataIndex: 'advanceAmount'
    },
    {
     title: '订单金额(order amount)',
@@ -59,11 +59,15 @@ export const columns: BasicColumn[] = [
     dataIndex: 'orderAmount'
    },
    {
-    title: '预比例(advance payment ratio)',
+    title: '预比例(advance payment ratio)',
     align:"center",
     width:250,
     ellipsis:true,
-    dataIndex: 'advancePaymentRatio'
+    dataIndex: 'advanceRatio',
+    customRender:({text}) =>{
+      text = !text ? "" : text+'%';
+      return text;
+    },
    },
    {
     title: '提交(submit)',

+ 7 - 7
src/views/saleCode/advancePayment/advancePaymentList.vue

@@ -18,21 +18,21 @@
             </a-col>          
             <template v-if="toggleSearchStatus">
               <a-col :lg="8">
-                <a-form-item name="project">
+                <a-form-item name="projectName">
                   <template #label><span title="项目(project)">项目(project)</span></template>
-                  <a-input v-model:value="queryParam.project" placeholder="请输入" AutoComplete="off"/>
+                  <a-input v-model:value="queryParam.projectName" placeholder="请输入" AutoComplete="off"/>
                 </a-form-item>
               </a-col>
               <a-col :lg="8">
-                <a-form-item name="customer">
+                <a-form-item name="customerName">
                   <template #label><span title="客户(customer)">客户(customer)</span></template>
                   <a-input placeholder="请输入" v-model:value="queryParam.customerName" allow-clear AutoComplete="off"></a-input>
                 </a-form-item>
               </a-col>
               <a-col :lg="8">
-                <a-form-item name="saleOrderCode">
+                <a-form-item name="saleOrder">
                   <template #label><span title="订单编号(sale order code)">订单编号(sale order code)</span></template>
-                  <a-input placeholder="请输入" v-model:value="queryParam.saleOrderCode" allow-clear AutoComplete="off"></a-input>
+                  <a-input placeholder="请输入" v-model:value="queryParam.saleOrder" allow-clear AutoComplete="off"></a-input>
                 </a-form-item>
               </a-col>
               <a-col :lg="8">
@@ -120,7 +120,7 @@
      //注册table数据
     const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
         tableProps:{
-             title: '预款',
+             title: '预款',
              api: list,
              columns,
              canResize:false,
@@ -138,7 +138,7 @@
              },
           },
           exportConfig: {
-              name:"预款",
+              name:"预款",
               url: getExportUrl,
               params: queryParam,
           },

+ 268 - 0
src/views/saleCode/advancePayment/components/SelectSaleOrderMianModal.vue

@@ -0,0 +1,268 @@
+<template>
+    <a-modal
+      title="选择销售订单(Select Sale Order)"
+      width="95%"
+      :visible="visible"
+      :maskClosable="false"
+      switchFullscreen
+      @ok = "handleOk"
+      @cancel="handleCancel">
+        <div>
+          <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
+            <div class="table-page-search-wrapper">
+                <a-form :model="queryParams" :label-col="labelCol" :wrapper-col="wrapperCol" @keyup.enter.native="searchQuery">
+                <a-row :gutter="24">
+                    <a-col :md="6" :sm="8">
+                        <a-form-item label="订单编号(bill code)">
+                            <a-input placeholder="请输入" v-model:value="queryParams.billCode"></a-input>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="8">
+                        <a-form-item label="单据日期(bill date)">
+                            <a-range-picker value-format="YYYY-MM-DD"  v-model:value="billDate"  @change="changeBillDate" class="query-group-cust"/>
+                        </a-form-item>
+                    </a-col> 
+                    <template v-if="toggleSearchStatus">
+                        <a-col :md="6" :sm="8">
+                            <a-form-item label="项目(project)">
+                                <ApiSelect
+                                    :api="projectListList"
+                                    showSearch
+                                    v-model:value="queryParams.project"
+                                    optionFilterProp="label"
+                                    resultField="records"
+                                    labelField="name"
+                                    valueField="id"
+                                    />
+                            </a-form-item>
+                        </a-col>                 
+                    </template>
+                    <a-col :md="6" :sm="8">
+                        <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+                            <a-button type="primary" @click="searchQuery" >查询(search)</a-button>
+                            <a-button type="primary" @click="searchReset"  style="margin-left: 8px">重置(reset)</a-button>
+                            <a @click="handleToggleSearch" style="margin-left: 8px">
+                            {{ toggleSearchStatus ? '收起' : '展开' }}
+                            <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
+                            </a>
+                        </span>
+                    </a-col>
+                </a-row>
+            </a-form>
+           </div>
+        </a-card>
+
+        <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
+            <a-alert type="info" show-icon class="alert" style="margin-bottom: 8px">
+            <template #message>
+                <template v-if="selectedRowKeys.length > 0">
+                <span>已选中 {{ selectedRowKeys.length }} 条记录</span>
+                <a-divider type="vertical" />
+                <a @click="selectedRowKeys = []">清空</a>
+                </template>
+                <template v-else>
+                <span>未选中任何数据</span>
+                </template>
+            </template>
+            </a-alert>
+            <a-table
+                :columns="columns"
+                :row-key="record => record.id"
+                :data-source="dataSource"
+                bordered
+                size="small"
+                @change="handleTableChange"
+                :pagination="pagination"
+                :scroll="{ x: 1500, y: 300 }"
+                :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+            >
+            </a-table>
+        </a-card>
+      </div>
+    </a-modal>
+</template>
+<script lang="ts" setup>
+    import {ref, reactive } from 'vue';
+    import { defHttp} from '/@/utils/http/axios';
+    import { message } from 'ant-design-vue';
+    import { filterObj, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
+    import {  ApiSelect, } from '/@/components/Form/index';
+    const emit = defineEmits([ 'selectSaleOrderMian']); //定义emit
+    var visible = ref(false)
+    const columns = [
+        {
+            title: '订单编号(bill code)',
+            dataIndex: 'billCode',
+            key: 'billCode',
+            align:"center",
+            width:250,
+            
+        },
+        {
+            title: '单据日期(bill date)',
+            dataIndex: 'billDate',
+            key: 'billDate',
+            align:"center"
+        },
+        {
+            title: '项目(project)',
+            dataIndex: 'projectName',
+            key: 'projectName',
+            align:"center",
+            width:250,
+            ellipsis: true,
+        },
+        {
+            title: '客户(customer)',
+            dataIndex: 'customerName',
+            key: 'supplierName',
+            align:"center",
+            ellipsis: true,
+        },
+        {
+            title: '订单金额(order money)',
+            key: 'orderMoney',
+            dataIndex: 'orderMoney',
+            align:"center",
+            width:250,
+        },
+    ];
+    const labelCol = ref({
+    xs: { span: 24 },
+    sm: { span: 9 },
+    });
+    const wrapperCol = ref({
+        xs: { span: 24 },
+        sm: { span: 15 },
+    });
+    const dataSource =ref([]);
+    let selectedRowKeys = ref([]);
+    let selectedRows = ref([]);
+    const toggleSearchStatus = ref(false);
+    var billDate = ref([])
+    const queryParams = ref({
+        billCode:'',
+        project:'',
+        projectName:'',
+        billDate_begin:'',
+        billDate_end:'',
+    });
+    let pagination = ref({
+      current: 1,
+      pageSize: 10,
+      total: '', // 假设总共有100条数据
+      showSizeChanger: true,
+      showQuickJumper: true,
+      showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 共" + total + "条"
+      },
+      size:'small'
+    });
+    function loadData(){
+        let params = getQueryParams();
+        defHttp.get({ url: '/saleCode/saleOrder/list',params}, { isTransformResponse: false })
+        .then((res) => {
+            if (res.success) {
+                dataSource.value = res.result.records;
+                pagination.value.total = res.result.total;
+                pagination.value.current = res.result.current;
+                pagination.value.pageSize = res.result.size;                
+            } else {
+                message.error(res.message);
+            }
+        })
+        .finally(() => {
+            // loading.value = false;
+        });
+    }
+    function getQueryParams(){
+        let params = Object.assign(queryParams.value);
+        params.pageNo = pagination.value.current;
+        params.pageSize = pagination.value.pageSize;
+        return filterObj(params);
+    }
+    function handleTableChange(paginations, filters, sorter){
+        pagination.value.total = paginations.total;
+        pagination.value.current = paginations.current;
+        pagination.value.pageSize = paginations.pageSize;
+        loadData()
+    };
+    function searchQuery(){
+        loadData();
+    }
+    function searchReset(){
+        billDate.value = []
+        queryParams.value = {
+            billCode:'',
+            project:'',
+            projectName:'',
+            billDate_begin:'',
+            billDate_end:'',
+        }
+        pagination.value.current =1;
+        pagination.value.pageSize = 10; 
+        loadData();
+    }
+    function handleToggleSearch(){
+        toggleSearchStatus.value = !toggleSearchStatus.value;
+    }
+    function onSelectChange(keys,rows){
+        selectedRowKeys.value = keys
+        selectedRows.value = rows
+    }
+    function handleOk(){
+        if(selectedRows.value.length!==1){
+           message.warning('请选择一条数据')
+        }else{
+            emit('selectSaleOrderMian', selectedRows.value)
+            handleCancel()
+        }
+        
+    }
+    function handleCancel(){
+        visible.value = false
+        selectedRowKeys.value = []
+        selectedRows.value=[]
+        billDate.value = []
+        queryParams.value = {
+            billCode:'',
+            project:'',
+            projectName:'',
+            billDate_begin:'',
+            billDate_end:'',
+        }
+    }
+    function getTable(){
+        visible.value = true
+        loadData()
+    }
+
+    function changeBillDate(prop){
+       if(prop){
+            billDate.value = prop
+            queryParams.value.billDate_begin = prop[0]
+            queryParams.value.billDate_end = prop[1]
+       }else{
+            billDate.value = []
+            queryParams.value.billDate_begin = ''
+            queryParams.value.billDate_end = ''
+       }
+       
+    }
+    function projectListList(){
+        let params = {pageSize:-1}
+        return defHttp.get({url:'/baseCode/baseProjectArchive/list',params});
+    }
+    defineExpose({
+      getTable,
+    });
+</script>
+<style scoped lang="less">
+/deep/.ant-form-item{
+    margin-bottom: 8px !important;
+}
+// /deep/.ant-table-wrapper .ant-table-thead > tr > th, .ant-table-wrapper .ant-table-thead > tr > td{
+//     padding: 8px !important;
+// }
+
+</style>

+ 45 - 9
src/views/saleCode/advancePayment/components/advancePaymentForm.vue

@@ -16,7 +16,12 @@
 						</a-col>
 						<a-col :span="24">
 							<a-form-item label="项目(project)" v-bind="validateInfos.projectName" id="saleInvoiceForm-projectName" name="projectName">
-								<a-input-search v-model:value="formData.projectName" placeholder="请输入项目(project)"  allow-clear enter-button="Search" @search="onSearchProject"></a-input-search>
+                <a-input v-model:value="formData.projectName" placeholder="" disabled></a-input>
+							</a-form-item>
+						</a-col>
+            <a-col :span="24">
+							<a-form-item label="销售订单(sale order)" v-bind="validateInfos.saleOrder" id="saleInvoiceForm-saleOrder" name="saleOrder" >
+                <a-input-search v-model:value="formData.saleOrder" placeholder="" allow-clear enter-button="Search" @search="changeSaleOrder"></a-input-search>
 							</a-form-item>
 						</a-col>
 						<a-col :span="24">
@@ -25,8 +30,8 @@
 							</a-form-item>
 						</a-col>
 						<a-col :span="24">
-							<a-form-item label="预收金额(advance payment amount)" v-bind="validateInfos.advancePaymentAmount" id="saleInvoiceForm-advancePaymentAmount" name="advancePaymentAmount">
-                <a-input v-model:value="formData.advancePaymentAmount" placeholder="请输入"  allow-clear ></a-input>
+							<a-form-item label="预收金额(advance payment amount)" v-bind="validateInfos.advanceAmount" id="saleInvoiceForm-advanceAmount" name="advanceAmount">
+                <a-input v-model:value="formData.advanceAmount" placeholder="请输入"  allow-clear @change="changeAdvanceAmount"></a-input>
 							</a-form-item>
 						</a-col>
             <a-col :span="24">
@@ -35,13 +40,13 @@
 							</a-form-item>
 						</a-col>
             <a-col :span="24">
-							<a-form-item label="预收比例(advance payment ratio)" v-bind="validateInfos.advancePaymentRatio" id="saleInvoiceForm-advancePaymentRatio" name="advancePaymentRatio">
-                <a-input v-model:value="formData.advancePaymentRatio" placeholder="请输入"  allow-clear ></a-input>
+							<a-form-item label="预收比例(advance payment ratio)" v-bind="validateInfos.advanceRatio" id="saleInvoiceForm-advanceRatio" name="advanceRatio">
+                <a-input v-model:value="formData.advanceRatio" placeholder="请输入"  allow-clear disabled suffix="%"></a-input>
 							</a-form-item>
 						</a-col>
             <a-col :span="24">
 							<a-form-item label="F号(F number)" v-bind="validateInfos.fnumber" id="saleInvoiceForm-fnumber" name="fnumber">
-                <a-input v-model:value="formData.fnumber" placeholder="请输入"  allow-clear ></a-input>
+                <a-input v-model:value="formData.fnumber" placeholder="请输入"  allow-clear AutoComplete="off"></a-input>
 							</a-form-item>
 						</a-col>						
             <a-col :span="24">
@@ -54,6 +59,7 @@
       </template>
     </JFormContainer>
     <SelectProjectModal ref="SelectProjectModalRef" @selectProject="addProject"></SelectProjectModal>
+    <SelectSaleOrderMianModal ref="SelectSaleOrderMianModalRef" @selectSaleOrderMian="addSaleOrderMian"></SelectSaleOrderMianModal>
   </a-spin>
 </template>
 
@@ -61,8 +67,10 @@
   import { defineComponent, ref, reactive, computed, toRaw, onMounted } from 'vue';
   import { defHttp } from '/@/utils/http/axios';
   import {queryDataById, saveOrUpdate } from '../advancePaymentForm.api';
+  import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
   import { JVxeTable } from '/@/components/jeecg/JVxeTable';
   import SelectProjectModal from '../../../publicComponents/SelectProjectModal.vue';
+  import SelectSaleOrderMianModal from './SelectSaleOrderMianModal.vue';
   import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
   import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
   import { JDictSelectTag,JSelectMultiple} from '/@/components/Form';
@@ -82,6 +90,7 @@
       JDictSelectTag,
       JSelectInput,
       JSelectMultiple,
+      SelectSaleOrderMianModal
     },
     props:{
       formDisabled:{
@@ -96,6 +105,7 @@
       const loading = ref(false);
       const formRef = ref();
       var SelectProjectModalRef = ref()
+      const SelectSaleOrderMianModalRef = ref()
       var customerOption =ref([]);
       const formData = reactive<Record<string, any>>({
         id: '',
@@ -107,11 +117,13 @@
         projectName: '',   
         customer: '',   
         customerName: '',   
-        advancePaymentAmount: '',   
+        advanceAmount: '',   
         orderAmount: '',   
-        advancePaymentRatio: '',   
+        advanceRatio: '',   
         fnumber: '',   
-        notes: '',           
+        notes: '',         
+        saleOrder:'',
+        saleOrderId:''  ,
       });
 
       //表单验证
@@ -165,6 +177,8 @@
         //赋值
         Object.assign(formData,tmpData);
       }
+      const {transformData} = useValidateAntFormAndTable();
+
       //获取表单信息
       async function getFormData() {
         try {
@@ -242,6 +256,24 @@
       function onSearchProject(){
         SelectProjectModalRef.value.getTable()
       }
+      function changeSaleOrder(){
+        SelectSaleOrderMianModalRef.value.getTable()
+      }
+      function addSaleOrderMian(data){
+        formData.saleOrder = data[0].billCode
+        formData.project = data[0].project
+        formData.projectName = data[0].projectName
+        formData.customer = data[0].customer
+        formData.customerName = data[0].customerName
+        formData.orderAmount = data[0].orderMoney
+        formData.saleOrderId = data[0].id
+      }
+      function changeAdvanceAmount(prop){
+
+        if(prop.data&&prop.data!==''){
+          formData.advanceRatio = Number(prop.data) / Number(formData.orderAmount)*100
+        }
+      }
       return {
         validatorRules,
         validateInfos,
@@ -261,6 +293,10 @@
         addProject,
         getCustomerOptions,
         customerOption,
+        changeSaleOrder,
+        SelectSaleOrderMianModalRef,
+        addSaleOrderMian,
+        changeAdvanceAmount
       }
     }
   });