Browse Source

feat(对账单审批): 新增对账单详情接口并优化对账单页面展示

liujt 9 months ago
parent
commit
2c39e279a0

+ 11 - 0
src/api/bpm/components/saleManage/saleorder.js

@@ -338,6 +338,17 @@ export async function infoAccountStatementAPI(id) {
   return Promise.reject(new Error(res.data.message));
 }
 
+/**
+ * 对账单 信息详情 新
+ */
+export async function accountstatementInfoAPI(id) {
+  const res = await request.get(`/eom/accountstatement/v2/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
 /**
  * 对账单 提交发起流程
  */

+ 2 - 2
src/views/bpm/handleTask/components/purchaseOrder/accountstatement/addAccountDialog.vue

@@ -40,12 +40,12 @@ export default {
         {key: 'leader', permissionType: 'view', name: '分管副总审批'},
         {key: 'uploadReceipt', permissionType: 'view', name: '上传回执'},
       ],
-      permissionType: '',
+      permissionType: 'view',
     }
   },
   computed: {},
   created() {
-    this.permissionType = this.tabOptions.find(item => item.key == this.taskDefinitionKey).permissionType
+    // this.permissionType = this.tabOptions.find(item => item.key == this.taskDefinitionKey).permissionType
 
   },
   mounted() {

+ 20 - 25
src/views/bpm/handleTask/components/purchaseOrder/accountstatement/page.vue

@@ -8,44 +8,34 @@
                    :dialogType="permissionType"></purchase-form>
     <headerTitle title="对账明细" style="margin-top: 30px">
       <template v-slot>
-        <el-row style="font-weight: 700;color: red">
-          <el-divider direction="vertical"></el-divider>
-          <span>总金额:</span>
+        <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.amountReceivablePrice || 0 }}</span>
+            <span>已对账金额:</span>
+            <span>{{ dataForm.amountCompletePrice || 0 }}</span>
             <el-divider direction="vertical"></el-divider>
-            <span>已收金额:</span>
-            <span>{{ dataForm.amountReceivablePass||0 }}</span>
-            <el-divider direction="vertical"></el-divider>
-            <span>应付金额:</span>
-            <span>{{ dataForm.amountPayablePrice || 0 }}</span>
-      
-            <el-divider direction="vertical"></el-divider>
-            <span>已付金额:</span>
-            <span>{{ dataForm.amountPayablePass||0 }}</span>
-        </el-row>
+            <span>未对账金额:</span>
+            <span>{{ dataForm.amountUnCompletePrice || 0 }}</span>
+          </el-row>
       </template>
     </headerTitle>
-    <recorpayTableList
+    <!-- <recorpayTableList
       ref="recorpayListRef"
       :dataForm="dataForm"
       :recorpayList.sync="recorpayList"
       :dialogType="permissionType"
-    ></recorpayTableList>
-    <inventoryTable ref="inventoryTableref" :priceObj="priceObj" :dataForm="dataForm" :datasource.sync="datasource"
-                    :dialogType="permissionType"
-                    :taskDefinitionKey="taskDefinitionKey"></inventoryTable>
+    ></recorpayTableList> -->
+    <inventoryTable ref="inventoryTableref" type="purchase" :priceObj="priceObj" :dataForm="dataForm" :datasource.sync="datasource" :dialogType="permissionType" :taskDefinitionKey="taskDefinitionKey"></inventoryTable>
   </div>
 </template>
 
 <script>
 
 
-import InventoryTable from "./inventoryTable.vue";
+import InventoryTable from "@/views/bpm/handleTask/components/saleOrder/accountstatement/inventoryTable.vue";
 import purchaseForm from "./purchaseForm.vue";
-import {getSearchMergeListByTypeAPI, infoAccountStatementAPI,} from "@/api/bpm/components/saleManage/saleorder";
+import {getSearchMergeListByTypeAPI, infoAccountStatementAPI, accountstatementInfoAPI} from "@/api/bpm/components/saleManage/saleorder";
 import recorpayTableList from '@/views/bpm/handleTask/components/saleOrder/accountstatement/recorpayTableList.vue';
 
 export default {
@@ -53,7 +43,8 @@ export default {
   props: ['permissionType', 'businessId', 'taskDefinitionKey'],
   components: {
     InventoryTable,
-    purchaseForm,recorpayTableList
+    purchaseForm,
+    recorpayTableList
   },
   data() {
     return {
@@ -61,6 +52,7 @@ export default {
       dataForm: {
         sourceType: '',
         dateType: '',
+        queryDimension: '',
         dateValue: '',
         contactId: '',
         contactName: '',
@@ -122,9 +114,12 @@ export default {
 
     //获取对账单详情
     async getInfo(id) {
-      let data = await infoAccountStatementAPI(id)
+      let data = await accountstatementInfoAPI(id)
       this.datasource = data?.orderList || []
-      this.recorpayList=data?.recorpayList||[]
+      // this.recorpayList=data?.recorpayList||[]
+      data.amountTotalPrice = data.orderList.reduce((pre, cur) => pre + +cur.amountTotalPrice, 0),
+      data.amountCompletePrice = data.orderList.reduce((pre, cur) => pre + +cur.statementAmount, 0),
+      data.amountUnCompletePrice = data.orderList.reduce((pre, cur) => pre + +cur.unStatementAmount, 0)
       this.dataForm = data
       // this.priceObj.amountNotInvoicedPrice = data.amountNotInvoicedPrice
       switch (this.dataForm.dateType) {

+ 276 - 0
src/views/bpm/handleTask/components/purchaseOrder/accountstatement/purchaseForm copy.vue

@@ -0,0 +1,276 @@
+<template>
+  <el-form ref="form" :model="dataForm" :rules="rules" label-width="120px">
+    <headerTitle title="对账单信息"></headerTitle>
+    <el-row>
+      <el-col :span="12">
+        <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="12">
+        <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="orderId" 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-row>
+    <el-row>
+      <el-col :span="12">
+        <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="12" 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="6" 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="6" 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="12">
+        <el-form-item
+          v-if="taskDefinitionKey=='uploadReceipt'"
+          prop="repliedFiles"
+          label="回执附件">
+          <!-- <fileUpload
+            v-model="dataForm.repliedFiles"
+            module="main"
+            :showLib="false"
+            :limit="10"
+          /> -->
+          <fileMain v-model="dataForm.repliedFiles"></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>
+    <parentList ref="parentRef" @changeParent="getCusInfo"></parentList>
+    <orderListDialog ref="orderListDialogRef" @changeParent="getOrderInfo"
+    ></orderListDialog>
+  </el-form>
+</template>
+<script xmlns:el-col="http://www.w3.org/1999/html">
+import parentList from "./supplierList.vue";
+import OrderListDialog from "./orderListDialog.vue";
+// import fileUpload from "@/components/upload/fileUpload.vue";
+// import fileMain from "@/components/addDoc/index.vue";
+
+export default {
+  name: "saleForm",
+  components: {
+    // fileMain, 
+    
+    OrderListDialog, parentList},
+  props: ['dataForm', 'datasource', 'dialogType', 'taskDefinitionKey'],
+  data() {
+    return {
+      monthByDays: {},
+      quarterList: {
+        '一季度': ['-01-01 00:00:00', '-03-31 12:59:59'],
+        '二季度': ['-04-01 00:00:00', '-06-30 12:59:59'],
+        '三季度': ['-07-01 00:00:00', '-09-30 12:59:59'],
+        '四季度': ['-10-01 00:00:00', '-12-31 12:59:59'],
+      },
+      startTime: '-01-01 00:00:00',
+      endTime: '12: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'},
+        repliedFiles: {required: this.taskDefinitionKey == 'uploadReceipt', message: '请上传', trigger: 'change'},
+      },
+
+    }
+  },
+  methods: {
+    //查询
+    handleSearch() {
+      this.$emit('handleSearch', this.dataForm)
+    },
+    //
+    getDays() {
+
+
+    },
+    //获取客户信息
+    handleGetCus() {
+      let item = {id: this.dataForm.contactId};
+      this.$refs.parentRef.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()
+    },
+    //切换来源类型重置数据
+    handleChange() {
+      let params = Object.assign({}, {
+        ...this.dataForm,
+        orderNo: '',
+        orderId: '',
+        contactId: '',
+        contactName: '',
+        sourceName: '',
+        sourceId: '',
+      })
+      this.$emit('update:dataForm', params)
+      this.reloadTableData()
+    },
+    reloadTableData() {
+      this.$emit('update:datasource', [])
+    },
+
+  },
+  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">
+::v-deep.el-divider {
+  margin: 10px;
+  font-weight: bold;
+}
+</style>

+ 341 - 170
src/views/bpm/handleTask/components/purchaseOrder/accountstatement/purchaseForm.vue

@@ -1,16 +1,23 @@
 <template>
-  <el-form ref="form" :model="dataForm" :rules="rules" label-width="120px">
+  <el-form
+    ref="form"
+    :model="dataForm"
+    :rules="rules"
+    class="el-form-box"
+    label-width="120px"
+  >
     <headerTitle title="对账单信息"></headerTitle>
     <el-row>
-      <el-col :span="12">
+      <el-col :span="8" class="el-col-form">
         <el-form-item label="来源类型" prop="sourceType">
           <el-select
-            :disabled="dialogType=='view'"
+            :disabled="dialogType == 'view'"
             clearable
             class="ele-block"
             v-model="dataForm.sourceType"
             @change="handleChange"
-            placeholder="请选择">
+            placeholder="请选择"
+          >
             <el-option label="供应商" :value="1" />
             <!-- <el-option label="项目" :value="2"/> -->
             <el-option label="合同" :value="4" />
@@ -19,16 +26,31 @@
           </el-select>
         </el-form-item>
       </el-col>
-      <el-col :span="12">
-        <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-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="orderId" v-if="dataForm.sourceType ==3">
-          <el-input :disabled="dialogType=='view'" v-model="dataForm.sourceName" @click.native="handleGetOrd"></el-input>
+        <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="选择合同"
@@ -36,55 +58,85 @@
           v-if="dataForm.sourceType == 4"
         >
           <el-input
-           :disabled="dialogType=='view'"
+            :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
+            clearable
+            class="ele-block"
+            v-model="dataForm.queryDimension"
+            placeholder="请选择"
+          >
+            <el-option label="按发货单" :value="1" />
+            <el-option label="按调拨单" :value="2" />
+            <el-option label="按收货单" :value="3" />
+          </el-select>
+        </el-form-item>
+      </el-col>
     </el-row>
     <el-row>
-      <el-col :span="12">
+      <el-col :span="8">
         <el-form-item label="查询方式" prop="dateType">
           <el-select
-            :disabled="dialogType=='view'"
+            :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"/>
+            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="12" v-if="![2].includes(dataForm.dateType)">
-        <el-form-item label="选择年度" prop="year" v-if="[1].includes(dataForm.dateType)">
+      <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'"
+            :disabled="dialogType == 'view'"
             v-model="dataForm.year"
             value-format="yyyy"
             type="year"
             style="width: 100%"
             @change="reloadTableData"
-            placeholder="选择年">
+            placeholder="选择年"
+          >
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="选择月度" prop="month" v-if="[3].includes(dataForm.dateType)">
+        <el-form-item
+          label="选择月度"
+          prop="month"
+          v-if="[3].includes(dataForm.dateType)"
+        >
           <el-date-picker
-            :disabled="dialogType=='view'"
+            :disabled="dialogType == 'view'"
             v-model="dataForm.month"
             value-format="yyyy-MM"
             type="month"
             @change="reloadTableData"
-            style="width: 100%">
+            style="width: 100%"
+          >
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="选择时间段" prop="dateTimeRange" v-if="[4].includes(dataForm.dateType)">
+        <el-form-item
+          label="选择时间段"
+          prop="dateTimeRange"
+          v-if="[4].includes(dataForm.dateType)"
+        >
           <el-date-picker
-            :disabled="dialogType=='view'"
+            :disabled="dialogType == 'view'"
             v-model="dataForm.dateTimeRange"
             value-format="yyyy-MM-dd"
             type="daterange"
@@ -92,185 +144,304 @@
             range-separator="至"
             start-placeholder="开始日期"
             end-placeholder="结束日期"
-            style="width: 100%">
+            style="width: 100%"
+          >
           </el-date-picker>
         </el-form-item>
       </el-col>
-      <el-col :span="6" v-if="[2].includes(dataForm.dateType)">
-        <el-form-item label="选择年度" prop="year" v-if="[1,2].includes(dataForm.dateType)">
+      <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'"
+            :disabled="dialogType == 'view'"
             v-model="dataForm.year"
             value-format="yyyy"
             type="year"
             @change="reloadTableData"
             style="width: 100%"
-            placeholder="选择年">
+            placeholder="选择年"
+          >
           </el-date-picker>
         </el-form-item>
       </el-col>
-      <el-col :span="6" v-if="[2].includes(dataForm.dateType)">
-        <el-form-item label="选择季度" prop="quarter" v-if="[2].includes(dataForm.dateType)">
+      <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'"
+            :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="四季度"/>
+            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="12">
-        <el-form-item
-          v-if="taskDefinitionKey=='uploadReceipt'"
-          prop="repliedFiles"
-          label="回执附件">
-          <!-- <fileUpload
-            v-model="dataForm.repliedFiles"
-            module="main"
-            :showLib="false"
-            :limit="10"
-          /> -->
-          <fileMain v-model="dataForm.repliedFiles"></fileMain>
+      <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-row v-if="dialogType !== 'view'">
       <el-col :span="24">
-        <el-button style="float: right;" @click="handleSearch" type="primary">查询</el-button>
+        <el-button style="float: right" @click="handleSearch" type="primary"
+          >查询</el-button
+        >
       </el-col>
     </el-row>
-    <parentList ref="parentRef" @changeParent="getCusInfo"></parentList>
-    <orderListDialog ref="orderListDialogRef" @changeParent="getOrderInfo"
+    <!-- <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 "./supplierList.vue";
-import OrderListDialog from "./orderListDialog.vue";
-// import fileUpload from "@/components/upload/fileUpload.vue";
-// import fileMain from "@/components/addDoc/index.vue";
-
-export default {
-  name: "saleForm",
-  components: {
-    // fileMain, 
-    
-    OrderListDialog, parentList},
-  props: ['dataForm', 'datasource', 'dialogType', 'taskDefinitionKey'],
-  data() {
-    return {
-      monthByDays: {},
-      quarterList: {
-        '一季度': ['-01-01 00:00:00', '-03-31 12:59:59'],
-        '二季度': ['-04-01 00:00:00', '-06-30 12:59:59'],
-        '三季度': ['-07-01 00:00:00', '-09-30 12:59:59'],
-        '四季度': ['-10-01 00:00:00', '-12-31 12:59:59'],
-      },
-      startTime: '-01-01 00:00:00',
-      endTime: '12: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'},
-        repliedFiles: {required: this.taskDefinitionKey == 'uploadReceipt', message: '请上传', trigger: 'change'},
-      },
-
-    }
-  },
-  methods: {
-    //查询
-    handleSearch() {
-      this.$emit('handleSearch', this.dataForm)
-    },
-    //
-    getDays() {
-
+  import parentList from "./supplierList.vue";
+  import OrderListDialog from "./orderListDialog.vue";
+  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
     },
-    //获取客户信息
-    handleGetCus() {
-      let item = {id: this.dataForm.contactId};
-      this.$refs.parentRef.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()
+    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(',');
+      }
     },
-    //切换来源类型重置数据
-    handleChange() {
-      let params = Object.assign({}, {
-        ...this.dataForm,
-        orderNo: '',
-        orderId: '',
-        contactId: '',
-        contactName: '',
-        sourceName: '',
-        sourceId: '',
-      })
-      this.$emit('update:dataForm', params)
-      this.reloadTableData()
+    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' },
+        }
+      };
     },
-    reloadTableData() {
-      this.$emit('update:datasource', [])
+    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()
-    // }
-
-  },
-}
+    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">
-::v-deep.el-divider {
-  margin: 10px;
-  font-weight: bold;
-}
-</style>
+<style scoped lang="scss"></style>

+ 2 - 2
src/views/bpm/handleTask/components/saleOrder/accountstatement/addAccountDialog.vue

@@ -40,12 +40,12 @@ export default {
         {key: 'leader', permissionType: 'view', name: '分管副总审批'},
         {key: 'uploadReceipt', permissionType: 'view', name: '上传回执'},
       ],
-      permissionType: '',
+      permissionType: 'view',
     }
   },
   computed: {},
   created() {
-    this.permissionType = this.tabOptions.find(item => item.key == this.taskDefinitionKey).permissionType
+    // this.permissionType = this.tabOptions.find(item => item.key == this.taskDefinitionKey).permissionType
 
   },
   mounted() {

+ 514 - 0
src/views/bpm/handleTask/components/saleOrder/accountstatement/inventoryTable copy.vue

@@ -0,0 +1,514 @@
+<template>
+  <div>
+    <div v-for="(item) in datasource" style="margin-bottom: 10px">
+      <div>
+        <div style="margin-bottom: 10px;font-weight: bold;">
+          <div>
+            <el-divider direction="vertical"></el-divider>
+            <span>销售订单:</span>
+            <span>{{ item.orderNo }}</span>
+            <el-divider direction="vertical"></el-divider>
+            <!-- <span>计价方式:</span>
+            <span> {{ item.pricingWay == 1 ? '按数量计费' : '按重量计费' }}</span> -->
+            <!-- <el-divider direction="vertical"></el-divider> -->
+            <span>总金额:</span>
+            <span>{{item.amountTotalPrice}}</span>
+            <el-divider direction="vertical"></el-divider>
+            <span>应收金额:</span>
+            <span>{{item.amountReceivablePrice}}</span>
+            <el-divider direction="vertical"></el-divider>
+            <span>应付金额:</span>
+            <span>{{item.amountPayablePrice}}</span>
+
+
+          </div>
+        </div>
+        <template v-if="item.orderType!=6">
+          <div  v-for="(j,i) in item.subList" :key="i">
+            <ele-pro-table :show-summary="true" :summary-method="getSummaries" ref="table" row-key="id" :needPage="false"
+                           :columns="getColumns(j)" max-height="500px" style="margin-bottom: 10px"
+                           :sub-title="getTitle(j)" :toolkit="[]" :datasource="j.detailList"
+                           cache-key="systemRoleTable17-11121" class="time-form">
+            </ele-pro-table>
+          </div>
+        </template>
+        <div v-else>
+          <ele-pro-table :show-summary="true" :summary-method="getSummaries" ref="table" row-key="id" :needPage="false"
+                         :columns="getColumns({subType:10})" sub-title="赔付订单" max-height="500px" style="margin-bottom: 10px"
+                         :toolkit="[]" :datasource="item.detailList"
+                         cache-key="systemRoleTable17-11121" class="time-form">
+
+            <!--            <template v-slot:productName="{ row,$index }">-->
+            <!--              <el-popover-->
+            <!--                placement="right"-->
+            <!--                width="60%"-->
+            <!--                trigger="hover">-->
+            <!--                <ele-pro-table ref="childrenTable"-->
+            <!--                               row-key="id"-->
+            <!--                               max-height="300px"-->
+            <!--                               :needPage="false" :columns="childrenColumns" :toolkit="[]"-->
+            <!--                               :datasource="row.productList"-->
+            <!--                               cache-key="systemRoleTable17-222" class="time-form">-->
+            <!--                </ele-pro-table>-->
+            <!--                <el-button type="text" slot="reference">{{ row.productName }}</el-button>-->
+            <!--              </el-popover>-->
+            <!--            </template>-->
+          </ele-pro-table>
+        </div>
+      </div>
+    </div>
+  </div>
+
+</template>
+<script>
+import dictMixins from '@/mixins/dictMixins';
+
+export default {
+  mixins: [dictMixins],
+
+  components: {},
+  props: ['datasource', 'dataForm','dialogType', 'taskDefinitionKey', 'priceObj'],
+  computed: {
+    getColumns() {
+      return (j)=>{
+        let basicFields = [
+          {
+            width: 60,
+            label: '序号',
+            type: 'index',
+            columnKey: 'index',
+            align: 'center',
+          },
+          {
+            minWidth: 130,
+            prop: 'productOperateTime',
+            label: this.subColumnsTypeList[j.subType],
+            align: 'center',
+            slot: 'productOperateTime',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 120,
+            prop: 'productCode',
+            label: '产品编码',
+            slot: 'productCode',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 140,
+            prop: 'productName',
+            label: '产品名称',
+            slot: 'productName',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 140,
+            prop: 'subType',
+            label: '退货产品类型',
+            slot: 'subType',
+            align: 'center',
+            show:j.subType==11,
+            showOverflowTooltip: true,formatter(_row, _column, cellValue){
+              return cellValue==12?'实物赔偿':'原货'
+            }
+          },
+          {
+            minWidth: 100,
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            slot: 'specification',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 100,
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            slot: 'modelType',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'provenance',
+            label: '产地',
+            slot: 'provenance',
+            align: 'center',
+            // show:this.contractBookType==2,
+            minWidth: 200,
+            showOverflowTooltip: true,
+            formatter: (row, column) => {
+       
+              return row.provenance && row.provenance.length
+                ? row.provenance
+                    .map((item) => this.getDictValue('产地', item ))
+                    .join(',')
+                : '';
+            }
+          },
+          {
+            minWidth: 100,
+            prop: 'pricingWay',
+            label: '计价方式',
+            align: 'center',
+            slot: 'pricingWay',
+            showOverflowTooltip: true,
+            formatter: (_row, _column, cellValue) => {
+              return _row.pricingWay == 1 ? '按数量计价' : '按重量计价'
+            }
+          },
+          {
+            minWidth: 100,
+            prop: 'totalCount',
+            label: '数量',
+            align: 'center',
+            slot: 'totalCount'
+          },
+          {
+            minWidth: 120,
+            prop: 'measuringUnit',
+            label: '计量单位',
+            align: 'center',
+            slot: 'measuringUnit'
+          },
+          {
+            width: 100,
+            prop: 'receiveTotalWeight',
+            label: '收货总重',
+            slot: 'receiveTotalWeight',
+            align: "center"
+          },
+          {
+            width: 100,
+            prop: 'sendTotalWeight',
+            label: '发货总重',
+            slot: 'sendTotalWeight',
+            align: "center",
+            headerSlot: 'headerTotalCount'
+          },
+
+          {
+            width: 100,
+            prop: 'increaseTotalWeight',
+            label: '增重重量',
+            slot: 'increaseTotalWeight',
+            align: "center"
+          },
+          {
+            width: 100,
+            prop: 'weightUnit',
+            label: '重量单位',
+            slot: 'weightUnit',
+            align: "center"
+          },
+          // {
+          //   minWidth: 90,
+          //   prop: 'singlePrice',
+          //   label: '单价',
+          //   align: 'center',
+          //   slot: 'singlePrice'
+          // },
+          {
+            minWidth: 90,
+            prop: 'singlePrice',
+            label: '单价',
+            align: 'center',
+            slot: 'singlePrice',
+            show:j.subType==11
+          },
+          {
+            minWidth: 100,
+            prop: 'discountSinglePrice',
+            label: '单价',
+            align: 'center',
+            slot: 'discountSinglePrice',
+            show:j.subType!=11
+
+          },
+          {
+            width: 150,
+            prop: 'notaxSinglePrice',
+            label: '不含税单价',
+            align: 'center'
+          },
+          {
+            minWidth: 120,
+            prop: 'totalPrice',
+            label: '合计金额',
+            slot: 'totalPrice',
+            align: 'center',
+            show:j.subType==11
+
+          },
+          {
+            minWidth: 120,
+            prop: 'discountTotalPrice',
+            label: '合计金额',
+            slot: 'discountTotalPrice',
+            align: 'center',
+            show:j.subType!=11
+
+          },
+          // {
+          //   minWidth: 100,
+          //   prop: 'discountTotalPrice',
+          //   label: '折让合计金额',
+          //   align: 'center',
+          //   slot: 'discountTotalPrice'
+          // },
+        ]
+        let permissionType = {
+          // 'financeLeader': [
+          //   {
+          //     minWidth: 130,
+          //     prop: 'receivedPrice',
+          //     label: '已收款金额',
+          //     align: 'center',
+          //     slot: 'receivedPrice',
+          //     headerSlot: 'headerReceivedPrice'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'receivablePrice',
+          //     label: '应收款金额',
+          //     align: 'center',
+          //     slot: 'receivablePrice',
+          //   },
+          //   {
+          //     minWidth: 140,
+          //     prop: 'receivableDate',
+          //     label: '应收款日期',
+          //     align: 'center',
+          //     slot: 'receivableDate',
+          //     headerSlot: 'headerReceivableDate'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'invoicedPrice',
+          //     label: '已开票金额',
+          //     align: 'center',
+          //     slot: 'invoicedPrice',
+          //     headerSlot: 'headerInvoicedPrice'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'notInvoicedPrice',
+          //     label: '未开票金额',
+          //     align: 'center',
+          //     slot: 'notInvoicedPrice'
+          //   },
+          // ],
+          // 'leader': [
+          //   {
+          //     minWidth: 130,
+          //     prop: 'receivedPrice',
+          //     label: '已收款金额',
+          //     align: 'center',
+          //     slot: 'receivedPrice'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'receivablePrice',
+          //     label: '应收款金额',
+          //     align: 'center',
+          //     slot: 'receivablePrice'
+          //   },
+          //   {
+          //     minWidth: 140,
+          //     prop: 'receivableDate',
+          //     label: '应收款日期',
+          //     align: 'center',
+          //     slot: 'receivableDate'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'invoicedPrice',
+          //     label: '已开票金额',
+          //     align: 'center',
+          //     slot: 'invoicedPrice'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'notInvoicedPrice',
+          //     label: '未开票金额',
+          //     align: 'center',
+          //     slot: 'notInvoicedPrice'
+          //   },
+          // ],
+          // 'uploadReceipt': [
+          //   {
+          //     minWidth: 130,
+          //     prop: 'receivedPrice',
+          //     label: '已收款金额',
+          //     align: 'center',
+          //     slot: 'receivedPrice'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'receivablePrice',
+          //     label: '应收款金额',
+          //     align: 'center',
+          //     slot: 'receivablePrice'
+          //   },
+          //   {
+          //     minWidth: 140,
+          //     prop: 'receivableDate',
+          //     label: '应收款日期',
+          //     align: 'center',
+          //     slot: 'receivableDate'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'invoicedPrice',
+          //     label: '已开票金额',
+          //     align: 'center',
+          //     slot: 'invoicedPrice'
+          //   },
+          //   {
+          //     minWidth: 130,
+          //     prop: 'notInvoicedPrice',
+          //     label: '未开票金额',
+          //     align: 'center',
+          //     slot: 'notInvoicedPrice'
+          //   },
+          // ],
+        }
+        permissionType[this.taskDefinitionKey] && basicFields.push(...permissionType[this.taskDefinitionKey])
+        return basicFields
+      }
+    },
+    getTitle(){
+        return (j)=>{
+          let title=this.subTypeList[j.subType]+(j.statementSubOrderCode||'')+' '
+          if(j.subType==11&&j.subExecType){
+                 if(j.subExecType=='10'){
+                  title=title+' 退货方式:全部原货 '
+                 }
+                 if(j.subExecType=='20'){
+                  title=title+' 退货方式:部分原货+实物赔偿'
+                 }
+                 if(j.subExecType=='30'){
+                  title=title+' 退货方式:部分原货+现金赔偿 '+' 赔偿金额:'+j.amountPayablePrice
+                 }
+                 if(j.subExecType=='40'){
+                  title=title+' 退货方式:全部实物赔偿'
+                 }
+                 if(j.subExecType=='50'){
+                  title=title+' 退货方式:全部现金赔偿  '+' 赔偿金额:'+j.amountPayablePrice
+                 }
+          }
+          return title
+        }
+      }
+  },
+  created(){
+    this.requestDict('产地');
+  },
+  data() {
+    return {
+      subTypeList:{
+        10:'发货单:',
+        11:'退货单:',
+        12:'实物赔偿清单:',
+
+      },
+      subColumnsTypeList:{
+        10:'发货日期',
+        11:'退货日期',
+      },
+    };
+  },
+  watch: {},
+  methods: {
+    handleEditCost(row, p1, p2) {
+      if (!row[p1]) return row[p2] = row.totalPrice.toFixed(2)
+      row[p2] = (row.totalPrice - row[p1]).toFixed(2)
+    },
+
+    getSummaries(param) {
+      const {columns, data} = param;
+      const sums = [];
+      let fields = ['totalPrice', 'notInvoicedPrice', 'invoicedPrice', 'receivablePrice', 'receivedPrice','discountTotalPrice']
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = '合计';
+          return;
+        }
+        const values = fields.includes(column.property) ? data.map(item => Number(item[column.property])) : []
+        if (!values.every(value => isNaN(value))) {
+          sums[index] = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[index] = sums[index].toFixed(2)
+        } else {
+          sums[index] = '';
+        }
+      });
+
+      return sums;
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.headbox {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+
+  .amount {
+    font-size: 14px;
+    font-weight: bold;
+    padding-right: 30px;
+  }
+}
+
+.time-form .el-form-item {
+  margin-bottom: 0 !important;
+}
+
+::v-deep .period {
+  display: flex;
+
+  .borderleftnone {
+    .el-input--medium .el-input__inner {
+      border-top-right-radius: 0;
+      border-bottom-right-radius: 0;
+    }
+  }
+
+  .borderrightnone {
+    .el-input--medium .el-input__inner {
+      border-top-left-radius: 0;
+      border-bottom-left-radius: 0;
+    }
+  }
+
+}
+
+::v-deep .time-form tbody > tr:hover > td {
+  background-color: transparent !important;
+}
+
+::v-deep .time-form .el-table tr {
+  background-color: #ffffff;
+}
+
+.pricebox {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  font-weight: bold;
+}
+::v-deep.el-divider {
+  margin: 10px;
+  font-weight: bold;
+}
+
+</style>

+ 258 - 101
src/views/bpm/handleTask/components/saleOrder/accountstatement/inventoryTable.vue

@@ -1,17 +1,17 @@
 <template>
   <div>
-    <div v-for="(item) in datasource" style="margin-bottom: 10px">
+    <!-- <div v-for="(item) in datasource" style="margin-bottom: 10px">
       <div>
         <div style="margin-bottom: 10px;font-weight: bold;">
           <div>
             <el-divider direction="vertical"></el-divider>
-            <span>销售订单:</span>
+            <span><span>{{ index + 1 }}</span> 销售订单:</span>
             <span>{{ item.orderNo }}</span>
-            <el-divider direction="vertical"></el-divider>
+            <el-divider direction="vertical"></el-divider> -->
             <!-- <span>计价方式:</span>
             <span> {{ item.pricingWay == 1 ? '按数量计费' : '按重量计费' }}</span> -->
             <!-- <el-divider direction="vertical"></el-divider> -->
-            <span>总金额:</span>
+            <!-- <span>总金额:</span>
             <span>{{item.amountTotalPrice}}</span>
             <el-divider direction="vertical"></el-divider>
             <span>应收金额:</span>
@@ -19,7 +19,7 @@
             <el-divider direction="vertical"></el-divider>
             <span>应付金额:</span>
             <span>{{item.amountPayablePrice}}</span>
-
+          
 
           </div>
         </div>
@@ -29,6 +29,15 @@
                            :columns="getColumns(j)" max-height="500px" style="margin-bottom: 10px"
                            :sub-title="getTitle(j)" :toolkit="[]" :datasource="j.detailList"
                            cache-key="systemRoleTable17-11121" class="time-form">
+              <template v-slot:action="{ row,$index }">
+                <el-popconfirm class="ele-action" title="确定要删除吗?" @confirm="remove(index,$index,'line')">
+                  <template v-slot:reference>
+                    <el-link type="danger" v-if="dialogType!=='view'" :underline="false" icon="el-icon-delete">
+                      删除
+                    </el-link>
+                  </template>
+                </el-popconfirm>
+              </template>
             </ele-pro-table>
           </div>
         </template>
@@ -37,7 +46,15 @@
                          :columns="getColumns({subType:10})" sub-title="赔付订单" max-height="500px" style="margin-bottom: 10px"
                          :toolkit="[]" :datasource="item.detailList"
                          cache-key="systemRoleTable17-11121" class="time-form">
-
+            <template v-slot:action="{ row,$index }">
+              <el-popconfirm class="ele-action" title="确定要删除吗?" @confirm="remove(index,$index,'line')">
+                <template v-slot:reference>
+                  <el-link type="danger" v-if="dialogType!=='view'" :underline="false" icon="el-icon-delete">
+                    删除
+                  </el-link>
+                </template>
+              </el-popconfirm>
+            </template> -->
             <!--            <template v-slot:productName="{ row,$index }">-->
             <!--              <el-popover-->
             <!--                placement="right"-->
@@ -53,24 +70,100 @@
             <!--                <el-button type="text" slot="reference">{{ row.productName }}</el-button>-->
             <!--              </el-popover>-->
             <!--            </template>-->
-          </ele-pro-table>
+          <!-- </ele-pro-table>
         </div>
       </div>
-    </div>
+    </div> -->
+
+    <el-collapse  v-model="activeNames">
+      <el-collapse-item v-for="(item, index) in datasource" :key="index" :name="index">
+        <template slot="title">
+          <div class="collapse-title">
+            <div class="collapse-title-left"><span class="collapse-title-index">{{ index + 1 }}</span> {{ type == 'purchase' ? '采购订单' : '销售订单' }}:{{ item.orderNo }}</div>
+            <div class="collapse-title-right">
+              <span>订单金额:{{ item.amountTotalPrice || 0 }}元</span>
+              <span>已对账金额:{{ item.statementAmount || 0 }}元</span>
+              <span>未对账金额:{{ item.unStatementAmount || 0 }}元</span>
+            </div>
+          </div>
+        </template>
+        <div>
+          <el-tabs type="border-card">
+            <el-tab-pane :label="type == 'purchase' ? '收货单' : '发货单'">
+              <ele-pro-table :show-summary="false" :summary-method="getSummaries" ref="table" row-key="id" :needPage="false"
+                          :columns="getColumns(item, 'deliveryProducts')" max-height="500px" style="margin-bottom: 10px" :datasource="item.deliveryProducts || []"
+                          cache-key="systemRoleTable17-11121" class="time-form">
+                <template v-slot:toolbar>
+                  <div class="headbox">
+                    <div>
+                      <span class="amount">对账金额合计:{{ getSummariesA(item.deliveryProducts || []) }}元</span>
+                    </div>
+                  </div>
+                </template>
+                <template v-slot:action="{ row,$index }">
+                  <el-popconfirm class="ele-action" title="确定要删除吗?" @confirm="remove(index,$index,'line')">
+                    <template v-slot:reference>
+                      <el-link type="danger" v-if="dialogType!=='view'" :underline="false" icon="el-icon-delete">
+                        删除
+                      </el-link>
+                    </template>
+                  </el-popconfirm>
+                </template>
+              </ele-pro-table>
+            </el-tab-pane>
+            <el-tab-pane label="退货单">
+              <ele-pro-table :show-summary="false" :summary-method="getSummaries" ref="table" row-key="id" :needPage="false"
+                          :columns="getColumns(item, 'returnProducts')" max-height="500px" style="margin-bottom: 10px" :datasource="item.returnProducts || []"
+                          cache-key="systemRoleTable17-11122" class="time-form">
+                <template v-slot:toolbar>
+                  <div class="headbox">
+                    <div>
+                      <span class="amount">对账金额合计:{{ getSummariesA(item.returnProducts || []) }}元</span>
+                    </div>
+                  </div>
+                </template>
+                <template v-slot:action="{ row,$index }">
+                  <el-popconfirm class="ele-action" title="确定要删除吗?" @confirm="remove(index,$index,'line')">
+                    <template v-slot:reference>
+                      <el-link type="danger" v-if="dialogType!=='view'" :underline="false" icon="el-icon-delete">
+                        删除
+                      </el-link>
+                    </template>
+                  </el-popconfirm>
+                </template>
+              </ele-pro-table>
+            </el-tab-pane>
+          </el-tabs>
+          
+        </div>
+      </el-collapse-item>
+    </el-collapse>
+
+<!--    <el-row v-if="dialogType=='view'" style="margin-top: 10px">-->
+<!--      <el-col :span="6" style="float: right;">-->
+<!--        <el-descriptions class="margin-top" direction="vertical" :column="3" size="small" border>-->
+<!--          <el-descriptions-item label="本期应收款总额">{{ dataForm.amountReceivablePrice }}</el-descriptions-item>-->
+<!--          <el-descriptions-item label="截止上期欠款">-->
+<!--            <template>{{ dataForm.previousPeriodEndDebt }}</template>-->
+<!--          </el-descriptions-item>-->
+<!--        </el-descriptions>-->
+<!--      </el-col>-->
+<!--    </el-row>-->
   </div>
 
 </template>
 <script>
 import dictMixins from '@/mixins/dictMixins';
+import { pricingWayList } from '@/enum/dict';
 
 export default {
   mixins: [dictMixins],
-
   components: {},
-  props: ['datasource', 'dataForm','dialogType', 'taskDefinitionKey', 'priceObj'],
+  props: ['datasource', 'dialogType', 'dataForm', 'type'],
   computed: {
     getColumns() {
-      return (j)=>{
+      return (item, type)=>{
+        // console.log(this.dataForm)
         let basicFields = [
           {
             width: 60,
@@ -78,11 +171,20 @@ export default {
             type: 'index',
             columnKey: 'index',
             align: 'center',
+            fixed: 'left'
+          },
+          {
+            minWidth: 130,
+            prop: 'statementSubOrderNo',
+            label: type == 'deliveryProducts'? this.type == 'purchase'?'收货单编码':'发货单编码':'退货单编码',
+            align: 'center',
+            slot: 'statementSubOrderNo',
+            showOverflowTooltip: true
           },
           {
             minWidth: 130,
             prop: 'productOperateTime',
-            label: this.subColumnsTypeList[j.subType],
+            label: type == 'deliveryProducts' ? this.type == 'purchase' ? '收货日期' :'发货日期' : '退货日期',
             align: 'center',
             slot: 'productOperateTime',
             showOverflowTooltip: true
@@ -103,17 +205,18 @@ export default {
             align: 'center',
             showOverflowTooltip: true
           },
-          {
-            minWidth: 140,
-            prop: 'subType',
-            label: '退货产品类型',
-            slot: 'subType',
-            align: 'center',
-            show:j.subType==11,
-            showOverflowTooltip: true,formatter(_row, _column, cellValue){
-              return cellValue==12?'实物赔偿':'原货'
-            }
-          },
+          // {
+          //   minWidth: 140,
+          //   prop: 'subType',
+          //   label: '退货产品类型',
+          //   slot: 'subType',
+          //   align: 'center',
+          //   show:j.subType==11,
+          //   showOverflowTooltip: true,formatter(_row, _column, cellValue){
+          //     return cellValue==12?'实物赔偿':'原货'
+          //   }
+          // },
+          
           {
             minWidth: 100,
             prop: 'specification',
@@ -130,23 +233,23 @@ export default {
             slot: 'modelType',
             showOverflowTooltip: true
           },
-          {
-            prop: 'provenance',
-            label: '产地',
-            slot: 'provenance',
-            align: 'center',
-            // show:this.contractBookType==2,
-            minWidth: 200,
-            showOverflowTooltip: true,
-            formatter: (row, column) => {
+          // {
+          //   prop: 'provenance',
+          //   label: '产地',
+          //   slot: 'provenance',
+          //   align: 'center',
+          //   // show:this.contractBookType==2,
+          //   minWidth: 200,
+          //   showOverflowTooltip: true,
+          //   formatter: (row, column) => {
        
-              return row.provenance && row.provenance.length
-                ? row.provenance
-                    .map((item) => this.getDictValue('产地', item ))
-                    .join(',')
-                : '';
-            }
-          },
+          //     return row.provenance && row.provenance.length
+          //       ? row.provenance
+          //           .map((item) => this.getDictValue('产地', item ))
+          //           .join(',')
+          //       : '';
+          //   }
+          // },
           {
             minWidth: 100,
             prop: 'pricingWay',
@@ -155,7 +258,8 @@ export default {
             slot: 'pricingWay',
             showOverflowTooltip: true,
             formatter: (_row, _column, cellValue) => {
-              return _row.pricingWay == 1 ? '按数量计价' : '按重量计价'
+              let pricingWay = pricingWayList.find(item => item.id == cellValue)
+              return pricingWay ? pricingWay.name : ''
             }
           },
           {
@@ -202,61 +306,53 @@ export default {
             slot: 'weightUnit',
             align: "center"
           },
-          // {
-          //   minWidth: 90,
-          //   prop: 'singlePrice',
-          //   label: '单价',
-          //   align: 'center',
-          //   slot: 'singlePrice'
-          // },
           {
             minWidth: 90,
             prop: 'singlePrice',
             label: '单价',
             align: 'center',
             slot: 'singlePrice',
-            show:j.subType==11
           },
           {
             minWidth: 100,
-            prop: 'discountSinglePrice',
-            label: '单价',
+            prop: 'taxRate',
+            label: '税率',
             align: 'center',
-            slot: 'discountSinglePrice',
-            show:j.subType!=11
-
           },
           {
             width: 150,
-            prop: 'notaxSinglePrice',
+            prop: 'noTaxSinglePrice',
             label: '不含税单价',
             align: 'center'
           },
           {
             minWidth: 120,
             prop: 'totalPrice',
-            label: '合计金额',
+            label: '合计',
             slot: 'totalPrice',
             align: 'center',
-            show:j.subType==11
-
+          },
+          {
+            minWidth: 100,
+            prop: 'discountRatio',
+            label: '折让比例',
+            align: 'center',
+          },
+          {
+            minWidth: 100,
+            prop: 'discountSinglePrice',
+            label: '折让单价',
+            align: 'center',
           },
           {
             minWidth: 120,
             prop: 'discountTotalPrice',
-            label: '合计金额',
+            label: '折让合计',
             slot: 'discountTotalPrice',
             align: 'center',
-            show:j.subType!=11
-
           },
-          // {
-          //   minWidth: 100,
-          //   prop: 'discountTotalPrice',
-          //   label: '折让合计金额',
-          //   align: 'center',
-          //   slot: 'discountTotalPrice'
-          // },
+    
+
         ]
         let permissionType = {
           // 'financeLeader': [
@@ -379,57 +475,83 @@ export default {
       }
     },
     getTitle(){
-        return (j)=>{
-          let title=this.subTypeList[j.subType]+(j.statementSubOrderCode||'')+' '
-          if(j.subType==11&&j.subExecType){
-                 if(j.subExecType=='10'){
-                  title=title+' 退货方式:全部原货 '
-                 }
-                 if(j.subExecType=='20'){
-                  title=title+' 退货方式:部分原货+实物赔偿'
-                 }
-                 if(j.subExecType=='30'){
-                  title=title+' 退货方式:部分原货+现金赔偿 '+' 赔偿金额:'+j.amountPayablePrice
-                 }
-                 if(j.subExecType=='40'){
-                  title=title+' 退货方式:全部实物赔偿'
-                 }
-                 if(j.subExecType=='50'){
-                  title=title+' 退货方式:全部现金赔偿  '+' 赔偿金额:'+j.amountPayablePrice
-                 }
-          }
-          return title
+        return (item, type)=>{
+        //   let title=this.subTypeList[j.subType]+(j.statementSubOrderCode||'')+' '
+        //   if(j.subType==11&&j.subExecType){
+        //          if(j.subExecType=='10'){
+        //           title=title+' 退货方式:全部原货 '
+        //          }
+        //          if(j.subExecType=='20'){
+        //           title=title+' 退货方式:部分原货+实物赔偿'
+        //          }
+        //          if(j.subExecType=='30'){
+        //           title=title+' 退货方式:部分原货+现金赔偿 '+' 赔偿金额:'+j.amountPayablePrice
+        //          }
+        //          if(j.subExecType=='40'){
+        //           title=title+' 退货方式:全部实物赔偿'
+        //          }
+        //          if(j.subExecType=='50'){
+        //           title=title+' 退货方式:全部现金赔偿  '+' 赔偿金额:'+j.amountPayablePrice
+        //          }
+        //   }
+        console.log(item[type])
+          const total = item[type]?.reduce((prev, curr) => {
+            console.log(curr.discountTotalPrice)
+            return prev + Number(curr.discountTotalPrice || 0) + '元';
+          }, 0);
+          return `对账金额合计:${total}`
         }
-      }
-  },
-  created(){
-    this.requestDict('产地');
+      },
   },
   data() {
     return {
+      activeNames: [],
+      rules: {},
+      form: {},
       subTypeList:{
         10:'发货单:',
         11:'退货单:',
         12:'实物赔偿清单:',
-
+        30:'调拨单:',
       },
       subColumnsTypeList:{
-        10:'发货日期',
-        11:'退货日期',
+        10: '发货',
+        11: '退货',
+        30: '调拨'
       },
     };
   },
-  watch: {},
+  watch: {
+    datasource: {
+      handler(newVal, oldVal) {
+        console.log('newVal~~~', newVal)
+        if (newVal.length > 0) {
+          this.activeNames = newVal.map((item, index) => index);
+          // console.log('this.activeNames~~~', this.activeNames)
+        }
+      },
+      deep: true
+    }
+  },
+  created(){
+    this.requestDict('产地');
+  },
+  mounted() {
+    // this.activeNames = this.datasource.map((item, index) => index);
+  },
   methods: {
-    handleEditCost(row, p1, p2) {
-      if (!row[p1]) return row[p2] = row.totalPrice.toFixed(2)
-      row[p2] = (row.totalPrice - row[p1]).toFixed(2)
+    remove(tableIndex, lineIndex, delType) {
+      let params = {
+        tableIndex,
+        lineIndex,
+        delType
+      }
+      this.$emit('handleRemove', params)
     },
-
     getSummaries(param) {
       const {columns, data} = param;
       const sums = [];
-      let fields = ['totalPrice', 'notInvoicedPrice', 'invoicedPrice', 'receivablePrice', 'receivedPrice','discountTotalPrice']
+      let fields = ['totalPrice', 'notInvoicedPrice', 'invoicedPrice', 'receivablePrice', 'receivedPrice', 'discountTotalPrice']
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = '合计';
@@ -445,18 +567,52 @@ export default {
               return prev;
             }
           }, 0);
-          sums[index] = sums[index].toFixed(2)
+          sums[index] = (sums[index]).toFixed(2)
         } else {
           sums[index] = '';
         }
       });
 
       return sums;
+    },
+    getSummariesA(table) {
+      return table.reduce((prev, curr) => {
+        return prev + Number(curr.discountTotalPrice || 0)
+      }, 0)
     }
   }
 };
 </script>
 <style lang="scss" scoped>
+.collapse-title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: 96%;
+}
+.collapse-title-left {
+    display: flex;
+    /* justify-content: center; */
+    align-items: center;
+    font-size: 16px;
+}
+.collapse-title-index {
+    width: 24px;
+    height: 24px;
+    background: #63a103;
+    display: inline-block;
+    text-align: center;
+    line-height: 24px;
+    border-radius: 50%;
+    color: #fff;
+    margin-right: 10px;
+    font-size: 14px;
+}
+.collapse-title-right {
+  display:grid;
+  grid-auto-flow: column;
+  gap: 18px;
+}
 .headbox {
   display: flex;
   justify-content: space-between;
@@ -506,6 +662,7 @@ export default {
   align-items: center;
   font-weight: bold;
 }
+
 ::v-deep.el-divider {
   margin: 10px;
   font-weight: bold;

+ 18 - 23
src/views/bpm/handleTask/components/saleOrder/accountstatement/page.vue

@@ -8,34 +8,24 @@
                :dialogType="permissionType"></sale-form>
     <headerTitle title="对账明细" style="margin-top: 30px">
       <template v-slot>
-        <el-row style="font-weight: 700;color: red">
-          <el-divider direction="vertical"></el-divider>
-          <span>总金额:</span>
+        <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.amountReceivablePrice || 0 }}</span>
+            <span>已对账金额:</span>
+            <span>{{ dataForm.amountCompletePrice || 0 }}</span>
             <el-divider direction="vertical"></el-divider>
-            <span>已收金额:</span>
-            <span>{{ dataForm.amountReceivablePass||0 }}</span>
-            <el-divider direction="vertical"></el-divider>
-            <span>应付金额:</span>
-            <span>{{ dataForm.amountPayablePrice || 0 }}</span>
-      
-            <el-divider direction="vertical"></el-divider>
-            <span>已付金额:</span>
-            <span>{{ dataForm.amountPayablePass||0 }}</span>
-
-
-        </el-row>
+            <span>未对账金额:</span>
+            <span>{{ dataForm.amountUnCompletePrice || 0 }}</span>
+          </el-row>
       </template>
     </headerTitle>
-    <recorpayTableList
+    <!-- <recorpayTableList
       ref="recorpayListRef"
       :dataForm="dataForm"
       :recorpayList.sync="recorpayList"
       :dialogType="permissionType"
-    ></recorpayTableList>
+    ></recorpayTableList> -->
     <inventoryTable ref="inventoryTableref" :priceObj="priceObj" :dataForm="dataForm" :datasource.sync="datasource"
                     :dialogType="permissionType"
                     :taskDefinitionKey="taskDefinitionKey"></inventoryTable>
@@ -47,7 +37,7 @@
 
 import InventoryTable from "./inventoryTable.vue";
 import saleForm from "./saleForm.vue";
-import {getSearchMergeListByTypeAPI, infoAccountStatementAPI,} from "@/api/bpm/components/saleManage/saleorder";
+import {getSearchMergeListByTypeAPI, infoAccountStatementAPI, accountstatementInfoAPI} from "@/api/bpm/components/saleManage/saleorder";
 import recorpayTableList from './recorpayTableList.vue';
 
 export default {
@@ -55,7 +45,8 @@ export default {
   props: ['permissionType', 'businessId', 'taskDefinitionKey'],
   components: {
     InventoryTable,
-    saleForm,recorpayTableList
+    saleForm,
+    recorpayTableList
   },
   data() {
     return {
@@ -63,6 +54,7 @@ export default {
       dataForm: {
         sourceType: '',
         dateType: '',
+        queryDimension: '',
         dateValue: '',
         contactId: '',
         contactName: '',
@@ -126,9 +118,12 @@ export default {
 
     //获取对账单详情
     async getInfo(id) {
-      let data = await infoAccountStatementAPI(id)
+      let data = await accountstatementInfoAPI(id)
       this.datasource = data?.orderList || []
-      this.recorpayList=data?.recorpayList||[]
+      // this.recorpayList=data?.recorpayList||[]
+      data.amountTotalPrice = data.orderList.reduce((pre, cur) => pre + +cur.amountTotalPrice, 0),
+      data.amountCompletePrice = data.orderList.reduce((pre, cur) => pre + +cur.statementAmount, 0),
+      data.amountUnCompletePrice = data.orderList.reduce((pre, cur) => pre + +cur.unStatementAmount, 0)
       this.dataForm = data
       //this.priceObj.previousPeriodEndDebt = data.previousPeriodEndDebt
       switch (this.dataForm.dateType) {

+ 323 - 0
src/views/bpm/handleTask/components/saleOrder/accountstatement/saleForm copy.vue

@@ -0,0 +1,323 @@
+<template>
+  <el-form ref="form" :model="dataForm" :rules="rules" label-width="120px">
+    <headerTitle title="对账单信息"></headerTitle>
+    <el-row>
+      <el-col :span="12">
+        <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="12">
+        <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"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="12">
+        <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="12" 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="6" 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="6" 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="12">
+        <el-form-item prop="createUserName" label="对账人">
+          <el-input disabled v-model="dataForm.createUserName"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item prop="createTime" label="对账时间">
+          <el-input disabled v-model="dataForm.createTime"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item
+          v-if="taskDefinitionKey == 'uploadReceipt'"
+          prop="repliedFiles"
+          label="回执附件"
+        >
+          <fileMain v-model="dataForm.repliedFiles"></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>
+    <parentList ref="parentRef" @changeParent="getCusInfo"></parentList>
+    <orderListDialog
+      ref="orderListDialogRef"
+      @changeParent="getOrderInfo"
+    ></orderListDialog>
+  </el-form>
+</template>
+
+<script xmlns:el-col="http://www.w3.org/1999/html">
+  import parentList from './customerListDialog.vue';
+  import OrderListDialog from './orderListDialog.vue';
+  import fileUpload from '@/components/upload/fileUpload.vue';
+  // import fileMain from "@/components/addDoc/index.vue";
+
+  export default {
+    name: 'saleForm',
+    components: {
+      // fileMain,
+      fileUpload,
+      OrderListDialog,
+      parentList
+    },
+    props: ['dataForm', 'datasource', 'dialogType', 'taskDefinitionKey'],
+    data() {
+      return {
+        monthByDays: {},
+
+        rules: {
+          sourceType: { required: true, message: '请选择', trigger: 'change' },
+          contactId: { required: true, message: '请选择', trigger: 'change' },
+          projectId: { 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'
+          },
+          repliedFiles: {
+            required: this.taskDefinitionKey == 'uploadReceipt',
+            message: '请上传',
+            trigger: 'change'
+          }
+        }
+      };
+    },
+    methods: {
+      //查询
+      handleSearch() {
+        this.$emit('handleSearch', this.dataForm);
+      },
+      //
+      getDays() {},
+      //获取客户信息
+      handleGetCus() {
+        let item = { id: this.dataForm.contactId };
+        this.$refs.parentRef.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.partaId,
+          contactName: obj.partaName,
+          sourceName: obj.orderNo,
+          sourceId: obj.id
+        });
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
+      //切换来源类型重置数据
+      handleChange() {
+        let params = Object.assign(
+          {},
+          {
+            ...this.dataForm,
+            orderNo: '',
+            orderId: '',
+            contactId: '',
+            contactName: '',
+            sourceName: '',
+            sourceId: ''
+          }
+        );
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
+      reloadTableData() {
+        this.$emit('update:datasource', []);
+      }
+    },
+    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">
+  ::v-deep.el-divider {
+    margin: 10px;
+    font-weight: bold;
+  }
+</style>

+ 186 - 42
src/views/bpm/handleTask/components/saleOrder/accountstatement/saleForm.vue

@@ -2,10 +2,10 @@
   <el-form ref="form" :model="dataForm" :rules="rules" label-width="120px">
     <headerTitle title="对账单信息"></headerTitle>
     <el-row>
-      <el-col :span="12">
+      <el-col :span="8">
         <el-form-item label="来源类型" prop="sourceType">
           <el-select
-            :disabled="dialogType == 'view'"
+            :disabled="dialogType == 'view' || !!saleOrderData?.id"
             clearable
             class="ele-block"
             v-model="dataForm.sourceType"
@@ -15,18 +15,19 @@
             <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="12">
+      <el-col :span="8">
         <el-form-item
           label="选择客户"
           prop="contactId"
           v-if="dataForm.sourceType == 1"
         >
           <el-input
-            :disabled="dialogType == 'view'"
+            :disabled="dialogType == 'view' || !!contactData?.id"
             v-model="dataForm.contactName"
             @click.native="handleGetCus"
           ></el-input>
@@ -36,11 +37,11 @@
         <!--        </el-form-item>-->
         <el-form-item
           label="选择订单"
-          prop="sourceName"
+          prop="sourceId"
           v-if="dataForm.sourceType == 3"
         >
           <el-input
-            :disabled="dialogType == 'view'"
+          :disabled="dialogType == 'view'"
             v-model="dataForm.sourceName"
             @click.native="handleGetOrd"
           ></el-input>
@@ -53,12 +54,28 @@
           <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' || !!saleOrderData?.id"
+            clearable
+            class="ele-block"
+            v-model="dataForm.queryDimension"
+            placeholder="请选择"
+          >
+            <el-option label="按发货单" :value="1" />
+            <el-option label="按调拨单" :value="2" />
+            <el-option label="按收货单" :value="3" />
+          </el-select>
+        </el-form-item>
+      </el-col>
     </el-row>
     <el-row>
-      <el-col :span="12">
+      <el-col :span="8">
         <el-form-item label="查询方式" prop="dateType">
           <el-select
             :disabled="dialogType == 'view'"
@@ -75,7 +92,7 @@
           </el-select>
         </el-form-item>
       </el-col>
-      <el-col :span="12" v-if="![2].includes(dataForm.dateType)">
+      <el-col :span="8" v-if="![2].includes(dataForm.dateType)">
         <el-form-item
           label="选择年度"
           prop="year"
@@ -113,6 +130,7 @@
           v-if="[4].includes(dataForm.dateType)"
         >
           <el-date-picker
+            :key="dataForm.dateType"
             :disabled="dialogType == 'view'"
             v-model="dataForm.dateTimeRange"
             value-format="yyyy-MM-dd"
@@ -126,7 +144,7 @@
           </el-date-picker>
         </el-form-item>
       </el-col>
-      <el-col :span="6" v-if="[2].includes(dataForm.dateType)">
+      <el-col :span="8" v-if="[2].includes(dataForm.dateType)">
         <el-form-item
           label="选择年度"
           prop="year"
@@ -144,7 +162,7 @@
           </el-date-picker>
         </el-form-item>
       </el-col>
-      <el-col :span="6" v-if="[2].includes(dataForm.dateType)">
+      <el-col :span="8" v-if="[2].includes(dataForm.dateType)">
         <el-form-item
           label="选择季度"
           prop="quarter"
@@ -167,23 +185,33 @@
       </el-col>
     </el-row>
     <el-row>
-      <el-col :span="12">
+      <el-col :span="8">
+        <el-form-item prop="createUserName" label="对账金额">
+          <el-input disabled v-model="accountStatementPrice"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8">
+        <el-form-item prop="createUserName" 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="12">
+    </el-row>
+    <el-row>
+      <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="12">
-        <el-form-item
-          v-if="taskDefinitionKey == 'uploadReceipt'"
-          prop="repliedFiles"
-          label="回执附件"
-        >
-          <fileMain v-model="dataForm.repliedFiles"></fileMain>
+        <el-form-item prop="repliedFiles" label="回执附件">
+          <fileMain v-model="dataForm.repliedFiles" type="view"></fileMain>
         </el-form-item>
       </el-col>
     </el-row>
@@ -194,38 +222,88 @@
         >
       </el-col>
     </el-row>
+
     <parentList ref="parentRef" @changeParent="getCusInfo"></parentList>
     <orderListDialog
       ref="orderListDialogRef"
       @changeParent="getOrderInfo"
+      :contactData="contactData"
     ></orderListDialog>
+    <!-- <contractListDialog
+      ref="selectContractRef"
+      @changeParent="changeContract"
+      :type="1"
+      :isAdd="true"
+    ></contractListDialog> -->
   </el-form>
 </template>
-
 <script xmlns:el-col="http://www.w3.org/1999/html">
   import parentList from './customerListDialog.vue';
   import OrderListDialog from './orderListDialog.vue';
-  import fileUpload from '@/components/upload/fileUpload.vue';
-  // import fileMain from "@/components/addDoc/index.vue";
+  import { getFile } from '@/api/system/file';
+  // import fileMain from '@/components/addDoc/index.vue';
+  // import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
+// import { accountStatementExportAPI } from '@/api/saleManage/accountstatement';
 
   export default {
     name: 'saleForm',
-    components: {
+    components: { 
+      OrderListDialog, 
+      parentList, 
       // fileMain,
-      fileUpload,
-      OrderListDialog,
-      parentList
+      //  contractListDialog
+    },
+    //客户管理数据
+    props: {
+      dataForm: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      },
+      datasource: {
+        type: Array,
+        default: () => {
+          return [];
+        }
+      },
+      dialogType: '',
+      contactData: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      },
+      saleOrderData: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      },
+      // recorpayList: {
+      //   type: Object,
+      //   default: () => {
+      //     return [];
+      //   }
+      // },
+      
     },
-    props: ['dataForm', 'datasource', 'dialogType', 'taskDefinitionKey'],
     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' },
@@ -235,18 +313,59 @@
             message: '请选择',
             trigger: 'change'
           },
-          repliedFiles: {
-            required: this.taskDefinitionKey == 'uploadReceipt',
-            message: '请上传',
-            trigger: 'change'
-          }
+          sourceId: { required: true, message: '请选择', trigger: 'change' },
+          contractId: { required: true, message: '请选择', trigger: 'change' },
+          queryDimension: { required: true, message: '请选择', trigger: 'change' },
         }
       };
     },
+    computed: {
+      //计算未对账金额
+      accountStatementPrice() {
+        return this.datasource.reduce((pre, cur) => pre + +cur.amountTotalPrice, 0);
+      },
+      //计算相关订单号
+      relatedOrderNumber() {
+        return this.datasource.map((item) => item.orderNo).join(',');
+      }
+    },
     methods: {
       //查询
       handleSearch() {
-        this.$emit('handleSearch', this.dataForm);
+        //
+        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() {},
@@ -266,6 +385,22 @@
         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.partaId,
+          contactName: obj.partaName
+        });
+        this.$emit('update:dataForm', params);
+        this.reloadTableData();
+      },
       //获取订单信息
       handleGetOrd() {
         let item = { id: this.dataForm.orderId };
@@ -273,6 +408,7 @@
       },
       //选择订单信息回调
       getOrderInfo(obj) {
+        this.dataForm.sourceType = 3;
         let params = Object.assign({}, this.dataForm, {
           orderId: obj.id,
           orderNo: obj.orderNo,
@@ -285,7 +421,7 @@
         this.reloadTableData();
       },
       //切换来源类型重置数据
-      handleChange() {
+      handleChange(val) {
         let params = Object.assign(
           {},
           {
@@ -295,14 +431,27 @@
             contactId: '',
             contactName: '',
             sourceName: '',
-            sourceId: ''
+            sourceId: '',
+            amountPayablePrice: '',
+            amountReceivablePrice: '',
+            amountTotalPrice: '',
+            amountPayablePass: '',
+            amountReceivablePass: ''
           }
         );
+
         this.$emit('update:dataForm', params);
         this.reloadTableData();
+        if (val == 1 && this.contactData.id) {
+          this.getCusInfo(this.contactData);
+        }
       },
       reloadTableData() {
         this.$emit('update:datasource', []);
+        // this.$emit('update:recorpayList', []);
+      },
+      downloadFile(file) {
+        getFile({ objectName: file.storePath }, file.name);
       }
     },
     mounted() {
@@ -315,9 +464,4 @@
   };
 </script>
 
-<style scoped lang="scss">
-  ::v-deep.el-divider {
-    margin: 10px;
-    font-weight: bold;
-  }
-</style>
+<style scoped lang="scss"></style>