Newer
Older
smartwell_app_front / src / page / wellManage / WellBfcf.vue
StephanieGitHub on 6 Aug 2019 11 KB first commit
<template>
  <transition name="slide">
    <div>
      <div class="index-container">
        <!--标题-->
        <mt-header class="header" title="布防撤防" fixed>
          <div slot="left">
            <mt-button icon="back" @click="$router.back(-1)"></mt-button>
          </div>
        </mt-header>
        <!--数据查询框-->
        <div class="search-div">
          <span class="search-select" @click="chooseBfzt">
            <span class="select-text">{{bfzt}}</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" ></Loading>
          <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,index) 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" :style="{color:item.bfzt=='0'?red:green}">{{item.bfztName}}</span>
                    </div>
                    <div class="card-position">
                      <span>{{item.position}}</span>
                    </div>
                  </div>
                  <div class="card-right">
                    <mt-button v-if="item.bfzt=='0'" size="small" class="bfbtn" @click.stop="bf(index,item.id)">布防</mt-button>
                    <mt-button v-if="item.bfzt=='1'" size="small" class="cfbtn" @click.stop="cf(index,item.id)">撤防</mt-button>
                    <mt-button type="default" size="small" @click.stop="goToMap(item)" plain>前往</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="bfztShow"
          popup-transition="popup-fade"
          :modal="showPopupModel"
          position="top">
          <ul>
            <li v-for="bfzt in bfztList" @click="search(bfzt)">
              {{bfzt.name}}
            </li>
          </ul>
        </mt-popup>
      </div>
    </div>
  </transition>
</template>

<script>
  import {MessageBox, Indicator, Toast} from 'mint-ui'
  import { getWellList, dict, bfcf } from '@/api/well'
  import { openMapWindow } from '@/utils/common'
  import Loading from '@/components/Loading'
  let isFromDetail = false
  export default {
    name: "WellBfcf",
    components: {Loading},
    data() {
      return {
        listQuery: {
          keywords: '',
          bfzt: '',
          offset: 1,
          limit: 10,
          sort: 'id',
          order: 'asc'
        },
        bfzt: '全部',
        bfztList: [],
        bfztShow: false,//是否显示选择闸井类型的popup
        showPopupModel: false, //是否显示模态框
        list: [],
        total: 50,
        isLoading: true,
        loadConf: {
          loadTopConf: {
            isFinish: false,  // 是否完成下拉
            topPullText: '下拉刷新',
            topDropText: '松开刷新',
            topLoadingText: '刷新中'
          },
          loadBottomConf: {
            isFinish: false,  // 是否完成上拉
            bottomPullText: '',
            bottomDropText: '释放获取内容',
            bottomLoadingText: '加载中',
            count: 1, // 模拟次数
          }
        },
        red:'#b8b8b8',
        green:'#13ad00'
      }
    },
    beforeRouteEnter(to, from, next) {
      if(from.name) {
        if (from.name.indexOf('wellDetail') == -1) {
          isFromDetail = false
        } else {
          isFromDetail = true
        }
      }else{
        isFromDetail = false
      }
      next()
    },
    mounted() {
      if(this.$route.query && this.$route.query.bfzt){
        this.listQuery.bfzt = this.$route.query.bfzt
        this.bfzt = this.$route.query.bfztName
      }
      this.fetchBfzt()
      this.loadTop()
    },
    activated(){
      console.log('activated')
      if (isFromDetail) { // 来自详情页面
        this.$refs.wrapper.scrollTop = this.$store.getters.pageYOffset;
      } else { // 滚动到最顶,数据初始化
        if(this.$route.query){
          if(this.listQuery.bfzt!=this.$route.query.bfzt){
            this.listQuery.bfzt = this.$route.query.bfzt
            this.bfzt = this.$route.query.bfztName
          }
        }
        this.loadTop()
      }
      this.bfztShow = false
    },
    methods: {
      loadTop() {
        this.bfztShow = false
        console.log('wellBfcfloadTop')
        this.isLoading = true
        this.$refs.loadmore.onTopLoaded()
        this.listQuery.offset=1
        this.loadConf.loadBottomConf.isFinish = false
        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() {
        this.bfztShow = false
        console.log('loadBottom')
        if (this.list.length >= this.total ) {
          this.loadConf.loadBottomConf.isFinish = true
          this.$refs.loadmore.onBottomLoaded();
        } else {
          getWellList(this.listQuery).then(response => {
            this.isLoading = false
            this.listQuery.offset+=1
            this.list = this.list.concat(response.data.rows)
            this.total = parseInt(response.data.total)
            this.$refs.loadmore.onBottomLoaded();
          })
        }

      },
      chooseBfzt() {
        this.bfztShow = !this.bfztShow
      },
      search(bfzt) {
        this.bfztShow = false
        this.listQuery.bfzt = bfzt.value
        this.bfzt = bfzt.name
        this.loadTop()
      },
      searchKeyWords(){
        this.bfztShow = false
        document.activeElement.blur();
        this.loadTop()
      },
      toWellDetail(wellInfo){
        this.bfztShow = false
        const id = wellInfo.id
        this.$store.commit('SET_PAGE_OFFSET', this.$refs.wrapper.scrollTop);
        this.$router.push({
          path :`/wellDetail/${id}`
        })
      },
      goToMap(wellInfo){
        this.bfztShow = false
        openMapWindow(wellInfo.lngGaode,wellInfo.latGaode,wellInfo.wellName)
      },
      bf(index, id){
        this.bfztShow = false
        MessageBox.confirm('确定将该井布防吗?').then(action => {
          if(action=='confirm'){
            bfcf(id,'1').then(response => {
              if(response.code==200){
                Toast({
                  message: '布防成功',
                  position: 'bottom',
                })
                this.list[index].bfzt = '1'
                this.list[index].bfztName='布防'
              }
            })
          }
        });
      },
      cf(index, id){
        this.bfztShow = false
        MessageBox.confirm('确定将该井撤防吗?').then(action => {
          if(action=='confirm'){
            bfcf(id,'0').then(response => {
              if(response.code==200){
                Toast({
                  message: '撤防成功',
                  position: 'bottom',
                })
                this.list[index].bfzt = '0'
                this.list[index].bfztName='撤防'
              }
            })
          }
        });
      },
      // 获取布防状态
      fetchBfzt() {
        dict("bfzt").then(response => {
          this.bfztList = response.data
          this.bfztList.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
      padding-bottom 10px
      padding 10px 2vw
      overflow: scroll;
      height: calc( 100vh - 90px  );
    }
    .list-li {
      margin-top 1vw;
      border 1px solid #f0f0f0
      background-color #ffffff
      min-height 90px
    }
    .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;
        .bfbtn {
          color: #ffffff;
          background-color: #13ad00;
          border 1px solid #13ad00

        }
        .cfbtn {
          color: #ffffff;
          background-color: #ff6f70;
          border 1px solid #ff6f70
        }
        .mint-button{
          margin-top: 10px
          margin-right:5px
        }
        .mint-button--default.is-plain{
          border: 1px solid #d9d9d9;
        }
      }
    }
    .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>