zhangyanpeng
2020-05-28 5346354c8b6685d4c111041a8c5a4d61dae13050
src/components/finance/collectionStatistics.vue
@@ -7,12 +7,14 @@
               <el-input v-model="formInline.name" placeholder="项目名称"></el-input>
            </el-form-item>
            
            <el-form-item label="研究目的">
               <el-select v-model="formInline.type" placeholder="研究目的">
                  <el-option label="干预性系统评价" value="干预性系统评价"></el-option>
                  <el-option label="诊断性系统评价" value="诊断性系统评价"></el-option>
                  <el-option label="预后性系统评价" value="预后性系统评价"></el-option>
                  <el-option label="相关性系统评价" value="相关性系统评价"></el-option>
            <el-form-item label="研究类型分类" label-width="100px">
               <el-select v-model="formInline.type" placeholder="研究类型分类">
                  <el-option
                     v-for="(item,k) in options_type"
                     :key="k"
                     :label="item"
                     :value="item"
                  ></el-option>
               </el-select>
            </el-form-item>
            
@@ -33,38 +35,41 @@
      </div>
      
      <div style="width: 100%; text-align: left;">
         <span>统计已回款金额:{{sum_budget}}</span>
         <span>统计开票金额:{{sum_budget}}</span>
         <span style="margin-left: 32px;">统计已确认金额:{{sum_payMoney}}</span>
      </div>
<!-- :summary-method="getSummaries"
            show-summary -->
      <el-table  
            highlight-current-row
            ref="data_table"
            @current-change="tableChange"
            v-loading="loading_table"
            size="small"
            :summary-method="getSummaries"
            show-summary
            :data="tableData" 
            :header-cell-style="{'width': '100%', 'text-align': 'center'}" 
            :row-class-name="tableRowClassName">
            <!-- <el-table-column type="index" width="50"> </el-table-column> -->
         <el-table-column prop="name" label="项目名称" width="120" show-overflow-tooltip></el-table-column>
         <el-table-column prop="status" label="当前状态" width="100" align="center" :formatter="status_"></el-table-column>
         <el-table-column prop="reseachType" label="研究类型" width="130"></el-table-column>
         <el-table-column prop="type" label="研究类型分类" show-overflow-tooltip width="130"></el-table-column>
         <el-table-column prop="totalCnt" label="服务项目数" width="100" align="center"></el-table-column>
         <el-table-column prop="finishCnt" label="已完成项目" width="100" align="center"></el-table-column>
         <el-table-column prop="delayCnt" label="延期项目" width="100" align="center"></el-table-column>
         <el-table-column prop="totalBudget" label="合同金额" width="100" align="center"></el-table-column>
         <el-table-column prop="budget" sortable label="已回款金额" width="150" align="center">
            <template v-slot="{row}">
              <div>
                <el-input-number size="mini" v-model="row.budget" @change="moneyChange(row)"></el-input-number>
              </div>
            </template>
         </el-table-column>
         <el-table-column prop="budget" label="开票金额" width="150" align="center"></el-table-column>
         <el-table-column prop="payMoney" label="已确认金额" width="150" align="center"></el-table-column>
         <el-table-column prop="startTime" label="开始时间" width="100" align="center" :formatter="dateFormat_"></el-table-column>
         <el-table-column prop="endTime" label="结束时间" width="100" align="center" :formatter="dateFormat_" ></el-table-column>
         <el-table-column prop="desp" label="项目描述" show-overflow-tooltip></el-table-column>
         <el-table-column fixed="right" label="操作" align="center">
           <template v-slot="{row}">
             <el-row>
               <el-button type="primary" size="mini" @click="showDetail(row)">详情</el-button>
             </el-row>
           </template>
         </el-table-column>
      </el-table>
      <div style="text-align: right; background-color: #fff;">
         <el-pagination 
@@ -77,19 +82,118 @@
         </el-pagination>
      </div>
      
      <el-dialog title="项目详情确认" v-if="dialog_2" @close="Cancel2"  width="70%" top="50px" :visible.sync="dialog_2" append-to-body>
         <substepReadOnly @closeProject="closeDetail"  v-bind:xmId="detailData.id" ref="newProject2_"></substepReadOnly>
      <el-dialog title="付款详情" v-if="dialog_2" @close="Cancel2"  width="70%" top="50px" :visible.sync="dialog_2">
         <el-table
               highlight-current-row
               ref="data_table2"
               size="small"
               :data="tableData2"
               :header-cell-style="{'width': '100%', 'text-align': 'center', 'background-color': 'rgb(247, 248, 249)'}"
               :row-class-name="tableRowClassName">
            <el-table-column prop="name" label="项目名称" show-overflow-tooltip></el-table-column>
            <el-table-column prop="status" label="当前状态" width="100" align="center" :formatter="status_"></el-table-column>
            <el-table-column prop="totalBudget" label="合同金额" align="center"></el-table-column>
            <el-table-column prop="budget" label="开票金额总计" align="center"></el-table-column>
            <el-table-column prop="payMoney" label="已确认金额总计" align="center"></el-table-column>
            <!-- <el-table-column prop="totalBudget" label="毛利率" align="center"></el-table-column> -->
         </el-table>
         <div style="width: 100%; text-align: left; margin: 10px;">
            <el-button type="primary" size="mini" @click="addPhase">新增分期</el-button>
         </div>
               <!-- @header-click="headerClick" -->
         <el-table
               highlight-current-row
               ref="data_table3"
               v-loading="loading_table3"
               size="small"
               :data="tableData3"
               :height="300"
               :header-cell-style="{'width': '100%', 'text-align': 'center', 'background-color': 'rgb(247, 248, 249)'}"
               :row-class-name="tableRowClassName">
            <el-table-column prop="orderNo" label="期次" width="80" align="center"></el-table-column>
            <el-table-column prop="billTime" label="开票日期" width="180" align="center">
               <template v-slot="{row}">
                  <div>
                     <el-date-picker :disabled="row.checked" style="width: 160px;" size="mini" v-model="row.billTime" type="date" placeholder="选择日期" @change="moneyChange(row)">
                     </el-date-picker>
                  </div>
               </template>
            </el-table-column>
            <el-table-column prop="money" label="开票金额" width="160" align="center">
               <template v-slot="{row}">
                  <div>
                     <el-input-number :disabled="row.checked" size="mini" v-model="row.money" @change="moneyChange(row)"></el-input-number>
                  </div>
               </template>
            </el-table-column>
            <el-table-column prop="gatherTime" label="收款日期" width="180" align="center">
               <template v-slot="{row}">
                  <div>
                     <el-date-picker :disabled="row.checked" style="width: 160px;" size="mini" v-model="row.gatherTime" type="date" placeholder="选择日期" @change="moneyChange(row)">
                     </el-date-picker>
                  </div>
               </template>
            </el-table-column>
            <el-table-column prop="checked" label="是否收款" align="center" :formatter="check_"></el-table-column>
            <el-table-column prop="checkUserName" label="确认人" align="center"></el-table-column>
            <el-table-column fixed="right" label="确认收款" width="180" align="center">
              <template v-slot="{row}">
                <el-row>
                  <el-button :disabled="row.checked" type="primary" size="mini" @click="confirmPhase(row)">确认收款</el-button>
                  <el-button :disabled="row.checked" type="danger" size="mini" @click="removePhase(row)">删除</el-button>
                </el-row>
              </template>
            </el-table-column>
         </el-table>
         <!-- <div ref="z_dialog_buttonList" v-show="dialog_tree_node"
           @mouseenter="NodePopover_isShow(true)"
           @mouseleave="NodePopover_isShow(false)"
           style="position: fixed; left:0px; top:0px;  padding: 8px 12px; border: 1px solid rgb(233,233,233); background-color: #fff; z-index: 10;"
           >
           <el-row :gutter="20">
             <el-col :span="24">
               <el-button style="padding: 8px; border: 0px;  width: 100%; text-align: left;" icon="el-icon-delete-solid" @click="removePhase">
                 删 除</el-button>
               </el-col>
           </el-row>
         </div> -->
      </el-dialog>
      <el-dialog title="添加分期" v-if="dialog_1" @close="closeNewPhase"  width="400px" :visible.sync="dialog_1" append-to-body>
         <el-form ref="formPhase" :model="phaseForm" label-width="80px" size="mini">
            <el-form-item label="期次">
               <el-input-number size="mini" v-model="phaseForm.orderNo" style="width: 240px;"></el-input-number>
            </el-form-item>
           <el-form-item label="开票时间">
             <el-date-picker v-model="phaseForm.billTime" type="date" placeholder="选择日期" style="width: 240px;">
             </el-date-picker>
           </el-form-item>
            <el-form-item label="开票金额">
              <el-input-number size="mini" v-model="phaseForm.money" style="width: 240px;"></el-input-number>
            </el-form-item>
            <el-form-item label="收款时间">
              <el-date-picker v-model="phaseForm.gatherTime" type="date" placeholder="选择日期" style="width: 240px;">
              </el-date-picker>
            </el-form-item>
         </el-form>
         <span slot="footer" class="dialog-footer">
           <el-button @click="closeNewPhase">取 消</el-button>
           <el-button :loading="loading_savePhase" type="primary" @click="savePhase">保 存</el-button>
         </span>
      </el-dialog>
      
   </div>
</template>
<script>
   import substepReadOnly from './popup/substepReadOnly.vue';
   export default {
      
      components: {
        substepReadOnly,
      },
      data() {
         return {
@@ -98,6 +202,18 @@
            upload_type: "",
            upload_headers: {},
            upload_data: {},
            options_type:[
               "Health technology assessment (HTA)",
               "Clinical practice guideline (CPG)",
               "Evidence mapping",
               "Overview of review",
               "Scoping review",
               "Rapid review",
               "Systematic review",
               "Rapid review",
               "Randomised controlled trial (RCT)",
               "Other"
            ],
            
            pdfUrl: "",
            currentPage: 1,
@@ -108,6 +224,11 @@
            rowData:undefined,
            detailData:undefined,
            dialog_1: false,
            phaseForm: {},
            loading_savePhase: false,
            dialog_tree_node: false,
            timer: null,
            fieldObj: null,
            dialog_2: false,
            dialog_upload: false,
            dialog_pdf: false,
@@ -117,7 +238,11 @@
            selected: undefined,
            labelPosition: "left",
            tableData: [],
            tableData2: [],
            loading_table3: false,
            tableData3: [],
            sum_budget: 0,
            sum_payMoney: 0,
            userId:"",
            assign:undefined,
            formInline: {
@@ -135,21 +260,54 @@
         this.assign = this.$cookies.get('assign');
      },
      methods: {
         headerClick(column, event) {
            this.$message({message:'点击字段', type: 'warning'});
            clearInterval(this.timer);
            this.enableTimer();
            this.clientHeight = document.documentElement.clientHeight;
            let top_ = event.top;
            let left_ = event.left;
            this.$refs.z_dialog_buttonList.style.top = top_  + "px"; //- el_h/2
            this.$refs.z_dialog_buttonList.style.left = left_ + 32 + "px";
            this.dialog_tree_node= true;
            this.fieldObj = column;
         },
         enableTimer() {
           this.timer = setInterval(()=>{
             this.dialog_tree_node = false;
             clearInterval(this.timer);
           },1000);
         },
         NodePopover_isShow(isShow) {
           if (isShow) {
             clearInterval(this.timer);
             this.dialog_tree_node = true;
           }
           else {
             this.enableTimer();
           }
         },
         Cancel2() {
            this.dialog_2 = false;
            //this.closeDetail();
            this.query_();
         },
         closeDetail() {
            this.dialog_2 = false;
            //this.detailData = undefined;
         },
         showDetail() {
            if(!this.selected || !this.selected.id){
         showDetail(row) {
            if(!row.id){
               this.$message({message:'请选中一个项目', type: 'warning'});
               return;
            }
            this.tableData2 = [];
            this.tableData2.push(row);
            this.getPhase();
            this.dialog_2 = true;
         },
         tableChange(val) {
            if (!val) {
               val = {};
@@ -184,7 +342,7 @@
               pageSize: this.pagesize,
               isRun: true
            };
            if(this.assign) {
            if(this.assign == "true") {
               params.userId = this.userId;
            }
            if(query){
@@ -198,7 +356,7 @@
               .then(data_ => {
                  window.console.log(data_);
                  let clientHeight = document.documentElement.clientHeight;
                  let tableHeight_ = clientHeight - 60 - 20 - 60 - 62 - 48 - 48 - 20;
                  let tableHeight_ = clientHeight - 60 - 20 - 60 - 62 - 48  - 20;
                  this.$refs.data_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['height'] = tableHeight_ - 10 + "px";// - header_height
                  this.$refs.data_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['min-height'] = tableHeight_ - 10 + "px";
                  this.$refs.data_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['overflow'] = "overlay";
@@ -206,6 +364,8 @@
                  this.tableData = data_.data.data.datas.records; //给tableData赋值
                  this.total = data_.data.data.datas.total;
                  this.sum_budget = data_.data.data.budget ? data_.data.data.budget : 0;
                  this.sum_payMoney = data_.data.data.payMoney ? data_.data.data.payMoney : 0;
                  this.loading_table = false;
               }).catch(error => {
            //      console.log(error);
@@ -221,18 +381,6 @@
         },
         onSubmit() {
            query_();
         },
         moneyChange(row) {
            let me = this;
            let url = "/api/scheme/save/" + row.id;
            let params = {
               budget: row.budget,
            }
            this.getUrl(url, params, function(data_) {
               me.query_();
            })
         },
         
         getSummaries(param) {
@@ -277,6 +425,15 @@
               return "已结束";
            }
         },
         check_(row, colum, val ,index){
            if (val) {
               return "是";
            }
            else{
               return "否";
            }
         },
         finishFotmat(row, colum, val ,index) {
            if(val) {
               return "已结束";
@@ -284,32 +441,82 @@
               return "进行中";
            }
         },
         addProject() {
            this.dialog_1 = true;
            this.rowData = {};
         },
         editProject() {
            if(!this.selected || this.selected.status == "finish"){
               this.$message({message:'请选中一条未完成的项目', type: 'warning'});
            }else {
               this.rowData = {
                  id:this.selected.id,
                  desp:this.selected.desp,
                  name: this.selected.name,
                  beginDate: this.selected.beginDate,
                  endDate: this.selected.endDate,
                  objective:this.selected.reseachType,
                  items:[this.$moment(this.selected.startTime).format('YYYY-MM-DD'),this.$moment(this.selected.endTime).format('YYYY-MM-DD')]
         getPhase() {
            let me = this;
            let url = "/api/scheme/bill/getByParent/" + me.tableData2[0].id;
            me.loading_table3 = true;
            me.tableData3 = [];
            this.getUrl(url, null, function(data_) {
               me.loading_table3 = false;
               if (data_.data.data) {
                  me.tableData3 = data_.data.data;
               }
               this.dialog_1 = true;
            }
               else {
                  me.tableData3 = [];
               }
            })
            me.$emit("refreshDrawer");
         },
         closeNewProject() {
         confirmPhase(row) {
            let me = this;
            let url = "/api/scheme/bill/check/" + row.id;
            let params = {
               user: this.userId
            }
            this.getUrl(url, params, function(data_) {
               me.tableData2[0].payMoney = data_.data.data.payMoney;
               row.checked = true;
               me.$emit("refreshDrawer");
            })
         },
         removePhase(row) {
            let me = this;
            let url = "/api/scheme/bill/delById/" + row.id;
            this.getUrl(url, null, function(data_) {
               me.tableData2[0].budget = data_.data.data.budget;
               me.getPhase();
            })
         },
         moneyChange(row) {
            let me = this;
            let url = "/api/scheme/bill/addOrUpdate";
            let params = {...row};
            params.parentId = me.tableData2[0].id;
            this.postUrl(url, params, function(data_) {
               me.tableData2[0].budget = data_.data.data.budget;
            })
         },
         addPhase(row) {
            this.dialog_1 = true;
            this.phaseForm = {
               orderNo: this.tableData3.length + 1
            };
         },
         savePhase() {
            let me = this;
            let url = "/api/scheme/bill/addOrUpdate";
            me.loading_savePhase = true;
            let params = {...this.phaseForm};
            params.parentId = me.tableData2[0].id;
            this.postUrl(url, params, function(data_) {
               me.tableData2[0].budget = data_.data.data.budget;
               me.loading_savePhase = false;
               me.dialog_1 = false;
               me.getPhase();
            })
         },
         closeNewPhase() {
            this.dialog_1 = false;
            query_();
         },
         
         getUrl(url, params, callback){