ソースを参照

合同详情、项目详情关联发票

lizhenhao 2 年 前
コミット
3f5aeb3fd8

+ 14 - 0
src/api/cw/invoice/CwFinanceInvoiceService.js

@@ -85,4 +85,18 @@ export default class CwFinanceInvoiceService {
       responseType: 'blob'
     })
   }
+  getByIds (projectId, invoiceForm) {
+    return request({
+      url: '/cw_finance/invoice/getByIds',
+      method: 'get',
+      params: {projectId: projectId, ...invoiceForm}
+    })
+  }
+  getByContractId (contractId, invoiceForm) {
+    return request({
+      url: '/cw_finance/invoice/getByContractId',
+      method: 'get',
+      params: {contractId: contractId, ...invoiceForm}
+    })
+  }
 }

+ 1 - 0
src/views/modules/cw/invoice/InvoiceForm.vue

@@ -4,6 +4,7 @@
       :title="title"
       :close-on-click-modal="false"
       v-dialogDrag
+      append-to-body
       width="1300px"
       @close="close"
       @keyup.enter.native="doSubmit"

+ 297 - 150
src/views/modules/cw/projectRecords/ProjectRecordsForm.vue

@@ -12,74 +12,75 @@
       :visible.sync="visible">
     <el-row>
       <el-col :span="24">
-
-        <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method === 'view'"
+        <el-tabs v-model="activeNameTop" type="border-card" @tab-click="tabHandleClickTop">
+          <el-tab-pane label="项目信息" name="project">
+            <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method === 'view'"
                      label-width="135px" @submit.native.prevent>
-          <el-divider v-if="commonJS.isNotEmpty(inputForm.contractId) && method === 'view'" content-position="left">
-            <el-link  type="primary" :underline="false" icon="el-icon-document" @click="viewContract(inputForm.contractId)"><b>查看合同详情</b></el-link>
-          </el-divider>
-          <el-divider v-else content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
-          <el-row  :gutter="15">
-            <el-col :span="24">
-              <el-form-item label="合同名称" prop="contractName"
-                            :rules="[
+              <el-divider v-if="commonJS.isNotEmpty(inputForm.contractId) && method === 'view'" content-position="left">
+                <el-link  type="primary" :underline="false" icon="el-icon-document" @click="viewContract(inputForm.contractId)"><b>查看合同详情</b></el-link>
+              </el-divider>
+              <el-divider v-else content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
+              <el-row  :gutter="15">
+                <el-col :span="24">
+                  <el-form-item label="合同名称" prop="contractName"
+                                :rules="[
                  ]">
-                <el-input size="medium" :readonly="true" @focus="openContract()" v-model="inputForm.contractName" placeholder="请选择合同">
-                  <el-button slot="append" icon="el-icon-search" @click="openContract()"></el-button>
-                </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="合同金额(元)" prop="contractAmount"
-                            :rules="[
+                    <el-input size="medium" :readonly="true" @focus="openContract()" v-model="inputForm.contractName" placeholder="请选择合同">
+                      <el-button slot="append" icon="el-icon-search" @click="openContract()"></el-button>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="合同金额(元)" prop="contractAmount"
+                                :rules="[
                  ]">
-                <el-input :disabled="true" v-model="inputForm.contractAmount" placeholder="请填写合同金额"></el-input>
-              </el-form-item>
-            </el-col>
-<!--            <el-col :span="12">-->
-<!--              <el-form-item label="合同份数" prop="contractNum"-->
-<!--                            :rules="[-->
-<!--                 ]">-->
-<!--                <el-input :disabled="true" v-model="inputForm.contractNum" placeholder="请填写合同份数"></el-input>-->
-<!--              </el-form-item>-->
-<!--            </el-col>-->
-            <el-col :span="12">
-              <el-form-item label="委托人" prop="clientContactsName"
-                            :rules="[
+                    <el-input :disabled="true" v-model="inputForm.contractAmount" placeholder="请填写合同金额"></el-input>
+                  </el-form-item>
+                </el-col>
+                <!--            <el-col :span="12">-->
+                <!--              <el-form-item label="合同份数" prop="contractNum"-->
+                <!--                            :rules="[-->
+                <!--                 ]">-->
+                <!--                <el-input :disabled="true" v-model="inputForm.contractNum" placeholder="请填写合同份数"></el-input>-->
+                <!--              </el-form-item>-->
+                <!--            </el-col>-->
+                <el-col :span="12">
+                  <el-form-item label="委托人" prop="clientContactsName"
+                                :rules="[
                  ]">
-                <el-input :disabled="true" v-model="inputForm.clientContactsName" placeholder="请填写委托人"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="付款主体" prop="payerSubject"
-                            :rules="[
+                    <el-input :disabled="true" v-model="inputForm.clientContactsName" placeholder="请填写委托人"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="付款主体" prop="payerSubject"
+                                :rules="[
                  ]">
-                <el-select :disabled="true" v-model="inputForm.payerSubject" placeholder="请选择付款主体" style="width:100%;">
-                  <el-option
-                    v-for="item in $dictUtils.getDictList('cw_payment_subject')"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="付款方式" prop="paymentMethod"
-                            :rules="[
+                    <el-select :disabled="true" v-model="inputForm.payerSubject" placeholder="请选择付款主体" style="width:100%;">
+                      <el-option
+                        v-for="item in $dictUtils.getDictList('cw_payment_subject')"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="付款方式" prop="paymentMethod"
+                                :rules="[
                  ]">
-                <el-select :disabled="true" v-model="inputForm.paymentMethod" placeholder="请选择付款方式" style="width:100%;">
-                  <el-option
-                    v-for="item in $dictUtils.getDictList('cw_payment_method')"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-divider content-position="left"><i class="el-icon-document"></i> 项目信息</el-divider>
+                    <el-select :disabled="true" v-model="inputForm.paymentMethod" placeholder="请选择付款方式" style="width:100%;">
+                      <el-option
+                        v-for="item in $dictUtils.getDictList('cw_payment_method')"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-divider content-position="left"><i class="el-icon-document"></i> 项目信息</el-divider>
               <el-row  :gutter="15">
                 <el-col :span="12">
                   <el-form-item label="项目名称" prop="projectName"
@@ -150,7 +151,7 @@
                       :min="0"
                       placeholder="请填写项目金额"
                       :controls="false"
-                      >
+                    >
                     </el-input-number>
                   </el-form-item>
                 </el-col>
@@ -165,42 +166,42 @@
                       placeholder="选择评审计期间"
                       style="width:100%"
                       placement="bottom-start"
-                      >
+                    >
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
-<!--                <el-col :span="12">-->
-<!--                  <el-form-item label="项目预计开始时间" prop="planStartDate"-->
-<!--                                :rules="[-->
-<!--                                {required: true, message:'项目预计开始时间不能为空', trigger:'blur'}-->
-<!--                   ]">-->
-<!--                    <el-date-picker-->
-<!--                      v-model="inputForm.planStartDate"-->
-<!--                      type="date"-->
-<!--                      value-format="yyyy-MM-dd"-->
-<!--                      placeholder="选择项目预计开始时间"-->
-<!--                      style="width:100%"-->
-<!--                      placement="bottom-start"-->
-<!--                      >-->
-<!--                    </el-date-picker>-->
-<!--                  </el-form-item>-->
-<!--                </el-col>-->
-<!--                <el-col :span="12">-->
-<!--                  <el-form-item label="项目预计结束时间" prop="planEndDate"-->
-<!--                                :rules="[-->
-<!--                                {required: true, message:'项目预计结束时间不能为空', trigger:'blur'}-->
-<!--                   ]">-->
-<!--                    <el-date-picker-->
-<!--                      v-model="inputForm.planEndDate"-->
-<!--                      type="date"-->
-<!--                      value-format="yyyy-MM-dd"-->
-<!--                      placeholder="选择项目预计结束时间"-->
-<!--                      style="width:100%"-->
-<!--                      placement="bottom-start"-->
-<!--                      >-->
-<!--                    </el-date-picker>-->
-<!--                  </el-form-item>-->
-<!--                </el-col>-->
+                <!--                <el-col :span="12">-->
+                <!--                  <el-form-item label="项目预计开始时间" prop="planStartDate"-->
+                <!--                                :rules="[-->
+                <!--                                {required: true, message:'项目预计开始时间不能为空', trigger:'blur'}-->
+                <!--                   ]">-->
+                <!--                    <el-date-picker-->
+                <!--                      v-model="inputForm.planStartDate"-->
+                <!--                      type="date"-->
+                <!--                      value-format="yyyy-MM-dd"-->
+                <!--                      placeholder="选择项目预计开始时间"-->
+                <!--                      style="width:100%"-->
+                <!--                      placement="bottom-start"-->
+                <!--                      >-->
+                <!--                    </el-date-picker>-->
+                <!--                  </el-form-item>-->
+                <!--                </el-col>-->
+                <!--                <el-col :span="12">-->
+                <!--                  <el-form-item label="项目预计结束时间" prop="planEndDate"-->
+                <!--                                :rules="[-->
+                <!--                                {required: true, message:'项目预计结束时间不能为空', trigger:'blur'}-->
+                <!--                   ]">-->
+                <!--                    <el-date-picker-->
+                <!--                      v-model="inputForm.planEndDate"-->
+                <!--                      type="date"-->
+                <!--                      value-format="yyyy-MM-dd"-->
+                <!--                      placeholder="选择项目预计结束时间"-->
+                <!--                      style="width:100%"-->
+                <!--                      placement="bottom-start"-->
+                <!--                      >-->
+                <!--                    </el-date-picker>-->
+                <!--                  </el-form-item>-->
+                <!--                </el-col>-->
                 <el-col :span="12">
                   <el-form-item label="项目预计时间" prop="planDate"
                                 :rules="[
@@ -259,59 +260,112 @@
                 </el-col>
               </el-row>
             </el-form>
-        <el-tabs v-model="activeName" type="border-card" @tab-click="tabHandleClick">
-          <el-tab-pane label="被服务单位" name="client">
-            <el-row :gutter="15">
-              <el-button type="info" style="margin-bottom: 15px" size="mini" :disabled="method === 'view'" @click="openWorkClient">
-                新增被服务单位
-              </el-button>
-            </el-row>
-            <el-row  :gutter="15">
-              <el-form :disabled="method === 'view'">
-                <vxe-table
-                  border
-                  show-overflow
-                  show-footer
-                  :column-config="{resizable: true}"
-                  ref="clientTable"
-                  :key="tableKeyClient"
-                  class="vxe-table-element"
-                  :data="inputForm.cwProjectClientInfoDTOList"
-                  style=""
-                  @cell-click=""
-                  @edit-closed=""
-                  highlight-current-row
-                  :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: false}"
-                >
-                  <vxe-table-column align="center" field="no" title="客户编号" :edit-render="{}">
-                    <template v-slot:edit="scope">
-                      <el-input :readonly="true" v-model="scope.row.no" placeholder="客户编号" clearable></el-input>
-                    </template>
-                  </vxe-table-column>
-                  <vxe-table-column align="center" field="name" title="客户名称" :edit-render="{}">
-                    <template v-slot:edit="scope">
-                      <el-input :readonly="true" v-model="scope.row.name" placeholder="客户名称" clearable></el-input>
-                    </template>
-                  </vxe-table-column>
-<!--                  <vxe-table-column align="center" field="companyLevel" title="层级" :edit-render="{}">-->
-<!--                    <template v-slot:edit="scope">-->
-<!--                      <el-input :readonly="true" v-model="scope.row.companyLevel" placeholder="层级" clearable></el-input>-->
-<!--                    </template>-->
-<!--                  </vxe-table-column>-->
-                  <vxe-table-column align="center" title="操作" width="100">
-                    <template v-slot="scope">
-                      <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
-                    </template>
-                  </vxe-table-column>
-                </vxe-table>
-              </el-form>
-            </el-row>
-          </el-tab-pane>
-          <el-tab-pane label="附件" name="files">
-            <!--        附件-->
-            <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+            <el-tabs v-model="activeName" type="border-card" @tab-click="tabHandleClick">
+              <el-tab-pane label="被服务单位" name="client">
+                <el-row :gutter="15">
+                  <el-button type="info" style="margin-bottom: 15px" size="mini" :disabled="method === 'view'" @click="openWorkClient">
+                    新增被服务单位
+                  </el-button>
+                </el-row>
+                <el-row  :gutter="15">
+                  <el-form :disabled="method === 'view'">
+                    <vxe-table
+                      border
+                      show-overflow
+                      show-footer
+                      :column-config="{resizable: true}"
+                      ref="clientTable"
+                      :key="tableKeyClient"
+                      class="vxe-table-element"
+                      :data="inputForm.cwProjectClientInfoDTOList"
+                      style=""
+                      @cell-click=""
+                      @edit-closed=""
+                      highlight-current-row
+                      :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: false}"
+                    >
+                      <vxe-table-column align="center" field="no" title="客户编号" :edit-render="{}">
+                        <template v-slot:edit="scope">
+                          <el-input :readonly="true" v-model="scope.row.no" placeholder="客户编号" clearable></el-input>
+                        </template>
+                      </vxe-table-column>
+                      <vxe-table-column align="center" field="name" title="客户名称" :edit-render="{}">
+                        <template v-slot:edit="scope">
+                          <el-input :readonly="true" v-model="scope.row.name" placeholder="客户名称" clearable></el-input>
+                        </template>
+                      </vxe-table-column>
+                      <!--                  <vxe-table-column align="center" field="companyLevel" title="层级" :edit-render="{}">-->
+                      <!--                    <template v-slot:edit="scope">-->
+                      <!--                      <el-input :readonly="true" v-model="scope.row.companyLevel" placeholder="层级" clearable></el-input>-->
+                      <!--                    </template>-->
+                      <!--                  </vxe-table-column>-->
+                      <vxe-table-column align="center" title="操作" width="100">
+                        <template v-slot="scope">
+                          <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
+                        </template>
+                      </vxe-table-column>
+                    </vxe-table>
+                  </el-form>
+                </el-row>
+              </el-tab-pane>
+              <el-tab-pane label="附件" name="files">
+                <!--        附件-->
+                <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+              </el-tab-pane>
+
+            </el-tabs>
           </el-tab-pane>
+          <el-tab-pane label="关联发票" name="invoice">
+            <el-form size="small" :inline="true" class="query-form" style="margin-bottom: 0;padding-top: 2px;padding-left: 0" ref="invoiceForm" :model="invoiceForm" @keyup.enter.native="searchInvoice()" @submit.native.prevent>
+              <!-- 搜索框-->
+              <el-form-item label="发票申请编号" prop="no">
+                <el-input size="small" v-model="invoiceForm.no" placeholder="请输入发票申请编号" clearable></el-input>
+              </el-form-item>
 
+              <el-form-item>
+                <el-button type="primary" @click="searchInvoice()" size="small" icon="el-icon-search">查询</el-button>
+                <el-button @click="refreshInvoiceForm()" size="small" icon="el-icon-refresh-right">重置</el-button>
+              </el-form-item>
+            </el-form>
+            <vxe-table
+              max-height="500"
+              border="inner"
+              auto-resize
+              resizable
+              height="auto"
+              :loading="loading"
+              size="medium"
+              ref="invoiceTable"
+              show-header-overflow
+              show-overflow
+              highlight-hover-row
+              :menu-config="{}"
+              @sort-change=""
+              :sort-config="{remote:true}"
+              :data="invoiceList"
+              :checkbox-config="{}">
+              <vxe-column type="seq" width="60" title="序号"></vxe-column>
+              <vxe-column min-width="150" title="发票申请编号"align="center" field="no">
+                <template slot-scope="scope">
+                  <el-link  type="primary" :underline="false" @click="viewInvoice(false, scope.row.id)">{{scope.row.no}}</el-link>
+                </template>
+              </vxe-column>
+              <vxe-column min-width="150" title="发票号"align="center" field="number"></vxe-column>
+              <vxe-column min-width="150" title="实际开票单位"align="center" field="billingWorkplaceReal"></vxe-column>
+              <vxe-column min-width="150" title="开票金额(元)"align="center" field="accountDetail"></vxe-column>
+              <vxe-column min-width="150" title="开票总金额(元)"align="center" field="account"></vxe-column>
+              <vxe-column min-width="120" title="开票内容"align="center" field="billingContent">
+                <template slot-scope="scope">
+                  {{$dictUtils.getDictLabel('invoice_billing_content', scope.row.billingContent, '-')}}
+                </template>
+              </vxe-column>
+              <vxe-column min-width="110" fixed="right"align="center" title="是否收款" field="receivablesStatus">
+                <template slot-scope="scope">
+                  {{scope.row.receivablesStatus === '1'?'已收款':'未收款'}}
+                </template>
+              </vxe-column>
+            </vxe-table>
+          </el-tab-pane>
         </el-tabs>
       </el-col>
     </el-row>
@@ -320,9 +374,10 @@
       <el-button size="small" v-if="method === 'edit'" type="primary" icon="el-icon-circle-check" @click="doSubmit('save')">确定</el-button>
     </span>
       <WorkContractChooseCom ref="workContractChooseCom" @getContract="getContract"></WorkContractChooseCom>
-    <WorkClientChooseForm ref="workClientChooseForm" @getWorkClientChoose="getWorkClientChoose"></WorkClientChooseForm>
+      <WorkClientChooseForm ref="workClientChooseForm" @getWorkClientChoose="getWorkClientChoose"></WorkClientChooseForm>
       <CwProjectBusinessTypeListForm ref="cwProjectBusinessTypeListForm" @getBusinessType="getBusinessType"></CwProjectBusinessTypeListForm>
       <ContractNameForm ref="contractNameForm"></ContractNameForm>
+      <InvoiceForm ref="invoiceFormDialog"></InvoiceForm>
 
     </el-dialog>
   </div>
@@ -341,6 +396,7 @@
   import ContractNameForm from '../workContract/ContractNameForm'
   import WorkClientService from '@/api/cw/workClientInfo/WorkClientService'
   import ContractInfoService from '@/api/cw/workContract/ContractInfoService'
+  import CwFinanceInvoiceService from '@/api/cw/invoice/CwFinanceInvoiceService'
   export default {
     props: {
       businessId: {
@@ -398,20 +454,27 @@
         },
         keyWatch: '',
         activeName: 'client',
+        activeNameTop: 'project',
         tableKey: '',
         tableKeyClient: '1',
-        visible: false
+        visible: false,
+        invoiceList: [],
+        invoiceForm: {
+          no: ''
+        }
       }
     },
     projectRecordsService: null,
     enterpriseSearchService: null,
     workClientService: null,
     contractInfoService: null,
+    cwFinanceInvoiceService: null,
     created () {
       this.enterpriseSearchService = new EnterpriseSearchService()
       this.projectRecordsService = new ProjectRecordsService()
       this.workClientService = new WorkClientService()
       this.contractInfoService = new ContractInfoService()
+      this.cwFinanceInvoiceService = new CwFinanceInvoiceService()
     },
     computed: {
       bus: {
@@ -445,7 +508,8 @@
       WorkClientChooseForm,
       WorkContractChooseCom,
       CwProjectBusinessTypeListForm,
-      ContractNameForm
+      ContractNameForm,
+      InvoiceForm: () => import('../invoice/InvoiceForm')
     },
     methods: {
       getKeyWatch (keyWatch) {
@@ -464,6 +528,7 @@
           this.method = 'view'
         }
         this.activeName = 'client'
+        this.activeNameTop = 'project'
         this.projectRecordsService = new ProjectRecordsService()
         this.inputForm = {
           id: '',
@@ -537,6 +602,39 @@
             if (this.commonJS.isEmpty(this.inputForm.projectMoney)) {
               this.inputForm.projectMoney = 0
             }
+            this.cwFinanceInvoiceService.getByIds(this.inputForm.id, this.invoiceForm).then(({data}) => {
+              let _this = this
+              let _data = data
+              const wait = function () {
+                return new Promise((resolve, reject) => {
+                  _this.invoiceList = _data
+                  resolve()
+                })
+              }
+              wait().then(() => {
+                this.invoiceList.forEach(item => {
+                  item.account = parseFloat(item.account).toFixed(2)
+                  if (!this.commonJS.isEmpty(item.financeInvoiceDetailDTOList)) {
+                    item.accountDetail = 0
+                    let num = ''
+                    item.financeInvoiceDetailDTOList.forEach((detail, index) => {
+                      if (!this.commonJS.isEmpty(detail.account)) {
+                        item.accountDetail = parseFloat(parseFloat(item.accountDetail) + parseFloat(detail.account)).toFixed(2)
+                      }
+                      if ((index + 1) !== item.financeInvoiceDetailDTOList.length) {
+                        num = num + detail.number + ','
+                      } else {
+                        num = num + detail.number
+                      }
+                    })
+                    item.number = num
+                  } else {
+                    item.number = ''
+                    item.accountDetail = ''
+                  }
+                })
+              })
+            })
             this.loading = false
           })
         })
@@ -681,6 +779,9 @@
       tabHandleClick (event) {
         // console.log(event)
       },
+      tabHandleClickTop (event) {
+        // console.log(event)
+      },
       // 新增
       // eslint-disable-next-line no-dupe-keys
       insertEvent (type) {
@@ -811,6 +912,52 @@
       // 查看合同详情
       viewContract (id) {
         this.$refs.contractNameForm.init('view', id)
+      },
+      searchInvoice () {
+        this.loading = true
+        this.cwFinanceInvoiceService.getByIds(this.inputForm.id, this.invoiceForm).then(({data}) => {
+          let _this = this
+          let _data = data
+          const wait = function () {
+            return new Promise((resolve, reject) => {
+              _this.invoiceList = _data
+              resolve()
+            })
+          }
+          wait().then(() => {
+            this.invoiceList.forEach(item => {
+              item.account = parseFloat(item.account).toFixed(2)
+              if (!this.commonJS.isEmpty(item.financeInvoiceDetailDTOList)) {
+                item.accountDetail = 0
+                let num = ''
+                item.financeInvoiceDetailDTOList.forEach((detail, index) => {
+                  if (!this.commonJS.isEmpty(detail.account)) {
+                    item.accountDetail = parseFloat(parseFloat(item.accountDetail) + parseFloat(detail.account)).toFixed(2)
+                  }
+                  if ((index + 1) !== item.financeInvoiceDetailDTOList.length) {
+                    num = num + detail.number + ','
+                  } else {
+                    num = num + detail.number
+                  }
+                })
+                item.number = num
+              } else {
+                item.number = ''
+                item.accountDetail = ''
+              }
+            })
+          })
+          this.loading = false
+        }).catch(() => {
+          this.loading = false
+        })
+      },
+      refreshInvoiceForm () {
+        this.$refs.invoiceForm.resetFields()
+        this.searchInvoice()
+      },
+      viewInvoice (flag, id) {
+        this.$refs.invoiceFormDialog.init(flag, id)
       }
     }
   }

+ 141 - 1
src/views/modules/cw/workContract/ContractNameForm.vue

@@ -347,6 +347,57 @@
             <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
           </vxe-table>
         </el-tab-pane>
+        <el-tab-pane label="关联发票" name="invoice">
+          <el-form size="small" :inline="true" class="query-form" style="margin-bottom: 0;padding-top: 2px;padding-left: 0" ref="invoiceForm" :model="invoiceForm" @keyup.enter.native="searchInvoice()" @submit.native.prevent>
+            <!-- 搜索框-->
+            <el-form-item label="发票申请编号" prop="no">
+              <el-input size="small" v-model="invoiceForm.no" placeholder="请输入发票申请编号" clearable></el-input>
+            </el-form-item>
+
+            <el-form-item>
+              <el-button type="primary" @click="searchInvoice()" size="small" icon="el-icon-search">查询</el-button>
+              <el-button @click="refreshInvoiceForm()" size="small" icon="el-icon-refresh-right">重置</el-button>
+            </el-form-item>
+          </el-form>
+          <vxe-table
+            max-height="500"
+            border="inner"
+            auto-resize
+            resizable
+            height="auto"
+            :loading="loading"
+            size="medium"
+            ref="invoiceTable"
+            show-header-overflow
+            show-overflow
+            highlight-hover-row
+            :menu-config="{}"
+            @sort-change=""
+            :sort-config="{remote:true}"
+            :data="invoiceList"
+            :checkbox-config="{}">
+            <vxe-column type="seq" width="60" title="序号"></vxe-column>
+            <vxe-column min-width="150" title="发票申请编号"align="center" field="no">
+              <template slot-scope="scope">
+                <el-link  type="primary" :underline="false" @click="viewInvoice(false, scope.row.id)">{{scope.row.no}}</el-link>
+              </template>
+            </vxe-column>
+            <vxe-column min-width="150" title="发票号"align="center" field="number"></vxe-column>
+            <vxe-column min-width="150" title="实际开票单位"align="center" field="billingWorkplaceReal"></vxe-column>
+            <vxe-column min-width="150" title="开票金额(元)"align="center" field="accountDetail"></vxe-column>
+            <vxe-column min-width="150" title="开票总金额(元)"align="center" field="account"></vxe-column>
+            <vxe-column min-width="120" title="开票内容"align="center" field="billingContent">
+              <template slot-scope="scope">
+                {{$dictUtils.getDictLabel('invoice_billing_content', scope.row.billingContent, '-')}}
+              </template>
+            </vxe-column>
+            <vxe-column min-width="110" fixed="right"align="center" title="是否收款" field="receivablesStatus">
+              <template slot-scope="scope">
+                {{scope.row.receivablesStatus === '1'?'已收款':'未收款'}}
+              </template>
+            </vxe-column>
+          </vxe-table>
+        </el-tab-pane>
       </el-tabs>
 
       <span slot="footer" class="dialog-footer">
@@ -363,6 +414,7 @@
       <WorkClientChooseRadio ref="workClientChooseRadio" @getWorkClientRadioChoose="getWorkClientChoose2"></WorkClientChooseRadio>
       <WorkClientForm ref="workClientForm"></WorkClientForm>
       <ProjectRecordsForm ref="projectRecordsForm"></ProjectRecordsForm>
+      <InvoiceForm ref="invoiceFormDialog"></InvoiceForm>
     </el-dialog>
   </div>
 </template>
@@ -385,6 +437,7 @@
   } from '@/api/sys/OSSService'
   import moment from 'moment'
   import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+  import CwFinanceInvoiceService from '@/api/cw/invoice/CwFinanceInvoiceService'
   // import ProjectRecordsForm from '../projectRecords/ProjectRecordsForm'
   export default {
     data () {
@@ -485,6 +538,10 @@
         projectForm: {
           projectName: '',
           projectNumber: ''
+        },
+        invoiceList: [],
+        invoiceForm: {
+          no: ''
         }
       }
     },
@@ -509,19 +566,22 @@
       SelectTree,
       WorkClientChooseRadio,
       WorkClientForm: () => import('../workClientInfo/WorkClientForm'),
-      ProjectRecordsForm: () => import('../projectRecords/ProjectRecordsForm')
+      ProjectRecordsForm: () => import('../projectRecords/ProjectRecordsForm'),
+      InvoiceForm: () => import('../invoice/InvoiceForm')
     },
     ossService: null,
     // workContractService: null,
     contractInfoService: null,
     contractFileService: null,
     projectRecordsService: null,
+    cwFinanceInvoiceService: null,
     created () {
       this.ossService = new OSSSerive()
       // this.workContractService = new WorkContractService()
       this.contractInfoService = new ContractInfoService()
       this.contractFileService = new ContractFileService()
       this.projectRecordsService = new ProjectRecordsService()
+      this.cwFinanceInvoiceService = new CwFinanceInvoiceService()
     },
     mounted () {
       window.onPreview = this.onPreview
@@ -680,6 +740,40 @@
           this.projectRecordsService.getByContractId(this.inputForm.id).then((project) => {
             this.projectList = project.data
           })
+          // 查询关联发票信息
+          this.cwFinanceInvoiceService.getByContractId(this.inputForm.id, this.invoiceForm).then(({data}) => {
+            let _this = this
+            let _data = data
+            const wait = function () {
+              return new Promise((resolve, reject) => {
+                _this.invoiceList = _data
+                resolve()
+              })
+            }
+            wait().then(() => {
+              this.invoiceList.forEach(item => {
+                item.account = parseFloat(item.account).toFixed(2)
+                if (!this.commonJS.isEmpty(item.financeInvoiceDetailDTOList)) {
+                  item.accountDetail = 0
+                  let num = ''
+                  item.financeInvoiceDetailDTOList.forEach((detail, index) => {
+                    if (!this.commonJS.isEmpty(detail.account)) {
+                      item.accountDetail = parseFloat(parseFloat(item.accountDetail) + parseFloat(detail.account)).toFixed(2)
+                    }
+                    if ((index + 1) !== item.financeInvoiceDetailDTOList.length) {
+                      num = num + detail.number + ','
+                    } else {
+                      num = num + detail.number
+                    }
+                  })
+                  item.number = num
+                } else {
+                  item.number = ''
+                  item.accountDetail = ''
+                }
+              })
+            })
+          })
         }
         )
       },
@@ -975,6 +1069,52 @@
       refreshProjectForm () {
         this.$refs.projectForm.resetFields()
         this.searchProject()
+      },
+      searchInvoice () {
+        this.loading = true
+        this.cwFinanceInvoiceService.getByContractId(this.inputForm.id, this.invoiceForm).then(({data}) => {
+          let _this = this
+          let _data = data
+          const wait = function () {
+            return new Promise((resolve, reject) => {
+              _this.invoiceList = _data
+              resolve()
+            })
+          }
+          wait().then(() => {
+            this.invoiceList.forEach(item => {
+              item.account = parseFloat(item.account).toFixed(2)
+              if (!this.commonJS.isEmpty(item.financeInvoiceDetailDTOList)) {
+                item.accountDetail = 0
+                let num = ''
+                item.financeInvoiceDetailDTOList.forEach((detail, index) => {
+                  if (!this.commonJS.isEmpty(detail.account)) {
+                    item.accountDetail = parseFloat(parseFloat(item.accountDetail) + parseFloat(detail.account)).toFixed(2)
+                  }
+                  if ((index + 1) !== item.financeInvoiceDetailDTOList.length) {
+                    num = num + detail.number + ','
+                  } else {
+                    num = num + detail.number
+                  }
+                })
+                item.number = num
+              } else {
+                item.number = ''
+                item.accountDetail = ''
+              }
+            })
+          })
+          this.loading = false
+        }).catch(() => {
+          this.loading = false
+        })
+      },
+      refreshInvoiceForm () {
+        this.$refs.invoiceForm.resetFields()
+        this.searchInvoice()
+      },
+      viewInvoice (flag, id) {
+        this.$refs.invoiceFormDialog.init(flag, id)
       }
     }
   }