From b569c2254c1f870e174581c0825436a99c528097 Mon Sep 17 00:00:00 2001
From: Tomas <tomasysh@gmail.com>
Date: 星期一, 24 一月 2022 11:53:46 +0800
Subject: [PATCH] update: [滿意度通知] route query parameter - 清除方式調整

---
 PAMapp/components/multiSelectBtn.vue |   94 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 76 insertions(+), 18 deletions(-)

diff --git a/PAMapp/components/multiSelectBtn.vue b/PAMapp/components/multiSelectBtn.vue
index af57166..0abc66e 100644
--- a/PAMapp/components/multiSelectBtn.vue
+++ b/PAMapp/components/multiSelectBtn.vue
@@ -4,52 +4,110 @@
       <el-checkbox
         v-for="(option, index) in options"
         :key="index"
-        :label="option"
-        :name="option"
-      ></el-checkbox>
+        :label="option.label">
+          {{ option.title }}
+        </el-checkbox>
       <template v-if="nameOfSelectAll">
-        <button class="pam-selectAll-btn cursor--pointer" :class="{'selected':isSelectAll}" :model="isSelectAll" @click="selectAll">
+        <button class="pam-selectAll-btn cursor--pointer fix-chrome-click--issue" :class="{'selected':isSelectAll}" :model="isSelectAll" @click="selectAll">
          <span>{{nameOfSelectAll}}</span>
        </button>
+      </template>
+      <template v-if="nameOfOtherOption">
+        <button class="pam-selectAll-btn cursor--pointer fix-chrome-click--issue" :class="{'selected':isSelectOtherOption}" :model="isSelectOtherOption" @click="selectOther">
+         {{ nameOfOtherOption }}
+        </button>
+        <div>
+          <input class="pam-muti-select-other cursor--pointer " v-if="isSelectOtherOption" v-model="syncOtherSelect" placeholder="隢撓�,���20摮�">
+        </div>
       </template>
     </el-checkbox-group>
   </div>
 </template>
 
 <script lang="ts">
-  import { Vue, Component, Prop, PropSync} from 'vue-property-decorator';
+  import { Vue, Component, Prop, PropSync, Watch} from 'vue-property-decorator';
+import { OptionBtnDto } from '~/shared/models/optionBtnDto.model';
 
   @Component
   export default class MultiSelectBtn extends Vue {
-    @PropSync('mutiSelect',{type:Array,default:()=>[]}) syncMutiSelect!:string[];
-    @Prop({default:''}) nameOfSelectAll!:string;
-    @Prop({default:()=>[]}) options!:string[]|[];
+
+    @PropSync('mutiSelect',{type:Array,default:()=>[]})
+    syncMutiSelect!:string[];
+
+    @Prop({default:()=>[]})
+    options!:OptionBtnDto[];
+
+    @Prop({default:''})
+    nameOfSelectAll!:string;
+
+    @PropSync('otherSelect',{default:''})
+    syncOtherSelect!:string;
+
+    @Prop({type:String,default:''})
+    nameOfOtherOption!:string;
+
+    @Prop()
+    maxLength? : number;
+
+    @Watch('syncMutiSelect')
+    onMutiSelectChange(): void {
+      if (!this.maxLength) return;
+      if (this.syncMutiSelect.length > this.maxLength) {
+        this.syncMutiSelect.shift();
+      }
+    }
+
+    isSelectOtherOption=false;
     isSelectAll=false;
+
+    //////////////////////////////////////////////////////////////////////
 
     updated() {
       this.isSelectAll = this.syncMutiSelect.length === this.options.length;
     }
 
-    selectAll():void{
+    //////////////////////////////////////////////////////////////////////
+
+    selectAll():void {
       this.isSelectAll= !this.isSelectAll;
-      this.syncMutiSelect = this.isSelectAll ? this.options:[];
+      this.syncMutiSelect = this.isSelectAll ? this.optionsFormat(this.options):[];
     }
 
+    optionsFormat(options:OptionBtnDto[]): string[] {
+      return options.map((option)=> option.title );
+    }
+
+    selectOther(): void {
+      this.isSelectOtherOption = !this.isSelectOtherOption;
+      if(!this.isSelectOtherOption){
+        this.syncOtherSelect = '';
+      }
+    }
   }
 </script>
 
 <style lang="scss" scoped>
   .pam-selectAll-btn{
-    padding: 6px 20px;
-    border: 1px $LIGHT_GREY solid;
+    padding         : 6px 20px;
+    border          : 1px $LIGHT_GREY solid;
     background-color: $PRIMARY_WHITE;
-    border-radius: 30px;
-    font-size: 20px;
-    margin-right: 10px;
-    margin-bottom: 10px;
+    border-radius   : 30px;
+    color           : $PRIMARY_BLACK;
+    font-size       : 20px;
+    margin-right    : 10px;
+    margin-bottom   : 10px;
     &.selected{
-      background-color:$CORAL;
-      color: $PRIMARY_WHITE;
+      background-color: $CORAL;
+      color           : $PRIMARY_WHITE;
     }
   }
+  .pam-muti-select-other {
+    height            : 50px;
+    padding           : 5px;
+    -webkit-box-sizing: border-box;         /* Safari/Chrome, other WebKit */
+    -moz-box-sizing   : border-box;         /* Firefox, other Gecko */
+    box-sizing        : border-box;
+    width             : 316px;
+    border            : 1px solid #CCCCCC;
+  }
 </style>

--
Gitblit v1.8.0