diff --git a/src/App.vue b/src/App.vue index 026fda2..d1cb225 100644 --- a/src/App.vue +++ b/src/App.vue @@ -15,7 +15,16 @@ > - + + @@ -103,7 +112,7 @@ const indicator = h(LoadingOutlined, { }) const displayVersion = getDisplayAppVersion(pkg.version) const showSplash = ref(true) -const primaryColor = getAppPrimaryColor(colors.primary || '#a72b77') +const primaryColor = getAppPrimaryColor(colors.primary || '#000000') useApplyDesktopLayoutClass() diff --git a/src/assets/css/main.less b/src/assets/css/main.less index b8e30ef..db90443 100644 --- a/src/assets/css/main.less +++ b/src/assets/css/main.less @@ -378,14 +378,39 @@ body { background-color: var(--app-primary-color, #a72b77) !important; } -.ant-slider-handle { - background-color: var(--app-primary-color, #a72b77) !important; - +.ant-radio-checked .ant-radio-inner,.ant-radio-group-solid .ant-radio-button-wrapper-checked { + border-color: var(--app-primary-color)!important; + background-color: var(--app-primary-color)!important } +.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover:before { + background-color: var(--app-primary-color)!important +} + +.ant-slider-handle { + background-color: var(--app-primary-color, #a72b77) !important; + border-color: var(--app-tertiary-color, #e0be7f) !important; +} +.ant-btn-primary{ + background-color: var(--app-primary-color, #a72b77) !important; + color: var(--app-tertiary-color, #ffffff) !important; + border-color: var(--app-primary-color, #a72b77) !important;; +} .ant-drawer-body{ padding: 0px !important; } .ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{ color: white !important; +} +.ant-spin{ + color: var(--app-tertiary-color, #000000) !important; +} +.ant-spin-dot-item{ + background-color: var(--app-tertiary-color, #a72b77) !important; + +} +.ant-btn:hover{ + color: var(--app-primary-color, #a72b77) !important; + border-color: var(--app-primary-color, #a72b77) !important;; + } \ No newline at end of file diff --git a/src/components/BasicPacks/BasicButton.vue b/src/components/BasicPacks/BasicButton.vue index 6cdf12d..cb5d476 100644 --- a/src/components/BasicPacks/BasicButton.vue +++ b/src/components/BasicPacks/BasicButton.vue @@ -2,7 +2,7 @@
diff --git a/src/components/BasicPacks/BasicIcon.vue b/src/components/BasicPacks/BasicIcon.vue index 1d1c291..26b3b7b 100644 --- a/src/components/BasicPacks/BasicIcon.vue +++ b/src/components/BasicPacks/BasicIcon.vue @@ -12,6 +12,7 @@ import icons from '@/components/BasicPacks/tools/icons/icons.json' import {usePrefix} from "@/utils/usePrefix"; import {computed, onMounted, ref, withDefaults, defineProps} from "vue"; +import { getAppPrimaryColor } from '@/config/brand-theme' interface Props { icon: string @@ -28,6 +29,11 @@ const tempIcon = ref() const refIcon = ref() tempIcon.value = icons[`${props.icon}`] as string const color = computed(() => { + if (!props.color) return props.color + const raw = String(props.color).trim() + if (raw.includes('--app-primary-color') || raw === 'primary') { + return getAppPrimaryColor() + } return props.color }) diff --git a/src/components/BasicPacks/BasicInput.vue b/src/components/BasicPacks/BasicInput.vue index cf17223..52abf6a 100644 --- a/src/components/BasicPacks/BasicInput.vue +++ b/src/components/BasicPacks/BasicInput.vue @@ -37,6 +37,7 @@ import {usePrefix} from "@/utils/usePrefix"; import {computed} from "vue"; import {usePrice} from "@/components/BasicPacks/BasicPriceInput/src/utils/usePrice"; import {persianToEnglishDigits, shouldNormalizeInputDigits} from '@/utils/persianDigits'; +import { getAppPrimaryColor } from '@/config/brand-theme' //Props interface Prop { @@ -55,12 +56,22 @@ interface Prop { placeHolder?: String } -const addonBgColor = computed(() => props.addonBgColor) -const addonTextColor = computed(() => props.addonTextColor) +function resolveCssColor(value?: String | string | null) { + if (!value) return value + const raw = String(value).trim() + if (raw.includes('--app-primary-color') || raw === 'primary') { + return getAppPrimaryColor() + } + return raw +} const props = withDefaults(defineProps(), { isPassword: false }) + +const addonBgColorResolved = computed(() => resolveCssColor(props.addonBgColor) || getAppPrimaryColor()) +const addonTextColorResolved = computed(() => resolveCssColor(props.addonTextColor) || 'white') + const emits = defineEmits(['update:value', 'onchange']) const localValue = computed({ @@ -118,8 +129,8 @@ const {prefixCls} = usePrefix('input') } .ant-input-group-addon { - background-color: v-bind(addonBgColor); - color: v-bind(addonTextColor); + background-color: v-bind(addonBgColorResolved); + color: v-bind(addonTextColorResolved); } } diff --git a/src/layouts/config/navigation.ts b/src/layouts/config/navigation.ts index 8c717a1..ed3a1bb 100644 --- a/src/layouts/config/navigation.ts +++ b/src/layouts/config/navigation.ts @@ -1,5 +1,10 @@ import type { AppNavItem } from '../types' -import { hasAbshodeTrading, hasHomePage, hasProductShop } from '@/config/project-profile' +import { + hasAbshodeTrading, + hasHomePage, + hasProductShop, + isKashkoolProject, +} from '@/config/project-profile' /** تب‌های پایین موبایل — کاربر لاگین‌شده (کشکول و مشابه) */ export const AUTH_PRIMARY_NAV: AppNavItem[] = [ @@ -39,6 +44,16 @@ export const AUTH_SECONDARY_NAV: AppNavItem[] = [ { id: 'rules', routeName: 'rules', label: 'قوانین و مقررات', icon: 'vuesax-linear:task' }, ] +/** منوی تمام‌صفحه کشکول — فقط این آیتم‌ها */ +export const KASHKOOL_OVERFLOW_NAV: AppNavItem[] = [ + { id: 'user', routeName: 'user', label: 'حساب کاربری', icon: 'vuesax-linear:user' }, + { id: 'physicalReceive', routeName: 'physicalReceive', label: 'دریافت طلای فیزیکی', icon: 'vuesax-linear:direct-inbox' }, + { id: 'notifyTrigger', routeName: 'notifyTrigger', label: 'هشدار قیمت', icon: 'vuesax-linear:bill' }, + { id: 'buyProduct', routeName: 'buyProduct', label: 'خرید محصول', icon: 'vuesax-linear:coin' }, + { id: 'giftCard', routeName: 'giftCard', label: 'ثبت کارت هدیه', icon: 'vuesax-linear:gift' }, + { id: 'rules', routeName: 'rules', label: 'قوانین و مقررات', icon: 'vuesax-linear:task' }, +] + function filterSecondaryNavItems(items: AppNavItem[]): AppNavItem[] { return items.filter((item) => { if (item.routeName === 'buyProduct' && !hasProductShop()) return false @@ -64,6 +79,7 @@ export function getPrimaryNavItems(isAuthenticated: boolean): AppNavItem[] { export function getSecondaryNavItems(isAuthenticated: boolean): AppNavItem[] { if (!isAuthenticated) return [] + if (isKashkoolProject()) return KASHKOOL_OVERFLOW_NAV return filterSecondaryNavItems(AUTH_SECONDARY_NAV) } @@ -74,5 +90,9 @@ export function getOverflowMenuItems(isAuthenticated: boolean): AppNavItem[] { ) } + if (isKashkoolProject()) { + return KASHKOOL_OVERFLOW_NAV + } + return filterSecondaryNavItems(AUTH_SECONDARY_NAV) } diff --git a/src/layouts/mobile/MobileBottomNav.vue b/src/layouts/mobile/MobileBottomNav.vue index 6866b00..5d0d90b 100644 --- a/src/layouts/mobile/MobileBottomNav.vue +++ b/src/layouts/mobile/MobileBottomNav.vue @@ -16,7 +16,12 @@
- +
@@ -46,6 +51,7 @@ import Icon from '@/components/BasicPacks/BasicIcon.vue' import { isToken } from '@/utils' import { useCartStore } from '@/store/cartStore' import { getAppIconUrl } from '@/config/brand-assets' +import { isKashkoolProject } from '@/config/project-profile' import { getPrimaryNavItems } from '../config/navigation' defineProps<{ @@ -59,6 +65,7 @@ defineEmits<{ const cartStore = useCartStore() const navLogo = getAppIconUrl() +const isKashkool = isKashkoolProject() const cartCount = computed(() => cartStore.itemCount || 0) const primaryItems = computed(() => getPrimaryNavItems(isToken())) @@ -80,4 +87,8 @@ const rightTabs = computed(() => primaryItems.value.slice(2)) .tab__icon :deep(.ant-badge) { color: inherit; } + +.nav-logo--white { + filter: brightness(0) invert(1); +} diff --git a/src/views/base/earnMoney/mobile/MobileEarnMoneyView.vue b/src/views/base/earnMoney/mobile/MobileEarnMoneyView.vue index 049bea7..4e391c6 100644 --- a/src/views/base/earnMoney/mobile/MobileEarnMoneyView.vue +++ b/src/views/base/earnMoney/mobile/MobileEarnMoneyView.vue @@ -1,4 +1,4 @@ -