From c1ce6d2ec2b4b7a5f71501f07d118564fa662335 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Sun, 13 Nov 2022 23:31:10 +0900 Subject: [PATCH 01/32] =?UTF-8?q?feat.=20=EC=83=88=EB=A1=9C=20=EA=B3=A0?= =?UTF-8?q?=EC=B9=A8=20=EB=B2=84=ED=8A=BC=20=EA=B0=9C=EB=B0=9C[#46]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 새로 고침 버튼을 개발하여 클릭 시 다시 해당 정류장의 버스를 받는 기능을 개발하였다. Resolves #46 --- .../creative/public/image/refresh.png | Bin 0 -> 67266 bytes .../bus-component/busform/BusForm.js | 4 +- .../bus-component/buslist/BusItem.js | 3 +- .../bus-component/buslist/BusList.js | 5 +- .../bus-component/buslist/RefreshButton.js | 62 +++++++++++++++ .../bus-component/buslist/StationItem.js | 5 +- .../component/bus-component/buslist/test.json | 62 +++++++++++++++ .../component/bus-component/map/Mapping.js | 3 +- .../Frontend/creative/src/store/Bus-slice.js | 4 + Backend/backend.js | 6 +- Backend/routes/busdata.js | 71 +++++++++--------- 11 files changed, 178 insertions(+), 47 deletions(-) create mode 100644 Backend/Frontend/creative/public/image/refresh.png create mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/test.json diff --git a/Backend/Frontend/creative/public/image/refresh.png b/Backend/Frontend/creative/public/image/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..675f4672106bc1b531ffcdcf5a5e4cb4e7ffaf0a GIT binary patch literal 67266 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 Vw`D=H<3peU44$rjF6*2UngAT!{$T(B literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index 0e4957e..f14d98f 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -3,7 +3,7 @@ import BusInput from "./BusInput"; import styled from "styled-components"; import axios from "axios" import { BusActions } from "../../../store/Bus-slice"; -import { useDispatch, useSelector } from "react-redux"; +import { useDispatch } from "react-redux"; const StyledForm = styled.form` @@ -18,7 +18,7 @@ const BusForm = () => { const dispatch = useDispatch(); const SubmitBusStation = (value) => { - axios.get(`/station/${value}`, { + axios.get(`/bus/stNm/${value}`, { }).then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index 9407811..b8e11df 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -1,5 +1,4 @@ import styled from "styled-components"; -import BusTimer from "./BusTimer"; const StyledBusItem = styled.li` display:flex; @@ -37,7 +36,7 @@ div{ ` const BusItem = (props) => { - const { busrouteId, busrouteAbrv, busType, adirection, arrmsg1 } = props.items; + const { busrouteAbrv, adirection, arrmsg1 } = props.items; return (
diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js index e6b8048..4394fd4 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js @@ -2,6 +2,7 @@ import styled from "styled-components"; import BusItem from "./BusItem"; import StationItem from "./StationItem" import { useSelector } from "react-redux"; +import RefreshButton from "./RefreshButton"; const StyledList = styled.ul` display:flex; @@ -21,21 +22,23 @@ const BusList = () => { const stationCheck = useSelector(state => state.bus.stationCheck) const busInfo = useSelector(state => state.bus.buslist) const busCheck = useSelector(state => state.bus.busCheck) - console.log(busCheck, busInfo) return ( {stationCheck && stationInfo.map(element => ( ))} {busCheck && busInfo.map(element => ( ))} + {busCheck && } ) } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js new file mode 100644 index 0000000..939d939 --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -0,0 +1,62 @@ +import styled from "styled-components"; +import axios from "axios"; +import { useSelector, useDispatch } from "react-redux"; +import { BusActions } from "../../../store/Bus-slice"; + +const StyledRefreshButton = styled.button` +width:65px; +height:100%; +border: 0; +border-radius:50px; +position:sticky; +bottom:20px; +img{ + width:100%; +} +:hover{ + width:65px; + height:65px; + background-color:#dcdcdc; +} +img:hover{ + -webkit-animation:spin 0.4s linear; + -moz-animation:spin 0.4 linear; + animation:spin 0.4s linear; +} +:visited{ + width:65px; + height:65px; + background-color:#dcdcdc; +} +@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } +@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } +@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } +` + + +const RefreshButton = () => { + const dispatch = useDispatch() + const busId = useSelector(state => state.bus.busId) + const clickCheck = { + check: false + }; + const Refresh = () => { + clickCheck.check = true; + axios.get(`/bus/arsId/${busId}`, { + + }).then(res => { + const { data } = res; + dispatch(BusActions.addBusInfo(data)) + }).catch(error => { + alert(error) + }) + } + console.log(Node.classList) + return ( + + 새로고침 + + ) +} + +export default RefreshButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 01ba584..3d2f76a 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -30,14 +30,15 @@ color: #9C9C9C; ` const StationItem = (props) => { - const { stId, stNm, tmX, tmY, arsId } = props.items + const { stNm, arsId } = props.items const dispatch = useDispatch(); const SubmitStation = () => { dispatch(BusActions.changeStation(props.items)) - axios.get(`/stationInfo/${arsId}`, { + axios.get(`/bus/arsId/${arsId}`, { }).then(res => { const { data } = res; + dispatch(BusActions.refreshBus(arsId)) dispatch(BusActions.addBusInfo(data)) }).catch(error => { alert(error) diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/test.json b/Backend/Frontend/creative/src/component/bus-component/buslist/test.json new file mode 100644 index 0000000..a7cebeb --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/test.json @@ -0,0 +1,62 @@ +[ + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "1" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "2" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "3" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "4" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "5" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "6" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "7" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "8" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "9" + }, + { + "busrouteAbrv": "Name", + "adirection": "direction", + "arrmsg1": "asdsad", + "busrouteId": "10" + } +] \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/map/Mapping.js b/Backend/Frontend/creative/src/component/bus-component/map/Mapping.js index 096acfc..aa2cee5 100644 --- a/Backend/Frontend/creative/src/component/bus-component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/bus-component/map/Mapping.js @@ -59,10 +59,11 @@ const Mapping = () => { } const submitStationId = (id) => { - axios.get(`/stationInfo/${id}`, { + axios.get(`/bus/arsId/${id}`, { }).then(res => { const { data } = res; + dispatch(BusActions.refreshBus(id)) dispatch(BusActions.addBusInfo(data)) }).catch(error => { alert(error) diff --git a/Backend/Frontend/creative/src/store/Bus-slice.js b/Backend/Frontend/creative/src/store/Bus-slice.js index 00e4473..c18bc10 100644 --- a/Backend/Frontend/creative/src/store/Bus-slice.js +++ b/Backend/Frontend/creative/src/store/Bus-slice.js @@ -6,6 +6,7 @@ const BusSlice = createSlice({ initialState: { buslist: [], station: [], + busId: "", stationLocation: {}, stationCheck: false, busCheck: false @@ -20,6 +21,9 @@ const BusSlice = createSlice({ changeStation(state, action) { state.stationLocation = action.payload }, + refreshBus(state, action) { + state.busId = action.payload + }, addBusInfo(state, action) { state.buslist = action.payload state.stationCheck = false diff --git a/Backend/backend.js b/Backend/backend.js index c4f2cc1..f3fb85a 100644 --- a/Backend/backend.js +++ b/Backend/backend.js @@ -8,17 +8,17 @@ const testRouter = require('./routes/test'); const busRouter = require('./routes/busdata'); const subwayRouter = require('./routes/subwaydata'); -//app.use(express.static(path.join(__dirname, './Frontend/creative/build'))) +app.use(express.static(path.join(__dirname, './Frontend/creative/build'))) app.use('', testRouter); app.use('/bus', busRouter); app.use('/subway', subwayRouter); -/* + app.get('/', function (req, res) { res.sendFile(path.join(__dirname, './Frontend/creative/build/index.html')); }) -*/ + app.get('/', (req, res) => { res.json({ diff --git a/Backend/routes/busdata.js b/Backend/routes/busdata.js index fa6f113..0f721dd 100644 --- a/Backend/routes/busdata.js +++ b/Backend/routes/busdata.js @@ -3,7 +3,6 @@ const request = require('request'); const convert = require('xml-js'); const serviceKey = require('../Key/serviceKey.json'); //const gpsdata = require('../routes/GPS.json'); - //request 사용 //GET 형식이므로 method 사용 X function getTraffic(callback) { @@ -17,7 +16,7 @@ function getTraffic(callback) { } function getStation(stNm, callback) { - try{ + try { const url = 'http://ws.bus.go.kr/api/rest/stationinfo/getLowStationByName'; let queryParams = '?' + encodeURIComponent('serviceKey') + '=' + serviceKey.serviceKey; queryParams += '&' + encodeURIComponent('stSrch') + '=' + encodeURIComponent(stNm); @@ -32,16 +31,16 @@ function getStation(stNm, callback) { const parseJson = convert.xml2json(body); const stationinfo = JSON.parse(parseJson).elements[0].elements[2]; - if(stationinfo.elements == null){ + if (stationinfo.elements == null) { callback(0); } - else{ + else { const stationlength = stationinfo.elements.length; //console.log(stationinfo.elements[0]); let stationRes = []; - for(let i=0;i { */ router.get('/stNm/:stNm', async (req, res) => { - + console.log('stationName'); - - try{ + + try { const stNm = req.params.stNm; //console.log("station"); await getStation(stNm, station => { //console.log(station); - if(station==0){ + if (station == 0) { return res.status(404).json({ error: 'No stops with that name' }) @@ -180,14 +179,14 @@ router.get('/stNm/:stNm', async (req, res) => { return res.json(station); }) } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ error: e, errorString: e.toString(), }); } - + }) @@ -209,26 +208,26 @@ router.get('/arsId/:arsId', async (req, res) => { const arsId = req.params.arsId; //console.log("station"); - try{ + try { await getStationInfo(arsId, stationinfo => { //console.log(station); - if(stationinfo == 0){ + if (stationinfo == 0) { return res.status(404).json({ error: 'No Bus In Station' }) } - else + else return res.json(stationinfo); }); } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ error: e, errorString: e.toString(), }); }; - + }) /* From 9ee1d5e861e46d6b5f20c05cc1af7ef3a66facc7 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Mon, 14 Nov 2022 01:05:13 +0900 Subject: [PATCH 02/32] =?UTF-8?q?feat.=20map=20component=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 지하철 기능을 위해 map component 리팩토링 하였습니다. --- .../bus-component/busform/BusForm.js | 2 + .../bus-component/buslist/StationItem.js | 5 +- .../{bus-component => }/map/Mapping.js | 31 ++----- .../map/Mapping.module.css | 0 Backend/Frontend/creative/src/page/BusPage.js | 2 +- .../Frontend/creative/src/store/Bus-slice.js | 5 -- .../Frontend/creative/src/store/Map-slice.js | 20 +++++ Backend/Frontend/creative/src/store/index.js | 3 +- Backend/routes/subwaytest.json | 90 +++++++++---------- 9 files changed, 80 insertions(+), 78 deletions(-) rename Backend/Frontend/creative/src/component/{bus-component => }/map/Mapping.js (72%) rename Backend/Frontend/creative/src/component/{bus-component => }/map/Mapping.module.css (100%) create mode 100644 Backend/Frontend/creative/src/store/Map-slice.js diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index f14d98f..c3ff53e 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -3,6 +3,7 @@ import BusInput from "./BusInput"; import styled from "styled-components"; import axios from "axios" import { BusActions } from "../../../store/Bus-slice"; +import { MapActions } from "../../../store/Map-slice"; import { useDispatch } from "react-redux"; @@ -23,6 +24,7 @@ const BusForm = () => { }).then(res => { const { data } = res; dispatch(BusActions.addStationInfo(data)) + dispatch(MapActions.positioning(data[0])) }).catch(error => { alert("데이터를 받아오지 못했습니다.") }); diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 3d2f76a..b85f770 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -2,6 +2,7 @@ import styled from "styled-components"; import axios from "axios" import { useDispatch } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; +import { MapActions } from "../../../store/Map-slice"; const StyledStationItem = styled.li` display:flex; @@ -30,16 +31,16 @@ color: #9C9C9C; ` const StationItem = (props) => { - const { stNm, arsId } = props.items + const { stNm, arsId, tmX, tmY } = props.items const dispatch = useDispatch(); const SubmitStation = () => { - dispatch(BusActions.changeStation(props.items)) axios.get(`/bus/arsId/${arsId}`, { }).then(res => { const { data } = res; dispatch(BusActions.refreshBus(arsId)) dispatch(BusActions.addBusInfo(data)) + dispatch(MapActions.positioning({ tmX, tmY })) }).catch(error => { alert(error) }) diff --git a/Backend/Frontend/creative/src/component/bus-component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js similarity index 72% rename from Backend/Frontend/creative/src/component/bus-component/map/Mapping.js rename to Backend/Frontend/creative/src/component/map/Mapping.js index aa2cee5..1fa5295 100644 --- a/Backend/Frontend/creative/src/component/bus-component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -1,43 +1,25 @@ import { useEffect } from "react"; import { useSelector, useDispatch } from 'react-redux'; import classes from "./Mapping.module.css" -import usePosition from "../../../hook/usePosition"; -import { geolocationOptions } from "../../../contents/geolocationOptions"; import axios from "axios"; -import { BusActions } from "../../../store/Bus-slice"; - +import { BusActions } from "../../store/Bus-slice"; +import { MapActions } from "../../store/Map-slice"; const Mapping = () => { const dispatch = useDispatch() const stationInfo = useSelector(state => state.bus.station) - const stationLocation = useSelector(state => state.bus.stationLocation) - const { position, error } = usePosition(geolocationOptions) - + const position = useSelector(state => state.map.position) useEffect(() => { - if (Object.keys(stationLocation).length !== 0) { - createMap(stationLocation) - } - else if (stationInfo[0]) { - createMap(stationInfo[0]) - } - else if (position) { - createMap(position) - } - }) - - const createMap = (location) => { - const lon = location.tmX; - const lat = location.tmY; const container = document.getElementById("map"); + console.log(position.tmX, position.tmY) const options = { - center: new window.kakao.maps.LatLng(lat, lon), + center: new window.kakao.maps.LatLng(position.tmY, position.tmX), level: 3, }; const map = new window.kakao.maps.Map(container, options); if (Array.isArray(stationInfo)) mapcoordinate(stationInfo, map) - - } + }) const mapcoordinate = (stationInfo, map) => { stationInfo.forEach(element => { @@ -65,6 +47,7 @@ const Mapping = () => { const { data } = res; dispatch(BusActions.refreshBus(id)) dispatch(BusActions.addBusInfo(data)) + dispatch(MapActions.positioning(data)) }).catch(error => { alert(error) }) diff --git a/Backend/Frontend/creative/src/component/bus-component/map/Mapping.module.css b/Backend/Frontend/creative/src/component/map/Mapping.module.css similarity index 100% rename from Backend/Frontend/creative/src/component/bus-component/map/Mapping.module.css rename to Backend/Frontend/creative/src/component/map/Mapping.module.css diff --git a/Backend/Frontend/creative/src/page/BusPage.js b/Backend/Frontend/creative/src/page/BusPage.js index 3f595f9..473ca41 100644 --- a/Backend/Frontend/creative/src/page/BusPage.js +++ b/Backend/Frontend/creative/src/page/BusPage.js @@ -1,4 +1,4 @@ -import Mapping from "../component/bus-component//map/Mapping.js" +import Mapping from "../component/map/Mapping.js" import BusForm from "../component/bus-component/busform/BusForm.js" import BusList from "../component/bus-component/buslist/BusList.js" import classes from "./BusPage.module.css" diff --git a/Backend/Frontend/creative/src/store/Bus-slice.js b/Backend/Frontend/creative/src/store/Bus-slice.js index c18bc10..a6a686f 100644 --- a/Backend/Frontend/creative/src/store/Bus-slice.js +++ b/Backend/Frontend/creative/src/store/Bus-slice.js @@ -7,20 +7,15 @@ const BusSlice = createSlice({ buslist: [], station: [], busId: "", - stationLocation: {}, stationCheck: false, busCheck: false }, reducers: { addStationInfo(state, action) { state.station = action.payload - state.stationLocation = {} state.stationCheck = true state.busCheck = false }, - changeStation(state, action) { - state.stationLocation = action.payload - }, refreshBus(state, action) { state.busId = action.payload }, diff --git a/Backend/Frontend/creative/src/store/Map-slice.js b/Backend/Frontend/creative/src/store/Map-slice.js new file mode 100644 index 0000000..442bba4 --- /dev/null +++ b/Backend/Frontend/creative/src/store/Map-slice.js @@ -0,0 +1,20 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const MapSlice = createSlice({ + name: "Map", + initialState: { + position: { + tmY: 37.55068403524657, + tmX: 127.07411251036736 + } + }, + reducers: { + positioning(state, action) { + state.position.tmX = action.payload.tmX; + state.position.tmY = action.payload.tmY; + } + } +}) + +export const MapActions = MapSlice.actions; +export default MapSlice.reducer; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/index.js b/Backend/Frontend/creative/src/store/index.js index 836b03f..0915340 100644 --- a/Backend/Frontend/creative/src/store/index.js +++ b/Backend/Frontend/creative/src/store/index.js @@ -1,9 +1,10 @@ import { configureStore } from "@reduxjs/toolkit" import BusReducer from "./Bus-slice"; +import MapReducer from "./Map-slice" const store = configureStore({ - reducer: { bus: BusReducer } + reducer: { bus: BusReducer, map: MapReducer } }); export default store \ No newline at end of file diff --git a/Backend/routes/subwaytest.json b/Backend/routes/subwaytest.json index fa48933..96e949e 100644 --- a/Backend/routes/subwaytest.json +++ b/Backend/routes/subwaytest.json @@ -2,7 +2,7 @@ "header": { "resultCnt": 12, "resultCode": "00", - "resultMsg": " óǾϴ." + "resultMsg": "정상 처리되었습니다." }, "body": [ { @@ -11,10 +11,10 @@ "stinCd": "322", "mvPathMgNo": 1, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", + "mvPathDvNm": "출입구-승강장", "mvTpOrdr": 1, "mvDst": null, - "mvContDtl": "1) (1F) 6 Ա ž" + "mvContDtl": "1) (1F) 6번 출입구 옆 엘리베이터 탑승" }, { "railOprIsttCd": "S1", @@ -22,120 +22,120 @@ "stinCd": "322", "mvPathMgNo": 1, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 2, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 1, "mvDst": null, - "mvContDtl": "2) (B2) սǷ ̵" + "mvContDtl": "1) (1F) 6번 출입구 옆 엘리베이터 탑승" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 1, + "mvPathMgNo": 2, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 3, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 2, "mvDst": null, - "mvContDtl": "3) ǥ " + "mvContDtl": "2) (B2) 대합실로 이동" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 1, + "mvPathMgNo": 2, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 4, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 2, "mvDst": null, - "mvContDtl": "4) ° ž" + "mvContDtl": "2) (B2) 대합실로 이동" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 1, + "mvPathMgNo": 3, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 5, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 3, "mvDst": null, - "mvContDtl": "5) (B3) 湫 ° ̵" + "mvContDtl": "3) 표 내는 곳 통과" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 1, + "mvPathMgNo": 3, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 6, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 3, "mvDst": null, - "mvContDtl": "6) (üĭ)" + "mvContDtl": "3) 표 내는 곳 통과" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 2, + "mvPathMgNo": 4, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 1, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 4, "mvDst": null, - "mvContDtl": "1) (1F) 6 Ա ž" + "mvContDtl": "4) 승강장 방향 엘리베이터 탑승" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 2, + "mvPathMgNo": 4, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 2, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 4, "mvDst": null, - "mvContDtl": "2) (B2) սǷ ̵" + "mvContDtl": "4) 승강장 방향 엘리베이터 탑승" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 2, + "mvPathMgNo": 5, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 3, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 5, "mvDst": null, - "mvContDtl": "3) ǥ " + "mvContDtl": "5) (B3) 약수 방면 승강장으로 이동" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 2, + "mvPathMgNo": 5, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 4, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 5, "mvDst": null, - "mvContDtl": "4) ° ž" + "mvContDtl": "5) (B3) 충무로 방면 승강장으로 이동" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 2, + "mvPathMgNo": 6, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", - "mvTpOrdr": 5, + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 6, "mvDst": null, - "mvContDtl": "5) (B3) ° ̵" + "mvContDtl": "6) 승차 (휠체어칸)" }, { "railOprIsttCd": "S1", "lnCd": "3", "stinCd": "322", - "mvPathMgNo": 2, + "mvPathMgNo": 6, "mvPathDvCd": "1", - "mvPathDvNm": "Ա-°", + "mvPathDvNm": "출입구-승강장", "mvTpOrdr": 6, "mvDst": null, - "mvContDtl": "6) (üĭ)" + "mvContDtl": "6) 승차 (휠체어칸)" } ] } \ No newline at end of file From 997e0b368621f3463a900f08743fa03ad2ec5a21 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Tue, 22 Nov 2022 01:47:25 +0900 Subject: [PATCH 03/32] =?UTF-8?q?feat.=20=EB=B2=84=EC=8A=A4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20css=EC=9E=91=EC=97=85=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 버스페이지 css작업 완료 --- .../bus-component/buslist/BusItem.js | 3 + .../bus-component/buslist/BusList.js | 1 + .../bus-component/buslist/StationItem.js | 93 ++- .../component/bus-component/buslist/test.json | 60 +- .../src/component/map/Mapping.module.css | 2 +- .../subwayform/SubwayButton.js | 17 + .../subway-component/subwayform/SubwayForm.js | 47 ++ .../subwayform/SubwayInput.js | 17 + .../subwaylist/SubwayItems.js | 0 .../subway-component/subwaylist/SubwayList.js | 27 + Backend/Frontend/creative/src/page/BusPage.js | 13 +- .../creative/src/page/BusPage.module.css | 13 + .../Frontend/creative/src/page/SubwayPage.js | 16 +- .../creative/src/page/SubwayPage.module.css | 10 + .../Frontend/creative/src/store/Bus-slice.js | 6 +- .../creative/src/store/Subway-slice.js | 16 + Backend/Frontend/creative/src/store/index.js | 3 +- Backend/routes/subwaydata.js | 766 +++++++++--------- 18 files changed, 647 insertions(+), 463 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js create mode 100644 Backend/Frontend/creative/src/page/SubwayPage.module.css create mode 100644 Backend/Frontend/creative/src/store/Subway-slice.js diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index b8e11df..3d3003b 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -7,6 +7,9 @@ align-items:center; width:700px; list-style:none; border-bottom: 1px solid #D2D2D2; +:hover{ + cursor: pointer; +} div{ display:flex; align-items:center; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js index 4394fd4..2fd60f9 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js @@ -3,6 +3,7 @@ import BusItem from "./BusItem"; import StationItem from "./StationItem" import { useSelector } from "react-redux"; import RefreshButton from "./RefreshButton"; +import test from "./test.json" const StyledList = styled.ul` display:flex; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index b85f770..9762771 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -1,38 +1,35 @@ import styled from "styled-components"; import axios from "axios" -import { useDispatch } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; import { MapActions } from "../../../store/Map-slice"; +import { useEffect, useState } from "react"; -const StyledStationItem = styled.li` -display:flex; -justify-content:space-around; -width:700px; -list-style:none; -border-bottom: 1px solid #D2D2D2; -.Name{ - font-family: 'Pretendard'; - font-style: normal; - font-weight: 600; - font-size: 40px; - line-height: 60px; -} -.id{ - font-family: 'Pretendard'; - font-style: normal; - font-weight: 600; -font-size: 24px; -line-height: 29px; -display: flex; -align-items: center; -text-align: center; -color: #9C9C9C; -} -` const StationItem = (props) => { + const [color, setColor] = useState(true) const { stNm, arsId, tmX, tmY } = props.items const dispatch = useDispatch(); + const station = useSelector(state => state.bus.currentStation) + useEffect(() => { + if (station !== arsId) { + setColor(true) + } + }, [station]) + + + const ClickClass = () => { + console.log(station, arsId); + if (station === arsId) { + SubmitStation(); + } + else if (station !== arsId) { + setColor(false) + dispatch(BusActions.ClickStation(arsId)) + dispatch(MapActions.positioning({ tmX, tmY })) + } + } + const SubmitStation = () => { axios.get(`/bus/arsId/${arsId}`, { @@ -40,17 +37,53 @@ const StationItem = (props) => { const { data } = res; dispatch(BusActions.refreshBus(arsId)) dispatch(BusActions.addBusInfo(data)) - dispatch(MapActions.positioning({ tmX, tmY })) }).catch(error => { alert(error) }) } + return ( - -

{stNm}

+ + < p className="Name" > {stNm}

{arsId}

-
+
) } + +const StyledStationItem = styled.li` +display:flex; +justify-content:space-around; +width:100%; +list-style:none; +border-bottom: 1px solid #D2D2D2; +background-color:${props => (props.color ? "white" : "#CDD029")}; + +:hover{ + cursor: pointer; +} + +.Name{ + font-family: 'Pretendard'; + font-style: normal; + font-weight: 600; + font-size: 40px; + line-height: 60px; + color:${props => (props.color ? "black" : "white")}; +} + +.id{ + font-family: 'Pretendard'; + font-style: normal; + font-weight: 600; + font-size: 24px; + line-height: 29px; + display: flex; + align-items: center; + text-align: center; + color:${props => (props.color ? "#9C9C9C" : "black")}; +} +` + + export default StationItem; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/test.json b/Backend/Frontend/creative/src/component/bus-component/buslist/test.json index a7cebeb..04270ba 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/test.json +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/test.json @@ -1,62 +1,42 @@ [ { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "1" + "stNm": "asdsa", + "arsId": "1" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "2" + "stNm": "asdsa", + "arsId": "2" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "3" + "stNm": "asdsa", + "arsId": "3" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "4" + "stNm": "asdsa", + "arsId": "4" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "5" + "stNm": "asdsa", + "arsId": "5" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "6" + "stNm": "asdsa", + "arsId": "6" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "7" + "stNm": "asdsa", + "arsId": "7" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "8" + "stNm": "asdsa", + "arsId": "8" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "9" + "stNm": "asdsa", + "arsId": "9" }, { - "busrouteAbrv": "Name", - "adirection": "direction", - "arrmsg1": "asdsad", - "busrouteId": "10" + "stNm": "asdsa", + "arsId": "10" } ] \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/map/Mapping.module.css b/Backend/Frontend/creative/src/component/map/Mapping.module.css index 90b9d60..356baaa 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.module.css +++ b/Backend/Frontend/creative/src/component/map/Mapping.module.css @@ -1,4 +1,4 @@ .map { width: 744px; - height: 728px; + height: 713px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js new file mode 100644 index 0000000..5e55b99 --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js @@ -0,0 +1,17 @@ +import styled from "styled-components" + +const StyledButton = styled.button` +width: 99px; +height: 100px; +background: #9255F5; +border: 4px solid #9255F5; + +` + +const SubwayButton = () => { + return ( + + ) +} + +export default SubwayButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js new file mode 100644 index 0000000..492772a --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -0,0 +1,47 @@ +import SubwayButton from "./SubwayButton"; +import SubwayInput from "./SubwayInput"; +import styled from "styled-components"; +import axios from "axios" +import { BusActions } from "../../../store/Bus-slice"; +import { MapActions } from "../../../store/Map-slice"; +import { useDispatch } from "react-redux"; + + +const StyledForm = styled.form` + display:flex; + width: 735px; + height: 98px; + border: 4px solid #9255F5 +` + + +const SubwayForm = () => { + const dispatch = useDispatch(); + const SubmitBusStation = (value) => { + + axios.get(`/subway/liftMove/stinCd/${value}`, { + + }).then(res => { + const { data } = res; + console.log(data) + }).catch(error => { + alert("데이터를 받아오지 못했습니다.") + }); + + } + const BusStationData = (event) => { + event.preventDefault(); + const { target: [input] } = event + const { value } = input + input.value = ""; + SubmitBusStation(value) + } + return ( + + + + + ) +} + +export default SubwayForm \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js new file mode 100644 index 0000000..bd7d021 --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js @@ -0,0 +1,17 @@ +import styled from "styled-components" + +const StyledInput = styled.input` +width: 621px; +height: 60px; +padding: 15px; +font-size: 50px; +border:0; +` + +const SubwayInput = () => { + return ( + + ) +} + +export default SubwayInput \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js new file mode 100644 index 0000000..e69de29 diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js new file mode 100644 index 0000000..1f7af94 --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -0,0 +1,27 @@ +import styled from "styled-components"; + +import { useSelector } from "react-redux"; + +const StyledList = styled.ul` +display:flex; +flex-direction:column; +align-items: center; +box-sizing: border-box; +width: 744px; +height: 590px; +background: #FFFFFF; +border: 4px solid #9255F5; +padding:0; +overflow:auto; +` + +const SubwayList = () => { + + return ( + + + + ) +} + +export default SubwayList; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/BusPage.js b/Backend/Frontend/creative/src/page/BusPage.js index 473ca41..d5ec0c1 100644 --- a/Backend/Frontend/creative/src/page/BusPage.js +++ b/Backend/Frontend/creative/src/page/BusPage.js @@ -5,11 +5,16 @@ import classes from "./BusPage.module.css" const BusPage = () => { return (
-
- - +
+
저상버스
+
+
+ + +
+ +
-
) } diff --git a/Backend/Frontend/creative/src/page/BusPage.module.css b/Backend/Frontend/creative/src/page/BusPage.module.css index f3fc2d3..7de4478 100644 --- a/Backend/Frontend/creative/src/page/BusPage.module.css +++ b/Backend/Frontend/creative/src/page/BusPage.module.css @@ -1,3 +1,15 @@ +header { + width: 100%; + font-size: 80px; + line-height: 94px; + padding-top: 1vw; + padding-bottom: 1.5vw; +} + +.main { + display: flex; +} + .buspage { display: flex; justify-content: space-evenly; @@ -7,4 +19,5 @@ display: flex; flex-direction: column; justify-content: space-evenly; + margin-right: 2vw; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/SubwayPage.js b/Backend/Frontend/creative/src/page/SubwayPage.js index d9a6379..affb49e 100644 --- a/Backend/Frontend/creative/src/page/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/SubwayPage.js @@ -1,8 +1,18 @@ +import Mapping from "../component/map/Mapping.js" +import SubwayForm from "../component/subway-component/subwayform/SubwayForm.js" +import SubwayList from "../component/subway-component/subwaylist/SubwayList.js" +import classes from "./SubwayPage.module.css" + const SubwayPage = () => { - return ( -
Subway
+ return (
+
+ + +
+ +
) } -export default SubwayPage \ No newline at end of file +export default SubwayPage diff --git a/Backend/Frontend/creative/src/page/SubwayPage.module.css b/Backend/Frontend/creative/src/page/SubwayPage.module.css new file mode 100644 index 0000000..07ecc19 --- /dev/null +++ b/Backend/Frontend/creative/src/page/SubwayPage.module.css @@ -0,0 +1,10 @@ +.page { + display: flex; + justify-content: space-evenly; +} + +.list { + display: flex; + flex-direction: column; + justify-content: space-evenly; +} \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/Bus-slice.js b/Backend/Frontend/creative/src/store/Bus-slice.js index bf96f73..06d694d 100644 --- a/Backend/Frontend/creative/src/store/Bus-slice.js +++ b/Backend/Frontend/creative/src/store/Bus-slice.js @@ -8,7 +8,8 @@ const BusSlice = createSlice({ station: [], busId: "", stationCheck: false, - busCheck: false + busCheck: false, + currentStation: "" }, reducers: { addStationInfo(state, action) { @@ -26,6 +27,9 @@ const BusSlice = createSlice({ state.buslist = action.payload state.stationCheck = false state.busCheck = true + }, + ClickStation(state, action) { + state.currentStation = action.payload } } }); diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js new file mode 100644 index 0000000..3997626 --- /dev/null +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -0,0 +1,16 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const SubwaySlice = createSlice({ + name: "Subway", + initialState: { + + }, + reducers: { + subway(state, payload) { + + } + } +}) + +export const SubwayActions = SubwaySlice.actions; +export default SubwaySlice.reducer; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/index.js b/Backend/Frontend/creative/src/store/index.js index 0915340..d034d68 100644 --- a/Backend/Frontend/creative/src/store/index.js +++ b/Backend/Frontend/creative/src/store/index.js @@ -1,10 +1,11 @@ import { configureStore } from "@reduxjs/toolkit" import BusReducer from "./Bus-slice"; import MapReducer from "./Map-slice" +import SubwayReducer from "./Subway-slice" const store = configureStore({ - reducer: { bus: BusReducer, map: MapReducer } + reducer: { bus: BusReducer, map: MapReducer, subway: SubwayReducer } }); export default store \ No newline at end of file diff --git a/Backend/routes/subwaydata.js b/Backend/routes/subwaydata.js index ef9d9c8..36c24a5 100644 --- a/Backend/routes/subwaydata.js +++ b/Backend/routes/subwaydata.js @@ -3,9 +3,9 @@ const router = require('express').Router(); const request = require('request'); const convert = require('xml-js'); -function getSubwayStationName(stNm, callback){ - try{ - +function getSubwayStationName(stNm, callback) { + try { + console.log(stNm); const url = 'http://openapi.seoul.go.kr:8088/'; @@ -16,28 +16,28 @@ function getSubwayStationName(stNm, callback){ queryParams += '/' + encodeURIComponent('5'); queryParams += '/' + encodeURIComponent(stNm) + '/'; - console.log(url+queryParams); + console.log(url + queryParams); const tempurl = 'http://openapi.seoul.go.kr:8088/' + serviceKey.subwayStNmKey + '/json/SearchInfoBySubwayNameService/1/5/%EC%A2%85%EB%A1%9C3%EA%B0%80/'; - console.log(url+queryParams); + console.log(url + queryParams); console.log(tempurl); return request({ - url: url+ queryParams, + url: url + queryParams, method: 'GET' - },function(error,response,body){ + }, function (error, response, body) { console.log(body); callback(body); }); } - catch(e){ + catch (e) { console.error(e); callback(e); } } -function getLiftRoute(stCd,callback){ - try{ - +function getLiftRoute(stCd, callback) { + try { + console.log(stNm); const url = 'https://openapi.kric.go.kr/openapi/vulnerableUserInfo/stationWheelchairLiftMovement'; @@ -49,88 +49,88 @@ function getLiftRoute(stCd,callback){ queryParams += '/' + encodeURIComponent('5'); queryParams += '/' + encodeURIComponent(stNm) + '/'; - console.log(url+queryParams); + console.log(url + queryParams); const tempurl = 'http://openapi.seoul.go.kr:8088/' + serviceKey.subwayStNmKey + '/json/SearchInfoBySubwayNameService/1/5/%EC%A2%85%EB%A1%9C3%EA%B0%80/'; - console.log(url+queryParams); + console.log(url + queryParams); console.log(tempurl); return request({ - url: url+ queryParams, + url: url + queryParams, method: 'GET' - },function(error,response,body){ + }, function (error, response, body) { console.log(body); callback(body); }); } - catch(e){ + catch (e) { console.error(e); callback(e); } } -router.get('/stNm/:stNm', async (req,res)=>{ +router.get('/stNm/:stNm', async (req, res) => { console.log("stNm"); - try{ - + try { + stNm = req.params.stNm; - await getSubwayStationName(stNm,stationName => { + await getSubwayStationName(stNm, stationName => { return res.json({ stNm: stationName, }) }); } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/stationInfo/:stinCd/:stNm', async(req,res)=>{ - try{ +router.get('/stationInfo/:stinCd/:stNm', async (req, res) => { + try { return res.json({ - - "header": { - "resultCnt": 1, - "resultCode": "00", - "resultMsg": "정상 처리되었습니다." - }, - "body": [ - { - "railOprIsttCd": "KR", - "lnCd": "1", - "stinCd": "135", - "stinNm": "용산", - "stinNmEng": "Yongsan", - "stinNmRom": "Yongsan", - "stinNmJpn": "ヨンサン", - "stinNmSimpcina": "龙山", - "stinNmTradcina": "龍山", - "lonmAdr": "서울 용산구 한강로3가 40-999", - "roadNmAdr": "서울 용산구 한강대로23길 55", - "stinLocLon": 126.964775, - "stinLocLat": 37.52989, - "mapCordX": null, - "mapCordY": null, - "strkZone": null - } - ] - + + "header": { + "resultCnt": 1, + "resultCode": "00", + "resultMsg": "정상 처리되었습니다." + }, + "body": [ + { + "railOprIsttCd": "KR", + "lnCd": "1", + "stinCd": "135", + "stinNm": "용산", + "stinNmEng": "Yongsan", + "stinNmRom": "Yongsan", + "stinNmJpn": "ヨンサン", + "stinNmSimpcina": "龙山", + "stinNmTradcina": "龍山", + "lonmAdr": "서울 용산구 한강로3가 40-999", + "roadNmAdr": "서울 용산구 한강대로23길 55", + "stinLocLon": 126.964775, + "stinLocLat": 37.52989, + "mapCordX": null, + "mapCordY": null, + "strkZone": null + } + ] + }) } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/liftPos/stinCd/:stinCd/', async(req,res)=>{ - try{ +router.get('/liftPos/stinCd/:stinCd/', async (req, res) => { + try { return res.json({ "header": { "resultCnt": 0, @@ -139,16 +139,16 @@ router.get('/liftPos/stinCd/:stinCd/', async(req,res)=>{ } }) } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/liftMove/stinCd/:stinCd/', async(req,res)=>{ +router.get('/liftMove/stinCd/:stinCd', async (req, res) => { console.log("liftMove"); try { /* @@ -301,403 +301,403 @@ router.get('/liftMove/stinCd/:stinCd/', async(req,res)=>{ ] }) } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/ElevatorPos/stinCd/:stinCd/', async(req,res)=>{ - try{ +router.get('/ElevatorPos/stinCd/:stinCd/', async (req, res) => { + try { return res.json({ - "header": { - "resultCnt": 3, - "resultCode": "00", - "resultMsg": "정상 처리되었습니다." + "header": { + "resultCnt": 3, + "resultCode": "00", + "resultMsg": "정상 처리되었습니다." + }, + "body": [ + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "exitNo": null, + "dtlLoc": "(B3-B2)섬식(상) 3-3", + "grndDvNmFr": "지하", + "runStinFlorFr": 3, + "grndDvNmTo": "지하", + "runStinFlorTo": 2, + "rglnPsno": 15, + "rglnWgt": 1000 }, - "body": [ - { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "exitNo": null, - "dtlLoc": "(B3-B2)섬식(상) 3-3", - "grndDvNmFr": "지하", - "runStinFlorFr": 3, - "grndDvNmTo": "지하", - "runStinFlorTo": 2, - "rglnPsno": 15, - "rglnWgt": 1000 - }, - { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "exitNo": null, - "dtlLoc": "(B3-B2)", - "grndDvNmFr": "지하", - "runStinFlorFr": 1, - "grndDvNmTo": "지하", - "runStinFlorTo": 2, - "rglnPsno": 16, - "rglnWgt": 1000 - }, - { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "exitNo": "6", - "dtlLoc": "(B2-F1)6번 출입구측", - "grndDvNmFr": "지하", - "runStinFlorFr": 2, - "grndDvNmTo": "지상", - "runStinFlorTo": 1, - "rglnPsno": 15, - "rglnWgt": 1000 - } - ] + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "exitNo": null, + "dtlLoc": "(B3-B2)", + "grndDvNmFr": "지하", + "runStinFlorFr": 1, + "grndDvNmTo": "지하", + "runStinFlorTo": 2, + "rglnPsno": 16, + "rglnWgt": 1000 + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "exitNo": "6", + "dtlLoc": "(B2-F1)6번 출입구측", + "grndDvNmFr": "지하", + "runStinFlorFr": 2, + "grndDvNmTo": "지상", + "runStinFlorTo": 1, + "rglnPsno": 15, + "rglnWgt": 1000 + } + ] }) } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/ElevatorMove/stinCd/:stinCd/', async(req,res)=>{ - try{ +router.get('/ElevatorMove/stinCd/:stinCd/', async (req, res) => { + try { return res.json({ - - "header": { - "resultCnt": 12, - "resultCode": "00", - "resultMsg": "정상 처리되었습니다." + + "header": { + "resultCnt": 12, + "resultCode": "00", + "resultMsg": "정상 처리되었습니다." + }, + "body": [ + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 1, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 1, + "mvDst": null, + "mvContDtl": "1) (1F) 6번 출입구 옆 엘리베이터 탑승" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 1, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 1, + "mvDst": null, + "mvContDtl": "1) (1F) 6번 출입구 옆 엘리베이터 탑승" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 2, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 2, + "mvDst": null, + "mvContDtl": "2) (B2) 대합실로 이동" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 2, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 2, + "mvDst": null, + "mvContDtl": "2) (B2) 대합실로 이동" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 3, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 3, + "mvDst": null, + "mvContDtl": "3) 표 내는 곳 통과" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 3, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 3, + "mvDst": null, + "mvContDtl": "3) 표 내는 곳 통과" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 4, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 4, + "mvDst": null, + "mvContDtl": "4) 승강장 방향 엘리베이터 탑승" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 4, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 4, + "mvDst": null, + "mvContDtl": "4) 승강장 방향 엘리베이터 탑승" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 5, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 5, + "mvDst": null, + "mvContDtl": "5) (B3) 약수 방면 승강장으로 이동" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 5, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 5, + "mvDst": null, + "mvContDtl": "5) (B3) 충무로 방면 승강장으로 이동" }, - "body": [ + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 6, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 6, + "mvDst": null, + "mvContDtl": "6) 승차 (휠체어칸)" + }, + { + "railOprIsttCd": "S1", + "lnCd": "3", + "stinCd": "322", + "mvPathMgNo": 6, + "mvPathDvCd": "1", + "mvPathDvNm": "출입구-승강장", + "mvTpOrdr": 6, + "mvDst": null, + "mvContDtl": "6) 승차 (휠체어칸)" + } + ] + + }) + } + catch (e) { + console.error(e); + return res.status(500).json({ + error: e, + errorString: e.toString(), + }) + } +}) + +router.get('/transferMove/stinCd/:stinCd', async (req, res) => { + try { + return res.json({ + + "header": { + "resultcnt": 12, + "resultcode": 0, + "resultmsg": "정상 처리되었습니다." + }, + "body": { + "item": [ { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 1, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 1, - "mvDst": null, - "mvContDtl": "1) (1F) 6번 출입구 옆 엘리베이터 탑승" + "mvpathmgno": 2, + "chtnmvtpordr": 1, + "mvcontdtl": "1) (B3) 3호선 을지로3가 방면 승강장 하차", + "stmovepath": "3호선 을지로3가 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 1, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 1, - "mvDst": null, - "mvContDtl": "1) (1F) 6번 출입구 옆 엘리베이터 탑승" + "mvpathmgno": 2, + "chtnmvtpordr": 2, + "mvcontdtl": "2) 대합실 방향 휠체어리프트 탑승", + "stmovepath": "3호선 을지로3가 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 2, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 2, - "mvDst": null, - "mvContDtl": "2) (B2) 대합실로 이동" + "mvpathmgno": 2, + "chtnmvtpordr": 3, + "mvcontdtl": "3) (B2) 대합실로 이동", + "stmovepath": "3호선 을지로3가 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 2, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 2, - "mvDst": null, - "mvContDtl": "2) (B2) 대합실로 이동" + "mvpathmgno": 2, + "chtnmvtpordr": 4, + "mvcontdtl": "4) 4호선 명동 방면 엘리베이터 탑승", + "stmovepath": "3호선 을지로3가 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 3, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 3, - "mvDst": null, - "mvContDtl": "3) 표 내는 곳 통과" + "mvpathmgno": 2, + "chtnmvtpordr": 5, + "mvcontdtl": "5) (B3) 4호선 명동 방면 승강장으로 이동", + "stmovepath": "3호선 을지로3가 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 3, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 3, - "mvDst": null, - "mvContDtl": "3) 표 내는 곳 통과" + "mvpathmgno": 2, + "chtnmvtpordr": 6, + "mvcontdtl": "6) 승차 (휠체어칸)", + "stmovepath": "3호선 을지로3가 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 4, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 4, - "mvDst": null, - "mvContDtl": "4) 승강장 방향 엘리베이터 탑승" + "mvpathmgno": 4, + "chtnmvtpordr": 1, + "mvcontdtl": "1) (B3) 3호선 동대입구 방면 승강장 하차", + "stmovepath": "3호선 동대입구 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 4, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 4, - "mvDst": null, - "mvContDtl": "4) 승강장 방향 엘리베이터 탑승" + "mvpathmgno": 4, + "chtnmvtpordr": 2, + "mvcontdtl": "2) 대합실 방향 휠체어리프트 탑승", + "stmovepath": "3호선 동대입구 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 5, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 5, - "mvDst": null, - "mvContDtl": "5) (B3) 약수 방면 승강장으로 이동" + "mvpathmgno": 4, + "chtnmvtpordr": 3, + "mvcontdtl": "3) (B2) 대합실로 이동", + "stmovepath": "3호선 동대입구 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 5, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 5, - "mvDst": null, - "mvContDtl": "5) (B3) 충무로 방면 승강장으로 이동" + "mvpathmgno": 4, + "chtnmvtpordr": 4, + "mvcontdtl": "4) 4호선 명동 방면 엘리베이터 탑승", + "stmovepath": "3호선 동대입구 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 6, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 6, - "mvDst": null, - "mvContDtl": "6) 승차 (휠체어칸)" + "mvpathmgno": 4, + "chtnmvtpordr": 5, + "mvcontdtl": "5) (B3) 4호선 명동 방면 승강장으로 이동", + "stmovepath": "3호선 동대입구 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", + "elvttpcd": {}, + "elvtsttcd": {} }, { - "railOprIsttCd": "S1", - "lnCd": "3", - "stinCd": "322", - "mvPathMgNo": 6, - "mvPathDvCd": "1", - "mvPathDvNm": "출입구-승강장", - "mvTpOrdr": 6, - "mvDst": null, - "mvContDtl": "6) 승차 (휠체어칸)" + "mvpathmgno": 4, + "chtnmvtpordr": 6, + "mvcontdtl": "6) 승차 (휠체어칸)", + "stmovepath": "3호선 동대입구 방면", + "edmovepath": "4호선 명동 방면", + "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", + "elvttpcd": {}, + "elvtsttcd": {} } ] - - }) - } - catch(e){ - console.error(e); - return res.status(500).json({ - error:e, - errorString: e.toString(), - }) - } -}) + } -router.get('/transferMove/stinCd/:stinCd', async(req,res)=>{ - try{ - return res.json({ - - "header": { - "resultcnt": 12, - "resultcode": 0, - "resultmsg": "정상 처리되었습니다." - }, - "body": { - "item": [ - { - "mvpathmgno": 2, - "chtnmvtpordr": 1, - "mvcontdtl": "1) (B3) 3호선 을지로3가 방면 승강장 하차", - "stmovepath": "3호선 을지로3가 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 2, - "chtnmvtpordr": 2, - "mvcontdtl": "2) 대합실 방향 휠체어리프트 탑승", - "stmovepath": "3호선 을지로3가 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 2, - "chtnmvtpordr": 3, - "mvcontdtl": "3) (B2) 대합실로 이동", - "stmovepath": "3호선 을지로3가 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 2, - "chtnmvtpordr": 4, - "mvcontdtl": "4) 4호선 명동 방면 엘리베이터 탑승", - "stmovepath": "3호선 을지로3가 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 2, - "chtnmvtpordr": 5, - "mvcontdtl": "5) (B3) 4호선 명동 방면 승강장으로 이동", - "stmovepath": "3호선 을지로3가 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 2, - "chtnmvtpordr": 6, - "mvcontdtl": "6) 승차 (휠체어칸)", - "stmovepath": "3호선 을지로3가 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_2_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 4, - "chtnmvtpordr": 1, - "mvcontdtl": "1) (B3) 3호선 동대입구 방면 승강장 하차", - "stmovepath": "3호선 동대입구 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 4, - "chtnmvtpordr": 2, - "mvcontdtl": "2) 대합실 방향 휠체어리프트 탑승", - "stmovepath": "3호선 동대입구 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 4, - "chtnmvtpordr": 3, - "mvcontdtl": "3) (B2) 대합실로 이동", - "stmovepath": "3호선 동대입구 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 4, - "chtnmvtpordr": 4, - "mvcontdtl": "4) 4호선 명동 방면 엘리베이터 탑승", - "stmovepath": "3호선 동대입구 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 4, - "chtnmvtpordr": 5, - "mvcontdtl": "5) (B3) 4호선 명동 방면 승강장으로 이동", - "stmovepath": "3호선 동대입구 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - }, - { - "mvpathmgno": 4, - "chtnmvtpordr": 6, - "mvcontdtl": "6) 승차 (휠체어칸)", - "stmovepath": "3호선 동대입구 방면", - "edmovepath": "4호선 명동 방면", - "imgpath": "http://hc.kric.go.kr/hc/ext/images/visual/handicapped/mvPath/S1/S1_3_0563_4_3.png", - "elvttpcd": {}, - "elvtsttcd": {} - } - ] - } - - }) + }) } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/platformDis/stinCd/:stinCd', async(req,res)=>{ - try{ +router.get('/platformDis/stinCd/:stinCd', async (req, res) => { + try { } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/wheelchairPlace/stinCd', async(req,res)=>{ - try{ +router.get('/wheelchairPlace/stinCd', async (req, res) => { + try { } - catch(e){ + catch (e) { console.error(e); return res.status(500).json({ - error:e, + error: e, errorString: e.toString(), }) } }) -router.get('/liftRoute/:stCd', async (req,res)=>{ - +router.get('/liftRoute/:stCd', async (req, res) => { + }) module.exports = router; \ No newline at end of file From d15e1a8c60bc3db771a1c247967ff0b2f8c952a5 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Tue, 22 Nov 2022 23:16:10 +0900 Subject: [PATCH 04/32] =?UTF-8?q?feat.=20=EC=9E=85=EB=A0=A5=20=ED=8F=BC=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 입력 부분에서 검색어 바뀔 때마다 서버에 요청 --- .../bus-component/busform/BusForm.js | 2 +- .../bus-component/busform/BusInput.js | 2 +- .../subway-component/subwayform/SubwayForm.js | 16 +++++++------- .../subwayform/SubwayInput.js | 16 +++++++++++++- .../Frontend/creative/src/page/SubwayPage.js | 21 +++++++++++++------ .../creative/src/page/SubwayPage.module.css | 17 +++++++++++++-- 6 files changed, 54 insertions(+), 20 deletions(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index c3ff53e..5c2e8e3 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -39,7 +39,7 @@ const BusForm = () => { } return ( - + ) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js index 0ab79c9..c71ead9 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js @@ -10,7 +10,7 @@ border:0; const BusInput = () => { return ( - + ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 492772a..0e02b6e 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -2,8 +2,6 @@ import SubwayButton from "./SubwayButton"; import SubwayInput from "./SubwayInput"; import styled from "styled-components"; import axios from "axios" -import { BusActions } from "../../../store/Bus-slice"; -import { MapActions } from "../../../store/Map-slice"; import { useDispatch } from "react-redux"; @@ -17,9 +15,9 @@ const StyledForm = styled.form` const SubwayForm = () => { const dispatch = useDispatch(); - const SubmitBusStation = (value) => { + const SubmitSubwayStation = (value) => { - axios.get(`/subway/liftMove/stinCd/${value}`, { + axios.get(`/subway/stNm/${value}`, { }).then(res => { const { data } = res; @@ -29,16 +27,16 @@ const SubwayForm = () => { }); } - const BusStationData = (event) => { + const SubwayStationData = (event) => { event.preventDefault(); const { target: [input] } = event const { value } = input - input.value = ""; - SubmitBusStation(value) + SubmitSubwayStation(value) } + return ( - - + + ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js index bd7d021..5e1fd75 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js @@ -1,4 +1,5 @@ import styled from "styled-components" +import axios from "axios" const StyledInput = styled.input` width: 621px; @@ -9,8 +10,21 @@ border:0; ` const SubwayInput = () => { + const submitSubway = (value) => { + axios.get(`/subway/stNm/${value}`) + .then(res => { + const { data } = res; + console.log(data) + }) + } + const subwaychange = (event) => { + const { target: { value } } = event + submitSubway(value) + } + + return ( - + ) } diff --git a/Backend/Frontend/creative/src/page/SubwayPage.js b/Backend/Frontend/creative/src/page/SubwayPage.js index affb49e..de3ceae 100644 --- a/Backend/Frontend/creative/src/page/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/SubwayPage.js @@ -5,14 +5,23 @@ import classes from "./SubwayPage.module.css" const SubwayPage = () => { - return (
-
- - + return ( +
+
+
지하철 편의시설
+
+
+ + +
+ +
+
- -
) } + + + export default SubwayPage diff --git a/Backend/Frontend/creative/src/page/SubwayPage.module.css b/Backend/Frontend/creative/src/page/SubwayPage.module.css index 07ecc19..134a691 100644 --- a/Backend/Frontend/creative/src/page/SubwayPage.module.css +++ b/Backend/Frontend/creative/src/page/SubwayPage.module.css @@ -1,10 +1,23 @@ -.page { +header { + width: 100%; + font-size: 80px; + line-height: 94px; + padding-top: 1vw; + padding-bottom: 1.5vw; +} + +.main { + display: flex; +} + +.subwaypage { display: flex; justify-content: space-evenly; } -.list { +.subwaylist { display: flex; flex-direction: column; justify-content: space-evenly; + margin-right: 2vw; } \ No newline at end of file From 4f18ff3a6c5b91ab70dbc3da70707d3880f4ea3a Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Sun, 27 Nov 2022 04:38:04 +0900 Subject: [PATCH 05/32] =?UTF-8?q?feat.=20=EC=A7=80=ED=95=98=EC=B2=A0=20pag?= =?UTF-8?q?e=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지하철 page 뼈대를 만들었습니다. --- Backend/DBconnect.js | 4 +- Backend/Frontend/creative/src/App.js | 15 +++-- .../creative/src/component/Auth/Api.js | 6 ++ .../bus-component/buslist/BusList.js | 3 - .../bus-component/buslist/RefreshButton.js | 2 +- .../bus-component/buslist/StationItem.js | 2 +- .../component/bus-component/buslist/test.json | 42 ------------- .../creative/src/component/map/Mapping.js | 5 +- .../src/component/map/Mapping.module.css | 2 +- .../subway-component/subwayform/SubwayForm.js | 24 ++++---- .../subwayform/SubwayInput.js | 14 +---- .../subwaylist/SubwayItems.js | 48 +++++++++++++++ .../subway-component/subwaylist/SubwayList.js | 14 ++++- .../subwaymenubar/SubwayBar.js | 39 ++++++++++++ .../subwaypanel/SubwayPanel.js | 17 ++++++ Backend/Frontend/creative/src/index.js | 2 +- .../creative/src/page/MainPage.module.css | 61 +++++++++++++++++++ .../src/page/subwaypage/SubwayBathchair.js | 22 +++++++ .../subwaypage/SubwayBathchaire.module.css | 0 .../src/page/subwaypage/SubwayDetailPage.js | 24 ++++++++ .../subwaypage/SubwayDetailPage.module.css | 11 ++++ .../src/page/subwaypage/SubwayElevator.js | 22 +++++++ .../page/subwaypage/SubwayElevator.module.css | 0 .../src/page/{ => subwaypage}/SubwayPage.js | 8 +-- .../{ => subwaypage}/SubwayPage.module.css | 0 .../src/page/subwaypage/SubwayTransfer.js | 22 +++++++ .../page/subwaypage/SubwayTransfer.module.css | 0 .../creative/src/store/Subway-slice.js | 12 +++- Backend/Frontend/creative/src/store/index.js | 6 +- Backend/backend.js | 8 +-- 30 files changed, 332 insertions(+), 103 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/Auth/Api.js delete mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/test.json create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayBathchaire.module.css create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css rename Backend/Frontend/creative/src/page/{ => subwaypage}/SubwayPage.js (71%) rename Backend/Frontend/creative/src/page/{ => subwaypage}/SubwayPage.module.css (100%) create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css diff --git a/Backend/DBconnect.js b/Backend/DBconnect.js index 04b6875..7fa4371 100644 --- a/Backend/DBconnect.js +++ b/Backend/DBconnect.js @@ -4,9 +4,7 @@ const port = 3000; const path = require('path'); const mysql = require('mysql'); -const conn { - -} + app.get('/', (req, res) => { res.json({ diff --git a/Backend/Frontend/creative/src/App.js b/Backend/Frontend/creative/src/App.js index 1c58a23..571743c 100644 --- a/Backend/Frontend/creative/src/App.js +++ b/Backend/Frontend/creative/src/App.js @@ -1,8 +1,11 @@ import { BrowserRouter, Routes, Route } from "react-router-dom"; -import MainPage from "./page/MainPage" -import BusPage from "./page/BusPage" -import SubwayPage from "./page/SubwayPage" - +import MainPage from "./page/MainPage.js" +import BusPage from "./page/BusPage.js" +import SubwayPage from "./page/subwaypage/SubwayPage.js" +import SubwayTransferPage from "./page/subwaypage/SubwayTransfer.js"; +import SubwayDetailPage from "./page/subwaypage/SubwayDetailPage.js" +import SubwayElevatorPage from "./page/subwaypage/SubwayElevator.js"; +import SubwayBathChairPage from "./page/subwaypage/SubwayBathchair.js"; function App() { return ( @@ -11,6 +14,10 @@ function App() { } /> } /> } /> + } /> + } /> + } /> + } /> ); diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/Auth/Api.js new file mode 100644 index 0000000..42a71ec --- /dev/null +++ b/Backend/Frontend/creative/src/component/Auth/Api.js @@ -0,0 +1,6 @@ +import axios from "axios" + +export const api = axios.create({ + baseURL: "http://34.132.35.80:3005/" +}) + diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js index 2fd60f9..868dacc 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js @@ -3,7 +3,6 @@ import BusItem from "./BusItem"; import StationItem from "./StationItem" import { useSelector } from "react-redux"; import RefreshButton from "./RefreshButton"; -import test from "./test.json" const StyledList = styled.ul` display:flex; @@ -27,14 +26,12 @@ const BusList = () => { {stationCheck && stationInfo.map(element => ( ))} {busCheck && busInfo.map(element => ( diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index 939d939..0eae678 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -5,7 +5,7 @@ import { BusActions } from "../../../store/Bus-slice"; const StyledRefreshButton = styled.button` width:65px; -height:100%; +height:65px; border: 0; border-radius:50px; position:sticky; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index e513aaf..99844f7 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -38,7 +38,7 @@ const StationItem = (props) => { dispatch(BusActions.refreshBus(arsId)) dispatch(BusActions.addBusInfo(data)) }).catch(error => { - alert(error) + alert("저상 버스가 없습니다.") }) } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/test.json b/Backend/Frontend/creative/src/component/bus-component/buslist/test.json deleted file mode 100644 index 04270ba..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/test.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "stNm": "asdsa", - "arsId": "1" - }, - { - "stNm": "asdsa", - "arsId": "2" - }, - { - "stNm": "asdsa", - "arsId": "3" - }, - { - "stNm": "asdsa", - "arsId": "4" - }, - { - "stNm": "asdsa", - "arsId": "5" - }, - { - "stNm": "asdsa", - "arsId": "6" - }, - { - "stNm": "asdsa", - "arsId": "7" - }, - { - "stNm": "asdsa", - "arsId": "8" - }, - { - "stNm": "asdsa", - "arsId": "9" - }, - { - "stNm": "asdsa", - "arsId": "10" - } -] \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index 1fa5295..59c5095 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -11,7 +11,6 @@ const Mapping = () => { const position = useSelector(state => state.map.position) useEffect(() => { const container = document.getElementById("map"); - console.log(position.tmX, position.tmY) const options = { center: new window.kakao.maps.LatLng(position.tmY, position.tmX), level: 3, @@ -45,11 +44,11 @@ const Mapping = () => { }).then(res => { const { data } = res; + console.log(data) dispatch(BusActions.refreshBus(id)) dispatch(BusActions.addBusInfo(data)) - dispatch(MapActions.positioning(data)) }).catch(error => { - alert(error) + alert("저상 버스가 없습니다.") }) } diff --git a/Backend/Frontend/creative/src/component/map/Mapping.module.css b/Backend/Frontend/creative/src/component/map/Mapping.module.css index d31da8a..017ee49 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.module.css +++ b/Backend/Frontend/creative/src/component/map/Mapping.module.css @@ -1,5 +1,5 @@ .map { - width: 744px; + width: 780px; height: 713px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index c736c84..2476e9e 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -1,8 +1,10 @@ -import SubwayButton from "./SubwayButton"; -import SubwayInput from "./SubwayInput"; +import SubwayButton from "./SubwayButton.js"; +import SubwayInput from "./SubwayInput.js"; import styled from "styled-components"; import axios from "axios" import { useDispatch } from "react-redux"; +import { SubwayActions } from "../../../store/Subway-slice.js"; +import { api } from "../../Auth/Api.js"; const StyledForm = styled.form` @@ -16,16 +18,13 @@ const StyledForm = styled.form` const SubwayForm = () => { const dispatch = useDispatch(); const SubmitSubwayStation = (value) => { - - axios.get(`/subway/stNm/${value}`, { - - - }).then(res => { - const { data } = res; - console.log(data) - }).catch(error => { - alert("데이터를 받아오지 못했습니다.") - }); + axios.get(`subway/stNm/${value}`) + .then(res => { + const { data } = res; + dispatch(SubwayActions.addSubwayInfo(data)) + }).catch(error => { + alert("데이터를 받아오지 못했습니다.") + }); } @@ -33,6 +32,7 @@ const SubwayForm = () => { event.preventDefault(); const { target: [input] } = event const { value } = input + input.value = ""; SubmitSubwayStation(value) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js index 405fc1e..783ce49 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js @@ -1,5 +1,4 @@ import styled from "styled-components" -import axios from "axios" const StyledInput = styled.input` @@ -12,21 +11,10 @@ border:0; const SubwayInput = () => { - const submitSubway = (value) => { - axios.get(`/subway/stNm/${value}`) - .then(res => { - const { data } = res; - console.log(data) - }) - } - const subwaychange = (event) => { - const { target: { value } } = event - submitSubway(value) - } return ( - + ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index e69de29..0b889e9 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -0,0 +1,48 @@ +import styled from "styled-components"; +import axios from "axios"; + + +const StyldeSubwayList = styled.li` +display:flex; +justify-content:space-around; +align-items:center; +width:700px; +list-style:none; +border-bottom: 1px solid #D2D2D2; +:hover{ + cursor: pointer; +} +.name{ + font-family: 'Pretendard'; + font-style: normal; + font-weight: 600; + font-size: 40px; + line-height: 60px; +} +.line{ + font-family: 'Pretendard'; + font-style: normal; + font-weight: 600; + font-size: 24px; + line-height: 29px; +} + +` + +const SubwayItems = ({ items }) => { + const clickSubway = () => { + axios.get("/subway/stationInfo/:stinCd/:stNm") + .then(res => { + const { data } = res; + console.log(data.body[0]); + }) + } + return ( + +

{items.stNm}

+

{items.lineNum}

+
+ ) +} + +export default SubwayItems \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index 1f7af94..b4e5bf5 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -1,7 +1,9 @@ import styled from "styled-components"; - +import SubwayItems from "./SubwayItems.js" import { useSelector } from "react-redux"; + + const StyledList = styled.ul` display:flex; flex-direction:column; @@ -16,10 +18,16 @@ overflow:auto; ` const SubwayList = () => { - + const subwayCheck = useSelector(state => state.subway.subwayCheck) + const subway = useSelector(state => state.subway.subway) + console.log(subway) + console.log(subwayCheck) return ( - + {subwayCheck && } ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js new file mode 100644 index 0000000..aec037f --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -0,0 +1,39 @@ +import styled from "styled-components"; +import { Link } from "react-router-dom"; + +const StyleMenuBar = styled.ul` +width:100%; +display:flex; +list-style:none; +justify-content: space-between; +font-family: 'Pretendard'; +font-style: normal; +font-size: 28px; +line-height: 43px; + +li{ + padding:0px 7px; + color:black; + border-radius:50px; +} +li:hover{ + color:white; + background-color:#c0c0c0; +} +a{ + text-decoration:none; +} +` + +const SubwayBar = () => { + return ( + +
  • 역 검색
  • +
  • 엘리베이터 위치
  • +
  • 환승 이동 경로
  • +
  • 휠체어 관련 위치
  • +
    + ) +} + +export default SubwayBar; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js new file mode 100644 index 0000000..bbccf1f --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -0,0 +1,17 @@ +import styled from "styled-components"; + +const StyledPanel = styled.div` +width: 729px; +height: 821px; +background-color:black; + +` + + +const SubwayPanel = () => { + return ( + + ) +} + +export default SubwayPanel; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/index.js b/Backend/Frontend/creative/src/index.js index 1701eb3..8596452 100644 --- a/Backend/Frontend/creative/src/index.js +++ b/Backend/Frontend/creative/src/index.js @@ -1,5 +1,5 @@ import { createRoot } from 'react-dom/client'; -import App from './App'; +import App from './App.js'; import { Provider } from 'react-redux'; import store from './store/index'; import reportWebVitals from './reportWebVitals'; diff --git a/Backend/Frontend/creative/src/page/MainPage.module.css b/Backend/Frontend/creative/src/page/MainPage.module.css index 121f754..c7cf540 100644 --- a/Backend/Frontend/creative/src/page/MainPage.module.css +++ b/Backend/Frontend/creative/src/page/MainPage.module.css @@ -4,11 +4,72 @@ padding: 2.5rem; } +.main { + animation: fadein 2s; + -moz-animation: fadein 2s; + /* Firefox */ + -webkit-animation: fadein 2s; + /* Safari and Chrome */ + -o-animation: fadein 2s; + /* Opera */ +} + +@keyframes fadein { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@-moz-keyframes fadein { + + /* Firefox */ + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@-webkit-keyframes fadein { + + /* Safari and Chrome */ + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@-o-keyframes fadein { + + /* Opera */ + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + + .bottom { display: flex; justify-content: space-between; } + + + + @media screen and (max-width:1676px) { .main { display: flex; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js new file mode 100644 index 0000000..5d741fa --- /dev/null +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -0,0 +1,22 @@ +import Mapping from "../../component/map/Mapping.js" +import classes from "./SubwayDetailPage.module.css" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" + +const SubwayBathChairPage = () => { + return ( +
    +
    +
    +
    + + +
    +
    +
    +
    + ) +} + + + +export default SubwayBathChairPage diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchaire.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchaire.module.css new file mode 100644 index 0000000..e69de29 diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js new file mode 100644 index 0000000..68e9564 --- /dev/null +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -0,0 +1,24 @@ +import Mapping from "../../component/map/Mapping.js" +import classes from "./SubwayDetailPage.module.css" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" + +const SubwayDetailPage = () => { + return ( +
    +
    +
    + +
    + + +
    +
    +
    +
    + ) +} + + + +export default SubwayDetailPage diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css new file mode 100644 index 0000000..3e3ae62 --- /dev/null +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css @@ -0,0 +1,11 @@ +.main { + width: 100%; + display: flex; + justify-content: space-evenly; +} + +.subwaymeubar { + display: flex; + flex-direction: column; + align-items: end; +} \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js new file mode 100644 index 0000000..6acd074 --- /dev/null +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -0,0 +1,22 @@ +import Mapping from "../../component/map/Mapping.js" +import classes from "./SubwayElevator.module.css" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" + +const SubwayElevatorPage = () => { + return ( +
    +
    +
    +
    + + +
    +
    +
    +
    + ) +} + + + +export default SubwayElevatorPage diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css new file mode 100644 index 0000000..e69de29 diff --git a/Backend/Frontend/creative/src/page/SubwayPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js similarity index 71% rename from Backend/Frontend/creative/src/page/SubwayPage.js rename to Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js index 496af49..b9e032c 100644 --- a/Backend/Frontend/creative/src/page/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js @@ -1,11 +1,9 @@ -import Mapping from "../component/map/Mapping.js" -import SubwayForm from "../component/subway-component/subwayform/SubwayForm.js" -import SubwayList from "../component/subway-component/subwaylist/SubwayList.js" +import Mapping from "../../component/map/Mapping.js" +import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" +import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayPage.module.css" const SubwayPage = () => { - - return (
    diff --git a/Backend/Frontend/creative/src/page/SubwayPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css similarity index 100% rename from Backend/Frontend/creative/src/page/SubwayPage.module.css rename to Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js new file mode 100644 index 0000000..6173510 --- /dev/null +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -0,0 +1,22 @@ +import Mapping from "../../component/map/Mapping.js" +import classes from "./SubwayDetailPage.module.css" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" + +const SubwayTransferPage = () => { + return ( +
    +
    +
    +
    + + +
    +
    +
    +
    + ) +} + + + +export default SubwayTransferPage diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css new file mode 100644 index 0000000..e69de29 diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index 3997626..93922be 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -3,11 +3,17 @@ import { createSlice } from "@reduxjs/toolkit"; const SubwaySlice = createSlice({ name: "Subway", initialState: { - + subway: [], + subwayCheck: false, + subwayCheck2: true }, reducers: { - subway(state, payload) { - + addSubwayInfo(state, action) { + state.subway = action.payload + state.subwayCheck = true + }, + clickSubway(state, action) { + state.subwayCheck2 = false; } } }) diff --git a/Backend/Frontend/creative/src/store/index.js b/Backend/Frontend/creative/src/store/index.js index d034d68..2a78689 100644 --- a/Backend/Frontend/creative/src/store/index.js +++ b/Backend/Frontend/creative/src/store/index.js @@ -1,7 +1,7 @@ import { configureStore } from "@reduxjs/toolkit" -import BusReducer from "./Bus-slice"; -import MapReducer from "./Map-slice" -import SubwayReducer from "./Subway-slice" +import BusReducer from "./Bus-slice.js"; +import MapReducer from "./Map-slice.js" +import SubwayReducer from "./Subway-slice.js" const store = configureStore({ diff --git a/Backend/backend.js b/Backend/backend.js index b5b1787..63280ac 100644 --- a/Backend/backend.js +++ b/Backend/backend.js @@ -2,23 +2,21 @@ const express = require('express'); const app = express(); const port = 3005; const path = require('path'); - - const testRouter = require('./routes/test'); const busRouter = require('./routes/busdata'); const subwayRouter = require('./routes/subwaydata'); -//app.use(express.static(path.join(__dirname, './Frontend/creative/build'))) +app.use(express.static(path.join(__dirname, './Frontend/creative/build'))) app.use('', testRouter); app.use('/bus', busRouter); app.use('/subway', subwayRouter); -/* + app.get('/', function (req, res) { res.sendFile(path.join(__dirname, './Frontend/creative/build/index.html')); }) -*/ + app.get('/', (req, res) => { res.json({ From 524fc29e628cc633d2838616494dc789b8aa2ce8 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Mon, 28 Nov 2022 00:14:49 +0900 Subject: [PATCH 06/32] =?UTF-8?q?feat.=20map-slice=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/component/bus-component/busform/BusForm.js | 3 ++- .../Frontend/creative/src/component/map/Mapping.js | 10 +++++----- .../creative/src/component/menu/MenuButton.js | 8 +++++++- .../subway-component/subwaylist/SubwayItems.js | 14 ++++++++------ .../subway-component/subwaymenubar/SubwayBar.js | 11 +++++++---- .../subway-component/subwaypanel/SubwayPanel.js | 7 +++++-- Backend/Frontend/creative/src/store/Map-slice.js | 9 ++++++++- 7 files changed, 42 insertions(+), 20 deletions(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index 5c2e8e3..eaee278 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -2,8 +2,8 @@ import BusButton from "./BusButton"; import BusInput from "./BusInput"; import styled from "styled-components"; import axios from "axios" -import { BusActions } from "../../../store/Bus-slice"; import { MapActions } from "../../../store/Map-slice"; +import { BusActions } from "../../../store/Bus-slice"; import { useDispatch } from "react-redux"; @@ -23,6 +23,7 @@ const BusForm = () => { }).then(res => { const { data } = res; + dispatch(MapActions.makerchacking(data)) dispatch(BusActions.addStationInfo(data)) dispatch(MapActions.positioning(data[0])) }).catch(error => { diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index 59c5095..1875881 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -7,7 +7,7 @@ import { MapActions } from "../../store/Map-slice"; const Mapping = () => { const dispatch = useDispatch() - const stationInfo = useSelector(state => state.bus.station) + const marker = useSelector(state => state.map.marker) const position = useSelector(state => state.map.position) useEffect(() => { const container = document.getElementById("map"); @@ -16,12 +16,12 @@ const Mapping = () => { level: 3, }; const map = new window.kakao.maps.Map(container, options); - if (Array.isArray(stationInfo)) - mapcoordinate(stationInfo, map) + if (Array.isArray(marker)) + mapcoordinate(marker, map) }) - const mapcoordinate = (stationInfo, map) => { - stationInfo.forEach(element => { + const mapcoordinate = (marker, map) => { + marker.forEach(element => { const imageSrc = './image/busImage.png' // 마커이미지의 주소입니다 const imageSize = new window.kakao.maps.Size(64, 69) const imageOption = { offset: new window.kakao.maps.Point(27, 69) }; diff --git a/Backend/Frontend/creative/src/component/menu/MenuButton.js b/Backend/Frontend/creative/src/component/menu/MenuButton.js index 4b5afd4..5079fd9 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuButton.js @@ -1,4 +1,6 @@ import styled from 'styled-components' +import { useDispatch } from 'react-redux' +import { MapActions } from '../../store/Map-slice' const StyledButton = styled.button` width: 800px; @@ -10,8 +12,12 @@ line-height: 125px; const MenuButton = (props) => { + const dispatch = useDispatch(); + const initialization = () => { + dispatch(MapActions.initialization()) + } return ( - + {props.name} ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 0b889e9..e9a30f2 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -1,8 +1,8 @@ import styled from "styled-components"; import axios from "axios"; +import { Link } from "react-router-dom"; - -const StyldeSubwayList = styled.li` +const StyldeSubwayItems = styled.li` display:flex; justify-content:space-around; align-items:center; @@ -38,10 +38,12 @@ const SubwayItems = ({ items }) => { }) } return ( - -

    {items.stNm}

    -

    {items.lineNum}

    -
    + + +

    {items.stNm}

    +

    {items.lineNum}

    +
    + ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index aec037f..466e9a4 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -12,23 +12,26 @@ font-size: 28px; line-height: 43px; li{ - padding:0px 7px; color:black; - border-radius:50px; + border-radius:10px; + padding:2.5px; } li:hover{ + transition: all ease 0.5s; color:white; background-color:#c0c0c0; } -a{ +a{ + padding:0px 7px; text-decoration:none; + border-right:2px solid; } ` const SubwayBar = () => { return ( -
  • 역 검색
  • +
  • 엘리베이터 위치
  • 환승 이동 경로
  • 휠체어 관련 위치
  • diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index bbccf1f..68d8b4a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -3,14 +3,17 @@ import styled from "styled-components"; const StyledPanel = styled.div` width: 729px; height: 821px; -background-color:black; +background-color:white; +border: 4px solid #9255F5; ` const SubwayPanel = () => { return ( - + + + ) } diff --git a/Backend/Frontend/creative/src/store/Map-slice.js b/Backend/Frontend/creative/src/store/Map-slice.js index 442bba4..b4ebbfd 100644 --- a/Backend/Frontend/creative/src/store/Map-slice.js +++ b/Backend/Frontend/creative/src/store/Map-slice.js @@ -6,12 +6,19 @@ const MapSlice = createSlice({ position: { tmY: 37.55068403524657, tmX: 127.07411251036736 - } + }, + marker: [] }, reducers: { positioning(state, action) { state.position.tmX = action.payload.tmX; state.position.tmY = action.payload.tmY; + }, + makerchacking(state, action) { + state.marker = action.payload + }, + initialization(state) { + state.marker = [] } } }) From 9e8bf92a82025a03fe0c6d0b6543f6d058554bc7 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Mon, 28 Nov 2022 03:01:50 +0900 Subject: [PATCH 07/32] =?UTF-8?q?feat.=20subway=20page=EA=B0=9C=EB=B0=9C(v?= =?UTF-8?q?1.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/package-lock.json | 15 +++++++++ Backend/Frontend/creative/package.json | 1 + .../bus-component/busform/BusForm.js | 3 +- .../bus-component/buslist/StationItem.js | 4 +-- .../creative/src/component/map/Mapping.js | 1 - .../subway-component/subwayform/SubwayForm.js | 3 +- .../subway-component/subwayinfo/SubwayInfo.js | 19 +++++++++++ .../subwaylist/SubwayItems.js | 14 +++++--- .../subway-component/subwaylist/SubwayList.js | 3 ++ .../subwaymenubar/SubwayBar.js | 11 ++++++- .../subwaypanel/SubwayPanel.js | 32 +++++++++++++++++-- Backend/Frontend/creative/src/index.js | 8 ++++- .../src/page/subwaypage/SubwayBathchair.js | 15 ++++----- .../subwaypage/SubwayBathchair.module.css | 5 +++ .../subwaypage/SubwayBathchaire.module.css | 0 .../page/subwaypage/SubwayElevator.module.css | 11 +++++++ .../src/page/subwaypage/SubwayTransfer.js | 2 +- .../page/subwaypage/SubwayTransfer.module.css | 11 +++++++ .../Frontend/creative/src/store/Bus-slice.js | 3 -- .../creative/src/store/Subway-slice.js | 6 ++-- Backend/Frontend/creative/src/store/index.js | 19 +++++++++-- 21 files changed, 153 insertions(+), 33 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js create mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css delete mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayBathchaire.module.css diff --git a/Backend/Frontend/creative/package-lock.json b/Backend/Frontend/creative/package-lock.json index afd79b4..59117fa 100644 --- a/Backend/Frontend/creative/package-lock.json +++ b/Backend/Frontend/creative/package-lock.json @@ -18,6 +18,7 @@ "react-redux": "^8.0.4", "react-router-dom": "^6.4.1", "react-scripts": "5.0.1", + "redux-persist": "^6.0.0", "styled-components": "^5.3.6", "web-vitals": "^2.1.4" } @@ -14386,6 +14387,14 @@ "@babel/runtime": "^7.9.2" } }, + "node_modules/redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "peerDependencies": { + "redux": ">4.0.0" + } + }, "node_modules/redux-thunk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", @@ -27219,6 +27228,12 @@ "@babel/runtime": "^7.9.2" } }, + "redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "requires": {} + }, "redux-thunk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", diff --git a/Backend/Frontend/creative/package.json b/Backend/Frontend/creative/package.json index a70f68a..6e46b37 100644 --- a/Backend/Frontend/creative/package.json +++ b/Backend/Frontend/creative/package.json @@ -13,6 +13,7 @@ "react-redux": "^8.0.4", "react-router-dom": "^6.4.1", "react-scripts": "5.0.1", + "redux-persist": "^6.0.0", "styled-components": "^5.3.6", "web-vitals": "^2.1.4" }, diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index eaee278..ba9ec9c 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -2,6 +2,7 @@ import BusButton from "./BusButton"; import BusInput from "./BusInput"; import styled from "styled-components"; import axios from "axios" +import { api } from "../../Auth/Api"; import { MapActions } from "../../../store/Map-slice"; import { BusActions } from "../../../store/Bus-slice"; import { useDispatch } from "react-redux"; @@ -19,7 +20,7 @@ const BusForm = () => { const dispatch = useDispatch(); const SubmitBusStation = (value) => { - axios.get(`/bus/stNm/${value}`, { + api.get(`/bus/stNm/${value}`, { }).then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 99844f7..a59e578 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -1,5 +1,6 @@ import styled from "styled-components"; import axios from "axios" +import { api } from "../../Auth/Api"; import { useDispatch, useSelector } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; import { MapActions } from "../../../store/Map-slice"; @@ -19,7 +20,6 @@ const StationItem = (props) => { const ClickClass = () => { - console.log(station, arsId); if (station === arsId) { SubmitStation(); } @@ -31,7 +31,7 @@ const StationItem = (props) => { } const SubmitStation = () => { - axios.get(`/bus/arsId/${arsId}`, { + api.get(`/bus/arsId/${arsId}`, { }).then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index 1875881..6abaa19 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -3,7 +3,6 @@ import { useSelector, useDispatch } from 'react-redux'; import classes from "./Mapping.module.css" import axios from "axios"; import { BusActions } from "../../store/Bus-slice"; -import { MapActions } from "../../store/Map-slice"; const Mapping = () => { const dispatch = useDispatch() diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 2476e9e..3603e94 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -1,7 +1,6 @@ import SubwayButton from "./SubwayButton.js"; import SubwayInput from "./SubwayInput.js"; import styled from "styled-components"; -import axios from "axios" import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice.js"; import { api } from "../../Auth/Api.js"; @@ -18,7 +17,7 @@ const StyledForm = styled.form` const SubwayForm = () => { const dispatch = useDispatch(); const SubmitSubwayStation = (value) => { - axios.get(`subway/stNm/${value}`) + api.get(`subway/stNm/${value}`) .then(res => { const { data } = res; dispatch(SubwayActions.addSubwayInfo(data)) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js new file mode 100644 index 0000000..c2b3f0c --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -0,0 +1,19 @@ +import styled from "styled-components"; + +const StyledInfo = styled.div` + +width: 788px; +height: 710px; +background-color:black; +` + +const SubwayInfo = () => { + return ( + + + + ) +} + + +export default SubwayInfo \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index e9a30f2..1e1dd9a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -1,6 +1,9 @@ import styled from "styled-components"; -import axios from "axios"; +import { api } from "../../Auth/Api.js"; import { Link } from "react-router-dom"; +import { SubwayActions } from "../../../store/Subway-slice.js"; +import { useDispatch } from "react-redux"; + const StyldeSubwayItems = styled.li` display:flex; @@ -9,6 +12,7 @@ align-items:center; width:700px; list-style:none; border-bottom: 1px solid #D2D2D2; +color:black; :hover{ cursor: pointer; } @@ -26,19 +30,19 @@ border-bottom: 1px solid #D2D2D2; font-size: 24px; line-height: 29px; } - ` const SubwayItems = ({ items }) => { + const dispatch = useDispatch(); const clickSubway = () => { - axios.get("/subway/stationInfo/:stinCd/:stNm") + api.get("/subway/stationInfo/:stinCd/:stNm") .then(res => { const { data } = res; - console.log(data.body[0]); + dispatch(SubwayActions.saveSubway(data.body[0])); }) } return ( - +

    {items.stNm}

    {items.lineNum}

    diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index b4e5bf5..ca9d16e 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -15,6 +15,9 @@ background: #FFFFFF; border: 4px solid #9255F5; padding:0; overflow:auto; +a{ + text-decoration:none; +} ` const SubwayList = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index 466e9a4..371fcae 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -1,5 +1,6 @@ import styled from "styled-components"; import { Link } from "react-router-dom"; +import { api } from "../../Auth/Api.js"; const StyleMenuBar = styled.ul` width:100%; @@ -29,12 +30,20 @@ a{ ` const SubwayBar = () => { + const submitBahth = () => { + api.get("/subway/liftMove/stinCd/:stinCd") + .then(res => { + const { data } = res; + console.log(data.body[0]) + } + ) + } return (
  • 엘리베이터 위치
  • 환승 이동 경로
  • -
  • 휠체어 관련 위치
  • +
  • 휠체어 관련 위치
  • ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index 68d8b4a..cfa8a58 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -1,18 +1,46 @@ import styled from "styled-components"; +import { useSelector } from "react-redux"; const StyledPanel = styled.div` +display:flex; +flex-direction:column; +align-items:center; width: 729px; height: 821px; background-color:white; border: 4px solid #9255F5; - +.name{ + display:flex; + justify-content:center; + width:80%; + height:auto; + font-weight: 600; + font-size: 50px; + border-bottom:2px solid; +} +.info{ + margin-left:50px; + width:100%; + display:flex; + flex-direction:column; + align-items:start; + font-weight: 600; + font-size: 30px; +} ` const SubwayPanel = () => { + const subway = useSelector(state => state.subway.subwayInfo) return ( - +
    +

    {subway.stinNm}

    +
    +
    +

    {subway.lonmAdr}

    +

    {subway.roadNmAdr}

    +
    ) } diff --git a/Backend/Frontend/creative/src/index.js b/Backend/Frontend/creative/src/index.js index 8596452..95c573a 100644 --- a/Backend/Frontend/creative/src/index.js +++ b/Backend/Frontend/creative/src/index.js @@ -1,14 +1,20 @@ import { createRoot } from 'react-dom/client'; import App from './App.js'; import { Provider } from 'react-redux'; +import { PersistGate } from "redux-persist/integration/react"; +import { persistStore } from 'redux-persist' import store from './store/index'; import reportWebVitals from './reportWebVitals'; const container = document.getElementById('root'); const root = createRoot(container); +let persistor = persistStore(store); + root.render( - + + + ); diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index 5d741fa..fc17927 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -1,17 +1,14 @@ -import Mapping from "../../component/map/Mapping.js" -import classes from "./SubwayDetailPage.module.css" +import classes from "./SubwayBathchair.module.css" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo" + const SubwayBathChairPage = () => { return ( -
    +
    +
    -
    -
    - - -
    -
    +
    ) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css new file mode 100644 index 0000000..2a45795 --- /dev/null +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css @@ -0,0 +1,5 @@ +.main { + display: flex; + flex-direction: column; + width: 800px; +} \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchaire.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchaire.module.css deleted file mode 100644 index e69de29..0000000 diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css index e69de29..3e3ae62 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css @@ -0,0 +1,11 @@ +.main { + width: 100%; + display: flex; + justify-content: space-evenly; +} + +.subwaymeubar { + display: flex; + flex-direction: column; + align-items: end; +} \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 6173510..7b22fc5 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -1,5 +1,5 @@ import Mapping from "../../component/map/Mapping.js" -import classes from "./SubwayDetailPage.module.css" +import classes from "./SubwayTransfer.module.css" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" const SubwayTransferPage = () => { diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css index e69de29..3e3ae62 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css @@ -0,0 +1,11 @@ +.main { + width: 100%; + display: flex; + justify-content: space-evenly; +} + +.subwaymeubar { + display: flex; + flex-direction: column; + align-items: end; +} \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/Bus-slice.js b/Backend/Frontend/creative/src/store/Bus-slice.js index 06d694d..7416cdf 100644 --- a/Backend/Frontend/creative/src/store/Bus-slice.js +++ b/Backend/Frontend/creative/src/store/Bus-slice.js @@ -20,9 +20,6 @@ const BusSlice = createSlice({ refreshBus(state, action) { state.busId = action.payload }, - refreshBus(state, action) { - state.busId = action.payload - }, addBusInfo(state, action) { state.buslist = action.payload state.stationCheck = false diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index 93922be..d4f490f 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -5,15 +5,15 @@ const SubwaySlice = createSlice({ initialState: { subway: [], subwayCheck: false, - subwayCheck2: true + subwayInfo: {} }, reducers: { addSubwayInfo(state, action) { state.subway = action.payload state.subwayCheck = true }, - clickSubway(state, action) { - state.subwayCheck2 = false; + saveSubway(state, action) { + state.subwayInfo = action.payload } } }) diff --git a/Backend/Frontend/creative/src/store/index.js b/Backend/Frontend/creative/src/store/index.js index 2a78689..ca8c1e9 100644 --- a/Backend/Frontend/creative/src/store/index.js +++ b/Backend/Frontend/creative/src/store/index.js @@ -2,10 +2,25 @@ import { configureStore } from "@reduxjs/toolkit" import BusReducer from "./Bus-slice.js"; import MapReducer from "./Map-slice.js" import SubwayReducer from "./Subway-slice.js" +import storage from 'redux-persist/lib/storage' +import { combineReducers } from "@reduxjs/toolkit"; +import { persistReducer } from "redux-persist"; +const reducer = combineReducers({ + bus: BusReducer, map: MapReducer, subway: SubwayReducer +}) + +const persistConfig = { + key: 'root', + storage +} + +const persistedReducer = persistReducer(persistConfig, reducer) + const store = configureStore({ - reducer: { bus: BusReducer, map: MapReducer, subway: SubwayReducer } + reducer: persistedReducer }); -export default store \ No newline at end of file + +export default store From 33d4fb130800afdc1546b70472755feaa7a325b0 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Mon, 5 Dec 2022 03:24:38 +0900 Subject: [PATCH 08/32] =?UTF-8?q?feat.=20main=ED=99=94=EB=A9=B4=20bus?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=94=94=EC=9E=90=EC=9D=B8=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 변경 했지만 반응형 추가 필요 --- Backend/Frontend/creative/src/App.js | 8 ++-- .../creative/src/component/Auth/Api.js | 2 +- .../bus-component/busform/BusForm.js | 6 +-- .../bus-component/busform/BusInput.js | 2 +- .../bus-component/buslist/BusItem.js | 23 +++++++--- .../bus-component/buslist/BusList.js | 13 +++--- .../bus-component/buslist/RefreshButton.js | 28 +++---------- .../bus-component/buslist/StationItem.js | 2 +- .../bus-component/busnumber/BusNumber.js | 32 ++++++++++++++ .../bus-component/buspanel/BusPanel.js | 32 ++++++++++++++ .../creative/src/component/header/Header.js | 42 +++++++++++++++++++ .../src/component/map/Mapping.module.css | 4 +- .../creative/src/component/menu/MenuBar.js | 15 ++++--- .../src/component/menu/MenuBusButton.js | 37 ++++++++++++++++ .../creative/src/component/menu/MenuButton.js | 27 ------------ .../creative/src/component/menu/MenuExplan.js | 38 ++++++++++------- .../src/component/menu/MenuSubwayButton.js | 36 ++++++++++++++++ .../subway-component/subwayform/SubwayForm.js | 2 +- .../subwaylist/SubwayItems.js | 20 +++------ .../subway-component/subwaylist/SubwayList.js | 9 ++-- .../subwaymenubar/SubwayBar.js | 2 +- Backend/Frontend/creative/src/index.js | 7 +--- Backend/Frontend/creative/src/page/BusPage.js | 20 +++++---- .../creative/src/page/BusPage.module.css | 20 ++++----- .../Frontend/creative/src/page/MainPage.js | 7 +--- .../creative/src/page/MainPage.module.css | 19 ++++++--- .../src/page/subwaypage/SubwayDetailPage.js | 14 +++++++ .../Frontend/creative/src/store/Bus-slice.js | 8 ++++ .../Frontend/creative/src/store/Map-slice.js | 6 ++- .../creative/src/store/Subway-slice.js | 5 +++ Backend/Frontend/creative/src/store/index.js | 12 +----- Backend/backend.js | 5 +-- 32 files changed, 337 insertions(+), 166 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js create mode 100644 Backend/Frontend/creative/src/component/header/Header.js create mode 100644 Backend/Frontend/creative/src/component/menu/MenuBusButton.js delete mode 100644 Backend/Frontend/creative/src/component/menu/MenuButton.js create mode 100644 Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js diff --git a/Backend/Frontend/creative/src/App.js b/Backend/Frontend/creative/src/App.js index 571743c..1a8bad9 100644 --- a/Backend/Frontend/creative/src/App.js +++ b/Backend/Frontend/creative/src/App.js @@ -14,10 +14,10 @@ function App() { } /> } /> } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> ); diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/Auth/Api.js index 42a71ec..e4b23ab 100644 --- a/Backend/Frontend/creative/src/component/Auth/Api.js +++ b/Backend/Frontend/creative/src/component/Auth/Api.js @@ -1,6 +1,6 @@ import axios from "axios" export const api = axios.create({ - baseURL: "http://34.132.35.80:3005/" + baseURL: "http://34.168.52.103:3005/" }) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index ba9ec9c..954104d 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -2,7 +2,7 @@ import BusButton from "./BusButton"; import BusInput from "./BusInput"; import styled from "styled-components"; import axios from "axios" -import { api } from "../../Auth/Api"; +import { api } from "../../auth/Api"; import { MapActions } from "../../../store/Map-slice"; import { BusActions } from "../../../store/Bus-slice"; import { useDispatch } from "react-redux"; @@ -10,9 +10,9 @@ import { useDispatch } from "react-redux"; const StyledForm = styled.form` display:flex; - width: 735px; + width: 727px; height: 98px; - border: 4px solid #CDD029 + border: 4px solid #CDD029; ` diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js index c71ead9..0ab79c9 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js @@ -10,7 +10,7 @@ border:0; const BusInput = () => { return ( - + ) } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index 3d3003b..578574d 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -10,6 +10,14 @@ border-bottom: 1px solid #D2D2D2; :hover{ cursor: pointer; } +a{ + width:700px; + display:flex; + justify-content:space-around; + align-items:center; + color:black; + text-decoration:none; +} div{ display:flex; align-items:center; @@ -39,14 +47,17 @@ div{ ` const BusItem = (props) => { - const { busrouteAbrv, adirection, arrmsg1 } = props.items; + const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; + console.log(busrouteid) return ( -
    -

    {busrouteAbrv}

    -

    {adirection}방면

    -
    -

    {arrmsg1}

    + +
    +

    {busrouteAbrv}

    +

    {adirection}방면

    +
    +

    {arrmsg1}

    +
    ) } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js index 868dacc..a01b8e6 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js @@ -2,18 +2,19 @@ import styled from "styled-components"; import BusItem from "./BusItem"; import StationItem from "./StationItem" import { useSelector } from "react-redux"; -import RefreshButton from "./RefreshButton"; +import BusNumber from "../busnumber/BusNumber"; const StyledList = styled.ul` display:flex; flex-direction:column; align-items: center; box-sizing: border-box; -width: 744px; -height: 590px; +width: 735px; +height: 640px; background: #FFFFFF; -border: 4px solid #CDD029; +border: 4px solid #CDD029 ; padding:0; +margin:0; overflow:auto; ` @@ -24,6 +25,7 @@ const BusList = () => { const busCheck = useSelector(state => state.bus.busCheck) return ( + {(busCheck || stationCheck) && } {stationCheck && stationInfo.map(element => ( { ))} {busCheck && busInfo.map(element => ( ))} - {busCheck && } ) } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index 0eae678..518846b 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -1,36 +1,18 @@ import styled from "styled-components"; import axios from "axios"; +import { api } from "../../auth/Api.js" import { useSelector, useDispatch } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; const StyledRefreshButton = styled.button` -width:65px; -height:65px; +width:50px; +height:50px; border: 0; border-radius:50px; -position:sticky; -bottom:20px; +background-color:transparent; img{ width:100%; } -:hover{ - width:65px; - height:65px; - background-color:#dcdcdc; -} -img:hover{ - -webkit-animation:spin 0.4s linear; - -moz-animation:spin 0.4 linear; - animation:spin 0.4s linear; -} -:visited{ - width:65px; - height:65px; - background-color:#dcdcdc; -} -@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } -@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } -@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } ` @@ -42,7 +24,7 @@ const RefreshButton = () => { }; const Refresh = () => { clickCheck.check = true; - axios.get(`/bus/arsId/${busId}`, { + api.get(`/bus/arsId/${busId}`, { }).then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index a59e578..53557e9 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -1,6 +1,6 @@ import styled from "styled-components"; import axios from "axios" -import { api } from "../../Auth/Api"; +import { api } from "../../auth/Api"; import { useDispatch, useSelector } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; import { MapActions } from "../../../store/Map-slice"; diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js new file mode 100644 index 0000000..2502713 --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js @@ -0,0 +1,32 @@ +import styled from "styled-components"; +import RefreshButton from "../buslist/RefreshButton"; +import { useSelector } from "react-redux"; + +const StyledBusNumber = styled.header` +display:flex; +justify-content: space-between; +line-height: 60px; +align-items:center; +height:50px; +width:90%; +height:auto; +font-size:30px; +padding:0; +p{ + font-weight:bold; + margin:0; +} +` + +const BusNumber = (props) => { + const busCheck = useSelector(state => state.bus.busCheck) + return ( + +

    {props.text}{props.count}

    + + {busCheck && } +
    + ) +} + +export default BusNumber \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js new file mode 100644 index 0000000..0f0ce6b --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js @@ -0,0 +1,32 @@ +import styled from "styled-components"; + + +const StyledBusPanel = styled.div` +display:flex; +flex-direction:column; +align-items:center; +text-align:center; +width: 348px; +height: 795x; +margin-right:30px; +background: linear-gradient(270.31deg, #999C0D -27.07%, rgba(205, 208, 41, 0) 206.73%); +.first{ + font-size: 50px; + color: #FFFFFF; +} +.second{ + font-size: 30px; + color: #FFFFFF; +} +` + +const BusPanel = () => { + return ( + +

    저상버스


    +

    저상버스가 오는 정류장만 표시됩니다.

    +
    + ) +} + +export default BusPanel \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.js new file mode 100644 index 0000000..fafd6f4 --- /dev/null +++ b/Backend/Frontend/creative/src/component/header/Header.js @@ -0,0 +1,42 @@ +import styled from "styled-components"; +import { Link } from "react-router-dom"; +import { useDispatch } from "react-redux"; +import { BusActions } from "../../store/Bus-slice"; +import { SubwayActions } from "../../store/Subway-slice"; +import { MapActions } from "../../store/Map-slice"; + +const StyledHeader = styled.header` +display:flex; +align-items:center; +font-family: 'GmarketSansMedium'; +font-weight: 700; +font-size: 60px; +background-color:#FFFFFF; +border-bottom: 2px solid #EBEBEB; +width:95%; +height:100px; +a{ + color:#000000; + text-decoration:none; +} +` + +const Header = () => { + const dispatch = useDispatch(); + + const reduxReset = () => { + console.log("asd") + dispatch(BusActions.initialState()) + dispatch(SubwayActions.initialState()) + dispatch(MapActions.initialization()) + } + return ( + + + 타자 + + + ) +} + +export default Header \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/map/Mapping.module.css b/Backend/Frontend/creative/src/component/map/Mapping.module.css index 017ee49..13648f7 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.module.css +++ b/Backend/Frontend/creative/src/component/map/Mapping.module.css @@ -1,5 +1,5 @@ .map { - width: 780px; - height: 713px; + width: 698px; + height: 734px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.js b/Backend/Frontend/creative/src/component/menu/MenuBar.js index 5820679..588809e 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.js @@ -1,21 +1,24 @@ -import MenuButton from "./MenuButton" +import MenuBusButton from "./MenuBusButton" +import MenuSubwayButton from "./MenuSubwayButton" import { Link } from "react-router-dom" import styled from "styled-components" +import MenuExplan from "./MenuExplan" const StyleMenuBar = styled.div` display:flex; -flex-direction:column; justify-content: space-between; -width: 800px; -height: 535px; +width: 100%; +padding-top:5vw; +height: auto; ` const MenuBar = () => { return ( - - + + + ) } diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js new file mode 100644 index 0000000..b6802f5 --- /dev/null +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -0,0 +1,37 @@ +import styled from 'styled-components' +import { useDispatch } from 'react-redux' +import { MapActions } from '../../store/Map-slice' + +const StyledButton = styled.button` +width: 442.5px; +height: 537px; +font-size: 3vw; +color: #FFFFFF; +font-family: 'Pretendard-Regular'; +src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); +font-weight: 400; +font-style: normal; +background: rgba(205, 208, 41, 0.8); +box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); +border-radius: 0px 20px 20px 0px; +:hover{ + cursor: pointer; +} +` + + +const MenuBusButton = () => { + const dispatch = useDispatch(); + + const initialization = () => { + dispatch(MapActions.initialization()) + } + return ( + + 저상버스 + + ) + +} + +export default MenuBusButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/MenuButton.js b/Backend/Frontend/creative/src/component/menu/MenuButton.js deleted file mode 100644 index 5079fd9..0000000 --- a/Backend/Frontend/creative/src/component/menu/MenuButton.js +++ /dev/null @@ -1,27 +0,0 @@ -import styled from 'styled-components' -import { useDispatch } from 'react-redux' -import { MapActions } from '../../store/Map-slice' - -const StyledButton = styled.button` -width: 800px; -height: 240px; -border-radius: 30px; -font-size: 500%; -line-height: 125px; -` - - -const MenuButton = (props) => { - const dispatch = useDispatch(); - const initialization = () => { - dispatch(MapActions.initialization()) - } - return ( - - {props.name} - - ) - -} - -export default MenuButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/MenuExplan.js b/Backend/Frontend/creative/src/component/menu/MenuExplan.js index f03f785..011d9ce 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuExplan.js +++ b/Backend/Frontend/creative/src/component/menu/MenuExplan.js @@ -1,29 +1,35 @@ import styled from "styled-components"; const StyleMenuExplan = styled.div` -width: 100%; -height: 231px; -font-family: 'Pretendard'; -font-style: normal; -font-weight: 700; -font-size: 50px; -line-height: 60px; -letter-spacing: 0.05em; -font-color: #000000; -span{ - font-size: 35px; - font-color:#7C7C7C; +display:flex; +flex-direction:column; +align-items:center; +color:#E2E2E2; +.first{ + font-family: 'GmarketSansMedium'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/GmarketSansMedium.woff') format('woff'); + font-weight: normal; + font-style: normal; + font-weight: 700; + font-size: 70px; +} +.second{ + display:flex; + text-align:center; + font-family: 'Pretendard-Regular'; + src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); + font-weight: 400; + font-style: normal; + font-size: 40px; } - ` const MenuExplan = () => { return ( - 교통약자분들을 위해
    - 편리하고 정확한
    - 대중교통 정보 제공합니다. +

    편리하고 쉽게, 타자.

    +

    교통약자도 대중교통을 쉽게 탈 수 있을때까지.
    교통약자에게 필요한 서비스를 제공합니다.

    ) } diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js new file mode 100644 index 0000000..cde2238 --- /dev/null +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -0,0 +1,36 @@ +import styled from 'styled-components' +import { useDispatch } from 'react-redux' +import { MapActions } from '../../store/Map-slice' + +const StyledButton = styled.button` +width: 442.5px; +height: 537px; +font-size: 3vw; +color: #FFFFFF; +font-family: 'Pretendard-Regular'; +src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); +font-weight: 400; +font-style: normal; +background: rgba(146, 85, 245, 0.8); +box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); +border-radius: 20px 0px 0px 20px; +:hover{ + cursor: pointer; +} +` + + +const MenuSubwayButton = () => { + const dispatch = useDispatch(); + const initialization = () => { + dispatch(MapActions.initialization()) + } + return ( + + 지하철
    편의시설 +
    + ) + +} + +export default MenuSubwayButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 3603e94..64da1d7 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -3,7 +3,7 @@ import SubwayInput from "./SubwayInput.js"; import styled from "styled-components"; import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice.js"; -import { api } from "../../Auth/Api.js"; +import { api } from "../../auth/Api.js"; const StyledForm = styled.form` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 1e1dd9a..eb705a2 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -1,8 +1,6 @@ import styled from "styled-components"; -import { api } from "../../Auth/Api.js"; import { Link } from "react-router-dom"; -import { SubwayActions } from "../../../store/Subway-slice.js"; -import { useDispatch } from "react-redux"; + const StyldeSubwayItems = styled.li` @@ -33,19 +31,13 @@ color:black; ` const SubwayItems = ({ items }) => { - const dispatch = useDispatch(); - const clickSubway = () => { - api.get("/subway/stationInfo/:stinCd/:stNm") - .then(res => { - const { data } = res; - dispatch(SubwayActions.saveSubway(data.body[0])); - }) - } + + return ( - - + +

    {items.stNm}

    -

    {items.lineNum}

    +

    {items.lnNm}

    ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index ca9d16e..730de71 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -27,10 +27,11 @@ const SubwayList = () => { console.log(subwayCheck) return ( - {subwayCheck && } + {subwayCheck && subway.map(elemnet => + )} ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index 371fcae..2275526 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -1,6 +1,6 @@ import styled from "styled-components"; import { Link } from "react-router-dom"; -import { api } from "../../Auth/Api.js"; +import { api } from "../../auth/Api.js"; const StyleMenuBar = styled.ul` width:100%; diff --git a/Backend/Frontend/creative/src/index.js b/Backend/Frontend/creative/src/index.js index 95c573a..ad5c4c7 100644 --- a/Backend/Frontend/creative/src/index.js +++ b/Backend/Frontend/creative/src/index.js @@ -1,20 +1,15 @@ import { createRoot } from 'react-dom/client'; import App from './App.js'; import { Provider } from 'react-redux'; -import { PersistGate } from "redux-persist/integration/react"; -import { persistStore } from 'redux-persist' import store from './store/index'; import reportWebVitals from './reportWebVitals'; const container = document.getElementById('root'); const root = createRoot(container); -let persistor = persistStore(store); root.render( - - - + ); diff --git a/Backend/Frontend/creative/src/page/BusPage.js b/Backend/Frontend/creative/src/page/BusPage.js index d5ec0c1..10859cb 100644 --- a/Backend/Frontend/creative/src/page/BusPage.js +++ b/Backend/Frontend/creative/src/page/BusPage.js @@ -2,20 +2,24 @@ import Mapping from "../component/map/Mapping.js" import BusForm from "../component/bus-component/busform/BusForm.js" import BusList from "../component/bus-component/buslist/BusList.js" import classes from "./BusPage.module.css" +import Header from "../component/header/Header.js" +import BusPanel from "../component/bus-component/buspanel/BusPanel.js" const BusPage = () => { - return (
    -
    -
    저상버스
    + return ( +
    +
    -
    - - + +
    +
    + + +
    +
    -
    -
    ) } diff --git a/Backend/Frontend/creative/src/page/BusPage.module.css b/Backend/Frontend/creative/src/page/BusPage.module.css index 7de4478..441e9f8 100644 --- a/Backend/Frontend/creative/src/page/BusPage.module.css +++ b/Backend/Frontend/creative/src/page/BusPage.module.css @@ -1,23 +1,23 @@ -header { +.main { + display: flex; + justify-content: start; width: 100%; - font-size: 80px; - line-height: 94px; - padding-top: 1vw; - padding-bottom: 1.5vw; } -.main { +.buspage { display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; } -.buspage { +.busmain { display: flex; - justify-content: space-evenly; + margin-top: 20px; } .buslist { display: flex; flex-direction: column; - justify-content: space-evenly; - margin-right: 2vw; + margin-right: 30px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/MainPage.js b/Backend/Frontend/creative/src/page/MainPage.js index e276f3b..f844341 100644 --- a/Backend/Frontend/creative/src/page/MainPage.js +++ b/Backend/Frontend/creative/src/page/MainPage.js @@ -1,14 +1,11 @@ import MenuBar from "../component/menu/MenuBar.js"; -import MenuExplan from "../component/menu/MenuExplan.js"; import classes from "./MainPage.module.css" -import MenuHeader from "../component/menu/MenuHeader.js"; - +import Header from "../component/header/Header.js"; const Mainpage = () => { return (
    - +
    -
    diff --git a/Backend/Frontend/creative/src/page/MainPage.module.css b/Backend/Frontend/creative/src/page/MainPage.module.css index c7cf540..866ba21 100644 --- a/Backend/Frontend/creative/src/page/MainPage.module.css +++ b/Backend/Frontend/creative/src/page/MainPage.module.css @@ -1,7 +1,19 @@ +html, +body { + margin: 0px; + padding: 0px; +} + .main { display: flex; flex-direction: column; - padding: 2.5rem; + align-items: center; +} + +.bottom { + width: 100%; + height: 85vh; + background: rgba(40, 40, 40, 0.8); } .main { @@ -61,11 +73,6 @@ } -.bottom { - display: flex; - justify-content: space-between; -} - diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 68e9564..ec33936 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -2,8 +2,22 @@ import Mapping from "../../component/map/Mapping.js" import classes from "./SubwayDetailPage.module.css" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import { useParams } from "react-router-dom" +import { useEffect } from "react" +import { api } from "../../component/auth/Api.js" + const SubwayDetailPage = () => { + const params = useParams() + useEffect(() => { + const stCd = params.stCd + const stNm = params.stNm + const getDetatl = async () => { + await api.get(`/subway/stationInfo/${stCd}/${stNm}`) + .then(res => console.log(res.data)) + } + getDetatl() + }) return (
    diff --git a/Backend/Frontend/creative/src/store/Bus-slice.js b/Backend/Frontend/creative/src/store/Bus-slice.js index 7416cdf..27055ff 100644 --- a/Backend/Frontend/creative/src/store/Bus-slice.js +++ b/Backend/Frontend/creative/src/store/Bus-slice.js @@ -27,6 +27,14 @@ const BusSlice = createSlice({ }, ClickStation(state, action) { state.currentStation = action.payload + }, + initialState(state) { + state.buslist = []; + state.station = []; + state.busId = ""; + state.stationCheck = false; + state.busCheck = false; + state.currentStation = ""; } } }); diff --git a/Backend/Frontend/creative/src/store/Map-slice.js b/Backend/Frontend/creative/src/store/Map-slice.js index b4ebbfd..412a99b 100644 --- a/Backend/Frontend/creative/src/store/Map-slice.js +++ b/Backend/Frontend/creative/src/store/Map-slice.js @@ -18,7 +18,11 @@ const MapSlice = createSlice({ state.marker = action.payload }, initialization(state) { - state.marker = [] + state.position = { + tmY: 37.55068403524657, + tmX: 127.07411251036736 + }; + state.marker = []; } } }) diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index d4f490f..ee0e98c 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -14,6 +14,11 @@ const SubwaySlice = createSlice({ }, saveSubway(state, action) { state.subwayInfo = action.payload + }, + initialState(state) { + state.subway = []; + state.subwayCheck = false; + state.subwayInfo = {}; } } }) diff --git a/Backend/Frontend/creative/src/store/index.js b/Backend/Frontend/creative/src/store/index.js index ca8c1e9..63ff32d 100644 --- a/Backend/Frontend/creative/src/store/index.js +++ b/Backend/Frontend/creative/src/store/index.js @@ -2,24 +2,16 @@ import { configureStore } from "@reduxjs/toolkit" import BusReducer from "./Bus-slice.js"; import MapReducer from "./Map-slice.js" import SubwayReducer from "./Subway-slice.js" -import storage from 'redux-persist/lib/storage' import { combineReducers } from "@reduxjs/toolkit"; -import { persistReducer } from "redux-persist"; + const reducer = combineReducers({ bus: BusReducer, map: MapReducer, subway: SubwayReducer }) -const persistConfig = { - key: 'root', - storage -} - -const persistedReducer = persistReducer(persistConfig, reducer) - const store = configureStore({ - reducer: persistedReducer + reducer: reducer }); diff --git a/Backend/backend.js b/Backend/backend.js index ccd4ea6..37e398e 100644 --- a/Backend/backend.js +++ b/Backend/backend.js @@ -3,8 +3,6 @@ const app = express(); const port = 3005; const path = require('path'); const cors = require('cors'); -const mysql = require('mysql'); -const SQL_info = require('./Key/SQL_info.json') const busRouter = require('./routes/busdata'); const subwayRouter = require('./routes/subwaydata'); @@ -39,8 +37,7 @@ let corsOptions = { } app.use(cors(corsOptions)); - -//app.use(express.static(path.join(__dirname, './Frontend/creative/build'))) +app.use(express.static(path.join(__dirname, './Frontend/creative/build'))) app.use('/bus', busRouter); app.use('/subway', subwayRouter); From d2b5db67702e94fb5aa7951a3ceb828f10829f64 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Mon, 5 Dec 2022 22:05:22 +0900 Subject: [PATCH 09/32] =?UTF-8?q?feat.=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=ED=8F=B0=ED=8A=B8,=20=EB=B2=84=EC=8A=A4=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=96=B4=EB=8A=90=20=EC=A0=95=EB=8F=84=20=EC=99=84?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 디자인 폰트, 버스 페이지 80% 완성, 반응형으로 만들기 수정 --- .../bus-component/busform/BusForm.js | 2 +- .../bus-component/busform/BusInput.js | 1 + .../bus-component/buslist/BusItem.js | 15 ++-- .../bus-component/buslist/RefreshButton.js | 3 + .../bus-component/buslist/StationItem.js | 12 ++-- .../bus-component/busnumber/BusNumber.js | 2 +- .../bus-component/buspanel/BusPanel.js | 3 +- .../creative/src/component/header/Header.js | 4 +- .../creative/src/component/map/Mapping.js | 4 +- .../creative/src/component/menu/MenuBar.js | 4 +- .../src/component/menu/MenuBusButton.js | 5 +- .../creative/src/component/menu/MenuExplan.js | 8 +-- .../src/component/menu/MenuSubwayButton.js | 4 +- .../subwaydetail/SubwayDetail.js | 48 +++++++++++++ .../subway-component/subwayform/SubwayForm.js | 2 +- .../subwayform/SubwayInput.js | 1 + .../subwaylist/SubwayItems.js | 70 +++++++++++++++---- .../subway-component/subwaylist/SubwayList.js | 11 +-- .../subwaynumber/SubwayNumber.js | 30 ++++++++ .../subwaypanel/SubwayPanel.js | 49 +++++-------- .../creative/src/page/BusPage.module.css | 2 +- .../creative/src/page/MainPage.module.css | 30 ++++---- .../src/page/subwaypage/SubwayDetailPage.js | 4 +- .../subwaypage/SubwayDetailPage.module.css | 20 ++++-- .../src/page/subwaypage/SubwayPage.js | 9 ++- .../src/page/subwaypage/SubwayPage.module.css | 22 +++--- .../creative/src/store/Subway-slice.js | 6 +- 27 files changed, 247 insertions(+), 124 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index 954104d..35557e7 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -19,11 +19,11 @@ const StyledForm = styled.form` const BusForm = () => { const dispatch = useDispatch(); const SubmitBusStation = (value) => { - api.get(`/bus/stNm/${value}`, { }).then(res => { const { data } = res; + dispatch(BusActions.initialState()) dispatch(MapActions.makerchacking(data)) dispatch(BusActions.addStationInfo(data)) dispatch(MapActions.positioning(data[0])) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js index 0ab79c9..5c05527 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js @@ -6,6 +6,7 @@ height: 60px; padding: 15px; font-size: 50px; border:0; +font-family: 'Pretendard-Regular'; ` const BusInput = () => { diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index 578574d..645ec3a 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -2,18 +2,19 @@ import styled from "styled-components"; const StyledBusItem = styled.li` display:flex; -justify-content:space-around; +justify-content:space-between; align-items:center; -width:700px; +width:100%; list-style:none; border-bottom: 1px solid #D2D2D2; +font-family: 'Pretendard-Regular'; :hover{ cursor: pointer; } a{ - width:700px; + width:100%; display:flex; - justify-content:space-around; + justify-content:space-between; align-items:center; color:black; text-decoration:none; @@ -23,6 +24,7 @@ div{ align-items:center; } .Name{ + padding-left:20px; font-family: 'Pretendard'; font-style: normal; font-weight: 600; @@ -37,6 +39,7 @@ div{ line-height: 29px; } .id{ + padding-right:20px; font-family: 'Pretendard'; font-style: normal; font-weight: 600; @@ -48,10 +51,10 @@ div{ const BusItem = (props) => { const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; - console.log(busrouteid) + console.log(busrouteid); return ( - +

    {busrouteAbrv}

    {adirection}방면

    diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index 518846b..be4aa8d 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -13,6 +13,9 @@ background-color:transparent; img{ width:100%; } +:hover{ + cursor: pointer; +} ` diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 53557e9..e089ebb 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -44,7 +44,7 @@ const StationItem = (props) => { return ( - < p className="Name" > {stNm}

    +

    {stNm}

    {arsId}

    ) @@ -53,26 +53,28 @@ const StationItem = (props) => { const StyledStationItem = styled.li` display:flex; -justify-content:space-around; +justify-content:space-between; width:100%; list-style:none; border-bottom: 1px solid #D2D2D2; -background-color:${props => (props.color ? "white" : "#CDD029")}; - +background-color:${props => (props.color ? "#FFFFFF" : "#CDD029")}; +font-family: 'Pretendard-Regular'; :hover{ cursor: pointer; } .Name{ + padding-left:20px; font-family: 'Pretendard'; font-style: normal; font-weight: 600; font-size: 40px; line-height: 60px; - color:${props => (props.color ? "black" : "white")}; + color:${props => (props.color ? "#000000" : "#FFFFFF")}; } .id{ + padding-right:20px; font-family: 'Pretendard'; font-style: normal; font-weight: 600; diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js index 2502713..90cfe81 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js @@ -11,6 +11,7 @@ height:50px; width:90%; height:auto; font-size:30px; +font-family: 'Pretendard-Regular'; padding:0; p{ font-weight:bold; @@ -23,7 +24,6 @@ const BusNumber = (props) => { return (

    {props.text}{props.count}

    - {busCheck && }
    ) diff --git a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js index 0f0ce6b..d234384 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js +++ b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js @@ -9,6 +9,7 @@ text-align:center; width: 348px; height: 795x; margin-right:30px; +font-family: 'Pretendard-Regular'; background: linear-gradient(270.31deg, #999C0D -27.07%, rgba(205, 208, 41, 0) 206.73%); .first{ font-size: 50px; @@ -24,7 +25,7 @@ const BusPanel = () => { return (

    저상버스


    -

    저상버스가 오는 정류장만 표시됩니다.

    +

    저상버스가 오는
    정류장만 표시됩니다.

    ) } diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.js index fafd6f4..e8989ea 100644 --- a/Backend/Frontend/creative/src/component/header/Header.js +++ b/Backend/Frontend/creative/src/component/header/Header.js @@ -13,8 +13,8 @@ font-weight: 700; font-size: 60px; background-color:#FFFFFF; border-bottom: 2px solid #EBEBEB; -width:95%; -height:100px; +width:1728px; +height:148px; a{ color:#000000; text-decoration:none; diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index 6abaa19..fe34fdf 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -31,9 +31,9 @@ const Mapping = () => { clickable: true, image: markerImage }) - window.kakao.maps.event.addListener(marker, 'click', () => { + /*window.kakao.maps.event.addListener(marker, 'click', () => { submitStationId(element.arsId) - }) + })*/ marker.setMap(map) }); } diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.js b/Backend/Frontend/creative/src/component/menu/MenuBar.js index 588809e..e1c558b 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.js @@ -7,9 +7,9 @@ import MenuExplan from "./MenuExplan" const StyleMenuBar = styled.div` display:flex; justify-content: space-between; -width: 100%; +width: 1920px; padding-top:5vw; -height: auto; +height: 633px; ` diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js index b6802f5..274f27e 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -8,12 +8,11 @@ height: 537px; font-size: 3vw; color: #FFFFFF; font-family: 'Pretendard-Regular'; -src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); -font-weight: 400; -font-style: normal; background: rgba(205, 208, 41, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 0px 20px 20px 0px; + + :hover{ cursor: pointer; } diff --git a/Backend/Frontend/creative/src/component/menu/MenuExplan.js b/Backend/Frontend/creative/src/component/menu/MenuExplan.js index 011d9ce..874019c 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuExplan.js +++ b/Backend/Frontend/creative/src/component/menu/MenuExplan.js @@ -4,12 +4,10 @@ const StyleMenuExplan = styled.div` display:flex; flex-direction:column; align-items:center; +width: auto; color:#E2E2E2; .first{ font-family: 'GmarketSansMedium'; - src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/GmarketSansMedium.woff') format('woff'); - font-weight: normal; - font-style: normal; font-weight: 700; font-size: 70px; } @@ -17,11 +15,9 @@ color:#E2E2E2; display:flex; text-align:center; font-family: 'Pretendard-Regular'; - src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); - font-weight: 400; - font-style: normal; font-size: 40px; } + ` const MenuExplan = () => { diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index cde2238..4c3561b 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -8,12 +8,10 @@ height: 537px; font-size: 3vw; color: #FFFFFF; font-family: 'Pretendard-Regular'; -src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); -font-weight: 400; -font-style: normal; background: rgba(146, 85, 245, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 20px 0px 0px 20px; + :hover{ cursor: pointer; } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js new file mode 100644 index 0000000..402a287 --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -0,0 +1,48 @@ +import styled from "styled-components"; +import { useSelector } from "react-redux"; + +const StyledDetail = styled.div` +display:flex; +flex-direction:column; +align-items:center; +width: 729px; +height: 821px; +background-color:white; +border: 4px solid #9255F5; +.name{ + display:flex; + justify-content:center; + width:80%; + height:auto; + font-weight: 600; + font-size: 50px; + border-bottom:2px solid; +} +.info{ + margin-left:50px; + width:100%; + display:flex; + flex-direction:column; + align-items:start; + font-weight: 600; + font-size: 30px; +} +` + + +const SubwayDetail = () => { + const subway = useSelector(state => state.subway.subwayInfo) + return ( + +
    +

    {subway.stinNm}

    +
    +
    +

    {subway.lonmAdr}

    +

    {subway.roadNmAdr}

    +
    +
    + ) +} + +export default SubwayDetail; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 64da1d7..b7708d3 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -8,7 +8,7 @@ import { api } from "../../auth/Api.js"; const StyledForm = styled.form` display:flex; - width: 735px; + width: 727px; height: 98px; border: 4px solid #9255F5 ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js index 783ce49..189c1bf 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js @@ -7,6 +7,7 @@ height: 60px; padding: 15px; font-size: 50px; border:0; +font-family: 'Pretendard-Regular'; ` const SubwayInput = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index eb705a2..f3b4876 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -1,46 +1,86 @@ import styled from "styled-components"; import { Link } from "react-router-dom"; +import { useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { useEffect } from "react"; +import { SubwayActions } from "../../../store/Subway-slice"; +const SubwayItems = ({ items }) => { + const { stNm, lnNm, stCd } = items + const [color, setColor] = useState(true); + const dispatch = useDispatch() + const currentSubway = useSelector(state => state.subway.currentSubway) + useEffect(() => { + if (currentSubway !== stCd) { + setColor(true) + } + }, [currentSubway]) + + const ClickSubway = () => { + if (currentSubway === stCd) { + window.location.href = `/subway/detail/${stCd}/${stNm}`; + } + else if (currentSubway !== stCd) { + setColor(false) + dispatch(SubwayActions.clickSubway(stCd)) + } + } + return ( + +

    {stNm}

    +

    {lnNm}

    +
    + ) +} const StyldeSubwayItems = styled.li` display:flex; -justify-content:space-around; +justify-content:space-between; +width:100%; align-items:center; -width:700px; list-style:none; border-bottom: 1px solid #D2D2D2; +background-color:${props => (props.color ? "#FFFFFF" : "#9255F5")}; color:black; +font-family: 'Pretendard-Regular'; :hover{ cursor: pointer; } +a{ + width:100%; + display:flex; + justify-content:space-between; + align-items:center; + color:black; + text-decoration:none; +} .name{ + padding-left:20px; font-family: 'Pretendard'; font-style: normal; font-weight: 600; font-size: 40px; line-height: 60px; + color:${props => (props.color ? "#000000" : "#FFFFFF")}; } .line{ + color:#FFFFFF; + display:flex; + justify-content:center; + align-items:center; + margin-right:20px; font-family: 'Pretendard'; font-style: normal; font-weight: 600; font-size: 24px; - line-height: 29px; + width: 48px; + height: 48px; + background-color:#A76E00; + border-radius:200px; + } ` -const SubwayItems = ({ items }) => { - - - return ( - - -

    {items.stNm}

    -

    {items.lnNm}

    -
    - - ) -} export default SubwayItems \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index 730de71..d9e40ac 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -1,5 +1,6 @@ import styled from "styled-components"; -import SubwayItems from "./SubwayItems.js" +import SubwayItems from "./SubwayItems.js"; +import SubwayNumber from "../subwaynumber/SubwayNumber.js"; import { useSelector } from "react-redux"; @@ -9,11 +10,12 @@ display:flex; flex-direction:column; align-items: center; box-sizing: border-box; -width: 744px; -height: 590px; +width: 735px; +height: 644px; background: #FFFFFF; border: 4px solid #9255F5; padding:0; +margin:0; overflow:auto; a{ text-decoration:none; @@ -23,10 +25,9 @@ a{ const SubwayList = () => { const subwayCheck = useSelector(state => state.subway.subwayCheck) const subway = useSelector(state => state.subway.subway) - console.log(subway) - console.log(subwayCheck) return ( + {subwayCheck && } {subwayCheck && subway.map(elemnet => { + + return ( + +

    검색결과{props.count}

    +
    + ) +} + +export default SubwayNumber \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index cfa8a58..7843cfa 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -1,48 +1,33 @@ import styled from "styled-components"; -import { useSelector } from "react-redux"; -const StyledPanel = styled.div` + +const StyledSubwayPanel = styled.div` display:flex; flex-direction:column; align-items:center; -width: 729px; -height: 821px; -background-color:white; -border: 4px solid #9255F5; -.name{ - display:flex; - justify-content:center; - width:80%; - height:auto; - font-weight: 600; +text-align:center; +width: 348px; +height: 795x; +margin-right:30px; +font-family: 'GmarketSansMedium'; +background: linear-gradient(270deg, #7C34F3 -44.25%, rgba(146, 85, 245, 0) 222.13%); +.first{ font-size: 50px; - border-bottom:2px solid; + color: #FFFFFF; } -.info{ - margin-left:50px; - width:100%; - display:flex; - flex-direction:column; - align-items:start; - font-weight: 600; +.second{ font-size: 30px; + color: #FFFFFF; } ` +const SubwayPanel = (props) => { -const SubwayPanel = () => { - const subway = useSelector(state => state.subway.subwayInfo) return ( - -
    -

    {subway.stinNm}

    -
    -
    -

    {subway.lonmAdr}

    -

    {subway.roadNmAdr}

    -
    -
    + +

    {props.text}

    +
    ) } -export default SubwayPanel; \ No newline at end of file +export default SubwayPanel \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/BusPage.module.css b/Backend/Frontend/creative/src/page/BusPage.module.css index 441e9f8..0145a00 100644 --- a/Backend/Frontend/creative/src/page/BusPage.module.css +++ b/Backend/Frontend/creative/src/page/BusPage.module.css @@ -1,7 +1,7 @@ .main { display: flex; justify-content: start; - width: 100%; + width: 1920px; } .buspage { diff --git a/Backend/Frontend/creative/src/page/MainPage.module.css b/Backend/Frontend/creative/src/page/MainPage.module.css index 866ba21..b3f4c53 100644 --- a/Backend/Frontend/creative/src/page/MainPage.module.css +++ b/Backend/Frontend/creative/src/page/MainPage.module.css @@ -11,8 +11,8 @@ body { } .bottom { - width: 100%; - height: 85vh; + width: 1920px; + height: 778px; background: rgba(40, 40, 40, 0.8); } @@ -72,20 +72,16 @@ body { } } +@font-face { + font-family: 'GmarketSansMedium'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/GmarketSansMedium.woff') format('woff'); + font-weight: normal; + font-style: normal; +} - - - - -@media screen and (max-width:1676px) { - .main { - display: flex; - flex-direction: column; - padding: 2.5rem; - } - - .bottom { - display: flex; - flex-direction: column; - } +@font-face { + font-family: 'Pretendard-Regular'; + src: url('https://cdn.jsdelivr.net/gh/Project-Noonnu/noonfonts_2107@1.1/Pretendard-Regular.woff') format('woff'); + font-weight: 400; + font-style: normal; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index ec33936..69c0284 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -1,7 +1,7 @@ import Mapping from "../../component/map/Mapping.js" import classes from "./SubwayDetailPage.module.css" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import SubwayDetail from "../../component/subway-component/subwaydetail/SubwayDetail.js" import { useParams } from "react-router-dom" import { useEffect } from "react" import { api } from "../../component/auth/Api.js" @@ -22,7 +22,7 @@ const SubwayDetailPage = () => {
    - +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css index 3e3ae62..5ddff6e 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css @@ -1,11 +1,23 @@ .main { - width: 100%; display: flex; - justify-content: space-evenly; + justify-content: start; + width: 1920px; } -.subwaymeubar { +.subwaypage { display: flex; flex-direction: column; - align-items: end; + align-items: center; + justify-content: space-between; +} + +.subwaylist { + display: flex; + flex-direction: column; + margin-right: 30px; +} + +.subwaymain { + display: flex; + margin-top: 20px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js index b9e032c..4e9cde0 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js @@ -2,13 +2,16 @@ import Mapping from "../../component/map/Mapping.js" import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayPage.module.css" +import Header from "../../component/header/Header.js" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" const SubwayPage = () => { return (
    -
    -
    지하철 편의시설
    -
    +
    +
    + , "편의시설"]} /> +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css index 134a691..5ddff6e 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css @@ -1,23 +1,23 @@ -header { - width: 100%; - font-size: 80px; - line-height: 94px; - padding-top: 1vw; - padding-bottom: 1.5vw; -} - .main { display: flex; + justify-content: start; + width: 1920px; } .subwaypage { display: flex; - justify-content: space-evenly; + flex-direction: column; + align-items: center; + justify-content: space-between; } .subwaylist { display: flex; flex-direction: column; - justify-content: space-evenly; - margin-right: 2vw; + margin-right: 30px; +} + +.subwaymain { + display: flex; + margin-top: 20px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index ee0e98c..f4c6f5c 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -5,7 +5,8 @@ const SubwaySlice = createSlice({ initialState: { subway: [], subwayCheck: false, - subwayInfo: {} + subwayInfo: {}, + currentSubway: "" }, reducers: { addSubwayInfo(state, action) { @@ -19,6 +20,9 @@ const SubwaySlice = createSlice({ state.subway = []; state.subwayCheck = false; state.subwayInfo = {}; + }, + clickSubway(state, action) { + state.currentSubway = action.payload; } } }) From 605437989e28e730d90f8a368283ae5be42ddb06 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 7 Dec 2022 17:35:37 +0900 Subject: [PATCH 10/32] =?UTF-8?q?feat.=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EC=B6=B0=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bus-component/buslist/BusItem.js | 2 +- .../creative/src/component/header/Header.js | 1 - .../subwaydetail/SubwayDetail.js | 41 ++++++++++++----- .../subwaylist/SubwayItems.js | 4 +- .../subwaymenubar/SubwayBar.js | 43 +++++++----------- .../subwaynumber/SubwayNumber.js | 1 - .../subwaypanel/SubwayPanel.js | 14 ++---- .../src/page/subwaypage/SubwayBathchair.js | 27 ++++++++---- .../subwaypage/SubwayBathchair.module.css | 20 ++++++++- .../src/page/subwaypage/SubwayDetailPage.js | 44 ++++++++++++------- .../src/page/subwaypage/SubwayElevator.js | 22 ++++++---- .../page/subwaypage/SubwayElevator.module.css | 20 +++++++-- .../src/page/subwaypage/SubwayPage.js | 2 +- .../src/page/subwaypage/SubwayTransfer.js | 24 ++++++---- .../page/subwaypage/SubwayTransfer.module.css | 20 +++++++-- 15 files changed, 178 insertions(+), 107 deletions(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index 645ec3a..dc4f1fa 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -54,7 +54,7 @@ const BusItem = (props) => { console.log(busrouteid); return ( - +

    {busrouteAbrv}

    {adirection}방면

    diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.js index e8989ea..f96e1e5 100644 --- a/Backend/Frontend/creative/src/component/header/Header.js +++ b/Backend/Frontend/creative/src/component/header/Header.js @@ -25,7 +25,6 @@ const Header = () => { const dispatch = useDispatch(); const reduxReset = () => { - console.log("asd") dispatch(BusActions.initialState()) dispatch(SubwayActions.initialState()) dispatch(MapActions.initialization()) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index 402a287..32475f9 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -4,19 +4,35 @@ import { useSelector } from "react-redux"; const StyledDetail = styled.div` display:flex; flex-direction:column; -align-items:center; -width: 729px; -height: 821px; +width: 749px; +height: 747px; background-color:white; border: 4px solid #9255F5; .name{ display:flex; - justify-content:center; - width:80%; + align-items:center; + width:100%; height:auto; font-weight: 600; - font-size: 50px; - border-bottom:2px solid; + font-size: 40px; + border-bottom: 4px solid #9255F5; +} +.name p{ + margin-left:26px; +} +.line{ + display:flex; + justify-content:center; + align-items:center; + color:#FFFFFF; + font-family: 'Pretendard'; + font-style: normal; + font-weight: 600; + font-size: 70%; + width: 48px; + height: 48px; + background-color:#A76E00; + border-radius:200px; } .info{ margin-left:50px; @@ -30,16 +46,17 @@ border: 4px solid #9255F5; ` -const SubwayDetail = () => { - const subway = useSelector(state => state.subway.subwayInfo) +const SubwayDetail = ({ info }) => { + console.log(info) return (
    -

    {subway.stinNm}

    +

    {info.lnCd}

    +

    {info.stNm}

    -

    {subway.lonmAdr}

    -

    {subway.roadNmAdr}

    +

    {info.lonmAdr}

    +

    {info.roadNmAdr}

    ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index f3b4876..3376cb3 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -1,5 +1,4 @@ import styled from "styled-components"; -import { Link } from "react-router-dom"; import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useEffect } from "react"; @@ -11,6 +10,7 @@ const SubwayItems = ({ items }) => { const [color, setColor] = useState(true); const dispatch = useDispatch() const currentSubway = useSelector(state => state.subway.currentSubway) + useEffect(() => { if (currentSubway !== stCd) { setColor(true) @@ -73,7 +73,7 @@ a{ font-family: 'Pretendard'; font-style: normal; font-weight: 600; - font-size: 24px; + font-size: 100%; width: 48px; height: 48px; background-color:#A76E00; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index 2275526..8cfdf03 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -1,49 +1,36 @@ import styled from "styled-components"; import { Link } from "react-router-dom"; -import { api } from "../../auth/Api.js"; const StyleMenuBar = styled.ul` -width:100%; display:flex; +flex-direction:column; list-style:none; -justify-content: space-between; -font-family: 'Pretendard'; -font-style: normal; -font-size: 28px; -line-height: 43px; - +align-items: start; +font-size: 30px; +line-height: 36px; +padding:0; li{ + display:flex; color:black; - border-radius:10px; - padding:2.5px; -} -li:hover{ - transition: all ease 0.5s; - color:white; - background-color:#c0c0c0; + margin-bottom:10px; + color: #FFFFFF; + padding-top:30px; } + a{ - padding:0px 7px; - text-decoration:none; - border-right:2px solid; + width:246px; + text-decoration:none; + border-bottom: 2px solid; + border-color:#FFFFFF; } ` const SubwayBar = () => { - const submitBahth = () => { - api.get("/subway/liftMove/stinCd/:stinCd") - .then(res => { - const { data } = res; - console.log(data.body[0]) - } - ) - } return ( -
  • 엘리베이터 위치
  • 환승 이동 경로
  • -
  • 휠체어 관련 위치
  • +
  • 휠체어 관련 위치
  • ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js index 0bc6664..a98da4f 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js @@ -1,5 +1,4 @@ import styled from "styled-components"; -import { useSelector } from "react-redux"; const StyledSubwayNumber = styled.header` display:flex; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index 7843cfa..8b1eb2a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -1,6 +1,5 @@ import styled from "styled-components"; - const StyledSubwayPanel = styled.div` display:flex; flex-direction:column; @@ -11,21 +10,16 @@ height: 795x; margin-right:30px; font-family: 'GmarketSansMedium'; background: linear-gradient(270deg, #7C34F3 -44.25%, rgba(146, 85, 245, 0) 222.13%); -.first{ - font-size: 50px; - color: #FFFFFF; -} -.second{ - font-size: 30px; - color: #FFFFFF; -} +font-size: 50px; +color: #FFFFFF; ` const SubwayPanel = (props) => { return ( -

    {props.text}

    +

    {props.text}

    + {props.menu}
    ) } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index fc17927..37ce534 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -1,14 +1,23 @@ +import Mapping from "../../component/map/Mapping.js" +import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" +import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayBathchair.module.css" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" -import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo" +import Header from "../../component/header/Header.js" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" - -const SubwayBathChairPage = () => { +const SubwayBathchair = () => { return ( -
    - -
    - +
    +
    +
    + , "위치"]} /> +
    +
    + + +
    + +
    ) @@ -16,4 +25,4 @@ const SubwayBathChairPage = () => { -export default SubwayBathChairPage +export default SubwayBathchair diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css index 2a45795..5ddff6e 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css @@ -1,5 +1,23 @@ .main { + display: flex; + justify-content: start; + width: 1920px; +} + +.subwaypage { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; +} + +.subwaylist { display: flex; flex-direction: column; - width: 800px; + margin-right: 30px; +} + +.subwaymain { + display: flex; + margin-top: 20px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 69c0284..6a4b4c2 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -1,32 +1,44 @@ import Mapping from "../../component/map/Mapping.js" +import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayDetailPage.module.css" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import Header from "../../component/header/Header.js" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" import SubwayDetail from "../../component/subway-component/subwaydetail/SubwayDetail.js" -import { useParams } from "react-router-dom" -import { useEffect } from "react" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import { useDispatch } from "react-redux" +import { SubwayActions } from "../../store/Subway-slice.js" import { api } from "../../component/auth/Api.js" +import { useParams } from "react-router-dom" +import { useEffect, useState } from "react" const SubwayDetailPage = () => { const params = useParams() + const dispatch = useDispatch() + const [info, setInfo] = useState({}) useEffect(() => { - const stCd = params.stCd - const stNm = params.stNm - const getDetatl = async () => { - await api.get(`/subway/stationInfo/${stCd}/${stNm}`) - .then(res => console.log(res.data)) + const stCd = params.stCd; + const stNm = params.stNm; + const getDetail = () => { + api.get(`subway/stationInfo/${stCd}/${stNm}`) + .then(res => { + const { data } = res; + setInfo(data.stationinfo); + dispatch(SubwayActions.saveSubway(data.stationinfo)) + }) } - getDetatl() - }) + getDetail() + }, []) return (
    -
    -
    - -
    - - +
    +
    + , "편의시설"]} menu={} /> +
    +
    +
    +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 6acd074..5a19bbc 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -1,16 +1,22 @@ import Mapping from "../../component/map/Mapping.js" +import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" +import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayElevator.module.css" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import Header from "../../component/header/Header.js" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" -const SubwayElevatorPage = () => { +const SubwayElevator = () => { return (
    -
    -
    -
    - - +
    +
    + , "위치"]} /> +
    +
    + +
    +
    @@ -19,4 +25,4 @@ const SubwayElevatorPage = () => { -export default SubwayElevatorPage +export default SubwayElevator diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css index 3e3ae62..5ddff6e 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css @@ -1,11 +1,23 @@ .main { - width: 100%; display: flex; - justify-content: space-evenly; + justify-content: start; + width: 1920px; } -.subwaymeubar { +.subwaypage { display: flex; flex-direction: column; - align-items: end; + align-items: center; + justify-content: space-between; +} + +.subwaylist { + display: flex; + flex-direction: column; + margin-right: 30px; +} + +.subwaymain { + display: flex; + margin-top: 20px; } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js index 4e9cde0..eca7186 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js @@ -10,7 +10,7 @@ const SubwayPage = () => {
    - , "편의시설"]} /> + , "편의시설"]} menu={null} />
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 7b22fc5..ddd7117 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -1,16 +1,22 @@ import Mapping from "../../component/map/Mapping.js" -import classes from "./SubwayTransfer.module.css" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" +import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" +import classes from "./SubwayBathchair.module.css" +import Header from "../../component/header/Header.js" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" -const SubwayTransferPage = () => { +const SubwayTransfer = () => { return (
    -
    -
    -
    - - +
    +
    + , "이동경로"]} /> +
    +
    + +
    +
    @@ -19,4 +25,4 @@ const SubwayTransferPage = () => { -export default SubwayTransferPage +export default SubwayTransfer diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css index 3e3ae62..5ddff6e 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css @@ -1,11 +1,23 @@ .main { - width: 100%; display: flex; - justify-content: space-evenly; + justify-content: start; + width: 1920px; } -.subwaymeubar { +.subwaypage { display: flex; flex-direction: column; - align-items: end; + align-items: center; + justify-content: space-between; +} + +.subwaylist { + display: flex; + flex-direction: column; + margin-right: 30px; +} + +.subwaymain { + display: flex; + margin-top: 20px; } \ No newline at end of file From 7c8c54533ac7d1f69ec46d1cf52eab2dfb52c964 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 7 Dec 2022 23:20:31 +0900 Subject: [PATCH 11/32] =?UTF-8?q?feat.=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 지하철 메뉴에 해당하는 페이지 설정 --- Backend/Frontend/creative/src/App.js | 6 ++-- .../src/component/menu/MenuBusButton.js | 2 +- .../src/component/menu/MenuSubwayButton.js | 2 +- .../subwaybath/SubwayBathChairInfo.js | 20 ++++++++++++ .../subwaydetail/SubwayDetail.js | 1 - .../subway-component/subwayinfo/SubwayInfo.js | 22 +++++++++---- .../subway-component/subwaylist/SubwayList.js | 3 +- .../subwaymenubar/SubwayBar.js | 9 ++++-- .../src/page/subwaypage/SubwayBathchair.js | 31 ++++++++++++++----- .../src/page/subwaypage/SubwayDetailPage.js | 1 - .../src/page/subwaypage/SubwayElevator.js | 22 ++++++++++++- .../src/page/subwaypage/SubwayTransfer.js | 22 ++++++++++++- Backend/backend.js | 4 +-- 13 files changed, 117 insertions(+), 28 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js diff --git a/Backend/Frontend/creative/src/App.js b/Backend/Frontend/creative/src/App.js index 1a8bad9..b09fdaa 100644 --- a/Backend/Frontend/creative/src/App.js +++ b/Backend/Frontend/creative/src/App.js @@ -15,9 +15,9 @@ function App() { } /> } /> } /> - } /> - } /> - } /> + } /> + } /> + } /> ); diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js index 274f27e..8bd5af6 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -5,7 +5,7 @@ import { MapActions } from '../../store/Map-slice' const StyledButton = styled.button` width: 442.5px; height: 537px; -font-size: 3vw; +font-size: 60px; color: #FFFFFF; font-family: 'Pretendard-Regular'; background: rgba(205, 208, 41, 0.8); diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index 4c3561b..029d5c6 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -5,7 +5,7 @@ import { MapActions } from '../../store/Map-slice' const StyledButton = styled.button` width: 442.5px; height: 537px; -font-size: 3vw; +font-size: 60px; color: #FFFFFF; font-family: 'Pretendard-Regular'; background: rgba(146, 85, 245, 0.8); diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js new file mode 100644 index 0000000..90d88ba --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -0,0 +1,20 @@ +import styled from "styled-components"; + +const StyledBathChair = styled.div` +display:flex; +font-size:35px; +font-family: 'Pretendard-Regular'; +margin-left:30px; + +` + + +const SubwayBathchairInfo = ({ mvContDtl }) => { + return ( + +

    {mvContDtl}

    +
    + ) +} + +export default SubwayBathchairInfo; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index 32475f9..d10dcfd 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -47,7 +47,6 @@ border: 4px solid #9255F5; const SubwayDetail = ({ info }) => { - console.log(info) return (
    diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js index c2b3f0c..07b494f 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -1,16 +1,26 @@ import styled from "styled-components"; +import SubwayBathchairInfo from "../subwaybath/SubwayBathChairInfo"; const StyledInfo = styled.div` - -width: 788px; -height: 710px; -background-color:black; +display:flex; +flex-direction:column; +width: 749px; +height: 747px; +background-color:white; +border: 4px solid #9255F5; +overflow:auto; ` -const SubwayInfo = () => { +const SubwayInfo = ({ info }) => { return ( - + {info.map((element, index) => ( + + ))} ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index d9e40ac..0064c93 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -25,12 +25,13 @@ a{ const SubwayList = () => { const subwayCheck = useSelector(state => state.subway.subwayCheck) const subway = useSelector(state => state.subway.subway) + console.log(subway) return ( {subwayCheck && } {subwayCheck && subway.map(elemnet => )} diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index 8cfdf03..e3fceb6 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -1,5 +1,6 @@ import styled from "styled-components"; import { Link } from "react-router-dom"; +import { useSelector } from "react-redux"; const StyleMenuBar = styled.ul` display:flex; @@ -26,11 +27,13 @@ a{ ` const SubwayBar = () => { + const si = useSelector(state => state.subway.subwayInfo) + console.log(si) return ( -
  • 엘리베이터 위치
  • -
  • 환승 이동 경로
  • -
  • 휠체어 관련 위치
  • +
  • 엘리베이터 위치
  • +
  • 환승 이동 경로
  • +
  • 휠체어 관련 위치
  • ) } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index 37ce534..b838154 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -1,22 +1,39 @@ -import Mapping from "../../component/map/Mapping.js" -import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" -import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayBathchair.module.css" import Header from "../../component/header/Header.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import { useParams } from "react-router-dom" +import { api } from "../../component/auth/Api.js" +import { useEffect, useState } from "react" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.js" + const SubwayBathchair = () => { + const params = useParams(); + const [bath, setBath] = useState([]); + useEffect(() => { + const stCd = params.stCd; + const stNm = params.stNm; + const railCd = params.railCd; + const lnCd = params.lnCd; + const getBathChair = () => { + api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + .then(res => { + const { data } = res; + setBath(data) + }) + } + getBathChair() + }, []) return (
    - , "위치"]} /> + , "위치"]} menu={} />
    - - +
    -
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 6a4b4c2..5aedcf0 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -1,5 +1,4 @@ import Mapping from "../../component/map/Mapping.js" -import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayDetailPage.module.css" import Header from "../../component/header/Header.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 5a19bbc..30a7468 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -3,14 +3,34 @@ import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.j import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayElevator.module.css" import Header from "../../component/header/Header.js" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import { useParams } from "react-router-dom" +import { api } from "../../component/auth/Api.js" +import { useEffect, useState } from "react" const SubwayElevator = () => { + const params = useParams() + const [bath, setBath] = useState([]); + useEffect(() => { + const stCd = params.stCd; + const stNm = params.stNm; + const railCd = params.railCd; + const lnCd = params.lnCd; + const getBathChair = () => { + api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + .then(res => { + const { data } = res; + setBath(data) + }) + } + getBathChair() + }, []) return (
    - , "위치"]} /> + , "위치"]} menu={} />
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index ddd7117..56d98a1 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -3,14 +3,34 @@ import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.j import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayBathchair.module.css" import Header from "../../component/header/Header.js" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import { useParams } from "react-router-dom" +import { api } from "../../component/auth/Api.js" +import { useEffect, useState } from "react" const SubwayTransfer = () => { + const params = useParams() + const [bath, setBath] = useState([]); + useEffect(() => { + const stCd = params.stCd; + const stNm = params.stNm; + const railCd = params.railCd; + const lnCd = params.lnCd; + const getBathChair = () => { + api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + .then(res => { + const { data } = res; + setBath(data) + }) + } + getBathChair() + }, []) return (
    - , "이동경로"]} /> + , "이동경로"]} menu={} />
    diff --git a/Backend/backend.js b/Backend/backend.js index ffa7ea5..c3112ca 100644 --- a/Backend/backend.js +++ b/Backend/backend.js @@ -16,8 +16,8 @@ const conn = { database: SQL_info.database }; -let connection = mysql.createConnection(conn); // DB Ŀؼ -connection.connect(); // DB +let connection = mysql.createConnection(conn); // DB Ŀ�ؼ� ���� +connection.connect(); // DB ���� /* From b51eb61cc2bbe30c37b0d1cf127626833e48cfc3 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Fri, 9 Dec 2022 16:05:09 +0900 Subject: [PATCH 12/32] =?UTF-8?q?feat.=20=EB=AA=A8=EB=B0=94=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=98=EC=9D=91=ED=98=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 모바일 반응형 완료 아직 지하철 페이지는 개발 필요함 --- .../bus-component/busform/BusButton.js | 11 +++- .../bus-component/busform/BusForm.js | 9 ++- .../bus-component/busform/BusInput.js | 13 +++- .../bus-component/buslist/BusItem.js | 19 +++++- .../bus-component/buslist/BusList.js | 8 ++- .../bus-component/buslist/RefreshButton.js | 4 ++ .../bus-component/buslist/StationItem.js | 19 ++++-- .../bus-component/busnumber/BusNumber.js | 6 +- .../bus-component/buspanel/BusPanel.js | 24 ++++++-- .../creative/src/component/header/Header.js | 10 +++- .../src/component/map/Mapping.module.css | 11 +++- .../creative/src/component/menu/MenuBar.js | 6 +- .../src/component/menu/MenuBusButton.js | 12 +++- .../creative/src/component/menu/MenuExplan.js | 17 +++++- .../src/component/menu/MenuSubwayButton.js | 12 +++- .../subwayElevator/SubwayElevatorDetail.js | 33 ++++++++++ .../subwayElevator/SubwayElevatorItem.js | 60 +++++++++++++++++++ .../subwayElevator/SubwayElevatorMap.js | 29 +++++++++ .../subwaybath/SubwayBathChairInfo.js | 1 + .../subwaydetail/SubwayDetail.js | 17 +++++- .../subwayform/SubwayButton.js | 11 +++- .../subway-component/subwayform/SubwayForm.js | 10 +++- .../subwayform/SubwayInput.js | 13 +++- .../subway-component/subwayinfo/SubwayInfo.js | 6 ++ .../subwaylist/SubwayItems.js | 15 ++++- .../subway-component/subwaylist/SubwayList.js | 8 ++- .../subwaymenubar/SubwayBar.js | 17 ++++++ .../subwaynumber/SubwayNumber.js | 4 ++ .../subwaypanel/SubwayPanel.js | 19 ++++-- .../subwaytransfer/SubwayTrasferDetail.js | 29 +++++++++ .../creative/src/page/BusPage.module.css | 19 +++++- .../creative/src/page/MainPage.module.css | 4 +- .../src/page/subwaypage/SubwayBathchair.js | 2 +- .../subwaypage/SubwayBathchair.module.css | 19 +++++- .../src/page/subwaypage/SubwayDetailPage.js | 8 ++- .../subwaypage/SubwayDetailPage.module.css | 19 +++++- .../src/page/subwaypage/SubwayElevator.js | 29 +++++---- .../page/subwaypage/SubwayElevator.module.css | 35 ++++++++++- .../src/page/subwaypage/SubwayPage.js | 2 +- .../src/page/subwaypage/SubwayPage.module.css | 19 +++++- .../src/page/subwaypage/SubwayTransfer.js | 17 +++--- .../page/subwaypage/SubwayTransfer.module.css | 19 +++++- .../creative/src/store/Subway-slice.js | 18 +++++- 43 files changed, 575 insertions(+), 88 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js index 3a7e89c..f6faf9f 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js @@ -1,10 +1,15 @@ import styled from "styled-components" const StyledButton = styled.button` -width: 99px; -height: 100px; +width: 16%; +height: 11vh; background: #CDD029; -border: 4px solid #CDD029; +border: 1px solid #CDD029; +padding:0; +@media (max-width:500px){ + width:20%; + height:100%; +} ` diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index 35557e7..a80993a 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -1,7 +1,6 @@ import BusButton from "./BusButton"; import BusInput from "./BusInput"; import styled from "styled-components"; -import axios from "axios" import { api } from "../../auth/Api"; import { MapActions } from "../../../store/Map-slice"; import { BusActions } from "../../../store/Bus-slice"; @@ -10,9 +9,13 @@ import { useDispatch } from "react-redux"; const StyledForm = styled.form` display:flex; - width: 727px; - height: 98px; + width: 34.6vw; + height: 11vh; border: 4px solid #CDD029; + @media (max-width:500px){ + width: 98vw; + height: 15vw; + } ` diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js index 5c05527..250a90d 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js @@ -1,12 +1,19 @@ import styled from "styled-components" const StyledInput = styled.input` -width: 621px; -height: 60px; +width: 80%; +height: 10vh; padding: 15px; -font-size: 50px; +font-size: 2.5vw; border:0; font-family: 'Pretendard-Regular'; +@media (max-width:500px){ + font-family: 'Pretendard-Regular'; + width: 80%; + height: 15vw; + font-size: 6vw; + padding: 1%; +} ` const BusInput = () => { diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index dc4f1fa..a27516f 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -25,14 +25,14 @@ div{ } .Name{ padding-left:20px; - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; font-size: 40px; line-height: 60px; } .direction{ - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; font-size: 24px; @@ -40,13 +40,26 @@ div{ } .id{ padding-right:20px; - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; font-size: 24px; line-height: 29px; color: #9C9C9C; } + +@media (max-width:500px){ + height:43%; + .Name{ + font-size: 5vw; + } + .direction{ + font-size: 3vw; + } + .id{ + font-size: 3vw; + } +} ` const BusItem = (props) => { diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js index a01b8e6..fbb7ab1 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js @@ -9,13 +9,17 @@ display:flex; flex-direction:column; align-items: center; box-sizing: border-box; -width: 735px; -height: 640px; +width: 35vw; +height: 68vh; background: #FFFFFF; border: 4px solid #CDD029 ; padding:0; margin:0; overflow:auto; +@media (max-width:500px) { + width:100%; + height:50vw; +} ` const BusList = () => { diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index be4aa8d..1f8b5e0 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -16,6 +16,10 @@ img{ :hover{ cursor: pointer; } +@media (max-width:500px){ + width:8vw; + height:8vw; +} ` diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index e089ebb..e80b0fd 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -65,26 +65,37 @@ font-family: 'Pretendard-Regular'; .Name{ padding-left:20px; - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 40px; + font-size: 2vw; line-height: 60px; color:${props => (props.color ? "#000000" : "#FFFFFF")}; } .id{ padding-right:20px; - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 24px; + font-size: 1.7vw; line-height: 29px; display: flex; align-items: center; text-align: center; color:${props => (props.color ? "#9C9C9C" : "black")}; } +@media (max-width:500px){ + height:43%; + .Name{ + font-family: 'Pretendard-Regular'; + font-size: 5vw; + } + .id{ + font-family: 'Pretendard-Regular'; + font-size: 3vw; + } +} ` export default StationItem; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js index 90cfe81..186f953 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js @@ -10,13 +10,17 @@ align-items:center; height:50px; width:90%; height:auto; -font-size:30px; +font-size:1.9vw; font-family: 'Pretendard-Regular'; padding:0; p{ font-weight:bold; margin:0; } +@media (max-width:500px){ + font-size:5vw; + height:28%; +} ` const BusNumber = (props) => { diff --git a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js index d234384..4280b99 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js +++ b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js @@ -6,26 +6,40 @@ display:flex; flex-direction:column; align-items:center; text-align:center; -width: 348px; -height: 795x; +width: 19vw; +height: 85vh; margin-right:30px; font-family: 'Pretendard-Regular'; background: linear-gradient(270.31deg, #999C0D -27.07%, rgba(205, 208, 41, 0) 206.73%); .first{ - font-size: 50px; + font-size: 4vw; color: #FFFFFF; } .second{ - font-size: 30px; + font-size: 2vw; color: #FFFFFF; } + + +@media (max-width:500px) { +width:100vw; +height:5vh; +flex-direction:row; +justify-content:space-evenly; +.first{ + font-size: 4.5vw; +} +.second{ + font-size: 3vw; +} +} ` const BusPanel = () => { return (

    저상버스


    -

    저상버스가 오는
    정류장만 표시됩니다.

    +

    저상버스가 오는 정류장만 표시됩니다.

    ) } diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.js index f96e1e5..33d44c1 100644 --- a/Backend/Frontend/creative/src/component/header/Header.js +++ b/Backend/Frontend/creative/src/component/header/Header.js @@ -10,15 +10,19 @@ display:flex; align-items:center; font-family: 'GmarketSansMedium'; font-weight: 700; -font-size: 60px; +font-size: 4vw; background-color:#FFFFFF; border-bottom: 2px solid #EBEBEB; -width:1728px; -height:148px; +width:95%; +height:15vh; a{ color:#000000; text-decoration:none; } +@media (max-width:500px) { + font-size:8vw; + height:8vh; +} ` const Header = () => { diff --git a/Backend/Frontend/creative/src/component/map/Mapping.module.css b/Backend/Frontend/creative/src/component/map/Mapping.module.css index 13648f7..e6a2ea2 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.module.css +++ b/Backend/Frontend/creative/src/component/map/Mapping.module.css @@ -1,5 +1,12 @@ .map { - width: 698px; - height: 734px; + width: 35vw; + height: 80vh; +} + +@media (max-width:500px) { + .map { + width: 100vw; + height: 80vw; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.js b/Backend/Frontend/creative/src/component/menu/MenuBar.js index e1c558b..7b47297 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.js @@ -7,9 +7,13 @@ import MenuExplan from "./MenuExplan" const StyleMenuBar = styled.div` display:flex; justify-content: space-between; -width: 1920px; +width: 100%; padding-top:5vw; height: 633px; +@media (max-width:500px){ + flex-direction: column; + justify-content: space-evenly; +} ` diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js index 8bd5af6..69f9b39 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -11,11 +11,19 @@ font-family: 'Pretendard-Regular'; background: rgba(205, 208, 41, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 0px 20px 20px 0px; - - :hover{ cursor: pointer; } +@media (max-width:1630px){ + font-size: 4vw; + width: 26vw; + height: 60vh; +} +@media (max-width:500px){ + font-size: 6vw; + width: 80vw; + height: 10vh; +} ` diff --git a/Backend/Frontend/creative/src/component/menu/MenuExplan.js b/Backend/Frontend/creative/src/component/menu/MenuExplan.js index 874019c..49cff91 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuExplan.js +++ b/Backend/Frontend/creative/src/component/menu/MenuExplan.js @@ -17,7 +17,22 @@ color:#E2E2E2; font-family: 'Pretendard-Regular'; font-size: 40px; } - +@media (max-width:1630px){ + .first{ + font-size: 4vw; + } + .second{ + font-size: 2.5vw; + } +} +@media (max-width:500px){ + .first{ + font-size: 10vw; + } + .second{ + font-size: 5vw; + } +} ` const MenuExplan = () => { diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index 029d5c6..d3b9f8d 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -11,10 +11,20 @@ font-family: 'Pretendard-Regular'; background: rgba(146, 85, 245, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 20px 0px 0px 20px; - :hover{ cursor: pointer; } +@media (max-width:1630px){ + font-size: 3vw; + width: 25vw; + height: 60vh; +} +@media (max-width:500px){ + font-size: 6vw; + width: 80vw; + height: 10vh; + margin-left:20vw; +} ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js new file mode 100644 index 0000000..a71f9af --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js @@ -0,0 +1,33 @@ +import styled from "styled-components"; +import SubwayElevatorItems from "./SubwayElevatorItem"; + +const StyledElevatorDetail = styled.div` +display:flex; +flex-direction:column; +width: 749px; +height: 747px; +background-color:white; +border: 4px solid #9255F5; +overflow:auto; + +@media (max-width:500px) { + width:98%; + height:80vw; +} +` + + +const SubwayElevatorDetail = ({ info }) => { + + return ( + + {info.map(element => ( + + ))} + + ) +} + +export default SubwayElevatorDetail; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js new file mode 100644 index 0000000..f9b8f57 --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js @@ -0,0 +1,60 @@ +import styled from "styled-components"; +import { useDispatch } from "react-redux"; +import { SubwayActions } from "../../../store/Subway-slice"; + + +const SubwayElevatorItems = ({ items }) => { + const { dtlLoc, imgPath } = items + console.log(imgPath) + const dispatch = useDispatch(); + const ClickSubway = () => { + dispatch(SubwayActions.addelevator({ imgPath })) + } + + return ( + +

    {dtlLoc}

    +
    + ) +} + +const StyldeSubwayItems = styled.li` +display:flex; +justify-content:space-between; +width:100%; +align-items:center; +list-style:none; +border-bottom: 1px solid #D2D2D2; +background-color: #FFFFFF; +color:black; +font-family: 'Pretendard-Regular'; +:hover{ + cursor: pointer; +} +a{ + width:100%; + display:flex; + justify-content:space-between; + align-items:center; + color:black; + text-decoration:none; +} +.name{ + padding-left:20px; + font-family: 'Pretendard-Regular'; + font-style: normal; + font-weight: 600; + font-size: 40px; + line-height: 60px; + color:#000000; +} +@media (max-width:500px){ + height:43%; + .name{ + font-size: 5vw; + } +} +` + + +export default SubwayElevatorItems \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js new file mode 100644 index 0000000..d56e57e --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js @@ -0,0 +1,29 @@ +import styled from "styled-components"; +import { useSelector } from "react-redux"; + +const StyledElevatorMap = styled.div` +display:flex; +flex-direction:column; +width: 700px; +height: 45%; +background-color:white; +border: 4px solid #9255F5; +overflow:auto; +@media (max-width:500px) { + width:98%; + height:50vw; +} + +` + +const SubwayElevatorMap = () => { + const elevatorDetail = useSelector(state => state.subway.elevatorDetail) + + return ( + + + + ) +} + +export default SubwayElevatorMap \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index 90d88ba..2fd8178 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -1,6 +1,7 @@ import styled from "styled-components"; const StyledBathChair = styled.div` +width:100%; display:flex; font-size:35px; font-family: 'Pretendard-Regular'; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index d10dcfd..55ab64d 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -35,7 +35,6 @@ border: 4px solid #9255F5; border-radius:200px; } .info{ - margin-left:50px; width:100%; display:flex; flex-direction:column; @@ -43,6 +42,22 @@ border: 4px solid #9255F5; font-weight: 600; font-size: 30px; } + +@media (max-width:500px) { + width:98%; + height:80vw; + .line{ + width: 8vw; + height: 8vw; + } + .name{ + height:15vw; + font-size:5vw; + } + .name p{ + margin-left:8vw; + } +} ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js index 5e55b99..9926b08 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js @@ -1,10 +1,15 @@ import styled from "styled-components" const StyledButton = styled.button` -width: 99px; -height: 100px; +width: 16%; +height: 11vh; background: #9255F5; -border: 4px solid #9255F5; +border: 1px solid #9255F5; + +@media (max-width:500px){ + width:20%; + height:100%; +} ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index b7708d3..9436096 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -8,9 +8,13 @@ import { api } from "../../auth/Api.js"; const StyledForm = styled.form` display:flex; - width: 727px; - height: 98px; - border: 4px solid #9255F5 + width: 34.6vw; + height: 11vh; + border: 4px solid #9255F5; + @media (max-width:500px){ + width: 98vw; + height: 15vw; + } ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js index 189c1bf..08fe858 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js @@ -2,12 +2,19 @@ import styled from "styled-components" const StyledInput = styled.input` -width: 621px; -height: 60px; +width: 80%; +height: 8.5vh; padding: 15px; -font-size: 50px; +font-size: 2.5vw; border:0; font-family: 'Pretendard-Regular'; +@media (max-width:500px){ + font-family: 'Pretendard-Regular'; + width: 80%; + height: 15vw; + font-size: 6vw; + padding: 1%; +} ` const SubwayInput = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js index 07b494f..9a33aed 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -9,6 +9,12 @@ height: 747px; background-color:white; border: 4px solid #9255F5; overflow:auto; + +@media (max-width:500px){ + margin:0; + width: 100%; + height: 15vw; +} ` const SubwayInfo = ({ info }) => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 3376cb3..c60a7e4 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -57,7 +57,7 @@ a{ } .name{ padding-left:20px; - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; font-size: 40px; @@ -70,7 +70,7 @@ a{ justify-content:center; align-items:center; margin-right:20px; - font-family: 'Pretendard'; + font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; font-size: 100%; @@ -80,6 +80,17 @@ a{ border-radius:200px; } +@media (max-width:500px){ + height:43%; + .name{ + font-size: 5vw; + } + .line{ + font-size: 3vw; + width: 10vw; + height: 10vw; + } +} ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index 0064c93..7bbf3f5 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -10,8 +10,8 @@ display:flex; flex-direction:column; align-items: center; box-sizing: border-box; -width: 735px; -height: 644px; +width: 35vw; +height: 68vh; background: #FFFFFF; border: 4px solid #9255F5; padding:0; @@ -20,6 +20,10 @@ overflow:auto; a{ text-decoration:none; } +@media (max-width:500px) { + width:100%; + height:50vw; +} ` const SubwayList = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index e3fceb6..20d2933 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -24,6 +24,23 @@ a{ border-bottom: 2px solid; border-color:#FFFFFF; } + +@media (max-width:500px){ + flex-direction: row; + justify-content:space-even; + font-size:4vw; + margin:0; + li{ + margin:0; + padding:0; + } + a{ + display:flex; + justify-content:center; + width:35vw; + font-size:3.5vw; + } +} ` const SubwayBar = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js index a98da4f..c612a50 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js @@ -15,6 +15,10 @@ p{ font-weight:bold; margin:0; } +@media (max-width:500px){ + font-size:5vw; + height:28%; +} ` const SubwayNumber = (props) => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index 8b1eb2a..fbcae1b 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -5,13 +5,24 @@ display:flex; flex-direction:column; align-items:center; text-align:center; -width: 348px; -height: 795x; -margin-right:30px; +width: 19vw; +height: 85vh; +margin-right: 30px; font-family: 'GmarketSansMedium'; background: linear-gradient(270deg, #7C34F3 -44.25%, rgba(146, 85, 245, 0) 222.13%); -font-size: 50px; +font-size: 2.5vw; color: #FFFFFF; +@media (max-width:500px) { + width:100vw; + height:10vh; + margin:0; + flex-direction:column; + justify-content:space-evenly; + font-size: 4.5vw; + p{ + margin:0; + } +} ` const SubwayPanel = (props) => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js new file mode 100644 index 0000000..4ecc444 --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js @@ -0,0 +1,29 @@ +import styled from "styled-components"; + + +const StyledTransferDetail = styled.div` +display:flex; +flex-direction:column; +width: 749px; +height: 747px; +background-color:white; +border: 4px solid #9255F5; +overflow:auto; + +@media (max-width:500px) { + width:98%; + height:80vw; +} +` + + +const SubwayTransferDetail = ({ info }) => { + console.log(info) + return ( + + + + ) +} + +export default SubwayTransferDetail; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/BusPage.module.css b/Backend/Frontend/creative/src/page/BusPage.module.css index 0145a00..f2e9fe0 100644 --- a/Backend/Frontend/creative/src/page/BusPage.module.css +++ b/Backend/Frontend/creative/src/page/BusPage.module.css @@ -1,7 +1,7 @@ .main { display: flex; justify-content: start; - width: 1920px; + width: 100vw; } .buspage { @@ -20,4 +20,21 @@ display: flex; flex-direction: column; margin-right: 30px; +} + +@media (max-width:500px) { + .main { + flex-direction: column; + } + + .busmain { + flex-direction: column; + margin-top: 0; + height: 100%; + justify-content: space-between; + } + + .buslist { + margin-right: 0; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/MainPage.module.css b/Backend/Frontend/creative/src/page/MainPage.module.css index b3f4c53..1d2c7c1 100644 --- a/Backend/Frontend/creative/src/page/MainPage.module.css +++ b/Backend/Frontend/creative/src/page/MainPage.module.css @@ -11,8 +11,8 @@ body { } .bottom { - width: 1920px; - height: 778px; + width: 100vw; + height: 100vh; background: rgba(40, 40, 40, 0.8); } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index b838154..b05b19d 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -29,7 +29,7 @@ const SubwayBathchair = () => {
    - , "위치"]} menu={} /> + } />
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css index 5ddff6e..3d8f298 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css @@ -1,7 +1,7 @@ .main { display: flex; justify-content: start; - width: 1920px; + width: 100vw; } .subwaypage { @@ -20,4 +20,21 @@ .subwaymain { display: flex; margin-top: 20px; +} + +@media (max-width:500px) { + .main { + flex-direction: column; + } + + .subwaymain { + flex-direction: column; + margin-top: 0; + height: 100%; + justify-content: space-between; + } + + .subwaylist { + margin-right: 0; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 5aedcf0..246560d 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -22,8 +22,10 @@ const SubwayDetailPage = () => { api.get(`subway/stationInfo/${stCd}/${stNm}`) .then(res => { const { data } = res; - setInfo(data.stationinfo); - dispatch(SubwayActions.saveSubway(data.stationinfo)) + const { stationinfo } = data; + + setInfo(stationinfo); + dispatch(SubwayActions.saveSubway(stationinfo)) }) } getDetail() @@ -32,7 +34,7 @@ const SubwayDetailPage = () => {
    - , "편의시설"]} menu={} /> + } />
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css index 5ddff6e..3d8f298 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css @@ -1,7 +1,7 @@ .main { display: flex; justify-content: start; - width: 1920px; + width: 100vw; } .subwaypage { @@ -20,4 +20,21 @@ .subwaymain { display: flex; margin-top: 20px; +} + +@media (max-width:500px) { + .main { + flex-direction: column; + } + + .subwaymain { + flex-direction: column; + margin-top: 0; + height: 100%; + justify-content: space-between; + } + + .subwaylist { + margin-right: 0; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 30a7468..7cd7b1f 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -1,6 +1,5 @@ -import Mapping from "../../component/map/Mapping.js" -import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" -import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" +import SubwayElevatorDetail from "../../component/subway-component/subwayElevator/SubwayElevatorDetail" +import SubwayElevatorMap from "../../component/subway-component/subwayElevator/SubwayElevatorMap" import classes from "./SubwayElevator.module.css" import Header from "../../component/header/Header.js" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" @@ -8,20 +7,28 @@ import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPane import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" +import { useSelector } from "react-redux" const SubwayElevator = () => { const params = useParams() - const [bath, setBath] = useState([]); + const elevatorDetail = useSelector(state => state.subway.elevatorDetail) + const [ElePos, setElePos] = useState([]); useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; const railCd = params.railCd; const lnCd = params.lnCd; - const getBathChair = () => { - api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + const getBathChair = async () => { + await api.get(`subway/ElevatorMove/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; - setBath(data) + + }) + await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}/EV`) + .then(res => { + const { data } = res; + setElePos(data) + }) } getBathChair() @@ -30,13 +37,13 @@ const SubwayElevator = () => {
    - , "위치"]} menu={} /> + } />
    +
    - - + +
    -
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css index 5ddff6e..9e71145 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css @@ -1,7 +1,12 @@ .main { display: flex; justify-content: start; - width: 1920px; + width: 100vw; +} + +img { + width: 700px; + height: 52%; } .subwaypage { @@ -14,10 +19,36 @@ .subwaylist { display: flex; flex-direction: column; - margin-right: 30px; + margin-left: 30px; } .subwaymain { display: flex; margin-top: 20px; +} + +@media (max-width:500px) { + .main { + flex-direction: column; + } + + .subwaylist { + margin: 0; + } + + img { + width: 100%; + height: 50vw; + } + + .subwaymain { + flex-direction: column; + margin-top: 0; + height: 100%; + justify-content: space-between; + } + + .subwaylist { + margin-right: 0; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js index eca7186..e73db5d 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js @@ -10,7 +10,7 @@ const SubwayPage = () => {
    - , "편의시설"]} menu={null} /> +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css index 5ddff6e..3d8f298 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css @@ -1,7 +1,7 @@ .main { display: flex; justify-content: start; - width: 1920px; + width: 100vw; } .subwaypage { @@ -20,4 +20,21 @@ .subwaymain { display: flex; margin-top: 20px; +} + +@media (max-width:500px) { + .main { + flex-direction: column; + } + + .subwaymain { + flex-direction: column; + margin-top: 0; + height: 100%; + justify-content: space-between; + } + + .subwaylist { + margin-right: 0; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 56d98a1..0a3d484 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -1,27 +1,25 @@ -import Mapping from "../../component/map/Mapping.js" -import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" -import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" import classes from "./SubwayBathchair.module.css" import Header from "../../component/header/Header.js" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail" import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" const SubwayTransfer = () => { const params = useParams() - const [bath, setBath] = useState([]); + const [trans, setTrans] = useState([]); useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; const railCd = params.railCd; const lnCd = params.lnCd; const getBathChair = () => { - api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + api.get(`subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; - setBath(data) + setTrans(data) }) } getBathChair() @@ -30,13 +28,12 @@ const SubwayTransfer = () => {
    - , "이동경로"]} menu={} /> + } />
    - - +
    - +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css index 5ddff6e..3d8f298 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css @@ -1,7 +1,7 @@ .main { display: flex; justify-content: start; - width: 1920px; + width: 100vw; } .subwaypage { @@ -20,4 +20,21 @@ .subwaymain { display: flex; margin-top: 20px; +} + +@media (max-width:500px) { + .main { + flex-direction: column; + } + + .subwaymain { + flex-direction: column; + margin-top: 0; + height: 100%; + justify-content: space-between; + } + + .subwaylist { + margin-right: 0; + } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index f4c6f5c..6cfcfec 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -6,7 +6,12 @@ const SubwaySlice = createSlice({ subway: [], subwayCheck: false, subwayInfo: {}, - currentSubway: "" + currentSubway: "", + elevatorDetail: { + elechack: false, + imgPath: "", + //elemethod: [] + } }, reducers: { addSubwayInfo(state, action) { @@ -20,9 +25,20 @@ const SubwaySlice = createSlice({ state.subway = []; state.subwayCheck = false; state.subwayInfo = {}; + state.currentSubway = ""; + state.elevatorDetail = { + elechack: false, + imgPath: "", + //elemethod: [] + } }, clickSubway(state, action) { state.currentSubway = action.payload; + }, + addelevator(state, action) { + state.elevatorDetail.imgPath = action.payload.imgPath; + //state.elevatorDetail.elemethod = action.payload.elemethod; + state.elevatorDetail.elechack = true; } } }) From 67604d246dc66a9e90ea334a54c3b61111a1b77d Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Sat, 10 Dec 2022 02:20:18 +0900 Subject: [PATCH 13/32] =?UTF-8?q?feat.=20=ED=99=98=EC=8A=B9=20page?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/src/App.js | 1 + .../bus-component/buslist/RefreshButton.js | 16 +++-- .../subwaybath/SubwayBathChairInfo.js | 10 ++- .../subway-component/subwayinfo/SubwayInfo.js | 19 +++--- .../subwaymenubar/SubwayBar.js | 1 - .../subwaytransfer/SubwayTransferItem.js | 52 ++++++++++++++ .../subwaytransfer/SubwayTrasferDetail.js | 15 +++-- .../subwaytransfer/SubwaytransferInfo.js | 67 +++++++++++++++++++ .../src/page/subwaypage/SubwayBathchair.js | 21 +++++- .../src/page/subwaypage/SubwayDetailPage.js | 5 +- .../src/page/subwaypage/SubwayElevator.js | 13 ++-- .../src/page/subwaypage/SubwayTransfer.js | 14 ++-- .../page/subwaypage/SubwayTransfer.module.css | 8 --- .../creative/src/store/Subway-slice.js | 15 +++++ 14 files changed, 215 insertions(+), 42 deletions(-) create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js create mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js diff --git a/Backend/Frontend/creative/src/App.js b/Backend/Frontend/creative/src/App.js index b09fdaa..2efc1ef 100644 --- a/Backend/Frontend/creative/src/App.js +++ b/Backend/Frontend/creative/src/App.js @@ -7,6 +7,7 @@ import SubwayDetailPage from "./page/subwaypage/SubwayDetailPage.js" import SubwayElevatorPage from "./page/subwaypage/SubwayElevator.js"; import SubwayBathChairPage from "./page/subwaypage/SubwayBathchair.js"; +//page마다 url을 따로 지정, 페이지에서 api를 호출할 때 필요한 파라미터를 제공 function App() { return ( diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index 1f8b5e0..c02bfb5 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -5,20 +5,26 @@ import { useSelector, useDispatch } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; const StyledRefreshButton = styled.button` -width:50px; -height:50px; +width:60px; +height:60px; border: 0; border-radius:50px; background-color:transparent; +padding:0; img{ - width:100%; + width:70%; + height:70%; } :hover{ cursor: pointer; } @media (max-width:500px){ - width:8vw; - height:8vw; + width:10vw; + height:10vw; + img{ + width:70%; + height:70%; + } } ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index 2fd8178..fb57d52 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -3,10 +3,14 @@ import styled from "styled-components"; const StyledBathChair = styled.div` width:100%; display:flex; -font-size:35px; +font-size:32px; font-family: 'Pretendard-Regular'; -margin-left:30px; - +font-style: normal; +font-weight: 600; +margin-left:23px; +@media (max-width:500px){ + font-size:4vw; +} ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js index 9a33aed..28b4f00 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -12,20 +12,23 @@ overflow:auto; @media (max-width:500px){ margin:0; - width: 100%; - height: 15vw; + width: 98%; + height:50vw; } ` const SubwayInfo = ({ info }) => { + console.log(info) return ( - {info.map((element, index) => ( - + {info.map((element) => ( + element.map(node => ( + + )) ))} ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index 20d2933..a58b466 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -45,7 +45,6 @@ a{ const SubwayBar = () => { const si = useSelector(state => state.subway.subwayInfo) - console.log(si) return (
  • 엘리베이터 위치
  • diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js new file mode 100644 index 0000000..35e124d --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js @@ -0,0 +1,52 @@ +import styled from "styled-components"; +import { useDispatch } from "react-redux"; +import { SubwayActions } from "../../../store/Subway-slice"; + +const StyldeSubwayItems = styled.li` +display:flex; +justify-content:space-between; +width:100%; +align-items:center; +list-style:none; +border-bottom: 1px solid #D2D2D2; +background-color: #FFFFFF; +color:black; +font-family: 'Pretendard-Regular'; +:hover{ + cursor: pointer; +} +.name{ + padding-left:20px; + font-family: 'Pretendard-Regular'; + font-style: normal; + font-weight: 600; + font-size: 35px; + line-height: 60px; + color:#000000; +} +@media (max-width:500px){ + height:43%; + .name{ + font-size: 4.5vw; + } +} +` + +const SubwayTransferItems = ({ items }) => { + const { prev, next } = items + const dispatch = useDispatch(); + + const ClickSubway = () => { + dispatch(SubwayActions.addTransfer({ prev, next })) + } + + return ( + +

    {[`${prev.lnCd}호선 ${prev.stNm}방면 ->`,
    , `${next.lnCd}호선 ${next.stNm}방면`]}

    +
    + ) +} + + + +export default SubwayTransferItems \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js index 4ecc444..b08afb9 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js @@ -1,5 +1,5 @@ import styled from "styled-components"; - +import SubwayTransferItems from "./SubwayTransferItem"; const StyledTransferDetail = styled.div` display:flex; @@ -9,19 +9,26 @@ height: 747px; background-color:white; border: 4px solid #9255F5; overflow:auto; - +margin-right: 20px; @media (max-width:500px) { width:98%; height:80vw; + margin-right:0; } ` const SubwayTransferDetail = ({ info }) => { - console.log(info) + const [prev, next] = info; return ( - + {prev?.sourceStation.map(prev => ( + next?.transferStation.map(next => ( + + )) + ))} ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js new file mode 100644 index 0000000..da3ac8c --- /dev/null +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js @@ -0,0 +1,67 @@ +import styled from "styled-components"; +import { useSelector } from "react-redux"; +import { useEffect } from "react"; +import { api } from "../../auth/Api"; +import { useState } from "react"; + +const StyledTransferInfo = styled.div` +display:flex; +flex-direction:column; +width: 680px; +height: 747px; +background-color:white; +border: 4px solid #9255F5; +overflow:auto; +.title{ + margin:30px; + font-size: 40px; + font-weight: 600; + font-family: 'Pretendard-Regular'; + text-align:center; +} +.path{ + margin:30px; + font-size: 30px; + font-weight: 600; + font-family: 'Pretendard-Regular'; +} +@media (max-width:500px) { + width:98%; + height:80vw; + .title{ + margin:4vw; + font-size: 6vw; + } + .path{ + margin:4vw; + font-size: 4.5vw; + } +} +` + + +const SubwayTransferInfo = () => { + const { prev, next } = useSelector(state => state.subway.transferDetail) + const si = useSelector(state => state.subway.subwayInfo) + const [path, setPath] = useState() + useEffect(() => { + const getTransfer = async () => { + await api.get(`subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) + .then(res => { + const { data } = res; + setPath(data) + }) + } + getTransfer() + }, [prev, next]) + return ( + +
    {[`${prev.lnCd}호선 ${prev.stNm}방면 ->`,
    , `${next.lnCd}호선 ${next.stNm}방면`]}
    + {path?.map(element => ( +

    {element.mvContDtl}

    + ))} +
    + ) +} + +export default SubwayTransferInfo; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index b05b19d..fbd61d0 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -4,6 +4,8 @@ import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPane import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" +import { useDispatch } from "react-redux" +import { SubwayActions } from "../../store/Subway-slice" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.js" @@ -11,15 +13,30 @@ import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.j const SubwayBathchair = () => { const params = useParams(); const [bath, setBath] = useState([]); + const dispatch = useDispatch() useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; const railCd = params.railCd; const lnCd = params.lnCd; - const getBathChair = () => { - api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) + const checklift = async () => { + await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}/WCLF`) .then(res => { const { data } = res; + console.log(data) + }) + .catch(error => { + console.log("에러발생!") + console.log(error) + }) + } + checklift(); + const getBathChair = async () => { + await api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + .then(res => { + const { data } = res; + console.log(data) setBath(data) }) } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 246560d..0ba9af8 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -18,12 +18,11 @@ const SubwayDetailPage = () => { useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; - const getDetail = () => { - api.get(`subway/stationInfo/${stCd}/${stNm}`) + const getDetail = async () => { + await api.get(`subway/stationInfo/${stCd}/${stNm}`) .then(res => { const { data } = res; const { stationinfo } = data; - setInfo(stationinfo); dispatch(SubwayActions.saveSubway(stationinfo)) }) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 7cd7b1f..bbf7be5 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -7,17 +7,21 @@ import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPane import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" -import { useSelector } from "react-redux" +import { useSelector, useDispatch } from "react-redux" +import { SubwayActions } from "../../store/Subway-slice" const SubwayElevator = () => { - const params = useParams() + const params = useParams(); + const dispatch = useDispatch(); const elevatorDetail = useSelector(state => state.subway.elevatorDetail) + const elechack = useSelector(state => state.subway.elevatorDetail.elechack) const [ElePos, setElePos] = useState([]); useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; const railCd = params.railCd; const lnCd = params.lnCd; + dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { await api.get(`subway/ElevatorMove/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { @@ -27,6 +31,7 @@ const SubwayElevator = () => { await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}/EV`) .then(res => { const { data } = res; + setElePos(data) }) @@ -40,10 +45,10 @@ const SubwayElevator = () => { } />
    -
    + {elechack &&
    -
    +
    }
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 0a3d484..0c43b64 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -3,20 +3,26 @@ import Header from "../../component/header/Header.js" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail" +import SubwayTransferInfo from "../../component/subway-component/subwaytransfer/SubwaytransferInfo" import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" +import { useSelector, useDispatch } from "react-redux" +import { SubwayActions } from "../../store/Subway-slice" const SubwayTransfer = () => { - const params = useParams() + const params = useParams(); + const dispatch = useDispatch(); const [trans, setTrans] = useState([]); + const transcheck = useSelector(state => state.subway.transferDetail.transCheck) useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; const railCd = params.railCd; const lnCd = params.lnCd; - const getBathChair = () => { - api.get(`subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) + dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) + const getBathChair = async () => { + await api.get(`subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; setTrans(data) @@ -33,7 +39,7 @@ const SubwayTransfer = () => {
    - + {transcheck && }
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css index 3d8f298..78563bb 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css @@ -11,11 +11,6 @@ justify-content: space-between; } -.subwaylist { - display: flex; - flex-direction: column; - margin-right: 30px; -} .subwaymain { display: flex; @@ -34,7 +29,4 @@ justify-content: space-between; } - .subwaylist { - margin-right: 0; - } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index 6cfcfec..41bec68 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -11,6 +11,11 @@ const SubwaySlice = createSlice({ elechack: false, imgPath: "", //elemethod: [] + }, + transferDetail: { + transCheck: false, + prev: {}, + next: {} } }, reducers: { @@ -31,6 +36,11 @@ const SubwaySlice = createSlice({ imgPath: "", //elemethod: [] } + state.transferDetail = { + transCheck: false, + prev: {}, + next: {} + } }, clickSubway(state, action) { state.currentSubway = action.payload; @@ -39,6 +49,11 @@ const SubwaySlice = createSlice({ state.elevatorDetail.imgPath = action.payload.imgPath; //state.elevatorDetail.elemethod = action.payload.elemethod; state.elevatorDetail.elechack = true; + }, + addTransfer(state, action) { + state.transferDetail.transCheck = true; + state.transferDetail.prev = action.payload.prev; + state.transferDetail.next = action.payload.next; } } }) From dfdb1b509ffc8d4eafaeec75cba72b2641fe3df9 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Mon, 12 Dec 2022 00:23:25 +0900 Subject: [PATCH 14/32] =?UTF-8?q?feat.=20HashRouter=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * BrowserRouter에서 HashRouter로 변경 --- Backend/Frontend/creative/src/App.js | 6 +++--- .../component/subway-component/subwaylist/SubwayItems.js | 2 +- .../Frontend/creative/src/page/subwaypage/SubwayElevator.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Backend/Frontend/creative/src/App.js b/Backend/Frontend/creative/src/App.js index 2efc1ef..28c78de 100644 --- a/Backend/Frontend/creative/src/App.js +++ b/Backend/Frontend/creative/src/App.js @@ -1,4 +1,4 @@ -import { BrowserRouter, Routes, Route } from "react-router-dom"; +import { HashRouter, Routes, Route } from "react-router-dom"; import MainPage from "./page/MainPage.js" import BusPage from "./page/BusPage.js" import SubwayPage from "./page/subwaypage/SubwayPage.js" @@ -10,7 +10,7 @@ import SubwayBathChairPage from "./page/subwaypage/SubwayBathchair.js"; //page마다 url을 따로 지정, 페이지에서 api를 호출할 때 필요한 파라미터를 제공 function App() { return ( - + } /> } /> @@ -20,7 +20,7 @@ function App() { } /> } /> - + ); } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index c60a7e4..6ed54b5 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -19,7 +19,7 @@ const SubwayItems = ({ items }) => { const ClickSubway = () => { if (currentSubway === stCd) { - window.location.href = `/subway/detail/${stCd}/${stNm}`; + window.location.href = `/#/subway/detail/${stCd}/${stNm}`; } else if (currentSubway !== stCd) { setColor(false) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index bbf7be5..2aa8577 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -28,7 +28,7 @@ const SubwayElevator = () => { const { data } = res; }) - await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}/EV`) + await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; From 14d4571924744f7d03bdf9901919b1a08d7bbb4a Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Tue, 13 Dec 2022 19:40:31 +0900 Subject: [PATCH 15/32] =?UTF-8?q?feat.=20=EC=9D=B4=EB=AA=A8=EC=A7=80=20+?= =?UTF-8?q?=20=EC=84=9C=EB=B2=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Frontend/creative/public/image/BUS.png | Bin 0 -> 1396 bytes .../Frontend/creative/public/image/Call.png | Bin 0 -> 299 bytes .../Frontend/creative/public/image/GRASS.png | Bin 0 -> 899 bytes .../Frontend/creative/public/image/LEFT.png | Bin 0 -> 874 bytes .../Frontend/creative/public/image/RIGHT.png | Bin 0 -> 797 bytes .../Frontend/creative/public/image/SUBWAY.png | Bin 0 -> 1356 bytes .../Frontend/creative/public/image/phone.png | Bin 0 -> 347 bytes .../bus-component/busform/BusButton.js | 10 ++- .../bus-component/busform/BusForm.js | 23 +++--- .../bus-component/busform/BusInput.js | 2 +- .../bus-component/buslist/BusItem.js | 1 - .../bus-component/buslist/BusList.js | 3 +- .../bus-component/buslist/RefreshButton.js | 15 ++-- .../bus-component/buslist/StationItem.js | 2 +- .../creative/src/component/header/Header.js | 14 ++++ .../creative/src/component/map/Mapping.js | 27 +++---- .../src/component/map/Mapping.module.css | 4 +- .../creative/src/component/menu/MenuBar.js | 6 +- .../src/component/menu/MenuBusButton.js | 57 ++++++++++++++- .../src/component/menu/MenuSubwayButton.js | 69 ++++++++++++++++-- .../subwayElevator/SubwayElevatorDetail.js | 2 +- .../subwayElevator/SubwayElevatorItem.js | 3 +- .../subwaybath/SubwayBathChairInfo.js | 2 + .../subwaydetail/SubwayDetail.js | 34 +++++++-- .../subwayform/SubwayButton.js | 10 ++- .../subway-component/subwayinfo/SubwayInfo.js | 4 +- .../subwaylist/SubwayItems.js | 1 + .../subway-component/subwaylist/SubwayList.js | 3 +- .../subwaymenubar/SubwayBar.js | 2 +- .../subwaypanel/SubwayPanel.js | 2 +- .../subwaytransfer/SubwayTransferItem.js | 18 ++++- .../subwaytransfer/SubwayTrasferDetail.js | 33 ++++++++- .../subwaytransfer/SubwaytransferInfo.js | 67 ----------------- .../creative/src/page/MainPage.module.css | 2 +- .../src/page/subwaypage/SubwayBathchair.js | 17 +---- .../src/page/subwaypage/SubwayDetailPage.js | 4 +- .../subwaypage/SubwayDetailPage.module.css | 3 +- .../src/page/subwaypage/SubwayElevator.js | 25 ++----- .../page/subwaypage/SubwayElevator.module.css | 20 ++++- .../src/page/subwaypage/SubwayPage.module.css | 1 + .../src/page/subwaypage/SubwayTransfer.js | 16 ++-- .../page/subwaypage/SubwayTransfer.module.css | 22 ++++++ .../creative/src/store/Subway-slice.js | 52 +++++++------ 43 files changed, 360 insertions(+), 216 deletions(-) create mode 100644 Backend/Frontend/creative/public/image/BUS.png create mode 100644 Backend/Frontend/creative/public/image/Call.png create mode 100644 Backend/Frontend/creative/public/image/GRASS.png create mode 100644 Backend/Frontend/creative/public/image/LEFT.png create mode 100644 Backend/Frontend/creative/public/image/RIGHT.png create mode 100644 Backend/Frontend/creative/public/image/SUBWAY.png create mode 100644 Backend/Frontend/creative/public/image/phone.png delete mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js diff --git a/Backend/Frontend/creative/public/image/BUS.png b/Backend/Frontend/creative/public/image/BUS.png new file mode 100644 index 0000000000000000000000000000000000000000..db7ef98f4b675551ae165c2355956ba99000fa80 GIT binary patch literal 1396 zcmV-)1&jKLP)TCd7Kf)G(28y=ukc~@Q|LupPgq14&d$>=>%y|9(s8$C>EZ)51SPpL9bcIe_apWJ7HK-m3 z9e>jDMF|=IBFczCpBoGo`j$TTAmS??*ejw4@EwPTdlIySP87TBh)5OBk#hDv8@KjL z71BL_iAWXB&EX1mVIlvA;*70`@?iZ1Zn)NKq&upf$U)Zx?$Bn{5xI!sg|3^tg?ghK zN>B6^?on@aKq=x!_+cSEKZ-?8D&1+mSU|A~d!kPPnFNYeSVZ5=TLQ%@#}M%q6sxd^ zkMPS+C{|$+@8K8U|1Ww@BnIcx8x0hzl+TG7{J?3>>WP*qMZAF@GAP!`MU=!01NU4( zu}(FLaRIkn#WDtFY-|TgQ3Y?P3vL59o#6)Va|`EG{#(SsplA2`Xt#6NpEAUt$lh^% z2h1m)VuJiNJVPp)$8H+ffxqvAHluFY87L(ceoD5+%iu?eQ+=dx&)y-6?2%+Cissc| z80>v~6LYE_=!e!^3?9i%_L^2dpzzG5>l$y*P~73Zrq3*)c%xS?2H&~TV$+g(eQ~Uz z`$~Y55h=Tr*aQTJzUnbdUeBcOchDR$mN6&-=`N!el(v2!q%?DsW9v&yb@W{YnDw7p)C<#2`GR-|E5$Anp=a5O4eADZH%3W%L0mSBseJ7Ck1poA%Ib`q* zBe98?cFiRxZ@Nk0pGA+d@sBXYKw`Wm=92B31WdS>wu{Wm%N*Ci6Q69=O zC{5&V2@m1M<|~vY@}#E_L|noDTstAab+Y1>(TjL!&;A6sDWf7mJSR#*k51a~%(|L+ z7Re!(Xq|Q zdxrOs!Xqu^sPi!PcT-6j`;at!N06QGND=%g=QFl{Hm|_>{?4A zh*zGT-}_j9>kYp^<#PZ6=E!+0$o{MC`c1a!s@p%``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{sB)H$B+ufw^J?(HW~1=)z57Zyy4*X!s9N3 z`31oOp*s%d59TxoUYYYYHae5v68~~9Z}z%*|g1>YrikwJu5$TI6PPPfMu(U_JNd qNz4@?ejbHI=S9r_+}gc)4!>JU^q1KTmS=!|VeoYIb6Mw<&;$T!VQ6Lm literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/public/image/GRASS.png b/Backend/Frontend/creative/public/image/GRASS.png new file mode 100644 index 0000000000000000000000000000000000000000..625324a8d23c4ad5062b6de6379023e02fc0dce0 GIT binary patch literal 899 zcmV-}1AP36P)002t}1^@s6I8J)%00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPkaU8U3G5A8COGb%HXfj zmp(O-?7u$lP7Nc(@Q9+i$jeJbAy~E6VT1Th@5;l0G)QJ-Wx0h znGS)MX;VZxQvW7Uzc`W#r9&n>@F8nh%ybI1b4C79wnOQV-}8+k)InPn`NNS0r9%Eu z)zSo0gX^q)ZK6~HqpHS4aNS?$Xm=3go)TM32$^`!)pmJn7eCasr*|t%47oj|h&b9h zISQVskfmqs=yFjb18)+(d+8{@MFu!(m%T67URO*OF_;vwTo1HIK3pAhi43HO9p!J4f!L8%mbaOSD6x2P?L7a^(yNwPJ1u3+a!rBv$VcTU z|AP#qh}AjDv$$=`+ELyi11Vy;-1Zt7uvvnuW6C;fB!Bil`RF3Ei+U842KkfO9Eo)6 zX!{pRgl5_*A^$e^HA;j68*wy2_D^Pe+1VyahRlhLi&1wV$n4Cvp7t7)42Ac_Wgou6 zKq!1*QTC|n;Rn4TKP?ULkQ8@sqQX)j|8(rxrieynO^mq?Fv}t9(Bu0%xKofrBxu~j z1h)MJHrU^aNnk5pE!IJ7*nY?#fxLB82HpI#Q$ZH>3iBZy@xkt-PD)C;^8(wel1S$W z48P%c4k*)nN2MKF_@MCpgi~qB2E61+d1&O*@W~+)R(z*%5O26S6d)kh@&pqOL_75Y z?&jD_lRtx4u3$a(1tq84(aRw7!IsHgFNxjii26dKYuSR0jS7~C3YLfpmWT?L2*t&C zDp-#SmWT?Lhzgd73YJKuU}c^R%|Sr02Fm|91Z$ui=b2y)6hBt528yC6ilQirqA1F9 Z{sG{`KBnEH;8*|v002ovPDHLkV1leHmI43( literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/public/image/LEFT.png b/Backend/Frontend/creative/public/image/LEFT.png new file mode 100644 index 0000000000000000000000000000000000000000..e924fac14f9e06791c2fb9e9e0642a2c42e6ec4b GIT binary patch literal 874 zcmV-w1C{)VP)=jED8VxfC2^ufCEs#Nx%Wc0S=brF3a>_de`fAyUF(ZW-?m^ z|0M4l&{j~XIkq380ldwPzuU*`g}@j6#z%FsK6{o?;Mot z064Nm9LY?<&^;a01N*raC1smu3Pp*D2E{ zAHQFR<2NvaCIT~sWtTo5LQn!Ts=7;_>y&AIkLx42umomRv~ z*8pz%FEC4;GBk4*+iX?}>^OnwzxVrJs4n`6U3jvhz)!5}aKK zPJk10&`HVT0RX| zErA7?G%&Lin!jDO1eRd(z#QnP1Fbt*U=Fr|GyjKk69A1kd0-AwXkKaz0WFy=Fb6v7 zKr3bs%)!?1;%WXI3NTVNfti*1W`2-OV+g2DRe?G9r=xxu02Qb*Fb5?#^D$k06PR7q zfjQ6^0&37iU=9o~1~@?9_p7u%n^pv{r#*wS3jnUAP<+zwp267#z(`HiFmID;n?E#$ z01nXKoci7cz(_}Z)2BB5^&3N7TAOn965wEe0B?}!5$1!`3;+NC07*qoM6N<$f?-2x A{Qv*} literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/public/image/RIGHT.png b/Backend/Frontend/creative/public/image/RIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..693c94f7d1bce33e2f538f5ec1a222e6fa63dfb6 GIT binary patch literal 797 zcmV+&1LFLNP)X*EZ&(EI zO&(5o0_5@fQda@cqI|h^>URRI$=6#8PoNoDM_=l504!bB)u&+*uw;1}z3>DUDNk#Y zZ=~P(O8~rmSEc$iECQAy&+Ct$6`rdAs9;F4IImr)FRRt+E&wh~{ycr2aad%f2~?5i zUuo{!mHMr$JhyQ|20_45bfq?V;$hLM{P?@__fr78&RaXlb6@JVtUPy7(dt_w_W`g> zH!%*3{)q}~&w-`8DfPA1ut;bEE$B+EYfRdOCeV^D#_-&{bXX)bffilG3y)>6kNY1AO@L`#sfYc3r_cnLcOBn{ zMel?r!1H#c{v3{C{u%)M$Z%f$OR2lZv+F_=VA_35yd_C!0z9>iF)X)J9|}!?(Xjpg zy@cic+&>9TpmqQ2Th0-hK+Co<-Yc{_^a~z20$Q{!^`V62hhwk9u+jutGHkzZUvpQw z&;(j>8wd6+=Lk(;>9%oX-*V0>04m5L-j-dAVY!Wp41$2Ad3@gTeeJ*;*q#GRGCXg2 zQ|pfNDMAxif^Cee%fI5pgeGvwc5#BfzErAx~>-43r1E3Z8GWwQ4 zoAP)MrMduU(Gg*}NqtM8bq9pyuoeFl0L+G_z9qoEnXPyi06eu9mS6QP0cPl10vsV5 bd1c$bLTm9CfC_Tn00000NkvXXu0mjfV#R3S literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/public/image/SUBWAY.png b/Backend/Frontend/creative/public/image/SUBWAY.png new file mode 100644 index 0000000000000000000000000000000000000000..576ca07098c71f661edbb22879fc5da85a8c61ce GIT binary patch literal 1356 zcmbW1{Xf$Q0LQ0Dp4Rg4nrY;)c{mqQR32ws8$!s#Ezi$O9!g!stQkX`HP21RrG`A@ z@nT+Fv+^YmG1=rbi#$}e*Nu``xZV8$_rv}0d3b;RfKRTM$5|CcEkzIrq=LmbdrK21 z)un?6q^{|{dqNrtNtnQ^Adr&UKav5_?`uj&nXBGsoj}cF@Q+fEjX|A5fk3TPrSD;K zQk=&+qkM13h$>0fX00F;;`X)MDf`;hIx2O)$YPOowxkflr?#jfg-Fl4(HTZ+?0b%Y zY%mYUnspi_bz5rEB0~uYEiRj&o3c%ddaDxfXBsTda#7{ReRk&+! z(Wb1;>06_#%|?pyXvKU-^=&9Vj`&hA8_vkg>8HL*T-%f!_h9R`kuTB$v)0cX3z-)m z-g@QL2Ur08XOTl~;^6mKA?TC!a_b$I#~Q33=-{lJX0I=;iC^kzHjAgT2nZ z)>3W!hB8OUJQdl%n@q0_YTuKAkvI555hKx!I+X&nFg+H3UCsh&xitZ#@3%lsGWtt{ zGV-wq2YR^(^)rGkTrdrW4*{~{D>1s!-w)VXKSdufX;xn){>jPdk>k=!ltgx2Y#mKn z(q0IKF9GWpb9)NI*pOkX%r=#pc(l>%|F6zFjn$j!GBzDWs=bFKFnQR4`v*=My7W$ekNV4C8lu>IZh+f_sAj&lXBc z8q3|uzKLQuUi+}>oy&5kQl6W8UIn{R`wILMX-R$NkNP;5@Nf#^F^RKm8k?iB0(SL| ze6m-h(if_=s57|dRj6lU9pZMquZ(2w0PYliGb|qP)%ktsEmi#xekM4%q9d!mHuzuE z!=+NLSf;uoEOR!JzuV>!!CLbg>*d1+%obX9bl+O`*WxjHD6vG#HH~jj z0-%%Yb2%M2)Dkl47#YL59Pon6QE`l38b$0tp^(A8A%xUFEd}Jf1}?}iaj0l*;rh|kK>l$ z+}q4A=yqdT7LJObJ@i#9p>q*-tT=BJ8Uhr&+118?%Yq2ImD=Z9i-`D#CfTf|F5w#+ z#?aR zDuc^Q1|U@i5;m>`oXhgjI*H(={fdE9>ES42u6Lp2{e)T|`pQy{)nVg)dJJaR|MM}& b!f$d&3)b`Dlw7>@{6JV259em5(2TzU?C*-7 literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/public/image/phone.png b/Backend/Frontend/creative/public/image/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..06496ca5345915e542225f18026886060811c28f GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoQ!3HFqYQLWaQk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFK>i0$7srqa#=Dar@-`U=w9eOCpj^V@K7li( zrSAaS21bj+3lWZ)?8h}aX+#1fO(Ab0oK1d zQ$;tYCwaXy2v;q;ssF`zzfra{hfhsUw1`c?OdE;jD^cFI-*^{2{3pNZ-O1X1Rkhq_ zyeW@wJ6IgbU3`8*VA*dMjT2gdGdvz<7C153?X6T=z~yX|G$}z%YlnN4naHo}*Am*Y qH(i|8dCX}>ruGJdZs|XI^3MvUpZ>jK>MWq&89ZJ6T-G@yGywp%1cKNA literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js index f6faf9f..12fbe46 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js @@ -2,20 +2,24 @@ import styled from "styled-components" const StyledButton = styled.button` width: 16%; -height: 11vh; +height: 100%; background: #CDD029; border: 1px solid #CDD029; padding:0; +.GRASS{ + width:80%; + height:80%; + background: transparent; +} @media (max-width:500px){ width:20%; height:100%; } - ` const BusButton = () => { return ( - + GRASS ) } diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index a80993a..1c0dd49 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -5,7 +5,7 @@ import { api } from "../../auth/Api"; import { MapActions } from "../../../store/Map-slice"; import { BusActions } from "../../../store/Bus-slice"; import { useDispatch } from "react-redux"; - +import axios from "axios" const StyledForm = styled.form` display:flex; @@ -22,17 +22,16 @@ const StyledForm = styled.form` const BusForm = () => { const dispatch = useDispatch(); const SubmitBusStation = (value) => { - api.get(`/bus/stNm/${value}`, { - - }).then(res => { - const { data } = res; - dispatch(BusActions.initialState()) - dispatch(MapActions.makerchacking(data)) - dispatch(BusActions.addStationInfo(data)) - dispatch(MapActions.positioning(data[0])) - }).catch(error => { - alert("데이터를 받아오지 못했습니다.") - }); + axios.get(`/bus/stNm/${value}`) + .then(res => { + const { data } = res; + dispatch(BusActions.initialState()) + dispatch(MapActions.makerchacking(data)) + dispatch(BusActions.addStationInfo(data)) + dispatch(MapActions.positioning(data[0])) + }).catch(error => { + alert("데이터를 받아오지 못했습니다.") + }); } const BusStationData = (event) => { diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js index 250a90d..86497a8 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js @@ -2,7 +2,7 @@ import styled from "styled-components" const StyledInput = styled.input` width: 80%; -height: 10vh; +height: 80%; padding: 15px; font-size: 2.5vw; border:0; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index a27516f..04686e3 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -64,7 +64,6 @@ div{ const BusItem = (props) => { const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; - console.log(busrouteid); return ( diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js index fbb7ab1..0839e87 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js @@ -17,8 +17,9 @@ padding:0; margin:0; overflow:auto; @media (max-width:500px) { + border: 4px solid #CDD029 ; width:100%; - height:50vw; + height:30vh; } ` diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index c02bfb5..d90b38a 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -37,14 +37,13 @@ const RefreshButton = () => { }; const Refresh = () => { clickCheck.check = true; - api.get(`/bus/arsId/${busId}`, { - - }).then(res => { - const { data } = res; - dispatch(BusActions.addBusInfo(data)) - }).catch(error => { - alert(error) - }) + axios.get(`/bus/arsId/${busId}`) + .then(res => { + const { data } = res; + dispatch(BusActions.addBusInfo(data)) + }).catch(error => { + alert(error) + }) } console.log(Node.classList) return ( diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index e80b0fd..3e3f088 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -31,7 +31,7 @@ const StationItem = (props) => { } const SubmitStation = () => { - api.get(`/bus/arsId/${arsId}`, { + axios.get(`/bus/arsId/${arsId}`, { }).then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.js index 33d44c1..d3d78b1 100644 --- a/Backend/Frontend/creative/src/component/header/Header.js +++ b/Backend/Frontend/creative/src/component/header/Header.js @@ -7,6 +7,7 @@ import { MapActions } from "../../store/Map-slice"; const StyledHeader = styled.header` display:flex; +justify-content:space-between; align-items:center; font-family: 'GmarketSansMedium'; font-weight: 700; @@ -19,9 +20,21 @@ a{ color:#000000; text-decoration:none; } +p{ + font-family: 'Pretendard-Regular'; + font-style: normal; + font-weight: 700; + font-size: 1.8vw; + line-height: 48px; + text-align: center; + color: #5C5454; +} @media (max-width:500px) { font-size:8vw; height:8vh; + p{ + font-size: 4vw; + } } ` @@ -38,6 +51,7 @@ const Header = () => { 타자 +

    Sejong University

    ) } diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index fe34fdf..6c5a920 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -1,13 +1,15 @@ import { useEffect } from "react"; import { useSelector, useDispatch } from 'react-redux'; import classes from "./Mapping.module.css" -import axios from "axios"; +import { api } from "../auth/Api"; import { BusActions } from "../../store/Bus-slice"; +import axios from "axios" const Mapping = () => { const dispatch = useDispatch() const marker = useSelector(state => state.map.marker) const position = useSelector(state => state.map.position) + const arsid = useSelector(state => state.bus.currentStation) useEffect(() => { const container = document.getElementById("map"); const options = { @@ -20,6 +22,7 @@ const Mapping = () => { }) const mapcoordinate = (marker, map) => { + const element = marker.filter(id => id.arsId === arsid) marker.forEach(element => { const imageSrc = './image/busImage.png' // 마커이미지의 주소입니다 const imageSize = new window.kakao.maps.Size(64, 69) @@ -31,24 +34,22 @@ const Mapping = () => { clickable: true, image: markerImage }) - /*window.kakao.maps.event.addListener(marker, 'click', () => { + window.kakao.maps.event.addListener(marker, 'click', () => { submitStationId(element.arsId) - })*/ + }) marker.setMap(map) }); } const submitStationId = (id) => { - axios.get(`/bus/arsId/${id}`, { - - }).then(res => { - const { data } = res; - console.log(data) - dispatch(BusActions.refreshBus(id)) - dispatch(BusActions.addBusInfo(data)) - }).catch(error => { - alert("저상 버스가 없습니다.") - }) + axios.get(`/bus/arsId/${id}`) + .then(res => { + const { data } = res; + dispatch(BusActions.refreshBus(id)) + dispatch(BusActions.addBusInfo(data)) + }).catch(error => { + alert("저상 버스가 없습니다.") + }) } return ( diff --git a/Backend/Frontend/creative/src/component/map/Mapping.module.css b/Backend/Frontend/creative/src/component/map/Mapping.module.css index e6a2ea2..14f1bed 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.module.css +++ b/Backend/Frontend/creative/src/component/map/Mapping.module.css @@ -6,7 +6,7 @@ @media (max-width:500px) { .map { - width: 100vw; - height: 80vw; + width: 99%; + height: 40vh; } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.js b/Backend/Frontend/creative/src/component/menu/MenuBar.js index 7b47297..4f26b80 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.js @@ -1,6 +1,5 @@ import MenuBusButton from "./MenuBusButton" import MenuSubwayButton from "./MenuSubwayButton" -import { Link } from "react-router-dom" import styled from "styled-components" import MenuExplan from "./MenuExplan" @@ -10,6 +9,7 @@ justify-content: space-between; width: 100%; padding-top:5vw; height: 633px; +text-decoration:none; @media (max-width:500px){ flex-direction: column; justify-content: space-evenly; @@ -20,9 +20,9 @@ height: 633px; const MenuBar = () => { return ( - + - + ) } diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js index 69f9b39..df38c27 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -1,19 +1,50 @@ import styled from 'styled-components' import { useDispatch } from 'react-redux' import { MapActions } from '../../store/Map-slice' +import { Link } from "react-router-dom" const StyledButton = styled.button` width: 442.5px; height: 537px; font-size: 60px; -color: #FFFFFF; +border:none; font-family: 'Pretendard-Regular'; background: rgba(205, 208, 41, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 0px 20px 20px 0px; +opacity:0.8; +a{ + display:flex; + flex-direction:column; + justify-content:space-between; + align-items:center; + width: 100%; + height: 70%; + text-decoration:none; + color: #FFFFFF; +} +.image{ + display:flex; + flex-direction:column; + align-items:center; + width: 25%; + height: 25%; +} +.RIGHT{ + width:18vw; + height:5vw; + margin-right:70%; +} +.BUS{ + width:6vw; + height:6vw; + margin-right:70%; +} :hover{ cursor: pointer; + opacity:1; } + @media (max-width:1630px){ font-size: 4vw; width: 26vw; @@ -23,6 +54,22 @@ border-radius: 0px 20px 20px 0px; font-size: 6vw; width: 80vw; height: 10vh; + .BUS{ + width:8vw; + height:8vw; + } + a{ + justify-content:space-evenly; + flex-direction:row-reverse; + align-items:center; + } + .RIGHT{ + width:30vw; + height:5vw; + } + .image{ + margin-bottom:4vw; + } } ` @@ -35,7 +82,13 @@ const MenuBusButton = () => { } return ( - 저상버스 + +

    저상버스

    +
    + GRASS + GRASS +
    +
    ) diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index d3b9f8d..7e5a9db 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -1,29 +1,82 @@ import styled from 'styled-components' import { useDispatch } from 'react-redux' import { MapActions } from '../../store/Map-slice' +import { Link } from "react-router-dom" const StyledButton = styled.button` width: 442.5px; height: 537px; font-size: 60px; -color: #FFFFFF; +border:none; font-family: 'Pretendard-Regular'; background: rgba(146, 85, 245, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 20px 0px 0px 20px; +opacity:0.8; +a{ + display:flex; + flex-direction:column; + justify-content:space-between; + align-items:center; + width: 100%; + height: 70%; + text-decoration:none; + color: #FFFFFF; +} +.image{ + display:flex; + flex-direction:column; + align-items:center; + width: 25%; + height: 25%; +} +.RIGHT{ + width:18vw; + height:5vw; + margin-left:70%; +} +.subtext{ + width:50%; +} +.SUBWAY{ + width:4.5vw; + height:5vw; + margin-left:70%; +} + :hover{ cursor: pointer; + opacity:1; } @media (max-width:1630px){ - font-size: 3vw; - width: 25vw; + font-size: 4vw; + width: 26vw; height: 60vh; + .subtext{ + width:55%; + } } @media (max-width:500px){ font-size: 6vw; width: 80vw; height: 10vh; - margin-left:20vw; + margin:20vw; + .SUBWAY{ + width:6.5vw; + height:7vw; + } + a{ + justify-content:space-evenly; + flex-direction:row; + align-items:center; + } + .RIGHT{ + width:30vw; + height:5vw; + } + .image{ + margin-bottom:4vw; + } } ` @@ -35,7 +88,13 @@ const MenuSubwayButton = () => { } return ( - 지하철
    편의시설 + +

    지하철 편의시설

    +
    + GRASS + GRASS +
    +
    ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js index a71f9af..079da6e 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js @@ -12,7 +12,7 @@ overflow:auto; @media (max-width:500px) { width:98%; - height:80vw; + height:70vw; } ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js index f9b8f57..6b6e430 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js @@ -5,7 +5,6 @@ import { SubwayActions } from "../../../store/Subway-slice"; const SubwayElevatorItems = ({ items }) => { const { dtlLoc, imgPath } = items - console.log(imgPath) const dispatch = useDispatch(); const ClickSubway = () => { dispatch(SubwayActions.addelevator({ imgPath })) @@ -49,7 +48,7 @@ a{ color:#000000; } @media (max-width:500px){ - height:43%; + height:25%; .name{ font-size: 5vw; } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index cd9c730..d369cb6 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -11,6 +11,8 @@ font-weight: 600; margin-left:23px; @media (max-width:500px){ font-size:4vw; + width:100%; + height:80vw; } ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index 55ab64d..47f46d6 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -1,5 +1,4 @@ import styled from "styled-components"; -import { useSelector } from "react-redux"; const StyledDetail = styled.div` display:flex; @@ -7,8 +6,14 @@ flex-direction:column; width: 749px; height: 747px; background-color:white; +margin:0; border: 4px solid #9255F5; +.info-image{ + width: 1.8vw; + height: 1.8vw; +} .name{ + font-family: 'Pretendard-Regular'; display:flex; align-items:center; width:100%; @@ -25,7 +30,6 @@ border: 4px solid #9255F5; justify-content:center; align-items:center; color:#FFFFFF; - font-family: 'Pretendard'; font-style: normal; font-weight: 600; font-size: 70%; @@ -35,17 +39,27 @@ border: 4px solid #9255F5; border-radius:200px; } .info{ + font-family: 'Pretendard-Regular'; width:100%; display:flex; flex-direction:column; - align-items:start; font-weight: 600; font-size: 30px; + padding-left:1vw; +} +p{ + display:flex; + justify-content:start; } @media (max-width:500px) { - width:98%; + border: 2px solid #9255F5; + width:99%; height:80vw; + .info-image{ + width: 4.5vw; + height: 4.5vw; + } .line{ width: 8vw; height: 8vw; @@ -55,7 +69,12 @@ border: 4px solid #9255F5; font-size:5vw; } .name p{ - margin-left:8vw; + margin-left:3vw; + } + .info{ + padding-left:3vw; + font-size:4vw; + width:90%; } } ` @@ -69,8 +88,9 @@ const SubwayDetail = ({ info }) => {

    {info.stNm}

    -

    {info.lonmAdr}

    -

    {info.roadNmAdr}

    +

    {info.roadNm}

    +

    {info.tNum}

    +

    교통약자 도우미
    {info.wNum}

    ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js index 9926b08..a080ee7 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js @@ -2,10 +2,14 @@ import styled from "styled-components" const StyledButton = styled.button` width: 16%; -height: 11vh; +height: 100%; background: #9255F5; border: 1px solid #9255F5; - +.GRASS{ + width:80%; + height:80%; + background: transparent; +} @media (max-width:500px){ width:20%; height:100%; @@ -15,7 +19,7 @@ border: 1px solid #9255F5; const SubwayButton = () => { return ( - + GRASS ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js index 95cd3af..5dd07d1 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -13,13 +13,11 @@ overflow:auto; @media (max-width:500px){ margin:0; width: 98%; - height:50vw; - + height:80vw; } ` const SubwayInfo = ({ info }) => { - console.log(info) return ( {info.map((element) => ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 6ed54b5..21526cf 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -3,6 +3,7 @@ import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useEffect } from "react"; import { SubwayActions } from "../../../store/Subway-slice"; +import { api } from "../../auth/Api"; const SubwayItems = ({ items }) => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js index 7bbf3f5..98b35a6 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js @@ -22,14 +22,13 @@ a{ } @media (max-width:500px) { width:100%; - height:50vw; + height:30vh; } ` const SubwayList = () => { const subwayCheck = useSelector(state => state.subway.subwayCheck) const subway = useSelector(state => state.subway.subway) - console.log(subway) return ( {subwayCheck && } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index a58b466..1f40100 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -37,7 +37,7 @@ a{ a{ display:flex; justify-content:center; - width:35vw; + width:31vw; font-size:3.5vw; } } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index fbcae1b..f5e3102 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -13,7 +13,7 @@ background: linear-gradient(270deg, #7C34F3 -44.25%, rgba(146, 85, 245, 0) 222.1 font-size: 2.5vw; color: #FFFFFF; @media (max-width:500px) { - width:100vw; + width:100%; height:10vh; margin:0; flex-direction:column; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js index 35e124d..26a6440 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js @@ -1,7 +1,8 @@ import styled from "styled-components"; -import { useDispatch } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice"; - +import { api } from "../../auth/Api"; +import axios from "axios" const StyldeSubwayItems = styled.li` display:flex; justify-content:space-between; @@ -25,7 +26,7 @@ font-family: 'Pretendard-Regular'; color:#000000; } @media (max-width:500px){ - height:43%; + height:40%; .name{ font-size: 4.5vw; } @@ -34,10 +35,19 @@ font-family: 'Pretendard-Regular'; const SubwayTransferItems = ({ items }) => { const { prev, next } = items + const si = useSelector(state => state.subway.subwayInfo) const dispatch = useDispatch(); const ClickSubway = () => { - dispatch(SubwayActions.addTransfer({ prev, next })) + const getTransfer = async () => { + await axios.get(`/subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) + .then(res => { + const { data } = res; + dispatch(SubwayActions.addTransfer(data)) + dispatch(SubwayActions.addprenex({ prev, next })) + }) + } + getTransfer() } return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js index b08afb9..01897f2 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js @@ -1,34 +1,63 @@ import styled from "styled-components"; import SubwayTransferItems from "./SubwayTransferItem"; +import { useSelector } from "react-redux"; const StyledTransferDetail = styled.div` display:flex; flex-direction:column; width: 749px; -height: 747px; +height: 720px; background-color:white; border: 4px solid #9255F5; overflow:auto; margin-right: 20px; +.title{ + margin:30px; + font-size: 40px; + font-weight: 600; + font-family: 'Pretendard-Regular'; + text-align:center; +} +.path{ + margin:30px; + font-size: 30px; + font-weight: 600; + font-family: 'Pretendard-Regular'; +} @media (max-width:500px) { width:98%; height:80vw; margin-right:0; + .title{ + margin:4vw; + font-size: 6vw; + } + .path{ + margin:4vw; + font-size: 4.5vw; + } } ` const SubwayTransferDetail = ({ info }) => { const [prev, next] = info; + const transCheck = useSelector(state => state.subway.transferDetail.transferImage) + const transRoad = useSelector(state => state.subway.transferDetail.transRoad) + const transset = useSelector(state => state.subway.transprevnext) return ( - {prev?.sourceStation.map(prev => ( + {!transCheck && prev?.sourceStation.map(prev => ( next?.transferStation.map(next => ( )) ))} + {transCheck &&
    {[`${transset.prev.lnCd}호선 ${transset.prev.stNm}방면 ->`,
    , `${transset.next.lnCd}호선 ${transset.next.stNm}방면`]}
    } + {transCheck && transRoad.map(element => ( +

    {element.mvContDtl}

    + ))}
    ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js deleted file mode 100644 index da3ac8c..0000000 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js +++ /dev/null @@ -1,67 +0,0 @@ -import styled from "styled-components"; -import { useSelector } from "react-redux"; -import { useEffect } from "react"; -import { api } from "../../auth/Api"; -import { useState } from "react"; - -const StyledTransferInfo = styled.div` -display:flex; -flex-direction:column; -width: 680px; -height: 747px; -background-color:white; -border: 4px solid #9255F5; -overflow:auto; -.title{ - margin:30px; - font-size: 40px; - font-weight: 600; - font-family: 'Pretendard-Regular'; - text-align:center; -} -.path{ - margin:30px; - font-size: 30px; - font-weight: 600; - font-family: 'Pretendard-Regular'; -} -@media (max-width:500px) { - width:98%; - height:80vw; - .title{ - margin:4vw; - font-size: 6vw; - } - .path{ - margin:4vw; - font-size: 4.5vw; - } -} -` - - -const SubwayTransferInfo = () => { - const { prev, next } = useSelector(state => state.subway.transferDetail) - const si = useSelector(state => state.subway.subwayInfo) - const [path, setPath] = useState() - useEffect(() => { - const getTransfer = async () => { - await api.get(`subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) - .then(res => { - const { data } = res; - setPath(data) - }) - } - getTransfer() - }, [prev, next]) - return ( - -
    {[`${prev.lnCd}호선 ${prev.stNm}방면 ->`,
    , `${next.lnCd}호선 ${next.stNm}방면`]}
    - {path?.map(element => ( -

    {element.mvContDtl}

    - ))} -
    - ) -} - -export default SubwayTransferInfo; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/MainPage.module.css b/Backend/Frontend/creative/src/page/MainPage.module.css index 1d2c7c1..7420b29 100644 --- a/Backend/Frontend/creative/src/page/MainPage.module.css +++ b/Backend/Frontend/creative/src/page/MainPage.module.css @@ -11,7 +11,7 @@ body { } .bottom { - width: 100vw; + width: 100%; height: 100vh; background: rgba(40, 40, 40, 0.8); } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index ff8c0e8..13c0d9c 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -6,7 +6,7 @@ import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" - +import axios from "axios" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.js" @@ -21,23 +21,10 @@ const SubwayBathchair = () => { const railCd = params.railCd; const lnCd = params.lnCd; dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) - const checklift = async () => { - await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}/WCLF`) - .then(res => { - const { data } = res; - console.log(data) - }) - .catch(error => { - console.log("에러발생!") - console.log(error) - }) - } - checklift(); const getBathChair = async () => { - await api.get(`subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + await axios.get(`/subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; - console.log(data) setBath(data) }) } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 0ba9af8..8b7f5ac 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -9,7 +9,7 @@ import { SubwayActions } from "../../store/Subway-slice.js" import { api } from "../../component/auth/Api.js" import { useParams } from "react-router-dom" import { useEffect, useState } from "react" - +import axios from "axios" const SubwayDetailPage = () => { const params = useParams() @@ -19,7 +19,7 @@ const SubwayDetailPage = () => { const stCd = params.stCd; const stNm = params.stNm; const getDetail = async () => { - await api.get(`subway/stationInfo/${stCd}/${stNm}`) + await axios.get(`/subway/stationInfo/${stCd}/${stNm}`) .then(res => { const { data } = res; const { stationinfo } = data; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css index 3d8f298..f6bbca2 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css @@ -25,12 +25,13 @@ @media (max-width:500px) { .main { flex-direction: column; + height: 100%; } .subwaymain { flex-direction: column; margin-top: 0; - height: 100%; + height: 81.7vh; justify-content: space-between; } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 2aa8577..8db78ce 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -1,5 +1,3 @@ -import SubwayElevatorDetail from "../../component/subway-component/subwayElevator/SubwayElevatorDetail" -import SubwayElevatorMap from "../../component/subway-component/subwayElevator/SubwayElevatorMap" import classes from "./SubwayElevator.module.css" import Header from "../../component/header/Header.js" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" @@ -7,14 +5,12 @@ import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPane import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" -import { useSelector, useDispatch } from "react-redux" +import { useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" - +import axios from "axios" const SubwayElevator = () => { const params = useParams(); const dispatch = useDispatch(); - const elevatorDetail = useSelector(state => state.subway.elevatorDetail) - const elechack = useSelector(state => state.subway.elevatorDetail.elechack) const [ElePos, setElePos] = useState([]); useEffect(() => { const stCd = params.stCd; @@ -23,17 +19,10 @@ const SubwayElevator = () => { const lnCd = params.lnCd; dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { - await api.get(`subway/ElevatorMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + await axios.get(`/subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; - - }) - await api.get(`subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) - .then(res => { - const { data } = res; - setElePos(data) - }) } getBathChair() @@ -43,12 +32,8 @@ const SubwayElevator = () => {
    } /> -
    - - {elechack &&
    - - -
    } +
    +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css index 9e71145..e0ba76a 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css @@ -5,8 +5,13 @@ } img { - width: 700px; - height: 52%; + width: 100%; + height: 100%; +} + +.elevator { + width: 60vw; + height: 60vh; } .subwaypage { @@ -36,9 +41,11 @@ img { margin: 0; } - img { + + + .elevator { width: 100%; - height: 50vw; + height: 80vw; } .subwaymain { @@ -48,6 +55,11 @@ img { justify-content: space-between; } + .elevator { + width: 60vw; + height: 60vh; + } + .subwaylist { margin-right: 0; } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css index 3d8f298..2b3d8ee 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.module.css @@ -25,6 +25,7 @@ @media (max-width:500px) { .main { flex-direction: column; + height: 100%; } .subwaymain { diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 0c43b64..25ce660 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -1,11 +1,11 @@ -import classes from "./SubwayBathchair.module.css" +import classes from "./SubwayTransfer.module.css" import Header from "../../component/header/Header.js" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" -import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail" -import SubwayTransferInfo from "../../component/subway-component/subwaytransfer/SubwaytransferInfo" +import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail.js" import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" +import axios from "axios" import { useEffect, useState } from "react" import { useSelector, useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" @@ -15,6 +15,7 @@ const SubwayTransfer = () => { const dispatch = useDispatch(); const [trans, setTrans] = useState([]); const transcheck = useSelector(state => state.subway.transferDetail.transCheck) + const tranferImage = useSelector(state => state.subway.transferDetail.transferImage) useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; @@ -22,10 +23,13 @@ const SubwayTransfer = () => { const lnCd = params.lnCd; dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { - await api.get(`subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) + await axios.get(`/subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; setTrans(data) + }).catch(res => { + alert("환승역이 아닙니다.") + window.location.href = `/#/subway/detail/${stCd}/${stNm}`; }) } getBathChair() @@ -36,10 +40,10 @@ const SubwayTransfer = () => {
    } />
    +
    - + {transcheck && }
    - {transcheck && }
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css index 78563bb..bc923e2 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css @@ -4,6 +4,17 @@ width: 100vw; } + +.transfer { + width: 650px; + height: 650px; +} + +.subwaylist { + width: 40vw; + height: 70vh; +} + .subwaypage { display: flex; flex-direction: column; @@ -20,6 +31,17 @@ @media (max-width:500px) { .main { flex-direction: column; + height: 100%; + } + + .subwaylist { + width: 100vw; + height: 43vh; + } + + .transfer { + width: 747px; + height: 747px; } .subwaymain { diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index 41bec68..f2764ba 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -7,15 +7,14 @@ const SubwaySlice = createSlice({ subwayCheck: false, subwayInfo: {}, currentSubway: "", - elevatorDetail: { - elechack: false, - imgPath: "", - //elemethod: [] - }, transferDetail: { transCheck: false, - prev: {}, - next: {} + transRoad: [], + transferImage: "" + }, + transprevnext: { + prev: "", + next: "" } }, reducers: { @@ -31,29 +30,38 @@ const SubwaySlice = createSlice({ state.subwayCheck = false; state.subwayInfo = {}; state.currentSubway = ""; - state.elevatorDetail = { - elechack: false, - imgPath: "", - //elemethod: [] - } state.transferDetail = { transCheck: false, - prev: {}, - next: {} - } + transRoad: [], + transferImage: "" + }; + state.transprevnext = { + prev: "", + next: "" + }; }, clickSubway(state, action) { state.currentSubway = action.payload; }, - addelevator(state, action) { - state.elevatorDetail.imgPath = action.payload.imgPath; - //state.elevatorDetail.elemethod = action.payload.elemethod; - state.elevatorDetail.elechack = true; - }, addTransfer(state, action) { state.transferDetail.transCheck = true; - state.transferDetail.prev = action.payload.prev; - state.transferDetail.next = action.payload.next; + state.transferDetail.transRoad = action.payload; + state.transferDetail.transferImage = action.payload[0].imgPath; + }, + addprenex(state, action) { + state.transprevnext.next = action.payload.next; + state.transprevnext.prev = action.payload.prev; + }, + initialtrans(state) { + state.transferDetail = { + transCheck: false, + transRoad: [], + transferImage: "" + }; + state.transprevnext = { + prev: "", + next: "" + } } } }) From 832f422aac9de4c04cc7a82108a95d203feafaac Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Tue, 13 Dec 2022 20:21:29 +0900 Subject: [PATCH 16/32] =?UTF-8?q?feat.=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/src/component/Auth/Api.js | 2 +- .../src/component/subway-component/subwayform/SubwayForm.js | 4 ++-- .../Frontend/creative/src/page/subwaypage/SubwayTransfer.js | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/Auth/Api.js index e4b23ab..de58e07 100644 --- a/Backend/Frontend/creative/src/component/Auth/Api.js +++ b/Backend/Frontend/creative/src/component/Auth/Api.js @@ -1,6 +1,6 @@ import axios from "axios" export const api = axios.create({ - baseURL: "http://34.168.52.103:3005/" + baseURL: "http://34.82.213.244:3005/" }) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 9436096..26d2d19 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -4,7 +4,7 @@ import styled from "styled-components"; import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice.js"; import { api } from "../../auth/Api.js"; - +import axios from "axios"; const StyledForm = styled.form` display:flex; @@ -21,7 +21,7 @@ const StyledForm = styled.form` const SubwayForm = () => { const dispatch = useDispatch(); const SubmitSubwayStation = (value) => { - api.get(`subway/stNm/${value}`) + axios.get(`/subway/stNm/${value}`) .then(res => { const { data } = res; dispatch(SubwayActions.addSubwayInfo(data)) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 25ce660..df0c087 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -5,11 +5,10 @@ import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPane import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail.js" import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" -import axios from "axios" import { useEffect, useState } from "react" import { useSelector, useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" - +import axios from "axios" const SubwayTransfer = () => { const params = useParams(); const dispatch = useDispatch(); From 2b106f4259653300f4aaa0d662bf5f824018c8ed Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 14 Dec 2022 02:17:43 +0900 Subject: [PATCH 17/32] =?UTF-8?q?feat.=20map=20focusing=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creative/src/component/Auth/Api.js | 2 +- .../component/bus-component/busform/BusForm.js | 5 +++-- .../component/bus-component/buslist/BusItem.js | 6 +++--- .../bus-component/buslist/RefreshButton.js | 8 ++++---- .../bus-component/buslist/StationItem.js | 5 ++--- .../creative/src/component/map/Mapping.js | 18 ++++++++++-------- .../subway-component/subwayform/SubwayForm.js | 4 ++-- .../subway-component/subwaylist/SubwayItems.js | 1 - .../src/page/subwaypage/SubwayBathchair.js | 4 +--- .../src/page/subwaypage/SubwayDetailPage.js | 3 +-- .../src/page/subwaypage/SubwayElevator.js | 4 ++-- .../src/page/subwaypage/SubwayTransfer.js | 7 +++---- 12 files changed, 32 insertions(+), 35 deletions(-) diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/Auth/Api.js index de58e07..dba4193 100644 --- a/Backend/Frontend/creative/src/component/Auth/Api.js +++ b/Backend/Frontend/creative/src/component/Auth/Api.js @@ -1,6 +1,6 @@ import axios from "axios" export const api = axios.create({ - baseURL: "http://34.82.213.244:3005/" + baseURL: "http://34.82.213.244:3005" }) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index 1c0dd49..3ae72ef 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -22,7 +22,7 @@ const StyledForm = styled.form` const BusForm = () => { const dispatch = useDispatch(); const SubmitBusStation = (value) => { - axios.get(`/bus/stNm/${value}`) + api.get(`/bus/stNm/${value}`) .then(res => { const { data } = res; dispatch(BusActions.initialState()) @@ -30,7 +30,8 @@ const BusForm = () => { dispatch(BusActions.addStationInfo(data)) dispatch(MapActions.positioning(data[0])) }).catch(error => { - alert("데이터를 받아오지 못했습니다.") + console.log(error) + alert("해당 정류장이 없습니다.") }); } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index 04686e3..ba64756 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -28,14 +28,14 @@ div{ font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 40px; + font-size: 2vw; line-height: 60px; } .direction{ font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 24px; + font-size: 1.5vw; line-height: 29px; } .id{ @@ -43,7 +43,7 @@ div{ font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 24px; + font-size: 1.5vw; line-height: 29px; color: #9C9C9C; } diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index d90b38a..f907b8c 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -5,8 +5,8 @@ import { useSelector, useDispatch } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; const StyledRefreshButton = styled.button` -width:60px; -height:60px; +width:3.5vw; +height:3.5vw; border: 0; border-radius:50px; background-color:transparent; @@ -35,9 +35,9 @@ const RefreshButton = () => { const clickCheck = { check: false }; - const Refresh = () => { + const Refresh = async () => { clickCheck.check = true; - axios.get(`/bus/arsId/${busId}`) + await api.get(`/bus/arsId/${busId}`) .then(res => { const { data } = res; dispatch(BusActions.addBusInfo(data)) diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 3e3f088..43cc832 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -1,5 +1,4 @@ import styled from "styled-components"; -import axios from "axios" import { api } from "../../auth/Api"; import { useDispatch, useSelector } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; @@ -30,8 +29,8 @@ const StationItem = (props) => { } } - const SubmitStation = () => { - axios.get(`/bus/arsId/${arsId}`, { + const SubmitStation = async () => { + await api.get(`/bus/arsId/${arsId}`, { }).then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index 6c5a920..e5edd80 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -3,7 +3,6 @@ import { useSelector, useDispatch } from 'react-redux'; import classes from "./Mapping.module.css" import { api } from "../auth/Api"; import { BusActions } from "../../store/Bus-slice"; -import axios from "axios" const Mapping = () => { const dispatch = useDispatch() @@ -22,27 +21,30 @@ const Mapping = () => { }) const mapcoordinate = (marker, map) => { - const element = marker.filter(id => id.arsId === arsid) + const currentArsid = marker.filter(id => id.arsId === arsid) marker.forEach(element => { const imageSrc = './image/busImage.png' // 마커이미지의 주소입니다 const imageSize = new window.kakao.maps.Size(64, 69) const imageOption = { offset: new window.kakao.maps.Point(27, 69) }; - const markerImage = new window.kakao.maps.MarkerImage(imageSrc, imageSize, imageOption) + let markerImage = new window.kakao.maps.MarkerImage(imageSrc, imageSize, imageOption) const markerPosition = new window.kakao.maps.LatLng(parseFloat(element.tmY - 0.0000005).toFixed(6), parseFloat(element.tmX - 0.0000005).toFixed(6)) - const marker = new window.kakao.maps.Marker({ + if (element.arsId !== currentArsid[0]?.arsId) { + markerImage = undefined; + } + const new_marker = new window.kakao.maps.Marker({ position: markerPosition, clickable: true, image: markerImage }) - window.kakao.maps.event.addListener(marker, 'click', () => { + window.kakao.maps.event.addListener(new_marker, 'click', () => { submitStationId(element.arsId) }) - marker.setMap(map) + new_marker.setMap(map) }); } - const submitStationId = (id) => { - axios.get(`/bus/arsId/${id}`) + const submitStationId = async (id) => { + await api.get(`/bus/arsId/${id}`) .then(res => { const { data } = res; dispatch(BusActions.refreshBus(id)) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 26d2d19..992d6f7 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -20,8 +20,8 @@ const StyledForm = styled.form` const SubwayForm = () => { const dispatch = useDispatch(); - const SubmitSubwayStation = (value) => { - axios.get(`/subway/stNm/${value}`) + const SubmitSubwayStation = async (value) => { + await api.get(`/subway/stNm/${value}`) .then(res => { const { data } = res; dispatch(SubwayActions.addSubwayInfo(data)) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 21526cf..6ed54b5 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -3,7 +3,6 @@ import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useEffect } from "react"; import { SubwayActions } from "../../../store/Subway-slice"; -import { api } from "../../auth/Api"; const SubwayItems = ({ items }) => { diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index b38e881..8c1cb0f 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -6,8 +6,6 @@ import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" -import axios from "axios" - import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.js" @@ -23,7 +21,7 @@ const SubwayBathchair = () => { const lnCd = params.lnCd; dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { - await axios.get(`/subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) + await api.get(`/subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 2108dea..4f0bc63 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -9,7 +9,6 @@ import { SubwayActions } from "../../store/Subway-slice.js" import { api } from "../../component/auth/Api.js" import { useParams } from "react-router-dom" import { useEffect, useState } from "react" -import axios from "axios" const SubwayDetailPage = () => { const params = useParams() @@ -19,7 +18,7 @@ const SubwayDetailPage = () => { const stCd = params.stCd; const stNm = params.stNm; const getDetail = async () => { - await axios.get(`/subway/stationInfo/${stCd}/${stNm}`) + await api.get(`/subway/stationInfo/${stCd}/${stNm}`) .then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 626aad6..25fc074 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -7,7 +7,7 @@ import { api } from "../../component/auth/Api.js" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" -import axios from "axios" + const SubwayElevator = () => { const params = useParams(); const dispatch = useDispatch(); @@ -19,7 +19,7 @@ const SubwayElevator = () => { const lnCd = params.lnCd; dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { - await axios.get(`/subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) + await api.get(`/subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 17c72d0..1d27b58 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -3,14 +3,13 @@ import Header from "../../component/header/Header.js" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail.js" - import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.js" -import axios from "axios" import { useEffect, useState } from "react" import { useSelector, useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" -import axios from "axios" + + const SubwayTransfer = () => { const params = useParams(); const dispatch = useDispatch(); @@ -25,7 +24,7 @@ const SubwayTransfer = () => { const lnCd = params.lnCd; dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { - await axios.get(`/subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) + await api.get(`/subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; From 2e0315f6ca1a904f725ad80b048699d24757ab72 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 14 Dec 2022 03:49:31 +0900 Subject: [PATCH 18/32] =?UTF-8?q?feat.=20=ED=9C=A0=EC=B2=B4=EC=96=B4=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=ED=95=98=EA=B8=B0=20=EC=A0=84=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 휠체어 기능 하기 전 저장 --- .../bus-component/busform/BusForm.js | 1 + .../creative/src/component/map/Mapping.js | 21 +++++++++++++++---- .../subwaybath/SubwayBathChairInfo.js | 4 ++-- .../subwaydetail/SubwayDetail.js | 5 +++-- .../subway-component/subwayform/SubwayForm.js | 2 ++ .../subway-component/subwayinfo/SubwayInfo.js | 4 ++-- .../subwaylist/SubwayItems.js | 18 +++++++++++++--- .../subwaymenubar/SubwayBar.js | 2 +- .../subwaypanel/SubwayPanel.js | 2 +- .../subwaytransfer/SubwayTransferItem.js | 3 +-- .../subwaytransfer/SubwayTrasferDetail.js | 2 +- .../src/page/subwaypage/SubwayBathchair.js | 2 +- .../src/page/subwaypage/SubwayDetailPage.js | 2 +- .../src/page/subwaypage/SubwayElevator.js | 7 ++----- .../page/subwaypage/SubwayElevator.module.css | 15 ++----------- .../src/page/subwaypage/SubwayTransfer.js | 3 +-- .../page/subwaypage/SubwayTransfer.module.css | 8 +++---- .../Frontend/creative/src/store/Map-slice.js | 14 ++++++++++++- 18 files changed, 70 insertions(+), 45 deletions(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js index 3ae72ef..4af08be 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js @@ -29,6 +29,7 @@ const BusForm = () => { dispatch(MapActions.makerchacking(data)) dispatch(BusActions.addStationInfo(data)) dispatch(MapActions.positioning(data[0])) + dispatch(MapActions.Onbusmode()) }).catch(error => { console.log(error) alert("해당 정류장이 없습니다.") diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index e5edd80..5068220 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -9,6 +9,8 @@ const Mapping = () => { const marker = useSelector(state => state.map.marker) const position = useSelector(state => state.map.position) const arsid = useSelector(state => state.bus.currentStation) + const busmode = useSelector(state => state.map.busmode) + const subwaymode = useSelector(state => state.map.subwaymode) useEffect(() => { const container = document.getElementById("map"); const options = { @@ -16,17 +18,27 @@ const Mapping = () => { level: 3, }; const map = new window.kakao.maps.Map(container, options); - if (Array.isArray(marker)) - mapcoordinate(marker, map) + if (busmode) + busmapcoordinate(marker, map) + else if (subwaymode) + subwaymapcoordinate(marker, map) }) - - const mapcoordinate = (marker, map) => { + const subwaymapcoordinate = (marker, map) => { + const markerPosition = new window.kakao.maps.LatLng(parseFloat(marker.tmY - 0.0000005).toFixed(6), parseFloat(marker.tmX - 0.0000005).toFixed(6)) + const new_marker = new window.kakao.maps.Marker({ + position: markerPosition, + clickable: true, + }) + new_marker.setMap(map) + } + const busmapcoordinate = (marker, map) => { const currentArsid = marker.filter(id => id.arsId === arsid) marker.forEach(element => { const imageSrc = './image/busImage.png' // 마커이미지의 주소입니다 const imageSize = new window.kakao.maps.Size(64, 69) const imageOption = { offset: new window.kakao.maps.Point(27, 69) }; let markerImage = new window.kakao.maps.MarkerImage(imageSrc, imageSize, imageOption) + const markerPosition = new window.kakao.maps.LatLng(parseFloat(element.tmY - 0.0000005).toFixed(6), parseFloat(element.tmX - 0.0000005).toFixed(6)) if (element.arsId !== currentArsid[0]?.arsId) { markerImage = undefined; @@ -36,6 +48,7 @@ const Mapping = () => { clickable: true, image: markerImage }) + window.kakao.maps.event.addListener(new_marker, 'click', () => { submitStationId(element.arsId) }) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index bd14487..937a592 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -1,7 +1,7 @@ import styled from "styled-components"; const StyledBathChair = styled.div` -width:100%; +width:90%; display:flex; font-size:32px; @@ -11,7 +11,7 @@ font-weight: 600; margin-left:23px; @media (max-width:500px){ font-size:4vw; - width:100%; + width:90%; height:80vw; ` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index 47f46d6..f2b4bed 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -81,6 +81,8 @@ p{ const SubwayDetail = ({ info }) => { + console.log(info) + // return (
    @@ -89,8 +91,7 @@ const SubwayDetail = ({ info }) => {

    {info.roadNm}

    -

    {info.tNum}

    -

    교통약자 도우미
    {info.wNum}

    +

    교통약자 도우미 전화번호
    {info.wNum}

    ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 992d6f7..5071130 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -5,6 +5,7 @@ import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice.js"; import { api } from "../../auth/Api.js"; import axios from "axios"; +import { MapActions } from "../../../store/Map-slice.js"; const StyledForm = styled.form` display:flex; @@ -25,6 +26,7 @@ const SubwayForm = () => { .then(res => { const { data } = res; dispatch(SubwayActions.addSubwayInfo(data)) + dispatch(MapActions.Onsubwaymode()) }).catch(error => { alert("데이터를 받아오지 못했습니다.") }); diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js index ac6ac13..ccfb912 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -4,8 +4,8 @@ import SubwayBathchairInfo from "../subwaybath/SubwayBathChairInfo"; const StyledInfo = styled.div` display:flex; flex-direction:column; -width: 749px; -height: 747px; +width: 720px; +height: 720px; background-color:white; border: 4px solid #9255F5; overflow:auto; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 6ed54b5..934128b 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -3,29 +3,41 @@ import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useEffect } from "react"; import { SubwayActions } from "../../../store/Subway-slice"; - +import { MapActions } from "../../../store/Map-slice"; +import { api } from "../../auth/Api"; const SubwayItems = ({ items }) => { const { stNm, lnNm, stCd } = items + const [position, setPosition] = useState(""); const [color, setColor] = useState(true); const dispatch = useDispatch() const currentSubway = useSelector(state => state.subway.currentSubway) - useEffect(() => { if (currentSubway !== stCd) { setColor(true) } + const locationRecive = async () => { + await api.get(`/subway/stationInfo/${stCd}/${stNm}`) + .then(res => { + const { data } = res; + setPosition(data.stationinfo) + }) + } + locationRecive() }, [currentSubway]) - const ClickSubway = () => { if (currentSubway === stCd) { window.location.href = `/#/subway/detail/${stCd}/${stNm}`; } else if (currentSubway !== stCd) { setColor(false) + console.log(position) + dispatch(MapActions.positioning(position)) + dispatch(MapActions.makerchacking(position)) dispatch(SubwayActions.clickSubway(stCd)) } } + return (

    {stNm}

    diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js index 1f40100..d2e2c48 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaymenubar/SubwayBar.js @@ -47,7 +47,7 @@ const SubwayBar = () => { const si = useSelector(state => state.subway.subwayInfo) return ( -
  • 엘리베이터 위치
  • +
  • 편의시설 위치
  • 환승 이동 경로
  • 휠체어 관련 위치
  • diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js index f5e3102..8784a5a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js @@ -7,7 +7,7 @@ align-items:center; text-align:center; width: 19vw; height: 85vh; -margin-right: 30px; +margin-right: 2vw; font-family: 'GmarketSansMedium'; background: linear-gradient(270deg, #7C34F3 -44.25%, rgba(146, 85, 245, 0) 222.13%); font-size: 2.5vw; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js index a7c6093..10ce933 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js @@ -2,7 +2,6 @@ import styled from "styled-components"; import { useDispatch, useSelector } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice"; import { api } from "../../auth/Api"; -import axios from "axios" const StyldeSubwayItems = styled.li` display:flex; @@ -43,7 +42,7 @@ const SubwayTransferItems = ({ items }) => { const ClickSubway = () => { const getTransfer = async () => { - await axios.get(`/subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) + await api.get(`/subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) .then(res => { const { data } = res; dispatch(SubwayActions.addTransfer(data)) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js index 228653c..65cf83a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js @@ -6,7 +6,7 @@ import { useSelector } from "react-redux"; const StyledTransferDetail = styled.div` display:flex; flex-direction:column; -width: 749px; +width: 720px; height: 720px; background-color:white; border: 4px solid #9255F5; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index 8c1cb0f..208089e 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -35,7 +35,7 @@ const SubwayBathchair = () => {
    - } /> + } />
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 4f0bc63..0cc9c41 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -19,10 +19,10 @@ const SubwayDetailPage = () => { const stNm = params.stNm; const getDetail = async () => { await api.get(`/subway/stationInfo/${stCd}/${stNm}`) - .then(res => { const { data } = res; const { stationinfo } = data; + console.log(data) setInfo(stationinfo); dispatch(SubwayActions.saveSubway(stationinfo)) }) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 25fc074..279f48a 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -33,11 +33,8 @@ const SubwayElevator = () => {
    - } /> -
    - - -
    + } /> +
    ) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css index e0ba76a..6f23be2 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.module.css @@ -4,14 +4,9 @@ width: 100vw; } -img { - width: 100%; - height: 100%; -} - .elevator { width: 60vw; - height: 60vh; + height: 75vh; } .subwaypage { @@ -41,11 +36,9 @@ img { margin: 0; } - - .elevator { width: 100%; - height: 80vw; + height: 40vh; } .subwaymain { @@ -55,10 +48,6 @@ img { justify-content: space-between; } - .elevator { - width: 60vw; - height: 60vh; - } .subwaylist { margin-right: 0; diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js index 1d27b58..6d95f6f 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js @@ -25,7 +25,6 @@ const SubwayTransfer = () => { dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { await api.get(`/subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) - .then(res => { const { data } = res; setTrans(data) @@ -44,7 +43,7 @@ const SubwayTransfer = () => {
    - {transcheck && } + {transcheck && }
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css index bc923e2..6dec317 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.module.css @@ -6,8 +6,8 @@ .transfer { - width: 650px; - height: 650px; + width: 30vw; + height: 70vh; } .subwaylist { @@ -40,8 +40,8 @@ } .transfer { - width: 747px; - height: 747px; + width: 100%; + height: 40vh; } .subwaymain { diff --git a/Backend/Frontend/creative/src/store/Map-slice.js b/Backend/Frontend/creative/src/store/Map-slice.js index 412a99b..6747c41 100644 --- a/Backend/Frontend/creative/src/store/Map-slice.js +++ b/Backend/Frontend/creative/src/store/Map-slice.js @@ -7,7 +7,9 @@ const MapSlice = createSlice({ tmY: 37.55068403524657, tmX: 127.07411251036736 }, - marker: [] + marker: [], + busmode: false, + subwaymode: false }, reducers: { positioning(state, action) { @@ -23,6 +25,16 @@ const MapSlice = createSlice({ tmX: 127.07411251036736 }; state.marker = []; + state.busmode = false; + state.subwaymode = false; + }, + Onbusmode(state) { + state.busmode = true; + state.subwaymode = false; + }, + Onsubwaymode(state) { + state.busmode = false; + state.subwaymode = true; } } }) From 822104f221336d2792e819046b33ce1832fcd045 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 14 Dec 2022 04:19:50 +0900 Subject: [PATCH 19/32] =?UTF-8?q?feat.=20=ED=9C=A0=EC=B2=B4=EC=96=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 휠체어 수정 완료 --- .../subwaybath/SubwayBathChairInfo.js | 28 +++++++++++++++---- .../subway-component/subwayinfo/SubwayInfo.js | 4 +-- .../src/page/subwaypage/SubwayBathchair.js | 8 +++++- .../subwaypage/SubwayBathchair.module.css | 14 ++++++++-- .../src/page/subwaypage/SubwayElevator.js | 2 -- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index 937a592..0847510 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -3,24 +3,40 @@ import styled from "styled-components"; const StyledBathChair = styled.div` width:90%; display:flex; - -font-size:32px; +.title{ + font-size:2vw; + margin:1.8vw; +} +.body{ + font-size:1.7vw; + margin:0; + margin-bottom:1vw; +} font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; -margin-left:23px; @media (max-width:500px){ font-size:4vw; width:90%; height:80vw; - + .title{ + font-size:4vw; + margin:1.8vw; + } + .body{ + font-size:3vw; + margin:0; + margin-bottom:2vw; + } ` -const SubwayBathchairInfo = ({ mvContDtl }) => { +const SubwayBathchairInfo = ({ mvContDtl, direction }) => { + console.log(direction) return ( -

    {mvContDtl}

    +

    {direction}

    +

    {mvContDtl}

    ) } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js index ccfb912..2846256 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js @@ -1,6 +1,5 @@ import styled from "styled-components"; import SubwayBathchairInfo from "../subwaybath/SubwayBathChairInfo"; - const StyledInfo = styled.div` display:flex; flex-direction:column; @@ -19,14 +18,13 @@ overflow:auto; ` const SubwayInfo = ({ info }) => { - console.log(info) return ( {info.map((element) => ( element.map(node => ( )) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js index 208089e..ff33428 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js @@ -13,6 +13,7 @@ import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.j const SubwayBathchair = () => { const params = useParams(); const [bath, setBath] = useState([]); + const [image, setimage] = useState(""); const dispatch = useDispatch() useEffect(() => { const stCd = params.stCd; @@ -22,12 +23,16 @@ const SubwayBathchair = () => { dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { await api.get(`/subway/liftMove/${stCd}/${stNm}/${railCd}/${lnCd}`) - .then(res => { const { data } = res; console.log(data) setBath(data) }) + await api.get(`/subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) + .then(res => { + const { data } = res; + setimage(data[0].imgPath) + }) } getBathChair() }, []) @@ -39,6 +44,7 @@ const SubwayBathchair = () => {
    +
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css index 3d8f298..6c17c2c 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.module.css @@ -11,10 +11,13 @@ justify-content: space-between; } +.subwayImage { + width: 40vw; + height: 68vh; +} + .subwaylist { display: flex; - flex-direction: column; - margin-right: 30px; } .subwaymain { @@ -35,6 +38,11 @@ } .subwaylist { - margin-right: 0; + flex-direction: column; + } + + .subwayImage { + width: 100%; + height: 30vh; } } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js index 279f48a..5642129 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js @@ -20,10 +20,8 @@ const SubwayElevator = () => { dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) const getBathChair = async () => { await api.get(`/subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) - .then(res => { const { data } = res; - setElePos(data) }) } From dff0ed678ba07cc4baacc26f1da7b3f989c72694 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 14 Dec 2022 05:05:31 +0900 Subject: [PATCH 20/32] =?UTF-8?q?feat.=20=EB=94=94=ED=85=8C=EC=9D=BC?= =?UTF-8?q?=ED=95=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 디테일한 수정 --- .../Frontend/creative/public/image/MARK.png | Bin 0 -> 521 bytes .../bus-component/buslist/BusItem.js | 20 +++++++++++++++--- .../bus-component/buslist/RefreshButton.js | 4 ++-- .../bus-component/buslist/StationItem.js | 5 +++-- .../bus-component/busnumber/BusNumber.js | 4 ++-- .../src/component/menu/MenuSubwayButton.js | 4 ++-- .../subwaydetail/SubwayDetail.js | 13 ++++++++---- .../subway-component/subwayform/SubwayForm.js | 1 - .../subwaylist/SubwayItems.js | 4 ++-- .../subwaynumber/SubwayNumber.js | 4 ++-- .../subwaypage/SubwayDetailPage.module.css | 3 +-- 11 files changed, 40 insertions(+), 22 deletions(-) create mode 100644 Backend/Frontend/creative/public/image/MARK.png diff --git a/Backend/Frontend/creative/public/image/MARK.png b/Backend/Frontend/creative/public/image/MARK.png new file mode 100644 index 0000000000000000000000000000000000000000..d7efe9032b33bc874c64fd33ba2371b9176e5e15 GIT binary patch literal 521 zcmV+k0`~ohP)X1^@s6F&7Tg00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPlKo3N6QYwHB#16CqxCMs;T7g)Bu>w;AQJy*sdTh1k=*2$ot(mL)0ZRN<-HLucc=8ER^6p!GpPrGbvzj2PPbkm zLJ^AQa_d+RO^L7^Nf02;Y;!X}6Pk&uQh%yvqn7R4dRzojLwK&MhqJad>xxU24Q1i# zAxR>MfV`#0EkMS~sG8{#`etI2!w=;MzT>v{YW^vOC^OGxP_$__r0y(I(;FxO708z^ zvso5;{BTsF1{diP8QDbG^wUl_gelO;3!>6|>dxSZw00000 LNkvXXu0mjfcR$#~ literal 0 HcmV?d00001 diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index ba64756..291a7bc 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -6,8 +6,14 @@ justify-content:space-between; align-items:center; width:100%; list-style:none; +text-align: center; border-bottom: 1px solid #D2D2D2; font-family: 'Pretendard-Regular'; +.mark{ + width:1.5vw; + height:1.5vw; + margin-right:0.3vw; +} :hover{ cursor: pointer; } @@ -24,6 +30,9 @@ div{ align-items:center; } .Name{ + display:flex; + justify-content:center; + align-items:center; padding-left:20px; font-family: 'Pretendard-Regular'; font-style: normal; @@ -35,7 +44,7 @@ div{ font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 1.5vw; + font-size: 1.3vw; line-height: 29px; } .id{ @@ -49,7 +58,7 @@ div{ } @media (max-width:500px){ - height:43%; + height:28%; .Name{ font-size: 5vw; } @@ -59,6 +68,11 @@ div{ .id{ font-size: 3vw; } + .mark{ + width:100%; + height:100%; + margin-right:2vw; + } } ` @@ -68,7 +82,7 @@ const BusItem = (props) => {
    -

    {busrouteAbrv}

    +

    {busrouteAbrv}

    {adirection}방면

    {arrmsg1}

    diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js index f907b8c..d90e3ed 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js @@ -5,8 +5,8 @@ import { useSelector, useDispatch } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; const StyledRefreshButton = styled.button` -width:3.5vw; -height:3.5vw; +width:3vw; +height:3vw; border: 0; border-radius:50px; background-color:transparent; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 43cc832..b704f04 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -52,7 +52,8 @@ const StationItem = (props) => { const StyledStationItem = styled.li` display:flex; -justify-content:space-between; +justify-content:space-between; +align-items:center; width:100%; list-style:none; border-bottom: 1px solid #D2D2D2; @@ -85,7 +86,7 @@ font-family: 'Pretendard-Regular'; color:${props => (props.color ? "#9C9C9C" : "black")}; } @media (max-width:500px){ - height:43%; + height:28%; .Name{ font-family: 'Pretendard-Regular'; font-size: 5vw; diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js index 186f953..76eadcf 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js @@ -18,8 +18,8 @@ p{ margin:0; } @media (max-width:500px){ - font-size:5vw; - height:28%; + font-size:4.5vw; + height:20%; } ` diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index 7e5a9db..9079db3 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -33,7 +33,7 @@ a{ .RIGHT{ width:18vw; height:5vw; - margin-left:70%; + margin-left:10%; } .subtext{ width:50%; @@ -41,7 +41,7 @@ a{ .SUBWAY{ width:4.5vw; height:5vw; - margin-left:70%; + margin-left:10%; } :hover{ diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index f2b4bed..35f5165 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -56,9 +56,8 @@ p{ border: 2px solid #9255F5; width:99%; height:80vw; - .info-image{ - width: 4.5vw; - height: 4.5vw; + .info p{ + margin-bottom:1vw; } .line{ width: 8vw; @@ -73,9 +72,13 @@ p{ } .info{ padding-left:3vw; - font-size:4vw; + font-size:5vw; width:90%; } + .info-image{ + width: 7vw; + height: 7vw; + } } ` @@ -92,6 +95,8 @@ const SubwayDetail = ({ info }) => {

    {info.roadNm}

    교통약자 도우미 전화번호
    {info.wNum}

    +

    지하철역 영문명: {info.eName}

    +

    지하철역 FR_CODE: {info.fCode}

    ) diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js index 5071130..37c1e50 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js @@ -4,7 +4,6 @@ import styled from "styled-components"; import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice.js"; import { api } from "../../auth/Api.js"; -import axios from "axios"; import { MapActions } from "../../../store/Map-slice.js"; const StyledForm = styled.form` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 934128b..c39235a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -20,6 +20,7 @@ const SubwayItems = ({ items }) => { await api.get(`/subway/stationInfo/${stCd}/${stNm}`) .then(res => { const { data } = res; + console.log(data.stationinfo) setPosition(data.stationinfo) }) } @@ -31,7 +32,6 @@ const SubwayItems = ({ items }) => { } else if (currentSubway !== stCd) { setColor(false) - console.log(position) dispatch(MapActions.positioning(position)) dispatch(MapActions.makerchacking(position)) dispatch(SubwayActions.clickSubway(stCd)) @@ -93,7 +93,7 @@ a{ } @media (max-width:500px){ - height:43%; + height:25%; .name{ font-size: 5vw; } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js index c612a50..f6190d4 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js @@ -16,8 +16,8 @@ p{ margin:0; } @media (max-width:500px){ - font-size:5vw; - height:28%; + font-size:4.5vw; + height:20%; } ` diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css index f6bbca2..4bb2a50 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.module.css @@ -31,8 +31,7 @@ .subwaymain { flex-direction: column; margin-top: 0; - height: 81.7vh; - justify-content: space-between; + height: 100%; } .subwaylist { From c336db08d2116e7278f76a110d09b25127bf82aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=9C=ED=83=9C?= <79373803+KyuTae98@users.noreply.github.com> Date: Wed, 14 Dec 2022 05:18:50 +0900 Subject: [PATCH 21/32] Update Api.js --- Backend/Frontend/creative/src/component/Auth/Api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/Auth/Api.js index dba4193..9e83bc1 100644 --- a/Backend/Frontend/creative/src/component/Auth/Api.js +++ b/Backend/Frontend/creative/src/component/Auth/Api.js @@ -1,6 +1,6 @@ import axios from "axios" export const api = axios.create({ - baseURL: "http://34.82.213.244:3005" + baseURL: "http://34.82.213.244:3000" }) From f2067e23ff06704c0f7b3d4b7f880bb34b01b177 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 14 Dec 2022 06:27:16 +0900 Subject: [PATCH 22/32] =?UTF-8?q?feat.=20=EC=95=BD=EA=B0=84=EC=9D=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 약간의 수정 --- Backend/Frontend/creative/src/component/Auth/Api.js | 2 +- .../src/component/bus-component/buslist/StationItem.js | 2 +- Backend/Frontend/creative/src/component/menu/MenuBusButton.js | 1 + .../Frontend/creative/src/component/menu/MenuSubwayButton.js | 1 + .../src/component/subway-component/subwaylist/SubwayItems.js | 4 ++-- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/Auth/Api.js index dba4193..9e83bc1 100644 --- a/Backend/Frontend/creative/src/component/Auth/Api.js +++ b/Backend/Frontend/creative/src/component/Auth/Api.js @@ -1,6 +1,6 @@ import axios from "axios" export const api = axios.create({ - baseURL: "http://34.82.213.244:3005" + baseURL: "http://34.82.213.244:3000" }) diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index b704f04..0c7502a 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -7,7 +7,7 @@ import { useEffect, useState } from "react"; const StationItem = (props) => { - const [color, setColor] = useState(true) + const [color, setColor] = useState(false) const { stNm, arsId, tmX, tmY } = props.items const dispatch = useDispatch(); const station = useSelector(state => state.bus.currentStation) diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js index df38c27..6622091 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -79,6 +79,7 @@ const MenuBusButton = () => { const initialization = () => { dispatch(MapActions.initialization()) + dispatch(MapActions.Onbusmode()) } return ( diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index 9079db3..64aeaea 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -85,6 +85,7 @@ const MenuSubwayButton = () => { const dispatch = useDispatch(); const initialization = () => { dispatch(MapActions.initialization()) + dispatch(MapActions.Onsubwaymode()) } return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index c39235a..f666beb 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -9,7 +9,7 @@ import { api } from "../../auth/Api"; const SubwayItems = ({ items }) => { const { stNm, lnNm, stCd } = items const [position, setPosition] = useState(""); - const [color, setColor] = useState(true); + const [color, setColor] = useState(false); const dispatch = useDispatch() const currentSubway = useSelector(state => state.subway.currentSubway) useEffect(() => { @@ -20,11 +20,11 @@ const SubwayItems = ({ items }) => { await api.get(`/subway/stationInfo/${stCd}/${stNm}`) .then(res => { const { data } = res; - console.log(data.stationinfo) setPosition(data.stationinfo) }) } locationRecive() + }, [currentSubway]) const ClickSubway = () => { if (currentSubway === stCd) { From 17413e3f5247f2a5f5f7333608b8cb7cd12f8cdc Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 21 Dec 2022 17:36:14 +0900 Subject: [PATCH 23/32] =?UTF-8?q?feat.=ED=8F=B0=ED=8A=B8,=20=EB=A7=B5=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 폰트, 맵 초기화 수정 --- .../bus-component/busform/BusInput.js | 1 + .../bus-component/buslist/BusItem.js | 6 ++- .../bus-component/buslist/StationItem.js | 11 ++-- .../bus-component/buspanel/BusPanel.js | 7 ++- .../creative/src/component/header/Header.js | 6 +-- .../creative/src/component/map/Mapping.js | 4 ++ .../src/component/menu/MenuBusButton.js | 7 ++- .../src/component/menu/MenuSubwayButton.js | 9 +++- .../subwaybath/SubwayBathChairInfo.js | 1 - .../subwaydetail/SubwayDetail.js | 52 ++++++++++--------- .../subwayform/SubwayInput.js | 1 + .../subwaylist/SubwayItems.js | 17 +++--- .../src/page/subwaypage/SubwayDetailPage.js | 3 +- .../creative/src/store/Subway-slice.js | 4 ++ 14 files changed, 79 insertions(+), 50 deletions(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js index 86497a8..a7c382d 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js @@ -7,6 +7,7 @@ padding: 15px; font-size: 2.5vw; border:0; font-family: 'Pretendard-Regular'; +font-weight: 700; @media (max-width:500px){ font-family: 'Pretendard-Regular'; width: 80%; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js index 291a7bc..ba251c0 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js @@ -1,5 +1,5 @@ import styled from "styled-components"; - +import { useEffect } from "react"; const StyledBusItem = styled.li` display:flex; justify-content:space-between; @@ -12,7 +12,7 @@ font-family: 'Pretendard-Regular'; .mark{ width:1.5vw; height:1.5vw; - margin-right:0.3vw; + margin-right:0.8vw; } :hover{ cursor: pointer; @@ -39,6 +39,7 @@ div{ font-weight: 600; font-size: 2vw; line-height: 60px; + margin-right:10px; } .direction{ font-family: 'Pretendard-Regular'; @@ -78,6 +79,7 @@ div{ const BusItem = (props) => { const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; + return (
    diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 0c7502a..7b0ea21 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -7,13 +7,14 @@ import { useEffect, useState } from "react"; const StationItem = (props) => { - const [color, setColor] = useState(false) + const [color, setColor] = useState(true) const { stNm, arsId, tmX, tmY } = props.items + const dispatch = useDispatch(); const station = useSelector(state => state.bus.currentStation) useEffect(() => { - if (station !== arsId) { - setColor(true) + if (station === arsId) { + setColor(false) } }, [station]) @@ -67,7 +68,7 @@ font-family: 'Pretendard-Regular'; padding-left:20px; font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 600; + font-weight: 400; font-size: 2vw; line-height: 60px; color:${props => (props.color ? "#000000" : "#FFFFFF")}; @@ -77,7 +78,7 @@ font-family: 'Pretendard-Regular'; padding-right:20px; font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 600; + font-weight: 500; font-size: 1.7vw; line-height: 29px; display: flex; diff --git a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js index 4280b99..fcaa6f4 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js +++ b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js @@ -9,14 +9,17 @@ text-align:center; width: 19vw; height: 85vh; margin-right:30px; -font-family: 'Pretendard-Regular'; background: linear-gradient(270.31deg, #999C0D -27.07%, rgba(205, 208, 41, 0) 206.73%); .first{ - font-size: 4vw; + font-size: 2.5vw; color: #FFFFFF; + font-family: 'GmarketSansMedium'; + font-weight: 500; } .second{ + padding:0 1vw; font-size: 2vw; + font-family: 'Pretendard-Regular'; color: #FFFFFF; } diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.js index d3d78b1..f4e7b2f 100644 --- a/Backend/Frontend/creative/src/component/header/Header.js +++ b/Backend/Frontend/creative/src/component/header/Header.js @@ -20,7 +20,7 @@ a{ color:#000000; text-decoration:none; } -p{ +.sejong{ font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 700; @@ -32,7 +32,7 @@ p{ @media (max-width:500px) { font-size:8vw; height:8vh; - p{ + .sejong{ font-size: 4vw; } } @@ -51,7 +51,7 @@ const Header = () => { 타자 -

    Sejong University

    +

    Sejong University

    ) } diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.js index 5068220..610b005 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.js @@ -11,6 +11,7 @@ const Mapping = () => { const arsid = useSelector(state => state.bus.currentStation) const busmode = useSelector(state => state.map.busmode) const subwaymode = useSelector(state => state.map.subwaymode) + useEffect(() => { const container = document.getElementById("map"); const options = { @@ -23,6 +24,7 @@ const Mapping = () => { else if (subwaymode) subwaymapcoordinate(marker, map) }) + const subwaymapcoordinate = (marker, map) => { const markerPosition = new window.kakao.maps.LatLng(parseFloat(marker.tmY - 0.0000005).toFixed(6), parseFloat(marker.tmX - 0.0000005).toFixed(6)) const new_marker = new window.kakao.maps.Marker({ @@ -31,7 +33,9 @@ const Mapping = () => { }) new_marker.setMap(map) } + const busmapcoordinate = (marker, map) => { + const currentArsid = marker.filter(id => id.arsId === arsid) marker.forEach(element => { const imageSrc = './image/busImage.png' // 마커이미지의 주소입니다 diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js index 6622091..bde5a91 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.js @@ -1,6 +1,8 @@ import styled from 'styled-components' import { useDispatch } from 'react-redux' import { MapActions } from '../../store/Map-slice' +import { BusActions } from '../../store/Bus-slice' +import { SubwayActions } from '../../store/Subway-slice' import { Link } from "react-router-dom" const StyledButton = styled.button` @@ -9,6 +11,7 @@ height: 537px; font-size: 60px; border:none; font-family: 'Pretendard-Regular'; +font-weight: 600; background: rgba(205, 208, 41, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 0px 20px 20px 0px; @@ -33,7 +36,7 @@ a{ .RIGHT{ width:18vw; height:5vw; - margin-right:70%; + margin-right:80%; } .BUS{ width:6vw; @@ -79,6 +82,8 @@ const MenuBusButton = () => { const initialization = () => { dispatch(MapActions.initialization()) + dispatch(BusActions.initialState()) + dispatch(SubwayActions.initialtrans()) dispatch(MapActions.Onbusmode()) } return ( diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js index 64aeaea..1876c75 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js @@ -2,13 +2,15 @@ import styled from 'styled-components' import { useDispatch } from 'react-redux' import { MapActions } from '../../store/Map-slice' import { Link } from "react-router-dom" - +import { BusActions } from '../../store/Bus-slice' +import { SubwayActions } from '../../store/Subway-slice' const StyledButton = styled.button` width: 442.5px; height: 537px; font-size: 60px; border:none; font-family: 'Pretendard-Regular'; +font-weight: 600; background: rgba(146, 85, 245, 0.8); box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25); border-radius: 20px 0px 0px 20px; @@ -33,7 +35,7 @@ a{ .RIGHT{ width:18vw; height:5vw; - margin-left:10%; + margin-left:80%; } .subtext{ width:50%; @@ -73,6 +75,7 @@ a{ .RIGHT{ width:30vw; height:5vw; + margin-left:8%; } .image{ margin-bottom:4vw; @@ -85,6 +88,8 @@ const MenuSubwayButton = () => { const dispatch = useDispatch(); const initialization = () => { dispatch(MapActions.initialization()) + dispatch(BusActions.initialState()) + dispatch(SubwayActions.initialtrans()) dispatch(MapActions.Onsubwaymode()) } return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index 0847510..712579b 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -32,7 +32,6 @@ font-weight: 600; const SubwayBathchairInfo = ({ mvContDtl, direction }) => { - console.log(direction) return (

    {direction}

    diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js index 35f5165..14bb747 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js @@ -1,10 +1,31 @@ import styled from "styled-components"; + +const SubwayDetail = ({ info }) => { + console.log(info) + const idColor = ["#0052A4", "#00A84D", "#EF7C1C", "#00A5DE", "#996CAC", "#CD7C2F", "#747F00", "#E6186C"]; + // + return ( + +
    +

    {info.lnCd}

    +

    {info.stNm}

    +
    +
    +

    {info.roadNm}

    +

    교통약자 도우미 전화번호
    {info.wNum}

    +

    지하철역 영문명: {info.eName}

    +

    지하철역 FR_CODE: {info.fCode}

    +
    +
    + ) +} + const StyledDetail = styled.div` display:flex; flex-direction:column; -width: 749px; -height: 747px; +width: 35vw; +height: 80vh; background-color:white; margin:0; border: 4px solid #9255F5; @@ -19,7 +40,7 @@ border: 4px solid #9255F5; width:100%; height:auto; font-weight: 600; - font-size: 40px; + font-size: 2.1vw; border-bottom: 4px solid #9255F5; } .name p{ @@ -32,10 +53,10 @@ border: 4px solid #9255F5; color:#FFFFFF; font-style: normal; font-weight: 600; - font-size: 70%; + font-size: 1.5vw; width: 48px; height: 48px; - background-color:#A76E00; + background-color:${props => (props.idColor[props.line - 1])}; border-radius:200px; } .info{ @@ -44,7 +65,7 @@ border: 4px solid #9255F5; display:flex; flex-direction:column; font-weight: 600; - font-size: 30px; + font-size: 1.5vw; padding-left:1vw; } p{ @@ -83,23 +104,4 @@ p{ ` -const SubwayDetail = ({ info }) => { - console.log(info) - // - return ( - -
    -

    {info.lnCd}

    -

    {info.stNm}

    -
    -
    -

    {info.roadNm}

    -

    교통약자 도우미 전화번호
    {info.wNum}

    -

    지하철역 영문명: {info.eName}

    -

    지하철역 FR_CODE: {info.fCode}

    -
    -
    - ) -} - export default SubwayDetail; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js index 08fe858..8be64de 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js @@ -8,6 +8,7 @@ padding: 15px; font-size: 2.5vw; border:0; font-family: 'Pretendard-Regular'; +font-weight: 700; @media (max-width:500px){ font-family: 'Pretendard-Regular'; width: 80%; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index f666beb..0e8332a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -9,12 +9,13 @@ import { api } from "../../auth/Api"; const SubwayItems = ({ items }) => { const { stNm, lnNm, stCd } = items const [position, setPosition] = useState(""); - const [color, setColor] = useState(false); + const [color, setColor] = useState(true); const dispatch = useDispatch() const currentSubway = useSelector(state => state.subway.currentSubway) + const idColor = ["#0052A4", "#00A84D", "#EF7C1C", "#00A5DE", "#996CAC", "#CD7C2F", "#747F00", "#E6186C"]; useEffect(() => { - if (currentSubway !== stCd) { - setColor(true) + if (currentSubway === stCd) { + setColor(false) } const locationRecive = async () => { await api.get(`/subway/stationInfo/${stCd}/${stNm}`) @@ -24,8 +25,8 @@ const SubwayItems = ({ items }) => { }) } locationRecive() - }, [currentSubway]) + const ClickSubway = () => { if (currentSubway === stCd) { window.location.href = `/#/subway/detail/${stCd}/${stNm}`; @@ -39,7 +40,7 @@ const SubwayItems = ({ items }) => { } return ( - +

    {stNm}

    {lnNm}

    @@ -71,7 +72,7 @@ a{ padding-left:20px; font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 600; + font-weight: 400; font-size: 40px; line-height: 60px; color:${props => (props.color ? "#000000" : "#FFFFFF")}; @@ -85,10 +86,10 @@ a{ font-family: 'Pretendard-Regular'; font-style: normal; font-weight: 600; - font-size: 100%; + font-size: 1.5vw; width: 48px; height: 48px; - background-color:#A76E00; + background-color:${props => (props.idColor[props.lnNm - 1])}; border-radius:200px; } diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js index 0cc9c41..7893c24 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js @@ -14,6 +14,7 @@ const SubwayDetailPage = () => { const params = useParams() const dispatch = useDispatch() const [info, setInfo] = useState({}) + useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; @@ -33,7 +34,7 @@ const SubwayDetailPage = () => {
    - } /> + } />
    diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js index f2764ba..c92385d 100644 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ b/Backend/Frontend/creative/src/store/Subway-slice.js @@ -53,6 +53,10 @@ const SubwaySlice = createSlice({ state.transprevnext.prev = action.payload.prev; }, initialtrans(state) { + state.subway = []; + state.subwayCheck = false; + state.subwayInfo = {}; + state.currentSubway = ""; state.transferDetail = { transCheck: false, transRoad: [], From db7ff6dd954d87d8c50a3c987e094d04d3859dcb Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 21 Dec 2022 17:41:10 +0900 Subject: [PATCH 24/32] =?UTF-8?q?feat.=20=EC=B5=9C=EC=A2=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 최종 수정 --- .../src/component/bus-component/buslist/StationItem.js | 9 ++++++--- .../component/subway-component/subwaylist/SubwayItems.js | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 7b0ea21..54e8e74 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -16,6 +16,9 @@ const StationItem = (props) => { if (station === arsId) { setColor(false) } + else { + setColor(true) + } }, [station]) @@ -68,7 +71,7 @@ font-family: 'Pretendard-Regular'; padding-left:20px; font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 400; + font-weight: ${props => (props.color ? "400" : "700")}; font-size: 2vw; line-height: 60px; color:${props => (props.color ? "#000000" : "#FFFFFF")}; @@ -78,13 +81,13 @@ font-family: 'Pretendard-Regular'; padding-right:20px; font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 500; + font-weight: ${props => (props.color ? "500" : "700")}; font-size: 1.7vw; line-height: 29px; display: flex; align-items: center; text-align: center; - color:${props => (props.color ? "#9C9C9C" : "black")}; + color:${props => (props.color ? "#000000" : "#FFFFFF")}; } @media (max-width:500px){ height:28%; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js index 0e8332a..98e2475 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.js @@ -17,6 +17,9 @@ const SubwayItems = ({ items }) => { if (currentSubway === stCd) { setColor(false) } + else { + setColor(true) + } const locationRecive = async () => { await api.get(`/subway/stationInfo/${stCd}/${stNm}`) .then(res => { @@ -72,7 +75,7 @@ a{ padding-left:20px; font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 400; + font-weight: ${props => (props.color ? "400" : "700")}; font-size: 40px; line-height: 60px; color:${props => (props.color ? "#000000" : "#FFFFFF")}; From 67a2f1c752d99bdddcfa79e57454cfba600ad821 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Thu, 5 Jan 2023 19:27:04 +0900 Subject: [PATCH 25/32] Update StationItem.js --- .../creative/src/component/bus-component/buslist/StationItem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js index 54e8e74..b201eea 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js @@ -90,7 +90,7 @@ font-family: 'Pretendard-Regular'; color:${props => (props.color ? "#000000" : "#FFFFFF")}; } @media (max-width:500px){ - height:28%; + height:35%; .Name{ font-family: 'Pretendard-Regular'; font-size: 5vw; From 85d55cc2991cd52fafe77a5a28d113aae19e2190 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 13 Sep 2023 21:55:07 +0900 Subject: [PATCH 26/32] =?UTF-8?q?refac:=20typescript=EB=A1=9C=20Refectorin?= =?UTF-8?q?g=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/package-lock.json | 92 +++++++++------ Backend/Frontend/creative/package.json | 8 ++ .../component/{Auth/Api.js => auth/Api..tsx} | 1 + .../busform/{BusButton.js => BusButton.tsx} | 3 +- .../bus-component/busform/BusForm.js | 54 --------- .../bus-component/busform/BusForm.tsx | 56 ++++++++++ .../busform/{BusInput.js => BusInput.tsx} | 1 + .../bus-component/buslist/BusItem.js | 96 ---------------- .../bus-component/buslist/BusItem.tsx | 103 +++++++++++++++++ .../buslist/{BusList.js => BusList.tsx} | 1 + .../bus-component/buslist/BusTimer.js | 20 ---- .../bus-component/buslist/BusTimer.tsx | 13 +++ .../bus-component/buslist/RefreshButton.js | 56 ---------- .../bus-component/buslist/RefreshButton.tsx | 57 ++++++++++ .../bus-component/buslist/StationItem.js | 105 ------------------ .../bus-component/buslist/StationItem.tsx | 102 +++++++++++++++++ .../busnumber/{BusNumber.js => BusNumber.tsx} | 1 + .../buspanel/{BusPanel.js => BusPanel.tsx} | 1 + .../header/{Header.js => Header.tsx} | 1 + .../component/map/{Mapping.js => Mapping.tsx} | 3 +- .../subwaybath/SubwayBathChairInfo.js | 70 ++++++------ .../Frontend/creative/src/store/Bus-slice.js | 44 -------- .../Frontend/creative/src/store/Bus-slice.tsx | 42 +++++++ .../src/store/{Map-slice.js => Map-slice.tsx} | 0 .../creative/src/store/Subway-slice.js | 74 ------------ .../creative/src/store/Subway-slice.tsx | 74 ++++++++++++ Backend/Frontend/creative/tsconfig.json | 13 +++ 27 files changed, 573 insertions(+), 518 deletions(-) rename Backend/Frontend/creative/src/component/{Auth/Api.js => auth/Api..tsx} (80%) rename Backend/Frontend/creative/src/component/bus-component/busform/{BusButton.js => BusButton.tsx} (87%) delete mode 100644 Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx rename Backend/Frontend/creative/src/component/bus-component/busform/{BusInput.js => BusInput.tsx} (94%) delete mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx rename Backend/Frontend/creative/src/component/bus-component/buslist/{BusList.js => BusList.tsx} (98%) delete mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.tsx delete mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx delete mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js create mode 100644 Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx rename Backend/Frontend/creative/src/component/bus-component/busnumber/{BusNumber.js => BusNumber.tsx} (96%) rename Backend/Frontend/creative/src/component/bus-component/buspanel/{BusPanel.js => BusPanel.tsx} (97%) rename Backend/Frontend/creative/src/component/header/{Header.js => Header.tsx} (98%) rename Backend/Frontend/creative/src/component/map/{Mapping.js => Mapping.tsx} (97%) delete mode 100644 Backend/Frontend/creative/src/store/Bus-slice.js create mode 100644 Backend/Frontend/creative/src/store/Bus-slice.tsx rename Backend/Frontend/creative/src/store/{Map-slice.js => Map-slice.tsx} (100%) delete mode 100644 Backend/Frontend/creative/src/store/Subway-slice.js create mode 100644 Backend/Frontend/creative/src/store/Subway-slice.tsx create mode 100644 Backend/Frontend/creative/tsconfig.json diff --git a/Backend/Frontend/creative/package-lock.json b/Backend/Frontend/creative/package-lock.json index 59117fa..ca17f24 100644 --- a/Backend/Frontend/creative/package-lock.json +++ b/Backend/Frontend/creative/package-lock.json @@ -12,6 +12,10 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/jest": "^29.5.4", + "@types/node": "^20.6.0", + "@types/react": "^18.2.21", + "@types/react-dom": "^18.2.7", "axios": "^1.1.2", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -20,7 +24,11 @@ "react-scripts": "5.0.1", "redux-persist": "^6.0.0", "styled-components": "^5.3.6", + "typescript": "^3.2.1", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@types/styled-components": "^5.1.27" } }, "node_modules/@adobe/css-tools": { @@ -3875,9 +3883,9 @@ } }, "node_modules/@types/jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.1.tgz", - "integrity": "sha512-U9Ey07dGWl6fUFaIaUQUKWG5NoKi/zizeVQCGV8s4nSU0jPgqphVZvS64+8BtWYvrc3ZGw6wo943NSYPxkrp/g==", + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -4121,9 +4129,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "18.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz", - "integrity": "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==" + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -4156,9 +4164,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.0.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", - "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4166,9 +4174,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dependencies": { "@types/react": "*" } @@ -4221,6 +4229,17 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "node_modules/@types/styled-components": { + "version": "5.1.27", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.27.tgz", + "integrity": "sha512-oY9c1SdztRRF0QDQdwXEenfAjGN4WGUkaMpx5hvdTbYYqw01qoY2GrHi+kAR6SVofynzD6KbGoF5ITP0zh5pvg==", + "dev": true, + "dependencies": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.5", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", @@ -15988,10 +16007,9 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "peer": true, + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.1.tgz", + "integrity": "sha512-jw7P2z/h6aPT4AENXDGjcfHTu5CSqzsbZc6YlUIebTyBAq8XaKp78x7VcSh30xwSCcsu5irZkYZUSFP1MrAMbg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19750,9 +19768,9 @@ } }, "@types/jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.1.tgz", - "integrity": "sha512-U9Ey07dGWl6fUFaIaUQUKWG5NoKi/zizeVQCGV8s4nSU0jPgqphVZvS64+8BtWYvrc3ZGw6wo943NSYPxkrp/g==", + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", "requires": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -19943,9 +19961,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "@types/node": { - "version": "18.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz", - "integrity": "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==" + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==" }, "@types/parse-json": { "version": "4.0.0", @@ -19978,9 +19996,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "18.0.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", - "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -19988,9 +20006,9 @@ } }, "@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "requires": { "@types/react": "*" } @@ -20043,6 +20061,17 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "@types/styled-components": { + "version": "5.1.27", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.27.tgz", + "integrity": "sha512-oY9c1SdztRRF0QDQdwXEenfAjGN4WGUkaMpx5hvdTbYYqw01qoY2GrHi+kAR6SVofynzD6KbGoF5ITP0zh5pvg==", + "dev": true, + "requires": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, "@types/testing-library__jest-dom": { "version": "5.14.5", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", @@ -28412,10 +28441,9 @@ } }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "peer": true + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.1.tgz", + "integrity": "sha512-jw7P2z/h6aPT4AENXDGjcfHTu5CSqzsbZc6YlUIebTyBAq8XaKp78x7VcSh30xwSCcsu5irZkYZUSFP1MrAMbg==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/Backend/Frontend/creative/package.json b/Backend/Frontend/creative/package.json index 6e46b37..0b9e2c2 100644 --- a/Backend/Frontend/creative/package.json +++ b/Backend/Frontend/creative/package.json @@ -7,6 +7,10 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/jest": "^29.5.4", + "@types/node": "^20.6.0", + "@types/react": "^18.2.21", + "@types/react-dom": "^18.2.7", "axios": "^1.1.2", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -15,6 +19,7 @@ "react-scripts": "5.0.1", "redux-persist": "^6.0.0", "styled-components": "^5.3.6", + "typescript": "^3.2.1", "web-vitals": "^2.1.4" }, "scripts": { @@ -40,5 +45,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "@types/styled-components": "^5.1.27" } } diff --git a/Backend/Frontend/creative/src/component/Auth/Api.js b/Backend/Frontend/creative/src/component/auth/Api..tsx similarity index 80% rename from Backend/Frontend/creative/src/component/Auth/Api.js rename to Backend/Frontend/creative/src/component/auth/Api..tsx index 9e83bc1..808baf5 100644 --- a/Backend/Frontend/creative/src/component/Auth/Api.js +++ b/Backend/Frontend/creative/src/component/auth/Api..tsx @@ -1,3 +1,4 @@ +import React from "react" import axios from "axios" export const api = axios.create({ diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx similarity index 87% rename from Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js rename to Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx index 12fbe46..7d27a59 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx @@ -1,3 +1,4 @@ +import React from "react" import styled from "styled-components" const StyledButton = styled.button` @@ -17,7 +18,7 @@ padding:0; } ` -const BusButton = () => { +const BusButton:React.FC = () => { return ( GRASS ) diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js deleted file mode 100644 index 4af08be..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.js +++ /dev/null @@ -1,54 +0,0 @@ -import BusButton from "./BusButton"; -import BusInput from "./BusInput"; -import styled from "styled-components"; -import { api } from "../../auth/Api"; -import { MapActions } from "../../../store/Map-slice"; -import { BusActions } from "../../../store/Bus-slice"; -import { useDispatch } from "react-redux"; -import axios from "axios" - -const StyledForm = styled.form` - display:flex; - width: 34.6vw; - height: 11vh; - border: 4px solid #CDD029; - @media (max-width:500px){ - width: 98vw; - height: 15vw; - } -` - - -const BusForm = () => { - const dispatch = useDispatch(); - const SubmitBusStation = (value) => { - api.get(`/bus/stNm/${value}`) - .then(res => { - const { data } = res; - dispatch(BusActions.initialState()) - dispatch(MapActions.makerchacking(data)) - dispatch(BusActions.addStationInfo(data)) - dispatch(MapActions.positioning(data[0])) - dispatch(MapActions.Onbusmode()) - }).catch(error => { - console.log(error) - alert("해당 정류장이 없습니다.") - }); - - } - const BusStationData = (event) => { - event.preventDefault(); - const { target: [input] } = event - const { value } = input - input.value = ""; - SubmitBusStation(value) - } - return ( - - - - - ) -} - -export default BusForm \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx new file mode 100644 index 0000000..4702359 --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx @@ -0,0 +1,56 @@ +import React from "react"; +import BusButton from "./BusButton"; +import BusInput from "./BusInput"; +import styled from "styled-components"; +import { api } from "../../auth/Api."; +import { MapActions } from "../../../store/Map-slice"; +import { BusActions } from "../../../store/Bus-slice"; +import { useDispatch } from "react-redux"; + +const StyledForm = styled.form` + display: flex; + width: 34.6vw; + height: 11vh; + border: 4px solid #cdd029; + @media (max-width: 500px) { + width: 98vw; + height: 15vw; + } +`; + +const BusForm:React.FC = () => { + const dispatch = useDispatch(); + const SubmitBusStation = (value) => { + api + .get(`/bus/stNm/${value}`) + .then((res) => { + const { data } = res; + dispatch(BusActions.initialState()); + dispatch(MapActions.makerchacking(data)); + dispatch(BusActions.addStationInfo(data)); + dispatch(MapActions.positioning(data[0])); + dispatch(MapActions.Onbusmode()); + }) + .catch((error) => { + console.log(error); + alert("해당 정류장이 없습니다."); + }); + }; + const BusStationData = (event) => { + event.preventDefault(); + const { + target: [input], + } = event; + const { value } = input; + input.value = ""; + SubmitBusStation(value); + }; + return ( + + + + + ); +}; + +export default BusForm; diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx similarity index 94% rename from Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js rename to Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx index a7c382d..5dd2fdd 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.js +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx @@ -1,3 +1,4 @@ +import React from "react" import styled from "styled-components" const StyledInput = styled.input` diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js deleted file mode 100644 index ba251c0..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.js +++ /dev/null @@ -1,96 +0,0 @@ -import styled from "styled-components"; -import { useEffect } from "react"; -const StyledBusItem = styled.li` -display:flex; -justify-content:space-between; -align-items:center; -width:100%; -list-style:none; -text-align: center; -border-bottom: 1px solid #D2D2D2; -font-family: 'Pretendard-Regular'; -.mark{ - width:1.5vw; - height:1.5vw; - margin-right:0.8vw; -} -:hover{ - cursor: pointer; -} -a{ - width:100%; - display:flex; - justify-content:space-between; - align-items:center; - color:black; - text-decoration:none; -} -div{ - display:flex; - align-items:center; -} -.Name{ - display:flex; - justify-content:center; - align-items:center; - padding-left:20px; - font-family: 'Pretendard-Regular'; - font-style: normal; - font-weight: 600; - font-size: 2vw; - line-height: 60px; - margin-right:10px; -} -.direction{ - font-family: 'Pretendard-Regular'; - font-style: normal; - font-weight: 600; - font-size: 1.3vw; - line-height: 29px; -} -.id{ - padding-right:20px; - font-family: 'Pretendard-Regular'; - font-style: normal; - font-weight: 600; - font-size: 1.5vw; - line-height: 29px; - color: #9C9C9C; -} - -@media (max-width:500px){ - height:28%; - .Name{ - font-size: 5vw; - } - .direction{ - font-size: 3vw; - } - .id{ - font-size: 3vw; - } - .mark{ - width:100%; - height:100%; - margin-right:2vw; - } -} -` - -const BusItem = (props) => { - const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; - - return ( - - -
    -

    {busrouteAbrv}

    -

    {adirection}방면

    -
    -

    {arrmsg1}

    -
    - - ) -} - -export default BusItem; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx new file mode 100644 index 0000000..7508a0e --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx @@ -0,0 +1,103 @@ +import React from "react"; +import styled from "styled-components"; + +const StyledBusItem = styled.li` + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + list-style: none; + text-align: center; + border-bottom: 1px solid #d2d2d2; + font-family: "Pretendard-Regular"; + .mark { + width: 1.5vw; + height: 1.5vw; + margin-right: 0.8vw; + } + :hover { + cursor: pointer; + } + a { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + color: black; + text-decoration: none; + } + div { + display: flex; + align-items: center; + } + .Name { + display: flex; + justify-content: center; + align-items: center; + padding-left: 20px; + font-family: "Pretendard-Regular"; + font-style: normal; + font-weight: 600; + font-size: 2vw; + line-height: 60px; + margin-right: 10px; + } + .direction { + font-family: "Pretendard-Regular"; + font-style: normal; + font-weight: 600; + font-size: 1.3vw; + line-height: 29px; + } + .id { + padding-right: 20px; + font-family: "Pretendard-Regular"; + font-style: normal; + font-weight: 600; + font-size: 1.5vw; + line-height: 29px; + color: #9c9c9c; + } + + @media (max-width: 500px) { + height: 28%; + .Name { + font-size: 5vw; + } + .direction { + font-size: 3vw; + } + .id { + font-size: 3vw; + } + .mark { + width: 100%; + height: 100%; + margin-right: 2vw; + } + } +`; + +const BusItem = (props) => { + const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; + + return ( + + +
    +

    + + {busrouteAbrv} +

    +

    {adirection}방면

    +
    +

    {arrmsg1}

    +
    +
    + ); +}; + +export default BusItem; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx similarity index 98% rename from Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js rename to Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx index 0839e87..cf4170a 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.js +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; import BusItem from "./BusItem"; import StationItem from "./StationItem" diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.js b/Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.js deleted file mode 100644 index fbdcee0..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.js +++ /dev/null @@ -1,20 +0,0 @@ -import { useState } from "react"; -import styled from "styled-components"; - -const StyledBusTimer = styled.div` - - - -` - -const BusTimer = (props) => { - const [Timer, setTimer] = useState(props.timer) - setInterval(() => { - - }, 1000) - return ( - {Timer} - ) -} - -export default BusTimer; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.tsx new file mode 100644 index 0000000..f16cb9a --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusTimer.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { useState } from "react"; +import styled from "styled-components"; + +const StyledBusTimer = styled.div``; + +const BusTimer = (props) => { + const [Timer] = useState(props.timer); + setInterval(() => {}, 1000); + return {Timer}; +}; + +export default BusTimer; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js deleted file mode 100644 index d90e3ed..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.js +++ /dev/null @@ -1,56 +0,0 @@ -import styled from "styled-components"; -import axios from "axios"; -import { api } from "../../auth/Api.js" -import { useSelector, useDispatch } from "react-redux"; -import { BusActions } from "../../../store/Bus-slice"; - -const StyledRefreshButton = styled.button` -width:3vw; -height:3vw; -border: 0; -border-radius:50px; -background-color:transparent; -padding:0; -img{ - width:70%; - height:70%; -} -:hover{ - cursor: pointer; -} -@media (max-width:500px){ - width:10vw; - height:10vw; - img{ - width:70%; - height:70%; - } -} -` - - -const RefreshButton = () => { - const dispatch = useDispatch() - const busId = useSelector(state => state.bus.busId) - const clickCheck = { - check: false - }; - const Refresh = async () => { - clickCheck.check = true; - await api.get(`/bus/arsId/${busId}`) - .then(res => { - const { data } = res; - dispatch(BusActions.addBusInfo(data)) - }).catch(error => { - alert(error) - }) - } - console.log(Node.classList) - return ( - - 새로고침 - - ) -} - -export default RefreshButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx new file mode 100644 index 0000000..80d593e --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx @@ -0,0 +1,57 @@ +import React from "react"; +import styled from "styled-components"; +import { api } from "../../auth/Api..js"; +import { useSelector, useDispatch } from "react-redux"; +import { BusActions } from "../../../store/Bus-slice.js"; + +const StyledRefreshButton = styled.button` + width: 3vw; + height: 3vw; + border: 0; + border-radius: 50px; + background-color: transparent; + padding: 0; + img { + width: 70%; + height: 70%; + } + :hover { + cursor: pointer; + } + @media (max-width: 500px) { + width: 10vw; + height: 10vw; + img { + width: 70%; + height: 70%; + } + } +`; + +const RefreshButton = () => { + const dispatch = useDispatch(); + const busId = useSelector((state) => state.bus.busId); + const clickCheck = { + check: false, + }; + const Refresh = async () => { + clickCheck.check = true; + await api + .get(`/bus/arsId/${busId}`) + .then((res) => { + const { data } = res; + dispatch(BusActions.addBusInfo(data)); + }) + .catch((error) => { + alert(error); + }); + }; + console.log(Node.classList); + return ( + + 새로고침 + + ); +}; + +export default RefreshButton; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js deleted file mode 100644 index 58a6c6d..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.js +++ /dev/null @@ -1,105 +0,0 @@ -import styled from "styled-components"; -import { api } from "../../auth/Api"; -import { useDispatch, useSelector } from "react-redux"; -import { BusActions } from "../../../store/Bus-slice"; -import { MapActions } from "../../../store/Map-slice"; -import { useEffect, useState } from "react"; - - -const StationItem = (props) => { - const [color, setColor] = useState(false) - const { stNm, arsId, tmX, tmY } = props.items - - const dispatch = useDispatch(); - const station = useSelector(state => state.bus.currentStation) - useEffect(() => { - if (station === arsId) { - setColor(false) - } - else { - setColor(true) - } - }, [station]) - - - const ClickClass = () => { - if (station === arsId) { - SubmitStation(); - } - else if (station !== arsId) { - setColor(false) - dispatch(BusActions.ClickStation(arsId)) - dispatch(MapActions.positioning({ tmX, tmY })) - } - } - - const SubmitStation = async () => { - await api.get(`/bus/arsId/${arsId}`, { - - }).then(res => { - const { data } = res; - dispatch(BusActions.refreshBus(arsId)) - dispatch(BusActions.addBusInfo(data)) - }).catch(error => { - alert("저상 버스가 없습니다.") - }) - } - - return ( - -

    {stNm}

    -

    {arsId}

    -
    - ) -} - - -const StyledStationItem = styled.li` -display:flex; -justify-content:space-between; -align-items:center; -width:100%; -list-style:none; -border-bottom: 1px solid #D2D2D2; -background-color:${props => (props.color ? "#FFFFFF" : "#CDD029")}; -font-family: 'Pretendard-Regular'; -:hover{ - cursor: pointer; -} - -.Name{ - padding-left:20px; - font-family: 'Pretendard-Regular'; - font-style: normal; - font-weight: ${props => (props.color ? "400" : "700")}; - font-size: 2vw; - line-height: 60px; - color:${props => (props.color ? "#000000" : "#FFFFFF")}; -} - -.id{ - padding-right:20px; - font-family: 'Pretendard-Regular'; - font-style: normal; - font-weight: ${props => (props.color ? "500" : "700")}; - font-size: 1.7vw; - line-height: 29px; - display: flex; - align-items: center; - text-align: center; - color:${props => (props.color ? "#000000" : "#FFFFFF")}; -} -@media (max-width:500px){ - height:35%; - .Name{ - font-family: 'Pretendard-Regular'; - font-size: 5vw; - } - .id{ - font-family: 'Pretendard-Regular'; - font-size: 3vw; - } -} -` - -export default StationItem; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx new file mode 100644 index 0000000..5ee406b --- /dev/null +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import styled from "styled-components"; +import { api } from "../../auth/Api."; +import { useDispatch, useSelector } from "react-redux"; +import { BusActions } from "../../../store/Bus-slice"; +import { MapActions } from "../../../store/Map-slice"; +import { useEffect, useState } from "react"; + +const StationItem = (props) => { + const [color, setColor] = useState(false); + const { stNm, arsId, tmX, tmY } = props.items; + + const dispatch = useDispatch(); + const station = useSelector((state) => state.bus.currentStation); + useEffect(() => { + if (station === arsId) { + setColor(false); + } else { + setColor(true); + } + }, [arsId, station]); + + const ClickClass = () => { + if (station === arsId) { + SubmitStation(); + } else if (station !== arsId) { + setColor(false); + dispatch(BusActions.ClickStation(arsId)); + dispatch(MapActions.positioning({ tmX, tmY })); + } + }; + + const SubmitStation = async () => { + await api + .get(`/bus/arsId/${arsId}`, {}) + .then((res) => { + const { data } = res; + dispatch(BusActions.refreshBus(arsId)); + dispatch(BusActions.addBusInfo(data)); + }) + .catch((error) => { + alert("저상 버스가 없습니다."); + }); + }; + + return ( + +

    {stNm}

    +

    {arsId}

    +
    + ); +}; + +const StyledStationItem = styled.li` + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + list-style: none; + border-bottom: 1px solid #d2d2d2; + background-color: ${(props) => (props.color ? "#FFFFFF" : "#CDD029")}; + font-family: "Pretendard-Regular"; + :hover { + cursor: pointer; + } + + .Name { + padding-left: 20px; + font-family: "Pretendard-Regular"; + font-style: normal; + font-weight: ${(props) => (props.color ? "400" : "700")}; + font-size: 2vw; + line-height: 60px; + color: ${(props) => (props.color ? "#000000" : "#FFFFFF")}; + } + + .id { + padding-right: 20px; + font-family: "Pretendard-Regular"; + font-style: normal; + font-weight: ${(props) => (props.color ? "500" : "700")}; + font-size: 1.7vw; + line-height: 29px; + display: flex; + align-items: center; + text-align: center; + color: ${(props) => (props.color ? "#000000" : "#FFFFFF")}; + } + @media (max-width: 500px) { + height: 35%; + .Name { + font-family: "Pretendard-Regular"; + font-size: 5vw; + } + .id { + font-family: "Pretendard-Regular"; + font-size: 3vw; + } + } +`; + +export default StationItem; diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx similarity index 96% rename from Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js rename to Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx index 76eadcf..d8d9920 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.js +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; import RefreshButton from "../buslist/RefreshButton"; import { useSelector } from "react-redux"; diff --git a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.tsx similarity index 97% rename from Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js rename to Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.tsx index fcaa6f4..b3aa78b 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.js +++ b/Backend/Frontend/creative/src/component/bus-component/buspanel/BusPanel.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; diff --git a/Backend/Frontend/creative/src/component/header/Header.js b/Backend/Frontend/creative/src/component/header/Header.tsx similarity index 98% rename from Backend/Frontend/creative/src/component/header/Header.js rename to Backend/Frontend/creative/src/component/header/Header.tsx index f4e7b2f..5ff33de 100644 --- a/Backend/Frontend/creative/src/component/header/Header.js +++ b/Backend/Frontend/creative/src/component/header/Header.tsx @@ -1,3 +1,4 @@ +import React from "react" import styled from "styled-components"; import { Link } from "react-router-dom"; import { useDispatch } from "react-redux"; diff --git a/Backend/Frontend/creative/src/component/map/Mapping.js b/Backend/Frontend/creative/src/component/map/Mapping.tsx similarity index 97% rename from Backend/Frontend/creative/src/component/map/Mapping.js rename to Backend/Frontend/creative/src/component/map/Mapping.tsx index 610b005..4dc56bc 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.js +++ b/Backend/Frontend/creative/src/component/map/Mapping.tsx @@ -1,7 +1,8 @@ +import React from "react"; import { useEffect } from "react"; import { useSelector, useDispatch } from 'react-redux'; import classes from "./Mapping.module.css" -import { api } from "../auth/Api"; +import { api } from "../auth/Api."; import { BusActions } from "../../store/Bus-slice"; const Mapping = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js index 712579b..218e33f 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js @@ -1,43 +1,43 @@ import styled from "styled-components"; const StyledBathChair = styled.div` -width:90%; -display:flex; -.title{ - font-size:2vw; - margin:1.8vw; -} -.body{ - font-size:1.7vw; - margin:0; - margin-bottom:1vw; -} -font-family: 'Pretendard-Regular'; -font-style: normal; -font-weight: 600; -@media (max-width:500px){ - font-size:4vw; - width:90%; - height:80vw; - .title{ - font-size:4vw; - margin:1.8vw; + width: 90%; + display: flex; + .title { + font-size: 2vw; + margin: 1.8vw; + } + .body { + font-size: 1.7vw; + margin: 0; + margin-bottom: 1vw; + } + font-family: "Pretendard-Regular"; + font-style: normal; + font-weight: 600; + @media (max-width: 500px) { + font-size: 4vw; + width: 90%; + height: 80vw; + .title { + font-size: 4vw; + margin: 1.8vw; } - .body{ - font-size:3vw; - margin:0; - margin-bottom:2vw; + .body { + font-size: 3vw; + margin: 0; + margin-bottom: 2vw; } -` - + } +`; const SubwayBathchairInfo = ({ mvContDtl, direction }) => { - return ( - -

    {direction}

    -

    {mvContDtl}

    -
    - ) -} + return ( + +

    {direction}

    +

    {mvContDtl}

    +
    + ); +}; -export default SubwayBathchairInfo; \ No newline at end of file +export default SubwayBathchairInfo; diff --git a/Backend/Frontend/creative/src/store/Bus-slice.js b/Backend/Frontend/creative/src/store/Bus-slice.js deleted file mode 100644 index 27055ff..0000000 --- a/Backend/Frontend/creative/src/store/Bus-slice.js +++ /dev/null @@ -1,44 +0,0 @@ -import { createSlice } from "@reduxjs/toolkit"; - - -const BusSlice = createSlice({ - name: "bus", - initialState: { - buslist: [], - station: [], - busId: "", - stationCheck: false, - busCheck: false, - currentStation: "" - }, - reducers: { - addStationInfo(state, action) { - state.station = action.payload - state.stationCheck = true - state.busCheck = false - }, - refreshBus(state, action) { - state.busId = action.payload - }, - addBusInfo(state, action) { - state.buslist = action.payload - state.stationCheck = false - state.busCheck = true - }, - ClickStation(state, action) { - state.currentStation = action.payload - }, - initialState(state) { - state.buslist = []; - state.station = []; - state.busId = ""; - state.stationCheck = false; - state.busCheck = false; - state.currentStation = ""; - } - } -}); - -export const BusActions = BusSlice.actions; -export default BusSlice.reducer; - diff --git a/Backend/Frontend/creative/src/store/Bus-slice.tsx b/Backend/Frontend/creative/src/store/Bus-slice.tsx new file mode 100644 index 0000000..6ca50ca --- /dev/null +++ b/Backend/Frontend/creative/src/store/Bus-slice.tsx @@ -0,0 +1,42 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const BusSlice = createSlice({ + name: "bus", + initialState: { + buslist: [], + station: [], + busId: "", + stationCheck: false, + busCheck: false, + currentStation: "", + }, + reducers: { + addStationInfo(state, action) { + state.station = action.payload; + state.stationCheck = true; + state.busCheck = false; + }, + refreshBus(state, action) { + state.busId = action.payload; + }, + addBusInfo(state, action) { + state.buslist = action.payload; + state.stationCheck = false; + state.busCheck = true; + }, + ClickStation(state, action) { + state.currentStation = action.payload; + }, + initialState(state) { + state.buslist = []; + state.station = []; + state.busId = ""; + state.stationCheck = false; + state.busCheck = false; + state.currentStation = ""; + }, + }, +}); + +export const BusActions = BusSlice.actions; +export default BusSlice.reducer; diff --git a/Backend/Frontend/creative/src/store/Map-slice.js b/Backend/Frontend/creative/src/store/Map-slice.tsx similarity index 100% rename from Backend/Frontend/creative/src/store/Map-slice.js rename to Backend/Frontend/creative/src/store/Map-slice.tsx diff --git a/Backend/Frontend/creative/src/store/Subway-slice.js b/Backend/Frontend/creative/src/store/Subway-slice.js deleted file mode 100644 index c92385d..0000000 --- a/Backend/Frontend/creative/src/store/Subway-slice.js +++ /dev/null @@ -1,74 +0,0 @@ -import { createSlice } from "@reduxjs/toolkit"; - -const SubwaySlice = createSlice({ - name: "Subway", - initialState: { - subway: [], - subwayCheck: false, - subwayInfo: {}, - currentSubway: "", - transferDetail: { - transCheck: false, - transRoad: [], - transferImage: "" - }, - transprevnext: { - prev: "", - next: "" - } - }, - reducers: { - addSubwayInfo(state, action) { - state.subway = action.payload - state.subwayCheck = true - }, - saveSubway(state, action) { - state.subwayInfo = action.payload - }, - initialState(state) { - state.subway = []; - state.subwayCheck = false; - state.subwayInfo = {}; - state.currentSubway = ""; - state.transferDetail = { - transCheck: false, - transRoad: [], - transferImage: "" - }; - state.transprevnext = { - prev: "", - next: "" - }; - }, - clickSubway(state, action) { - state.currentSubway = action.payload; - }, - addTransfer(state, action) { - state.transferDetail.transCheck = true; - state.transferDetail.transRoad = action.payload; - state.transferDetail.transferImage = action.payload[0].imgPath; - }, - addprenex(state, action) { - state.transprevnext.next = action.payload.next; - state.transprevnext.prev = action.payload.prev; - }, - initialtrans(state) { - state.subway = []; - state.subwayCheck = false; - state.subwayInfo = {}; - state.currentSubway = ""; - state.transferDetail = { - transCheck: false, - transRoad: [], - transferImage: "" - }; - state.transprevnext = { - prev: "", - next: "" - } - } - } -}) - -export const SubwayActions = SubwaySlice.actions; -export default SubwaySlice.reducer; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/store/Subway-slice.tsx b/Backend/Frontend/creative/src/store/Subway-slice.tsx new file mode 100644 index 0000000..bd1e3f1 --- /dev/null +++ b/Backend/Frontend/creative/src/store/Subway-slice.tsx @@ -0,0 +1,74 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const SubwaySlice = createSlice({ + name: "Subway", + initialState: { + subway: [], + subwayCheck: false, + subwayInfo: {}, + currentSubway: "", + transferDetail: { + transCheck: false, + transRoad: [], + transferImage: "", + }, + transprevnext: { + prev: "", + next: "", + }, + }, + reducers: { + addSubwayInfo(state, action) { + state.subway = action.payload; + state.subwayCheck = true; + }, + saveSubway(state, action) { + state.subwayInfo = action.payload; + }, + initialState(state) { + state.subway = []; + state.subwayCheck = false; + state.subwayInfo = {}; + state.currentSubway = ""; + state.transferDetail = { + transCheck: false, + transRoad: [], + transferImage: "", + }; + state.transprevnext = { + prev: "", + next: "", + }; + }, + clickSubway(state, action) { + state.currentSubway = action.payload; + }, + addTransfer(state, action) { + state.transferDetail.transCheck = true; + state.transferDetail.transRoad = action.payload; + state.transferDetail.transferImage = action.payload[0].imgPath; + }, + addprenex(state, action) { + state.transprevnext.next = action.payload.next; + state.transprevnext.prev = action.payload.prev; + }, + initialtrans(state) { + state.subway = []; + state.subwayCheck = false; + state.subwayInfo = {}; + state.currentSubway = ""; + state.transferDetail = { + transCheck: false, + transRoad: [], + transferImage: "", + }; + state.transprevnext = { + prev: "", + next: "", + }; + }, + }, +}); + +export const SubwayActions = SubwaySlice.actions; +export default SubwaySlice.reducer; diff --git a/Backend/Frontend/creative/tsconfig.json b/Backend/Frontend/creative/tsconfig.json new file mode 100644 index 0000000..2cc24fb --- /dev/null +++ b/Backend/Frontend/creative/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "paths":["**/*"], + } +} + \ No newline at end of file From 19d1d07d01dda7a54052c18cc8057b2e9c796bf7 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 11 Oct 2023 18:20:24 +0900 Subject: [PATCH 27/32] =?UTF-8?q?feat(front):=20ts=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EB=8B=A4=EC=88=98=20=EB=B0=9C=EA=B2=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Frontend/creative/src/{App.js => App.tsx} | 15 ++++--- .../src/component/auth/{Api..tsx => Api.ts} | 1 - .../bus-component/busform/BusButton.tsx | 27 ----------- .../bus-component/busform/BusForm.tsx | 45 +++++++++---------- .../bus-component/busform/BusInput.tsx | 27 ----------- .../bus-component/buslist/BusItem.tsx | 5 ++- .../bus-component/buslist/BusList.tsx | 16 ++++--- .../bus-component/buslist/BusTimer.tsx | 2 +- .../bus-component/buslist/RefreshButton.tsx | 6 +-- .../bus-component/buslist/StationItem.tsx | 25 ++++++----- .../bus-component/busnumber/BusNumber.tsx | 5 ++- .../creative/src/component/map/Mapping.tsx | 35 +++++++++------ .../menu/{MenuBar.js => MenuBar.tsx} | 1 + .../{MenuBusButton.js => MenuBusButton.tsx} | 1 + .../menu/{MenuExplan.js => MenuExplan.tsx} | 1 + .../menu/{MenuHeader.js => MenuHeader.tsx} | 1 + ...nuSubwayButton.js => MenuSubwayButton.tsx} | 2 + ...atorDetail.js => SubwayElevatorDetail.tsx} | 7 +-- ...ElevatorItem.js => SubwayElevatorItem.tsx} | 7 +-- ...ayElevatorMap.js => SubwayElevatorMap.tsx} | 5 +-- ...thChairInfo.js => SubwayBathChairInfo.tsx} | 4 +- .../{SubwayDetail.js => SubwayDetail.tsx} | 13 ++++-- .../{SubwayButton.js => SubwayButton.tsx} | 1 + .../{SubwayForm.js => SubwayForm.tsx} | 7 +-- .../{SubwayInput.js => SubwayInput.tsx} | 1 + .../{SubwayInfo.js => SubwayInfo.tsx} | 9 ++-- .../{SubwayItems.js => SubwayItems.tsx} | 19 +++++--- .../{SubwayList.js => SubwayList.tsx} | 10 ++--- .../{SubwayBar.js => SubwayBar.tsx} | 4 +- .../{SubwayNumber.js => SubwayNumber.tsx} | 3 +- .../{SubwayPanel.js => SubwayPanel.tsx} | 3 +- ...transferInfo.js => SubwayTransferInfo.tsx} | 10 +++-- ...TransferItem.js => SubwayTransferItem.tsx} | 8 ++-- ...asferDetail.js => SubwayTrasferDetail.tsx} | 20 ++++----- ...ationOptions.js => geolocationOptions.tsx} | 0 Backend/Frontend/creative/src/global.d.ts | 4 ++ .../hook/{usePosition.js => usePosition.tsx} | 8 ++-- .../creative/src/{index.js => index.tsx} | 8 ++-- .../src/page/{BusPage.js => BusPage.tsx} | 11 ++--- .../src/page/{MainPage.js => MainPage.tsx} | 6 ++- ...SubwayBathchair.js => SubwayBathchair.tsx} | 13 +++--- ...bwayDetailPage.js => SubwayDetailPage.tsx} | 16 +++---- .../{SubwayElevator.js => SubwayElevator.tsx} | 13 +++--- .../{SubwayPage.js => SubwayPage.tsx} | 11 ++--- .../{SubwayTransfer.js => SubwayTransfer.tsx} | 17 +++---- ...{reportWebVitals.js => reportWebVitals.ts} | 4 +- .../src/store/{Bus-slice.tsx => Bus-slice.ts} | 0 .../src/store/{Map-slice.tsx => Map-slice.ts} | 0 .../{Subway-slice.tsx => Subway-slice.ts} | 0 .../creative/src/store/{index.js => index.ts} | 2 + .../Frontend/creative/{ => src}/tsconfig.json | 2 + Backend/Frontend/creative/src/types/types.tsx | 10 +++++ 52 files changed, 244 insertions(+), 227 deletions(-) rename Backend/Frontend/creative/src/{App.js => App.tsx} (84%) rename Backend/Frontend/creative/src/component/auth/{Api..tsx => Api.ts} (80%) delete mode 100644 Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx delete mode 100644 Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx rename Backend/Frontend/creative/src/component/menu/{MenuBar.js => MenuBar.tsx} (95%) rename Backend/Frontend/creative/src/component/menu/{MenuBusButton.js => MenuBusButton.tsx} (98%) rename Backend/Frontend/creative/src/component/menu/{MenuExplan.js => MenuExplan.tsx} (97%) rename Backend/Frontend/creative/src/component/menu/{MenuHeader.js => MenuHeader.tsx} (92%) rename Backend/Frontend/creative/src/component/menu/{MenuSubwayButton.js => MenuSubwayButton.tsx} (98%) rename Backend/Frontend/creative/src/component/subway-component/subwayElevator/{SubwayElevatorDetail.js => SubwayElevatorDetail.tsx} (80%) rename Backend/Frontend/creative/src/component/subway-component/subwayElevator/{SubwayElevatorItem.js => SubwayElevatorItem.tsx} (86%) rename Backend/Frontend/creative/src/component/subway-component/subwayElevator/{SubwayElevatorMap.js => SubwayElevatorMap.tsx} (77%) rename Backend/Frontend/creative/src/component/subway-component/subwaybath/{SubwayBathChairInfo.js => SubwayBathChairInfo.tsx} (86%) rename Backend/Frontend/creative/src/component/subway-component/subwaydetail/{SubwayDetail.js => SubwayDetail.tsx} (87%) rename Backend/Frontend/creative/src/component/subway-component/subwayform/{SubwayButton.js => SubwayButton.tsx} (94%) rename Backend/Frontend/creative/src/component/subway-component/subwayform/{SubwayForm.js => SubwayForm.tsx} (88%) rename Backend/Frontend/creative/src/component/subway-component/subwayform/{SubwayInput.js => SubwayInput.tsx} (94%) rename Backend/Frontend/creative/src/component/subway-component/subwayinfo/{SubwayInfo.js => SubwayInfo.tsx} (79%) rename Backend/Frontend/creative/src/component/subway-component/subwaylist/{SubwayItems.js => SubwayItems.tsx} (85%) rename Backend/Frontend/creative/src/component/subway-component/subwaylist/{SubwayList.js => SubwayList.tsx} (74%) rename Backend/Frontend/creative/src/component/subway-component/subwaymenubar/{SubwayBar.js => SubwayBar.tsx} (89%) rename Backend/Frontend/creative/src/component/subway-component/subwaynumber/{SubwayNumber.js => SubwayNumber.tsx} (89%) rename Backend/Frontend/creative/src/component/subway-component/subwaypanel/{SubwayPanel.js => SubwayPanel.tsx} (91%) rename Backend/Frontend/creative/src/component/subway-component/subwaytransfer/{SubwaytransferInfo.js => SubwayTransferInfo.tsx} (82%) rename Backend/Frontend/creative/src/component/subway-component/subwaytransfer/{SubwayTransferItem.js => SubwayTransferItem.tsx} (86%) rename Backend/Frontend/creative/src/component/subway-component/subwaytransfer/{SubwayTrasferDetail.js => SubwayTrasferDetail.tsx} (68%) rename Backend/Frontend/creative/src/contents/{geolocationOptions.js => geolocationOptions.tsx} (100%) create mode 100644 Backend/Frontend/creative/src/global.d.ts rename Backend/Frontend/creative/src/hook/{usePosition.js => usePosition.tsx} (74%) rename Backend/Frontend/creative/src/{index.js => index.tsx} (60%) rename Backend/Frontend/creative/src/page/{BusPage.js => BusPage.tsx} (83%) rename Backend/Frontend/creative/src/page/{MainPage.js => MainPage.tsx} (67%) rename Backend/Frontend/creative/src/page/subwaypage/{SubwayBathchair.js => SubwayBathchair.tsx} (86%) rename Backend/Frontend/creative/src/page/subwaypage/{SubwayDetailPage.js => SubwayDetailPage.tsx} (81%) rename Backend/Frontend/creative/src/page/subwaypage/{SubwayElevator.js => SubwayElevator.tsx} (79%) rename Backend/Frontend/creative/src/page/subwaypage/{SubwayPage.js => SubwayPage.tsx} (80%) rename Backend/Frontend/creative/src/page/subwaypage/{SubwayTransfer.js => SubwayTransfer.tsx} (80%) rename Backend/Frontend/creative/src/{reportWebVitals.js => reportWebVitals.ts} (69%) rename Backend/Frontend/creative/src/store/{Bus-slice.tsx => Bus-slice.ts} (100%) rename Backend/Frontend/creative/src/store/{Map-slice.tsx => Map-slice.ts} (100%) rename Backend/Frontend/creative/src/store/{Subway-slice.tsx => Subway-slice.ts} (100%) rename Backend/Frontend/creative/src/store/{index.js => index.ts} (79%) rename Backend/Frontend/creative/{ => src}/tsconfig.json (77%) create mode 100644 Backend/Frontend/creative/src/types/types.tsx diff --git a/Backend/Frontend/creative/src/App.js b/Backend/Frontend/creative/src/App.tsx similarity index 84% rename from Backend/Frontend/creative/src/App.js rename to Backend/Frontend/creative/src/App.tsx index 28c78de..4c71d15 100644 --- a/Backend/Frontend/creative/src/App.js +++ b/Backend/Frontend/creative/src/App.tsx @@ -1,11 +1,12 @@ +import React from "react" import { HashRouter, Routes, Route } from "react-router-dom"; -import MainPage from "./page/MainPage.js" -import BusPage from "./page/BusPage.js" -import SubwayPage from "./page/subwaypage/SubwayPage.js" -import SubwayTransferPage from "./page/subwaypage/SubwayTransfer.js"; -import SubwayDetailPage from "./page/subwaypage/SubwayDetailPage.js" -import SubwayElevatorPage from "./page/subwaypage/SubwayElevator.js"; -import SubwayBathChairPage from "./page/subwaypage/SubwayBathchair.js"; +import MainPage from "./page/MainPage.tsx" +import BusPage from "./page/BusPage.tsx" +import SubwayPage from "./page/subwaypage/SubwayPage.tsx" +import SubwayTransferPage from "./page/subwaypage/SubwayTransfer.tsx"; +import SubwayDetailPage from "./page/subwaypage/SubwayDetailPage.tsx" +import SubwayElevatorPage from "./page/subwaypage/SubwayElevator.tsx"; +import SubwayBathChairPage from "./page/subwaypage/SubwayBathchair.tsx"; //page마다 url을 따로 지정, 페이지에서 api를 호출할 때 필요한 파라미터를 제공 function App() { diff --git a/Backend/Frontend/creative/src/component/auth/Api..tsx b/Backend/Frontend/creative/src/component/auth/Api.ts similarity index 80% rename from Backend/Frontend/creative/src/component/auth/Api..tsx rename to Backend/Frontend/creative/src/component/auth/Api.ts index 808baf5..9e83bc1 100644 --- a/Backend/Frontend/creative/src/component/auth/Api..tsx +++ b/Backend/Frontend/creative/src/component/auth/Api.ts @@ -1,4 +1,3 @@ -import React from "react" import axios from "axios" export const api = axios.create({ diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx b/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx deleted file mode 100644 index 7d27a59..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusButton.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react" -import styled from "styled-components" - -const StyledButton = styled.button` -width: 16%; -height: 100%; -background: #CDD029; -border: 1px solid #CDD029; -padding:0; -.GRASS{ - width:80%; - height:80%; - background: transparent; -} -@media (max-width:500px){ - width:20%; - height:100%; -} -` - -const BusButton:React.FC = () => { - return ( - GRASS - ) -} - -export default BusButton \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx index 4702359..1ec0b60 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx @@ -1,26 +1,26 @@ -import React from "react"; -import BusButton from "./BusButton"; -import BusInput from "./BusInput"; +import React, {useRef} from "react"; +import { useDispatch } from "react-redux"; import styled from "styled-components"; -import { api } from "../../auth/Api."; +import { api } from "../../auth/Api"; import { MapActions } from "../../../store/Map-slice"; import { BusActions } from "../../../store/Bus-slice"; -import { useDispatch } from "react-redux"; const StyledForm = styled.form` - display: flex; - width: 34.6vw; - height: 11vh; - border: 4px solid #cdd029; - @media (max-width: 500px) { - width: 98vw; - height: 15vw; - } -`; + display:flex; + width: 34.6vw; + height: 11vh; + border: 4px solid #CDD029; + @media (max-width:500px){ + width: 98vw; + height: 15vw; + } +` + const BusForm:React.FC = () => { const dispatch = useDispatch(); - const SubmitBusStation = (value) => { + const inputRef = useRef(null); + const SubmitBusStation = (value: string|null) => { api .get(`/bus/stNm/${value}`) .then((res) => { @@ -36,19 +36,14 @@ const BusForm:React.FC = () => { alert("해당 정류장이 없습니다."); }); }; - const BusStationData = (event) => { + const BusStationData = (event:React.FormEvent) => { event.preventDefault(); - const { - target: [input], - } = event; - const { value } = input; - input.value = ""; - SubmitBusStation(value); + SubmitBusStation(inputRef.current!.value); }; return ( - - - + + + ); }; diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx b/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx deleted file mode 100644 index 5dd2fdd..0000000 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusInput.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react" -import styled from "styled-components" - -const StyledInput = styled.input` -width: 80%; -height: 80%; -padding: 15px; -font-size: 2.5vw; -border:0; -font-family: 'Pretendard-Regular'; -font-weight: 700; -@media (max-width:500px){ - font-family: 'Pretendard-Regular'; - width: 80%; - height: 15vw; - font-size: 6vw; - padding: 1%; -} -` - -const BusInput = () => { - return ( - - ) -} - -export default BusInput \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx index 7508a0e..d69abae 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusItem.tsx @@ -78,7 +78,7 @@ const StyledBusItem = styled.li` } `; -const BusItem = (props) => { +const BusItem = (props:any) => { const { busrouteid, busrouteAbrv, adirection, arrmsg1 } = props.items; return ( @@ -86,10 +86,11 @@ const BusItem = (props) => {

    - + mark {busrouteAbrv}

    {adirection}방면

    diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx index cf4170a..e1e2573 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx @@ -1,9 +1,10 @@ import React from "react"; +import { useSelector } from "react-redux"; import styled from "styled-components"; import BusItem from "./BusItem"; import StationItem from "./StationItem" -import { useSelector } from "react-redux"; import BusNumber from "../busnumber/BusNumber"; +import { RootState } from "../../../store/index"; const StyledList = styled.ul` display:flex; @@ -24,21 +25,22 @@ overflow:auto; } ` + const BusList = () => { - const stationInfo = useSelector(state => state.bus.station) - const stationCheck = useSelector(state => state.bus.stationCheck) - const busInfo = useSelector(state => state.bus.buslist) - const busCheck = useSelector(state => state.bus.busCheck) + const stationInfo = useSelector((state:RootState )=> state.bus.station) + const stationCheck = useSelector((state:RootState) => state.bus.stationCheck) + const busInfo = useSelector((state:RootState) => state.bus.buslist) + const busCheck = useSelector((state:RootState) => state.bus.busCheck) return ( {(busCheck || stationCheck) && } - {stationCheck && stationInfo.map(element => ( + {stationCheck && stationInfo.map((element:any) => ( ))} - {busCheck && busInfo.map(element => ( + {busCheck && busInfo.map((element:any) => ( { +const BusTimer = (props:any) => { const [Timer] = useState(props.timer); setInterval(() => {}, 1000); return {Timer}; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx index 80d593e..7e22155 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx @@ -1,8 +1,9 @@ import React from "react"; import styled from "styled-components"; -import { api } from "../../auth/Api..js"; +import { api } from "../../auth/Api.js"; import { useSelector, useDispatch } from "react-redux"; import { BusActions } from "../../../store/Bus-slice.js"; +import { RootState } from "../../../store/index"; const StyledRefreshButton = styled.button` width: 3vw; @@ -30,7 +31,7 @@ const StyledRefreshButton = styled.button` const RefreshButton = () => { const dispatch = useDispatch(); - const busId = useSelector((state) => state.bus.busId); + const busId = useSelector((state:RootState) => state.bus.busId); const clickCheck = { check: false, }; @@ -46,7 +47,6 @@ const RefreshButton = () => { alert(error); }); }; - console.log(Node.classList); return ( 새로고침 diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx index 5ee406b..51c3ec6 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx @@ -1,17 +1,22 @@ import React from "react"; import styled from "styled-components"; -import { api } from "../../auth/Api."; +import { api } from "../../auth/Api"; import { useDispatch, useSelector } from "react-redux"; import { BusActions } from "../../../store/Bus-slice"; import { MapActions } from "../../../store/Map-slice"; import { useEffect, useState } from "react"; +import { RootState } from "../../../store/index"; -const StationItem = (props) => { - const [color, setColor] = useState(false); +interface stItem { + color:any; +} + +const StationItem = (props:any) => { + const [color, setColor] = useState(false); const { stNm, arsId, tmX, tmY } = props.items; const dispatch = useDispatch(); - const station = useSelector((state) => state.bus.currentStation); + const station = useSelector((state:RootState) => state.bus.currentStation); useEffect(() => { if (station === arsId) { setColor(false); @@ -51,14 +56,14 @@ const StationItem = (props) => { ); }; -const StyledStationItem = styled.li` +const StyledStationItem = styled.li` display: flex; justify-content: space-between; align-items: center; width: 100%; list-style: none; border-bottom: 1px solid #d2d2d2; - background-color: ${(props) => (props.color ? "#FFFFFF" : "#CDD029")}; + background-color: ${props => (props.color ? "#FFFFFF" : "#CDD029")}; font-family: "Pretendard-Regular"; :hover { cursor: pointer; @@ -68,23 +73,23 @@ const StyledStationItem = styled.li` padding-left: 20px; font-family: "Pretendard-Regular"; font-style: normal; - font-weight: ${(props) => (props.color ? "400" : "700")}; + font-weight: ${props => (props.color ? "400" : "700")}; font-size: 2vw; line-height: 60px; - color: ${(props) => (props.color ? "#000000" : "#FFFFFF")}; + color: ${props => (props.color ? "#000000" : "#FFFFFF")}; } .id { padding-right: 20px; font-family: "Pretendard-Regular"; font-style: normal; - font-weight: ${(props) => (props.color ? "500" : "700")}; + font-weight: ${props => (props.color ? "500" : "700")}; font-size: 1.7vw; line-height: 29px; display: flex; align-items: center; text-align: center; - color: ${(props) => (props.color ? "#000000" : "#FFFFFF")}; + color: ${props => (props.color ? "#000000" : "#FFFFFF")}; } @media (max-width: 500px) { height: 35%; diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx index d8d9920..6a7cfdf 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx @@ -2,6 +2,7 @@ import React from "react"; import styled from "styled-components"; import RefreshButton from "../buslist/RefreshButton"; import { useSelector } from "react-redux"; +import { RootState } from "../../../store/index"; const StyledBusNumber = styled.header` display:flex; @@ -24,8 +25,8 @@ p{ } ` -const BusNumber = (props) => { - const busCheck = useSelector(state => state.bus.busCheck) +const BusNumber = (props:any) => { + const busCheck = useSelector((state:RootState) => state.bus.busCheck) return (

    {props.text}{props.count}

    diff --git a/Backend/Frontend/creative/src/component/map/Mapping.tsx b/Backend/Frontend/creative/src/component/map/Mapping.tsx index 4dc56bc..a27e876 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.tsx +++ b/Backend/Frontend/creative/src/component/map/Mapping.tsx @@ -2,16 +2,23 @@ import React from "react"; import { useEffect } from "react"; import { useSelector, useDispatch } from 'react-redux'; import classes from "./Mapping.module.css" -import { api } from "../auth/Api."; +import { api } from "../auth/Api"; import { BusActions } from "../../store/Bus-slice"; +import { RootState } from "../../store/index"; + +declare global { + interface Window { + kakao: any; + } + } const Mapping = () => { const dispatch = useDispatch() - const marker = useSelector(state => state.map.marker) - const position = useSelector(state => state.map.position) - const arsid = useSelector(state => state.bus.currentStation) - const busmode = useSelector(state => state.map.busmode) - const subwaymode = useSelector(state => state.map.subwaymode) + const marker = useSelector((state:RootState) => state.map.marker) + const position = useSelector((state:RootState) => state.map.position) + const arsid = useSelector((state:RootState) => state.bus.currentStation) + const busmode = useSelector((state:RootState) => state.map.busmode) + const subwaymode = useSelector((state:RootState) => state.map.subwaymode) useEffect(() => { const container = document.getElementById("map"); @@ -26,8 +33,8 @@ const Mapping = () => { subwaymapcoordinate(marker, map) }) - const subwaymapcoordinate = (marker, map) => { - const markerPosition = new window.kakao.maps.LatLng(parseFloat(marker.tmY - 0.0000005).toFixed(6), parseFloat(marker.tmX - 0.0000005).toFixed(6)) + const subwaymapcoordinate = (marker:any, map:any) => { + const markerPosition = new window.kakao.maps.LatLng(parseFloat(String(marker.tmY - 0.0000005)).toFixed(6), parseFloat(String(marker.tmX - 0.0000005)).toFixed(6)) const new_marker = new window.kakao.maps.Marker({ position: markerPosition, clickable: true, @@ -35,17 +42,17 @@ const Mapping = () => { new_marker.setMap(map) } - const busmapcoordinate = (marker, map) => { + const busmapcoordinate = (marker:any, map:any) => { - const currentArsid = marker.filter(id => id.arsId === arsid) - marker.forEach(element => { + const currentArsid = marker.filter((id:any) => id.arsId === arsid) + marker.forEach((element:any) => { const imageSrc = './image/busImage.png' // 마커이미지의 주소입니다 const imageSize = new window.kakao.maps.Size(64, 69) const imageOption = { offset: new window.kakao.maps.Point(27, 69) }; let markerImage = new window.kakao.maps.MarkerImage(imageSrc, imageSize, imageOption) - const markerPosition = new window.kakao.maps.LatLng(parseFloat(element.tmY - 0.0000005).toFixed(6), parseFloat(element.tmX - 0.0000005).toFixed(6)) - if (element.arsId !== currentArsid[0]?.arsId) { + const markerPosition = new window.kakao.maps.LatLng(parseFloat(String(element.tmY - 0.0000005)).toFixed(6), parseFloat(String(element.tmX - 0.0000005)).toFixed(6)) + if (element.arsId !== currentArsid[0].arsId) { markerImage = undefined; } const new_marker = new window.kakao.maps.Marker({ @@ -61,7 +68,7 @@ const Mapping = () => { }); } - const submitStationId = async (id) => { + const submitStationId = async (id:string) => { await api.get(`/bus/arsId/${id}`) .then(res => { const { data } = res; diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.js b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx similarity index 95% rename from Backend/Frontend/creative/src/component/menu/MenuBar.js rename to Backend/Frontend/creative/src/component/menu/MenuBar.tsx index 4f26b80..43ef173 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx @@ -1,3 +1,4 @@ +import React from "react" import MenuBusButton from "./MenuBusButton" import MenuSubwayButton from "./MenuSubwayButton" import styled from "styled-components" diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js b/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx similarity index 98% rename from Backend/Frontend/creative/src/component/menu/MenuBusButton.js rename to Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx index bde5a91..6b0272f 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx @@ -1,3 +1,4 @@ +import React from 'react' import styled from 'styled-components' import { useDispatch } from 'react-redux' import { MapActions } from '../../store/Map-slice' diff --git a/Backend/Frontend/creative/src/component/menu/MenuExplan.js b/Backend/Frontend/creative/src/component/menu/MenuExplan.tsx similarity index 97% rename from Backend/Frontend/creative/src/component/menu/MenuExplan.js rename to Backend/Frontend/creative/src/component/menu/MenuExplan.tsx index 49cff91..0ef5f3c 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuExplan.js +++ b/Backend/Frontend/creative/src/component/menu/MenuExplan.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; const StyleMenuExplan = styled.div` diff --git a/Backend/Frontend/creative/src/component/menu/MenuHeader.js b/Backend/Frontend/creative/src/component/menu/MenuHeader.tsx similarity index 92% rename from Backend/Frontend/creative/src/component/menu/MenuHeader.js rename to Backend/Frontend/creative/src/component/menu/MenuHeader.tsx index d73f692..e16fae3 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuHeader.js +++ b/Backend/Frontend/creative/src/component/menu/MenuHeader.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; const StyledHeader = styled.header` diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx similarity index 98% rename from Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js rename to Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx index 1876c75..a8a8e43 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.js +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx @@ -1,9 +1,11 @@ +import React from 'react' import styled from 'styled-components' import { useDispatch } from 'react-redux' import { MapActions } from '../../store/Map-slice' import { Link } from "react-router-dom" import { BusActions } from '../../store/Bus-slice' import { SubwayActions } from '../../store/Subway-slice' + const StyledButton = styled.button` width: 442.5px; height: 537px; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.tsx similarity index 80% rename from Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js rename to Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.tsx index 079da6e..1131961 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorDetail.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; import SubwayElevatorItems from "./SubwayElevatorItem"; @@ -17,11 +18,11 @@ overflow:auto; ` -const SubwayElevatorDetail = ({ info }) => { - +const SubwayElevatorDetail = (props:any) => { + const {info} = props; return ( - {info.map(element => ( + {info.map((element:any) => ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.tsx similarity index 86% rename from Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js rename to Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.tsx index 6b6e430..6b25957 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorItem.tsx @@ -1,13 +1,14 @@ +import React from "react"; import styled from "styled-components"; import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice"; -const SubwayElevatorItems = ({ items }) => { - const { dtlLoc, imgPath } = items +const SubwayElevatorItems = (prop:any) => { + const { dtlLoc, imgPath } = prop.items; const dispatch = useDispatch(); const ClickSubway = () => { - dispatch(SubwayActions.addelevator({ imgPath })) + dispatch(SubwayActions.addTransfer({ imgPath })) } return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.tsx similarity index 77% rename from Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js rename to Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.tsx index d56e57e..82890a1 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayElevator/SubwayElevatorMap.tsx @@ -1,5 +1,5 @@ +import React from "react"; import styled from "styled-components"; -import { useSelector } from "react-redux"; const StyledElevatorMap = styled.div` display:flex; @@ -13,11 +13,10 @@ overflow:auto; width:98%; height:50vw; } - ` const SubwayElevatorMap = () => { - const elevatorDetail = useSelector(state => state.subway.elevatorDetail) + return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.tsx similarity index 86% rename from Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js rename to Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.tsx index 218e33f..adacdfa 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaybath/SubwayBathChairInfo.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; const StyledBathChair = styled.div` @@ -31,7 +32,8 @@ const StyledBathChair = styled.div` } `; -const SubwayBathchairInfo = ({ mvContDtl, direction }) => { +const SubwayBathchairInfo = (props:any) => { + const {mvContDtl,direction} = props; return (

    {direction}

    diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.tsx similarity index 87% rename from Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js rename to Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.tsx index 14bb747..4bb04f0 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaydetail/SubwayDetail.tsx @@ -1,8 +1,13 @@ +import React from "react"; import styled from "styled-components"; +interface subDetail { + idColor:string[]; + line:number; +} -const SubwayDetail = ({ info }) => { - console.log(info) +const SubwayDetail = (props:any) => { + const {info} = props; const idColor = ["#0052A4", "#00A84D", "#EF7C1C", "#00A5DE", "#996CAC", "#CD7C2F", "#747F00", "#E6186C"]; // return ( @@ -12,7 +17,7 @@ const SubwayDetail = ({ info }) => {

    {info.stNm}

    -

    {info.roadNm}

    +

    info-images{info.roadNm}

    교통약자 도우미 전화번호
    {info.wNum}

    지하철역 영문명: {info.eName}

    지하철역 FR_CODE: {info.fCode}

    @@ -21,7 +26,7 @@ const SubwayDetail = ({ info }) => { ) } -const StyledDetail = styled.div` +const StyledDetail = styled.div` display:flex; flex-direction:column; width: 35vw; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.tsx similarity index 94% rename from Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js rename to Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.tsx index a080ee7..3e9e7c0 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayButton.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components" const StyledButton = styled.button` diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx similarity index 88% rename from Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js rename to Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx index 37c1e50..82ddc19 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx @@ -1,9 +1,10 @@ +import React from "react"; import SubwayButton from "./SubwayButton.js"; import SubwayInput from "./SubwayInput.js"; import styled from "styled-components"; import { useDispatch } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice.js"; -import { api } from "../../auth/Api.js"; +import { api } from "../../auth/Api"; import { MapActions } from "../../../store/Map-slice.js"; const StyledForm = styled.form` @@ -20,7 +21,7 @@ const StyledForm = styled.form` const SubwayForm = () => { const dispatch = useDispatch(); - const SubmitSubwayStation = async (value) => { + const SubmitSubwayStation = async (value:any) => { await api.get(`/subway/stNm/${value}`) .then(res => { const { data } = res; @@ -32,7 +33,7 @@ const SubwayForm = () => { } - const SubwayStationData = (event) => { + const SubwayStationData = (event:any) => { event.preventDefault(); const { target: [input] } = event const { value } = input diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.tsx similarity index 94% rename from Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js rename to Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.tsx index 8be64de..8f77731 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayInput.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components" diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx similarity index 79% rename from Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js rename to Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx index 2846256..49206ca 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx @@ -1,5 +1,7 @@ +import React from "react"; import styled from "styled-components"; import SubwayBathchairInfo from "../subwaybath/SubwayBathChairInfo"; + const StyledInfo = styled.div` display:flex; flex-direction:column; @@ -17,11 +19,12 @@ overflow:auto; } ` -const SubwayInfo = ({ info }) => { +const SubwayInfo = (props:any) => { + const {info} = props; return ( - {info.map((element) => ( - element.map(node => ( + {info.map((element:any) => ( + element.map((node:any) => ( { +interface sbitem { + color:any; + idColor:string[]; + lnNm:number; +} + +const SubwayItems = (props:any) => { + const {items} = props; const { stNm, lnNm, stCd } = items const [position, setPosition] = useState(""); - const [color, setColor] = useState(false); + const [color, setColor] = useState(false); const dispatch = useDispatch() - const currentSubway = useSelector(state => state.subway.currentSubway) + const currentSubway = useSelector((state:RootState) => state.subway.currentSubway) const idColor = ["#0052A4", "#00A84D", "#EF7C1C", "#00A5DE", "#996CAC", "#CD7C2F", "#747F00", "#E6186C"]; useEffect(() => { if (currentSubway === stCd) { @@ -50,7 +59,7 @@ const SubwayItems = ({ items }) => { ) } -const StyldeSubwayItems = styled.li` +const StyldeSubwayItems = styled.li` display:flex; justify-content:space-between; width:100%; @@ -92,7 +101,7 @@ a{ font-size: 1.5vw; width: 48px; height: 48px; - background-color:${props => (props.idColor[props.lnNm - 1])}; + background-color:${(props:any) => (props.idColor[props.lnNm - 1])}; border-radius:200px; } diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx similarity index 74% rename from Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js rename to Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx index 98b35a6..b6d2feb 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx @@ -1,9 +1,9 @@ +import React from "react"; import styled from "styled-components"; import SubwayItems from "./SubwayItems.js"; import SubwayNumber from "../subwaynumber/SubwayNumber.js"; import { useSelector } from "react-redux"; - - +import { RootState } from "../../../store/index"; const StyledList = styled.ul` display:flex; @@ -27,12 +27,12 @@ a{ ` const SubwayList = () => { - const subwayCheck = useSelector(state => state.subway.subwayCheck) - const subway = useSelector(state => state.subway.subway) + const subwayCheck = useSelector((state:RootState) => state.subway.subwayCheck) + const subway = useSelector((state:RootState) => state.subway.subway) return ( {subwayCheck && } - {subwayCheck && subway.map(elemnet => + {subwayCheck && subway.map((elemnet:any) => { - const si = useSelector(state => state.subway.subwayInfo) + const si:any = useSelector((state:RootState) => state.subway.subwayInfo) return (
  • 편의시설 위치
  • diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.tsx similarity index 89% rename from Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js rename to Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.tsx index f6190d4..32efc45 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaynumber/SubwayNumber.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; const StyledSubwayNumber = styled.header` @@ -21,7 +22,7 @@ p{ } ` -const SubwayNumber = (props) => { +const SubwayNumber = (props:any) => { return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.tsx similarity index 91% rename from Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js rename to Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.tsx index 8784a5a..3dc79dc 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaypanel/SubwayPanel.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styled from "styled-components"; const StyledSubwayPanel = styled.div` @@ -25,7 +26,7 @@ color: #FFFFFF; } ` -const SubwayPanel = (props) => { +const SubwayPanel = (props:any) => { return ( diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx similarity index 82% rename from Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js rename to Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx index da3ac8c..28925cf 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwaytransferInfo.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx @@ -1,8 +1,10 @@ +import React from "react"; import styled from "styled-components"; import { useSelector } from "react-redux"; import { useEffect } from "react"; import { api } from "../../auth/Api"; import { useState } from "react"; +import {AppDispatch} from "../../../store/index" const StyledTransferInfo = styled.div` display:flex; @@ -41,9 +43,9 @@ overflow:auto; const SubwayTransferInfo = () => { - const { prev, next } = useSelector(state => state.subway.transferDetail) - const si = useSelector(state => state.subway.subwayInfo) - const [path, setPath] = useState() + const { prev, next } = useSelector((state:AppDispatch) => state.subway.transferDetail) + const si = useSelector((state:AppDispatch) => state.subway.subwayInfo) + const [path, setPath] = useState<[]|null>(null) useEffect(() => { const getTransfer = async () => { await api.get(`subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) @@ -57,7 +59,7 @@ const SubwayTransferInfo = () => { return (
    {[`${prev.lnCd}호선 ${prev.stNm}방면 ->`,
    , `${next.lnCd}호선 ${next.stNm}방면`]}
    - {path?.map(element => ( + {path.map((element:any) => (

    {element.mvContDtl}

    ))}
    diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx similarity index 86% rename from Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js rename to Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx index 10ce933..d8e533d 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx @@ -1,7 +1,9 @@ +import React from "react"; import styled from "styled-components"; import { useDispatch, useSelector } from "react-redux"; import { SubwayActions } from "../../../store/Subway-slice"; import { api } from "../../auth/Api"; +import {AppDispatch} from "../../../store/index" const StyldeSubwayItems = styled.li` display:flex; @@ -34,10 +36,10 @@ font-family: 'Pretendard-Regular'; } ` -const SubwayTransferItems = ({ items }) => { - const { prev, next } = items +const SubwayTransferItems = (props:any) => { + const { prev, next } = props.items - const si = useSelector(state => state.subway.subwayInfo) + const si = useSelector((state:AppDispatch) => state.subway.subwayInfo) const dispatch = useDispatch(); const ClickSubway = () => { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx similarity index 68% rename from Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js rename to Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx index 65cf83a..480ba9a 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.js +++ b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx @@ -1,7 +1,8 @@ +import React from "react"; import styled from "styled-components"; import SubwayTransferItems from "./SubwayTransferItem"; import { useSelector } from "react-redux"; - +import {AppDispatch} from "../../../store/index" const StyledTransferDetail = styled.div` display:flex; @@ -42,23 +43,22 @@ margin-right: 20px; ` -const SubwayTransferDetail = ({ info }) => { - const [prev, next] = info; - const transCheck = useSelector(state => state.subway.transferDetail.transferImage) - const transRoad = useSelector(state => state.subway.transferDetail.transRoad) - const transset = useSelector(state => state.subway.transprevnext) +const SubwayTransferDetail = (props:any) => { + const [prev, next] = props.info; + const transCheck = useSelector((state:AppDispatch) => state.subway.transferDetail.transferImage) + const transRoad = useSelector((state:AppDispatch) => state.subway.transferDetail.transRoad) + const transset = useSelector((state:AppDispatch) => state.subway.transprevnext) return ( - {!transCheck && prev?.sourceStation.map(prev => ( - - next?.transferStation.map(next => ( + {!transCheck && prev.sourceStation.map((prev:any)=> ( + next.transferStation.map((next:any) => ( )) ))} {transCheck &&
    {[`${transset.prev.lnCd}호선 ${transset.prev.stNm}방면 ->`,
    , `${transset.next.lnCd}호선 ${transset.next.stNm}방면`]}
    } - {transCheck && transRoad.map(element => ( + {transCheck && transRoad.map((element:any) => (

    {element.mvContDtl}

    ))} diff --git a/Backend/Frontend/creative/src/contents/geolocationOptions.js b/Backend/Frontend/creative/src/contents/geolocationOptions.tsx similarity index 100% rename from Backend/Frontend/creative/src/contents/geolocationOptions.js rename to Backend/Frontend/creative/src/contents/geolocationOptions.tsx diff --git a/Backend/Frontend/creative/src/global.d.ts b/Backend/Frontend/creative/src/global.d.ts new file mode 100644 index 0000000..4923a13 --- /dev/null +++ b/Backend/Frontend/creative/src/global.d.ts @@ -0,0 +1,4 @@ +declare module "*.css" { + const content: { [className: string]: string }; + export = content; +} \ No newline at end of file diff --git a/Backend/Frontend/creative/src/hook/usePosition.js b/Backend/Frontend/creative/src/hook/usePosition.tsx similarity index 74% rename from Backend/Frontend/creative/src/hook/usePosition.js rename to Backend/Frontend/creative/src/hook/usePosition.tsx index 1cc0690..cf87629 100644 --- a/Backend/Frontend/creative/src/hook/usePosition.js +++ b/Backend/Frontend/creative/src/hook/usePosition.tsx @@ -3,17 +3,17 @@ import { useEffect, useState } from "react" const usePosition = (options = {}) => { - const [position, setPosition] = useState(); - const [error, setError] = useState(); + const [position, setPosition] = useState(null); + const [error, setError] = useState(null); - const positionSuccess = (position) => { + const positionSuccess = (position:any) => { const { latitude, longitude } = position.coords const tmX = longitude; const tmY = latitude; setPosition({ tmX, tmY }) } - const positionError = (errorMsg) => { + const positionError = (errorMsg:any) => { setError(errorMsg) } diff --git a/Backend/Frontend/creative/src/index.js b/Backend/Frontend/creative/src/index.tsx similarity index 60% rename from Backend/Frontend/creative/src/index.js rename to Backend/Frontend/creative/src/index.tsx index ad5c4c7..3a23ad8 100644 --- a/Backend/Frontend/creative/src/index.js +++ b/Backend/Frontend/creative/src/index.tsx @@ -1,10 +1,10 @@ +import React from 'react'; import { createRoot } from 'react-dom/client'; -import App from './App.js'; +import App from './App.tsx'; import { Provider } from 'react-redux'; import store from './store/index'; -import reportWebVitals from './reportWebVitals'; -const container = document.getElementById('root'); +const container: HTMLElement | null = document.getElementById('root')!; const root = createRoot(container); root.render( @@ -12,5 +12,3 @@ root.render( ); - -reportWebVitals(); diff --git a/Backend/Frontend/creative/src/page/BusPage.js b/Backend/Frontend/creative/src/page/BusPage.tsx similarity index 83% rename from Backend/Frontend/creative/src/page/BusPage.js rename to Backend/Frontend/creative/src/page/BusPage.tsx index 10859cb..0915413 100644 --- a/Backend/Frontend/creative/src/page/BusPage.js +++ b/Backend/Frontend/creative/src/page/BusPage.tsx @@ -1,9 +1,10 @@ -import Mapping from "../component/map/Mapping.js" -import BusForm from "../component/bus-component/busform/BusForm.js" -import BusList from "../component/bus-component/buslist/BusList.js" +import React from "react"; +import Mapping from "../component/map/Mapping.tsx" +import BusForm from "../component/bus-component/busform/BusForm.tsx" +import BusList from "../component/bus-component/buslist/BusList.tsx" import classes from "./BusPage.module.css" -import Header from "../component/header/Header.js" -import BusPanel from "../component/bus-component/buspanel/BusPanel.js" +import Header from "../component/header/Header.tsx" +import BusPanel from "../component/bus-component/buspanel/BusPanel.tsx" const BusPage = () => { return ( diff --git a/Backend/Frontend/creative/src/page/MainPage.js b/Backend/Frontend/creative/src/page/MainPage.tsx similarity index 67% rename from Backend/Frontend/creative/src/page/MainPage.js rename to Backend/Frontend/creative/src/page/MainPage.tsx index f844341..1a76b2c 100644 --- a/Backend/Frontend/creative/src/page/MainPage.js +++ b/Backend/Frontend/creative/src/page/MainPage.tsx @@ -1,6 +1,8 @@ -import MenuBar from "../component/menu/MenuBar.js"; +import React from "react"; +import MenuBar from "../component/menu/MenuBar.tsx"; import classes from "./MainPage.module.css" -import Header from "../component/header/Header.js"; +import Header from "../component/header/Header.tsx"; + const Mainpage = () => { return (
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx similarity index 86% rename from Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js rename to Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx index ff33428..dfb6166 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx @@ -1,13 +1,14 @@ +import React from "react"; import classes from "./SubwayBathchair.module.css" -import Header from "../../component/header/Header.js" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import Header from "../../component/header/Header.tsx" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" import { useParams } from "react-router-dom" -import { api } from "../../component/auth/Api.js" +import { api } from "../../component/auth/Api.ts" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" -import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.js" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" +import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.tsx" const SubwayBathchair = () => { @@ -44,7 +45,7 @@ const SubwayBathchair = () => {
    - + subwayImage
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx similarity index 81% rename from Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js rename to Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx index 7893c24..5eaf487 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx @@ -1,14 +1,14 @@ -import Mapping from "../../component/map/Mapping.js" +import React,{ useEffect, useState } from "react" +import Mapping from "../../component/map/Mapping.tsx" import classes from "./SubwayDetailPage.module.css" -import Header from "../../component/header/Header.js" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" -import SubwayDetail from "../../component/subway-component/subwaydetail/SubwayDetail.js" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" +import Header from "../../component/header/Header.tsx" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" +import SubwayDetail from "../../component/subway-component/subwaydetail/SubwayDetail.tsx" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" import { useDispatch } from "react-redux" -import { SubwayActions } from "../../store/Subway-slice.js" -import { api } from "../../component/auth/Api.js" +import { SubwayActions } from "../../store/Subway-slice.tsx" +import { api } from "../../component/auth/Api.tsx" import { useParams } from "react-router-dom" -import { useEffect, useState } from "react" const SubwayDetailPage = () => { const params = useParams() diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx similarity index 79% rename from Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js rename to Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx index 5642129..dae5f79 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx @@ -1,9 +1,10 @@ +import React from "react"; import classes from "./SubwayElevator.module.css" -import Header from "../../component/header/Header.js" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import Header from "../../component/header/Header.tsx" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" import { useParams } from "react-router-dom" -import { api } from "../../component/auth/Api.js" +import { api } from "../../component/auth/Api.tsx" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" @@ -11,7 +12,7 @@ import { SubwayActions } from "../../store/Subway-slice" const SubwayElevator = () => { const params = useParams(); const dispatch = useDispatch(); - const [ElePos, setElePos] = useState([]); + const [ElePos, setElePos] = useState<[]>([]); useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; @@ -32,7 +33,7 @@ const SubwayElevator = () => {
    } /> - + elevator
    ) diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.tsx similarity index 80% rename from Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js rename to Backend/Frontend/creative/src/page/subwaypage/SubwayPage.tsx index e73db5d..1b0567f 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayPage.tsx @@ -1,9 +1,10 @@ -import Mapping from "../../component/map/Mapping.js" -import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.js" -import SubwayList from "../../component/subway-component/subwaylist/SubwayList.js" +import React from "react"; +import Mapping from "../../component/map/Mapping.tsx" +import SubwayForm from "../../component/subway-component/subwayform/SubwayForm.tsx" +import SubwayList from "../../component/subway-component/subwaylist/SubwayList.tsx" import classes from "./SubwayPage.module.css" -import Header from "../../component/header/Header.js" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" +import Header from "../../component/header/Header.tsx" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" const SubwayPage = () => { return ( diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx similarity index 80% rename from Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js rename to Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx index 6d95f6f..ad48a57 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.js +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx @@ -1,21 +1,22 @@ +import React from "react"; import classes from "./SubwayTransfer.module.css" -import Header from "../../component/header/Header.js" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.js" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.js" -import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail.js" +import Header from "../../component/header/Header.tsx" +import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" +import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" +import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx" import { useParams } from "react-router-dom" -import { api } from "../../component/auth/Api.js" +import { api } from "../../component/auth/Api.ts" import { useEffect, useState } from "react" import { useSelector, useDispatch } from "react-redux" import { SubwayActions } from "../../store/Subway-slice" - +import {AppDispatch} from "../../store/index.ts"; const SubwayTransfer = () => { const params = useParams(); const dispatch = useDispatch(); const [trans, setTrans] = useState([]); - const transcheck = useSelector(state => state.subway.transferDetail.transCheck) - const tranferImage = useSelector(state => state.subway.transferDetail.transferImage) + const transcheck = useSelector((state:AppDispatch) => state.subway.transferDetail.transCheck) + const tranferImage = useSelector((state:AppDispatch) => state.subway.transferDetail.transferImage) useEffect(() => { const stCd = params.stCd; diff --git a/Backend/Frontend/creative/src/reportWebVitals.js b/Backend/Frontend/creative/src/reportWebVitals.ts similarity index 69% rename from Backend/Frontend/creative/src/reportWebVitals.js rename to Backend/Frontend/creative/src/reportWebVitals.ts index 5253d3a..ff34492 100644 --- a/Backend/Frontend/creative/src/reportWebVitals.js +++ b/Backend/Frontend/creative/src/reportWebVitals.ts @@ -1,6 +1,6 @@ -const reportWebVitals = onPerfEntry => { +const reportWebVitals = (onPerfEntry:any) => { if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { getCLS(onPerfEntry); getFID(onPerfEntry); getFCP(onPerfEntry); diff --git a/Backend/Frontend/creative/src/store/Bus-slice.tsx b/Backend/Frontend/creative/src/store/Bus-slice.ts similarity index 100% rename from Backend/Frontend/creative/src/store/Bus-slice.tsx rename to Backend/Frontend/creative/src/store/Bus-slice.ts diff --git a/Backend/Frontend/creative/src/store/Map-slice.tsx b/Backend/Frontend/creative/src/store/Map-slice.ts similarity index 100% rename from Backend/Frontend/creative/src/store/Map-slice.tsx rename to Backend/Frontend/creative/src/store/Map-slice.ts diff --git a/Backend/Frontend/creative/src/store/Subway-slice.tsx b/Backend/Frontend/creative/src/store/Subway-slice.ts similarity index 100% rename from Backend/Frontend/creative/src/store/Subway-slice.tsx rename to Backend/Frontend/creative/src/store/Subway-slice.ts diff --git a/Backend/Frontend/creative/src/store/index.js b/Backend/Frontend/creative/src/store/index.ts similarity index 79% rename from Backend/Frontend/creative/src/store/index.js rename to Backend/Frontend/creative/src/store/index.ts index 63ff32d..f741da1 100644 --- a/Backend/Frontend/creative/src/store/index.js +++ b/Backend/Frontend/creative/src/store/index.ts @@ -16,3 +16,5 @@ const store = configureStore({ export default store +export type RootState = ReturnType +export type AppDispatch = typeof store.dispatch \ No newline at end of file diff --git a/Backend/Frontend/creative/tsconfig.json b/Backend/Frontend/creative/src/tsconfig.json similarity index 77% rename from Backend/Frontend/creative/tsconfig.json rename to Backend/Frontend/creative/src/tsconfig.json index 2cc24fb..f57628e 100644 --- a/Backend/Frontend/creative/tsconfig.json +++ b/Backend/Frontend/creative/src/tsconfig.json @@ -5,8 +5,10 @@ "strict": true, "esModuleInterop": true, "skipLibCheck": true, + "moduleResolution": "node", "forceConsistentCasingInFileNames": true, "jsx": "react", + "allowImportingTsExtensions": true, "paths":["**/*"], } } diff --git a/Backend/Frontend/creative/src/types/types.tsx b/Backend/Frontend/creative/src/types/types.tsx new file mode 100644 index 0000000..df0d912 --- /dev/null +++ b/Backend/Frontend/creative/src/types/types.tsx @@ -0,0 +1,10 @@ +import React from "react"; + +export interface busStateType{ + buslist: [], + station: [], + busId: string, + stationCheck: boolean, + busCheck: boolean, + currentStation: string, +} \ No newline at end of file From 5965578b6b96c77951a0a184571fce0ad70d2823 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Wed, 11 Oct 2023 23:14:23 +0900 Subject: [PATCH 28/32] =?UTF-8?q?feat(front):=20gps=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EC=A7=80=EB=8F=84=20=EC=A4=91=EC=8B=AC=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/src/App.tsx | 2 - .../bus-component/busform/BusForm.tsx | 37 ++++++++-- .../bus-component/buslist/BusList.tsx | 10 +-- .../bus-component/buslist/RefreshButton.tsx | 6 +- .../bus-component/buslist/StationItem.tsx | 8 +-- .../bus-component/busnumber/BusNumber.tsx | 2 +- .../creative/src/component/header/Header.tsx | 6 +- .../creative/src/component/map/Mapping.tsx | 17 +++-- .../creative/src/component/menu/MenuBar.tsx | 6 +- .../src/component/menu/MenuBusButton.tsx | 6 +- .../src/component/menu/MenuSubwayButton.tsx | 6 +- .../subwayform/SubwayForm.tsx | 10 +-- .../subwayinfo/SubwayInfo.tsx | 2 +- .../subwaylist/SubwayItems.tsx | 8 +-- .../subwaylist/SubwayList.tsx | 4 +- .../subwaytransfer/SubwayTransferInfo.tsx | 69 ------------------- .../subwaytransfer/SubwayTransferItem.tsx | 67 ------------------ .../subwaytransfer/SubwayTrasferDetail.tsx | 69 ------------------- .../creative/src/hook/usePosition.tsx | 11 +-- Backend/Frontend/creative/src/index.tsx | 2 +- .../src/page/subwaypage/SubwayBathchair.tsx | 4 +- .../src/page/subwaypage/SubwayDetailPage.tsx | 8 +-- .../src/page/subwaypage/SubwayElevator.tsx | 14 ++-- .../src/page/subwaypage/SubwayTransfer.tsx | 58 ---------------- Backend/Frontend/creative/src/store/index.ts | 6 +- 25 files changed, 104 insertions(+), 334 deletions(-) delete mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx delete mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx delete mode 100644 Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx delete mode 100644 Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx diff --git a/Backend/Frontend/creative/src/App.tsx b/Backend/Frontend/creative/src/App.tsx index 4c71d15..2edf9e1 100644 --- a/Backend/Frontend/creative/src/App.tsx +++ b/Backend/Frontend/creative/src/App.tsx @@ -3,7 +3,6 @@ import { HashRouter, Routes, Route } from "react-router-dom"; import MainPage from "./page/MainPage.tsx" import BusPage from "./page/BusPage.tsx" import SubwayPage from "./page/subwaypage/SubwayPage.tsx" -import SubwayTransferPage from "./page/subwaypage/SubwayTransfer.tsx"; import SubwayDetailPage from "./page/subwaypage/SubwayDetailPage.tsx" import SubwayElevatorPage from "./page/subwaypage/SubwayElevator.tsx"; import SubwayBathChairPage from "./page/subwaypage/SubwayBathchair.tsx"; @@ -18,7 +17,6 @@ function App() { } /> } /> } /> - } /> } /> diff --git a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx index 1ec0b60..52f98e9 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/busform/BusForm.tsx @@ -1,18 +1,41 @@ import React, {useRef} from "react"; import { useDispatch } from "react-redux"; import styled from "styled-components"; -import { api } from "../../auth/Api"; -import { MapActions } from "../../../store/Map-slice"; -import { BusActions } from "../../../store/Bus-slice"; +import { api } from "../../auth/Api.ts"; +import { MapActions } from "../../../store/Map-slice.ts"; +import { BusActions } from "../../../store/Bus-slice.ts"; const StyledForm = styled.form` display:flex; - width: 34.6vw; - height: 11vh; + width: 100%; + height: 140px; border: 4px solid #CDD029; + .busFormInput{ + width: 80%; + height: 80%; + padding: 15px; + font-size: 2.5vw; + border:0; + font-family: 'Pretendard-Regular'; + font-weight: 700; + } + .busFormBtn{ + width: 20%; + height: 100%; + background: #CDD029; + border: 1px solid #CDD029; + padding:0; + } @media (max-width:500px){ width: 98vw; height: 15vw; + .busFormInput{ + font-family: 'Pretendard-Regular'; + width: 80%; + height: 15vw; + font-size: 6vw; + padding: 1%; + } } ` @@ -42,8 +65,8 @@ const BusForm:React.FC = () => { }; return ( - - + + ); }; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx index e1e2573..04914c4 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/BusList.tsx @@ -1,9 +1,9 @@ import React from "react"; import { useSelector } from "react-redux"; import styled from "styled-components"; -import BusItem from "./BusItem"; -import StationItem from "./StationItem" -import BusNumber from "../busnumber/BusNumber"; +import BusItem from "./BusItem.tsx"; +import StationItem from "./StationItem.tsx" +import BusNumber from "../busnumber/BusNumber.tsx"; import { RootState } from "../../../store/index"; const StyledList = styled.ul` @@ -11,8 +11,8 @@ display:flex; flex-direction:column; align-items: center; box-sizing: border-box; -width: 35vw; -height: 68vh; +width: 100%; +height: 640px; background: #FFFFFF; border: 4px solid #CDD029 ; padding:0; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx index 7e22155..e38e95c 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/RefreshButton.tsx @@ -1,9 +1,9 @@ import React from "react"; import styled from "styled-components"; -import { api } from "../../auth/Api.js"; +import { api } from "../../auth/Api.ts"; import { useSelector, useDispatch } from "react-redux"; -import { BusActions } from "../../../store/Bus-slice.js"; -import { RootState } from "../../../store/index"; +import { BusActions } from "../../../store/Bus-slice.ts"; +import { RootState } from "../../../store/index.ts"; const StyledRefreshButton = styled.button` width: 3vw; diff --git a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx index 51c3ec6..ed23bd4 100644 --- a/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/buslist/StationItem.tsx @@ -1,11 +1,11 @@ import React from "react"; import styled from "styled-components"; -import { api } from "../../auth/Api"; +import { api } from "../../auth/Api.ts"; import { useDispatch, useSelector } from "react-redux"; -import { BusActions } from "../../../store/Bus-slice"; -import { MapActions } from "../../../store/Map-slice"; +import { BusActions } from "../../../store/Bus-slice.ts"; +import { MapActions } from "../../../store/Map-slice.ts"; import { useEffect, useState } from "react"; -import { RootState } from "../../../store/index"; +import { RootState } from "../../../store/index.ts"; interface stItem { color:any; diff --git a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx index 6a7cfdf..00f4c88 100644 --- a/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx +++ b/Backend/Frontend/creative/src/component/bus-component/busnumber/BusNumber.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import RefreshButton from "../buslist/RefreshButton"; +import RefreshButton from "../buslist/RefreshButton.tsx"; import { useSelector } from "react-redux"; import { RootState } from "../../../store/index"; diff --git a/Backend/Frontend/creative/src/component/header/Header.tsx b/Backend/Frontend/creative/src/component/header/Header.tsx index 5ff33de..d27934d 100644 --- a/Backend/Frontend/creative/src/component/header/Header.tsx +++ b/Backend/Frontend/creative/src/component/header/Header.tsx @@ -2,9 +2,9 @@ import React from "react" import styled from "styled-components"; import { Link } from "react-router-dom"; import { useDispatch } from "react-redux"; -import { BusActions } from "../../store/Bus-slice"; -import { SubwayActions } from "../../store/Subway-slice"; -import { MapActions } from "../../store/Map-slice"; +import { BusActions } from "../../store/Bus-slice.ts"; +import { SubwayActions } from "../../store/Subway-slice.ts"; +import { MapActions } from "../../store/Map-slice.ts"; const StyledHeader = styled.header` display:flex; diff --git a/Backend/Frontend/creative/src/component/map/Mapping.tsx b/Backend/Frontend/creative/src/component/map/Mapping.tsx index a27e876..fbe4011 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.tsx +++ b/Backend/Frontend/creative/src/component/map/Mapping.tsx @@ -1,9 +1,11 @@ -import React from "react"; -import { useEffect } from "react"; +import React,{ useEffect } from "react"; import { useSelector, useDispatch } from 'react-redux'; + +import usePosition from "../../hook/usePosition.tsx"; + import classes from "./Mapping.module.css" -import { api } from "../auth/Api"; -import { BusActions } from "../../store/Bus-slice"; +import { api } from "../auth/Api.ts"; +import { BusActions } from "../../store/Bus-slice.ts"; import { RootState } from "../../store/index"; declare global { @@ -19,11 +21,14 @@ const Mapping = () => { const arsid = useSelector((state:RootState) => state.bus.currentStation) const busmode = useSelector((state:RootState) => state.map.busmode) const subwaymode = useSelector((state:RootState) => state.map.subwaymode) + const {curPosition} = usePosition(); useEffect(() => { + const tmY = curPosition ? curPosition.tmY: position.tmY; + const tmX = curPosition ? curPosition.tmX: position.tmX; const container = document.getElementById("map"); const options = { - center: new window.kakao.maps.LatLng(position.tmY, position.tmX), + center: new window.kakao.maps.LatLng(tmY, tmX), level: 3, }; const map = new window.kakao.maps.Map(container, options); @@ -31,7 +36,7 @@ const Mapping = () => { busmapcoordinate(marker, map) else if (subwaymode) subwaymapcoordinate(marker, map) - }) + },[]) const subwaymapcoordinate = (marker:any, map:any) => { const markerPosition = new window.kakao.maps.LatLng(parseFloat(String(marker.tmY - 0.0000005)).toFixed(6), parseFloat(String(marker.tmX - 0.0000005)).toFixed(6)) diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.tsx b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx index 43ef173..8e9efff 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.tsx +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx @@ -1,8 +1,8 @@ import React from "react" -import MenuBusButton from "./MenuBusButton" -import MenuSubwayButton from "./MenuSubwayButton" +import MenuBusButton from "./MenuBusButton.tsx" +import MenuSubwayButton from "./MenuSubwayButton.tsx" import styled from "styled-components" -import MenuExplan from "./MenuExplan" +import MenuExplan from "./MenuExplan.tsx" const StyleMenuBar = styled.div` display:flex; diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx b/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx index 6b0272f..5797857 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx @@ -1,9 +1,9 @@ import React from 'react' import styled from 'styled-components' import { useDispatch } from 'react-redux' -import { MapActions } from '../../store/Map-slice' -import { BusActions } from '../../store/Bus-slice' -import { SubwayActions } from '../../store/Subway-slice' +import { MapActions } from '../../store/Map-slice.ts' +import { BusActions } from '../../store/Bus-slice.ts' +import { SubwayActions } from '../../store/Subway-slice.ts' import { Link } from "react-router-dom" const StyledButton = styled.button` diff --git a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx index a8a8e43..312fd63 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx +++ b/Backend/Frontend/creative/src/component/menu/MenuSubwayButton.tsx @@ -1,10 +1,10 @@ import React from 'react' import styled from 'styled-components' import { useDispatch } from 'react-redux' -import { MapActions } from '../../store/Map-slice' +import { MapActions } from '../../store/Map-slice.ts' import { Link } from "react-router-dom" -import { BusActions } from '../../store/Bus-slice' -import { SubwayActions } from '../../store/Subway-slice' +import { BusActions } from '../../store/Bus-slice.ts' +import { SubwayActions } from '../../store/Subway-slice.ts' const StyledButton = styled.button` width: 442.5px; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx index 82ddc19..385431f 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx +++ b/Backend/Frontend/creative/src/component/subway-component/subwayform/SubwayForm.tsx @@ -1,11 +1,11 @@ import React from "react"; -import SubwayButton from "./SubwayButton.js"; -import SubwayInput from "./SubwayInput.js"; +import SubwayButton from "./SubwayButton.tsx"; +import SubwayInput from "./SubwayInput.tsx"; import styled from "styled-components"; import { useDispatch } from "react-redux"; -import { SubwayActions } from "../../../store/Subway-slice.js"; -import { api } from "../../auth/Api"; -import { MapActions } from "../../../store/Map-slice.js"; +import { SubwayActions } from "../../../store/Subway-slice.ts"; +import { api } from "../../auth/Api.ts"; +import { MapActions } from "../../../store/Map-slice.ts"; const StyledForm = styled.form` display:flex; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx index 49206ca..03a3ed0 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx +++ b/Backend/Frontend/creative/src/component/subway-component/subwayinfo/SubwayInfo.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import SubwayBathchairInfo from "../subwaybath/SubwayBathChairInfo"; +import SubwayBathchairInfo from "../subwaybath/SubwayBathChairInfo.tsx"; const StyledInfo = styled.div` display:flex; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.tsx b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.tsx index 0e93d32..88a4157 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.tsx +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayItems.tsx @@ -3,9 +3,9 @@ import styled from "styled-components"; import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useEffect } from "react"; -import { SubwayActions } from "../../../store/Subway-slice"; -import { MapActions } from "../../../store/Map-slice"; -import { api } from "../../auth/Api"; +import { SubwayActions } from "../../../store/Subway-slice.ts"; +import { MapActions } from "../../../store/Map-slice.ts"; +import { api } from "../../auth/Api.ts"; import { RootState } from "../../../store/index"; interface sbitem { @@ -37,7 +37,7 @@ const SubwayItems = (props:any) => { }) } locationRecive() - }, [currentSubway]) + }, [currentSubway,stCd,stNm]) const ClickSubway = () => { if (currentSubway === stCd) { diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx index b6d2feb..a537014 100644 --- a/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx +++ b/Backend/Frontend/creative/src/component/subway-component/subwaylist/SubwayList.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled from "styled-components"; -import SubwayItems from "./SubwayItems.js"; -import SubwayNumber from "../subwaynumber/SubwayNumber.js"; +import SubwayItems from "./SubwayItems.tsx"; +import SubwayNumber from "../subwaynumber/SubwayNumber.tsx"; import { useSelector } from "react-redux"; import { RootState } from "../../../store/index"; diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx deleted file mode 100644 index 28925cf..0000000 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferInfo.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import { useSelector } from "react-redux"; -import { useEffect } from "react"; -import { api } from "../../auth/Api"; -import { useState } from "react"; -import {AppDispatch} from "../../../store/index" - -const StyledTransferInfo = styled.div` -display:flex; -flex-direction:column; -width: 680px; -height: 747px; -background-color:white; -border: 4px solid #9255F5; -overflow:auto; -.title{ - margin:30px; - font-size: 40px; - font-weight: 600; - font-family: 'Pretendard-Regular'; - text-align:center; -} -.path{ - margin:30px; - font-size: 30px; - font-weight: 600; - font-family: 'Pretendard-Regular'; -} -@media (max-width:500px) { - width:98%; - height:80vw; - .title{ - margin:4vw; - font-size: 6vw; - } - .path{ - margin:4vw; - font-size: 4.5vw; - } -} -` - - -const SubwayTransferInfo = () => { - const { prev, next } = useSelector((state:AppDispatch) => state.subway.transferDetail) - const si = useSelector((state:AppDispatch) => state.subway.subwayInfo) - const [path, setPath] = useState<[]|null>(null) - useEffect(() => { - const getTransfer = async () => { - await api.get(`subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) - .then(res => { - const { data } = res; - setPath(data) - }) - } - getTransfer() - }, [prev, next]) - return ( - -
    {[`${prev.lnCd}호선 ${prev.stNm}방면 ->`,
    , `${next.lnCd}호선 ${next.stNm}방면`]}
    - {path.map((element:any) => ( -

    {element.mvContDtl}

    - ))} -
    - ) -} - -export default SubwayTransferInfo; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx deleted file mode 100644 index d8e533d..0000000 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTransferItem.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import { useDispatch, useSelector } from "react-redux"; -import { SubwayActions } from "../../../store/Subway-slice"; -import { api } from "../../auth/Api"; -import {AppDispatch} from "../../../store/index" - -const StyldeSubwayItems = styled.li` -display:flex; -justify-content:space-between; -width:100%; -align-items:center; -list-style:none; -border-bottom: 1px solid #D2D2D2; -background-color: #FFFFFF; -color:black; -font-family: 'Pretendard-Regular'; -:hover{ - cursor: pointer; -} -.name{ - padding-left:20px; - font-family: 'Pretendard-Regular'; - font-style: normal; - font-weight: 600; - font-size: 35px; - line-height: 60px; - color:#000000; -} -@media (max-width:500px){ - height:40%; - - .name{ - font-size: 4.5vw; - } -} -` - -const SubwayTransferItems = (props:any) => { - const { prev, next } = props.items - - const si = useSelector((state:AppDispatch) => state.subway.subwayInfo) - const dispatch = useDispatch(); - - const ClickSubway = () => { - const getTransfer = async () => { - await api.get(`/subway/transferMove/transferInfo/${si.stCd}/${si.stNm}/${si.railCd}/${si.lnCd}/${prev.stCd}/${next.lnCd}/${next.stCd}`) - .then(res => { - const { data } = res; - dispatch(SubwayActions.addTransfer(data)) - dispatch(SubwayActions.addprenex({ prev, next })) - }) - } - getTransfer() - - } - - return ( - -

    {[`${prev.lnCd}호선 ${prev.stNm}방면 ->`,
    , `${next.lnCd}호선 ${next.stNm}방면`]}

    -
    - ) -} - - - -export default SubwayTransferItems \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx b/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx deleted file mode 100644 index 480ba9a..0000000 --- a/Backend/Frontend/creative/src/component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import SubwayTransferItems from "./SubwayTransferItem"; -import { useSelector } from "react-redux"; -import {AppDispatch} from "../../../store/index" - -const StyledTransferDetail = styled.div` -display:flex; -flex-direction:column; -width: 720px; -height: 720px; -background-color:white; -border: 4px solid #9255F5; -overflow:auto; -margin-right: 20px; -.title{ - margin:30px; - font-size: 40px; - font-weight: 600; - font-family: 'Pretendard-Regular'; - text-align:center; -} -.path{ - margin:30px; - font-size: 30px; - font-weight: 600; - font-family: 'Pretendard-Regular'; -} - -@media (max-width:500px) { - width:98%; - height:80vw; - margin-right:0; - .title{ - margin:4vw; - font-size: 6vw; - } - .path{ - margin:4vw; - font-size: 4.5vw; - } -} -` - - -const SubwayTransferDetail = (props:any) => { - const [prev, next] = props.info; - const transCheck = useSelector((state:AppDispatch) => state.subway.transferDetail.transferImage) - const transRoad = useSelector((state:AppDispatch) => state.subway.transferDetail.transRoad) - const transset = useSelector((state:AppDispatch) => state.subway.transprevnext) - return ( - - {!transCheck && prev.sourceStation.map((prev:any)=> ( - next.transferStation.map((next:any) => ( - - )) - ))} - {transCheck &&
    {[`${transset.prev.lnCd}호선 ${transset.prev.stNm}방면 ->`,
    , `${transset.next.lnCd}호선 ${transset.next.stNm}방면`]}
    } - {transCheck && transRoad.map((element:any) => ( -

    {element.mvContDtl}

    - ))} - -
    - ) -} - -export default SubwayTransferDetail; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/hook/usePosition.tsx b/Backend/Frontend/creative/src/hook/usePosition.tsx index cf87629..744c680 100644 --- a/Backend/Frontend/creative/src/hook/usePosition.tsx +++ b/Backend/Frontend/creative/src/hook/usePosition.tsx @@ -1,16 +1,19 @@ import { useEffect, useState } from "react" - +interface position { + tmX:number; + tmY:number; +} const usePosition = (options = {}) => { - const [position, setPosition] = useState(null); + const [curPosition, setCurPosition] = useState(null); const [error, setError] = useState(null); const positionSuccess = (position:any) => { const { latitude, longitude } = position.coords const tmX = longitude; const tmY = latitude; - setPosition({ tmX, tmY }) + setCurPosition({ tmX, tmY }) } const positionError = (errorMsg:any) => { @@ -26,7 +29,7 @@ const usePosition = (options = {}) => { geolocation.getCurrentPosition(positionSuccess, positionError, options); }, [options]) - return { position, error } + return { curPosition, error } } export default usePosition \ No newline at end of file diff --git a/Backend/Frontend/creative/src/index.tsx b/Backend/Frontend/creative/src/index.tsx index 3a23ad8..4461311 100644 --- a/Backend/Frontend/creative/src/index.tsx +++ b/Backend/Frontend/creative/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { createRoot } from 'react-dom/client'; import App from './App.tsx'; import { Provider } from 'react-redux'; -import store from './store/index'; +import store from './store/index.ts'; const container: HTMLElement | null = document.getElementById('root')!; const root = createRoot(container); diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx index dfb6166..9c7db47 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayBathchair.tsx @@ -6,7 +6,7 @@ import { useParams } from "react-router-dom" import { api } from "../../component/auth/Api.ts" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" -import { SubwayActions } from "../../store/Subway-slice" +import { SubwayActions } from "../../store/Subway-slice.ts" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" import SubwayInfo from "../../component/subway-component/subwayinfo/SubwayInfo.tsx" @@ -36,7 +36,7 @@ const SubwayBathchair = () => { }) } getBathChair() - }, []) + }, [dispatch,params.lnCd,params.railCd,params.stCd,params.stNm]) return (
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx index 5eaf487..22e43a8 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayDetailPage.tsx @@ -1,4 +1,4 @@ -import React,{ useEffect, useState } from "react" +import React, { useEffect, useState } from "react" import Mapping from "../../component/map/Mapping.tsx" import classes from "./SubwayDetailPage.module.css" import Header from "../../component/header/Header.tsx" @@ -6,8 +6,8 @@ import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPane import SubwayDetail from "../../component/subway-component/subwaydetail/SubwayDetail.tsx" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" import { useDispatch } from "react-redux" -import { SubwayActions } from "../../store/Subway-slice.tsx" -import { api } from "../../component/auth/Api.tsx" +import { SubwayActions } from "../../store/Subway-slice.ts" +import { api } from "../../component/auth/Api.ts" import { useParams } from "react-router-dom" const SubwayDetailPage = () => { @@ -29,7 +29,7 @@ const SubwayDetailPage = () => { }) } getDetail() - }, []) + }, [dispatch,params.stCd,params.stNm]) return (
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx index dae5f79..6f5ddf3 100644 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx +++ b/Backend/Frontend/creative/src/page/subwaypage/SubwayElevator.tsx @@ -4,15 +4,19 @@ import Header from "../../component/header/Header.tsx" import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" import { useParams } from "react-router-dom" -import { api } from "../../component/auth/Api.tsx" +import { api } from "../../component/auth/Api.ts" import { useEffect, useState } from "react" import { useDispatch } from "react-redux" -import { SubwayActions } from "../../store/Subway-slice" +import { SubwayActions } from "../../store/Subway-slice.ts" + +interface subEle { + imgPath:string; +} const SubwayElevator = () => { const params = useParams(); const dispatch = useDispatch(); - const [ElePos, setElePos] = useState<[]>([]); + const [ElePos, setElePos] = useState([]); useEffect(() => { const stCd = params.stCd; const stNm = params.stNm; @@ -23,11 +27,11 @@ const SubwayElevator = () => { await api.get(`/subway/convenience/${stCd}/${stNm}/${railCd}/${lnCd}`) .then(res => { const { data } = res; - setElePos(data) + setElePos(()=>data); }) } getBathChair() - }, []) + }, [dispatch, params.lnCd,params.railCd,params.stCd,params.stNm]) return (
    diff --git a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx b/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx deleted file mode 100644 index ad48a57..0000000 --- a/Backend/Frontend/creative/src/page/subwaypage/SubwayTransfer.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from "react"; -import classes from "./SubwayTransfer.module.css" -import Header from "../../component/header/Header.tsx" -import SubwayBar from "../../component/subway-component/subwaymenubar/SubwayBar.tsx" -import SubwayPanel from "../../component/subway-component/subwaypanel/SubwayPanel.tsx" -import SubwayTransferDetail from "../../component/subway-component/subwaytransfer/SubwayTrasferDetail.tsx" -import { useParams } from "react-router-dom" -import { api } from "../../component/auth/Api.ts" -import { useEffect, useState } from "react" -import { useSelector, useDispatch } from "react-redux" -import { SubwayActions } from "../../store/Subway-slice" -import {AppDispatch} from "../../store/index.ts"; - -const SubwayTransfer = () => { - const params = useParams(); - const dispatch = useDispatch(); - const [trans, setTrans] = useState([]); - const transcheck = useSelector((state:AppDispatch) => state.subway.transferDetail.transCheck) - const tranferImage = useSelector((state:AppDispatch) => state.subway.transferDetail.transferImage) - - useEffect(() => { - const stCd = params.stCd; - const stNm = params.stNm; - const railCd = params.railCd; - const lnCd = params.lnCd; - dispatch(SubwayActions.saveSubway({ stCd, stNm, railCd, lnCd })) - const getBathChair = async () => { - await api.get(`/subway/transferMove/transferList/${stCd}/${stNm}/${railCd}/${lnCd}`) - .then(res => { - const { data } = res; - setTrans(data) - }).catch(res => { - alert("환승역이 아닙니다.") - window.location.href = `/#/subway/detail/${stCd}/${stNm}`; - }) - } - getBathChair() - }, []) - return ( -
    -
    -
    - } /> -
    - -
    - {transcheck && } -
    - -
    -
    -
    - ) -} - - - -export default SubwayTransfer diff --git a/Backend/Frontend/creative/src/store/index.ts b/Backend/Frontend/creative/src/store/index.ts index f741da1..6811e06 100644 --- a/Backend/Frontend/creative/src/store/index.ts +++ b/Backend/Frontend/creative/src/store/index.ts @@ -1,7 +1,7 @@ import { configureStore } from "@reduxjs/toolkit" -import BusReducer from "./Bus-slice.js"; -import MapReducer from "./Map-slice.js" -import SubwayReducer from "./Subway-slice.js" +import BusReducer from "./Bus-slice.ts"; +import MapReducer from "./Map-slice.ts" +import SubwayReducer from "./Subway-slice.ts" import { combineReducers } from "@reduxjs/toolkit"; From b179900aba1cfab9460f4e1d1b8965455436dccb Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Thu, 12 Oct 2023 14:53:37 +0900 Subject: [PATCH 29/32] =?UTF-8?q?fix(front):=20Api=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/src/component/auth/Api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/Frontend/creative/src/component/auth/Api.ts b/Backend/Frontend/creative/src/component/auth/Api.ts index a42f06a..8652ee6 100644 --- a/Backend/Frontend/creative/src/component/auth/Api.ts +++ b/Backend/Frontend/creative/src/component/auth/Api.ts @@ -1,6 +1,6 @@ import axios from "axios" export const api = axios.create({ - baseURL: "http://34.168.80.42:3000" + baseURL: "http://34.168.80.42:3005" }) From 3bae8bf2428fe7eda6c75dc7ab6b5c28bb392481 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Thu, 12 Oct 2023 16:18:06 +0900 Subject: [PATCH 30/32] =?UTF-8?q?fix(front):=20map=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Frontend/creative/src/component/map/Mapping.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Backend/Frontend/creative/src/component/map/Mapping.tsx b/Backend/Frontend/creative/src/component/map/Mapping.tsx index fbe4011..4fcd2ac 100644 --- a/Backend/Frontend/creative/src/component/map/Mapping.tsx +++ b/Backend/Frontend/creative/src/component/map/Mapping.tsx @@ -22,10 +22,10 @@ const Mapping = () => { const busmode = useSelector((state:RootState) => state.map.busmode) const subwaymode = useSelector((state:RootState) => state.map.subwaymode) const {curPosition} = usePosition(); - + const tmY = curPosition ? curPosition.tmY: position.tmY; + const tmX = curPosition ? curPosition.tmX: position.tmX; useEffect(() => { - const tmY = curPosition ? curPosition.tmY: position.tmY; - const tmX = curPosition ? curPosition.tmX: position.tmX; + console.log(tmX,tmY); const container = document.getElementById("map"); const options = { center: new window.kakao.maps.LatLng(tmY, tmX), @@ -36,7 +36,7 @@ const Mapping = () => { busmapcoordinate(marker, map) else if (subwaymode) subwaymapcoordinate(marker, map) - },[]) + },[tmX,tmY]) const subwaymapcoordinate = (marker:any, map:any) => { const markerPosition = new window.kakao.maps.LatLng(parseFloat(String(marker.tmY - 0.0000005)).toFixed(6), parseFloat(String(marker.tmX - 0.0000005)).toFixed(6)) From 8e2d79377e9b981d2191b075220608f6206242f7 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Tue, 7 Nov 2023 00:32:55 +0900 Subject: [PATCH 31/32] =?UTF-8?q?feat:=20=EA=B0=84=EB=8B=A8=20=ED=8D=BC?= =?UTF-8?q?=EB=B8=94=EB=A6=AC=EC=8B=B1(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creative/src/component/header/Header.tsx | 2 + .../creative/src/component/menu/MenuBar.tsx | 12 ++--- .../src/component/menu/MenuBusButton.tsx | 1 - .../src/component/menu/MenuExplan.tsx | 49 ------------------- .../src/component/menu/MenuHeader.tsx | 24 --------- .../creative/src/page/MainPage.module.css | 30 +++++++++--- .../Frontend/creative/src/page/MainPage.tsx | 8 +-- 7 files changed, 34 insertions(+), 92 deletions(-) delete mode 100644 Backend/Frontend/creative/src/component/menu/MenuExplan.tsx delete mode 100644 Backend/Frontend/creative/src/component/menu/MenuHeader.tsx diff --git a/Backend/Frontend/creative/src/component/header/Header.tsx b/Backend/Frontend/creative/src/component/header/Header.tsx index d27934d..f71ee88 100644 --- a/Backend/Frontend/creative/src/component/header/Header.tsx +++ b/Backend/Frontend/creative/src/component/header/Header.tsx @@ -8,6 +8,8 @@ import { MapActions } from "../../store/Map-slice.ts"; const StyledHeader = styled.header` display:flex; +position: fixed; +top: 0; justify-content:space-between; align-items:center; font-family: 'GmarketSansMedium'; diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.tsx b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx index 8e9efff..e45a0f5 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.tsx +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx @@ -2,17 +2,17 @@ import React from "react" import MenuBusButton from "./MenuBusButton.tsx" import MenuSubwayButton from "./MenuSubwayButton.tsx" import styled from "styled-components" -import MenuExplan from "./MenuExplan.tsx" const StyleMenuBar = styled.div` display:flex; +position: fixed; +bottom: 0; justify-content: space-between; width: 100%; -padding-top:5vw; -height: 633px; +background-color: #FFD12D; +height: 10vh; text-decoration:none; @media (max-width:500px){ - flex-direction: column; justify-content: space-evenly; } ` @@ -21,9 +21,7 @@ text-decoration:none; const MenuBar = () => { return ( - - - + ) } diff --git a/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx b/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx index 5797857..1c31174 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx +++ b/Backend/Frontend/creative/src/component/menu/MenuBusButton.tsx @@ -80,7 +80,6 @@ a{ const MenuBusButton = () => { const dispatch = useDispatch(); - const initialization = () => { dispatch(MapActions.initialization()) dispatch(BusActions.initialState()) diff --git a/Backend/Frontend/creative/src/component/menu/MenuExplan.tsx b/Backend/Frontend/creative/src/component/menu/MenuExplan.tsx deleted file mode 100644 index 0ef5f3c..0000000 --- a/Backend/Frontend/creative/src/component/menu/MenuExplan.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -const StyleMenuExplan = styled.div` -display:flex; -flex-direction:column; -align-items:center; -width: auto; -color:#E2E2E2; -.first{ - font-family: 'GmarketSansMedium'; - font-weight: 700; - font-size: 70px; -} -.second{ - display:flex; - text-align:center; - font-family: 'Pretendard-Regular'; - font-size: 40px; -} -@media (max-width:1630px){ - .first{ - font-size: 4vw; - } - .second{ - font-size: 2.5vw; - } -} -@media (max-width:500px){ - .first{ - font-size: 10vw; - } - .second{ - font-size: 5vw; - } -} -` - -const MenuExplan = () => { - - return ( - -

    편리하고 쉽게, 타자.

    -

    교통약자도 대중교통을 쉽게 탈 수 있을때까지.
    교통약자에게 필요한 서비스를 제공합니다.

    -
    - ) -} - -export default MenuExplan; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/MenuHeader.tsx b/Backend/Frontend/creative/src/component/menu/MenuHeader.tsx deleted file mode 100644 index e16fae3..0000000 --- a/Backend/Frontend/creative/src/component/menu/MenuHeader.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -const StyledHeader = styled.header` -width: 100%; -font-family: 'SEBANG Gothic'; -font-style: normal; -font-weight: 400; -font-size: 4rem; -line-height: 94px; -padding-bottom: 30px; -color: #000000; - -` - -const MenuHeader = () => { - - - return ( - 타자 - ) -} - -export default MenuHeader; \ No newline at end of file diff --git a/Backend/Frontend/creative/src/page/MainPage.module.css b/Backend/Frontend/creative/src/page/MainPage.module.css index 7420b29..f49d3f2 100644 --- a/Backend/Frontend/creative/src/page/MainPage.module.css +++ b/Backend/Frontend/creative/src/page/MainPage.module.css @@ -3,20 +3,17 @@ body { margin: 0px; padding: 0px; } - -.main { - display: flex; - flex-direction: column; - align-items: center; -} - .bottom { width: 100%; height: 100vh; - background: rgba(40, 40, 40, 0.8); } .main { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; animation: fadein 2s; -moz-animation: fadein 2s; /* Firefox */ @@ -25,6 +22,23 @@ body { -o-animation: fadein 2s; /* Opera */ } +.main_detail{ + display: flex; + flex-direction: column; + justify-content: space-evenly; + height: 30vh; +} +.main_title{ + font-family: 'GmarketSansMedium'; + font-weight: 700; + font-size: 2em; +} +.main_explan{ + display:flex; + text-align:center; + font-family: 'Pretendard-Regular'; + font-size: 1em; +} @keyframes fadein { from { diff --git a/Backend/Frontend/creative/src/page/MainPage.tsx b/Backend/Frontend/creative/src/page/MainPage.tsx index 1a76b2c..fda0958 100644 --- a/Backend/Frontend/creative/src/page/MainPage.tsx +++ b/Backend/Frontend/creative/src/page/MainPage.tsx @@ -7,9 +7,11 @@ const Mainpage = () => { return (
    -
    - -
    +
    +

    편리하고 쉽게, 타자.

    +

    교통약자도 대중교통을 쉽게 탈 수 있을때까지.
    교통약자에게 필요한 서비스를 제공합니다.

    +
    +
    ) } From c817b5419d53d12ff3018db8ad47c8a5669204a3 Mon Sep 17 00:00:00 2001 From: KYUTAE PARK Date: Tue, 7 Nov 2023 20:20:45 +0900 Subject: [PATCH 32/32] =?UTF-8?q?feat:menuBar=20=EC=88=98=EC=A0=95(SVG?= =?UTF-8?q?=EB=A1=9C=20=ED=91=9C=ED=98=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Frontend/creative/public/image/BUS.png | Bin 1396 -> 0 bytes .../Frontend/creative/public/image/LEFT.png | Bin 874 -> 0 bytes .../Frontend/creative/public/image/SUBWAY.png | Bin 1356 -> 0 bytes .../creative/public/image/refresh.png | Bin 67266 -> 0 bytes .../creative/src/component/header/Header.tsx | 33 +++++++----------- .../creative/src/component/menu/MenuBar.tsx | 29 ++++++++++++--- .../src/component/menu/menuSvg/BUS.svg | 1 + .../src/component/menu/menuSvg/HOME.svg | 1 + .../src/component/menu/menuSvg/SIGN.svg | 1 + .../src/component/menu/menuSvg/SUBWAY.svg | 1 + Backend/Frontend/creative/src/custom.d.ts | 6 ++++ Backend/Frontend/creative/src/tsconfig.json | 3 +- 12 files changed, 48 insertions(+), 27 deletions(-) delete mode 100644 Backend/Frontend/creative/public/image/BUS.png delete mode 100644 Backend/Frontend/creative/public/image/LEFT.png delete mode 100644 Backend/Frontend/creative/public/image/SUBWAY.png delete mode 100644 Backend/Frontend/creative/public/image/refresh.png create mode 100644 Backend/Frontend/creative/src/component/menu/menuSvg/BUS.svg create mode 100644 Backend/Frontend/creative/src/component/menu/menuSvg/HOME.svg create mode 100644 Backend/Frontend/creative/src/component/menu/menuSvg/SIGN.svg create mode 100644 Backend/Frontend/creative/src/component/menu/menuSvg/SUBWAY.svg create mode 100644 Backend/Frontend/creative/src/custom.d.ts diff --git a/Backend/Frontend/creative/public/image/BUS.png b/Backend/Frontend/creative/public/image/BUS.png deleted file mode 100644 index db7ef98f4b675551ae165c2355956ba99000fa80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1396 zcmV-)1&jKLP)TCd7Kf)G(28y=ukc~@Q|LupPgq14&d$>=>%y|9(s8$C>EZ)51SPpL9bcIe_apWJ7HK-m3 z9e>jDMF|=IBFczCpBoGo`j$TTAmS??*ejw4@EwPTdlIySP87TBh)5OBk#hDv8@KjL z71BL_iAWXB&EX1mVIlvA;*70`@?iZ1Zn)NKq&upf$U)Zx?$Bn{5xI!sg|3^tg?ghK zN>B6^?on@aKq=x!_+cSEKZ-?8D&1+mSU|A~d!kPPnFNYeSVZ5=TLQ%@#}M%q6sxd^ zkMPS+C{|$+@8K8U|1Ww@BnIcx8x0hzl+TG7{J?3>>WP*qMZAF@GAP!`MU=!01NU4( zu}(FLaRIkn#WDtFY-|TgQ3Y?P3vL59o#6)Va|`EG{#(SsplA2`Xt#6NpEAUt$lh^% z2h1m)VuJiNJVPp)$8H+ffxqvAHluFY87L(ceoD5+%iu?eQ+=dx&)y-6?2%+Cissc| z80>v~6LYE_=!e!^3?9i%_L^2dpzzG5>l$y*P~73Zrq3*)c%xS?2H&~TV$+g(eQ~Uz z`$~Y55h=Tr*aQTJzUnbdUeBcOchDR$mN6&-=`N!el(v2!q%?DsW9v&yb@W{YnDw7p)C<#2`GR-|E5$Anp=a5O4eADZH%3W%L0mSBseJ7Ck1poA%Ib`q* zBe98?cFiRxZ@Nk0pGA+d@sBXYKw`Wm=92B31WdS>wu{Wm%N*Ci6Q69=O zC{5&V2@m1M<|~vY@}#E_L|noDTstAab+Y1>(TjL!&;A6sDWf7mJSR#*k51a~%(|L+ z7Re!(Xq|Q zdxrOs!Xqu^sPi!PcT-6j`;at!N06QGND=%g=QFl{Hm|_>{?4A zh*zGT-}_j9>kYp^<#PZ6=E!+0$o{MC`c1a!s@p%=jED8VxfC2^ufCEs#Nx%Wc0S=brF3a>_de`fAyUF(ZW-?m^ z|0M4l&{j~XIkq380ldwPzuU*`g}@j6#z%FsK6{o?;Mot z064Nm9LY?<&^;a01N*raC1smu3Pp*D2E{ zAHQFR<2NvaCIT~sWtTo5LQn!Ts=7;_>y&AIkLx42umomRv~ z*8pz%FEC4;GBk4*+iX?}>^OnwzxVrJs4n`6U3jvhz)!5}aKK zPJk10&`HVT0RX| zErA7?G%&Lin!jDO1eRd(z#QnP1Fbt*U=Fr|GyjKk69A1kd0-AwXkKaz0WFy=Fb6v7 zKr3bs%)!?1;%WXI3NTVNfti*1W`2-OV+g2DRe?G9r=xxu02Qb*Fb5?#^D$k06PR7q zfjQ6^0&37iU=9o~1~@?9_p7u%n^pv{r#*wS3jnUAP<+zwp267#z(`HiFmID;n?E#$ z01nXKoci7cz(_}Z)2BB5^&3N7TAOn965wEe0B?}!5$1!`3;+NC07*qoM6N<$f?-2x A{Qv*} diff --git a/Backend/Frontend/creative/public/image/SUBWAY.png b/Backend/Frontend/creative/public/image/SUBWAY.png deleted file mode 100644 index 576ca07098c71f661edbb22879fc5da85a8c61ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1356 zcmbW1{Xf$Q0LQ0Dp4Rg4nrY;)c{mqQR32ws8$!s#Ezi$O9!g!stQkX`HP21RrG`A@ z@nT+Fv+^YmG1=rbi#$}e*Nu``xZV8$_rv}0d3b;RfKRTM$5|CcEkzIrq=LmbdrK21 z)un?6q^{|{dqNrtNtnQ^Adr&UKav5_?`uj&nXBGsoj}cF@Q+fEjX|A5fk3TPrSD;K zQk=&+qkM13h$>0fX00F;;`X)MDf`;hIx2O)$YPOowxkflr?#jfg-Fl4(HTZ+?0b%Y zY%mYUnspi_bz5rEB0~uYEiRj&o3c%ddaDxfXBsTda#7{ReRk&+! z(Wb1;>06_#%|?pyXvKU-^=&9Vj`&hA8_vkg>8HL*T-%f!_h9R`kuTB$v)0cX3z-)m z-g@QL2Ur08XOTl~;^6mKA?TC!a_b$I#~Q33=-{lJX0I=;iC^kzHjAgT2nZ z)>3W!hB8OUJQdl%n@q0_YTuKAkvI555hKx!I+X&nFg+H3UCsh&xitZ#@3%lsGWtt{ zGV-wq2YR^(^)rGkTrdrW4*{~{D>1s!-w)VXKSdufX;xn){>jPdk>k=!ltgx2Y#mKn z(q0IKF9GWpb9)NI*pOkX%r=#pc(l>%|F6zFjn$j!GBzDWs=bFKFnQR4`v*=My7W$ekNV4C8lu>IZh+f_sAj&lXBc z8q3|uzKLQuUi+}>oy&5kQl6W8UIn{R`wILMX-R$NkNP;5@Nf#^F^RKm8k?iB0(SL| ze6m-h(if_=s57|dRj6lU9pZMquZ(2w0PYliGb|qP)%ktsEmi#xekM4%q9d!mHuzuE z!=+NLSf;uoEOR!JzuV>!!CLbg>*d1+%obX9bl+O`*WxjHD6vG#HH~jj z0-%%Yb2%M2)Dkl47#YL59Pon6QE`l38b$0tp^(A8A%xUFEd}Jf1}?}iaj0l*;rh|kK>l$ z+}q4A=yqdT7LJObJ@i#9p>q*-tT=BJ8Uhr&+118?%Yq2ImD=Z9i-`D#CfTf|F5w#+ z#?aR zDuc^Q1|U@i5;m>`oXhgjI*H(={fdE9>ES42u6Lp2{e)T|`pQy{)nVg)dJJaR|MM}& b!f$d&3)b`Dlw7>@{6JV259em5(2TzU?C*-7 diff --git a/Backend/Frontend/creative/public/image/refresh.png b/Backend/Frontend/creative/public/image/refresh.png deleted file mode 100644 index 675f4672106bc1b531ffcdcf5a5e4cb4e7ffaf0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67266 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 Vw`D=H<3peU44$rjF6*2UngAT!{$T(B diff --git a/Backend/Frontend/creative/src/component/header/Header.tsx b/Backend/Frontend/creative/src/component/header/Header.tsx index f71ee88..9092ef1 100644 --- a/Backend/Frontend/creative/src/component/header/Header.tsx +++ b/Backend/Frontend/creative/src/component/header/Header.tsx @@ -8,37 +8,28 @@ import { MapActions } from "../../store/Map-slice.ts"; const StyledHeader = styled.header` display:flex; -position: fixed; -top: 0; justify-content:space-between; align-items:center; +position:fixed; +top: 0; font-family: 'GmarketSansMedium'; -font-weight: 700; -font-size: 4vw; -background-color:#FFFFFF; border-bottom: 2px solid #EBEBEB; -width:95%; -height:15vh; -a{ +width:100vw; +min-height:8vh; +.header_home{ + font-size:5vw; color:#000000; text-decoration:none; + padding-left: 5vw; } -.sejong{ +.header_sejong{ font-family: 'Pretendard-Regular'; font-style: normal; - font-weight: 700; - font-size: 1.8vw; + font-size: 2vw; + padding-right: 5vw; line-height: 48px; - text-align: center; color: #5C5454; } -@media (max-width:500px) { - font-size:8vw; - height:8vh; - .sejong{ - font-size: 4vw; - } -} ` const Header = () => { @@ -51,10 +42,10 @@ const Header = () => { } return ( - + 타자 -

    Sejong University

    +

    Sejong University

    ) } diff --git a/Backend/Frontend/creative/src/component/menu/MenuBar.tsx b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx index e45a0f5..0cfa2fa 100644 --- a/Backend/Frontend/creative/src/component/menu/MenuBar.tsx +++ b/Backend/Frontend/creative/src/component/menu/MenuBar.tsx @@ -1,27 +1,46 @@ import React from "react" -import MenuBusButton from "./MenuBusButton.tsx" -import MenuSubwayButton from "./MenuSubwayButton.tsx" import styled from "styled-components" +import {ReactComponent as HOME} from "./menuSvg/HOME.svg"; +import {ReactComponent as BUS} from "./menuSvg/BUS.svg"; +import {ReactComponent as SUBWAY} from "./menuSvg/SUBWAY.svg"; +import {ReactComponent as SIGN} from "./menuSvg/SIGN.svg"; + + + + const StyleMenuBar = styled.div` display:flex; position: fixed; bottom: 0; -justify-content: space-between; +justify-content: space-evenly; +align-items: center; width: 100%; +height: 8vh; background-color: #FFD12D; -height: 10vh; text-decoration:none; @media (max-width:500px){ justify-content: space-evenly; } ` +const StyleButton = styled.button` + background-color: transparent; + border: 0; + .menu_img{ + fill: white; + min-height: 4vh; + } +` + const MenuBar = () => { return ( - + + + + ) } diff --git a/Backend/Frontend/creative/src/component/menu/menuSvg/BUS.svg b/Backend/Frontend/creative/src/component/menu/menuSvg/BUS.svg new file mode 100644 index 0000000..3866ca4 --- /dev/null +++ b/Backend/Frontend/creative/src/component/menu/menuSvg/BUS.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/menuSvg/HOME.svg b/Backend/Frontend/creative/src/component/menu/menuSvg/HOME.svg new file mode 100644 index 0000000..341fc43 --- /dev/null +++ b/Backend/Frontend/creative/src/component/menu/menuSvg/HOME.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/menuSvg/SIGN.svg b/Backend/Frontend/creative/src/component/menu/menuSvg/SIGN.svg new file mode 100644 index 0000000..67e49d6 --- /dev/null +++ b/Backend/Frontend/creative/src/component/menu/menuSvg/SIGN.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Backend/Frontend/creative/src/component/menu/menuSvg/SUBWAY.svg b/Backend/Frontend/creative/src/component/menu/menuSvg/SUBWAY.svg new file mode 100644 index 0000000..c2a2ec9 --- /dev/null +++ b/Backend/Frontend/creative/src/component/menu/menuSvg/SUBWAY.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Backend/Frontend/creative/src/custom.d.ts b/Backend/Frontend/creative/src/custom.d.ts new file mode 100644 index 0000000..d531b65 --- /dev/null +++ b/Backend/Frontend/creative/src/custom.d.ts @@ -0,0 +1,6 @@ +declare module '*.svg' { + import React = require('react') + export const ReactComponent: React.FC> + const src: string + export default src + } \ No newline at end of file diff --git a/Backend/Frontend/creative/src/tsconfig.json b/Backend/Frontend/creative/src/tsconfig.json index f57628e..53a6bbf 100644 --- a/Backend/Frontend/creative/src/tsconfig.json +++ b/Backend/Frontend/creative/src/tsconfig.json @@ -7,9 +7,10 @@ "skipLibCheck": true, "moduleResolution": "node", "forceConsistentCasingInFileNames": true, - "jsx": "react", "allowImportingTsExtensions": true, "paths":["**/*"], + "jsx": "react", + "include": ["src/custom.d.ts" ] } } \ No newline at end of file