From 943b8dfc3fd82d76d46cde1834972270d4aa868a Mon Sep 17 00:00:00 2001 From: Tomas <tomasysh@gmail.com> Date: 星期三, 12 一月 2022 16:06:40 +0800 Subject: [PATCH] update: 串接預約單流程(新增採訪紀錄, 結案頁面, 預約單列表細節) --- 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