Преглед изворни кода

fix(采购对账单): 对账单更新

liujt пре 5 месеци
родитељ
комит
a06cb0dd7e

+ 266 - 0
src/views/purchasingManage/purchaseOrder/accountstatement/components/addAccountDialogNew.vue

@@ -0,0 +1,266 @@
+<template>
+  <ele-modal
+    custom-class="ele-dialog-form long-dialog-form"
+    :centered="true"
+    :visible.sync="addAccountDialogFlag"
+    :title="title"
+    :close-on-click-modal="false"
+    width="70%"
+    :maxable="true"
+    :resizable="true"
+    :before-close="cancel"
+  >
+
+    <!--采购表单表单-->
+    <purchase-form
+      @handleSearch="handleSearch"
+      :dataForm.sync="dataForm"
+      :datasource.sync="datasource"
+      :recorpayList.sync="recorpayList"
+
+      :dialogType="dialogType"
+    ></purchase-form>
+    <headerTitle title="对账明细" style="margin-top: 30px">
+      <template v-slot>
+        <el-row style="font-weight: 700; color: red">
+          <span>总金额:</span>
+          <span>{{ dataForm.amountTotalPrice || 0 }}</span>
+          <el-divider direction="vertical"></el-divider>
+          <span>已对账金额:</span>
+          <span>{{ dataForm.amountCompletePrice || 0 }}</span>
+          <el-divider direction="vertical"></el-divider>
+          <span>未对账金额:</span>
+          <span>{{ dataForm.amountUnCompletePrice || 0 }}</span>
+        </el-row>
+      </template>
+    </headerTitle>
+    <!-- <recorpayTableList
+      ref="recorpayListRef"
+      :dataForm="dataForm"
+      :recorpayList.sync="recorpayList"
+      :dialogType="dialogType"
+    ></recorpayTableList> -->
+    <inventoryTable
+      ref="inventoryTableref"
+      :datasource.sync="datasource"
+      :dialogType="dialogType"
+    ></inventoryTable>
+    <div slot="footer" class="footer">
+      <el-button
+        v-if="dialogType !== 'view'"
+        type="primary"
+        @click="save"
+        v-click-once
+        >保存</el-button
+      >
+      <el-button
+        v-if="dialogType !== 'view'"
+        type="primary"
+        @click="save('sub')"
+        v-click-once
+        >提交</el-button
+      >
+      <el-button @click="cancel">返回</el-button>
+    </div>
+    <process-submit-dialog
+      :processSubmitDialogFlag.sync="processSubmitDialogFlag"
+      v-if="processSubmitDialogFlag"
+      ref="processSubmitDialogRef"
+      @reload="reload"
+    ></process-submit-dialog>
+  </ele-modal>
+</template>
+
+<script>
+  import recorpayTableList from '@/views/saleManage/saleOrder/accountstatement/components/recorpayTableList.vue';
+
+  // import InventoryTable from './inventoryTable.vue';
+  import InventoryTable from '@/views/saleManage/saleOrder/accountstatement/components/inventoryTableNew.vue';
+  import purchaseForm from './purchaseForm.vue';
+  import {
+    getSearchMergeListByTypeAPI,
+    infoAccountStatementAPI,
+    saveAccountStatementAPI,
+    updateAccountStatementAPI
+  } from '@/api/saleManage/accountstatement';
+  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
+
+  export default {
+    name: 'addAccountDialog',
+    props: ['addAccountDialogFlag'],
+    components: {
+      processSubmitDialog,
+      InventoryTable,
+      purchaseForm,
+      recorpayTableList
+    },
+    data() {
+      return {
+        fullscreen: false,
+        datasource: [],
+        recorpayList: [],
+        dataForm: {
+          sourceType: 1,
+          dateType: 1,
+          dateValue: '',
+          contactId: '',
+          contactName: '',
+          sourceName: '',
+          sourceId: '',
+          type: '',
+          year: '',
+          quarter: '',
+          month: '',
+          dateTimeRange: [],
+          orderNo: '',
+          orderId: '',
+          id: '',
+          startDate: '',
+          endDate: '',
+          repliedFiles: []
+        },
+        title: '',
+        processSubmitDialogFlag: false,
+        dialogType: ''
+      };
+    },
+    computed: {},
+    methods: {
+      open(dialogType, row, type = '') {
+        this.dialogType = dialogType;
+        this.title =
+          dialogType == 'add'
+            ? '新增'
+            : dialogType == 'update'
+            ? '修改'
+            : '详情';
+        this.dataForm.type = type;
+        if (this.dialogType !== 'add') {
+          this.getInfo(row);
+        }
+      },
+      //获取对账单详情
+      async getInfo(row) {
+        let data = await infoAccountStatementAPI(row.id);
+        this.recorpayList = data.recorpayList || [];
+        this.datasource = data.orderList || [];
+        this.dataForm = data;
+        switch (this.dataForm.dateType) {
+          case 1:
+            this.$set(this.dataForm,'year',this.dataForm.dateValue)
+          
+            break;
+          case 2:
+            //2023年-四季度
+            let data = this.dataForm.dateValue.split('年-');
+            this.$set(this.dataForm,'year',data[0])
+            this.$set(this.dataForm,'quarter',data[1])
+
+            break;
+          case 3:
+            this.$set(this.dataForm,'month',this.dataForm.dateValue)
+            break;
+          default:
+            this.dataForm.dateValue = '';
+            this.$set(this.dataForm,'dateTimeRange',[
+              this.dataForm.startDate,
+              this.dataForm.endDate
+            ])
+
+        }
+        this.$forceUpdate()
+      },
+      //关闭弹窗
+      cancel() {
+        this.$emit('update:addAccountDialogFlag', false);
+      },
+      //查询获取订单数据
+      async handleSearch(params) {
+        let searchQuery = {
+          endDate: params.endDate,
+          sourceId: params.sourceId,
+          sourceType: params.sourceType,
+          startDate: params.startDate,
+          type: 2
+        };
+        let data = await getSearchMergeListByTypeAPI(searchQuery);
+        this.recorpayList = data.recorpayList || [];
+        this.datasource = data.orderList || [];
+        this.dataForm = {
+          ...this.dataForm,
+          amountPayablePrice: data.amountPayablePrice,
+          amountReceivablePrice: data.amountReceivablePrice,
+          amountTotalPrice: data.amountTotalPrice,
+          amountPayablePass: data.amountPayablePass,
+          amountReceivablePass: data.amountReceivablePass
+        };
+        // if (!this.datasource.length) this.$message.warning('暂无订单信息');
+      },
+      //保存
+      async save(is) {
+        if (!this.datasource.length&&!this.recorpayList.length)
+        return this.$message.warning('暂无对账信息');
+
+        let api =
+          this.dialogType == 'add'
+            ? saveAccountStatementAPI
+            : updateAccountStatementAPI;
+        let params = {
+          ...this.dataForm,
+          orderList: this.datasource,
+          recorpayList:this.recorpayList
+        };
+        let data = await api(params);
+        if (is == 'sub') {
+          await this.submit(data);
+          return;
+          // await submitAccountStatementApproveAPI(
+          //   {
+          //     businessId: data,
+          //     type: this.dataForm.type
+          //   }
+          // )
+        }
+        this.cancel();
+        //刷新主页面
+        this.$emit('done');
+      },
+      async submit(res) {
+        let data = await infoAccountStatementAPI(res);
+        this.processSubmitDialogFlag = true;
+        this.$nextTick(() => {
+          let params = {
+            businessId: data.id,
+            businessKey: 'purchase_account_statement_approve',
+            formCreateUserId: data.createUserId,
+            variables: {
+              businessCode: data.statementNo,
+              type: data.type,
+              businessName: data.contactName,
+              businessType: '对账单'
+            }
+            // callBackMethodType : '1',
+            // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',
+            // pcHandle : '/bpm/handleTask/components/project-manage/plan-manage/submit.vue',
+            // pcView : '/bpm/handleTask/components/project-manage/plan-manage/detailDialog.vue',
+            // miniHandle : '',
+            // miniView : '',
+          };
+
+          this.$refs.processSubmitDialogRef.init(params);
+        });
+      },
+      reload() {
+        this.cancel();
+        //刷新主页面
+        this.$emit('done');
+      }
+    }
+  };
+</script>
+<style scoped lang="scss">
+  ::v-deep.el-divider {
+    margin: 10px;
+    font-weight: bold;
+  }
+</style>

+ 447 - 0
src/views/purchasingManage/purchaseOrder/accountstatement/components/purchaseFormNew.vue

@@ -0,0 +1,447 @@
+<template>
+  <el-form
+    ref="form"
+    :model="dataForm"
+    :rules="rules"
+    class="el-form-box"
+    label-width="120px"
+  >
+    <headerTitle title="对账单信息"></headerTitle>
+    <el-row>
+      <el-col :span="8" class="el-col-form">
+        <el-form-item label="来源类型" prop="sourceType">
+          <el-select
+            :disabled="dialogType == 'view'"
+            clearable
+            class="ele-block"
+            v-model="dataForm.sourceType"
+            @change="handleChange"
+            placeholder="请选择"
+          >
+            <el-option label="供应商" :value="1" />
+            <!-- <el-option label="项目" :value="2"/> -->
+            <el-option label="合同" :value="4" />
+
+            <el-option label="采购订单" :value="3" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8">
+        <el-form-item
+          label="选择供应商"
+          prop="contactId"
+          v-if="dataForm.sourceType == 1"
+        >
+          <el-input
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.contactName"
+            @click.native="handleGetCus"
+          ></el-input>
+        </el-form-item>
+        <!--        <el-form-item label="选择项目" prop="projectId" v-if="dataForm.sourceType ==2">-->
+        <!--          <el-input :disabled="dialogType=='view'" v-model="dataForm.projectId" @click.native="handleGetOrd"></el-input>-->
+        <!--        </el-form-item>-->
+        <el-form-item
+          label="选择订单"
+          prop="sourceName"
+          v-if="dataForm.sourceType == 3"
+        >
+          <el-input
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.sourceName"
+            @click.native="handleGetOrd"
+          ></el-input>
+        </el-form-item>
+        <el-form-item
+          label="选择合同"
+          prop="contractId"
+          v-if="dataForm.sourceType == 4"
+        >
+          <el-input
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.sourceName"
+            @click.native="handleGetContract"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8">
+        <el-form-item label="查询维度" prop="queryDimension">
+          <el-select
+            :disabled="dialogType == 'view'"
+            clearable
+            class="ele-block"
+            v-model="dataForm.queryDimension"
+            placeholder="请选择"
+          >
+            <el-option label="按发货单" :value="1" />
+            <el-option label="按调拨单" :value="2" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="8">
+        <el-form-item label="查询方式" prop="dateType">
+          <el-select
+            :disabled="dialogType == 'view'"
+            clearable
+            class="ele-block"
+            v-model="dataForm.dateType"
+            @change="reloadTableData"
+            placeholder="请选择"
+          >
+            <el-option label="按年度" :value="1" />
+            <el-option label="按季度" :value="2" />
+            <el-option label="按月度" :value="3" />
+            <el-option label="按时间段" :value="4" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8" v-if="![2].includes(dataForm.dateType)">
+        <el-form-item
+          label="选择年度"
+          prop="year"
+          v-if="[1].includes(dataForm.dateType)"
+        >
+          <el-date-picker
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.year"
+            value-format="yyyy"
+            type="year"
+            style="width: 100%"
+            @change="reloadTableData"
+            placeholder="选择年"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item
+          label="选择月度"
+          prop="month"
+          v-if="[3].includes(dataForm.dateType)"
+        >
+          <el-date-picker
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.month"
+            value-format="yyyy-MM"
+            type="month"
+            @change="reloadTableData"
+            style="width: 100%"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item
+          label="选择时间段"
+          prop="dateTimeRange"
+          v-if="[4].includes(dataForm.dateType)"
+        >
+          <el-date-picker
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.dateTimeRange"
+            value-format="yyyy-MM-dd"
+            type="daterange"
+            @change="reloadTableData"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            style="width: 100%"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8" v-if="[2].includes(dataForm.dateType)">
+        <el-form-item
+          label="选择年度"
+          prop="year"
+          v-if="[1, 2].includes(dataForm.dateType)"
+        >
+          <el-date-picker
+            :disabled="dialogType == 'view'"
+            v-model="dataForm.year"
+            value-format="yyyy"
+            type="year"
+            @change="reloadTableData"
+            style="width: 100%"
+            placeholder="选择年"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8" v-if="[2].includes(dataForm.dateType)">
+        <el-form-item
+          label="选择季度"
+          prop="quarter"
+          v-if="[2].includes(dataForm.dateType)"
+        >
+          <el-select
+            :disabled="dialogType == 'view'"
+            clearable
+            @change="reloadTableData"
+            class="ele-block"
+            v-model="dataForm.quarter"
+            placeholder="请选择"
+          >
+            <el-option label="一季度" value="一季度" />
+            <el-option label="二季度" value="二季度" />
+            <el-option label="三季度" value="三季度" />
+            <el-option label="四季度" value="四季度" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="8">
+        <el-form-item prop="accountStatementPrice" label="对账金额">
+          <el-input disabled v-model="accountStatementPrice"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8">
+        <el-form-item prop="relatedOrderNumber" label="关联订单编码">
+          <el-input disabled v-model="relatedOrderNumber"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8" v-if="dialogType == 'view'">
+        <el-form-item prop="createUserName" label="对账人">
+          <el-input disabled v-model="dataForm.createUserName"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8" v-if="dialogType == 'view'">
+        <el-form-item prop="createTime" label="对账时间">
+          <el-input disabled v-model="dataForm.createTime"></el-input>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row v-if="dialogType == 'view'">
+      <el-col :span="8">
+        <el-form-item prop="repliedFiles" label="回执附件">
+          <fileMain v-model="dataForm.repliedFiles" type="view"></fileMain>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row v-if="dialogType !== 'view'">
+      <el-col :span="24">
+        <el-button style="float: right" @click="handleSearch" type="primary"
+          >查询</el-button
+        >
+      </el-col>
+    </el-row>
+    <supplierList
+      ref="supplierListRef"
+      :classType="2"
+      @changeParent="getCusInfo"
+    ></supplierList>
+    <orderListDialog
+      ref="orderListDialogRef"
+      @changeParent="getOrderInfo"
+    ></orderListDialog>
+    <contractListDialog
+      ref="selectContractRef"
+      @changeParent="changeContract"
+      :type="2"
+      :isAdd="true"
+
+    ></contractListDialog>
+  </el-form>
+</template>
+<script xmlns:el-col="http://www.w3.org/1999/html">
+  import parentList from '@/views/saleManage/contact/components/parentList.vue';
+  import OrderListDialog from './orderListDialog.vue';
+  import { getSearchMergeListByTypeAPI } from '@/api/saleManage/accountstatement';
+  import { getFile } from '@/api/system/file';
+  import supplierList from '@/views/purchasingManage/supplierManage/components/parentList.vue';
+  // import fileMain from '@/components/addDoc/index.vue';
+  import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
+
+  export default {
+    name: 'saleForm',
+    components: {
+      // fileMain,
+      supplierList,
+      OrderListDialog,
+      parentList,
+      contractListDialog
+    },
+    props: ['dataForm', 'datasource', 'dialogType','recorpayList'],
+    computed: {
+      //计算未对账金额
+      accountStatementPrice() {
+        return this.datasource.reduce((pre, cur) => pre + +cur.amountTotalPrice, 0);
+      },
+      //计算相关订单号
+      relatedOrderNumber() {
+        return this.datasource.map((item) => item.orderNo).join(',');
+      }
+    },
+    data() {
+      return {
+        monthByDays: {},
+        quarterList: {
+          一季度: ['-01-01 00:00:00', '-03-31 23:59:59'],
+          二季度: ['-04-01 00:00:00', '-06-30 23:59:59'],
+          三季度: ['-07-01 00:00:00', '-09-30 23:59:59'],
+          四季度: ['-10-01 00:00:00', '-12-31 23:59:59']
+        },
+        startTime: '-01-01 00:00:00',
+        endTime: '23:59:59',
+        rules: {
+          sourceType: { required: true, message: '请选择', trigger: 'change' },
+          contactId: { required: true, message: '请选择', trigger: 'change' },
+          projectId: { required: true, message: '请选择', trigger: 'change' },
+          // orderId: { required: true, message: '请选择', trigger: 'change' },
+          dateType: { required: true, message: '请选择', trigger: 'change' },
+          year: { required: true, message: '请选择', trigger: 'change' },
+          quarter: { required: true, message: '请选择', trigger: 'change' },
+          month: { required: true, message: '请选择', trigger: 'change' },
+          dateTimeRange: {
+            required: true,
+            message: '请选择',
+            trigger: 'change'
+          },
+          contractId: { required: true, message: '请选择', trigger: 'change' },
+          queryDimension: { required: true, message: '请选择', trigger: 'change' },
+        }
+      };
+    },
+    methods: {
+      //查询
+      handleSearch() {
+        //
+        switch (this.dataForm.dateType) {
+          case 1:
+            this.dataForm.dateValue = this.dataForm.year;
+            this.dataForm.startDate = this.dataForm.year + this.startTime;
+            this.dataForm.endDate = this.dataForm.year + '-12-31 23:59:59';
+            break;
+          case 2:
+            this.dataForm.dateValue =
+              this.dataForm.year + '年-' + this.dataForm.quarter;
+            this.dataForm.startDate =
+              this.dataForm.year + this.quarterList[this.dataForm.quarter][0];
+            this.dataForm.endDate =
+              this.dataForm.year + this.quarterList[this.dataForm.quarter][1];
+            break;
+          case 3:
+            this.dataForm.dateValue = this.dataForm.month;
+            this.dataForm.startDate = this.dataForm.month + '-01 00:00:00';
+            let data = this.dataForm.month.split('-');
+            let days = new Date(data[0], data[1], 0).getDate();
+            this.dataForm.endDate =
+              this.dataForm.month + '-' + days + ' 23:59:59';
+            break;
+          default:
+            this.dataForm.dateValue = '';
+            this.dataForm.startDate =
+              this.dataForm.dateTimeRange[0] + ' 00:00:00';
+            this.dataForm.endDate =
+              this.dataForm.dateTimeRange[1] + ' 23:59:59';
+        }
+        this.$refs.form.validate((validate) => {
+          if (!validate) return;
+          this.$emit('handleSearch', this.dataForm);
+        });
+      },
+      //
+      getDays() {},
+      //获取客户信息
+      handleGetCus() {
+        let item = { id: this.dataForm.contactId };
+        this.$refs.supplierListRef.open(item);
+      },
+      //选择客户信息回调
+      getCusInfo(obj) {
+        let params = Object.assign({}, this.dataForm, {
+          contactId: obj.id,
+          contactName: obj.name,
+          sourceName: obj.name,
+          sourceId: obj.id
+        });
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
+      //获取订单信息
+      handleGetOrd() {
+        let item = { id: this.dataForm.orderId };
+        this.$refs.orderListDialogRef.open(item);
+      },
+      //选择订单信息回调
+      getOrderInfo(obj) {
+        let params = Object.assign({}, this.dataForm, {
+          orderId: obj.id,
+          orderNo: obj.orderNo,
+          contactId: obj.partbId,
+          contactName: obj.partbName,
+          sourceName: obj.orderNo,
+          sourceId: obj.id
+        });
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
+      //获取合同信息
+      handleGetContract() {
+        this.$refs.selectContractRef.open();
+      },
+      changeContract(obj) {
+        let params = Object.assign({}, this.dataForm, {
+          contractId: obj.id,
+          contractName: obj.contractName,
+          sourceId: obj.id,
+          sourceName: obj.contractName,
+          contactId: obj.partbId,
+          contactName: obj.partbName
+        });
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
+      //切换来源类型重置数据
+      handleChange() {
+        let params = Object.assign(
+          {},
+          {
+            ...this.dataForm,
+            orderNo: '',
+            orderId: '',
+            contactId: '',
+            contactName: '',
+            sourceName: '',
+            sourceId: '',
+            amountPayablePrice: '',
+            amountReceivablePrice: '',
+            amountTotalPrice: '',
+            amountPayablePass: '',
+            amountReceivablePass: ''
+          }
+        );
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
+      reloadTableData() {
+        this.$emit('update:datasource', []);
+        this.$emit('update:recorpayList', []);
+        // let params = Object.assign(
+        //   {},
+        //   {
+        //     ...this.dataForm,
+           
+        //     amountPayablePrice: '',
+        //     amountReceivablePrice: '',
+        //     amountTotalPrice: '',
+        //     amountPayablePass: '',
+        //     amountReceivablePass: ''
+        //   }
+        // );
+        // this.$emit('update:dataForm', params);
+      },
+      downloadFile(file) {
+        getFile({ objectName: file.storePath }, file.name);
+      }
+    },
+    mounted() {
+      // const year = new Date().getFullYear(); // 获取当前年份
+      // for (let i = 0; i < 12; i++) {
+      //   // 获取指定月份的天数
+      //   this.monthByDays[i + 1] = new Date(year, i + 1, 0).getDate()
+      // }
+    }
+  };
+</script>
+
+<style scoped lang="scss"></style>

+ 3 - 3
src/views/saleManage/saleOrder/accountstatement/components/inventoryTableNew.vue

@@ -163,7 +163,6 @@ export default {
   computed: {
     getColumns() {
       return (item, type)=>{
-        console.log(this.dataForm)
         let basicFields = [
           {
             width: 60,
@@ -176,7 +175,7 @@ export default {
           {
             minWidth: 130,
             prop: 'statementSubOrderNo',
-            label: type == 'deliveryProducts'?'调拨单编码':'退货单编码',
+            label: type == 'deliveryProducts'?'发货单编码':'退货单编码',
             align: 'center',
             slot: 'statementSubOrderNo',
             showOverflowTooltip: true
@@ -184,7 +183,7 @@ export default {
           {
             minWidth: 130,
             prop: 'productOperateTime',
-            label: type == 'deliveryProducts'?'调拨日期':'退货日期',
+            label: type == 'deliveryProducts'?'发货日期':'退货日期',
             align: 'center',
             slot: 'productOperateTime',
             showOverflowTooltip: true
@@ -531,6 +530,7 @@ export default {
   },
   mounted() {
     this.activeNames = this.datasource.map((item, index) => index.toString());
+    console.log('activeNames~~~', this.activeNames)
   },
   methods: {
     remove(tableIndex, lineIndex, delType) {