huaisianhuang il y a 3 ans
Parent
commit
1d5f219fc5

+ 13 - 0
package-lock.json

@@ -4018,6 +4018,11 @@
         "assert-plus": "^1.0.0"
       }
     },
+    "date-format-parse": {
+      "version": "0.2.6",
+      "resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.6.tgz",
+      "integrity": "sha512-sdxnYAWmLopeb+6Hmw+vo3or4OCJOnh4+YoJ9p+Id3o2EnNP0INpTqx7wr8UregfMpgaSZAH473R/ytiaB3gVg=="
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -10601,6 +10606,14 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "vue2-datepicker": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.9.1.tgz",
+      "integrity": "sha512-LuvcgGR+sDYKcih0z+cyvYufGyBwUtIiwzJPwxE63C8gOsAWiE09KuGtZ3OxdQXJEQM2MGQ9t9t1t7382FiFOg==",
+      "requires": {
+        "date-format-parse": "^0.2.6"
+      }
+    },
     "vuex": {
       "version": "3.6.2",
       "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz",

+ 1 - 0
package.json

@@ -21,6 +21,7 @@
     "vue-loading-overlay": "^3.4.2",
     "vue-router": "^3.2.0",
     "vue-simple-calendar": "^5.0.0",
+    "vue2-datepicker": "^3.9.1",
     "vuex": "^3.4.0"
   },
   "devDependencies": {

+ 5 - 0
public/index.html

@@ -7,6 +7,10 @@
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp"
     crossorigin="anonymous">
+    <script
+    type="text/javascript"
+    src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/3.3.0/mdb.min.js"
+  ></script>   
     <title><%= htmlWebpackPlugin.options.title %></title>
   </head>
   <body>
@@ -15,5 +19,6 @@
     </noscript>
     <div id="app"></div>
     <!-- built files will be auto injected -->
+    <script src="https://unpkg.com/js-datepicker"></script>
   </body>
 </html>

+ 1 - 1
src/App.vue

@@ -146,7 +146,7 @@ export default {
     }
   },
   created() {
-    this.examineType();
+    //this.examineType();
     /* this.$http.get('http://www.googo.org:8050/api/auth/user_status', { 
       headers: {
         'Authorization' : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyMCwiZXhwIjoxNjIwNzg5Mzc4LCJzdWIiOjIwfQ.C-S2gPHkZ0RnejcfCFVoYKiwsNuMVH5QZdNqSKvZPZs"

+ 2 - 0
src/assets/scss/all.scss

@@ -4,5 +4,7 @@
 @import './reset.scss';
 @import './utilities.scss';
 @import './mixins.scss';
+@import '~vue2-datepicker/scss/index.scss';
 @import './style.scss';
 
+

+ 49 - 0
src/assets/scss/style.scss

@@ -305,9 +305,11 @@ body {
 }
 
 .btn__searchedWord {
+  padding: .5rem;
   border: 1px solid grey !important;
   border-radius: 10rem !important;
   margin-right: 1rem;
+  cursor: pointer;
   @include x-small {
     font-size: .9rem;
     padding: .2rem .3rem !important;
@@ -762,5 +764,52 @@ input[type="radio"]:checked + label {
     margin-right: .5rem;
     font-size: 1.2rem;
   }
+  &__tag {
+    border: 1px solid #dd6565;
+    color: #dd6565;
+    font-weight: 400;
+  }
+}
+
+.card:hover {
+  transform: none;
 }
 
+.hotWord{
+  &__card {
+    padding: .5rem;
+    &__title {
+      font-size: 1.2rem;
+    }
+    &__muted {
+      font-size: .9rem;
+    }
+    &__num {
+      font-weight: 500;
+      color: $bg-color;
+    }
+  }
+  .card-body {
+    padding: 0;
+  }
+}
+
+.sub__date {
+  background-color: transparent;
+  padding: .25rem .5rem;
+  color: $bg-color;
+  border: 1px solid $bg-color;
+  outline: none;
+  border-radius: 10px;
+  margin-left: .5rem;
+  &:hover {
+    background-color: $bg-color;
+    color: $white;
+  }
+}
+
+.mx-input:hover {
+  border-color: $bg-color;
+}
+
+

+ 2 - 2
src/views/ServiceSelection.vue

@@ -31,14 +31,14 @@ export default {
             this.servicelist = res.data;
           });
         },
-        submit_type() {
+        /* submit_type() {
           // console.log(this.serviceSelected);
           const vm = this;
          this.$http.post('http://www.googo.org:8050/api/users_groups/20',
            { service_type: this.serviceSelected }).then(res => {
             this.$router.push('/');
           });
-        },
+        }, */
     },
     created() {
         this.getServTypeLi();

+ 108 - 27
src/views/Trends.vue

@@ -8,11 +8,11 @@
         <div class="container">
             <h3 class="usernews__table__title mt-3">本日熱門關鍵字排行</h3>
             <div class="row mb-3">
-                <div class="col-6 mb-3" v-for="top in tops" :key="top[0]">
-                    <a href="" class="popular__card">
+                <div class="col-6 mb-3" v-for="(top, i) in tops" :key="top[0]">
+                    <a href="" class="popular__card" @click.prevent="search(top[1])">
                         <div class="card">
                             <div class="card-content d-flex align-items-center">
-                                <span class="d-inline-block">{{ top[3] }}</span>
+                                <span class="d-inline-block">{{ i + 1 }}</span>
                                 <p class="d-inline-block pb-0 mb-0 popular__word">{{ top[1] }}</p>
                                 <i class="fas fa-chart-line"></i>
                             </div>
@@ -21,12 +21,12 @@
                 </div>
             </div>
             <div class="my-3 mb-5">
-                <button class="btn__showmore" @click.prevent="showMore" v-if="topAmount < 20">
-                    顯示更多
-                </button>
-                <button class="btn__showmore" @click.prevent="topAmount = 5;getTops()" v-if="topAmount>=20">
+                <button class="btn__showmore" v-if="topAmount>=20" @click.prevent="topAmount=5; getTops()" >
                     收起
                 </button>
+                <button class="btn__showmore" @click.prevent="showMore" v-else>
+                    顯示更多
+                </button>
             </div>
             <h3 class="usernews__table__title">關鍵字觀測</h3>
             <form id="searchform" class="d-flex search__form mx-auto">
@@ -37,8 +37,8 @@
                 <span class="warnmsg" v-if="warnmsg">{{ warnmsg }}</span>
             </form>
             <div class="mt-1 history__block" v-if="history.length > 0">
-                <p class="mb-1">最近搜尋字詞</p>
-                <span class="btn btn__searchedWord" v-for="(item, i) in searchedWords" :key="i" @click.prevent="search(item)">{{ item }}
+                <p class="mb-2">最近搜尋字詞</p>
+                <span class="btn__searchedWord" v-for="(item, i) in searchedWords" :key="i" @click.prevent="search(item)">{{ item }}
                     <span class="btn__delete" @click.prevent.stop="deleteWord(item)">X</span>
                 </span>
             </div>
@@ -46,12 +46,20 @@
                 <div>
                     <h2 class="text-muted kw__title">關鍵字</h2>
                     <span class="kw__query">{{ query.trim() }}</span>
-                    <i class="fas fa-long-arrow-alt-up kw__icon kw__icon__up"></i>
+                    <!-- <i class="fas fa-long-arrow-alt-up kw__icon kw__icon__up"></i> -->
                     <!-- <i class="fas fa-long-arrow-alt-down kw__icon kw__icon__down"></i> -->
-                    <div class="">
+                    <!-- <div class="">
                         <span>正在熱搜關鍵字:</span>
-                        <b-badge href="#" variant="info" v-for="(rec, i) in recommends" :key="i">{{ rec[2] }}</b-badge>
-                    </div>
+                        <b-badge href="#" variant="info" v-for="(rec, i) in recommends" :key="i">{{ rec[0] }}</b-badge>
+                    </div> -->
+                </div>
+                <div class="date__input mb-3">
+                    <date-picker v-model="daterng"
+                        type="date" range
+                        :placeholder="`${initialdate[0]}~${initialdate[1]}`"
+                        format='YYYY-MM-DD'
+                        value-type="YYYY-MM-DD"></date-picker>
+                    <button class='sub__date' @click.once.prevent="search(query, daterng)">套用</button>
                 </div>
                 <!-- <div class="btn-group group__btn mb-4" role="group" aria-label="date-buttons">
                     <button type="button" class="btn__date">單週</button>
@@ -59,16 +67,66 @@
                     <button type="button" class="btn__date">月</button>
                 </div> -->
             </div>
-            <h3 class="usernews__table__title">相關主題</h3>
-            <div class="row mb-5 reltopic">
-                <div class="col-2" v-for="(topic, i) in reltopics" :key="`rel-${i}`">
-                    <b-card>
-                        <h4 class="reltopic__title mb-0">{{ topic[8] }}</h4>
-                        <!-- <i class="fas fa-long-arrow-alt-up kw__icon kw__icon__up"></i> -->
-                    </b-card>
+            <div class="row">
+                <div class="col-12 col-md-6 text-left hotWord">
+                    <h3 class="usernews__table__title">正在熱搜關鍵字</h3>
+                    <div class="row justify-content-center">
+                        <b-card class="col-5 hotWord__card mr-2">
+                            <div class="d-flex align-items-center justify-content-between">
+                                <div class="">
+                                    <h3 class="mb-0 hotWord__card__title">館長 健身房</h3>
+                                </div>
+                                <div>
+                                    <span class="d-block text-muted hotWord__card__muted">熱度</span>
+                                    <span class="d-block hotWord__card__num">8060</span>
+                                </div>
+                            </div>
+                        </b-card>
+                        <b-card class="col-5 hotWord__card">
+                            <div class="d-flex align-items-center justify-content-between">
+                                <div class="">
+                                    <h3 class="mb-0 hotWord__card__title">館長 健身房</h3>
+                                </div>
+                                <div>
+                                    <span class="d-block text-muted hotWord__card__muted">熱度</span>
+                                    <span class="d-block hotWord__card__num">8060</span>
+                                </div>
+                            </div>
+                        </b-card>
+                    </div>
+                    <!-- <tr v-for="(topic, i) in reltopics" :key="`rew-${i}`">
+                        <td><h4 class="reltopic__title mb-0">{{ topic[4] }}</h4></td>
+                        <td><span class="badge rounded-pill bg-danger">{{ topic[1]}}</span></td>
+                        <td v-if="topic[1]!=='飆升'"><span >{{ topic[1]}}</span></td>
+                        <td v-if="topic[1]=='飆升'"><span>+{{ topic[0]}}%</span></td>
+                    </tr> -->
+                </div>
+                <div class="col-12 col-md-6 text-left">
+                    <h3 class="usernews__table__title">相關主題</h3>
+                    <table class="table">
+                        <tr>
+                            <th>相關詞</th>
+                            <th></th>
+                            <th>成長率</th>
+                            <th>主題</th>
+                        </tr>
+                        <tr v-for="(topic, i) in reltopics" :key="`rew-${i}`">
+                            <td><h4 class="reltopic__title mb-0">{{ topic[4] }}</h4></td>
+                            <template v-if="topic[1]=='飆升'">
+                                <td><span class="badge rounded-pill bg-danger text-light">{{ topic[1]}}</span></td>
+                                <td><span>+{{ topic[0]}}%</span></td>
+                                <td><span class="badge rounded-pill reltopic__tag">{{ topic[5]}}</span></td>
+                            </template>
+                            <template v-if="topic[1]!=='飆升'">
+                                <td></td>
+                                <td><span>+{{ topic[0]}}%</span></td>
+                                <td><span class="badge rounded-pill reltopic__tag">{{ topic[5]}}</span></td>
+                            </template>
+                        </tr>
+                    </table>
                 </div>
             </div>
-            <div class="row mb-5">
+            <div class="row my-5 ">
                 <div class='col-12'>
                     <b-card shadow>
                         <div>
@@ -84,8 +142,11 @@
 </template>
 
 <script>
+import DatePicker from 'vue2-datepicker';
+
 export default {
     name: 'Usernews',
+    components: { DatePicker },
     data() {
         return {
             query: '',
@@ -120,26 +181,30 @@ export default {
             history: [],
             tops: [],
             topAmount: 5,
+            daterng: [],
+            initialdate: []
         }
     },
     methods: {
-        search(words) {
+        search(words, date = this.initialdate) {
             const vm = this;
             vm.warnmsg = '';
             let word = words.trim();
+            vm.query = words.trim();
+            console.log(vm.daterng);
             if(word) {
                // vm.isLoading = true;
                 if(!vm.history.includes(word)){
                     vm.history.unshift(word);
                 }
                 localStorage.setItem('searchedWords', JSON.stringify(vm.history));
-                vm.$http.get(`http://api.ptt.cx:8000/related_queries/${word}?fd=2020-01-01&td=2021-02-30`).then(res => {
+                /* vm.$http.get(`http://api.ptt.cx:8000/related_queries1/${word}?fd=2021-01-01&td=2021-02-30`, {headers: {'Access-Control-Allow-Origin': '*'}}).then(res => {
                     vm.recommends = res.data;
                     console.log(res.data);
                     vm.isLoading = false;
-                });
-                vm.$http.get(`http://api.ptt.cx:8000/related_topics/${word}?fd=2020-01-01&td=2021-02-01`).then(res => {
-                    console.log(res.data);
+                }); */
+                vm.$http.get(`http://api.ptt.cx:8000/related_topics1/${word}?fd=${date[0]}&td=${date[1]}`,  {headers: {'Access-Control-Allow-Origin': '*'}}).then(res => {
+                    console.log(`http://api.ptt.cx:8000/related_topics1/${word}?fd=${date[0]}&td=${date[1]}`);
                     vm.reltopics = res.data;
                     vm.isLoading = false;
                 })
@@ -158,20 +223,34 @@ export default {
         },
         getTops() {
             const vm = this;
+            vm.isLoading = true;
             vm.$http.get(`http://api.ptt.cx:8000/ts_top?tc=${vm.topAmount}`).then(res => {
                 console.log(res.data);
                 vm.tops = res.data;
+                vm.isLoading = false;
             });
         },
         showMore() {
             const vm = this;
+            console.log(vm.topAmount);
             vm.topAmount += 5;
             if(vm.topAmount >20) {
                 return 
             } else {
                 vm.getTops();
             }
-        }
+        },
+        initialDate() {
+            let today = new Date().toISOString().slice(0, 10);
+            let newdate = new Date();
+            let monthbefore = new Date(newdate.getTime() - 30*60*60*24*1000);
+            var dd = monthbefore.getDate().toString();
+            var mm = (monthbefore.getMonth() + 1).toString();
+            var y = monthbefore.getFullYear().toString();
+            var someFormattedDate = y + '-'+ mm + '-'+ dd;
+            this.initialdate = [someFormattedDate, today];
+            // this.daterng = [someFormattedDate, today];
+        },
     },
     computed: {
         searchedWords() {
@@ -187,6 +266,8 @@ export default {
     created() {
         // this.getCharData();
         this.getTops();
+        this.initialDate();
+        console.log(this.topAmount);
         this.history = JSON.parse(localStorage.getItem('searchedWords')) || [];
     }
 }