Newer
Older
smart-economy / src / components / dataService / dataService.vue
StephanieGitHub on 26 Jan 2021 17 KB MOD: 修改时间为2020
<template>
  <div class="full-box data-service" style="overflow: hidden">
    <div class="" style="width: 100%;height:100%;">
      <div class="top-tip-box t-title">当前位置:数据服务<span v-if="detailTableShow" > -  {{detailTableName}}</span>
        <el-button class="back-btn" type="primary" v-if="detailTableShow" @click="detailTableShow = false">返回</el-button>
      </div>
      <div class="table-info-box">
        <div class="ds-search-box">
          <div class="ds-top-line">
            <div class="tl-left"></div>
            <div class="tl-icon">查询条件</div>
            <div class="tl-right"></div>
          </div>
          <div class="ds-info">
            <div class="sl-row ds-row">
              <div class="sl-row-label">企业名称</div>
              <el-input v-model="filter.companyName" placeholder="请输入内容" style="width:calc(100% - 70px);float: left;"></el-input>
            </div>
            <div class="line-dashed"></div>
            <div class="search-row-check">
              <div class="search-row-check-label">所属区域
                <el-checkbox class="search-condition-checkall" :indeterminate="checkObj.bkCheckObj.isIndeterminate" v-model="checkObj.bkCheckObj.checkAll" @change="(value) => handleCheckAllChange(value,'bkCheckObj')">全选</el-checkbox>
              </div>
              <div class="search-row-check-box">
                <el-checkbox-group v-model="checkObj.bkCheckObj.checkedList" @change="(value) => handleCheckedChange(value,'bkCheckObj')">
                  <el-checkbox v-for="item in checkObj.bkCheckObj.checkList" :label="item.value" :key="item.value">{{item.name}}</el-checkbox>
                </el-checkbox-group>
              </div>
            </div>
            <div class="line-dashed"></div>
            <div class="search-row-check">
              <div class="search-row-check-label">所属行业
                <el-checkbox class="search-condition-checkall" :indeterminate="checkObj.hyCheckObj.isIndeterminate" v-model="checkObj.hyCheckObj.checkAll" @change="(value) => handleCheckAllChange(value,'hyCheckObj')">全选</el-checkbox>
              </div>
              <div class="search-row-check-box">
                <el-checkbox-group v-model="checkObj.hyCheckObj.checkedList" @change="(value) => handleCheckedChange(value,'hyCheckObj')">
                  <el-checkbox v-for="item in checkObj.hyCheckObj.checkList" :label="item.value" :key="item.value">{{item.name}}</el-checkbox>
                </el-checkbox-group>
              </div>
            </div>
            <div class="line-dashed"></div>
            <div class="search-row-check">
              <div class="search-row-check-label">企业标签
                <el-checkbox class="search-condition-checkall" :indeterminate="checkObj.gmCheckObj.isIndeterminate" v-model="checkObj.gmCheckObj.checkAll" @change="(value) => handleCheckAllChange(value,'gmCheckObj')">全选</el-checkbox></div>
              <div class="search-row-check-box">
                <el-checkbox-group v-model="checkObj.gmCheckObj.checkedList" @change="(value) => handleCheckedChange(value,'gmCheckObj')">
                  <el-checkbox v-for="item in checkObj.gmCheckObj.checkList" :label="item.value" :key="item.value">{{item.name}}</el-checkbox>
                </el-checkbox-group>
              </div>
            </div>
            <div class="line-dashed"></div>
            <div class="search-row-check">
              <div class="search-row-check-label">经济指标</div>
              <div class="search-row-check-box">
                <el-radio-group v-model="filter.economicIndicators">
                  <el-radio  v-for="item in jjzbRadioList" :label="item.id" :key="item.id">{{item.name}}</el-radio>
                </el-radio-group>
              </div>
            </div>
            <div class="line-dashed"></div>
            <div class="sl-row ds-row">
              <div class="sl-row-label">开始时间</div>
              <el-date-picker
                type="month"
                :picker-options="beginDate(filter.endDate)"
                v-model="filter.startDate"
                placeholder="开始日期"
                value-format="yyyy-MM"
                style="width:calc(100% - 70px);float: left;">
              </el-date-picker>
            </div>
            <div class="sl-row ds-row">
              <div class="sl-row-label">结束日期</div>
              <el-date-picker
                type="month"
                :picker-options="processDate(filter.startDate)"
                v-model="filter.endDate"
                placeholder="结束日期"
                value-format="yyyy-MM"
                style="width:calc(100% - 70px);float: left;">
              </el-date-picker>
            </div>
            <div class="line-dashed"></div>
            <div class="operate-box">
              <el-button class="search-btn" type="primary" @click="searchresult">查询</el-button>
              <el-button class="search-btn" type="primary" @click="resetFilter">重置</el-button>
            </div>
          </div>
          <div class="ds-bottom-line">
            <div class="bl-left"></div>
            <div class="bl-right"></div>
          </div>
        </div>
        <div class="table-result-boxx"  v-if="!detailTableShow">
          <div class="table-container-style">
            <el-table :data="tableData.list" height="200">
              <el-table-column type="index" align="center" label="序号" width="80"></el-table-column>
              <el-table-column prop="dataTime" align="center" label="数据日期" ></el-table-column>
              <el-table-column prop="companyName" align="center" label="企业名称" show-overflow-tooltip ></el-table-column>
              <el-table-column prop="plate" align="center" label="所属区域"></el-table-column>
              <el-table-column prop="industryName" align="center" label="所属行业"></el-table-column>
              <el-table-column prop="economicIndicators" align="center" label="经济指标值(千元)" ></el-table-column>
              <el-table-column prop="yearUp" align="center" label="同比增幅" ></el-table-column>
              <el-table-column prop="" align="center" label="操作">
                <template slot-scope="scope">
                  <div class="table-edit-btn" @click="detailTable(scope.row)">详情</div>
                </template>
              </el-table-column>
            </el-table>
            <el-pagination @current-change="handlePageChange" background layout="total, prev, pager, next" :total="tableData.total" :current-page="tableData.pageNum" :page-size="tableData.pageSize" :page-count="tableData.pages" style="text-align: right;"></el-pagination>
          </div>
        </div>
        <!-- pop start 企业信息 - 企业的基本信息以及四个经济指标(工业总产值、主营业务收入、利税总额、利润总额  -->
        <transition name="el-zoom-in-bottom">
          <div class="table-result-boxx" style="height: calc(100% - 0px);display: flex;"  v-if="detailTableShow">
            <div class="table-container-style">
              <el-table :data="detailTableData.list" height="200">
                <el-table-column type="index" align="center" label="序号" width="80"></el-table-column>
                <el-table-column prop="dataTime" align="center" label="数据日期"></el-table-column>
                <el-table-column prop="companyCode" align="center" label="组织机构代码"></el-table-column>
                <el-table-column prop="companyName" align="center" label="企业名称" min-width="180"></el-table-column>
                <el-table-column prop="plat" align="center" label="所属板块"></el-table-column>
                <el-table-column prop="industryName" align="center" label="所属行业"></el-table-column>
                <el-table-column prop="czLj" align="center" label="工业总产值" ></el-table-column>
                <el-table-column prop="czbytb" align="center" label="产值增幅%" ></el-table-column>
                <el-table-column prop="srLj" align="center" label="主营业务收入" ></el-table-column>
                <el-table-column prop="sjLj" align="center" label="利税总额" ></el-table-column>
                <el-table-column prop="lrLj " align="center" label="利润总额" ></el-table-column>
              </el-table>
              <el-pagination @current-change="detailhandlePageChange" background layout="total, prev, pager, next" :total="detailTableData.total" :current-page="detailTableData.pageNum" :page-size="detailTableData.pageSize" :page-count="detailTableData.pages" style="text-align: right;"></el-pagination>
            </div>
          </div>
        </transition>
        <!-- pop end-->
      </div>
    </div>
  </div>
</template>

<script>
  const currentDate = new Date('2020/12/31')
  let month = currentDate.getMonth()+1;
  let year = month<10?currentDate.getFullYear()+"-0"+month :currentDate.getFullYear()+"-"+month;
  let threeMouth =  new Date('2020/12/31').setMonth(currentDate.getMonth() - 3);
  export default {
    name: 'dataService',
    data () {
      return {
        timeFilter:[new Date().format("yyyy-")+"01",new Date().format("yyyy-MM")],
        filter:{
          economicIndicators:'cz',
          companyName:'',
          /*startDate: new Date(threeMouth).format("yyyy-MM"),
          endDate:new Date().format("yyyy-MM"),*/
          startDate:new Date(threeMouth).format("yyyy-MM"),
          endDate:currentDate.format("yyyy-MM"),
          plates:'',
          industries:'',
          scales:'',
        },
        jjzbRadioList:[{id:'cz',name:'工业总产值'},{id:'sr',name:'主营业务收入'},{id:'ls',name:'利税总额'},{id:'lr',name:'利润总额'},],
        checkObj:{
          bkCheckObj:{isIndeterminate: false,checkList: [{id:11,name:'渊山岗工业园'}],checkedList: [],checkAll: false},
          hyCheckObj:{isIndeterminate: false,checkList: [{id:21,name:'新兴产业'}],checkedList: [],checkAll: false},
          gmCheckObj:{isIndeterminate: false,checkList: [{id:21,name:'大型企业'}],checkedList: [],checkAll: false}
        },
        tableData:{list:[],pageNum: 1,pageSize: 10,pages: 0,total: 0},
        detailTableShow:false,
        detailTableName:'',
        detailTableData: {list:[],pageNum: 1,pageSize: 10,pages: 0,total: 0},
        detailTableRowData:{},
      }
    },
    mounted (){},
    created(){
      this.GLOBAL.app.getDictList(resp => {
        this.checkObj.bkCheckObj.checkList = resp["板块"];
        this.checkObj.hyCheckObj.checkList = resp["行业列表"];
        this.checkObj.gmCheckObj.checkList = resp["企业规模"];
      })
      this.getList(1);
    },
    watch:{},
    methods:{
      searchresult(){
        this.getList(1);
      },
      resetFilter(){
        let vm = this;
        vm.filter = { economicIndicators:'cz',ompanyName:'',startDate: new Date(threeMouth).format("yyyy-MM"), endDate:new Date().format("yyyy-MM")};
        vm.checkObj.bkCheckObj.isIndeterminate = false;vm.checkObj.bkCheckObj.checkedList = [];vm.checkObj.bkCheckObj.checkAll = false;
        vm.checkObj.hyCheckObj.isIndeterminate = false;vm.checkObj.hyCheckObj.checkedList = [];vm.checkObj.hyCheckObj.checkAll = false;
        vm.checkObj.gmCheckObj.isIndeterminate = false;vm.checkObj.gmCheckObj.checkedList = [];vm.checkObj.gmCheckObj.checkAll = false;
      },
      getList(pager){
        let vm = this;
        let timeStart = !vm.$Util.isEmpty(vm.filter.startDate) ? vm.filter.startDate.split("-")[0] : null,
          timeEnd = !vm.$Util.isEmpty(vm.filter.endDate) ? vm.filter.endDate.split("-")[0] : null;
        if(timeStart == null || timeEnd== null || timeStart > timeEnd || timeStart <timeEnd){
          let dataText = timeStart == null ? '请选择开始时间':timeEnd ==null ? '请选择结算时间':'支持查询同一年数据,请选择起止时间为同一年后查询!';
          vm.$message({
            showClose: true,
            message: dataText,
            type: 'warning'
          });
          return;
        }
        vm.detailTableShow = false;
        vm.filter.plates = vm.checkObj.bkCheckObj.checkedList.join(",");
        vm.filter.industries = vm.checkObj.hyCheckObj.checkedList.join(",");
        vm.filter.scales = vm.checkObj.gmCheckObj.checkedList.join(",");
        vm.tableData.pageNum = vm.$Util.isEmpty(pager) ? vm.tableData.pageNum : pager;
        vm.$http.get('/dx-economy-api/dataService', {params: $.extend({pageNum: vm.tableData.pageNum,pageSize: vm.tableData.pageSize},vm.filter)}).then(function (resp) {
          let _data = resp.data.data;
          let dataList = _data.pages.list;
          dataList.unshift(_data.total);
          vm.tableData.list = dataList;
          vm.tableData.pageNum = _data.pages.pageNum;
          vm.tableData.pageSize = _data.pages.pageSize;
          vm.tableData.pages = _data.pages.pages;
          vm.tableData.total = _data.pages.total;
        })
      },
      handlePageChange: function (page) {
        this.getList(page);
      },
      handleCheckAllChange(value,type){
        let _this = this,obj = _this.checkObj[type],_list = [];
        if(value){
          obj.checkList.forEach(item => {
            _list.push(item.value);
          });
        }
        obj.checkedList = _list;
        obj.isIndeterminate = false;
      },
      handleCheckedChange(value,type) {
        let _this = this,obj = _this.checkObj[type];
        obj.checkAll = value.length === obj.checkList.length;
        obj.isIndeterminate = value.length > 0 && value.length < obj.checkList.length;
      },

      handleAreaCheckAllChange(value){
        let _this = this,obj = _this.bkCheckObj,_list = [];
        if(value){
          obj.checkList.forEach(item => {
            _list.push(item.id);
          });
        }
        obj.checkedList = _list;
        obj.isIndeterminate = false;
      },
      handleCheckedChangebk(value) {
        let _this = this,obj = _this.bkCheckObj;
        obj.checkAll = value.length === obj.checkList.length;
        obj.isIndeterminate = value.length > 0 && value.length < obj.checkList.length;
      },
      searchResult(){},
      reset(){
        this.filter.zbTypeValue=''
        this.timeFilter = [new Date().format("yyyy-")+"01",new Date(year).format("yyyy-MM")];
      },
      /*优化内容 -数据moredetail*/
      detailTable(rowData){
        let vm = this
        vm.detailTableShow = true;
        vm.detailTableName = rowData.companyName;
        vm.detailTableRowData = rowData;
        /*vm.tableHead = JSON.parse(rowData.title);
        vm.detailTableData = JSON.parse(rowData.content);*/
        this.getDetailList();
      },
      detailhandlePageChange(pager){
        this.getDetailList(pager);
      },
      getDetailList(pager){
        let vm = this;
        vm.detailTableData.pageNum = vm.$Util.isEmpty(pager) ? vm.detailTableData.pageNum : pager;
        let params = {
          companyCode : vm.detailTableRowData.companyCode,
          pageNum: vm.detailTableData.pageNum,
          pageSize: vm.detailTableData.pageSize
        }
        vm.$http.get('/dx-economy-api/dataService/detail', {params:params}).then(function (resp) {
          let _data = resp.data.data;
          vm.detailTableData.list = _data.list;
          vm.detailTableData.pageNum = _data.pageNum;
          vm.detailTableData.pageSize = _data.pageSize;
          vm.detailTableData.pages = _data.pages;
          vm.detailTableData.total = _data.total;
        })
      },

    }
  }
</script>
<style></style>
<style scoped>
  .ds-search-box{width:320px;height: 100%;;;float: left;}
  .ds-top-line{width:calc(100% - 2px);height: 37px;border-left:1px solid rgba(7,182,255,.9);border-right:1px solid rgba(7,182,255,.9);}
  .ds-top-line > div{float: left}
  .tl-left{width:40px;height:36px;border-top:1px solid rgba(7,182,255,.9);}
  .tl-icon{width:132px;height: 37px;line-height:34px;font-size: 16px;text-align: center;background: url(../../assets/images/title.png) no-repeat center;}
  .tl-right{width:calc(100% - 172px);height:36px;border-top:1px solid rgba(7,182,255,.9);}
  .ds-bottom-line{width:calc(100% - 1px);height: 20px;border-left:1px solid rgba(7,182,255,.9);}
  .ds-bottom-line > div{float: left;}
  .bl-left{width: calc(100% - 21px);height:19px;border-bottom:1px solid rgba(7,182,255,.9);}
  .bl-right{width:21px;height: 20px;text-align: center;background: url(../../assets/images/roles.png) no-repeat center;}
  .ds-info{width: calc(100% - 32px);padding:10px 15px 0;height:calc(100% - 67px);border-left:1px solid rgba(7,182,255,.9);border-right:1px solid rgba(7,182,255,.9);overflow-y: auto;}
  .line-dashed{width: 100%;height: 1px;margin:10px auto;border-bottom:1px dashed rgba(255,255,255,.8);}
  .data-service .search-item{width: 100%;}
  .search-row-check{width: 100%;height: auto;}
  .search-row-check-label{width: 100%;height:22px;line-height: 22px;color:#07b6ff;margin-bottom:8px;}
  .search-row-check-box{width: 100%;height: auto;}
  .search-row-check-label .search-condition-checkall{margin-left: 20px;}
  .el-checkbox-group .el-checkbox{margin-left: 0px;margin-right:10px;height:26px;line-height:26px;}
  .el-checkbox-group .el-checkbox+.el-checkbox:nth-child(2n + 1){}
  .data-service  .el-radio{margin-left: 0px;margin-right: 10px;height:26px;line-height:26px;}
  .data-service .el-radio__inner::after{background: rgba(255,255,255,0)}
  .sl-row.ds-row .sl-row-label{width:65px;font-weight: normal;color:#07b6ff;}
  .operate-box{width: 180px;margin:0 auto;}
  .table-result-boxx{width: calc(100% - 340px);float: right;height:calc(100%);margin-top: 0px;}
  .back-btn{height:28px;float:right;margin-top:5px;line-height: 28px;padding: 0 20px;border-radius: 0;border: 1px solid #fff;background: rgba(7,182,255,0.1);margin-left:20px;}

</style>