Explorar o código

报销功能修改

lizhenhao %!s(int64=2) %!d(string=hai) anos
pai
achega
a7d31ab30d

+ 192 - 4
src/views/modules/cw/reimbursementApproval/info/InfoForm.vue

@@ -51,6 +51,15 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="12" v-if="inputForm.sourceType === '5'">
+            <el-form-item label="采购编号" prop="purchaseNo"
+                          :rules="[{required: true, message:'采购编号不能为空', trigger:'blur'},
+                              {required: true, message:'采购编号不能为空', trigger:'change'}]">
+              <el-input size="medium" :readonly="true" @focus="openPurForm()" v-model="inputForm.purchaseNo" placeholder="请选择采购编号">
+                <el-button slot="append" icon="el-icon-search" @click="openPurForm()"></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
           <el-col :span="24">
             <el-form-item label="备注" prop="remarks">
               <el-input v-model="inputForm.remarks"
@@ -63,7 +72,41 @@
             </el-form-item>
           </el-col>
         </el-row>
-
+        <div v-if="inputForm.sourceType === '5'">
+          <el-divider content-position="left"><i class="el-icon-document"></i>
+            采购详情
+          </el-divider>
+          <el-row  :gutter="15" >
+            <vxe-table
+              border
+              show-footer
+              show-overflow
+              :footer-method="footerMethod555"
+              ref="preTable"
+              class="vxe-table-element"
+              :data="inputForm.preList"
+              style="margin-left: 5em"
+              @cell-click=""
+              @edit-closed=""
+              highlight-current-row
+            >
+              <vxe-table-column field="purchaser" title="采购人" :edit-render="{}" :rules="[{required: true, message:'请选择采购人', trigger:'blur'}]"></vxe-table-column>
+              <vxe-table-column field="procurementOffice" title="采购部门" :edit-render="{}"></vxe-table-column>
+              <vxe-table-column field="procurementType" title="采购类型" :edit-render="{}" :rules="[{required: true, message:'请选择采购类型', trigger:'blur'}]"></vxe-table-column>
+              <vxe-table-column field="tradeName" title="商品名称" :edit-render="{}" :rules="[{required: true, message:'请填写商品名称', trigger:'blur'}]"></vxe-table-column>
+              <vxe-table-column field="tradePrice" title="商品单价(元)" :edit-render="{}" :rules="[{required: true, message:'请输入商品单价', trigger:'blur'}]"></vxe-table-column>
+              <vxe-table-column field="tradeNumber" title="商品数量" :edit-render="{}"></vxe-table-column>
+              <vxe-table-column field="priceSum" title="商品总价" :edit-render="{}"></vxe-table-column>
+              <vxe-table-column field="company" title="单位" :edit-render="{}"></vxe-table-column>
+              <vxe-table-column field="remarks" title="备注" :edit-render="{}"></vxe-table-column>
+              <vxe-table-column title="操作">
+                <template v-slot="scope">
+                  <el-button size="mini" type="primary" :disabled="false" @click="seeFileInfo(scope.$rowIndex)">文件详情</el-button>
+                </template>
+              </vxe-table-column>
+            </vxe-table>
+          </el-row>
+        </div>
         <div v-if="inputForm.sourceType === '1'">
           <el-divider content-position="left"><i class="el-icon-document"></i>
             项目报销详情
@@ -376,6 +419,84 @@
             </vxe-table>
           </el-row>
         </div>
+        <div v-if="inputForm.sourceType === '5'">
+          <el-divider content-position="left"><i class="el-icon-document"></i>
+            采购报销详情
+            <el-button style="margin-left: 20px" type="primary" :disabled="method==='view' || this.formReadOnly" size="mini" @click="insertEvent('procured')" plain>
+              新增
+            </el-button>
+          </el-divider>
+          <el-row  :gutter="15" >
+            <vxe-table
+              border
+              show-footer
+              show-overflow
+              :footer-method="footerMethod"
+              ref="detailTableProcured"
+              class="vxe-table-element"
+              :data="inputForm.detailInfoProcured"
+              style="margin-left: 5em"
+              :key="detailKeyProcured"
+              @cell-click=""
+              @edit-closed=""
+              highlight-current-row
+              :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+              :edit-rules="validRules"
+            >
+              <vxe-table-column field="userName" title="报销人" :edit-render="{}" :rules="[{required: true, message:'请选择报销人', trigger:'blur'}]">
+                <template v-slot:edit="scope">
+                  <el-input v-model="scope.row.userName" @focus="userPullListForm5(scope.$rowIndex)"></el-input>
+                  <!--              <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
+                </template>
+              </vxe-table-column>
+              <vxe-table-column field="deptName" title="报销部门" :edit-render="{}">
+                <template v-slot:edit="scope">
+                  <el-input :disabled='true' v-model="scope.row.deptName" ></el-input>
+                </template>
+              </vxe-table-column>
+              <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" :rules="[{required: true, message:'请选择报销类别', trigger:'blur'}]">
+                <template v-slot:edit="scope">
+                  <el-input v-model="scope.row.typeName" @focus="typePullForm5(scope.$rowIndex)"></el-input>
+                </template>
+              </vxe-table-column>
+              <vxe-table-column field="projectName" title="报销项目" :edit-render="{}" :rules="[{required: true, message:'请选择报销项目', trigger:'blur'}]">
+                <template v-slot:edit="scope">
+                  <el-input v-model="scope.row.projectName" @focus="openProgramPageForm5(scope.$rowIndex, scope.row)"></el-input>
+                </template>
+              </vxe-table-column>
+              <!--            <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}">-->
+              <!--              <template v-slot:edit="scope">-->
+              <!--                <el-input :readonly="true" v-model="scope.row.reportNumber" @focus="openReportNoPageForm(scope.$rowIndex, scope.row)"></el-input>-->
+              <!--              </template>-->
+              <!--            </vxe-table-column>-->
+              <vxe-table-column field="number" title="费用(元)" :edit-render="{}" :rules="[{required: true, message:'请输入费用', trigger:'blur'}]">
+                <template v-slot:edit="scope">
+                  <el-input maxlength="15" v-model="scope.row.number" @keyup.native="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
+                </template>
+              </vxe-table-column>
+              <vxe-table-column field="receiptNumber" title="收据张数" :edit-render="{}">
+                <template v-slot:edit="scope">
+                  <el-input v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+                </template>
+              </vxe-table-column>
+              <vxe-table-column field="days" title="出差天数" :edit-render="{}">
+                <template v-slot:edit="scope">
+                  <el-input v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+                </template>
+              </vxe-table-column>
+              <vxe-table-column field="content" title="内容" :edit-render="{}">
+                <template v-slot:edit="scope">
+                  <el-input v-model="scope.row.content" ></el-input>
+                </template>
+              </vxe-table-column>
+              <vxe-table-column title="操作" width="100">
+                <template v-slot="scope">
+                  <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'procured')">删除</el-button>
+                </template>
+              </vxe-table-column>
+            </vxe-table>
+          </el-row>
+        </div>
 
         <el-divider content-position="left"><i class="el-icon-document"></i>
           专用发票信息
@@ -436,6 +557,7 @@
       <el-button size="small" @click="close()" icon="el-icon-circle-close">关闭</el-button>
       <el-button size="small" type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
     </span>
+      <MaterialManagementDialog ref="materialManagementDialog" @getUpload="getUpload"></MaterialManagementDialog>
     </el-dialog>
   </div>
 </template>
@@ -445,6 +567,8 @@
   import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
   import UpLoadComponent from '@/views/common/UpLoadComponent'
   import XEUtils from 'xe-utils'
+  import MaterialManagementService from '@/api/materialManagement/MaterialManagementService'
+  import MaterialManagementDialog from '../../../materialManagement/file/MaterialManagementDialog'
   export default {
     data () {
       return {
@@ -462,20 +586,28 @@
           detailInfoContracts: [],
           detailInfoReports: [],
           detailInfoOthers: [],
+          detailInfoProcured: [],
           amountInfos: [],
           files: [], // 附件信息
-          sourceType: ''
+          sourceType: '',
+          preList: [],
+          purchaseNo: '',
+          tradeTotalPrice: '',
+          purchaseId: ''
         }
       }
     },
     // reimbursementService: null,
     reimbursementApprovalService: null,
+    materialManagementService: null,
     created () {
       // this.reimbursementService = new ReimbursementService()
       this.reimbursementApprovalService = new ReimbursementApprovalService()
+      this.materialManagementService = new MaterialManagementService()
     },
     components: {
-      UpLoadComponent
+      UpLoadComponent,
+      MaterialManagementDialog
     },
     methods: {
       init (method, id) {
@@ -492,7 +624,12 @@
           detailInfoContracts: [],
           detailInfoReports: [],
           detailInfoOthers: [],
-          sourceType: ''
+          detailInfoProcured: [],
+          sourceType: '',
+          preList: [],
+          purchaseNo: '',
+          tradeTotalPrice: '',
+          purchaseId: ''
         }
         if (method === 'add') {
           this.title = `新建报销类型`
@@ -516,6 +653,9 @@
               this.inputForm = this.recover(this.inputForm, data)
               this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'reimbursement')
               this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+              if (this.commonJS.isNotEmpty(this.inputForm.purchaseId)) {
+                this.startPur(this.inputForm.purchaseId)
+              }
               this.loading = false
             })
             // this.reimbursementService.findById(this.inputForm.id).then(({data}) => {
@@ -569,6 +709,13 @@
       close () {
         this.$refs.inputForm.resetFields()
         this.inputForm.detailInfos = []
+        this.inputForm.detailInfoContracts = []
+        this.inputForm.detailInfoReports = []
+        this.inputForm.detailInfoOthers = []
+        this.inputForm.detailInfoProcured = []
+        this.inputForm.purchaseNo = ''
+        this.inputForm.preList = ''
+        this.inputForm.purchaseId = ''
         this.inputForm.amountInfos = []
         this.$refs.uploadComponent.clearUpload()
         this.visible = false
@@ -596,6 +743,47 @@
             this.inputForm.amountInfos.push(data)
           })
         }
+      },
+      startPur (id) {
+        this.materialManagementService.findById(id).then(({data}) => {
+          this.inputForm.preList = data.detailInfos
+          this.inputForm.purchaseNo = data.purchaseNo
+          let i = this.inputForm.preList.length
+          for (let j = 0; j < i; j++) {
+            if (this.commonJS.isNotEmpty(this.inputForm.preList[j].tradePrice)) {
+              if (this.commonJS.isNotEmpty(this.inputForm.preList[j].tradeNumber)) {
+                this.inputForm.preList[j].priceSum = this.inputForm.preList[j].tradePrice * this.inputForm.preList[j].tradeNumber
+              }
+            }
+          }
+        })
+        this.$forceUpdate()
+      },
+      getPurChoose (row) {
+        this.inputForm.purchaseId = row.id
+        this.startPur(row.id)
+      },
+      footerMethod555 ({ columns, data }) {
+        const footerData = [
+          columns.map((column, columnIndex) => {
+            if (columnIndex === 0) {
+              return '商品总价'
+            }
+            if (['priceSum'].includes(column.property)) {
+              // eslint-disable-next-line no-undef
+              this.inputForm.tradeTotalPrice = XEUtils.sum(data, column.property)
+              return XEUtils.sum(data, column.property)
+            }
+            return null
+          })
+        ]
+        return footerData
+      },
+      seeFileInfo (index) {
+        if (this.commonJS.isEmpty(this.inputForm.preList[index].fileInfoLost)) {
+          this.inputForm.preList[index].fileInfoLost = []
+        }
+        this.$refs.materialManagementDialog.newUpload('view', this.inputForm.preList[index].fileInfoLost, null, null, null, null, null, false, index)
       }
     }
   }

+ 11 - 11
src/views/modules/cw/reimbursementApproval/info/InfoList.vue

@@ -113,38 +113,38 @@
           :checkbox-config="{}">
           <vxe-column type="seq" width="60" title="序号"></vxe-column>
           <vxe-column type="checkbox" width="40" ></vxe-column>
-          <vxe-column width="200" title="报销编号" field="no" align="left">
+          <vxe-column width="130" title="报销编号" field="no" align="center">
             <template slot-scope="scope">
               <el-link  type="primary" :underline="false" v-if="hasPermission('reimbursement:info:view')" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
               <el-link  type="primary" :underline="false" v-else-if="hasPermission('reimbursement:info:view')" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
               <span v-else>{{scope.row.no}}</span>
             </template>
           </vxe-column>
-          <vxe-column width="200" title="报销类型" field="sourceType">
+          <vxe-column width="130" title="报销类型" field="sourceType"align="center">
             <template slot-scope="scope">
               {{$dictUtils.getDictLabel('cw_reimbursement_source_type', scope.row.sourceType, '')}}
             </template>
           </vxe-column>
-          <vxe-column width="200" title="报销类别" field="typeName"></vxe-column>
-          <vxe-column width="200" title="报销项目" field="projectName">
+          <vxe-column width="130" title="报销类别" field="typeName"align="center"></vxe-column>
+          <vxe-column width="180" title="报销项目" field="projectName"align="center">
             <template slot-scope="scope">
               <el-link  type="primary" :underline="false" v-if="hasPermission('reimbursement:info:view') && scope.row.projectId != undefined" @click="viewProject(scope.row.projectId)">{{scope.row.sourceType === '2' ? '' : scope.row.projectName}}</el-link>
               <el-link  type="primary" :underline="false" v-else-if="hasPermission('reimbursement:info:view') && scope.row.projectId != undefined" @click="viewProject(scope.row.projectId)">{{scope.row.sourceType === '2' ? '' : scope.row.projectName}}</el-link>
               <span v-else>{{scope.row.sourceType === '2' ? '' : scope.row.projectName}}</span>
             </template>
           </vxe-column>
-          <vxe-column width="200" title="报销合同" field="projectName">
+          <vxe-column width="180" title="报销合同" field="projectName"align="center">
             <template slot-scope="scope">
               <el-link  type="primary" :underline="false" v-if="hasPermission('reimbursement:info:view') && scope.row.projectId != undefined" @click="viewContract(scope.row.projectId)">{{scope.row.sourceType === '2' ? scope.row.projectName : ''}}</el-link>
               <span v-else>{{scope.row.sourceType === '2' ? scope.row.projectName : ''}}</span>
             </template>
           </vxe-column>
-          <vxe-column width="200" title="报告号" field="reportNumber"></vxe-column>
-          <vxe-column width="100" title="经办人" field="userName"></vxe-column>
-          <vxe-column width="100" title="报销人" field="name"></vxe-column>
-          <vxe-column width="100" title="报销部门" field="deptName"></vxe-column>
-          <vxe-column width="100" title="报销日期" field="reimDate"></vxe-column>
-          <vxe-column width="150" title="报销金额(元)" field="number"></vxe-column>
+          <vxe-column width="180" title="报告号" field="reportNumber"align="center"></vxe-column>
+          <vxe-column width="100" title="经办人" field="userName"align="center"></vxe-column>
+          <vxe-column width="100" title="报销人" field="name"align="center"></vxe-column>
+          <vxe-column width="100" title="报销部门" field="deptName"align="center"></vxe-column>
+          <vxe-column width="100" title="报销日期" field="reimDate"align="center"></vxe-column>
+          <vxe-column width="100" title="报销金额(元)" field="number" fixed="right" align="center"></vxe-column>
           <vxe-column width="100" title="状态" fixed="right" align="center" field="type">
             <template slot-scope="scope">
               <el-button type="text" @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.type, '-')" effect="dark" size="mini">{{$dictUtils.getDictLabel("status", scope.row.type, '未开始')}} </el-button>

+ 291 - 7
src/views/modules/cw/reimbursementApproval/info/ReimbursementForm.vue

@@ -1,4 +1,4 @@
-<template>
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
   <div>
     <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="formReadOnly"
              label-width="100px" @submit.native.prevent>
@@ -47,6 +47,15 @@
             </el-select>
           </el-form-item>
         </el-col>
+        <el-col :span="12" v-if="inputForm.sourceType === '5'">
+          <el-form-item label="采购编号" prop="purchaseNo"
+                        :rules="[{required: true, message:'采购编号不能为空', trigger:'blur'},
+                              {required: true, message:'采购编号不能为空', trigger:'change'}]">
+            <el-input size="medium" :readonly="true" @focus="openPurForm()" v-model="inputForm.purchaseNo" placeholder="请选择采购编号">
+              <el-button slot="append" icon="el-icon-search" @click="openPurForm()"></el-button>
+            </el-input>
+          </el-form-item>
+        </el-col>
         <el-col :span="24">
           <el-form-item label="备注" prop="remarks">
             <el-input v-model="inputForm.remarks"
@@ -59,7 +68,41 @@
           </el-form-item>
         </el-col>
       </el-row>
-
+      <div v-if="inputForm.sourceType === '5'">
+        <el-divider content-position="left"><i class="el-icon-document"></i>
+          采购详情
+        </el-divider>
+        <el-row  :gutter="15" >
+          <vxe-table
+            border
+            show-footer
+            show-overflow
+            :footer-method="footerMethod555"
+            ref="preTable"
+            class="vxe-table-element"
+            :data="inputForm.preList"
+            style="margin-left: 5em"
+            @cell-click=""
+            @edit-closed=""
+            highlight-current-row
+          >
+            <vxe-table-column field="purchaser" title="采购人" :edit-render="{}" :rules="[{required: true, message:'请选择采购人', trigger:'blur'}]"></vxe-table-column>
+            <vxe-table-column field="procurementOffice" title="采购部门" :edit-render="{}"></vxe-table-column>
+            <vxe-table-column field="procurementType" title="采购类型" :edit-render="{}" :rules="[{required: true, message:'请选择采购类型', trigger:'blur'}]"></vxe-table-column>
+            <vxe-table-column field="tradeName" title="商品名称" :edit-render="{}" :rules="[{required: true, message:'请填写商品名称', trigger:'blur'}]"></vxe-table-column>
+            <vxe-table-column field="tradePrice" title="商品单价(元)" :edit-render="{}" :rules="[{required: true, message:'请输入商品单价', trigger:'blur'}]"></vxe-table-column>
+            <vxe-table-column field="tradeNumber" title="商品数量" :edit-render="{}"></vxe-table-column>
+            <vxe-table-column field="priceSum" title="商品总价" :edit-render="{}"></vxe-table-column>
+            <vxe-table-column field="company" title="单位" :edit-render="{}"></vxe-table-column>
+            <vxe-table-column field="remarks" title="备注" :edit-render="{}"></vxe-table-column>
+            <vxe-table-column title="操作">
+              <template v-slot="scope">
+                <el-button size="mini" type="primary" :disabled="false" @click="seeFileInfo(scope.$rowIndex)">文件详情</el-button>
+              </template>
+            </vxe-table-column>
+          </vxe-table>
+        </el-row>
+      </div>
       <div v-if="inputForm.sourceType === '1'">
         <el-divider content-position="left"><i class="el-icon-document"></i>
           项目报销详情
@@ -372,6 +415,84 @@
           </vxe-table>
         </el-row>
       </div>
+      <div v-if="inputForm.sourceType === '5'">
+        <el-divider content-position="left"><i class="el-icon-document"></i>
+          采购报销详情
+          <el-button style="margin-left: 20px" type="primary" :disabled="method==='view' || this.formReadOnly" size="mini" @click="insertEvent('procured')" plain>
+            新增
+          </el-button>
+        </el-divider>
+        <el-row  :gutter="15" >
+          <vxe-table
+            border
+            show-footer
+            show-overflow
+            :footer-method="footerMethod"
+            ref="detailTableProcured"
+            class="vxe-table-element"
+            :data="inputForm.detailInfoProcured"
+            style="margin-left: 5em"
+            :key="detailKeyProcured"
+            @cell-click=""
+            @edit-closed=""
+            highlight-current-row
+            :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+            :edit-rules="validRules"
+          >
+            <vxe-table-column field="userName" title="报销人" :edit-render="{}" :rules="[{required: true, message:'请选择报销人', trigger:'blur'}]">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.userName" @focus="userPullListForm5(scope.$rowIndex)"></el-input>
+                <!--              <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="deptName" title="报销部门" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input :disabled='true' v-model="scope.row.deptName" ></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" :rules="[{required: true, message:'请选择报销类别', trigger:'blur'}]">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.typeName" @focus="typePullForm5(scope.$rowIndex)"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="projectName" title="报销项目" :edit-render="{}" :rules="[{required: true, message:'请选择报销项目', trigger:'blur'}]">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.projectName" @focus="openProgramPageForm5(scope.$rowIndex, scope.row)"></el-input>
+              </template>
+            </vxe-table-column>
+            <!--            <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}">-->
+            <!--              <template v-slot:edit="scope">-->
+            <!--                <el-input :readonly="true" v-model="scope.row.reportNumber" @focus="openReportNoPageForm(scope.$rowIndex, scope.row)"></el-input>-->
+            <!--              </template>-->
+            <!--            </vxe-table-column>-->
+            <vxe-table-column field="number" title="费用(元)" :edit-render="{}" :rules="[{required: true, message:'请输入费用', trigger:'blur'}]">
+              <template v-slot:edit="scope">
+                <el-input maxlength="15" v-model="scope.row.number" @keyup.native="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="receiptNumber" title="收据张数" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="days" title="出差天数" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="content" title="内容" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.content" ></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column title="操作" width="100">
+              <template v-slot="scope">
+                <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'procured')">删除</el-button>
+              </template>
+            </vxe-table-column>
+          </vxe-table>
+        </el-row>
+      </div>
       <el-divider content-position="left"><i class="el-icon-document"></i>
         专用发票信息
         <el-button style="margin-left: 20px" type="primary" :disabled="method==='view' || this.formReadOnly " size="mini" @click="insertEvent('amount')" plain>
@@ -430,20 +551,25 @@
       <CwProgramPageForm ref="cwProgramPageForm" @getProgram="getProgram"></CwProgramPageForm>
       <CwProgramPageForm ref="cwProgramPageForm3" @getProgram="getProgram3"></CwProgramPageForm>
       <CwProgramPageForm ref="cwProgramPageForm4" @getProgram="getProgram4"></CwProgramPageForm>
+      <CwProgramPageForm ref="cwProgramPageForm5" @getProgram="getProgram5"></CwProgramPageForm>
 <!--      <ReimbursementTypePullForm ref="reimbursementTypePullForm" @getProgramForType="getProgramForType"></ReimbursementTypePullForm>-->
       <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm" @getProgramForType="getProgramForType"></CwReimbursementTypePullForm>
       <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm2" @getProgramForType="getProgramForType2"></CwReimbursementTypePullForm>
       <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm3" @getProgramForType="getProgramForType3"></CwReimbursementTypePullForm>
       <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm4" @getProgramForType="getProgramForType4"></CwReimbursementTypePullForm>
+      <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm5" @getProgramForType="getProgramForType5"></CwReimbursementTypePullForm>
 
       <UserPullForm ref="userPullForm" @getProgramForUser="getProgramForUser"></UserPullForm>
       <UserPullForm ref="userPullForm2" @getProgramForUser="getProgramForUser2"></UserPullForm>
       <UserPullForm ref="userPullForm3" @getProgramForUser="getProgramForUser3"></UserPullForm>
       <UserPullForm ref="userPullForm4" @getProgramForUser="getProgramForUser4"></UserPullForm>
+      <UserPullForm ref="userPullForm5" @getProgramForUser="getProgramForUser5"></UserPullForm>
 
     </el-form>
     <WorkContractChooseCom ref="workContractChooseCom" @getContract="getContract"></WorkContractChooseCom>
     <ReportNoChooseRadio ref="reportNoChooseRadio" @getWorkClientRadioChoose="getWorkClientChoose2"></ReportNoChooseRadio>
+    <PurchaseChooseForm  ref="purchaseChooseForm" @getProject="getPurChoose"></PurchaseChooseForm>
+    <MaterialManagementDialog ref="materialManagementDialog" @getUpload="getUpload"></MaterialManagementDialog>
   </div>
 </template>
 
@@ -466,6 +592,9 @@
   import UserPullForm from '@/views/modules/finance/invoice/UserPullForm'
   import CommonApi from '@/api/cw/common/CommonApi'
   import WorkContractChooseCom from '../../projectRecords/WorkContractChooseCom'
+  import PurchaseChooseForm from '../../../materialManagement/wareHouse/PurchaseChooseForm'
+  import MaterialManagementService from '@/api/materialManagement/MaterialManagementService'
+  import MaterialManagementDialog from '../../../materialManagement/file/MaterialManagementDialog'
   export default {
     data () {
       return {
@@ -501,6 +630,7 @@
         detailKeyContract: '',
         detailKeyReport: '',
         detailKeyOthers: '',
+        detailKeyProcured: '',
         inputForm: {
           userId: '',
           userName: '',
@@ -512,10 +642,15 @@
           detailInfoContracts: [],
           detailInfoReports: [],
           detailInfoOthers: [],
+          detailInfoProcured: [],
           amountInfos: [],
           files: [], // 附件信息
           procInsId: '',
-          sourceType: ''
+          sourceType: '',
+          preList: [],
+          purchaseNo: '',
+          tradeTotalPrice: '',
+          purchaseId: ''
         }
       }
     },
@@ -525,6 +660,7 @@
     reimbursementApprovalTypeService: null,
     userService: null,
     commonApi: null,
+    materialManagementService: null,
     created () {
       this.reimbursementApprovalService = new ReimbursementApprovalService()
       // this.reimbursementService = new ReimbursementService()
@@ -532,6 +668,7 @@
       // this.reimbursementTypeService = new ReimbursementTypeService()
       this.reimbursementApprovalTypeService = new ReimbursementApprovalTypeService()
       this.commonApi = new CommonApi()
+      this.materialManagementService = new MaterialManagementService()
     },
     props: {
       businessId: {
@@ -554,7 +691,9 @@
       UserPullForm,
       ReportNoChooseRadio,
       UserSelectV2,
-      WorkContractChooseCom
+      WorkContractChooseCom,
+      PurchaseChooseForm,
+      MaterialManagementDialog
     },
     computed: {
       name () {
@@ -593,10 +732,15 @@
           detailInfoContracts: [],
           detailInfoReports: [],
           detailInfoOthers: [],
+          detailInfoProcured: [],
           amountInfos: [],
           files: [], // 附件信息
           procInsId: '',
-          sourceType: ''
+          sourceType: '',
+          preList: [],
+          purchaseNo: '',
+          tradeTotalPrice: '',
+          purchaseId: ''
         }
         if (method === 'add') {
           this.title = `新建报销类型`
@@ -629,6 +773,9 @@
               if (this.commonJS.isEmpty(this.inputForm.department)) {
                 this.inputForm.department = JSON.parse(localStorage.getItem('user')).officeDTO.name
               }
+              if (this.commonJS.isNotEmpty(this.inputForm.purchaseId)) {
+                this.startPur(this.inputForm.purchaseId)
+              }
               this.loading = false
             })
             // this.reimbursementService.findById(this.inputForm.id).then(({data}) => {
@@ -677,8 +824,15 @@
         })
       },
       close () {
-        this.$refs.inputForm.resetFields()
         this.inputForm.detailInfos = []
+        this.inputForm.detailInfoContracts = []
+        this.inputForm.detailInfoReports = []
+        this.inputForm.detailInfoOthers = []
+        this.inputForm.detailInfoProcured = []
+        this.inputForm.purchaseNo = ''
+        this.inputForm.preList = ''
+        this.inputForm.purchaseId = ''
+        this.$refs.inputForm.resetFields()
         this.inputForm.amountInfos = []
         this.$refs.uploadComponent.clearUpload()
         this.visible = false
@@ -705,6 +859,10 @@
           this.$refs.detailTableOthers.remove(row)
           this.inputForm.detailInfoOthers.splice(rowIndex, 1)
         }
+        if (type === 'procured') {
+          this.$refs.detailTableProcured.remove(row)
+          this.inputForm.detailInfoProcured.splice(rowIndex, 1)
+        }
       },
       // 新增
       async insertEvent (type) {
@@ -749,6 +907,15 @@
             this.inputForm.detailInfoOthers.push(data)
           })
         }
+        if (type === 'procured') {
+          await this.$refs.detailTableProcured.insert().then((data) => {
+            data.userName = JSON.parse(localStorage.getItem('user')).name
+            data.deptName = this.officeName
+            data.userId = JSON.parse(localStorage.getItem('user')).id
+            data.deptId = JSON.parse(localStorage.getItem('user')).officeDTO.id
+            this.inputForm.detailInfoProcured.push(data)
+          })
+        }
       },
       // 暂存
       async saveForm (callback) {
@@ -944,7 +1111,6 @@
           return
         }
         this.indexRow = rowIndex
-        console.log('this.indexRow', this.indexRow)
         // let i = this.inputForm.detailInfos.length
         this.$refs.reportNoChooseRadio.init(this.inputForm.detailInfoReports[rowIndex].projectId)
         // for (let j = this.indexRow; j < i; j++) {
@@ -1001,6 +1167,14 @@
         this.indexRow = rowIndex
         this.$refs.cwProgramPageForm4.init('2', false)
       },
+      openProgramPageForm5 (rowIndex, row) {
+        if (this.commonJS.isEmpty(row.typeName)) {
+          this.$message.error('请选择报销类型')
+          return
+        }
+        this.indexRow = rowIndex
+        this.$refs.cwProgramPageForm5.init('2', false)
+      },
       openContractForm (rowIndex, row) {
         this.$refs.workContractChooseCom.init(rowIndex)
       },
@@ -1025,6 +1199,13 @@
         this.indexRow = ''
         this.$forceUpdate()
       },
+      getProgram5 (rows) {
+        this.inputForm.detailInfoProcured[this.indexRow].projectId = rows[0].id
+        this.inputForm.detailInfoProcured[this.indexRow].projectName = rows[0].projectName
+        this.inputForm.detailInfoProcured[this.indexRow].reportNumber = rows[0].reportNumber
+        this.indexRow = ''
+        this.$forceUpdate()
+      },
       // 报销类型下拉弹窗
       typePullForm (rowIndex) {
         this.indexRow = rowIndex
@@ -1046,6 +1227,11 @@
         // this.$refs.reimbursementTypePullForm.init()
         this.$refs.cwReimbursementTypePullForm4.init('2')
       },
+      typePullForm5 (rowIndex) {
+        this.indexRow = rowIndex
+        // this.$refs.reimbursementTypePullForm.init()
+        this.$refs.cwReimbursementTypePullForm5.init('2')
+      },
       // 报销内容详情
       getProgramForType (rows) {
         this.inputForm.detailInfos[this.indexRow].typeId = rows.id
@@ -1071,6 +1257,12 @@
         this.indexRow = ''
         this.$forceUpdate()
       },
+      getProgramForType5 (rows) {
+        this.inputForm.detailInfoProcured[this.indexRow].typeId = rows.id
+        this.inputForm.detailInfoProcured[this.indexRow].typeName = rows.name
+        this.indexRow = ''
+        this.$forceUpdate()
+      },
       // 报销人下拉弹窗
       userPullListForm (rowIndex) {
         this.indexRow = rowIndex
@@ -1088,6 +1280,10 @@
         this.indexRow = rowIndex
         this.$refs.userPullForm4.init()
       },
+      userPullListForm5 (rowIndex) {
+        this.indexRow = rowIndex
+        this.$refs.userPullForm5.init()
+      },
       getProgramForUser (rows) {
         this.inputForm.detailInfos[this.indexRow].userId = rows[0].id
         this.inputForm.detailInfos[this.indexRow].userName = rows[0].name
@@ -1120,6 +1316,14 @@
         this.indexRow = ''
         this.$forceUpdate()
       },
+      getProgramForUser5 (rows) {
+        this.inputForm.detailInfoProcured[this.indexRow].userId = rows[0].id
+        this.inputForm.detailInfoProcured[this.indexRow].userName = rows[0].name
+        this.inputForm.detailInfoProcured[this.indexRow].deptId = rows[0].parentId
+        this.inputForm.detailInfoProcured[this.indexRow].deptName = rows[0].officeName
+        this.indexRow = ''
+        this.$forceUpdate()
+      },
       getWorkClientChoose2 (list) {
         this.inputForm.detailInfoReports[this.indexRow].reportNumber = list.reportNo
         this.indexRow = ''
@@ -1135,10 +1339,15 @@
         this.inputForm.detailInfoContracts = []
         this.inputForm.detailInfoReports = []
         this.inputForm.detailInfoOthers = []
+        this.inputForm.detailInfoProcured = []
+        this.inputForm.purchaseNo = ''
+        this.inputForm.preList = ''
+        this.inputForm.purchaseId = ''
         this.detailKey = Math.random()
         this.detailKeyContract = Math.random()
         this.detailKeyReport = Math.random()
         this.detailKeyOthers = Math.random()
+        this.detailKeyProcured = Math.random()
       },
       submitCheck () {
         if (this.commonJS.isEmpty(this.inputForm.sourceType)) {
@@ -1275,8 +1484,83 @@
                 }
               }
             }
+          } else if (this.inputForm.sourceType === '5') {
+            if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured)) {
+              this.$message.error('至少填写一条报销详情信息')
+              this.loading = false
+              throw new Error('至少填写一条报销详情信息')
+            } else {
+              let i = this.inputForm.detailInfoProcured.length
+              for (let j = 0; j < i; j++) {
+                let k = j + 1
+                if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].userName)) {
+                  this.$message.error('报销详情第' + k + '行请选择报销人')
+                  this.loading = false
+                  throw new Error('报销详情第' + k + '行请选择报销人')
+                }
+                if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].typeName)) {
+                  this.$message.error('报销详情第' + k + '行请选择报销类型')
+                  this.loading = false
+                  throw new Error('报销详情第' + k + '行请选择报销类型')
+                }
+                if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].projectName)) {
+                  this.$message.error('报销详情第' + k + '行请选择报销项目')
+                  this.loading = false
+                  throw new Error('报销详情第' + k + '行请选择报销项目')
+                }
+                if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].number)) {
+                  this.$message.error('报销详情第' + k + '行请输入费用')
+                  this.loading = false
+                  throw new Error('报销详情第' + k + '行请输入费用')
+                }
+              }
+            }
+          }
+        }
+      },
+      openPurForm () {
+        this.$refs.purchaseChooseForm.init()
+      },
+      startPur (id) {
+        this.materialManagementService.findById(id).then(({data}) => {
+          this.inputForm.preList = data.detailInfos
+          this.inputForm.purchaseNo = data.purchaseNo
+          let i = this.inputForm.preList.length
+          for (let j = 0; j < i; j++) {
+            if (this.commonJS.isNotEmpty(this.inputForm.preList[j].tradePrice)) {
+              if (this.commonJS.isNotEmpty(this.inputForm.preList[j].tradeNumber)) {
+                this.inputForm.preList[j].priceSum = this.inputForm.preList[j].tradePrice * this.inputForm.preList[j].tradeNumber
+              }
+            }
           }
+        })
+        this.$forceUpdate()
+      },
+      getPurChoose (row) {
+        this.inputForm.purchaseId = row.id
+        this.startPur(row.id)
+      },
+      footerMethod555 ({ columns, data }) {
+        const footerData = [
+          columns.map((column, columnIndex) => {
+            if (columnIndex === 0) {
+              return '商品总价'
+            }
+            if (['priceSum'].includes(column.property)) {
+              // eslint-disable-next-line no-undef
+              this.inputForm.tradeTotalPrice = XEUtils.sum(data, column.property)
+              return XEUtils.sum(data, column.property)
+            }
+            return null
+          })
+        ]
+        return footerData
+      },
+      seeFileInfo (index) {
+        if (this.commonJS.isEmpty(this.inputForm.preList[index].fileInfoLost)) {
+          this.inputForm.preList[index].fileInfoLost = []
         }
+        this.$refs.materialManagementDialog.newUpload('view', this.inputForm.preList[index].fileInfoLost, null, null, null, null, null, false, index)
       }
     }
   }