Newer
Older
smartwell_app_front / src / page / jobSearch / searchPage.vue
StephanieGitHub on 19 Feb 2020 16 KB ADD: 工单搜索页面
<template>
  <transition name="slide">
    <div class="index-container">
      <Loading v-show="isLoading"/>
      <!--标题-->
      <mt-header class="header" title="工单查询" fixed>
        <div slot="left">
          <mt-button icon="back" @click="$router.back(-1)"></mt-button>
        </div>
      </mt-header>
      <div class="listbody">
        <div class="well-info-card">
          <!--<div class="well-title">-->
          <mt-field label="井编号" placeholder="请输入井编号" v-model="listQuery.keywords"></mt-field>
          <div class="well-info">
            <div class="search-name">告警内容</div>
            <div class="search-value">
              <span class="search-btn" v-for="item of alarmContentList">
                <div class="select-item" :class="listQuery.alarmContent==item.value?'selected-item':''"
                     @click="selectAlarmContentType(item.value)">{{item.name}}</div>
              </span>
            </div>
          </div>
          <div class="well-info">
            <div class="search-name">告警等级</div>
            <div class="search-value">
              <span class="search-btn" v-for="item of levelList">
                <div class="select-item" :class="listQuery.alarmLevel==item.value?'selected-item':''"
                     @click="selectAlarmLevel(item.value)">{{item.name}}</div>
              </span>
            </div>
          </div>
          <div class="well-info">
            <div class="search-name">工单状态</div>
            <div class="search-value">
              <span class="search-btn" v-for="item of jobStatusList">
                <div class="select-item" :class="listQuery.jobStatus==item.value?'selected-item':''"
                     @click="selectJobStatus(item.value)">{{item.name}}</div>
              </span>
            </div>
          </div>
          <!--<mt-field label="接单开始时间" placeholder="" v-model="listQuery."></mt-field>-->
          <mt-cell title="创建开始时间" :value="listQuery.beginTime"
                   @click.native="openTimeSelectWindow('beginTimePicker')"></mt-cell>
          <mt-cell title="创建结束时间" :value="listQuery.endTime"
                   @click.native="openTimeSelectWindow('endTimePicker')"></mt-cell>
          <!--<mt-cell title="接单时间" :value="listQuery.getJobBeginTime" @click.native="openTimeSelectWindow('getBeginTimePicker')"></mt-cell>-->
          <!--<mt-cell title="" :value="listQuery.getJobEndTime" @click.native="openTimeSelectWindow('getEndTimePicker')"></mt-cell>-->
          <!--<mt-cell title="应接单开始时间" :value="listQuery.shouldGetBeginTime" @click.native="openTimeSelectWindow('shouldGetBeginTimePicker')"></mt-cell>-->
          <!--<mt-cell title="应接单结束时间" :value="listQuery.shouldGetEndTime" @click.native="openTimeSelectWindow('shouldGetEndTimePicker')"></mt-cell>-->
          <!--<mt-cell title="处理开始时间" :value="listQuery.handleJobBeginTime" @click.native="openTimeSelectWindow('handleBeginTimePicker')"></mt-cell>-->
          <!--<mt-cell title="处理结束时间" :value="listQuery.handleJobEndTime" @click.native="openTimeSelectWindow('handleEndTimePicker')"></mt-cell>-->
          <!--<mt-cell title="应处理开始时间" :value="listQuery.shouldHandleBeginTime" @click.native="openTimeSelectWindow('shouldHandleBeginTimePicker')"></mt-cell>-->
          <!--<mt-cell title="应处理结束时间" :value="listQuery.shouldHandleEndTime" @click.native="openTimeSelectWindow('shouldHandleEndTimePicker')"></mt-cell>-->
          <!--<div class="well-info">-->
          <!--<div class="search-name">接单开始时间</div>-->
          <!--<div class="search-value">-->

          <!--</div>-->
          <!--</div>-->
          <div class="row-block">
            <mt-button class="search-btn" type="primary" @click="beginSearch()">查询</mt-button>
            <mt-button class="clear-btn" type="default" @click="cleanSearch()">清空</mt-button>
          </div>

        </div>
      </div>
      <!--<mt-popup-->
      <!--v-model="popupVisible"-->
      <!--position="bottom">-->
      <!--<mt-picker :slots="levelList" @change="onValuesChange"></mt-picker>-->
      <!--</mt-popup>-->
      <!--时间选择器-->
      <div>
        <!--创建开始时间-->
        <mt-datetime-picker
          ref="beginTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.beginTime"
          @confirm="handleConfirm('beginTime')">
        </mt-datetime-picker>
        <!--创建结束时间-->
        <mt-datetime-picker
          ref="endTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.endTime"
          @confirm="handleConfirm('endTime')">
        </mt-datetime-picker>
        <!--接单开始时间-->
        <mt-datetime-picker
          ref="getBeginTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.getJobBeginTime"
          @confirm="handleConfirm('getJobBeginTime')">
        </mt-datetime-picker>
        <!--接单结束时间-->
        <mt-datetime-picker
          ref="getEndTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.getJobEndTime"
          @confirm="handleConfirm('getJobEndTime')">
        </mt-datetime-picker>
        <!--应接单开始时间-->
        <mt-datetime-picker
          ref="shouldGetBeginTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.shouldGetBeginTime"
          @confirm="handleConfirm('shouldGetBeginTime')">
        </mt-datetime-picker>
        <!--应接单结束时间-->
        <mt-datetime-picker
          ref="shouldGetEndTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.shouldGetEndTime"
          @confirm="handleConfirm('shouldGetEndTime')">
        </mt-datetime-picker>
        <!--处理开始时间-->
        <mt-datetime-picker
          ref="handleBeginTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.handleJobBeginTime"
          @confirm="handleConfirm('handleJobBeginTime')">
        </mt-datetime-picker>
        <!--处理结束时间-->
        <mt-datetime-picker
          ref="handleEndTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.handleJobEndTime"
          @confirm="handleConfirm('handleJobEndTime')">
        </mt-datetime-picker>
        <!--处理开始时间-->
        <mt-datetime-picker
          ref="shouldHandleBeginTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.shouldHandleBeginTime"
          @confirm="handleConfirm('shouldHandleBeginTime')">
        </mt-datetime-picker>
        <!--处理结束时间-->
        <mt-datetime-picker
          ref="shouldHandleEndTimePicker"
          type="date"
          year-format="{value} 年"
          month-format="{value} 月"
          date-format="{value} 日"
          v-model="dateForm.shouldHandleEndTime"
          @confirm="handleConfirm('shouldHandleEndTime')">
        </mt-datetime-picker>
      </div>
    </div>
  </transition>
</template>

<script>
  import {getAlarmContentType, getJobStatus} from '@/api/job'
  import {formatDate} from '@/utils/dateutils'
  import Loading from '@/components/Loading'
  let isFromDetail = false // 是否来自SearchList
  export default {
    name: "searchPage",
    components: {
      Loading
    },
    data() {
      return {
        listQuery: {
          keywords: '', // 关键字
          alarmLevel: '', // 告警等级
          alarmType: '1', // 告警类型
          alarmContent: '', // 告警内容
          jobStatus: '', // 工单状态
          beginTime: '点击选择开始时间', // 工单开始时间
          endTime: '点击选择结束时间', // 工单结束时间
          getJobBeginTime: '',// 接单开始时间
          getJobEndTime: '',// 接单结束时间
          shouldGetBeginTime: '',// 应接单开始时间
          shouldGetEndTime: '',// 应接单结束时间
          handleJobBeginTime: '',// 处理开始时间
          handleJobEndTime: '',// 接单结束时间
          shouldHandleBeginTime: '',// 应处理开始时间
          shouldHandleEndTime: '',// 应处理结束时间
          offset: 1,
          limit: 20,
          sort: '',
          order: ''
        }, // 筛选条件表单
        dateForm: {
          beginTime: new Date(),// 接单开始时间
          endTime: new Date(),// 接单结束时间
          etJobBeginTime: new Date(),// 接单开始时间
          getJobEndTime: new Date(),// 接单结束时间
          shouldGetBeginTime: '',// 应接单开始时间
          shouldGetEndTime: '',// 应接单结束时间
          handleJobBeginTime: '',// 处理开始时间
          handleJobEndTime: '',// 接单结束时间
          shouldHandleBeginTime: '',// 应处理开始时间
          shouldHandleEndTime: '',// 应处理结束时间
        },
        levelList: [
          {name: '全部', value: ''},
          {name: '一级', value: 1},
          {name: '二级', value: 2},
          {name: '三级', value: 3}
        ],// 告警等级列表
        isLoading: true, //加载动画
        alarmContentList: [], // 告警内容类型列表
        jobStatusList: [] // 工单状态列表
      }
    },
    beforeRouteEnter(to, from, next) {
      if (from.name) {
        if (from.name.indexOf('searchList') === -1) {
          isFromDetail = false
        } else {
          isFromDetail = true
        }
      } else {
        isFromDetail = false
      }
      next()
    },
    mounted() {
      this.isLoading = true
      this.fetchJobStatus()
      this.fetchAlarmContentType()
    },
    methods: {
      // 获取工单状态列表
      fetchJobStatus() {
        const jobStatusList = [{
          name: '全部',
          value: ''
        }]
        getJobStatus().then(response => {
          this.jobStatusList = [...jobStatusList, ...response.data]
        })
      },
      fetchAlarmContentType() {
        this.alarmContentList = [{
          name: '全部',
          value: ''
        }]
        getAlarmContentType('1').then(response => {
          // const supportDeviceTypes = this.$store.getters.deviceTypes
          for (const item of response.data.list) {
            // if (supportDeviceTypes.indexOf(item.deviceType) !== -1) {
            this.alarmContentList.push(item)
            this.isLoading = false
            // }
          }
        })
      },
      // 打开选择时间弹窗
      openTimeSelectWindow(timePicker) {
        this.$refs[timePicker].open()
      },
      // 时间选择确定后,格式化
      handleConfirm(item) {
        console.log(this.dateForm[item])
        this.listQuery[item] = formatDate(this.dateForm[item])
      },
      selectAlarmContentType(value) {
        this.listQuery.alarmContent = value
      },
      selectAlarmLevel(value) {
        this.listQuery.alarmLevel = value
      },
      selectJobStatus(value) {
        this.listQuery.jobStatus = value
      },
      beginSearch() {
        const listQuery = this.listQuery
        if (listQuery.beginTime === '点击选择开始时间') {
          listQuery.beginTime = ''
        }
        if (listQuery.endTime === '点击选择结束时间') {
          listQuery.endTime = ''
        }
        this.$router.push({name: 'searchList', query: {listQuery}})
      },
      cleanSearch() {
        this.listQuery = {
          keywords: '', // 关键字
          alarmLevel: '', // 告警等级
          alarmType: '', // 告警类型
          alarmContent: '', // 告警内容
          jobStatus: '', // 工单状态
          beginTime: '点击选择开始时间', // 工单开始时间
          endTime: '点击选择结束时间', // 工单结束时间
          getJobBeginTime: '',// 接单开始时间
          getJobEndTime: '',// 接单结束时间
          shouldGetBeginTime: '',// 应接单开始时间
          shouldGetEndTime: '',// 应接单结束时间
          handleJobBeginTime: '',// 处理开始时间
          handleJobEndTime: '',// 接单结束时间
          shouldHandleBeginTime: '',// 应处理开始时间
          shouldHandleEndTime: '',// 应处理结束时间
          offset: 1,
          limit: 20,
          sort: '',
          order: ''
        }
      }
    }
  }
</script>

<style lang="stylus" rel="stylesheet/stylus" scoped>
  .listbody {
    margin-top 40px
    padding 0.4rem 0
    .well-info-card {
      margin 5px 1vw 0px 1vw
      background-color #ffffff
      border 1px solid #f0f0f0
      border-radius 4px
      padding 1rem 1rem
      .well-title {
        padding-left 1rem
        line-height 2rem
        margin-bottom 0.6rem
        .title-left {
          font-size 1.2rem
          font-weight 600
          color: #000
        }
        .title-right {
          font-size 0.8rem
          float right
          margin-right 1rem
          color: #a7a7a7
        }
      }
      .well-info {
        overflow auto
        /*border-bottom 1px solid #f0f0f0*/
        padding 0.5rem 1rem 0rem 0rem
        line-height: 1.5rem
        /*font-size: 1rem*/
        .search-btn {
          margin: 5px
          line-height 40px
          font-size:16px
          float left
        }
        .search-name {
          line-height 30px
          font-size 16px
          font-weight 400
          margin-left 15px
        }
        .search-value {
          margin-left 10px
        }
        .select-item {
          display inline-block
          float: left
          width: auto
          background-color #f6f6f6
          padding 5px 10px
          line-height 20px
          border-radius 3px
          font-size: 15px
        }
        .selected-item {
          background-color #246af7
          color: #ffffff
        }
        .info-name {
          float left
        }
        .info-value {
          float right
          color #4b4b4b
          max-width 70%
          text-align right
        }
        .text-red {
          color: red
        }
        .text-blue {
          color: #1d55c6
        }
      }
    }
    .well-info-button {
      overflow auto
      padding 0.2rem 1rem 0.2rem 1rem
      line-height: 1.2rem
      font-size: 0.9rem
      .info-name {
        float left
      }
      .info-value {
        float right
        color #4b4b4b
        max-width 60%
        text-align right
      }
    }
    .mint-cell .mint-cell-wrapper .mint-cell-title .mint-cell-text{
      font-size: 10px !important
    }
    .mint-cell {
      font-size: 10px !important
      .mint-cell-wrapper .mint-cell-title {
        font-size: 10px !important
        .mint-cell-text {
          font-size: 10px !important
        }
      }
    }
    .well-info:last-child {
      border-bottom none
    }
    textarea {
      width: 80vw
      margin-left 5px
    }
    .img-area {
      padding 0.5rem 0.5rem
    }
    .imgzip {
      height 20vw
      margin 0.2rem
    }
    .firststate {
      padding-top 0.4rem
    }
    .button-div {
      text-align center
      padding 0px 15vw
      .mint-button {
        width 30vw
        margin 10px 2vw
      }
      .mint-button--primary {
        background-color #1d55c6
      }
      .mint-button--default {
        background-color #ffffff
      }
    }
    .mint-popup {
      width: 50vw
    }
    .mint-cell {
      diaplay: inline
    }
    .mint-cell-wrapper {
      float left
      width 30%
    }
    .mint-radiolist-label {
      font-size: 0.8rem
    }
    .grey {
      color: #7c7c7c
      font-size 0.8rem
    }
    .img-show {
      width: 50px
      height: 50px
      margin: 10px
    }
    .imageShowPopup {
      width: 80%
    }
  }

  .row-block {
    margin-top 20px 0
    padding-top 15px
    .mint-button--primary {
      background-color #1d55c6
    }
    .search-btn{
      width:60%
      margin:10px
    }
    .clear-btn{
      width:30%
    }
    button {
      /*display block*/
      /*width 90%*/
      /*margin 10px 5px*/
    }
  }
</style>