Merge branch 'dev' of https://git.hanasys.jp/qcast3/onsitesurvey into feature/suitable
This commit is contained in:
commit
7fa03e0713
@ -10,8 +10,8 @@ NEXT_PUBLIC_QSP_API_URL=http://1.248.227.176:8120
|
|||||||
NEXT_PUBLIC_INQUIRY_API_URL=http://1.248.227.176:38080
|
NEXT_PUBLIC_INQUIRY_API_URL=http://1.248.227.176:38080
|
||||||
|
|
||||||
#QPARTNER 로그인 api
|
#QPARTNER 로그인 api
|
||||||
#DB_HOST=202.218.61.226
|
DB_HOST=202.218.61.226
|
||||||
#DB_USER=readonly
|
DB_USER=readonly
|
||||||
#DB_PASSWORD=aAjmFW12iHKW84l1
|
DB_PASSWORD=aAjmFW12iHKW84l1
|
||||||
#DB_DATABASE=qpartners
|
DB_DATABASE=qpartners
|
||||||
#DB_PORT=3306
|
DB_PORT=3306
|
||||||
@ -8,8 +8,8 @@ NEXT_PUBLIC_QSP_API_URL=http://1.248.227.176:8120
|
|||||||
NEXT_PUBLIC_INQUIRY_API_URL=http://1.248.227.176:38080
|
NEXT_PUBLIC_INQUIRY_API_URL=http://1.248.227.176:38080
|
||||||
|
|
||||||
#QPARTNER 로그인 api
|
#QPARTNER 로그인 api
|
||||||
#DB_HOST=202.218.61.226
|
DB_HOST=202.218.61.226
|
||||||
#DB_USER=readonly
|
DB_USER=readonly
|
||||||
#DB_PASSWORD=aAjmFW12iHKW84l1
|
DB_PASSWORD=aAjmFW12iHKW84l1
|
||||||
#DB_DATABASE=qpartners
|
DB_DATABASE=qpartners
|
||||||
#DB_PORT=3306
|
DB_PORT=3306
|
||||||
@ -1,5 +1,4 @@
|
|||||||
import { NextResponse } from 'next/server'
|
import { NextResponse } from 'next/server'
|
||||||
|
|
||||||
import { axiosInstance } from '@/libs/axios'
|
import { axiosInstance } from '@/libs/axios'
|
||||||
|
|
||||||
export async function POST(req: Request) {
|
export async function POST(req: Request) {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { sessionOptions } from '@/libs/session'
|
import type { SessionData } from '@/types/Auth'
|
||||||
import { SessionData } from '@/types/Auth'
|
|
||||||
import { getIronSession } from 'iron-session'
|
|
||||||
import { cookies } from 'next/headers'
|
import { cookies } from 'next/headers'
|
||||||
import { NextResponse } from 'next/server'
|
import { NextResponse } from 'next/server'
|
||||||
|
import { getIronSession } from 'iron-session'
|
||||||
|
import { sessionOptions } from '@/libs/session'
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function GET(request: Request) {
|
||||||
const cookieStore = await cookies()
|
const cookieStore = await cookies()
|
||||||
|
|||||||
@ -1,12 +1,10 @@
|
|||||||
|
import type { SessionData } from '@/types/Auth'
|
||||||
import { cookies } from 'next/headers'
|
import { cookies } from 'next/headers'
|
||||||
import { NextResponse } from 'next/server'
|
import { NextResponse } from 'next/server'
|
||||||
|
|
||||||
import { getIronSession } from 'iron-session'
|
import { getIronSession } from 'iron-session'
|
||||||
import { axiosInstance } from '@/libs/axios'
|
import { axiosInstance } from '@/libs/axios'
|
||||||
import { sessionOptions } from '@/libs/session'
|
import { sessionOptions } from '@/libs/session'
|
||||||
|
|
||||||
import type { SessionData } from '@/types/Auth'
|
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
const { loginId, pwd } = await request.json()
|
const { loginId, pwd } = await request.json()
|
||||||
|
|
||||||
@ -14,7 +12,7 @@ export async function POST(request: Request) {
|
|||||||
loginId,
|
loginId,
|
||||||
pwd,
|
pwd,
|
||||||
})
|
})
|
||||||
// console.log('🚀 ~ result ~ result:', result)
|
console.log('🚀 ~ result ~ result:', result.data)
|
||||||
|
|
||||||
if (result.data.result.code === 200) {
|
if (result.data.result.code === 200) {
|
||||||
const cookieStore = await cookies()
|
const cookieStore = await cookies()
|
||||||
@ -59,8 +57,6 @@ export async function POST(request: Request) {
|
|||||||
session.role = 'Admin_Sub'
|
session.role = 'Admin_Sub'
|
||||||
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
|
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
|
||||||
session.role = 'Builder'
|
session.role = 'Builder'
|
||||||
} else if (result.data.data.groupId === '90000' && result.data.data.builderNo !== null) {
|
|
||||||
session.role = 'Partner'
|
|
||||||
} else {
|
} else {
|
||||||
session.role = 'User'
|
session.role = 'User'
|
||||||
}
|
}
|
||||||
@ -70,5 +66,50 @@ export async function POST(request: Request) {
|
|||||||
await session.save()
|
await session.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
return NextResponse.json({ code: 200, message: 'Login is Succecss!!', result: result.data.data })
|
const resultForSession = {
|
||||||
|
LANG_CD: result.data.data.langCd,
|
||||||
|
CURR_PAGE: result.data.data.currPage,
|
||||||
|
ROW_COUNT: result.data.data.rowCount,
|
||||||
|
START_ROW: result.data.data.startRow,
|
||||||
|
END_ROW: result.data.data.endRow,
|
||||||
|
COMP_CD: result.data.data.compCd,
|
||||||
|
AGENCY_STORE_ID: result.data.data.agencyStoreId,
|
||||||
|
STORE_ID: result.data.data.storeId,
|
||||||
|
STORE_NM: result.data.data.storeNm,
|
||||||
|
USER_ID: result.data.data.userId,
|
||||||
|
CATEGORY: result.data.data.category,
|
||||||
|
USER_NM: result.data.data.userNm,
|
||||||
|
USER_NM_KANA: result.data.data.userNmKana,
|
||||||
|
TEL_NO: result.data.data.telNo,
|
||||||
|
FAX: result.data.data.fax,
|
||||||
|
EMAIL: result.data.data.email,
|
||||||
|
LAST_EDIT_USER: result.data.data.lastEditUser,
|
||||||
|
STORE_GUBUN: result.data.data.storeGubun,
|
||||||
|
PW_CURR: result.data.data.pwCurr,
|
||||||
|
PWD_INIT_YN: result.data.data.pwdInitYn,
|
||||||
|
APPR_STAT_CD: result.data.data.apprStatCd,
|
||||||
|
LOGIN_FAIL_CNT: result.data.data.loginFailCnt,
|
||||||
|
LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn,
|
||||||
|
PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd,
|
||||||
|
GROUP_ID: result.data.data.groupId,
|
||||||
|
STORE_LVL: result.data.data.storeLvl,
|
||||||
|
CUST_CD: result.data.data.custCd,
|
||||||
|
BUILDER_NO: result.data.data.builderNo,
|
||||||
|
IS_LOGGED_IN: true,
|
||||||
|
ROLE: '',
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.data.data.userId === 'T01') {
|
||||||
|
resultForSession.ROLE = 'T01'
|
||||||
|
} else if (result.data.data.groupId === '60000') {
|
||||||
|
resultForSession.ROLE = 'Admin'
|
||||||
|
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) {
|
||||||
|
resultForSession.ROLE = 'Admin_Sub'
|
||||||
|
} else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
|
||||||
|
resultForSession.ROLE = 'Builder'
|
||||||
|
} else {
|
||||||
|
resultForSession.ROLE = 'User'
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({ code: 200, message: 'Login is Succecss!!', result: resultForSession })
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,49 +1,131 @@
|
|||||||
|
import type { SessionData } from '@/types/Auth'
|
||||||
import { NextResponse } from 'next/server'
|
import { NextResponse } from 'next/server'
|
||||||
|
import { cookies } from 'next/headers'
|
||||||
|
import { getIronSession } from 'iron-session'
|
||||||
import executeQuery from '@/libs/partner'
|
import executeQuery from '@/libs/partner'
|
||||||
|
import { sessionOptions } from '@/libs/session'
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function POST(request: Request) {
|
||||||
// const sqls = `SELECT
|
const cookieStore = await cookies()
|
||||||
// r.data_id,
|
const session = await getIronSession<SessionData>(cookieStore, sessionOptions)
|
||||||
// u.id AS user_id,
|
const { loginId, pwd } = await request.json()
|
||||||
// u.login_id AS user_login_id,
|
|
||||||
// u.password AS user_password,
|
const sql = `
|
||||||
// u.user_name AS user_name,
|
SELECT
|
||||||
// u.user_name_kana AS user_name_kana,
|
r.data_id,
|
||||||
// u.sei AS user_sei,
|
u.id AS user_id,
|
||||||
// u.mei AS user_mei,
|
u.login_id AS user_login_id,
|
||||||
// u.sei_kana AS user_sei_kana,
|
u.password AS user_password,
|
||||||
// u.mei_kana AS user_mei_kana,
|
u.user_name AS user_name,
|
||||||
// u.user_tel AS user_tel,
|
u.user_name_kana AS user_name_kana,
|
||||||
// u.user_fax AS user_fax,
|
u.sei AS user_sei,
|
||||||
// u.status AS user_status,
|
u.mei AS user_mei,
|
||||||
// u.seko_id AS user_seko_id,
|
u.sei_kana AS user_sei_kana,
|
||||||
// u.seko_limit AS user_seko_limit,
|
u.mei_kana AS user_mei_kana,
|
||||||
// s.id AS supplier_id,
|
u.user_tel AS user_tel,
|
||||||
// s.code AS supplier_code,
|
u.user_fax AS user_fax,
|
||||||
// s.name AS supplier_name,
|
u.status AS user_status,
|
||||||
// s.name_kana AS supplier_name_kana,
|
u.seko_id AS user_seko_id,
|
||||||
// s.kind AS supplier_kind
|
u.seko_limit AS user_seko_limit,
|
||||||
// FROM
|
s.id AS supplier_id,
|
||||||
// R_DATA r
|
s.code AS supplier_code,
|
||||||
// JOIN
|
s.name AS supplier_name,
|
||||||
// M_USER u ON r.data_id = u.id
|
s.name_kana AS supplier_name_kana,
|
||||||
// JOIN
|
s.kind AS supplier_kind
|
||||||
// M_SUPPLIER s ON r.relation_id = s.id
|
FROM
|
||||||
// WHERE
|
R_DATA r
|
||||||
// u.status = '1'
|
JOIN
|
||||||
// AND
|
M_USER u ON r.data_id = u.id
|
||||||
// u.seko_id is not null
|
JOIN
|
||||||
// AND
|
M_SUPPLIER s ON r.relation_id = s.id
|
||||||
// u.seko_limit > now()
|
WHERE
|
||||||
// AND
|
u.status = '1'
|
||||||
// s.kind = '4'
|
AND
|
||||||
// AND
|
u.seko_id is not null
|
||||||
// u.login_id = ?
|
AND
|
||||||
// AND
|
u.seko_limit > now()
|
||||||
// u.password = ?
|
AND
|
||||||
// `
|
s.kind = '4'
|
||||||
const sql = 'SELECT * FROM M_USER'
|
AND
|
||||||
const data = await executeQuery(sql, [])
|
u.login_id = ?
|
||||||
console.log('🚀 ~ GET ~ data:', data)
|
AND
|
||||||
return NextResponse.json(data)
|
u.password = ?
|
||||||
|
`
|
||||||
|
// const sql = 'SELECT * FROM M_USER'
|
||||||
|
const data = (await executeQuery(sql, [loginId, pwd])) as any[]
|
||||||
|
console.log('🚀 ~ POST ~ data:', data)
|
||||||
|
|
||||||
|
if (data.length > 0) {
|
||||||
|
console.log('start session edit!')
|
||||||
|
session.langCd = null
|
||||||
|
session.currPage = null
|
||||||
|
session.rowCount = null
|
||||||
|
session.startRow = null
|
||||||
|
session.endRow = null
|
||||||
|
session.compCd = null
|
||||||
|
session.agencyStoreId = null
|
||||||
|
session.storeId = data[0].supplier_code
|
||||||
|
session.storeNm = data[0].supplier_name
|
||||||
|
session.userId = data[0].user_login_id
|
||||||
|
session.category = data[0].supplier_name
|
||||||
|
session.userNm = `${data[0].user_sei} ${data[0].user_mei}`
|
||||||
|
session.userNmKana = `${data[0].user_sei_kana} ${data[0].user_mei_kana}`
|
||||||
|
session.telNo = data[0].tel
|
||||||
|
session.fax = data[0].fax
|
||||||
|
session.email = data[0].user_login_id
|
||||||
|
session.lastEditUser = null
|
||||||
|
session.storeGubun = null
|
||||||
|
session.pwCurr = null
|
||||||
|
session.pwdInitYn = null
|
||||||
|
session.apprStatCd = null
|
||||||
|
session.loginFailCnt = null
|
||||||
|
session.loginFailMinYn = null
|
||||||
|
session.priceViewStatCd = null
|
||||||
|
session.groupId = null
|
||||||
|
session.storeLvl = null
|
||||||
|
session.custCd = null
|
||||||
|
session.builderNo = data[0].user_seko_id
|
||||||
|
session.isLoggedIn = true
|
||||||
|
session.role = 'Partner'
|
||||||
|
|
||||||
|
console.log('end session edit!')
|
||||||
|
|
||||||
|
await session.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
// qsp 유저 데이터 모양과 맞춰서 변환
|
||||||
|
const result = {
|
||||||
|
LANG_CD: null,
|
||||||
|
CURR_PAGE: null,
|
||||||
|
ROW_COUNT: null,
|
||||||
|
START_ROW: null,
|
||||||
|
END_ROW: null,
|
||||||
|
COMP_CD: null,
|
||||||
|
AGENCY_STORE_ID: null,
|
||||||
|
STORE_ID: data[0].supplier_code,
|
||||||
|
STORE_NM: data[0].supplier_name,
|
||||||
|
USER_ID: data[0].user_login_id,
|
||||||
|
CATEGORY: data[0].supplier_name,
|
||||||
|
USER_NM: `${data[0].user_sei} ${data[0].user_mei}`,
|
||||||
|
USER_NM_KANA: `${data[0].user_sei_kana} ${data[0].user_mei_kana}`,
|
||||||
|
TEL_NO: data[0].tel,
|
||||||
|
FAX: data[0].fax,
|
||||||
|
EMAIL: data[0].user_login_id,
|
||||||
|
LAST_EDIT_USER: null,
|
||||||
|
STORE_GUBUN: null,
|
||||||
|
PW_CURR: null,
|
||||||
|
PWD_INIT_YN: null,
|
||||||
|
APPR_STAT_CD: null,
|
||||||
|
LOGIN_FAIL_CNT: null,
|
||||||
|
LOGIN_FAIL_MIN_YN: null,
|
||||||
|
PRICE_VIEW_STAT_CD: null,
|
||||||
|
GROUP_ID: null,
|
||||||
|
STORE_LVL: null,
|
||||||
|
CUST_CD: null,
|
||||||
|
BUILDER_NO: data[0].user_seko_id,
|
||||||
|
IS_LOGGED_IN: true,
|
||||||
|
ROLE: 'Partner',
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({ code: 200, message: 'Partner Login is Succecss!!', result })
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@
|
|||||||
import type { SessionData } from '@/types/Auth'
|
import type { SessionData } from '@/types/Auth'
|
||||||
import { useEffect, useReducer, useState } from 'react'
|
import { useEffect, useReducer, useState } from 'react'
|
||||||
import { useRouter } from 'next/navigation'
|
import { useRouter } from 'next/navigation'
|
||||||
|
|
||||||
import { useLocalStorage } from 'usehooks-ts'
|
import { useLocalStorage } from 'usehooks-ts'
|
||||||
import { useQuery } from '@tanstack/react-query'
|
import { useQuery } from '@tanstack/react-query'
|
||||||
|
|
||||||
import { axiosInstance } from '@/libs/axios'
|
import { axiosInstance } from '@/libs/axios'
|
||||||
import { useSessionStore } from '@/store/session'
|
import { useSessionStore } from '@/store/session'
|
||||||
|
|
||||||
@ -48,7 +46,14 @@ export default function Login() {
|
|||||||
} = useQuery<LoginData, Error>({
|
} = useQuery<LoginData, Error>({
|
||||||
queryKey: ['login', 'account'],
|
queryKey: ['login', 'account'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await axiosInstance('').post<LoginData>(`/api/auth`, {
|
let url = ''
|
||||||
|
if (!isPartners) {
|
||||||
|
url = '/api/auth'
|
||||||
|
} else {
|
||||||
|
url = '/api/partner'
|
||||||
|
}
|
||||||
|
|
||||||
|
const { data } = await axiosInstance('').post<LoginData>(`${url}`, {
|
||||||
loginId: account.loginId,
|
loginId: account.loginId,
|
||||||
pwd: account.pwd,
|
pwd: account.pwd,
|
||||||
})
|
})
|
||||||
@ -68,6 +73,7 @@ export default function Login() {
|
|||||||
indivisualData: account.pwd,
|
indivisualData: account.pwd,
|
||||||
})
|
})
|
||||||
// 세션 정보 저장
|
// 세션 정보 저장
|
||||||
|
console.log('🚀 ~ Login ~ loginData:', loginData)
|
||||||
setSession({
|
setSession({
|
||||||
...session,
|
...session,
|
||||||
...loginData?.result,
|
...loginData?.result,
|
||||||
|
|||||||
@ -57,9 +57,11 @@ export default function MemberInformationPopup() {
|
|||||||
<input type="text" className="input-frame" defaultValue={session.builderNo ?? ''} disabled />
|
<input type="text" className="input-frame" defaultValue={session.builderNo ?? ''} disabled />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button className="btn-frame n-blue icon" onClick={handlePwReset}>
|
{session.role !== 'Partner' && (
|
||||||
パスワードリセット<i className="btn-arr"></i>
|
<button className="btn-frame n-blue icon" onClick={handlePwReset}>
|
||||||
</button>
|
パスワードリセット<i className="btn-arr"></i>
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -114,9 +114,11 @@ export default function Header() {
|
|||||||
<li className="side-nav-item">
|
<li className="side-nav-item">
|
||||||
<button onClick={() => router.push('/inquiry/regist')}>1:1お問い合わせ登録</button>
|
<button onClick={() => router.push('/inquiry/regist')}>1:1お問い合わせ登録</button>
|
||||||
</li>
|
</li>
|
||||||
<li className="side-nav-item">
|
{session.role !== 'Partner' && (
|
||||||
<button onClick={() => router.push('/pw-reset')}>パスワードリセット</button>
|
<li className="side-nav-item">
|
||||||
</li>
|
<button onClick={() => router.push('/pw-reset')}>パスワードリセット</button>
|
||||||
|
</li>
|
||||||
|
)}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<div className="side-nav-footer">
|
<div className="side-nav-footer">
|
||||||
|
|||||||
@ -75,8 +75,19 @@ export const transformObjectKeys = (obj: any): any => {
|
|||||||
|
|
||||||
if (obj !== null && typeof obj === 'object') {
|
if (obj !== null && typeof obj === 'object') {
|
||||||
return Object.keys(obj).reduce((acc: any, key: string) => {
|
return Object.keys(obj).reduce((acc: any, key: string) => {
|
||||||
const camelKey = snakeToCamel(key)
|
let transformedKey = key
|
||||||
acc[camelKey] = transformObjectKeys(obj[key])
|
|
||||||
|
// Handle uppercase snake_case (e.g., USER_NAME -> userName)
|
||||||
|
if (/^[A-Z_]+$/.test(key)) {
|
||||||
|
transformedKey = snakeToCamel(key)
|
||||||
|
}
|
||||||
|
// Handle single uppercase word (e.g., ROLE -> role)
|
||||||
|
else if (/^[A-Z]+$/.test(key)) {
|
||||||
|
transformedKey = key.toLowerCase()
|
||||||
|
}
|
||||||
|
// Preserve existing camelCase
|
||||||
|
|
||||||
|
acc[transformedKey] = transformObjectKeys(obj[key])
|
||||||
return acc
|
return acc
|
||||||
}, {})
|
}, {})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
import { usePathname } from 'next/navigation'
|
import { usePathname, useRouter } from 'next/navigation'
|
||||||
|
|
||||||
import { useHeaderStore } from '@/store/header'
|
import { useHeaderStore } from '@/store/header'
|
||||||
import { usePopupController } from '@/store/popupController'
|
import { usePopupController } from '@/store/popupController'
|
||||||
@ -22,12 +22,19 @@ interface EdgeProviderProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function EdgeProvider({ children, sessionData }: EdgeProviderProps) {
|
export default function EdgeProvider({ children, sessionData }: EdgeProviderProps) {
|
||||||
|
const router = useRouter()
|
||||||
const pathname = usePathname()
|
const pathname = usePathname()
|
||||||
const { setBackBtn } = useHeaderStore()
|
const { setBackBtn } = useHeaderStore()
|
||||||
const { reset } = useSideNavState()
|
const { reset } = useSideNavState()
|
||||||
const { setAlertMsg, setAlertBtn, setAlert, setAlert2, setAlert2BtnYes, setAlert2BtnNo } = usePopupController()
|
const { setAlertMsg, setAlertBtn, setAlert, setAlert2, setAlert2BtnYes, setAlert2BtnNo } = usePopupController()
|
||||||
const { session, setSession } = useSessionStore()
|
const { session, setSession } = useSessionStore()
|
||||||
|
|
||||||
|
if (pathname === '/login') {
|
||||||
|
if (session?.isLoggedIn) {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 사용자 이벤트 트래킹 처리
|
* 사용자 이벤트 트래킹 처리
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user