Newer
Older
smartwell_app_front / src / page / wellManage / WellManage.vue
StephanieGitHub on 6 Aug 2019 9 KB first commit
<template>
  <transition name="slide">
    <div>
      <div class="index-container">
        <!--标题-->
        <mt-header class="header" title="闸井管理" fixed>
        </mt-header>
        <!--数据查询框-->
        <div class="search-div">
          <span class="search-select" @click="chooseWellType">
            <span class="select-text">{{wellType}}</span>
            <i slot="icon" class="iconfont icon-31xiala"/>
          </span>
              <span>
            <mt-search
              v-model.trim="listQuery.keywords"
              placeholder="闸井编号/位置"
              @keyup.enter.native="searchKeyWords"
            />
          </span>
              <div class="clear-float"></div>
        </div>
        <!--列表主体-->
        <div class="listbody" ref="wrapper">
          <Loading v-show="isLoading"/>
          <mt-loadmore
            :top-method="loadTop"
            :topPullText="loadConf.loadTopConf.topPullText"
            :topDropText="loadConf.loadTopConf.topDropText"
            :topLoadingText="loadConf.loadTopConf.topLoadingText"
            :bottom-method="loadBottom"
            :bottomAllLoaded="loadConf.loadBottomConf.isFinish"
            :bottomPullText="loadConf.loadBottomConf.bottomPullText"
            :bottomDropText="loadConf.loadBottomConf.bottomDropText"
            :bottomLoadingText="loadConf.loadBottomConf.bottomLoadingText"
            ref="loadmore"
            class="loadmore-content"
          >
            <ul class="list-ul">
              <li class="list-li" v-for="item in list" @click="toWellDetail(item)">
                <div class="well-card">
                  <div class="card-left">
                    <div>
                      <span class="card-wellcode">{{item.wellCode}}</span>
                      <span class="card-welltype">{{item.wellTypeName}}</span>
                      <span class="card-bfzt">{{item.bfztName}}</span>
                    </div>
                    <div class="card-position">
                      <span>{{item.position}}</span>
                    </div>
                  </div>
                  <div class="card-right">
                    <mt-button type="primary" size="small" @click.stop="goToMap(item)">前往</mt-button>
                  </div>
                  <div class="clear-float"></div>
                </div>
              </li>
            </ul>
            <div class="no-content" v-show="loadConf.loadBottomConf.isFinish">已经到底了</div>
          </mt-loadmore>
        </div>
        <!--闸井类型弹出框-->
        <mt-popup
          class="welltype-popup"
          v-model="wellTypeShow"
          popup-transition="popup-fade"
          :modal="showPopupModel"
          position="top">
          <ul>
            <li v-for="wellType in wellTypeList" @click="search(wellType)">
              {{wellType.name}}
            </li>
          </ul>
          <!--<mt-button type="default" v-for="wellType in wellTypeList" @click="search(wellType)">-->
            <!--{{wellType.name}}-->
          <!--</mt-button>-->
        </mt-popup>
        <tabbottom activeTabItem="WELL"/>
      </div>
    </div>
  </transition>
</template>

<script>
  import { getWellList, getWellType } from '@/api/well'
  import { openMapWindow } from '@/utils/common'
  import Loading from '@/components/Loading'
  let isFromDetail = false

  export default {
    name: "WellManage",
    components: {Loading},
    data() {
      return {
        listQuery: {
          keywords: '',
          wellType: '',
          offset: 1,
          limit: 10,
          sort: 'id',
          order: 'asc'
        },
        wellType: '全部',
        wellTypeList: [],
        wellTypeShow: false,//是否显示选择闸井类型的popup
        showPopupModel: false, //是否显示模态框
        list: [],
        total: 50,
        loadConf: {
          loadTopConf: {
            isFinish: false,  // 是否完成下拉
            topPullText: '下拉刷新',
            topDropText: '松开刷新',
            topLoadingText: '刷新中'
          },
          loadBottomConf: {
            isFinish: false,  // 是否完成上拉
            bottomPullText: '',
            bottomDropText: '释放获取内容',
            bottomLoadingText: '加载中',
            count: 1, // 模拟次数
          }
        },
        isLoading:true,
        isFromDetail: false,
        bigImageVisible:false,//是否显示大图
        bigImageSrc:'',//大图图片路径
      }
    },
    mounted() {
      this.fetchWellType()
      this.loadTop()
    },
    beforeRouteEnter(to, from, next) {
      if(from.name) {
        if (from.name.indexOf('wellDetail') == -1) {
          isFromDetail = false
        } else {
          isFromDetail = true
        }
      }else{
        isFromDetail = false
      }
      next()
    },
    activated(){
      if (isFromDetail) { // 来自详情页面
        this.$refs.wrapper.scrollTop = this.$store.getters.pageYOffset;
      } else { // 滚动到最顶,数据初始化
        this.list = []
        this.isLoading = true
        this.loadTop()
        this.$refs.wrapper.scrollTop = 0
      }
      this.wellTypeShow = false
    },
    methods: {
      loadTop() {
        console.log('wellManageloadTop')
        this.$refs.loadmore.onTopLoaded();
        this.loadConf.loadBottomConf.isFinish = false
        this.isLoading = true
        this.listQuery.offset=1
        getWellList(this.listQuery).then(response => {
          this.listQuery.offset += 1
          this.list = response.data.rows
          this.total = parseInt(response.data.total)
          this.isLoading = false
          if (this.list.length >= this.total) {
            this.loadConf.loadBottomConf.isFinish = true
            this.$refs.loadmore.onBottomLoaded();
          }
        })
      },
      loadBottom() {
        console.log('loadBottom')
        this.wellTypeShow = false
        if (this.list.length >= this.total ) {
          this.loadConf.loadBottomConf.isFinish = true
          this.$refs.loadmore.onBottomLoaded();
        } else {
          getWellList(this.listQuery).then(response => {
            this.listQuery.offset+=1
            this.list = this.list.concat(response.data.rows)
            this.total = parseInt(response.data.total)
            this.$refs.loadmore.onBottomLoaded()
            this.isLoading = false
          })
        }
      },
      chooseWellType() {
        this.wellTypeShow = !this.wellTypeShow
      },
      search(wellType) {
        this.wellTypeShow = false
        this.wellTypeShow = false
        this.listQuery.wellType = wellType.value
        this.wellType = wellType.name
        this.loadTop()
      },
      searchKeyWords(){
        this.wellTypeShow = false
        document.activeElement.blur();
        this.loadTop()
      },
      toWellDetail(wellInfo){
        this.wellTypeShow = false
        const id = wellInfo.id
        this.$store.commit('SET_PAGE_OFFSET', this.$refs.wrapper.scrollTop);
        this.$router.push({
          path :`/wellDetail/${id}`
        })
      },
      goToMap(wellInfo){
        this.wellTypeShow = false
        openMapWindow(wellInfo.lngGaode,wellInfo.latGaode,wellInfo.wellName)
      },
      // 获取闸井类型
      fetchWellType() {
        getWellType(this.listQuery).then(response => {
          this.wellTypeList = response.data
          this.wellTypeList.unshift({name:'全部',value:''})
        })
      }

    }
  }
</script>
<style lang="stylus" rel="stylesheet/stylus" scoped>
  .index-container {
    .search-div {
      position: fixed
      z-index: 100
      top: 40px
      .search-select {
        float left
        width: 22vw
        height: 50px
        line-height: 50px
        text-align center
        background-color #d9d9d9
        .select-text {
          margin-left 5px
        }
      }
      .mint-search {
        float left
        width 78vw
        height 50px
        .mint-searchbar {
          padding 3px 5px
        }
      }
      .mint-search .mint-searchbar {
        padding: 3px 5px
      }
      .mint-searchbar-inner {
        height fit-content
      }
    }
    .listbody {
      margin-top 95px
      margin-bottom 50px
      padding 10px 2vw
      overflow: scroll;
      height: calc( 100vh - 135px  );
    }
    .list-li {
      margin-top 1vw;
      border 1px solid #f0f0f0
      background-color #ffffff
      min-height 80px
    }
    .well-card {
      .card-left {
        width 70%
        float left
        padding 10px 15px
        .card-wellcode {
          margin-top 5px
          font-size: 1.2rem
          font-weight 600
        }
        .card-welltype {
          margin-left 10px
          font-size: 0.8rem
        }
        .card-bfzt {
          margin-left 10px
          font-size 0.8rem
          color #13ad00
        }
        .card-position {
          margin-top 10px
          font-size 0.8rem
          line-height 1.1rem
          color #646464
        }
      }
      .card-right {
        height: 100%
        width 20%
        padding-top: 23px
        float: left
        text-align right
        .mint-button{
          /*margin-top: 10px*/
          margin-right:5px
        }
      }
    }
    .welltype-popup {
      top: 90px
      width 90px
      left:50px
      background-color rgba(0, 0, 0, 0.7)
      border-radius 5px
      color: #ffffff
      ul{
        li{
          margin:0px 0px 0px 0px
          padding:15px 0px 15px 15px
        }
      }
      .mint-button {
        margin: 0.8rem 0.5rem
        font-size: 0.9rem
        height: 1.8rem
      }
    }
    .no-content {
      text-align center
      height 40px
      line-height 40px
    }
  }

</style>