수정
This commit is contained in:
@@ -72,6 +72,10 @@ class SecurityConfig {
|
|||||||
patterns.add("http://127.0.0.1:*");
|
patterns.add("http://127.0.0.1:*");
|
||||||
patterns.add("http://192.168.*.*:*");
|
patterns.add("http://192.168.*.*:*");
|
||||||
patterns.add("http://10.*.*.*:*");
|
patterns.add("http://10.*.*.*:*");
|
||||||
|
patterns.add("tauri://localhost");
|
||||||
|
patterns.add("tauri://*");
|
||||||
|
patterns.add("https://tauri.localhost");
|
||||||
|
patterns.add("http://tauri.localhost");
|
||||||
c.setAllowedOriginPatterns(patterns);
|
c.setAllowedOriginPatterns(patterns);
|
||||||
}
|
}
|
||||||
c.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
|
c.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
|
||||||
|
|||||||
@@ -26,5 +26,5 @@ app:
|
|||||||
secret: ${APP_JWT_SECRET:billcare-bizcare-homes-secret-key-must-be-long-enough-256bits}
|
secret: ${APP_JWT_SECRET:billcare-bizcare-homes-secret-key-must-be-long-enough-256bits}
|
||||||
expiration-ms: ${APP_JWT_EXPIRATION_MS:86400000}
|
expiration-ms: ${APP_JWT_EXPIRATION_MS:86400000}
|
||||||
cors:
|
cors:
|
||||||
origins: ${APP_CORS_ORIGINS:http://localhost:5174,http://localhost:82,http://127.0.0.1:82}
|
origins: ${APP_CORS_ORIGINS:http://localhost:5174,http://localhost:82,http://127.0.0.1:82,http://localhost:1420,https://billcare.exdev.co.kr,tauri://localhost,https://tauri.localhost,http://tauri.localhost}
|
||||||
upload-dir: ${APP_UPLOAD_DIR:./storage/uploads}
|
upload-dir: ${APP_UPLOAD_DIR:./storage/uploads}
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ services:
|
|||||||
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/billcare?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
|
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/billcare?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
|
||||||
SPRING_DATASOURCE_USERNAME: billcare
|
SPRING_DATASOURCE_USERNAME: billcare
|
||||||
SPRING_DATASOURCE_PASSWORD: billcare
|
SPRING_DATASOURCE_PASSWORD: billcare
|
||||||
APP_CORS_ORIGINS: ${APP_CORS_ORIGINS:-http://localhost:82,http://127.0.0.1:82,http://localhost:5174,https://billcare.exdev.co.kr}
|
APP_CORS_ORIGINS: ${APP_CORS_ORIGINS:-http://localhost:82,http://127.0.0.1:82,http://localhost:5174,http://localhost:1420,https://billcare.exdev.co.kr,tauri://localhost,https://tauri.localhost,http://tauri.localhost}
|
||||||
APP_UPLOAD_DIR: /app/storage/uploads
|
APP_UPLOAD_DIR: /app/storage/uploads
|
||||||
volumes:
|
volumes:
|
||||||
- billcare_uploads:/app/storage/uploads
|
- billcare_uploads:/app/storage/uploads
|
||||||
|
|||||||
@@ -83,8 +83,9 @@ export default function AgentShell({ shop = false }: Props) {
|
|||||||
setOpenCards((prev) => {
|
setOpenCards((prev) => {
|
||||||
const next = { ...prev }
|
const next = { ...prev }
|
||||||
sections.forEach((sec) => {
|
sections.forEach((sec) => {
|
||||||
|
// 기본은 접힘. 현재 경로가 속한 섹션만 펼침
|
||||||
if (next[sec.id] === undefined) {
|
if (next[sec.id] === undefined) {
|
||||||
next[sec.id] = sectionContainsPath(sec, location.pathname) || sec.items.length <= 1
|
next[sec.id] = sectionContainsPath(sec, location.pathname)
|
||||||
}
|
}
|
||||||
if (sectionContainsPath(sec, location.pathname)) next[sec.id] = true
|
if (sectionContainsPath(sec, location.pathname)) next[sec.id] = true
|
||||||
})
|
})
|
||||||
@@ -201,7 +202,7 @@ export default function AgentShell({ shop = false }: Props) {
|
|||||||
{!collapsed && (
|
{!collapsed && (
|
||||||
<aside className="leftpanel" style={{ width: panelWidth }}>
|
<aside className="leftpanel" style={{ width: panelWidth }}>
|
||||||
{sections.map((sec) => {
|
{sections.map((sec) => {
|
||||||
const open = openCards[sec.id] !== false
|
const open = openCards[sec.id] === true
|
||||||
const activeSec = sectionContainsPath(sec, location.pathname)
|
const activeSec = sectionContainsPath(sec, location.pathname)
|
||||||
return (
|
return (
|
||||||
<div className={`lp-card${activeSec ? ' is-active' : ''}`} key={sec.id}>
|
<div className={`lp-card${activeSec ? ' is-active' : ''}`} key={sec.id}>
|
||||||
|
|||||||
@@ -19,6 +19,29 @@ import { DownOutlined } from '@ant-design/icons'
|
|||||||
import client, { apiPrefix, unwrap, type ApiResponse } from '../../api/client'
|
import client, { apiPrefix, unwrap, type ApiResponse } from '../../api/client'
|
||||||
import { options } from './homesShared'
|
import { options } from './homesShared'
|
||||||
|
|
||||||
|
/** 진행현황 배지 색상 클래스 */
|
||||||
|
function progressBadgeClass(status?: string) {
|
||||||
|
const s = (status || '').trim()
|
||||||
|
if (s.startsWith('1.') || s.includes('접수완료')) return 'badge badge-ps-1'
|
||||||
|
if (s.startsWith('2.') || s.includes('고객통화')) return 'badge badge-ps-2'
|
||||||
|
if (s.startsWith('3.') || s.includes('서류검토')) return 'badge badge-ps-3'
|
||||||
|
if (s.startsWith('4.') || s.includes('개통완료')) return 'badge badge-ps-4'
|
||||||
|
if (s.startsWith('5.') || s.includes('사은품지급')) return 'badge badge-ps-5'
|
||||||
|
if (s.startsWith('6.') || s.includes('정산완료')) return 'badge badge-ps-6'
|
||||||
|
if (s.startsWith('9.') || s.includes('취소')) return 'badge badge-ps-9'
|
||||||
|
return 'badge'
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 사은품현황 배지 색상 클래스 */
|
||||||
|
function giftBadgeClass(status?: string) {
|
||||||
|
const s = (status || '').trim()
|
||||||
|
if (s === '미지급') return 'badge badge-gs-none'
|
||||||
|
if (s === '지급대기') return 'badge badge-gs-wait'
|
||||||
|
if (s === '지급완료') return 'badge badge-gs-done'
|
||||||
|
if (s === '반송') return 'badge badge-gs-return'
|
||||||
|
return 'badge'
|
||||||
|
}
|
||||||
|
|
||||||
type ReceptionRow = {
|
type ReceptionRow = {
|
||||||
id: number
|
id: number
|
||||||
orderDate?: string
|
orderDate?: string
|
||||||
@@ -678,7 +701,7 @@ export default function ReceptionListPage() {
|
|||||||
</td>
|
</td>
|
||||||
<td className="col-status floating-cell">
|
<td className="col-status floating-cell">
|
||||||
<p className="c-green">{o.employeeName || o.counselor || ''}</p>
|
<p className="c-green">{o.employeeName || o.counselor || ''}</p>
|
||||||
<p><span className="badge">{o.status || o.progressStatus || ''}</span></p>
|
<p><span className={progressBadgeClass(o.status || o.progressStatus)}>{o.status || o.progressStatus || ''}</span></p>
|
||||||
<div className="floating-layer">
|
<div className="floating-layer">
|
||||||
<p>개통일: {o.opened || o.openDate || '-'}</p>
|
<p>개통일: {o.opened || o.openDate || '-'}</p>
|
||||||
<p>해지일: {o.canceled || '-'}</p>
|
<p>해지일: {o.canceled || '-'}</p>
|
||||||
@@ -694,7 +717,7 @@ export default function ReceptionListPage() {
|
|||||||
<p className="fs11">{o.giftSended || o.giftDate || ''}</p>
|
<p className="fs11">{o.giftSended || o.giftDate || ''}</p>
|
||||||
</td>
|
</td>
|
||||||
<td className="col-gift">
|
<td className="col-gift">
|
||||||
<p><span className="badge">{o.giftStatus || ''}</span></p>
|
<p><span className={giftBadgeClass(o.giftStatus)}>{o.giftStatus || ''}</span></p>
|
||||||
<p>{num(giftAmt)}</p>
|
<p>{num(giftAmt)}</p>
|
||||||
</td>
|
</td>
|
||||||
<td className="col-cstatus floating-cell">
|
<td className="col-cstatus floating-cell">
|
||||||
|
|||||||
@@ -4357,7 +4357,22 @@ table.order-list .badge {
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
background: var(--badge-bg);
|
background: var(--badge-bg);
|
||||||
color: var(--badge-text);
|
color: var(--badge-text);
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
/* 진행현황 */
|
||||||
|
table.order-list .badge-ps-1 { background: #1677ff; color: #fff; } /* 1.접수완료 */
|
||||||
|
table.order-list .badge-ps-2 { background: #13c2c2; color: #fff; } /* 2.고객통화 */
|
||||||
|
table.order-list .badge-ps-3 { background: #722ed1; color: #fff; } /* 3.서류검토 */
|
||||||
|
table.order-list .badge-ps-4 { background: #52c41a; color: #fff; } /* 4.개통완료 */
|
||||||
|
table.order-list .badge-ps-5 { background: #fa8c16; color: #fff; } /* 5.사은품지급 */
|
||||||
|
table.order-list .badge-ps-6 { background: #2f54eb; color: #fff; } /* 6.정산완료 */
|
||||||
|
table.order-list .badge-ps-9 { background: #f5222d; color: #fff; } /* 9.취소 */
|
||||||
|
/* 사은품현황 */
|
||||||
|
table.order-list .badge-gs-none { background: #8c8c8c; color: #fff; } /* 미지급 */
|
||||||
|
table.order-list .badge-gs-wait { background: #faad14; color: #1f1f1f; } /* 지급대기 */
|
||||||
|
table.order-list .badge-gs-done { background: #52c41a; color: #fff; } /* 지급완료 */
|
||||||
|
table.order-list .badge-gs-return { background: #f5222d; color: #fff; } /* 반송 */
|
||||||
|
html.theme-light table.order-list .badge-gs-wait { color: #fff; }
|
||||||
table.order-list .floating-cell { position: relative; }
|
table.order-list .floating-cell { position: relative; }
|
||||||
table.order-list .floating-layer {
|
table.order-list .floating-layer {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
Reference in New Issue
Block a user