Просмотр исходного кода

新增费用申请流程 发票管理流程

Z 2 лет назад
Родитель
Сommit
bbed103526
31 измененных файлов с 4010 добавлено и 921 удалено
  1. 61 0
      src/api/bpm/components/financialManage/invoiceManage/index.js
  2. 12 1
      src/api/bpm/components/saleManage/saleorder.js
  3. 1 1
      src/views/bpm/handleTask/components/contractBook/addDialog.vue
  4. 219 0
      src/views/bpm/handleTask/components/financialManage/components/accountstatementDialog.vue
  5. 120 0
      src/views/bpm/handleTask/components/financialManage/components/accountstatementSearch.vue
  6. 1 1
      src/views/bpm/handleTask/components/financialManage/components/contractListDialog.vue
  7. 0 0
      src/views/bpm/handleTask/components/financialManage/components/contractSearch.vue
  8. 1 1
      src/views/bpm/handleTask/components/financialManage/components/customerListDialog.vue
  9. 0 0
      src/views/bpm/handleTask/components/financialManage/components/customerSearch.vue
  10. 475 0
      src/views/bpm/handleTask/components/financialManage/components/feeRelatedInfoTable.vue
  11. 3 4
      src/views/bpm/handleTask/components/financialManage/components/opportunityDialog.vue
  12. 0 0
      src/views/bpm/handleTask/components/financialManage/components/opportunitySearch.vue
  13. 252 0
      src/views/bpm/handleTask/components/financialManage/components/planDialog.vue
  14. 151 0
      src/views/bpm/handleTask/components/financialManage/components/planSearch.vue
  15. 32 276
      src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/addOrEditDialog.vue
  16. 8 65
      src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/detailDialog.vue
  17. 1 1
      src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/submit.vue
  18. 70 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/accountInfoDialog.vue
  19. 221 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/accountstatementDialog.vue
  20. 120 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/accountstatementSearch.vue
  21. 380 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/addOrEditDialog.vue
  22. 252 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/detailDialog.vue
  23. 331 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/purchasingAccountTable.vue
  24. 309 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/saleAccountTable.vue
  25. 277 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/components/tableInfo.vue
  26. 181 0
      src/views/bpm/handleTask/components/financialManage/invoiceManage/submit.vue
  27. 243 288
      src/views/bpm/handleTask/components/purchaseOrder/accountstatement/inventoryTable.vue
  28. 1 1
      src/views/bpm/handleTask/components/purchaseOrder/invoice/submit.vue
  29. 270 261
      src/views/bpm/handleTask/components/saleOrder/accountstatement/inventoryTable.vue
  30. 16 9
      src/views/bpm/handleTask/components/saleOrder/saleReturnGoods/detailDialog.vue
  31. 2 12
      src/views/bpm/handleTask/components/saleOrder/saleReturnGoods/submit.vue

+ 61 - 0
src/api/bpm/components/financialManage/invoiceManage/index.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request';
+
+/*  费用申请  */
+
+
+// 列表
+export async function invoiceApplyPageListAPI(data) {
+  let par = new URLSearchParams(data);
+  const res = await request.get(`/eom/fininvoiceapply/page?` + par, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+
+// 新增
+export async function invoiceApplySaveAPI(data) {
+  const res = await request.post(`/eom/fininvoiceapply/save`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 编辑
+export async function invoiceApplyUpdateAPI(data) {
+  const res = await request.put(`/eom/fininvoiceapply/update`, data);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 信息
+export async function  invoiceApplyInfoAPI(id) {
+  const res = await request.get(`/eom/fininvoiceapply/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 删除
+export async function invoiceApplyRemoveAPI(data) {
+  const res = await request.delete('/eom/fininvoiceapply/delete', {data});
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 流程作废
+ */
+export async function cancel(data) {
+  const res = await request.put(`/bpm/finInvoiceApply/notPass`, data);
+  if (res.data.code == 0) {
+    return Promise.resolve(res.data);
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 12 - 1
src/api/bpm/components/saleManage/saleorder.js

@@ -248,7 +248,16 @@ export async function approveTaskWithVariablesAPI(data) {
   const res = await request.put(`/bpm/task/approveTaskWithVariables`, data);
   return res.data;
 }
-
+/**
+ * 对账单 获取信息列表
+ */
+export async function getAccountstatementList(params) {
+  const res = await request.post(`/eom/accountstatement/page`, params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 /**
  * 对账单 查询待导入的账单明细
  */
@@ -317,6 +326,8 @@ export async function infoAccountStatementAPI(id) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+
 /**
  * 对账单 提交发起流程
  */

+ 1 - 1
src/views/bpm/handleTask/components/contractBook/addDialog.vue

@@ -542,7 +542,7 @@ import InquiryManageList from "@/views/bpm/handleTask/components/inquiryManage/i
 import InquiryList from "@/views/bpm/handleTask/components/contractBook/inquiryList.vue";
 import QuotationList from "@/views/bpm/handleTask/components/contractBook/quotationList.vue";
 import OpportunityDialog
-  from "@/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/opportunityDialog.vue";
+  from "@/views/bpm/handleTask/components/financialManage/components/opportunityDialog.vue";
 import {getplanDetail} from "@/api/bpm/components/purchasingManage/purchasePlanManage";
 import {contactDetail} from '@/api/bpm/components/saleManage/contact';
 export default {

+ 219 - 0
src/views/bpm/handleTask/components/financialManage/components/accountstatementDialog.vue

@@ -0,0 +1,219 @@
+<template>
+  <el-dialog
+    title="选择对账单"
+    custom-class="ele-dialog-form long-dialog-form"
+    :visible.sync="accountstatementDialogFlag"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    top="5vh"
+    :close-on-press-escape="false"
+    append-to-body
+    width="80%"
+  >
+    <el-card shadow="never">
+      <search @search="reload"></search>
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        row-key="id"
+        height="calc(100vh - 500px)"
+        class="dict-table"
+        @cell-click="cellClick"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:action="{ row }">
+          <el-radio class="radio" v-model="radio" :label="row.id"><i></i></el-radio>
+        </template>
+      </ele-pro-table>
+    </el-card>
+
+    <div class="btns" slot="footer">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import search from './accountstatementSearch.vue';
+import {getAccountstatementList} from "@/api/bpm/components/saleManage/saleorder";
+
+export default {
+  components: {
+    search
+  },
+  props: {
+    accountstatementDialogFlag: {
+      default: false,
+      type: Boolean
+    },
+    accountType:{
+      default: 1,
+      type: [String,Number]
+    },
+  },
+  data() {
+    return {
+      currentIndex: null,
+      columns: [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择',
+          fixed: 'left'
+        },
+        {
+          prop: 'statementNo',
+          label: '对账单编码',
+          align: 'center',
+          slot: 'statementNo',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 180
+        },
+        {
+          prop: 'startDate',
+          label: '对账开始日期',
+          align: 'center',
+          slot: 'startDate',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'endDate',
+          label: '对账结束日期',
+          align: 'center',
+          slot: 'endDate',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'amountTotalPrice',
+          label: '总金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'amountReceivablePrice',
+          label: '应收金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'amountPayablePrice',
+          label: '应付金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 170
+        },
+      ],
+
+      radio: null
+    };
+  },
+
+  methods: {
+    init(item = {}, currentIndex = '') {
+      this.currentIndex = currentIndex;
+      // if (item.id) {
+      //   this.radio = item.id;
+      // }
+    },
+    /* 表格数据源 */
+    datasource({page, limit, where, order}) {
+      return getAccountstatementList({
+        pageNum: page,
+        size: limit,
+        ...where,
+        type: this.accountType,
+        reviewStatus: 2,
+
+      });
+    },
+
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({pageNum: 1, where: where});
+    },
+
+    handleNodeClick(data, node) {
+      this.reload({categoryId: data.id});
+    },
+
+    // 单击获取id
+    cellClick(row) {
+      this.current = row;
+      this.radio = row.id;
+    },
+    handleClose() {
+      this.$emit('update:accountstatementDialogFlag', false)
+    },
+
+    selected() {
+      if (!this.current) {
+        return this.$message.warning('请至少选择一条数据');
+      }
+      this.$emit('changeParent', this.current, this.currentIndex);
+      this.handleClose();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
+
+.table_col {
+  padding-left: 10px;
+
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 120 - 0
src/views/bpm/handleTask/components/financialManage/components/accountstatementSearch.vue

@@ -0,0 +1,120 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="对账单编码:" prop="statementNo">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.statementNo"
+          ></el-input>
+        </el-form-item>
+
+      </el-col>
+
+      <!--      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">-->
+
+      <!--        <el-form-item label="创建时间:" prop="createTimeStart">-->
+      <!--          <el-date-picker-->
+      <!--            v-model="createTime"-->
+      <!--            @change="changeDate"-->
+      <!--            type="daterange"-->
+      <!--            style="width:292px"-->
+      <!--            value-format="yyyy-MM-dd"-->
+      <!--            start-placeholder="开始时间"-->
+      <!--            end-placeholder="结束时间"-->
+      <!--            :default-time="['00:00:00', '23:59:59']">-->
+      <!--          </el-date-picker>-->
+      <!--        </el-form-item>-->
+
+      <!--      </el-col>-->
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+
+        <el-form-item label="名称:" prop="contactName">
+          <el-input
+            placeholder="请输入"
+            style="max-width:320px"
+            v-model.trim="params.contactName" controls-position="right">
+          </el-input>
+
+        </el-form-item>
+
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:4 }">
+
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+          >
+            查询
+          </el-button>
+          <el-button @click="reset">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script>
+import {reviewStatusEnum} from '@/enum/dict';
+
+const repliedOptions = [
+  {value: 0, label: '否'},
+  {value: 1, label: '是'},
+]
+export default {
+  data() {
+    // 默认表单数据
+    const defaultParams = {
+      contactName: '',
+      statementNo: '',
+      projectId: '',
+      projectName: '',
+      createTimeEnd: '',
+      createTimeStart: ''
+    };
+    return {
+      reviewStatusEnum,
+      defaultParams,
+      repliedOptions,
+      createTime: [],
+      // 表单数据
+      params: {...defaultParams}
+    };
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  methods: {
+    //选择时间
+    changeDate(e) {
+      this.createTime = e
+    },
+    /* 搜索 */
+    search() {
+      let [createTimeStart, createTimeEnd] = this.createTime
+      this.params = Object.assign({}, this.params, {createTimeStart, createTimeEnd})
+      this.$emit('search', {
+        ...this.params
+      });
+    },
+    /*  重置 */
+    reset() {
+      this.createTime = []
+      this.params = Object.assign({}, {...this.defaultParams});
+      this.search();
+    }
+  }
+};
+</script>

+ 1 - 1
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/contractListDialog.vue → src/views/bpm/handleTask/components/financialManage/components/contractListDialog.vue

@@ -55,7 +55,7 @@
 <script>
 import searchContract from './contractSearch.vue';
 import {getTableList} from '@/api/bpm/components/contractManage/contractBook';
-import AssetTree from '@/components/AssetTree';
+import AssetTree from '@/components/AssetTree/index.vue';
 
 export default {
   components: {

+ 0 - 0
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/contractSearch.vue → src/views/bpm/handleTask/components/financialManage/components/contractSearch.vue


+ 1 - 1
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/customerListDialog.vue → src/views/bpm/handleTask/components/financialManage/components/customerListDialog.vue

@@ -34,7 +34,7 @@
 
 import {contactPage} from '@/api/bpm/components/saleManage/contact';
 import customerSearch from './customerSearch.vue';
-import AssetTree from '@/components/AssetTree';
+import AssetTree from '@/components/AssetTree/index.vue';
 
 export default {
   components: {

+ 0 - 0
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/customerSearch.vue → src/views/bpm/handleTask/components/financialManage/components/customerSearch.vue


+ 475 - 0
src/views/bpm/handleTask/components/financialManage/components/feeRelatedInfoTable.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <el-form ref="form" :model="form">
+
+      <!-- 数据表格 -->
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="form.datasource"
+        :needPage="false"
+        :toolkit="[]"
+        :minHeight="100"
+        tool-class="ele-toolbar-form"
+        cache-key="eomContactPageTable"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <el-button
+            v-if="dialogType!=='view'"
+            size="small"
+            type="primary"
+            icon="el-icon-plus"
+            class="ele-btn-icon"
+            @click="handleAddInfo">
+            新增关联信息
+          </el-button>
+        </template>
+
+        <template v-slot:action="{row,$index}">
+          <el-popconfirm
+            class="ele-action"
+            title="确定要删除此信息吗?"
+            @confirm="handleDelInfo($index)"
+          >
+            <template v-slot:reference>
+              <el-link
+                type="danger"
+                :underline="false"
+                icon="el-icon-delete"
+              >
+                删除
+              </el-link>
+            </template>
+          </el-popconfirm>
+        </template>
+        <template v-slot:linkType="{row,$index}">
+          <el-form-item :prop="'datasource.'+$index+'.linkType'"
+                        :rules="{required:true,message:'请选择关联类型',trigger:['blur','change']}">
+            <DictSelection clearable dictName="关联类型" v-model="row.linkType"
+                           :disabled="dialogType==='view'"
+                           @itemChange="(val)=>handleChangeFinLink(val,row,$index)"></DictSelection>
+          </el-form-item>
+        </template>
+        <template v-slot:linkName="{row,$index}" v-if="dialogType!=='view'">
+          <!--         客户   -->
+          <el-form-item v-if="row.linkType==100" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择客户',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        商机   -->
+          <el-form-item v-else-if="row.linkType==120" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择商机',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        销售合同   -->
+          <el-form-item v-else-if="row.linkType==130" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择销售合同',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        销售订单   -->
+          <el-form-item v-else-if="row.linkType==140" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择销售订单',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        销售对账单   -->
+          <el-form-item v-else-if="row.linkType==190" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择销售对账单',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        供应商   -->
+          <el-form-item v-else-if="row.linkType==210" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择供应商',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        采购计划   -->
+          <el-form-item v-else-if="row.linkType==230" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择采购计划',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        采购合同   -->
+          <el-form-item v-else-if="row.linkType==250" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        采购订单   -->
+          <el-form-item v-else-if="row.linkType==260" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择采购订单',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+
+          <!--        采购对账单   -->
+          <el-form-item v-else-if="row.linkType==290" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,message:'请选择采购对账单',trigger:['blur','change']}">
+            <el-input v-model="row.linkName" @click.native="(val)=>handleSelectData(val,row,$index)"
+                      clearable></el-input>
+          </el-form-item>
+          <!--        项目   -->
+          <el-form-item v-else-if="row.linkType==900" :prop="'datasource.'+$index+'.linkName'"
+                        :rules="{required:true,trigger:['blur','change']}">
+
+          </el-form-item>
+
+
+        </template>
+        <template v-slot:headerGLLXMC="{column}">
+          <span class="is-required">{{ column.label }}</span>
+        </template>
+      </ele-pro-table>
+    </el-form>
+    <!--选择客户/供应商-->
+    <customer-list-dialog v-if="customerListDialogFlag" :customerListDialogFlag.sync="customerListDialogFlag"
+                          ref="customerListDialogRef" @changeParent="getCustomerData"></customer-list-dialog>
+    <!--选择合同-->
+    <contract-list-dialog v-if="contractListDialogFlag" :contractListDialogFlag.sync="contractListDialogFlag"
+                          ref="contractListDialogRef" @changeParent="getContractData"
+                          :type="contractType"></contract-list-dialog>
+    <!--选择销售订单-->
+    <sale-order-list-dialog ref="saleOrderListDialogRef" @changeParent="getOrderData"></sale-order-list-dialog>
+    <!--选择采购订单-->
+    <purchase-order-list-dialog ref="purchaseOrderListDialogRef"
+                                @changeParent="getOrderData"></purchase-order-list-dialog>
+    <!--商机-->
+    <opportunity-dialog ref="opportunityDialogRef" v-if="opportunityDialogFlag"
+                        :opportunityDialogFlag.sync="opportunityDialogFlag"
+                        @changeParent="getOpportunityData">
+    </opportunity-dialog>
+    <!--对账单-->
+    <account-statement-dialog ref="accountStatementDialogRef"
+                              v-if="accountStatementDialogFlag"
+                              :accountType="accountType"
+                              :accountstatement-dialog-flag.sync="accountStatementDialogFlag"
+                              @changeParent="getAccountData">
+    </account-statement-dialog>
+    <!--采购计划    -->
+    <plan-dialog v-if="planDialogFlag"
+                 :plan-dialog-flag.sync="planDialogFlag"
+                 ref="planDialogRef"
+                 @changeParent="getPlanData">
+    </plan-dialog>
+
+  </div>
+</template>
+
+
+<script>
+
+import contractListDialog from "./contractListDialog.vue";
+import customerListDialog from "./customerListDialog.vue";
+import saleOrderListDialog from "@/views/bpm/handleTask/components/saleOrder/invoice/orderListDialog.vue";
+import purchaseOrderListDialog from "@/views/bpm/handleTask/components/purchaseOrder/invoice/orderListDialog.vue";
+import opportunityDialog from "./opportunityDialog.vue";
+import accountStatementDialog from "./accountstatementDialog.vue";
+import planDialog from "./planDialog.vue";
+
+export default {
+  name: "relatedInfoTable",
+  components: {
+    purchaseOrderListDialog,
+    saleOrderListDialog,
+    customerListDialog,
+    contractListDialog,
+    opportunityDialog,
+    accountStatementDialog,
+    planDialog,
+  },
+  props: {
+    link: {
+      type: Array,
+      default: () => []
+    },
+    dialogType: {
+      type: String,
+      default: ''
+    },
+  },
+  data() {
+    return {
+      editIndex: undefined,//当前修改数据的下标
+      contractType: undefined,//选择关联类型为合同时区分销售合同和采购合同
+      contractListDialogFlag: false,
+      customerListDialogFlag: false,
+      opportunityDialogFlag: false,
+      accountStatementDialogFlag: false,
+      planDialogFlag: false,
+      accountType: 1,
+      form: {
+        datasource: []
+      },
+
+    }
+  },
+  computed: {
+    columns() {
+      let list = [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'linkType',
+          label: '关联类型',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120,
+          slot: 'linkType',
+          headerSlot: 'headerGLLXMC',
+        },
+        {
+          prop: 'linkName',
+          label: '关联类型名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130,
+          slot: 'linkName',
+          headerSlot: 'headerGLLXMC'
+        },
+      ]
+      let action = [{
+        columnKey: 'action',
+        slot: 'action',
+        label: '操作',
+        resizable: false,
+        width: 80,
+        align: 'center',
+        showOverflowTooltip: true,
+        fixed: 'right'
+      },]
+      this.dialogType === 'view' ? list = [...list] : list = [...list, ...action]
+      return list
+    },
+  },
+  mounted() {
+    this.form.datasource = this.link
+  },
+  methods: {
+    //新增关联信息数据
+    handleAddInfo() {
+      this.form.datasource.push(
+        {
+          linkType: '',
+          linkTypeName: '',
+          linkId: '',
+          linkName: '',
+          linkCode: '',
+        }
+      )
+    },
+    //
+    handleSelectData(val, row, index) {
+      this.editIndex = index
+      if (val.target.nodeName == 'I') {
+        row.linkId = ''
+        row.linkName = ''
+        row.linkCode = ''
+        return
+      }
+      switch (row.linkType) {
+        case '100': //客户
+          this.handleSelectContact(row);
+          break;
+        case '120': //商机
+          this.getOpportunityList(row);
+          break
+        case '130': //销售合同
+          this.contractType = 1
+          this.handleSelectContract(row);
+          break
+        case '140': //销售订单
+          this.handleSelectSaleOrder(row);
+          break;
+        case '190': //销售对账单
+          this.accountType = 1
+          this.handleSelectAccount(row);
+          break;
+        case '210': //供应商
+          this.handleSelectContact(row);
+          break
+        case '230': //采购计划
+          this.handleSelectPlan(row);
+          break
+        case '250': //采购合同
+          this.contractType = 2
+          this.handleSelectContract(row);
+          break;
+        case '260': //采购订单
+          this.handleSelectPurchaseOrder(row);
+          break;
+        case '290': //采购对账单
+          this.accountType = 2
+          this.handleSelectAccount(row);
+          break;
+        case '900': //项目
+          this.handleSelectPurchaseOrder(row);
+          break;
+
+
+      }
+
+
+      // // 客户/供应商
+      // if (['100', '210'].includes(row.linkType)) {
+      //   this.handleSelectContact(row)
+      // }else if(['130', '250'].includes(row.linkType)){
+      //   handleSelectContract
+      // }
+
+    },
+    setSelectData(val) {
+      this.$set(this.form.datasource[this.editIndex], 'linkId', val.id)
+      this.$set(this.form.datasource[this.editIndex], 'linkName', val.name)
+      this.$set(this.form.datasource[this.editIndex], 'linkCode', val.code)
+    },
+    //新增关联信息数据
+    handleDelInfo(index) {
+      this.form.datasource.splice(index, 1)
+    },
+    //修改关联类型
+    handleChangeFinLink(val, row, index) {
+      this.editIndex = index
+
+      this.setSelectData({
+        id: '',
+        name: '',
+        code: ''
+      })
+      this.$nextTick(() => {
+        this.$refs.form.clearValidate('datasource.' + index + '.linkName')
+      })
+      if (!val.dictValue) return row.linkTypeName = ''
+      row.linkTypeName = val.dictValue || ''
+
+      // if (val.dictCode == 3) {
+      //   this.getOpportunityList()
+      // }
+
+    },
+
+    //选择客户或者供应商
+    handleSelectContact(row) {
+      this.customerListDialogFlag = true
+      let params = {
+        id: row.contactId,
+        assetTreeId: row.linkType == 210 ? '19' : '17',
+        classType: row.linkType == 210 ? 2 : 1,
+        titleName: row.linkType == 210 ? '选择供应商' : '选择客户',
+      }
+      this.$nextTick(() => {
+        this.$refs.customerListDialogRef.init(params)
+      })
+    },
+    //获取选择 供应商/客户 数据
+    getCustomerData(params) {
+      this.setSelectData(params)
+    },
+    //获取商机
+    async getOpportunityList() {
+      this.opportunityDialogFlag = true
+    },
+    //获取选择的商机数据
+    getOpportunityData(params) {
+      console.log(params);
+      let row = {
+        id: params.id,
+        name: params.name,
+        code: params.code
+      }
+      this.setSelectData(row)
+    },
+    //对账单
+    async handleSelectAccount() {
+      this.accountStatementDialogFlag = true
+    },
+    //获取选择的对账单数据
+    getAccountData(params) {
+      let row = {
+        id: params.id,
+        name: params.statementNo,
+        code: params.statementNo
+      }
+      this.setSelectData(row)
+    },
+    //采购计划
+    async handleSelectPlan() {
+      this.planDialogFlag = true
+    },
+    //获取选择的采购计划数据
+    getPlanData(params) {
+      console.log(params);
+      let row = {
+        id: params.id,
+        name: params.planName,
+        code: params.planCode
+      }
+      this.setSelectData(row)
+    },
+    //选择人员数据
+    changeUserInfo(val, info) {
+      this.form.applyUserName = info.name;
+    },
+    //选择合同
+    handleSelectContract(val) {
+      this.contractListDialogFlag = true
+      this.$nextTick(() => {
+        this.$refs.contractListDialogRef.init()
+      })
+    },
+    //获取合同数据
+    getContractData(params) {
+      let row = {
+        id: params.id,
+        name: params.contractName,
+        code: params.contractNo
+      }
+      this.setSelectData(row)
+    },
+    //选择销售订单
+    handleSelectSaleOrder(val) {
+      this.$refs.saleOrderListDialogRef.open();
+    },
+    //选择采购订单
+    handleSelectPurchaseOrder(val) {
+      this.$refs.purchaseOrderListDialogRef.open();
+    },
+    //获取采购/销售订单数据
+    getOrderData(params) {
+      let row = {
+        id: params.id,
+        name: params.orderNo,
+        code: params.orderNo
+      }
+      this.setSelectData(row)
+    },
+    getTableValidate() {
+      return new Promise((resolve, reject) => {
+        if (this.form.datasource.length == 0) return this.$message.warning('请填写关联信息')
+        this.$refs.form.validate((valid) => {
+          if (!valid) return this.$message.warning('请填写完整信息')
+          resolve(this.form.datasource)
+        })
+      })
+    },
+  }
+}
+</script>
+
+
+<style scoped lang="scss">
+:deep(.el-form-item) {
+  margin-bottom: 0;
+}
+</style>

+ 3 - 4
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/opportunityDialog.vue → src/views/bpm/handleTask/components/financialManage/components/opportunityDialog.vue

@@ -140,9 +140,9 @@ export default {
   methods: {
     init(item = {}, currentIndex = '') {
       this.currentIndex = currentIndex;
-      if (item.id) {
-        this.radio = item.id;
-      }
+      // if (item.id) {
+      //   this.radio = item.id;
+      // }
     },
     /* 表格数据源 */
     datasource({page, limit, where, order}) {
@@ -168,7 +168,6 @@ export default {
     // 单击获取id
     cellClick(row) {
       this.current = row;
-      console.log(row);
       this.radio = row.id;
     },
     handleClose() {

+ 0 - 0
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/opportunitySearch.vue → src/views/bpm/handleTask/components/financialManage/components/opportunitySearch.vue


+ 252 - 0
src/views/bpm/handleTask/components/financialManage/components/planDialog.vue

@@ -0,0 +1,252 @@
+<template>
+  <el-dialog
+    title="选择"
+    :visible.sync="planDialogFlag"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    top="5vh"
+    :close-on-press-escape="false"
+    append-to-body
+
+    width="80%"
+  >
+    <search-quotation @search="reload"></search-quotation>
+    <ele-pro-table
+      ref="table"
+      :columns="columns"
+      :datasource="datasource"
+      row-key="id"
+      height="calc(100vh - 350px)"
+      @cell-click="cellClick"
+
+      class="dict-table"
+    >
+      <!-- 表头工具栏 -->
+      <template v-slot:action="{ row }">
+        <el-radio class="radio" v-model="radio" :label="row.planCode"
+        ><i></i
+        ></el-radio>
+      </template>
+    </ele-pro-table>
+
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import {
+  getTableList
+} from '@/api/bpm/components/purchasingManage/purchasePlanManage';
+import searchQuotation from './planSearch.vue';
+
+export default {
+  components: {
+    searchQuotation
+  },
+  props: {
+    planDialogFlag: {
+      type: Boolean,
+      default: false
+    },
+    generatedType: {
+      type: String,
+      default: ''
+    },
+  },
+
+  data() {
+    return {
+      currentIndex: null,
+      list: [],
+      columns: [
+        {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择'
+        },
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'planName',
+          slot: 'planName',
+          label: '采购计划名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'planCode',
+          slot: 'planCode',
+          label: '采购计划编码',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'requirementCode',
+          label: '采购需求编码',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'sourceTypeName',
+          label: '需求类型',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'requireDeptName',
+          label: '需求部门',
+          align: 'center',
+          slot: 'requireDeptName',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'requireUserName',
+          label: '需求人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'responsibleName',
+          label: '负责人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
+        {
+          prop: 'detailCount',
+          label: '明细条数',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+
+        {
+          prop: 'finishDate',
+          label: '完成日期',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 180
+        },
+        {
+          prop: 'remark',
+          label: '备注',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 170
+        }
+      ],
+      radio: null
+    };
+  },
+  watch: {},
+  methods: {
+    open(planCode) {
+      // //数据回显
+      // if (planCode) {
+      //   this.radio = planCode;
+      //   if (this.list.length > 0) {
+      //     this.current = this.list.find(
+      //       (item) => item.planCode == this.radio
+      //     );
+      //   }
+      // }
+    },
+    /* 表格数据源 */
+    datasource({page, limit, where, order}) {
+      return getTableList({
+        pageNum: page,
+        size: limit,
+        status: 2,
+        ...where
+      }).then((res) => {
+        //this.current = res.list.find((item) => item.planCode == this.radio);
+        this.list = res.list;
+
+        return res;
+      });
+    },
+
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({pageNum: 1, where: where});
+    },
+
+    handleNodeClick(data, node) {
+      this.curNodeData = data;
+      this.reload({categoryLevelId: data.planCode});
+    },
+
+    // 单击获取id
+    cellClick(row) {
+      this.current = row;
+      this.radio = row.planCode;
+    },
+    handleClose() {
+      this.$emit('update:planDialogFlag', false);
+    },
+    async selected() {
+      if (!this.current) {
+        return this.$message.warning('请至少选择一条数据');
+      }
+      this.$emit('changeParent', this.current);
+      this.handleClose();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
+
+.table_col {
+  padding-left: 10px;
+
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 151 - 0
src/views/bpm/handleTask/components/financialManage/components/planSearch.vue

@@ -0,0 +1,151 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="130px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="需求类型:" prop="sourceType">
+          <DictSelection
+            dictName="需求来源类型"
+            clearable
+            v-model="params.sourceType"
+            @itemChange="chaengSource"
+          >
+          </DictSelection>
+        </el-form-item>
+      </el-col>
+
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="需求部门名称:" prop="requireDeptName">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.requireDeptName"
+          ></el-input>
+        </el-form-item>
+      </el-col> -->
+
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="需求部门名称:" prop="requireDeptName">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.requireDeptName"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 6 }">
+        <el-form-item label="完成日期:" prop="finishDateStart">
+          <el-date-picker
+            v-model="finishDate"
+            @change="changeDate"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 10, md: 12 } : { span: 6 }">
+        <el-form-item label="创建时间:" prop="createTimeStart">
+          <el-date-picker
+            style="width: 360px"
+            v-model="createTime"
+            @change="changeCreateTime"
+            type="datetimerange"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            :default-time="['00:00:00', '23:59:59']"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+          >
+            查询
+          </el-button>
+          <el-button @click="reset">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script>
+export default {
+  data() {
+    // 默认表单数据
+    const defaultParams = {
+      finishDateStart: '',
+      finishDateEnd: '',
+      createTimeStart: '',
+      createTimeEnd: '',
+      sourceType: '',
+      sourceTypeName: ''
+    };
+    return {
+      finishDate: [],
+      createTime: [],
+      defaultParams,
+      // 表单数据
+      params: { ...defaultParams }
+    };
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  methods: {
+    //选择需求来源类型
+    chaengSource(data) {
+      this.params.sourceTypeName = data?.dictValue;
+    },
+    //选择时间
+    changeDate(e) {
+      this.finishDate = e;
+    },
+    //选择时间
+    changeCreateTime(e) {
+      this.createTime = e;
+    },
+    /* 搜索 */
+    search() {
+      const [finishDateStart, finishDateEnd] = this.finishDate;
+      const [createTimeStart, createTimeEnd] = this.createTime;
+      this.params = Object.assign({}, this.params, {
+        finishDateStart,
+        finishDateEnd,
+        createTimeStart,
+        createTimeEnd
+      });
+      this.$emit('search', {
+        ...this.params
+      });
+    },
+    /*  重置 */
+    reset() {
+      this.finishDate = [];
+      this.createTime = [];
+      this.params = { ...this.defaultParams };
+      this.search();
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+</style>

+ 32 - 276
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/addOrEditDialog.vue

@@ -11,7 +11,6 @@
             style="margin-bottom: 22px"
           >
             <ele-tree-select
-              :disabled="!['starter'].includes(taskDefinitionKey)"
               clearable
               :data="deptTreeList"
               v-model="form.applyDeptId"
@@ -30,7 +29,6 @@
             style="margin-bottom: 22px"
           >
             <personSelect
-              :disabled="!['starter'].includes(taskDefinitionKey)"
               ref="directorRef"
               v-model="form.applyUserId"
               @selfChange="changeUserInfo"
@@ -46,7 +44,6 @@
             style="margin-bottom: 22px"
           >
             <ele-tree-select
-              :disabled="!['starter'].includes(taskDefinitionKey)"
               clearable
               filterable
               ref="feeTypeTree"
@@ -65,118 +62,38 @@
             label="金额"
             prop="amount"
             style="margin-bottom: 22px">
-            <el-input-number  :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.amount" :precision="2" :controls="false" style="width: 100%"
+            <el-input-number v-model="form.amount" :precision="2" :controls="false" style="width: 100%"
                              :min="0"></el-input-number>
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row :gutter="12">
-        <el-col :span="12">
-          <el-form-item
-            label="关联类型"
-            style="margin-bottom: 22px">
-            <DictSelection  :disabled="!['starter'].includes(taskDefinitionKey)" clearable dictName="关联类型" v-model="form.finLinkType"
-                           @itemChange="handleChangeFinLink"></DictSelection>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12" v-if="['financeApprove'].includes(taskDefinitionKey)">
-          <el-form-item
-            label="会计科目"
-            prop="accountingSubjectId"
-            style="margin-bottom: 22px"
-          >
-            <ele-tree-select
-              clearable
-              filterable
-              ref="treeSelect"
-              :data="accountingSubjectList"
-              v-model="form.accountingSubjectId"
-              valueKey="id"
-              labelKey="name"
-              placeholder="请选择"
-              @change="changeSubjectInfo"
-              default-expand-all
-            />
-          </el-form-item>
-        </el-col >
-
-      </el-row>
-      <el-row v-if="form.finLinkType==1">
-        <el-col :span="12">
-          <el-form-item
-            label="客户名称"
-            prop="contactName"
-            style="margin-bottom: 22px">
-            <el-input  :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.contactName" @click.native="handleSelectContact" clearable></el-input>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row v-if="form.finLinkType==2">
-        <el-col :span="12">
-          <el-form-item
-            label="供应商名称"
-            prop="contactName"
-            style="margin-bottom: 22px">
-            <el-input :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.contactName" @click.native="handleSelectContact" clearable></el-input>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row v-if="form.finLinkType==3">
-        <el-col :span="12">
-          <el-form-item
-            label="商机名称"
-            style="margin-bottom: 22px">
-            <el-select
-              v-model="form.opportunityId"
-              :disabled="!['starter'].includes(taskDefinitionKey)"
-              style="width: 100%"
-              @change="handleSelectOpportunity">
-              <el-option
-                v-for="item in opportunityList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row v-if="form.finLinkType==4">
-        <el-col :span="12">
-          <el-form-item
-            label="选择合同"
-            style="margin-bottom: 22px">
-            <el-input :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.contractName" @click.native="handleSelectContract" clearable></el-input>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row v-if="form.finLinkType==5">
-      </el-row>
-      <el-row v-if="form.finLinkType==6">
-        <el-col :span="12">
-          <el-form-item
-            label="销售订单"
-            style="margin-bottom: 22px">
-            <el-input :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.saleOrderCode" @click.native="handleSelectSaleOrder" clearable></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item
-            label="采购订单"
-            style="margin-bottom: 22px">
-            <el-input :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.purchaseOrderCode" @click.native="handleSelectPurchaseOrder" clearable></el-input>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
+      <!--        <el-col :span="12">-->
+      <!--          <el-form-item-->
+      <!--            label="会计科目"-->
+      <!--            prop="accountingSubjectId"-->
+      <!--            style="margin-bottom: 22px"-->
+      <!--          >-->
+      <!--            <ele-tree-select-->
+      <!--              clearable-->
+      <!--              filterable-->
+      <!--              ref="treeSelect"-->
+      <!--              :data="accountingSubjectList"-->
+      <!--              v-model="form.accountingSubjectId"-->
+      <!--              valueKey="id"-->
+      <!--              labelKey="name"-->
+      <!--              placeholder="请选择"-->
+      <!--              @change="changeSubjectInfo"-->
+      <!--              default-expand-all-->
+      <!--            />-->
+      <!--          </el-form-item>-->
+      <!--        </el-col>-->
 
       <el-row :gutter="12">
         <el-col :span="24">
           <el-form-item
             label="备注"
             style="margin-bottom: 22px">
-            <el-input :disabled="!['starter'].includes(taskDefinitionKey)" v-model="form.remark" type="textarea" clearable></el-input>
+            <el-input v-model="form.remark" type="textarea" clearable></el-input>
           </el-form-item>
         </el-col>
       </el-row>
@@ -184,70 +101,39 @@
         <el-col :span="12">
           <el-form-item prop="repliedFiles" label="附件">
             <fileUpload
-              v-if="['starter'].includes(taskDefinitionKey)"
               v-model="form.files"
               module="main"
               :showLib="false"
               :limit="10"
             />
-            <template  v-else>
-              <el-link
-
-                v-if="form.files.length"
-                v-for="item in form.files"
-                type="primary"
-                :underline="false"
-                @click="downloadFile(item)">
-                {{ item.name }}
-              </el-link>
-            </template>
-
           </el-form-item>
         </el-col>
       </el-row>
-
-
     </el-form>
-    <!--选择客户/供应商-->
-    <customer-list-dialog v-if="customerListDialogFlag" :customerListDialogFlag.sync="customerListDialogFlag"
-                          ref="customerListDialogRef" @changeParent="getCustomerData"></customer-list-dialog>
-    <!--选择合同-->
-    <contract-list-dialog v-if="contractListDialogFlag" :contractListDialogFlag.sync="contractListDialogFlag"
-                          ref="contractListDialogRef" @changeParent="getContractData"></contract-list-dialog>
-    <!--选择销售订单-->
-    <sale-order-list-dialog ref="saleOrderListDialogRef" @changeParent="getSaleOrderData"></sale-order-list-dialog>
-    <!--选择采购订单-->
-    <purchase-order-list-dialog ref="purchaseOrderListDialogRef"
-                                @changeParent="getPurchaseOrderData"></purchase-order-list-dialog>
+    <headerTitle title="关联信息"></headerTitle>
+    <fee-related-info-table ref="feeRelatedInfoTable" v-if="form.link.length||dialogType=='add'" :link.sync="form.link"></fee-related-info-table>
   </div>
 </template>
 <script>
 import personSelect from "@/components/CommomSelect/person-select.vue";
 import {listOrganizations} from "@/api/system/organization";
 import {mapGetters} from "vuex";
-import customerListDialog from "./customerListDialog.vue";
-import contractListDialog from './contractListDialog.vue'
-import saleOrderListDialog from "@/views/bpm/handleTask/components/saleOrder/invoice/orderListDialog.vue";
-import purchaseOrderListDialog from "@/views/bpm/handleTask/components/purchaseOrder/invoice/orderListDialog.vue";
 import fileUpload from "@/components/upload/fileUpload.vue";
 import {
   feeApplyUpdateAPI,
-  finFeeApplySubmit,
   getFeeApplyInfoAPI
 } from "@/api/bpm/components/financialManage/fee-manage/fee-application";
 import {getTreeByPid} from "@/api/classifyManage";
 import {getTableList} from '@/api/bpm/components/saleManage/quotation';
 import {getFile} from "@/api/system/file";
+import feeRelatedInfoTable from "@/views/bpm/handleTask/components/financialManage/components/feeRelatedInfoTable.vue";
 
 export default {
   name: "add-or-edit-dialog",
   components: {
     fileUpload,
-    purchaseOrderListDialog,
-    saleOrderListDialog,
     personSelect,
-    customerListDialog,
-    contractListDialog
+    feeRelatedInfoTable
   },
   computed: {
     ...mapGetters(['user'])
@@ -267,43 +153,30 @@ export default {
       dialogType: '',
       title: '',
       form: {
+        id: '',
         accountingSubjectId: '',
+        accountingSubjectCode: '',
         accountingSubjectName: "",
         amount: undefined,
         applyDeptId: '',
         applyDeptName: "",
         applyUserId: '',
         applyUserName: "",
-        contactId: '',
-        contactName: "",
-        contractCode: "",
-        contractId: '',
-        contractName: "",
-        finLinkType: '',
-        finLinkTypeName: '',
         feeTypeId: '',
         feeTypeName: "",
         feeTypeCode: "",
         files: [],
-        opportunityId: '',
-        opportunityName: "",
-        projectId: '',
-        projectName: "",
-        purchaseOrderCode: "",
-        purchaseOrderId: '',
-        remark: "",
-        saleOrderCode: "",
-        saleOrderId: ''
+        remark: '',
+        link: [],
       },
       feeTypeList: [],
       accountingSubjectList: [],
       deptList: [],
       deptTreeList: [],
-      opportunityList: [],
       rules: {
         applyDeptId: {required: true, message: '请选择', trigger: 'change'},
         applyUserId: {required: true, message: '请选择', trigger: 'change'},
-        accountingSubjectId: {required: true, message: '请选择', trigger: 'change'},
+        // accountingSubjectId: {required: true, message: '请选择', trigger: 'change'},
         feeTypeId: {required: true, message: '请选择', trigger: 'change'},
         amount: {required: true, message: '请输入', trigger: 'blur'},
       }
@@ -330,32 +203,6 @@ export default {
     downloadFile(file) {
       getFile({objectName: file.storePath}, file.name);
     },
-    //修改关联类型
-    handleChangeFinLink(val) {
-      this.form = Object.assign(this.form, {
-        accountingSubjectId: '',
-        accountingSubjectName: "",
-        contactId: '',
-        contactName: "",
-        contractCode: "",
-        contractId: '',
-        contractName: "",
-        opportunityId: '',
-        opportunityName: "",
-        projectId: '',
-        projectName: "",
-        purchaseOrderCode: "",
-        purchaseOrderId: '',
-        saleOrderCode: "",
-        saleOrderId: ''
-      })
-      if (!val.dictValue) return
-      this.form.finLinkTypeName = val.dictValue || ''
-      if (val.dictCode == 3) {
-        this.getOpportunityList()
-      }
-
-    },
     //获取分类管理中的数据
     async getClassifyList(id, listName) {
       let res = await getTreeByPid(id)
@@ -377,48 +224,6 @@ export default {
       let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {}
       this.form.accountingSubjectName = data.name
     },
-
-    //选择客户或者供应商
-    handleSelectContact(val) {
-      if (val.target.nodeName == 'I') {
-        this.form.contactId = ''
-        this.form.contactName = ''
-        this.form.opportunityId = ''
-        this.form.opportunityName = ''
-        this.opportunityList = []
-        return
-      }
-      this.customerListDialogFlag = true
-      let params = {
-        id: this.form.contactId,
-        assetTreeId: this.form.finLinkType == 2 ? '19' : '17',
-        classType: this.form.finLinkType || 1,
-        titleName: this.form.finLinkType == 2 ? '选择供应商' : '选择客户',
-      }
-      this.$nextTick(() => {
-        this.$refs.customerListDialogRef.init(params)
-      })
-    },
-    //获取选择 供应商/客户 数据
-    getCustomerData(params) {
-      this.form.contactId = params.id
-      this.form.contactName = params.name
-    },
-    //获取客户的商机列表
-    async getOpportunityList() {
-      const data = await getTableList({
-        pageNum: 1,
-        size: 999,
-        approvalStatus: 2
-      });
-      //  contactName: name,
-      this.opportunityList = data.list;
-    },
-    //获取选择的商机数据
-    handleSelectOpportunity(val) {
-      if (!val) return this.form.opportunityName = ''
-      this.form.opportunityName = this.opportunityList.find(item => item.id == val)?.name
-    },
     // 获取部门数据
     getDeptList() {
       listOrganizations().then((list) => {
@@ -448,61 +253,12 @@ export default {
     changeUserInfo(val, info) {
       this.form.applyUserName = info.name;
     },
-    //选择合同
-    handleSelectContract(val) {
-      if (val.target.nodeName == 'I') {
-        this.form.contractId = ''
-        this.form.contractName = ''
-        return
-      }
-      this.contractListDialogFlag = true
-      this.$nextTick(() => {
-        this.$refs.contractListDialogRef.init()
-      })
-    },
-    //获取合同数据
-    getContractData(params) {
-      this.form.contractId = params.type == 1 ? params.partaId : params.partbName
-      this.form.contractName = params.type == 1 ? params.partaName : params.partbName
-    },
-    //选择销售订单
-    handleSelectSaleOrder(val) {
-      if (val.target.nodeName == 'I') {
-        this.form.saleOrderId = ''
-        this.form.saleOrderCode = ''
-        return
-      }
-      this.$refs.saleOrderListDialogRef.open();
-    },
-    //获取销售订单数据
-    getSaleOrderData(obj) {
-      this.form = Object.assign({}, this.form, {
-        saleOrderId: obj.id,
-        saleOrderCode: obj.orderNo
-      });
-    },
-    //选择采购订单
-    handleSelectPurchaseOrder(val) {
-      if (val.target.nodeName == 'I') {
-        this.form.purchaseOrderId = ''
-        this.form.purchaseOrderCode = ''
-        return
-      }
-      this.$refs.purchaseOrderListDialogRef.open();
-    },
-    //获取采购订单数据
-    getPurchaseOrderData(obj) {
-      this.form = Object.assign({}, this.form, {
-        purchaseOrderId: obj.id,
-        purchaseOrderCode: obj.orderNo
-      });
-    },
-
     //
     getTableValue() {
       return new Promise((resolve) => {
         this.$refs.form.validate(async valid => {
           if (!valid) return this.$message.warning('有必填项未填,请检查')
+          this.form.link = await this.$refs.feeRelatedInfoTable.getTableValidate()
           const API = feeApplyUpdateAPI
           const id = await API(this.form)
           resolve(id)

+ 8 - 65
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/detailDialog.vue

@@ -42,74 +42,14 @@
        </el-col>
      </el-row>
      <el-row :gutter="12">
-       <el-col :span="24">
-         <el-form-item
-           label="关联类型:"
-         >
-           {{ form.finLinkTypeName }}
-         </el-form-item>
-       </el-col>
-     </el-row>
-     <el-row v-if="form.finLinkType==1">
-       <el-col :span="12">
-         <el-form-item
-           label="客户名称:"
-           prop="contactName"
-         >
-           {{ form.contactName }}
-         </el-form-item>
-       </el-col>
-     </el-row>
-     <el-row v-if="form.finLinkType==2">
-       <el-col :span="12">
-         <el-form-item
-           label="供应商名称:"
-           prop="contactName"
-         >
-           {{ form.contactName }}
-         </el-form-item>
-       </el-col>
-     </el-row>
-     <el-row v-if="form.finLinkType==3">
-       <el-col :span="12">
-         <el-form-item
-           label="商机名称:"
-         >
-           {{ form.opportunityName }}
-         </el-form-item>
-       </el-col>
-     </el-row>
-     <el-row v-if="form.finLinkType==4">
-       <el-col :span="12">
-         <el-form-item
-           label="选择合同:"
-         >
-           {{ form.contractName }}
-         </el-form-item>
-       </el-col>
-     </el-row>
-     <el-row v-if="form.finLinkType==5">
-     </el-row>
-     <el-row v-if="form.finLinkType==6">
        <el-col :span="12">
          <el-form-item
-           label="销售订单:"
+           label="会计科目:"
          >
-           {{ form.saleOrderCode }}
+           {{ form.accountingSubjectName }}
          </el-form-item>
        </el-col>
        <el-col :span="12">
-         <el-form-item
-           label="采购订单:"
-         >
-           {{ form.purchaseOrderCode }}
-         </el-form-item>
-       </el-col>
-     </el-row>
-
-
-     <el-row :gutter="12">
-       <el-col :span="24">
          <el-form-item
            label="备注:">
            {{ form.remark }}
@@ -132,9 +72,9 @@
          </el-form-item>
        </el-col>
      </el-row>
-
-
    </el-form>
+   <headerTitle title="关联信息"></headerTitle>
+   <fee-related-info-table ref="feeRelatedInfoTable" :dialogType="dialogType" v-if="form.link.length" :link.sync="form.link"></fee-related-info-table>
  </div>
 </template>
 
@@ -144,12 +84,14 @@ import dictMixins from '@/mixins/dictMixins';
 import bpmDetail from '@/views/bpm/processInstance/detail.vue';
 import fileUpload from "@/components/upload/fileUpload.vue";
 import {getFeeApplyInfoAPI} from "@/api/bpm/components/financialManage/fee-manage/fee-application";
+import feeRelatedInfoTable from "@/views/bpm/handleTask/components/financialManage/components/feeRelatedInfoTable.vue";
 
 export default {
   mixins: [dictMixins],
   components: {
     fileUpload,
-    bpmDetail
+    bpmDetail,
+    feeRelatedInfoTable
   },
   props:{
     businessId: {
@@ -159,6 +101,7 @@ export default {
   data() {
     return {
       title: '详情',
+      dialogType: 'view',
       form: {},
     };
   },

+ 1 - 1
src/views/bpm/handleTask/components/financialManage/feeManage/feeApplication/submit.vue

@@ -103,7 +103,7 @@ export default {
       tabOptions: [
         {key: 'starter', permissionType: 'update', name: '发起人申请'},
         {key: 'deptLeaderApprove', permissionType: 'view', name: '部门主管审批'},
-        {key: 'financeApprove', permissionType: 'update', name: '财务审批'},
+        {key: 'financeApprove', permissionType: 'view', name: '财务审批'},
       ],
     };
   },

+ 70 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/accountInfoDialog.vue

@@ -0,0 +1,70 @@
+<template>
+  <ele-modal
+    custom-class="ele-dialog-form long-dialog-form"
+    :centered="true"
+    :visible.sync="accountInfoDialogFlag"
+    title="对账信息"
+    top="5vh"
+    append-to-body
+    :close-on-click-modal="false"
+
+    width="85%"
+    :before-close="cancel">
+    <!-- 销售对账单信息   -->
+    <saleAccountTable v-if="accountType==1" ref="inventoryTableref"
+                      :datasource.sync="datasource"
+                      dialogType="view" @getAccountInfo="getAccountInfo"></saleAccountTable>
+    <!-- 采购对账单信息   -->
+    <purchasingAccountTable v-else ref="inventoryTableref"  :datasource.sync="datasource"
+                            dialogType="view" @getAccountInfo="getAccountInfo"></purchasingAccountTable>
+  </ele-modal>
+</template>
+
+<script>
+import purchasingAccountTable from "./purchasingAccountTable.vue";
+import saleAccountTable from "./saleAccountTable.vue";
+import {infoAccountStatementAPI} from "@/api/bpm/components/saleManage/saleorder";
+
+
+export default {
+  name: "accountInfoDialog",
+  components: {
+    purchasingAccountTable,
+    saleAccountTable
+  },
+  props: {
+    accountInfoDialogFlag: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      datasource: [],
+      accountType: ''
+    }
+  },
+  methods: {
+    async init(row) {
+      this.accountType = row.type
+      const data = await infoAccountStatementAPI(row.id)
+      this.datasource = data.orderList
+    },
+    getAccountInfo(row) {
+      this.$emit('getAccountInfo', row)
+      this.cancel()
+    },
+    cancel() {
+      this.$emit("update:accountInfoDialogFlag", false);
+    }
+  }
+}
+</script>
+
+
+<style scoped lang="scss">
+:deep(.el-dialog) {
+  height: 80%;
+  overflow: auto;
+}
+</style>

+ 221 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/accountstatementDialog.vue

@@ -0,0 +1,221 @@
+<template>
+  <el-dialog
+    title="选择对账单"
+    custom-class="ele-dialog-form long-dialog-form"
+    :visible.sync="accountstatementDialogFlag"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    top="5vh"
+    :close-on-press-escape="false"
+    append-to-body
+    width="80%"
+  >
+    <el-card shadow="never">
+      <search @search="reload"></search>
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        row-key="id"
+        height="calc(100vh - 500px)"
+        class="dict-table"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:action="{ row }">
+          <el-button size="mini" type="text" @click="handleSelect(row)">对账明细</el-button>
+        </template>
+      </ele-pro-table>
+    </el-card>
+
+    <div slot="footer">
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+    <!-- 对账明细   -->
+    <accountInfoDialog ref="accountInfoDialogRef"
+                       v-if="accountInfoDialogFlag"
+                       :account-info-dialog-flag.sync="accountInfoDialogFlag"
+    @getAccountInfo="getAccountInfo"></accountInfoDialog>
+  </el-dialog>
+</template>
+
+<script>
+import search from './accountstatementSearch.vue';
+
+import accountInfoDialog from "./accountInfoDialog.vue";
+import {getAccountstatementList} from "@/api/bpm/components/saleManage/saleorder";
+
+export default {
+  components: {
+    search,
+    accountInfoDialog
+  },
+  props: {
+    form: {
+      type: Object,
+      default: () => {
+        return {}
+      }
+    },
+    accountstatementDialogFlag: {
+      default: false,
+      type: Boolean
+    },
+  },
+  data() {
+    return {
+      currentIndex: null,
+      accountInfoDialogFlag: false,
+      columns: [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择',
+          fixed: 'left'
+        },
+        {
+          prop: 'statementNo',
+          label: '对账单编码',
+          align: 'center',
+          slot: 'statementNo',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 180
+        },
+        {
+          prop: 'startDate',
+          label: '对账开始日期',
+          align: 'center',
+          slot: 'startDate',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'endDate',
+          label: '对账结束日期',
+          align: 'center',
+          slot: 'endDate',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'amountTotalPrice',
+          label: '总金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'amountReceivablePrice',
+          label: '应收金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'amountPayablePrice',
+          label: '应付金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 170
+        },
+      ],
+      currentRow:{},
+      radio: null
+    };
+  },
+
+  methods: {
+    init(item = {}, currentIndex = '') {
+      this.currentIndex = currentIndex;
+      // if (item.id) {
+      //   this.radio = item.id;
+      // }
+    },
+    getAccountInfo(item) {
+      this.currentRow.children = item;
+      this.$emit('getAccountData', this.currentRow);
+      this.handleClose()
+    },
+    /* 表格数据源 */
+    datasource({page, limit, where, order}) {
+      return getAccountstatementList({
+        pageNum: page,
+        size: limit,
+        ...where,
+        reviewStatus: 2,
+
+      });
+    },
+
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({pageNum: 1, where: where});
+    },
+    handleSelect(row, index) {
+      this.currentRow = row
+      this.accountInfoDialogFlag = true;
+      this.$nextTick(() => {
+        this.$refs.accountInfoDialogRef.init(row, index);
+      })
+    },
+    handleClose() {
+      this.$emit('update:accountstatementDialogFlag', false)
+    },
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
+
+.table_col {
+  padding-left: 10px;
+
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 120 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/accountstatementSearch.vue

@@ -0,0 +1,120 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="对账单编码:" prop="statementNo">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.statementNo"
+          ></el-input>
+        </el-form-item>
+
+      </el-col>
+
+      <!--      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">-->
+
+      <!--        <el-form-item label="创建时间:" prop="createTimeStart">-->
+      <!--          <el-date-picker-->
+      <!--            v-model="createTime"-->
+      <!--            @change="changeDate"-->
+      <!--            type="daterange"-->
+      <!--            style="width:292px"-->
+      <!--            value-format="yyyy-MM-dd"-->
+      <!--            start-placeholder="开始时间"-->
+      <!--            end-placeholder="结束时间"-->
+      <!--            :default-time="['00:00:00', '23:59:59']">-->
+      <!--          </el-date-picker>-->
+      <!--        </el-form-item>-->
+
+      <!--      </el-col>-->
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+
+        <el-form-item label="名称:" prop="contactName">
+          <el-input
+            placeholder="请输入"
+            style="max-width:320px"
+            v-model.trim="params.contactName" controls-position="right">
+          </el-input>
+
+        </el-form-item>
+
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:4 }">
+
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+          >
+            查询
+          </el-button>
+          <el-button @click="reset">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script>
+import {reviewStatusEnum} from '@/enum/dict';
+
+const repliedOptions = [
+  {value: 0, label: '否'},
+  {value: 1, label: '是'},
+]
+export default {
+  data() {
+    // 默认表单数据
+    const defaultParams = {
+      contactName: '',
+      statementNo: '',
+      projectId: '',
+      projectName: '',
+      createTimeEnd: '',
+      createTimeStart: ''
+    };
+    return {
+      reviewStatusEnum,
+      defaultParams,
+      repliedOptions,
+      createTime: [],
+      // 表单数据
+      params: {...defaultParams}
+    };
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  methods: {
+    //选择时间
+    changeDate(e) {
+      this.createTime = e
+    },
+    /* 搜索 */
+    search() {
+      let [createTimeStart, createTimeEnd] = this.createTime
+      this.params = Object.assign({}, this.params, {createTimeStart, createTimeEnd})
+      this.$emit('search', {
+        ...this.params
+      });
+    },
+    /*  重置 */
+    reset() {
+      this.createTime = []
+      this.params = Object.assign({}, {...this.defaultParams});
+      this.search();
+    }
+  }
+};
+</script>

+ 380 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/addOrEditDialog.vue

@@ -0,0 +1,380 @@
+<template>
+  <div>
+    <el-form ref="form" :rules="rules" :model="form" label-width="130px">
+      <headerTitle title="基本信息"></headerTitle>
+      <el-row :gutter="12">
+        <el-row :gutter="12">
+          <el-col :span="12">
+            <el-form-item
+              label="发票类型"
+              prop="type"
+              style="margin-bottom: 22px">
+              <el-select v-model="form.type" @change="handleSelType" disabled clearable style="width: 100%">
+                <el-option label="开票" :value="1"></el-option>
+                <el-option label="收票" :value="2"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              label="金额"
+              prop="amount"
+              style="margin-bottom: 22px">
+              <el-input-number v-model="form.amount" :precision="2" :disabled="taskDefinitionKey!='starter'"
+                               :controls="false" style="width: 100%"
+                               :min="0"></el-input-number>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-col :span="12">
+          <el-form-item
+            label="申请部门"
+            prop="applyDeptId"
+            style="margin-bottom: 22px"
+          >
+            <ele-tree-select
+              :disabled="taskDefinitionKey!='starter'"
+              clearable
+              :data="deptTreeList"
+              v-model="form.applyDeptId"
+              valueKey="id"
+              labelKey="name"
+              placeholder="请选择"
+              @change="changeDeptInfo"
+              default-expand-all
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="申请人"
+            prop="applyUserId"
+            style="margin-bottom: 22px"
+          >
+            <personSelect
+              :disabled="taskDefinitionKey!='starter'"
+              ref="directorRef"
+              v-model="form.applyUserId"
+              @selfChange="changeUserInfo"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="预计开票日期"
+            style="margin-bottom: 22px">
+            <el-date-picker
+              :disabled="taskDefinitionKey!='starter'"
+              style="width: 100%"
+              v-model="form.expectInvoiceDate"
+              type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            v-if="taskDefinitionKey!='starter'"
+            label="会计科目"
+            prop="accountingSubjectId"
+            style="margin-bottom: 22px"
+          >
+            <ele-tree-select
+              clearable
+              filterable
+              ref="treeSelect"
+              :data="accountingSubjectList"
+              v-model="form.accountingSubjectId"
+              valueKey="id"
+              labelKey="name"
+              placeholder="请选择"
+              @change="changeSubjectInfo"
+              default-expand-all
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="12" v-if="taskDefinitionKey!='starter'">
+        <el-col :span="12">
+          <el-form-item prop="files" label="发票附件">
+            <fileUpload
+              v-model="form.files"
+              module="main"
+              :showLib="false"
+              :limit="10"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <headerTitle title="开票信息"></headerTitle>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="公司名称"
+            prop="companyName"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.companyName" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="统一社会信用代码"
+            prop="companyUsc"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.companyUsc" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+
+
+      </el-row>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="开户银行"
+            prop="companyBankBranchNo"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.companyBankBranchNo" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+
+          <el-form-item
+            label="银行账户"
+            prop="companyBankAccount"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.companyBankAccount" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+
+      </el-row>
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="单位地址"
+            prop="companyAddress"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.companyAddress" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="电话号码"
+            prop="companyTel"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.companyTel" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <headerTitle title="收票信息"></headerTitle>
+
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="收票人"
+            prop="receiverName"
+            style="margin-bottom: 22px"
+          >
+            <el-input v-model="form.receiverName" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="收票人地址"
+            prop="receiverAddress"
+            style="margin-bottom: 22px"
+          >
+            <el-input v-model="form.receiverAddress" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="联系方式"
+            prop="receiverTel"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.receiverTel" :disabled="taskDefinitionKey!='starter'"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <headerTitle title="关联信息"></headerTitle>
+    <table-info v-if="form.detailList.length" :dialogType="taskDefinitionKey!='starter'?'view':'update'"
+                :form="form" ref="table" @setPrice="setPrice"></table-info>
+  </div>
+
+</template>
+<script>
+import personSelect from "@/components/CommomSelect/person-select.vue";
+import {listOrganizations} from "@/api/system/organization";
+import {mapGetters} from "vuex";
+import fileUpload from "@/components/upload/fileUpload.vue";
+import tableInfo from "./tableInfo.vue";
+import {getTreeByPid} from "@/api/classifyManage";
+import {
+  invoiceApplyInfoAPI,
+  invoiceApplyUpdateAPI
+} from "@/api/bpm/components/financialManage/invoiceManage";
+
+
+export default {
+  name: "add-or-edit-dialog",
+  components: {
+    fileUpload,
+    personSelect,
+    tableInfo
+  },
+  props: {
+    businessId: {
+      default: ''
+    },
+    taskDefinitionKey: {
+      default: ''
+    },
+  },
+  provide() {
+    return {
+      invoiceType: () => this.form.type
+    }
+  },
+  computed: {
+    ...mapGetters(['user'])
+  },
+  data() {
+    return {
+      dialogType: '',
+      title: '',
+      form: {
+        accountingSubjectCode: "",
+        accountingSubjectId: '',
+        accountingSubjectName: "",
+        amount: undefined,
+        applyDeptId: '',
+        applyDeptName: "",
+        applyUserId: '',
+        applyUserName: "",
+        companyAddress: "",
+        companyBankAccount: "",
+        companyUsc: "",
+        expectInvoiceDate: "",
+        companyBankBranchNo: "",
+        companyName: "",
+        receiverAddress: "",
+        receiverName: "",
+        receiverTel: "",
+        companyTel: "",
+        detailList: [],
+        drawerId: '',
+        drawerName: "",
+        files: [],
+        invoiceStatus: '',
+        link: [],
+        remark: "",
+        settlementAccountId: '',
+        settlementAccountName: "",
+        type: ''
+      },
+      feeTypeList: [],
+      accountingSubjectList: [],
+      deptList: [],
+      deptTreeList: [],
+      rules: {
+        applyDeptId: {required: true, message: '请选择', trigger: 'change'},
+        applyUserId: {required: true, message: '请选择', trigger: 'change'},
+        accountingSubjectId: {required: true, message: '请选择', trigger: 'change'},
+        feeTypeId: {required: true, message: '请选择', trigger: 'change'},
+        amount: {required: true, message: '请输入', trigger: 'blur'},
+        type: {required: true, message: '请选择', trigger: 'change'},
+      }
+    }
+  },
+  created() {
+    this.init()
+  },
+  methods: {
+    //初始化
+    async init() {
+      await this.getClassifyList(24, 'accountingSubjectList')
+      await this.getDeptList()
+      await this.getInfo(this.businessId)
+      this.$nextTick(async () => {
+        await this.getUserList(this.form.applyDeptId);
+      })
+    },
+    //获取详情
+    async getInfo(id) {
+      this.form = await invoiceApplyInfoAPI(id)
+    },
+    //获取分类管理中的数据
+    async getClassifyList(id, listName) {
+      let res = await getTreeByPid(id)
+      this[listName] = res.data
+    },
+    //获取会计科目选中数据
+    changeSubjectInfo(val) {
+      if (!val) return this.form.accountingSubjectName = ''
+      let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {}
+      this.form.accountingSubjectName = data.name
+    },
+    // 获取部门数据
+    getDeptList() {
+      listOrganizations().then((list) => {
+        this.deptList = list;
+        this.deptTreeList = this.$util.toTreeData({
+          data: list,
+          idField: 'id',
+          parentIdField: 'parentId'
+        });
+      });
+    },
+    // 选择负责人部门
+    changeDeptInfo(id) {
+      const info = this.deptList.find((e) => e.id == id) || {};
+      this.form.applyDeptName = info.name;
+      this.form.applyUserId = '';
+      this.form.applyUserName = '';
+      this.getUserList(id);
+    },
+    // 获取人员数据
+    getUserList(deptId) {
+      if (deptId) {
+        this.$refs.directorRef.getList({deptId});
+      }
+    },
+    //选择人员数据
+    changeUserInfo(val, info) {
+      this.form.applyUserName = info.name;
+    },
+    //
+    handleSelType(val) {
+      this.$refs.table.clearTable()
+    },
+    setPrice(val) {
+      this.form.amount = val
+    },
+    //
+    getTableValue() {
+      return new Promise((resolve, reject) => {
+        this.$refs.form.validate(async valid => {
+          if (!valid) return this.$message.warning('有必填项未填,请检查')
+          let tableData = await this.$refs.table.getTableValidate()
+          this.form.link = tableData.link
+          this.form.detailList = tableData.detailList
+          const API = invoiceApplyUpdateAPI
+          const res = await API(this.form)
+          res.code == '0' ? resolve('1') : reject(new Error(data.message))
+        })
+      })
+
+    },
+  }
+}
+</script>
+<style scoped lang="scss">
+
+</style>

+ 252 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/detailDialog.vue

@@ -0,0 +1,252 @@
+<template>
+  <div>
+    <el-form ref="form" :model="form" label-width="130px">
+      <headerTitle title="基本信息"></headerTitle>
+      <el-row :gutter="12">
+        <el-row :gutter="12">
+          <el-col :span="12">
+            <el-form-item
+              label="发票类型"
+              prop="type"
+              style="margin-bottom: 22px">
+              <el-select v-model="form.type" disabled style="width: 100%">
+                <el-option label="开票" :value="1"></el-option>
+                <el-option label="收票" :value="2"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              label="金额"
+              prop="amount"
+              style="margin-bottom: 22px">
+              <el-input-number disabled v-model="form.amount" :precision="2" :controls="false" style="width: 100%"
+                               :min="0"></el-input-number>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-col :span="12">
+          <el-form-item
+            label="申请部门"
+            prop="applyDeptId"
+            style="margin-bottom: 22px">
+            <el-input v-model="form.applyDeptName" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="申请人"
+            prop="applyUserId"
+            style="margin-bottom: 22px"
+          >
+            <el-input v-model="form.applyUserName" disabled></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="预计开票日期"
+            style="margin-bottom: 22px">
+            <el-date-picker
+              style="width: 100%"
+              v-model="form.expectInvoiceDate"
+              type="date"
+              disabled
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+<!--        <el-col :span="12">-->
+<!--          <el-form-item-->
+<!--            label="会计科目"-->
+<!--            prop="accountingSubjectId"-->
+<!--            style="margin-bottom: 22px">-->
+<!--            <el-input v-model="form.accountingSubjectName" disabled></el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+      </el-row>
+<!--      <el-row :gutter="12">-->
+<!--        <el-col :span="12">-->
+<!--          <el-form-item prop="files" label="发票附件">-->
+<!--            <div v-if="form.files && form.files?.length">-->
+<!--              <el-link-->
+<!--                v-for="link in form.files"-->
+<!--                :key="link.id"-->
+<!--                type="primary"-->
+<!--                :underline="false"-->
+<!--                @click="downloadFile(link)"-->
+<!--              >-->
+<!--                {{ link.name }}-->
+<!--              </el-link-->
+<!--              >-->
+<!--            </div>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+<!--      </el-row>-->
+      <headerTitle title="开票信息"></headerTitle>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="公司名称"
+            prop="companyName"
+            style="margin-bottom: 22px">
+            <el-input disabled v-model="form.companyName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="统一社会信用代码"
+            prop="companyUsc"
+            style="margin-bottom: 22px">
+            <el-input disabled v-model="form.companyUsc"></el-input>
+          </el-form-item>
+        </el-col>
+
+      </el-row>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="开户银行"
+            prop="companyBankBranchNo"
+            style="margin-bottom: 22px">
+            <el-input disabled v-model="form.companyBankBranchNo"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="银行账户"
+            prop="companyBankAccount"
+            style="margin-bottom: 22px">
+            <el-input disabled v-model="form.companyBankAccount"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="电话号码"
+            prop="companyTel"
+            style="margin-bottom: 22px">
+            <el-input disabled v-model="form.companyTel"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="单位地址"
+            prop="companyAddress"
+            style="margin-bottom: 22px">
+            <el-input disabled v-model="form.companyAddress"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <headerTitle title="收票信息"></headerTitle>
+
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="收票人"
+            prop="receiverName"
+            style="margin-bottom: 22px"
+          >
+            <el-input disabled v-model="form.receiverName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="收票人地址"
+            prop="receiverAddress"
+            style="margin-bottom: 22px"
+          >
+            <el-input disabled v-model="form.receiverAddress"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item
+            label="联系方式"
+            prop="receiverTel"
+            style="margin-bottom: 22px"
+          >
+            <el-input disabled v-model="form.receiverTel"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <headerTitle title="关联信息"></headerTitle>
+    <table-info v-if="dialogType!='add'&&form.detailList.length" dialogType="view" :form="form"
+                ref="table"></table-info>
+  </div>
+</template>
+
+<script>
+import {getFile} from '@/api/system/file';
+import dictMixins from '@/mixins/dictMixins';
+import fileUpload from "@/components/upload/fileUpload.vue";
+
+import personSelect from "@/components/CommomSelect/person-select.vue";
+import tableInfo from "./tableInfo.vue";
+import {invoiceApplyInfoAPI} from "@/api/bpm/components/financialManage/invoiceManage";
+
+
+export default {
+  mixins: [dictMixins],
+  components: {
+    tableInfo,
+    personSelect,
+    fileUpload
+  },
+  data() {
+    return {
+      dialogType: '',
+      form: {
+        files: []
+      },
+    };
+  },
+  props:{
+    businessId: {
+      default: ''
+    }
+  },
+  async created() {
+    await this.getInfo(this.businessId)
+  },
+  methods: {
+    //获取详情
+    async getInfo(id) {
+      this.form = await invoiceApplyInfoAPI(id)
+    },
+    downloadFile(file) {
+      getFile({objectName: file.storePath}, file.name);
+    },
+    cancel() {
+      this.$emit('update:detailDialogFlag', false)
+    }
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.ele-dialog-form {
+  .el-form-item {
+    margin-bottom: 10px;
+  }
+}
+
+.headbox {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+
+  .amount {
+    font-size: 14px;
+    font-weight: bold;
+    margin-right: 20px;
+  }
+}
+</style>

+ 331 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/purchasingAccountTable.vue

@@ -0,0 +1,331 @@
+<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>
+            <el-divider direction="vertical"></el-divider>
+            <el-button v-if="!item.hasInvoiceApply" :disabled="isButtonDisabled(item)" type="primary" @click="handleChoose(item,true)">
+              收票
+            </el-button>
+            <span v-else style="color: red">{{'已申请' }}</span>
+          </div>
+        </div>
+        <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="subTypeList[j.subType]+j.statementSubOrderCode" :toolkit="[]" :datasource="j.detailList"
+                         cache-key="systemRoleTable17-11121" class="time-form">
+
+          </ele-pro-table>
+        </div>
+      </div>
+    </div>
+  </div>
+
+</template>
+<script>
+
+export default {
+  components: {},
+  inject:['invoiceType'],
+  props: ['datasource', 'dialogType','dataForm'],
+  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: 100,
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            slot: 'specification',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 100,
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            slot: 'modelType',
+            showOverflowTooltip: true
+          },
+          // {
+          //   minWidth: 100,
+          //   prop: 'orderNo',
+          //   label: '销售订单编码',
+          //   align: 'center',
+          //   slot: 'orderNo',
+          //   showOverflowTooltip: true
+          // },
+          // {
+          //   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: 'sendTotalWeight',
+            label: '发货总重',
+            slot: 'sendTotalWeight',
+            align: "center",
+            headerSlot: 'headerTotalCount'
+          },
+          {
+            width: 100,
+            prop: 'receiveTotalWeight',
+            label: '收货总重',
+            slot: 'receiveTotalWeight',
+            align: "center"
+          },
+          {
+            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: 100,
+            prop: 'discountSinglePrice',
+            label: '单价',
+            align: 'center',
+            slot: 'discountSinglePrice'
+          },
+          {
+            minWidth: 120,
+            prop: 'discountTotalPrice',
+            label: '合计金额',
+            slot: 'discountTotalPrice',
+            align: 'center',
+          },
+          // {
+          //   minWidth: 100,
+          //   prop: 'discountTotalPrice',
+          //   label: '折让合计金额',
+          //   align: 'center',
+          //   slot: 'discountTotalPrice'
+          // },
+        ]
+        let permissionType = {
+          // 'add': [
+          //   {
+          //     columnKey: 'action',
+          //     label: '操作',
+          //     width: 120,
+          //     align: 'center',
+          //     resizable: false,
+          //     slot: 'action',
+          //     fixed: 'right',
+          //     showOverflowTooltip: true
+          //   }
+          // ],
+          // 'update': [
+          //   {
+          //     columnKey: 'action',
+          //     label: '操作',
+          //     width: 120,
+          //     align: 'center',
+          //     resizable: false,
+          //     slot: 'action',
+          //     fixed: 'right',
+          //     showOverflowTooltip: true
+          //   }
+          // ],
+
+        }
+        permissionType[this.dialogType] && basicFields.push(...permissionType[this.dialogType])
+        return basicFields
+      }
+
+    },
+    isButtonDisabled() {
+      return (item) => {
+        return this.invoiceType() != 2;
+      }
+    },
+  },
+  data() {
+    return {
+      rules: {},
+      form: {},
+      subTypeList:{
+        20:'收货单:',
+        21:'退货单:',
+      },
+      subColumnsTypeList:{
+        20:'收货日期',
+        21:'退货日期',
+      },
+    };
+  },
+  methods: {
+    handleChoose(val, flag) {
+      this.$emit('getAccountInfo', val)
+    },
+    getSummaries(param) {
+      const {columns, data} = param;
+      const sums = [];
+      let fields = ['totalPrice', 'paidPrice', 'notPaidPrice', 'invoicedPrice', 'notInvoicedPrice','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>

+ 309 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/saleAccountTable.vue

@@ -0,0 +1,309 @@
+<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>
+            <el-divider direction="vertical"></el-divider>
+            <!--v-if="isOrderInList(item)"            -->
+            <el-button v-if="!item.hasInvoiceApply" type="primary" :disabled="isButtonDisabled(item)" @click="handleChoose(item,true)">
+              {{ (item.orderType == 6 || Number(item.amountTotalPrice) < 0) ? '收票' : '开票' }}
+            </el-button>
+            <span v-else style="color: red">{{'已申请' }}</span>
+            <!--            <el-button type="danger" v-else @click="handleChoose(item,false)">取消选择</el-button>-->
+          </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="subTypeList[j.subType]+j.statementSubOrderCode" :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">
+          </ele-pro-table>
+        </div>
+      </div>
+    </div>
+  </div>
+
+</template>
+<script>
+
+export default {
+  components: {},
+  inject:['invoiceType'],
+  props: ['datasource', 'dialogType', 'dataForm'],
+  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: 100,
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            slot: 'specification',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 100,
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            slot: 'modelType',
+            showOverflowTooltip: true
+          },
+          {
+            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: 100,
+            prop: 'discountSinglePrice',
+            label: '单价',
+            align: 'center',
+            slot: 'discountSinglePrice'
+          },
+          {
+            minWidth: 120,
+            prop: 'discountTotalPrice',
+            label: '合计金额',
+            slot: 'discountTotalPrice',
+            align: 'center',
+          },
+        ]
+        let permissionType = {}
+        permissionType[this.taskDefinitionKey] && basicFields.push(...permissionType[this.taskDefinitionKey])
+        return basicFields
+      }
+    },
+    isButtonDisabled() {
+      return (item) => {
+        return (this.invoiceType() == 2 && ((item.orderType != 6 && Number(item.amountTotalPrice) >= 0))) || (this.invoiceType() == 1 && (item.orderType == 6 || Number(item.amountTotalPrice) <= 0));
+      }
+    },
+    isOrderInList() {
+      return (item) => {
+        return !this.orderList.includes(item.orderNo);
+      }
+
+    },
+  },
+  data() {
+    return {
+      rules: {},
+      form: {},
+      subTypeList: {
+        10: '发货单:',
+        11: '退货单:',
+      },
+      subColumnsTypeList: {
+        10: '发货日期',
+        11: '退货日期',
+      },
+      orderList: [],
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    handleChoose(val, flag) {
+      this.$emit('getAccountInfo', val)
+      return
+      if (flag) {
+        this.orderList.push(val.orderNo)
+      } else {
+        this.orderList = this.orderList.filter(item => item !== val.orderNo)
+      }
+    },
+    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']
+      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>

+ 277 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/components/tableInfo.vue

@@ -0,0 +1,277 @@
+<template>
+  <div>
+    <ele-pro-table
+      ref="table"
+      :needPage="false"
+      :columns="columns"
+      :toolkit="[]"
+      :datasource="tableForm.detailList"
+      row-key="id">
+      <!-- 表头工具栏 -->
+      <template v-slot:toolbar>
+        <el-button
+          v-if="form.type&&dialogType!='view'"
+          size="small"
+          type="primary"
+          icon="el-icon-plus"
+          class="ele-btn-icon"
+          @click="handleSelectAccount"
+        >
+          选择关联类型
+        </el-button>
+      </template>
+    </ele-pro-table>
+    <!--对账单-->
+    <account-statement-dialog ref="accountStatementDialogRef"
+                              :form="form"
+                              v-if="accountStatementDialogFlag"
+                              :accountstatement-dialog-flag.sync="accountStatementDialogFlag"
+                              @getAccountData="getAccountData">
+    </account-statement-dialog>
+  </div>
+</template>
+<script>
+import accountStatementDialog from "./accountstatementDialog.vue";
+
+
+export default {
+  name: "tableInfo",
+  components: {
+    accountStatementDialog
+  },
+  props: {
+    form: {
+      type: Object,
+      default: () => {
+        return {
+          detailList: []
+        }
+      }
+    },
+    dialogType: {
+      type: String,
+      default: ""
+    },
+  },
+  data() {
+    return {
+      accountStatementDialogFlag: false,
+      columns: [
+        {
+          width: 45,
+          type: 'index',
+          columnKey: 'index',
+          align: 'center',
+          fixed: 'left'
+        },
+
+        {
+          width: 100,
+          prop: 'typeName',
+          label: '类型',
+          slot: 'typeName',
+          align: "center"
+        },
+        {
+          minWidth: 100,
+          prop: 'sourceCode',
+          label: '类型编码',
+          slot: 'sourceCode',
+          align: "center"
+        },
+        // {
+        //   width: 100,
+        //   prop: 'productCategoryName',
+        //   label: '分类',
+        //   slot: 'productCategoryName',
+        //   align: "center"
+        // },
+        // {
+        //   width: 100,
+        //   prop: 'productCode',
+        //   label: '编码',
+        //   slot: 'productCode',
+        //   align: "center"
+        // },
+        {
+          minWidth: 100,
+          prop: 'productName',
+          label: '名称',
+          slot: 'productName',
+          align: "center"
+        },
+        {
+          minWidth: 100,
+          prop: 'modelType',
+          label: '型号',
+          slot: 'modelType',
+          align: "center"
+        },
+
+        {
+          minWidth: 100,
+          prop: 'specification',
+          label: '规格',
+          slot: 'specification',
+          align: "center"
+        },
+        // {
+        //   width: 100,
+        //   prop: 'productBrand',
+        //   label: '牌号',
+        //   slot: 'productBrand',
+        //   align: "center"
+        // },
+        {
+          width: 100,
+          prop: 'measuringUnit',
+          label: '单位',
+          slot: 'measuringUnit',
+          align: "center"
+        },
+        {
+          width: 80,
+          prop: 'totalCount',
+          label: '数量',
+          slot: 'totalCount',
+          align: "center"
+        },
+
+        {
+          minWidth: 80,
+          prop: 'singlePrice',
+          label: '单价',
+          slot: 'singlePrice',
+          align: "center"
+        },
+        {
+          minWidth: 80,
+          prop: 'totalPrice',
+          label: '金额',
+          slot: 'totalPrice',
+          align: "center"
+        },
+
+        // {
+        //   width: 130,
+        //   prop: 'modelType',
+        //   label: '品牌',
+        //   slot: 'modelType'
+        // },
+
+        // {
+        //   width: 100,
+        //   prop: 'sourceType',
+        //   label: '来源类型',
+        //   slot: 'sourceType',
+        //   align: "center",
+        //   formatter: (row, column) => {
+        //     return row.sourceType == 2 ? '对账销售订单' : '对账采购订单';
+        //   }
+        // },
+
+      ],
+      tableForm: {
+        detailList: [],
+        link: []
+      },
+      typeList: [
+        {
+          label: '销售发货',
+          value: '10',
+        },
+        {
+          label: '销售退货',
+          value: '11',
+        },
+        {
+          label: '采购收货',
+          value: '20',
+        }, {
+          label: '采购退货',
+          value: '21',
+        },
+
+      ],
+
+    }
+  },
+  mounted() {
+    this.tableForm = this.form
+  },
+  methods: {
+    //对账单
+    async handleSelectAccount() {
+      this.accountStatementDialogFlag = true
+    },
+    //获取选择的对账单数据
+    async getAccountData(params) {
+      if (params.children.orderType == 6) {
+
+        this.tableForm.detailList = params.children.detailList
+        this.tableForm.detailList.forEach((item, index) => {
+          item.sourceCode = params.children.orderNo
+          item.sourceId = params.children.id
+          item.sourceType = params.type == 1 ? 2 : 3
+          item.type = 12
+          item.singlePrice = item.discountSinglePrice
+          item.totalPrice = item.discountTotalPrice
+          item.typeName = '销售赔付'
+        })
+      } else {
+        this.tableForm.detailList = []
+        params.children.subList.forEach((item, index) => {
+          item.detailList.forEach((i, n) => {
+            i.sourceCode = item.statementSubOrderCode
+            i.sourceId = params.children.id
+            i.sourceType = params.type == 1 ? 2 : 3
+            i.type = item.subType
+            console.log(item.subType);
+            i.typeName = this.typeList.find(i => i.value == item.subType).label
+            item.singlePrice = item.discountSinglePrice
+            item.totalPrice = item.discountTotalPrice
+          })
+          this.tableForm.detailList.push(...item.detailList)
+        })
+        this.$refs.table.reload()
+      }
+      this.$emit('setPrice', params.children.amountTotalPrice)
+      let row = {
+        id: params.id,
+        name: params.statementNo,
+        code: params.statementNo,
+        linkType: params.type == 1 ? 190 : 290,
+        linkTypeName: params.type == 1 ? '销售对账单' : '采购对账单',
+      }
+      this.setSelectData(row)
+    },
+    clearTable() {
+      this.tableForm = {
+        detailList: [],
+        link: []
+      }
+    },
+    getTableValidate() {
+      return new Promise((resolve, reject) => {
+        if (this.tableForm.detailList.length == 0) return this.$message.warning('请选择关联信息')
+        resolve(this.tableForm)
+      })
+    },
+    setSelectData(val) {
+      this.$set(this.tableForm.link[0], 'linkId', val.id)
+      this.$set(this.tableForm.link[0], 'linkName', val.name)
+      this.$set(this.tableForm.link[0], 'linkCode', val.code)
+      this.$set(this.tableForm.link[0], 'linkType', val.linkType)
+      this.$set(this.tableForm.link[0], 'linkTypeName', val.linkTypeName)
+    },
+    getTableData() {
+
+    }
+  }
+}
+</script>
+
+
+<style scoped lang="scss">
+
+</style>

+ 181 - 0
src/views/bpm/handleTask/components/financialManage/invoiceManage/submit.vue

@@ -0,0 +1,181 @@
+<template>
+  <el-col :span="16" :offset="6">
+    <el-form label-width="100px" ref="formRef" :model="form">
+      <el-form-item
+        label="审批建议"
+        prop="reason"
+        style="margin-bottom: 20px"
+        :rules="{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }"
+      >
+        <el-input
+          type="textarea"
+          v-model="form.reason"
+          placeholder="请输入审批建议"
+        />
+      </el-form-item>
+    </el-form>
+    <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px">
+      <el-button
+        icon="el-icon-edit-outline"
+        type="success"
+        size="mini"
+        @click="handleAudit(1)"
+      >通过
+      </el-button>
+      <el-button
+        icon="el-icon-circle-close"
+        type="danger"
+        size="mini"
+        @click="handleAudit(0)"
+        v-if="!['starter'].includes(taskDefinitionKey)"
+      >驳回
+      </el-button>
+
+      <el-dropdown @command="(command) => handleCommand(command)" style="margin-left: 30px;">
+        <span class="el-dropdown-link">更多<i class="el-icon-arrow-down el-icon--right"></i></span>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item command="cancel">作废</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+
+      <!-- <el-button
+        icon="el-icon-circle-close"
+        type="danger"
+        size="mini"
+        @click="handleBackList"
+        >退回
+      </el-button> -->
+      <!-- <el-button
+        icon="el-icon-circle-close"
+        type="danger"
+        size="mini"
+        @click="handleAudit(0)"
+        v-if="taskDefinitionKey != 'productionSupervisorApprove1'"
+        >不通过
+      </el-button>
+      <el-button
+        icon="el-icon-edit-outline"
+        type="primary"
+        size="mini"
+        v-if="taskDefinitionKey != 'productionSupervisorApprove1'"
+        @click="handleUpdateAssignee"
+        >转办
+      </el-button> -->
+    </div>
+  </el-col>
+</template>
+
+<script>
+import {cancel} from "@/api/bpm/components/financialManage/invoiceManage";
+import {approveTaskWithVariables} from '@/api/bpm/task';
+
+// 流程实例的详情页,可用于审批
+export default {
+  name: '',
+  components: {
+    //   Parser
+  },
+  props: {
+    businessId: {
+      default: ''
+    },
+    taskId: {
+      default: ''
+    },
+    id: {
+      default: ''
+    },
+    taskDefinitionKey: {
+      default: ''
+    }
+  },
+  data() {
+    return {
+      form: {
+        technicianId: '',
+        reason: '',
+
+      },
+      tabOptions: [
+        {key: 'starter', permissionType: 'update', name: '发起人申请'},
+        {key: 'deptLeaderApprove', permissionType: 'view', name: '部门主管审批'},
+        {key: 'financeApprove', permissionType: 'update', name: '财务审批'},
+      ],
+    };
+  },
+  created() {
+  },
+  methods: {
+    /** 处理转办审批人 */
+    handleUpdateAssignee() {
+      this.$emit('handleUpdateAssignee');
+    },
+    /** 退回 */
+    handleBackList() {
+      this.$emit('handleBackList');
+    },
+
+    async handleAudit(status) {
+      let permissionType = this.tabOptions.find(item => item.key == this.taskDefinitionKey)?.permissionType
+      if (permissionType === 'update') {
+        const id = await this.getTableValue();
+        if (typeof id !== 'string') return
+      }
+      await this._approveTaskWithVariables(status);
+    },
+    async _approveTaskWithVariables(status) {
+      let variables = {
+        pass: !!status
+      };
+      approveTaskWithVariables({
+        id: this.taskId,
+        reason: this.form.reason,
+        variables
+      }).then((res) => {
+        if (res.data.code != '-1') {
+          this.$emit('handleAudit', {
+            status,
+            title: status === 0 ? '驳回' : ''
+          });
+        }
+      });
+    },
+
+    getTableValue() {
+      return new Promise((resolve, reject) => {
+        this.$emit('getTableValue', async (data) => {
+          resolve(await data);
+        });
+      });
+    },
+
+    //更多
+    handleCommand(command) {
+      if (command === 'cancel') {
+        this.$confirm("是否确认作废?", {
+          type: 'warning',
+          cancelButtonText: '取消',
+          confirmButtonText: '确定'
+        }).then(() => {
+          cancel({
+            id: this.taskId,
+            reason: this.form.reason,
+            businessId: this.businessId,
+          }).then(() => {
+            this.$emit('handleClose');
+          }).catch(() => {
+            this.$message.error("流程作废失败");
+          });
+        }).catch(() => {});
+      }
+    },
+
+  }
+};
+</script>
+
+<style lang="scss"></style>

+ 243 - 288
src/views/bpm/handleTask/components/purchaseOrder/accountstatement/inventoryTable.vue

@@ -23,38 +23,37 @@
 
           </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="columns" max-height="500px" style="margin-bottom: 10px"
-                           :sub-title="'发货单:'+j.statementSubOrderId" :toolkit="[]" :datasource="j.detailList"
-                           cache-key="systemRoleTable17-11121" class="time-form">
-            </ele-pro-table>
-          </div>
-        </template>
-        <div v-else>
+<!--        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="columns" sub-title="赔付订单" max-height="500px" style="margin-bottom: 10px"
-                         :toolkit="[]" :datasource="item.detailList"
+                         :columns="getColumns(j)" max-height="500px" style="margin-bottom: 10px"
+                         :sub-title="subTypeList[j.subType]+j.statementSubOrderCode" :toolkit="[]" :datasource="j.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 v-else>-->
+<!--          <ele-pro-table :show-summary="true" :summary-method="getSummaries" ref="table" row-key="id" :needPage="false"-->
+<!--                         :columns="getColumns({subType:20})" sub-title="赔付订单" max-height="500px" style="margin-bottom: 10px"-->
+<!--                         :toolkit="[]" :datasource="item.detailList"-->
+<!--                         cache-key="systemRoleTable17-11121" class="time-form">-->
+
+<!--            &lt;!&ndash;            <template v-slot:productName="{ row,$index }">&ndash;&gt;-->
+<!--            &lt;!&ndash;              <el-popover&ndash;&gt;-->
+<!--            &lt;!&ndash;                placement="right"&ndash;&gt;-->
+<!--            &lt;!&ndash;                width="60%"&ndash;&gt;-->
+<!--            &lt;!&ndash;                trigger="hover">&ndash;&gt;-->
+<!--            &lt;!&ndash;                <ele-pro-table ref="childrenTable"&ndash;&gt;-->
+<!--            &lt;!&ndash;                               row-key="id"&ndash;&gt;-->
+<!--            &lt;!&ndash;                               max-height="300px"&ndash;&gt;-->
+<!--            &lt;!&ndash;                               :needPage="false" :columns="childrenColumns" :toolkit="[]"&ndash;&gt;-->
+<!--            &lt;!&ndash;                               :datasource="row.productList"&ndash;&gt;-->
+<!--            &lt;!&ndash;                               cache-key="systemRoleTable17-222" class="time-form">&ndash;&gt;-->
+<!--            &lt;!&ndash;                </ele-pro-table>&ndash;&gt;-->
+<!--            &lt;!&ndash;                <el-button type="text" slot="reference">{{ row.productName }}</el-button>&ndash;&gt;-->
+<!--            &lt;!&ndash;              </el-popover>&ndash;&gt;-->
+<!--            &lt;!&ndash;            </template>&ndash;&gt;-->
+<!--          </ele-pro-table>-->
+<!--        </div>-->
       </div>
     </div>
   </div>
@@ -66,271 +65,227 @@ export default {
   components: {},
   props: ['datasource', 'dataForm','dialogType', 'taskDefinitionKey', 'priceObj'],
   computed: {
-    columns() {
-      let basicFields = [
-        {
-          width: 60,
-          label: '序号',
-          type: 'index',
-          columnKey: 'index',
-          align: 'center',
-        },
-        {
-          minWidth: 130,
-          prop: 'productOperateTime',
-          label: '收货日期',
-          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: 100,
-          prop: 'specification',
-          label: '规格',
-          align: 'center',
-          slot: 'specification',
-          showOverflowTooltip: true
-        },
-        {
-          minWidth: 100,
-          prop: 'modelType',
-          label: '型号',
-          align: 'center',
-          slot: 'modelType',
-          showOverflowTooltip: true
-        },
-        // {
-        //   minWidth: 100,
-        //   prop: 'orderNo',
-        //   label: '销售订单编码',
-        //   align: 'center',
-        //   slot: 'orderNo',
-        //   showOverflowTooltip: true
-        // },
-        // {
-        //   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: 100,
-          prop: 'discountSinglePrice',
-          label: '单价',
-          align: 'center',
-          slot: 'discountSinglePrice'
-        },
-        {
-          minWidth: 120,
-          prop: 'discountTotalPrice',
-          label: '合计金额',
-          slot: 'discountTotalPrice',
-          align: 'center',
-        },
-        // {
-        //   minWidth: 100,
-        //   prop: 'discountTotalPrice',
-        //   label: '折让合计金额',
-        //   align: 'center',
-        //   slot: 'discountTotalPrice'
-        // },
-      ]
-      let permissionType = {
-        // 'financeLeader': [
-        //   {
-        //     minWidth: 140,
-        //     prop: 'paidDate',
-        //     label: '付款日期',
-        //     align: 'center',
-        //     slot: 'paidDate',
-        //     showOverflowTooltip: true,
-        //     headerSlot:'headerPaidDate'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'paidPrice',
-        //     label: '已付款金额',
-        //     align: 'center',
-        //     slot: 'paidPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'notPaidPrice',
-        //     label: '应付款金额',
-        //     align: 'center',
-        //     slot: 'notPaidPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'invoicedPrice',
-        //     label: '已开票金额',
-        //     align: 'center',
-        //     slot: 'invoicedPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'notInvoicedPrice',
-        //     label: '未开票金额',
-        //     align: 'center',
-        //     slot: 'notInvoicedPrice'
-        //   },
-        // ],
-        // 'leader': [
-        //   {
-        //     minWidth: 140,
-        //     prop: 'paidDate',
-        //     label: '付款日期',
-        //     align: 'center',
-        //     slot: 'paidDate',
-        //     showOverflowTooltip: true
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'paidPrice',
-        //     label: '已付款金额',
-        //     align: 'center',
-        //     slot: 'paidPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'notPaidPrice',
-        //     label: '应付款金额',
-        //     align: 'center',
-        //     slot: 'notPaidPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'invoicedPrice',
-        //     label: '已开票金额',
-        //     align: 'center',
-        //     slot: 'invoicedPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'notInvoicedPrice',
-        //     label: '未开票金额',
-        //     align: 'center',
-        //     slot: 'notInvoicedPrice'
-        //   },
-        // ],
-        // 'uploadReceipt': [
-        //   {
-        //     minWidth: 140,
-        //     prop: 'paidDate',
-        //     label: '付款日期',
-        //     align: 'center',
-        //     slot: 'paidDate',
-        //     showOverflowTooltip: true,
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'paidPrice',
-        //     label: '已付款金额',
-        //     align: 'center',
-        //     slot: 'paidPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'notPaidPrice',
-        //     label: '应付款金额',
-        //     align: 'center',
-        //     slot: 'notPaidPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'invoicedPrice',
-        //     label: '已开票金额',
-        //     align: 'center',
-        //     slot: 'invoicedPrice'
-        //   },
-        //   {
-        //     minWidth: 130,
-        //     prop: 'notInvoicedPrice',
-        //     label: '未开票金额',
-        //     align: 'center',
-        //     slot: 'notInvoicedPrice'
-        //   },
-        // ],
+    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: 100,
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            slot: 'specification',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 100,
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            slot: 'modelType',
+            showOverflowTooltip: true
+          },
+          // {
+          //   minWidth: 100,
+          //   prop: 'orderNo',
+          //   label: '销售订单编码',
+          //   align: 'center',
+          //   slot: 'orderNo',
+          //   showOverflowTooltip: true
+          // },
+          // {
+          //   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: 'sendTotalWeight',
+            label: '发货总重',
+            slot: 'sendTotalWeight',
+            align: "center",
+            headerSlot: 'headerTotalCount'
+          },
+          {
+            width: 100,
+            prop: 'receiveTotalWeight',
+            label: '收货总重',
+            slot: 'receiveTotalWeight',
+            align: "center"
+          },
+          {
+            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: 100,
+            prop: 'discountSinglePrice',
+            label: '单价',
+            align: 'center',
+            slot: 'discountSinglePrice'
+          },
+          {
+            minWidth: 120,
+            prop: 'discountTotalPrice',
+            label: '合计金额',
+            slot: 'discountTotalPrice',
+            align: 'center',
+          },
+          // {
+          //   minWidth: 100,
+          //   prop: 'discountTotalPrice',
+          //   label: '折让合计金额',
+          //   align: 'center',
+          //   slot: 'discountTotalPrice'
+          // },
+        ]
+        let permissionType = {
+          // 'add': [
+          //   {
+          //     columnKey: 'action',
+          //     label: '操作',
+          //     width: 120,
+          //     align: 'center',
+          //     resizable: false,
+          //     slot: 'action',
+          //     fixed: 'right',
+          //     showOverflowTooltip: true
+          //   }
+          // ],
+          // 'update': [
+          //   {
+          //     columnKey: 'action',
+          //     label: '操作',
+          //     width: 120,
+          //     align: 'center',
+          //     resizable: false,
+          //     slot: 'action',
+          //     fixed: 'right',
+          //     showOverflowTooltip: true
+          //   }
+          // ],
+          'view': [
+            // {
+            //   minWidth: 140,
+            //   prop: 'paidDate',
+            //   label: '付款日期',
+            //   align: 'center',
+            //   slot: 'paidDate',
+            //   showOverflowTooltip: true
+            // },
+            // {
+            //   minWidth: 130,
+            //   prop: 'paidPrice',
+            //   label: '已付款金额',
+            //   align: 'center',
+            //   slot: 'paidPrice'
+            // },
+            // {
+            //   minWidth: 130,
+            //   prop: 'notPaidPrice',
+            //   label: '应付款金额',
+            //   align: 'center',
+            //   slot: 'notPaidPrice'
+            // },
+            // {
+            //   minWidth: 130,
+            //   prop: 'invoicedPrice',
+            //   label: '已开票金额',
+            //   align: 'center',
+            //   slot: 'invoicedPrice'
+            // },
+            // {
+            //   minWidth: 130,
+            //   prop: 'notInvoicedPrice',
+            //   label: '未开票金额',
+            //   align: 'center',
+            //   slot: 'notInvoicedPrice'
+            // },
+          ]
+        }
+        permissionType[this.dialogType] && basicFields.push(...permissionType[this.dialogType])
+        return basicFields
       }
-      permissionType[this.taskDefinitionKey] && basicFields.push(...permissionType[this.taskDefinitionKey])
-      return basicFields
+
     },
   },
   data() {
     return {
-
+      subTypeList:{
+        20:'收货单:',
+        21:'退货单:',
+      },
+      subColumnsTypeList:{
+        20:'收货日期',
+        21:'退货日期',
+      },
     };
   },
   watch: {},

+ 1 - 1
src/views/bpm/handleTask/components/purchaseOrder/invoice/submit.vue

@@ -253,7 +253,7 @@
           if (!arr) {
             return;
           }
-          let ids = arr.form.productList.map((item) => item.warehouseId);
+          let ids = arr.productList.map((item) => item.warehouseId);
           let warehouseList = await getWarehouseListByIds(ids || []);
           storemanIds = warehouseList.map((item) => item.ownerId);
           let data = await UpdateReceiveInformation(arr);

+ 270 - 261
src/views/bpm/handleTask/components/saleOrder/accountstatement/inventoryTable.vue

@@ -26,15 +26,15 @@
         <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="columns" max-height="500px" style="margin-bottom: 10px"
-                           :sub-title="'发货单:'+j.statementSubOrderId" :toolkit="[]" :datasource="j.detailList"
+                           :columns="getColumns(j)" max-height="500px" style="margin-bottom: 10px"
+                           :sub-title="subTypeList[j.subType]+j.statementSubOrderCode" :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="columns" sub-title="赔付订单" max-height="500px" style="margin-bottom: 10px"
+                         :columns="getColumns({subType:10})" sub-title="赔付订单" max-height="500px" style="margin-bottom: 10px"
                          :toolkit="[]" :datasource="item.detailList"
                          cache-key="systemRoleTable17-11121" class="time-form">
 
@@ -66,270 +66,279 @@ export default {
   components: {},
   props: ['datasource', 'dataForm','dialogType', 'taskDefinitionKey', 'priceObj'],
   computed: {
-    columns() {
-      let basicFields = [
-        {
-          width: 60,
-          label: '序号',
-          type: 'index',
-          columnKey: 'index',
-          align: 'center',
-        },
-        {
-          minWidth: 130,
-          prop: 'productOperateTime',
-          label: '发货日期',
-          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: 100,
-          prop: 'specification',
-          label: '规格',
-          align: 'center',
-          slot: 'specification',
-          showOverflowTooltip: true
-        },
-        {
-          minWidth: 100,
-          prop: 'modelType',
-          label: '型号',
-          align: 'center',
-          slot: 'modelType',
-          showOverflowTooltip: true
-        },
-        // {
-        //   minWidth: 100,
-        //   prop: 'orderNo',
-        //   label: '销售订单编码',
-        //   align: 'center',
-        //   slot: 'orderNo',
-        //   showOverflowTooltip: true
-        // },
-        // {
-        //   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'
-        },
+    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: 100,
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            slot: 'specification',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 100,
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            slot: 'modelType',
+            showOverflowTooltip: true
+          },
+          // {
+          //   minWidth: 100,
+          //   prop: 'orderNo',
+          //   label: '销售订单编码',
+          //   align: 'center',
+          //   slot: 'orderNo',
+          //   showOverflowTooltip: true
+          // },
+          // {
+          //   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: 100,
-          prop: 'discountSinglePrice',
-          label: '单价',
-          align: 'center',
-          slot: 'discountSinglePrice'
-        },
-        {
-          minWidth: 120,
-          prop: 'discountTotalPrice',
-          label: '合计金额',
-          slot: 'discountTotalPrice',
-          align: 'center',
-        },
-        // {
-        //   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'
-        //   },
-        // ],
+          {
+            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: 100,
+            prop: 'discountSinglePrice',
+            label: '单价',
+            align: 'center',
+            slot: 'discountSinglePrice'
+          },
+          {
+            minWidth: 120,
+            prop: 'discountTotalPrice',
+            label: '合计金额',
+            slot: 'discountTotalPrice',
+            align: 'center',
+          },
+          // {
+          //   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
       }
-      permissionType[this.taskDefinitionKey] && basicFields.push(...permissionType[this.taskDefinitionKey])
-      return basicFields
     },
   },
   data() {
     return {
-
+      subTypeList:{
+        10:'发货单:',
+        11:'退货单:',
+      },
+      subColumnsTypeList:{
+        10:'发货日期',
+        11:'退货日期',
+      },
     };
   },
   watch: {},

+ 16 - 9
src/views/bpm/handleTask/components/saleOrder/saleReturnGoods/detailDialog.vue

@@ -109,22 +109,24 @@
             </el-form-item>
             <el-form-item
               label="回执附件:"
-              prop="sendFiles"
+              prop="repliedFiles"
               style="margin-bottom: 16px"
             >
-              <div
-                v-if="detailData.repliedFiles && detailData.repliedFiles?.length"
-              >
+              <fileUpload
+                v-if="taskDefinitionKey=='salesmanUploadReceipt'"
+                v-model="form.repliedFiles"
+                module="main"
+                :showLib="false"
+                :limit="10"/>
+              <div v-else-if="detailData.repliedFiles && detailData.repliedFiles?.length">
                 <el-link
                   v-for="link in detailData.repliedFiles"
                   :key="link.id"
                   type="primary"
                   :underline="false"
-                  @click="downloadFile(link)"
-                >
+                  @click="downloadFile(link)">
                   {{ link.name }}
-                </el-link
-                >
+                </el-link>
               </div>
             </el-form-item>
           </el-col>
@@ -179,10 +181,12 @@ import inventoryTabledetail from './inventoryTabledetail.vue';
 import inventoryTable from './inventoryTable.vue';
 import add from "@/views/bpm/handleTask/components/purchaseOrder/outsourceSendReturnGoods/entrustedStorage.vue";
 import detailDialog from "@/views/bpm/handleTask/components/inoutBound/detailDialog.vue";
+import fileUpload from "@/components/upload/fileUpload.vue";
 
 export default {
     mixins: [dictMixins],
     components: {
+      fileUpload,
       detailDialog, add,
       inventoryTabledetail,
       inventoryTable
@@ -404,9 +408,12 @@ export default {
           await this.getValidate();
           // 表单验证通过,执行保存操作
           this.loading = true;
-          return this.form;
+          this.form.repliedFiles = this.form.repliedFiles || [];
+          this.form.replied = this.form.repliedFiles.length > 0 ? 1 : 0;
+          return Object.assign({}, this.form,)
         } catch (error) {
           console.log(error);
+          return ''
           // 表单验证未通过,不执行保存操作
         }
       },

+ 2 - 12
src/views/bpm/handleTask/components/saleOrder/saleReturnGoods/submit.vue

@@ -192,7 +192,7 @@ import outin from "@/api/warehouseManagement/outin";
           }
         }
 
-        if (this.taskDefinitionKey === 'QCLeader') {
+        if (this.taskDefinitionKey === 'salesmanUploadReceipt') {
           let arr = await this.getTableValue();
           if (!arr) {
             return;
@@ -202,17 +202,7 @@ import outin from "@/api/warehouseManagement/outin";
             return;
           }
         }
-        if (this.taskDefinitionKey === 'produceLeader') {
-          let arr = await this.getTableValue();
-          if (!arr) {
-            return;
-          }
-          let data = await UpdateReturnInformation(arr);
-          if (data.code != '0') {
-            return;
-          }
-
-        }
+        return
         await this.approveTaskWithVariables(status);
       },
       activeCompChange(activeComp) {