Skip to content
This repository was archived by the owner on May 7, 2021. It is now read-only.

Commit 8f8e3c6

Browse files
committed
Merge branch 'master' of github.com:ProgrammingLab/prolab-accounts-client into kp/header
2 parents 2302c6f + d9e9a3f commit 8f8e3c6

File tree

7 files changed

+197
-20
lines changed

7 files changed

+197
-20
lines changed

package-lock.json

Lines changed: 8 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"dependencies": {
1111
"ajv": "^5.5.2",
1212
"axios": "^0.18.0",
13-
"rxjs": "^6.4.0",
13+
"moment": "^2.24.0",
14+
"rxjs": "^6.5.1",
1415
"vue": "^2.6.10",
1516
"vue-analytics": "^5.16.4",
1617
"vue-meta": "^1.6.0",

src/components/Achievement.vue

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,33 @@ div.achievement:hover {
4646
div.achievement:hover dd.year {
4747
color: inherit;
4848
}
49+
div.achievement::after{
50+
display: block;
51+
content: "";
52+
height: 30px;
53+
width: 100%;
54+
position: absolute;
55+
bottom: 250px;
56+
background: linear-gradient(rgba(255,255,255,0),rgba(255,255,255,1));
57+
}
58+
div.achievement:hover::after{
59+
opacity: 0;
60+
}
4961
p {
5062
text-overflow: ellipsis;
5163
}
5264
img {
5365
width: 100%;
66+
height: 250px;
67+
object-fit: cover;
68+
position: relative;
69+
z-index: 2;
70+
background: white;
5471
}
5572
dl {
56-
margin: 20px;
73+
margin: 20px 20px 0;
74+
height: 150px;
75+
overflow: hidden;
5776
}
5877
dt {
5978
font-size: 1.4rem;
@@ -80,20 +99,18 @@ dd.year {
8099
font-family: "Barlow";
81100
}
82101
.members {
83-
display: hidden;
84102
position: absolute;
103+
z-index: 3;
85104
background-color: #222;
86105
color: white;
106+
top: 150px;
87107
padding: 20px;
88108
margin-top: 40px;
89109
border-radius: 8px;
90110
opacity: 0;
91111
transition: ease-in-out 0.2s;
92112
}
93113
div.achievement:hover .members {
94-
position: absolute;
95-
padding: 20px;
96-
border-radius: 8px;
97114
opacity: 0.95;
98115
}
99116
.members ul {

src/components/EditAchievement.vue

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
<div>
101101
<input class="save" type="submit" value="保存" :disabled="!isValid || sending">
102102
<button class="cancel" v-on:click.prevent="$emit('close')" :disabled="sending">キャンセル</button>
103-
<button class="erase" v-on:click.prevent="onDelete" :disabled="sending">削除</button>
103+
<button class="erase" v-on:click.prevent="$emit('delete')" :disabled="sending">削除</button>
104104
</div>
105105
<div>
106106
<ErrorMessage :error="achievementError"/>
@@ -111,6 +111,7 @@
111111
<script>
112112
import { mapState, mapActions } from 'vuex';
113113
import { debounceTime } from 'rxjs/operators';
114+
import moment from 'moment';
114115
import ErrorMessage from '@/components/ErrorMessage.vue';
115116
import Multiselect from 'vue-multiselect';
116117
import ImageSelector from '@/components/ImageSelector.vue';
@@ -151,11 +152,11 @@ export default {
151152
if (!this.achievement.happened_at) {
152153
return null;
153154
}
154-
const date = this.achievement.happened_at.substring(0, '2019-01-01'.length);
155-
return date;
155+
return moment(this.achievement.happened_at).local().format('YYYY-MM-DD');
156156
},
157157
set(newValue) {
158-
this.achievement.happened_at = `${newValue}T00:00:00Z`;
158+
const UTCDate = moment(newValue).utc().format('YYYY-MM-DD[T]HH:mm:ss[Z]');
159+
this.achievement.happened_at = UTCDate;
159160
},
160161
},
161162
isImageTooLarge() {
@@ -167,7 +168,7 @@ export default {
167168
},
168169
},
169170
methods: {
170-
...mapActions('achievement', ['saveAchievement', 'deleteAchievement']),
171+
...mapActions('achievement', ['saveAchievement']),
171172
...mapActions('memberIntroduction/searchPrivateMembers', ['searchMembers']),
172173
onSubmit() {
173174
this.saveAchievement({
@@ -176,9 +177,6 @@ export default {
176177
image: this.image,
177178
});
178179
},
179-
onDelete() {
180-
this.deleteAchievement({ sessionID: this.sessionID, achievement: this.achievement });
181-
},
182180
onSearchChanged(query) {
183181
this.searchMembers({ sessionID: this.sessionID, query });
184182
},

src/components/EditableAchievement.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
<template>
22
<div>
33
<button class="edit" v-on:click="editting = true" v-if="!editting">編集</button>
4-
<EditAchievement v-if="editting" :defaultAchievement="defaultAchievement" v-on:close="onClose"/>
4+
<EditAchievement
5+
v-if="editting"
6+
:defaultAchievement="defaultAchievement"
7+
v-on:close="onClose"
8+
@delete="$emit('delete', defaultAchievement)"
9+
/>
510
<Achievement v-else :achievement="defaultAchievement"/>
611
</div>
712
</template>

src/components/Modal.vue

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<template>
2+
<transition name="modal">
3+
<div class="modal-mask" @click="$emit('cancel')" v-if="isOpened">
4+
<div class="modal-wrapper">
5+
<div class="modal-container" @click.stop>
6+
7+
<div class="modal-header">
8+
<h1>
9+
<slot name="header">
10+
! Header is not set !
11+
</slot>
12+
</h1>
13+
</div>
14+
15+
<div class="modal-body">
16+
<p>
17+
<slot name="body">
18+
! Body is not set !
19+
</slot>
20+
</p>
21+
</div>
22+
23+
<div class="modal-footer">
24+
<slot name="footer" :onClick="(val)=>$emit('click', val)">
25+
! Footer is not set !
26+
</slot>
27+
</div>
28+
</div>
29+
</div>
30+
</div>
31+
</transition>
32+
</template>
33+
34+
<script>
35+
export default {
36+
props: {
37+
isOpened: Boolean,
38+
},
39+
};
40+
</script>
41+
42+
<style scoped>
43+
.modal-mask {
44+
position: fixed;
45+
z-index: 9998;
46+
top: 0;
47+
left: 0;
48+
width: 100%;
49+
height: 100%;
50+
background-color: rgba(0, 0, 0, .8);
51+
display: table;
52+
transition: opacity .1s ease;
53+
}
54+
55+
.modal-wrapper {
56+
display: table-cell;
57+
vertical-align: middle;
58+
}
59+
60+
.modal-container {
61+
width: 50%;
62+
min-width: 300px;
63+
margin: 0px auto;
64+
padding: 20px;
65+
background-color: #fff;
66+
border-radius: 2px;
67+
box-shadow: 0 2px 8px rgb(0, 0, 0, .75);
68+
transition: all .1s ease;
69+
}
70+
71+
.modal-header {
72+
margin: 0;
73+
}
74+
75+
.modal-header h1 {
76+
font-size: x-large;
77+
margin: 0;
78+
padding: 0;
79+
}
80+
81+
.modal-body {
82+
margin: 20px 0;
83+
overflow: auto;
84+
max-height: 50vh;
85+
}
86+
87+
.modal-body p {
88+
font-size: medium;
89+
margin: 0;
90+
padding: 0;
91+
}
92+
93+
.modal-footer {
94+
display: flex;
95+
justify-content: flex-end;
96+
}
97+
.modal-footer >>> * {
98+
margin: 5px;
99+
}
100+
.modal-enter {
101+
opacity: 0;
102+
}
103+
104+
.modal-leave-active {
105+
opacity: 0;
106+
}
107+
108+
.modal-enter .modal-container,
109+
.modal-leave-active .modal-container {
110+
-webkit-transform: scale(0.9);
111+
transform: scale(0.9);
112+
}
113+
</style>

src/views/achievement/EditAchievements.vue

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,71 @@
55
<button v-on:click="createNewAchievement">戦歴を新しく追加する</button>
66
<ul>
77
<li v-for="item in achievements" :key="item.achievement_id">
8-
<EditableAchievement :defaultAchievement="item"/>
8+
<EditableAchievement :defaultAchievement="item" @delete="deleteConfirmation"/>
99
</li>
1010
</ul>
1111
</section>
12+
<Modal
13+
:isOpened="confirmationIsOpened"
14+
@cancel="confirmationIsOpened = false"
15+
@click="onModalClick"
16+
>
17+
<template #header>警告</template>
18+
<template #body>
19+
戦歴「{{deleteTerget.title}}」を削除しようとしています。<br/>
20+
よろしいですか。
21+
</template>
22+
<template #footer="{ onClick }">
23+
<button class="danger-button" @click="onClick(true)">削除</button>
24+
<button @click="onClick(false)">キャンセル</button>
25+
</template>
26+
</Modal>
1227
</div>
1328
</template>
1429

1530
<script>
1631
import { mapState, mapActions, mapMutations } from 'vuex';
1732
import EditableAchievement from '@/components/EditableAchievement.vue';
33+
import Modal from '@/components/Modal.vue';
1834
1935
export default {
2036
name: 'editAchievements',
2137
metaInfo: {
2238
title: '実績編集',
2339
},
40+
data() {
41+
return {
42+
deleteTerget: null,
43+
confirmationIsOpened: false,
44+
};
45+
},
2446
components: {
2547
EditableAchievement,
48+
Modal,
2649
},
2750
computed: {
2851
...mapState('achievement', ['achievements']),
2952
...mapState('session', ['sessionID']),
3053
},
3154
methods: {
3255
...mapActions(
33-
'achievement', ['getAchievements'],
56+
'achievement', ['getAchievements', 'deleteAchievement'],
3457
),
3558
...mapMutations(
3659
'achievement', ['createNewAchievement'],
3760
),
61+
deleteConfirmation(achievement) {
62+
this.deleteTerget = achievement;
63+
this.confirmationIsOpened = true;
64+
},
65+
onModalClick(isAgreed) {
66+
this.confirmationIsOpened = false;
67+
if (!isAgreed) return;
68+
this.deleteAchievement({
69+
sessionID: this.sessionID,
70+
achievement: this.deleteTerget,
71+
});
72+
},
3873
},
3974
async created() {
4075
this.getAchievements(this.sessionID);
@@ -63,6 +98,9 @@ button {
6398
margin-bottom: 0.25rem;
6499
margin-right: 0.25rem;
65100
}
101+
button.danger-button {
102+
background: #b50000;
103+
}
66104
li {
67105
list-style: none;
68106
width: 24%;

0 commit comments

Comments
 (0)