From 1aed40a4e1f62540d9c6011d33d7a8c37d110eaa Mon Sep 17 00:00:00 2001 From: mei23 Date: Wed, 21 Aug 2019 01:25:34 +0900 Subject: [PATCH] =?UTF-8?q?Room=E3=81=A7=E4=BB=96=E3=81=AE=E9=9A=8E?= =?UTF-8?q?=E3=81=8C=E4=BD=9C=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/common/views/pages/room/room.vue | 50 +++++++++++++++++-- src/server/api/endpoints/room/show.ts | 10 +++- src/server/api/endpoints/room/update.ts | 14 ++++-- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/client/app/common/views/pages/room/room.vue b/src/client/app/common/views/pages/room/room.vue index 2456f8f8e8f..46b0723a934 100644 --- a/src/client/app/common/views/pages/room/room.vue +++ b/src/client/app/common/views/pages/room/room.vue @@ -46,6 +46,17 @@ {{ $t('clear') }} + + @@ -56,7 +67,7 @@ import { Room } from '../../../scripts/room/room'; import parseAcct from '../../../../../../misc/acct/parse'; import XPreview from './preview.vue'; const storeItems = require('../../../scripts/room/furnitures.json5'); -import { faBoxOpen, faUndo, faArrowsAlt, faBan, faBroom } from '@fortawesome/free-solid-svg-icons'; +import { faBoxOpen, faUndo, faArrowsAlt, faBan, faBroom, faArrowUp, faArrowDown, faWalking } from '@fortawesome/free-solid-svg-icons'; import { faSave, faTrashAlt } from '@fortawesome/free-regular-svg-icons'; import { query as urlQuery } from '../../../../../../prelude/url'; @@ -87,7 +98,8 @@ export default Vue.extend({ isTranslateMode: false, isRotateMode: false, isMyRoom: false, - faBoxOpen, faSave, faTrashAlt, faUndo, faArrowsAlt, faBan, faBroom, + floor: this.$route.query.floor || 0, + faBoxOpen, faSave, faTrashAlt, faUndo, faArrowsAlt, faBan, faBroom, faArrowUp, faArrowDown, faWalking }; }, @@ -99,7 +111,8 @@ export default Vue.extend({ this.isMyRoom = this.$store.getters.isSignedIn && this.$store.state.i.id === user.id; const roomInfo = await this.$root.api('room/show', { - userId: user.id + userId: user.id, + floor: Number(this.floor), }); this.roomType = roomInfo.roomType; @@ -145,6 +158,23 @@ export default Vue.extend({ room.addFurniture(id); }, + goUp() { + this.goTo(Number(this.floor) + 1); + }, + + goDown() { + this.goTo(Number(this.floor) - 1); + }, + + goTo(f: number) { + const go = () => { + const ac = parseAcct(this.acct); + location.replace(`/@${ac.username}/room?floor=${f}`); + }; + + go(); + }, + remove() { this.isTranslateMode = false; this.isRotateMode = false; @@ -153,7 +183,8 @@ export default Vue.extend({ save() { this.$root.api('room/update', { - room: room.getRoomInfo() + room: room.getRoomInfo(), + floor: Number(this.floor), }); }, @@ -256,5 +287,14 @@ export default Vue.extend({ top 16px right 16px width 256px - + + > .nav + position fixed + z-index 1 + padding 16px + background var(--face) + color var(--text) + top 16px + left 16px + width 160px diff --git a/src/server/api/endpoints/room/show.ts b/src/server/api/endpoints/room/show.ts index ab219dcf223..f881477823d 100644 --- a/src/server/api/endpoints/room/show.ts +++ b/src/server/api/endpoints/room/show.ts @@ -21,13 +21,21 @@ export const meta = { 'en-US': 'Target user ID' } }, + floor: { + validator: $.optional.num.int().min(-999).max(999), + default: 0, + desc: { + 'ja-JP': '階数', + 'en-US': 'Number of floors' + }, + }, }, }; export default define(meta, async (ps, me) => { const room = await Room.findOne({ userId: ps.userId, - floor: 0, + floor: ps.floor, }); return await packRoom(room); diff --git a/src/server/api/endpoints/room/update.ts b/src/server/api/endpoints/room/update.ts index a5c7d931471..21eb9bec10f 100644 --- a/src/server/api/endpoints/room/update.ts +++ b/src/server/api/endpoints/room/update.ts @@ -27,13 +27,21 @@ export const meta = { carpetColor: $.str }) }, + floor: { + validator: $.optional.num.int().min(-999).max(999), + default: 0, + desc: { + 'ja-JP': '階数', + 'en-US': 'Number of floors' + }, + }, }, }; export default define(meta, async (ps, user) => { const exists = await Room.findOne({ userId: user._id, - floor: 0, + floor: ps.floor, }); if (exists) { @@ -43,14 +51,14 @@ export default define(meta, async (ps, user) => { await Room.update({ userId: user._id, - floor: 0, + floor: ps.floor, }, { $set: set }); } else { await Room.insert({ userId: user._id, - floor: 0, + floor: ps.floor, data: ps.room }); }