iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
1
Modern Web

Chrome extension 學習手札系列 第 23

Chrome extension 學習手札 23 - 腳本實作 - 臺鐵時刻表查詢系統 - 整理優化

  • 分享至 

  • xImage
  •  

既然這是要上架的系統,還是要好好的優化一下,

所以今天的進度可能就是基本的程式碼調整、重構或版面上的調整

首先是浮動頁面,我們為了要確保後面的資料都正常運作,所以要驗證表單功能
所以載入了dayjs來驗證與產生日期資料

submitSearch() {
    if(
        dayjs().isAfter(dayjs(this.searchForm.rideDate)) && 
        this.searchForm.rideDate != dayjs().format('YYYY-MM-DD')
    ){
        alert('日期必須大於昨日')
        return 
    }
    switch (this.currentPage) {
        case 'time':
            if(!this.searchForm.startStation || !this.searchForm.endStation){
                alert('站點不得為空')
                return 
            }
            this.dataService.searchByTime(this.searchForm)
            break
        case 'station':
            if(!this.searchForm.singleStation){
                alert('站點不得為空')
                return 
            }
            this.dataService.searchByStation(this.searchForm)
            break
        case 'trainno':
            if(!this.searchForm.trainNo){
                alert('列車編號不得為空')
                return 
            }
            this.dataService.searchByTrainNo(this.searchForm)
            break
    }
},
mounted() {
    this.searchForm.rideDate = dayjs().format('YYYY-MM-DD')
}

接著是為了快速搜尋站點而設置的類別

store/train.json

    {
      "id": "7130",
      "name": "蘇澳新",
      "parent": "屏東縣"
    },
    {
      "id": "7190",
      "name": "宜蘭",
      "parent": "宜蘭縣"
    },
    {
      "id": "7360",
      "name": "瑞芳",
      "parent": "新北市"
    }
  ],
  "category":[
    "基隆市","新北市","臺北市","桃園市",
    "新竹市","新竹縣","苗栗縣","台中市",
    "彰化縣","南投縣","雲林縣","嘉義縣",
    "嘉義市","台南市","高雄市","屏東縣",
    "台東縣","花蓮縣","宜蘭縣","成追線",
    "平溪線","深澳線","六家線","內灣線",
    "沙崙線"
  ]

然後調整一下版面以及資料

popup.html

<div class="row" v-show="currentPage === 'time'">
    <label>出發站</label>
    <div class="col">
        <select class="inline" v-model="startCategory">
                <option value="">縣/市(選填)</option>
                <option v-for="(item,index) in category" :value="item">{{item}}</option>
            </select>
        <select class="inline" v-model="searchForm.startStation">
            <option v-for="(item,index) in startTrainList" :key="'train-'+index">{{item.id + '-' + item.name}}</option>
        </select>
    </div>
</div>
<script>
Vue({
    data(){
        return {
            startCategory: '',
            category: [],
            trainList: [],
        }
    }
    computed:{
        startTrainList(){
            if(this.startCategory){
                return this.trainList.filter(item=>item.parent === this.startCategory)
            }
            return this.trainList
        }
    }
})
</script>

結果畫面


其次是後台腳本,因為我們的台鐵搜尋功能,會造成腳本每次開啟網頁時就搜尋,
所以應該要阻止無限次的功能,而我們用最簡單的方法處理

background/bg.js

//TrainManager
    //清除資料
    clearActionData(){
        this.actionData = null
    }
    
    msgListener(request, sender, sendResponse){
        switch(request.func){
            case 'getSearch': 
                sendResponse(trainManager.actionData)
                trainManager.clearActionData()
                break
        }   
    }

然後內容腳本也要防呆

// chrome.runtime.sendMessage callback
function runTrainByTime(res) {
    if(!res){
        return 
    }
}

大功告成,這樣系統就又更人模人樣了,太棒囉!


上一篇
Chrome extension 學習手札 22 - 腳本實作 - 臺鐵時刻表查詢系統 - part 5
下一篇
Chrome extension 學習手札 24 - 腳本實作 - 臺鐵時刻表查詢系統 - part 6
系列文
Chrome extension 學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Nono
iT邦新手 5 級 ‧ 2019-10-04 11:30:54

恭喜你

剩下最後一週囉!

/images/emoticon/emoticon69.gif

崔斯 iT邦新手 5 級 ‧ 2019-10-04 11:58:09 檢舉

謝謝Nono大大的鼓勵,我會繼續加油的

/images/emoticon/emoticon07.gif

我要留言

立即登入留言