Merge pull request #8 from won-ktds/front

store content source edit
This commit is contained in:
yyoooona 2025-06-20 09:51:37 +09:00 committed by GitHub
commit ba284378a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 167 additions and 41 deletions

View File

@ -148,25 +148,3 @@ spec:
name: http
selector:
app: smarketing-frontend
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: smarketing-frontend-ingress
namespace: ${namespace}
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: ${ingress_host}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: smarketing-frontend-service
port:
number: 80

View File

@ -7,14 +7,14 @@ const getApiUrls = () => {
const config = window.__runtime_config__ || {}
return {
GATEWAY_URL: config.GATEWAY_URL || 'http://20.1.2.3',
AUTH_URL: config.AUTH_URL || 'http://localhost:8081/api/auth',
MEMBER_URL: config.MEMBER_URL || 'http://localhost:8081/api/member',
STORE_URL: config.STORE_URL || 'http://localhost:8082/api/store',
CONTENT_URL: config.CONTENT_URL || 'http://localhost:8083/api/content',
MENU_URL: config.MENU_URL || 'http://localhost:8082/api/menu',
SALES_URL: config.SALES_URL || 'http://localhost:8082/api/sales',
RECOMMEND_URL: config.RECOMMEND_URL || 'http://localhost:8084/api/recommendations',
IMAGE_URL: config.IMAGE_URL || 'http://localhost:8082/api/images'
AUTH_URL: config.AUTH_URL || 'http://smarketing.20.249.184.228.nip.io/api/auth',
MEMBER_URL: config.MEMBER_URL || 'http://smarketing.20.249.184.228.nip.io/api/member',
STORE_URL: config.STORE_URL || 'http://smarketing.20.249.184.228.nip.io/api/store',
CONTENT_URL: config.CONTENT_URL || 'http://smarketing.20.249.184.228.nip.io/api/content',
MENU_URL: config.MENU_URL || 'http://smarketing.20.249.184.228.nip.io/api/menu',
SALES_URL: config.SALES_URL || 'http://smarketing.20.249.184.228.nip.io/api/sales',
RECOMMEND_URL: config.RECOMMEND_URL || 'http://smarketing.20.249.184.228.nip.io/api/recommendations',
IMAGE_URL: config.IMAGE_URL || 'http://smarketing.20.249.184.228.nip.io/api/images'
}
}

View File

@ -116,7 +116,7 @@
<v-text-field
v-if="selectedType === 'poster'"
v-model="formData.menuName"
label="음식명"
label="메뉴명"
variant="outlined"
:rules="menuNameRules"
required
@ -648,7 +648,7 @@
</template>
</v-list-item>
<v-list-item v-if="currentVersion.menuName || formData.menuName">
<v-list-item-title>음식</v-list-item-title>
<v-list-item-title>메뉴</v-list-item-title>
<template v-slot:append>
{{ currentVersion.menuName || formData.menuName }}
</template>
@ -850,8 +850,8 @@ const targetRules = [
]
const menuNameRules = [
v => !!v || '음식명은 필수입니다',
v => (v && v.length <= 50) || '음식명은 50자 이하로 입력해주세요'
v => !!v || '메뉴명은 필수입니다',
v => (v && v.length <= 50) || '메뉴명은 50자 이하로 입력해주세요'
]
const eventNameRules = [

View File

@ -78,17 +78,42 @@
<v-card-text class="pa-6">
<v-row>
<!-- 매장 이미지 -->
<!-- 매장 이미지 섹션 -->
<v-col cols="12" md="4" class="text-center">
<v-avatar size="120" class="mb-3">
<v-img
:src="storeInfo.imageUrl || '/images/store-placeholder.png'"
alt="매장 이미지"
/>
</v-avatar>
<div class="store-image-container mb-3">
<!-- 매장 사진이 있을 -->
<v-avatar
v-if="storeInfo.storeImage || storeInfo.imageUrl"
size="120"
class="store-avatar"
>
<v-img
:src="storeInfo.storeImage || storeInfo.imageUrl"
alt="매장 이미지"
/>
</v-avatar>
<!-- 매장 사진이 없을 - 업종별 이모지 표시 -->
<div
v-else
class="store-emoji-container d-flex align-center justify-center"
:style="{
width: '120px',
height: '120px',
borderRadius: '50%',
backgroundColor: getStoreColor(storeInfo.businessType),
fontSize: '48px'
}"
>
{{ getStoreEmoji(storeInfo.businessType) }}
</div>
</div>
<h3 class="text-h6 font-weight-bold">{{ storeInfo.storeName }}</h3>
<p class="text-grey">{{ storeInfo.businessType }}</p>
</v-col>
<!-- 기본 정보 -->
<v-col cols="12" md="8">
<v-row>
@ -1666,6 +1691,110 @@ onMounted(async () => {
showSnackbar('매장 정보를 불러오는 중 오류가 발생했습니다', 'error')
}
})
//
const getStoreEmoji = (businessType) => {
const emojiMap = {
'카페': '☕',
'레스토랑': '🍽️',
'한식': '🍲',
'중식': '🥢',
'일식': '🍣',
'양식': '🍝',
'치킨': '🍗',
'피자': '🍕',
'햄버거': '🍔',
'분식': '🍜',
'베이커리': '🥐',
'디저트': '🧁',
'아이스크림': '🍦',
'술집': '🍺',
'바': '🍸',
'펜션': '🏠',
'호텔': '🏨',
'게스트하우스': '🏡',
'마트': '🛒',
'편의점': '🏪',
'미용실': '💇',
'네일샵': '💅',
'세탁소': '👔',
'약국': '💊',
'병원': '🏥',
'헬스장': '💪',
'학원': '📚',
'키즈카페': '🧸',
'반려동물': '🐾',
'꽃집': '🌸',
'문구점': '✏️',
'서점': '📖',
'화장품': '💄',
'옷가게': '👗',
'신발가게': '👟',
'가구점': '🪑',
'전자제품': '📱',
'자동차': '🚗',
'주유소': '⛽',
'세차장': '🚿',
'부동산': '🏢',
'은행': '🏦',
'우체국': '📮',
'기타': '🏪'
}
return emojiMap[businessType] || '🏪'
}
//
const getStoreColor = (businessType) => {
const colorMap = {
'카페': '#8D6E63',
'레스토랑': '#FF7043',
'한식': '#D32F2F',
'중식': '#F57C00',
'일식': '#388E3C',
'양식': '#303F9F',
'치킨': '#FBC02D',
'피자': '#E64A19',
'햄버거': '#795548',
'분식': '#FF5722',
'베이커리': '#F57C00',
'디저트': '#E91E63',
'아이스크림': '#00BCD4',
'술집': '#FF9800',
'바': '#9C27B0',
'펜션': '#4CAF50',
'호텔': '#2196F3',
'게스트하우스': '#009688',
'마트': '#607D8B',
'편의점': '#3F51B5',
'미용실': '#E91E63',
'네일샵': '#9C27B0',
'세탁소': '#00BCD4',
'약국': '#4CAF50',
'병원': '#2196F3',
'헬스장': '#FF5722',
'학원': '#673AB7',
'키즈카페': '#FFEB3B',
'반려동물': '#795548',
'꽃집': '#E91E63',
'문구점': '#FF9800',
'서점': '#795548',
'화장품': '#E91E63',
'옷가게': '#9C27B0',
'신발가게': '#607D8B',
'가구점': '#8BC34A',
'전자제품': '#607D8B',
'자동차': '#424242',
'주유소': '#FF5722',
'세차장': '#00BCD4',
'부동산': '#795548',
'은행': '#2196F3',
'우체국': '#FF5722',
'기타': '#9E9E9E'
}
return colorMap[businessType] || '#9E9E9E'
}
</script>
<style scoped>
@ -2208,4 +2337,23 @@ onMounted(async () => {
.store-dialog-content::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}
.store-image-container {
position: relative;
display: inline-block;
}
.store-avatar {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.store-emoji-container {
margin: 0 auto;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
transition: transform 0.2s ease;
}
.store-emoji-container:hover {
transform: scale(1.05);
}
</style>