プログラミング初心者なので見当違いの質問をしていたらすみません。
前提
日付ごとに勤務可能時間を入力できるシフト希望表みたいな機能を作っています。
1週間/2週間/1ヶ月で表示を切り替える事が出来、切り替えに応じてその期間分の日付と希望プルダウンを入力させるようにしたい。
問題点
forで期間分の日付の数分selectを表示させるようにしたところ、同じselectが生成されているからか一つのセレクトボックスを選択するとすべてのセレクトボックスの値が変更されてしまいます。
そのほかにもいろいろな問題がありますが今回はそのselectボックスの差別化を図るにはどうしたらいいのかを聞きたいです。よろしくお願いいたします。
html
1 <select v-model="dateselects" id="dataselect"> 2 <option key="">--選択してください--</option> 3 <option v-for="(date, index) in getdates" :key="index" :value="date">{{ date.text }}</option> 4 </select> 5 <select v-model="periodselect"> 6 <option value="">--選択してください--</option> 7 <option value="week">1週間</option> 8 <option value="twoweek">2週間</option> 9 <option value="month">1ヶ月</option> 10 </select><button @click="siftinput">表示</button> 11 12 <div class="timesheet" v-if="isSiftinput"> 13 <div v-for="(date, index) in getdates" :key="index" :value="date">{{ date.text }}> 14 <div class="selectcolumn"> 15 <div class="selectedDate"></div> 16 <select> 17 <option value="">-▼</option> 18 <option value="maru">〇</option> 19 <option value="sankaku">△</option> 20 <option value="batsu">×</option> 21 </select> 22 <select v-model="startTimeHour"> 23 <option v-for="(h, index) in startTimeHour" :key="index" :value="h">{{ h }}</option> 24 </select>時 25 <select v-model="startTimeMinutes"> 26 <option v-for="(m, index) in startTimeMinutes" :key="index" :value="m">{{ m }}</option> 27 </select>分~ 28 <select v-model="leavingTimeHour"> 29 <option v-for="(hh, index) in leavingTimeHour" :key="index" :value="hh">{{ hh }}</option> 30 </select>時 31 <select v-model="leavingTimeMinutes"> 32 <option v-for="(mm, index) in leavingTimeMinutes" :key="index" :value="mm">{{ mm }}</option> 33 </select>分 34 </div> 35 </div> 36 </div>
js
1export default { 2 data:function(){ 3 return{ 4 isActive:true, 5 isTimeSheet:true, 6 isSiftinput:false, 7 getdates:this.getdate(), 8 hour:["-▼","09",10,11,12,13,14,15,16,17,18,19,20,21,22,23], 9 minutes:["-▼","00",10,20,30,40,50], 10 startTimeHour:["-▼","09",10,11,12,13,14,15,16,17,18,19,20,21,22,23], 11 startTimeMinutes:["-▼","00",10,20,30,40,50], 12 leavingTimeHour:["-▼","09",10,11,12,13,14,15,16,17,18,19,20,21,22,23], 13 leavingTimeMinutes:["-▼","00",10,20,30,40,50] 14 } 15 }, 16 methods: { 17 active: function() { 18 this.isActive = !this.isActive; 19 }, 20 timesheet: function() { 21 this.isTimeSheet = !this.isTimeSheet; 22 }, 23 siftinput: function() { 24 const syear = this.date.year; 25 const smonth = this.date.month-1; 26 const sdate = this.date.date; 27 let prioddate2; 28 if(this.priod==="week"){ 29 console.log("isshuukan"); 30 prioddate2 = this.prioddate(syear,smonth,sdate,7); 31 }else if(this.priod==="twoweek"){ 32 console.log("nishuukan"); 33 prioddate2 = this.prioddate(syear,smonth,sdate,14); 34 }else if(this.priod==="month"){ 35 console.log("ikkagetu"); 36 prioddate2 = this.prioddate(syear,smonth,sdate,30); 37 }else{ 38 console.log("nyuuryokusitekudasai"); 39 } 40 console.log(prioddate2); 41 this.isSiftinput = true; 42 return prioddate2 43 }, 44 getdate: function() { 45 const today = new Date(); 46 const syear = today.getFullYear(); 47 const smonth = today.getMonth(); 48 const sdate = today.getDate() 49 return this.prioddate(syear,smonth,sdate,15); 50 }, 51 prioddate: function(syear,smonth,sdate,priod){ 52 const selectdates=[]; 53 const week = ['日', '月', '火', '水', '木', '金', '土'] 54 //取得する日付の値を設定 55 let date = new Date(syear,smonth,sdate); 56 for(let i = 0; i < priod; i++){ 57 //値から日付を取得 58 date = date.getTime() + i * 86400000; 59 date = new Date(date); 60 //dateから年月日曜を取得 61 let y = date.getFullYear(); 62 let m = date.getMonth()+1; 63 let d = date.getDate(); 64 let w = date.getDay(); 65 //月を2桁に揃える 66 if(m < 10){ m = '0'+m }; 67 //日を2桁に揃える 68 if(d < 10){ d = '0'+d }; 69 //出力形式 70 let textFormat = y+'年'+m+'月'+d+'日'+'('+week[w]+')'; 71 selectdates.push({"text":textFormat,"year":y,"month":m,"date":d,"week":week[w]}); 72 } 73 return selectdates; 74 } 75 }, 76 computed:{ 77 dateselects:{ 78 get(){ 79 let date = this.date //ここからsetterの値を引っ張ってくる 80 return date 81 }, 82 set(date){ 83 this.date = date; 84 } 85 }, 86 periodselect:{ 87 get(){ 88 const selected = this.value; 89 return selected; 90 }, 91 set(priod){ 92 this.priod = priod; 93 } 94 } 95 } 96} 97
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/07 23:01