feat: new Tehrani brand logo, custom button audience, trim dashboard
- Replace the crown logo with logo.svg / logo_bk.svg across both frontends; regenerate favicons and PWA icons via scripts/generate-brand-icons.cjs - Custom button: admin chooses whether it shows before login or only after - Dashboard: drop the survey-majority banner, hide the custom-order row Co-authored-by: Cursor <cursoragent@cursor.com>
@@ -3,8 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" type="image/png" href="/favicon.png?v=2" />
|
||||
<link rel="shortcut icon" href="/favicon.ico?v=2" />
|
||||
<link rel="icon" type="image/png" href="/favicon.png?v=3" />
|
||||
<link rel="shortcut icon" href="/favicon.ico?v=3" />
|
||||
<title>%BRAND_TITLE%</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 37 KiB |
@@ -19,7 +19,7 @@
|
||||
>
|
||||
<div class="nav-header" :class="{ 'is-collapsed': collapsed }">
|
||||
<span class="nav-logo">
|
||||
<img src="../../assets/images/logo/brand-icon.png" alt="" />
|
||||
<img src="../../assets/images/logo/brand-logo.svg" alt="" />
|
||||
</span>
|
||||
<span v-if="!collapsed" class="nav-brand">
|
||||
<span class="nav-title">{{ title }}</span>
|
||||
@@ -207,8 +207,9 @@ function onClick({ key }: { key: string | number }) {
|
||||
padding: 0;
|
||||
}
|
||||
.nav-logo {
|
||||
width: 38px;
|
||||
height: 38px;
|
||||
/* wide: the mark is about 1.45:1 */
|
||||
width: 54px;
|
||||
height: 40px;
|
||||
flex-shrink: 0;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
@@ -218,7 +219,7 @@ function onClick({ key }: { key: string | number }) {
|
||||
box-shadow: 0 4px 12px -6px rgba(28, 45, 86, 0.35);
|
||||
}
|
||||
.nav-logo img {
|
||||
width: 64%;
|
||||
width: 86%;
|
||||
}
|
||||
.nav-brand {
|
||||
display: flex;
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<section class="hero" aria-hidden="true">
|
||||
<div class="brand-row">
|
||||
<div class="logo-chip">
|
||||
<img src="../../assets/images/logo/brand-icon.png" alt="" />
|
||||
<img src="../../assets/images/logo/brand-logo.svg" alt="" />
|
||||
</div>
|
||||
<span class="brand-name">{{ brand.nameEn }}</span>
|
||||
</div>
|
||||
@@ -83,7 +83,7 @@
|
||||
<div class="glass-card">
|
||||
<div class="card-head">
|
||||
<div class="logo-chip logo-chip--sm">
|
||||
<img src="../../assets/images/logo/brand-icon.png" :alt="brand.nameEn" />
|
||||
<img src="../../assets/images/logo/brand-logo.svg" :alt="brand.nameEn" />
|
||||
</div>
|
||||
<span class="eyebrow"><span class="dot"></span>پنل مدیریت</span>
|
||||
</div>
|
||||
@@ -347,7 +347,8 @@ async function loginJWT() {
|
||||
gap: 12px;
|
||||
}
|
||||
.logo-chip {
|
||||
width: 52px;
|
||||
/* wide: the mark is about 1.45:1 */
|
||||
width: 72px;
|
||||
height: 52px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
@@ -358,7 +359,7 @@ async function loginJWT() {
|
||||
0 10px 30px -8px rgba(242, 201, 92, 0.45);
|
||||
}
|
||||
.logo-chip img {
|
||||
width: 64%;
|
||||
width: 82%;
|
||||
}
|
||||
.brand-name {
|
||||
font-size: 16px;
|
||||
@@ -492,7 +493,7 @@ async function loginJWT() {
|
||||
justify-content: space-between;
|
||||
}
|
||||
.logo-chip--sm {
|
||||
width: 44px;
|
||||
width: 60px;
|
||||
height: 44px;
|
||||
border-radius: 14px;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="flex gap-6 w-full justify-center h-screen branch-login-page">
|
||||
<div class="flex flex-col h-screen items-center justify-center">
|
||||
<img
|
||||
src="../../assets/images/logo/brand-icon.png"
|
||||
src="../../assets/images/logo/brand-logo.svg"
|
||||
width="150"
|
||||
alt="login"
|
||||
class="mx-auto mb-5"
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
<ul>
|
||||
<li class="comment-item">
|
||||
<img src="../../../assets/images/logo/brand-icon.png" alt="comment author" class="img border" />
|
||||
<img src="../../../assets/images/logo/brand-logo.svg" alt="comment author" class="img border" />
|
||||
<div class="comment-body">
|
||||
<h5>ادمین</h5>
|
||||
<span v-if="tempRow.reply && tempRow.reply[0]" class="time">
|
||||
@@ -271,6 +271,12 @@ async function submitChanges(row: Record<string, any>) {
|
||||
border: 1px solid grey;
|
||||
border-radius: 50%;
|
||||
}
|
||||
img.img {
|
||||
object-fit: contain;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
@media (max-width: 575px) {
|
||||
.comment-item {
|
||||
|
||||
@@ -142,6 +142,12 @@
|
||||
un-checked-children="غیرفعال"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="نمایش به">
|
||||
<a-radio-group v-model:value="customButton.audience">
|
||||
<a-radio value="all">همه (قبل و بعد از ورود)</a-radio>
|
||||
<a-radio value="loggedIn">فقط بعد از ورود</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="عنوان دکمه">
|
||||
<a-input
|
||||
v-model:value="customButton.title"
|
||||
@@ -248,7 +254,12 @@ const tagsInputValue = ref('');
|
||||
const sliders = ref<{ image: string; link: string }[]>([]);
|
||||
|
||||
// ── custom button (Setting key: custom_button)
|
||||
const customButton = ref({ enabled: false, title: '', link: '' });
|
||||
const customButton = ref<{ enabled: boolean; title: string; link: string; audience: 'all' | 'loggedIn' }>({
|
||||
enabled: false,
|
||||
title: '',
|
||||
link: '',
|
||||
audience: 'all',
|
||||
});
|
||||
|
||||
// ── collections
|
||||
const collections = ref<{ id: string; title: string }[]>([]);
|
||||
@@ -360,6 +371,7 @@ async function saveCustomButton() {
|
||||
enabled: customButton.value.enabled,
|
||||
title,
|
||||
link,
|
||||
audience: customButton.value.audience,
|
||||
},
|
||||
});
|
||||
message.success('دکمه سفارشی ذخیره شد');
|
||||
@@ -428,6 +440,7 @@ onMounted(async () => {
|
||||
enabled: Boolean(btn.data.enabled),
|
||||
title: String(btn.data.title ?? ''),
|
||||
link: String(btn.data.link ?? ''),
|
||||
audience: btn.data.audience === 'loggedIn' ? 'loggedIn' : 'all',
|
||||
};
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||