second commit

This commit is contained in:
safavimohadeseh78 2025-08-05 14:41:17 +03:30
parent ca54d39e9d
commit 608bd7e8d8
339 changed files with 37876 additions and 0 deletions

5
.env.emexgold Normal file
View File

@ -0,0 +1,5 @@
VITE_PROJECT_BASE = emexgold
VITE_PROJECT_BASEURL = https://emexgold.com/server/
VITE_PROJECT_BASEURL_WS = wss://emexgold.com
VITE_PROJECT_TITLE = Emexgold | پنل مشتریان
VITE_PROJECT_LOGO = /emexLogo.svg

5
.env.marandigold Normal file
View File

@ -0,0 +1,5 @@
VITE_PROJECT_BASE = marandigold
VITE_PROJECT_BASEURL = https://marandiigold.ir/server/
VITE_PROJECT_BASEURL_WS = wss://ws.marandiigold.ir
VITE_PROJECT_TITLE = مرندی گلد | پنل مشتریان
VITE_PROJECT_LOGO = /marandiLogo.svg

5
.env.paramis Normal file
View File

@ -0,0 +1,5 @@
VITE_PROJECT_BASE = paramis
VITE_PROJECT_BASEURL = https://appgold.ir/kernel/
VITE_PROJECT_TITLE = پارامیس | پنل مشتریان
VITE_PROJECT_LOGO = /paramisLogo.png

7
.env.sepidehgold Normal file
View File

@ -0,0 +1,7 @@
VITE_PROJECT_BASE = sepidehgold
VITE_PROJECT_BASEURL = https://sepidehgold.com/server/
VITE_PROJECT_BASEURL_WS = wss://ws.sepidehgold.com
VITE_PROJECT_TITLE = سپیده گلد | پنل مشتریان
VITE_PROJECT_LOGO = /sepidehLogo.svg

5
.env.zarPlus Normal file
View File

@ -0,0 +1,5 @@
VITE_PROJECT_BASE = liman
VITE_PROJECT_BASEURL = https://liman.gold/server/
VITE_PROJECT_BASEURL_WS = wss://ws.liman.gold
VITE_PROJECT_TITLE = زر پلاس | پنل مشتریان
VITE_PROJECT_LOGO = /logo_desktop.svg

6
.env.zariran Normal file
View File

@ -0,0 +1,6 @@
VITE_PROJECT_BASE = zariran
VITE_PROJECT_BASEURL = https://zariran.org/server/
VITE_PROJECT_BASEURL_WS = wss://ws.liman.gold
VITE_PROJECT_TITLE = زرایران | پنل مشتریان
VITE_PROJECT_LOGO = /real-estate-logo-luxury-gradient-design-illustrations.jpg

5
.env.zarsun Normal file
View File

@ -0,0 +1,5 @@
VITE_PROJECT_BASE = zarsun
VITE_PROJECT_BASEURL = https://zarsun.gold/server/
VITE_PROJECT_TITLE = زرسان گلد | پنل مشتریان
VITE_PROJECT_LOGO = /zarsunLogo.svg

View File

@ -0,0 +1,67 @@
{
"globals": {
"Component": true,
"ComponentPublicInstance": true,
"ComputedRef": true,
"EffectScope": true,
"ExtractDefaultPropTypes": true,
"ExtractPropTypes": true,
"ExtractPublicPropTypes": true,
"InjectionKey": true,
"PropType": true,
"Ref": true,
"VNode": true,
"WritableComputedRef": true,
"computed": true,
"createApp": true,
"customRef": true,
"defineAsyncComponent": true,
"defineComponent": true,
"effectScope": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"inject": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onUnmounted": true,
"onUpdated": true,
"provide": true,
"reactive": true,
"readonly": true,
"ref": true,
"resolveComponent": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"toRaw": true,
"toRef": true,
"toRefs": true,
"toValue": true,
"triggerRef": true,
"unref": true,
"useAttrs": true,
"useCssModule": true,
"useCssVars": true,
"useSlots": true,
"watch": true,
"watchEffect": true,
"watchPostEffect": true,
"watchSyncEffect": true
}
}

15
.eslintrc.cjs Normal file
View File

@ -0,0 +1,15 @@
/* eslint-env node */
require('@rushstack/eslint-patch/modern-module-resolution')
module.exports = {
root: true,
'extends': [
'plugin:vue/vue3-essential',
'eslint:recommended',
'@vue/eslint-config-typescript',
'@vue/eslint-config-prettier/skip-formatting'
],
parserOptions: {
ecmaVersion: 'latest'
}
}

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

8
.prettierrc.json Normal file
View File

@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"tabWidth": 2,
"singleQuote": true,
"printWidth": 100,
"trailingComma": "none"
}

BIN
.prettierrc1.json Normal file

Binary file not shown.

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

182
auto-imports.d.ts vendored Normal file
View File

@ -0,0 +1,182 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const computed: typeof import('vue')['computed']
const createApp: typeof import('vue')['createApp']
const customRef: typeof import('vue')['customRef']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const effectScope: typeof import('vue')['effectScope']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const h: typeof import('vue')['h']
const inject: typeof import('vue')['inject']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
const markRaw: typeof import('vue')['markRaw']
const nextTick: typeof import('vue')['nextTick']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
const onDeactivated: typeof import('vue')['onDeactivated']
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
const onMounted: typeof import('vue')['onMounted']
const onRenderTracked: typeof import('vue')['onRenderTracked']
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
const onScopeDispose: typeof import('vue')['onScopeDispose']
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
const onUnmounted: typeof import('vue')['onUnmounted']
const onUpdated: typeof import('vue')['onUpdated']
const provide: typeof import('vue')['provide']
const reactive: typeof import('vue')['reactive']
const readonly: typeof import('vue')['readonly']
const ref: typeof import('vue')['ref']
const resolveComponent: typeof import('vue')['resolveComponent']
const shallowReactive: typeof import('vue')['shallowReactive']
const shallowReadonly: typeof import('vue')['shallowReadonly']
const shallowRef: typeof import('vue')['shallowRef']
const toRaw: typeof import('vue')['toRaw']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
const toValue: typeof import('vue')['toValue']
const triggerRef: typeof import('vue')['triggerRef']
const unref: typeof import('vue')['unref']
const useAttrs: typeof import('vue')['useAttrs']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVars: typeof import('vue')['useCssVars']
const useSlots: typeof import('vue')['useSlots']
const watch: typeof import('vue')['watch']
const watchEffect: typeof import('vue')['watchEffect']
const watchPostEffect: typeof import('vue')['watchPostEffect']
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
}
// for type re-export
declare global {
// @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
import('vue')
}
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
interface GlobalComponents {}
interface ComponentCustomProperties {
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
readonly computed: UnwrapRef<typeof import('vue')['computed']>
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
readonly h: UnwrapRef<typeof import('vue')['h']>
readonly inject: UnwrapRef<typeof import('vue')['inject']>
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
readonly ref: UnwrapRef<typeof import('vue')['ref']>
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
readonly unref: UnwrapRef<typeof import('vue')['unref']>
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly watch: UnwrapRef<typeof import('vue')['watch']>
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
}
}
declare module '@vue/runtime-core' {
interface GlobalComponents {}
interface ComponentCustomProperties {
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
readonly computed: UnwrapRef<typeof import('vue')['computed']>
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
readonly h: UnwrapRef<typeof import('vue')['h']>
readonly inject: UnwrapRef<typeof import('vue')['inject']>
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
readonly ref: UnwrapRef<typeof import('vue')['ref']>
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
readonly unref: UnwrapRef<typeof import('vue')['unref']>
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly watch: UnwrapRef<typeof import('vue')['watch']>
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
}
}

75
components.d.ts vendored Normal file
View File

@ -0,0 +1,75 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}
declare module 'vue' {
export interface GlobalComponents {
AAffix: typeof import('ant-design-vue/es')['Affix']
AAlert: typeof import('ant-design-vue/es')['Alert']
ABadge: typeof import('ant-design-vue/es')['Badge']
AButton: typeof import('ant-design-vue/es')['Button']
ACard: typeof import('ant-design-vue/es')['Card']
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
ADivider: typeof import('ant-design-vue/es')['Divider']
ADrawer: typeof import('ant-design-vue/es')['Drawer']
ADropdown: typeof import('ant-design-vue/es')['Dropdown']
AFloatButton: typeof import('ant-design-vue/es')['FloatButton']
AForm: typeof import('ant-design-vue/es')['Form']
AFormItem: typeof import('ant-design-vue/es')['FormItem']
AInput: typeof import('ant-design-vue/es')['Input']
AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
AMenu: typeof import('ant-design-vue/es')['Menu']
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
AModal: typeof import('ant-design-vue/es')['Modal']
APagination: typeof import('ant-design-vue/es')['Pagination']
ARadio: typeof import('ant-design-vue/es')['Radio']
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
ASegmented: typeof import('ant-design-vue/es')['Segmented']
ASelect: typeof import('ant-design-vue/es')['Select']
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
ASpin: typeof import('ant-design-vue/es')['Spin']
ASwitch: typeof import('ant-design-vue/es')['Switch']
ATable: typeof import('ant-design-vue/es')['Table']
ATabPane: typeof import('ant-design-vue/es')['TabPane']
ATabs: typeof import('ant-design-vue/es')['Tabs']
ATag: typeof import('ant-design-vue/es')['Tag']
ATextarea: typeof import('ant-design-vue/es')['Textarea']
ATooltip: typeof import('ant-design-vue/es')['Tooltip']
BaseDatePicker: typeof import('./src/components/BasicPacks/BaseDatePicker/src/BaseDatePicker.vue')['default']
BaseSwitch: typeof import('./src/components/BasicPacks/BaseSwitch/src/BaseSwitch.vue')['default']
BaseTable: typeof import('./src/components/BasicPacks/BaseTable/src/BaseTable.vue')['default']
BasicActionSheet: typeof import('./src/components/BasicPacks/BasicActionSheet.vue')['default']
BasicButton: typeof import('./src/components/BasicPacks/BasicButton.vue')['default']
BasicDraggableFileUpload: typeof import('./src/components/BasicPacks/BasicUploads/BasicDraggableFileUpload.vue')['default']
BasicIcon: typeof import('./src/components/BasicPacks/BasicIcon.vue')['default']
BasicInfoItem: typeof import('./src/components/BasicPacks/BasicInfoItem.vue')['default']
BasicInput: typeof import('./src/components/BasicPacks/BasicInput.vue')['default']
BasicModal: typeof import('./src/components/BasicPacks/BasicModal.vue')['default']
BasicPriceInput: typeof import('./src/components/BasicPacks/BasicPriceInput/src/BasicPriceInput.vue')['default']
BasicSelect: typeof import('./src/components/BasicPacks/BasicSelect.vue')['default']
BasicTags: typeof import('./src/components/BasicPacks/BasicTags/index.vue')['default']
BasicTextArea: typeof import('./src/components/BasicPacks/BasicTextArea.vue')['default']
BasicToggleTwoItem: typeof import('./src/components/BasicPacks/BasicToggleTwoItem.vue')['default']
BulkIcon: typeof import('./src/components/BulkIcon.vue')['default']
CustomTag: typeof import('./src/components/CustomTag.vue')['default']
DialogVantOneButton: typeof import('./src/components/DialogVantOneButton.vue')['default']
Icon: typeof import('./src/components/Icon.vue')['default']
IconButton: typeof import('./src/components/IconButton.vue')['default']
InfoItem: typeof import('./src/components/InfoItem.vue')['default']
InstallPWA: typeof import('./src/components/InstallPWA.vue')['default']
Menu: typeof import('./src/components/Menu.vue')['default']
MobileNavbar: typeof import('./src/components/MobileNavbar.vue')['default']
Navbar: typeof import('./src/components/Navbar.vue')['default']
ProductCard: typeof import('./src/components/ProductCard.vue')['default']
ProfileDrawer: typeof import('./src/components/ProfileDrawer.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
Setting: typeof import('./src/components/Setting.vue')['default']
UserSetting: typeof import('./src/components/UserSetting.vue')['default']
VanActionSheet: typeof import('vant/es')['ActionSheet']
VanDialog: typeof import('vant/es')['Dialog']
}
}

1
dev-dist/registerSW.js Normal file
View File

@ -0,0 +1 @@
if('serviceWorker' in navigator) navigator.serviceWorker.register('/dev-sw.js?dev-sw', { scope: '/', type: 'classic' })

16
index.html Normal file
View File

@ -0,0 +1,16 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml"/>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title> پنل مشتریان</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

9571
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

54
package.json Normal file
View File

@ -0,0 +1,54 @@
{
"name": "abshode",
"private": true,
"version": "1.0.6",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc && vite build",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
"format": "prettier --write src/"
},
"dependencies": {
"@rushstack/eslint-patch": "^1.7.2",
"@types/node": "^20.11.17",
"@vitejs/plugin-vue-jsx": "^4.1.2",
"@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^12.0.0",
"@vueuse/core": "^10.9.0",
"ant-design-vue": "^4.1.2",
"axios": "^1.6.8",
"dayjalali": "^1.0.1",
"echarts": "^5.5.0",
"jalaliday": "^2.3.0",
"lodash": "^4.17.21",
"moment": "^2.30.1",
"moment-jalaali": "^0.10.0",
"pinia": "^2.1.7",
"vant": "^4.9.4",
"vite-plugin-pwa": "^1.0.0",
"vue": "^3.4.19",
"vue-content-loader": "^2.0.1",
"vue-echarts": "^6.6.9",
"vue-router": "^4.2.5",
"vue3-otp-input": "^0.4.1"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.3",
"@vue/tsconfig": "^0.5.1",
"eslint": "^8.56.0",
"eslint-plugin-vue": "^9.21.1",
"less": "^4.2.0",
"less-loader": "^12.2.0",
"prettier": "3.2.5",
"typescript": "^5.2.2",
"unocss": "^66.1.2",
"unplugin-auto-import": "^0.17.5",
"unplugin-vue-components": "^0.26.0",
"vite": "^6.3.5",
"vue-tsc": "^2.2.10"
}
}

12
public/emexLogo.svg Normal file
View File

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1667" height="1667" viewBox="0 0 1667 1667">
<defs>
<style>
.cls-1 {
font-size: 83.333px;
text-anchor: middle;
font-family: Consolas;
}
</style>
</defs>
<text id="EXG" class="cls-1" transform="translate(815.176 1099.48) scale(12.351)"><tspan x="0">EXG</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 371 B

BIN
public/fav_emexgold.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
public/fav_limangold.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
public/fav_marandigold.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
public/fav_paramis.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
public/fav_sepidehgold.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
public/fav_zarsun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

4
public/logo_desktop.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.2 KiB

3
public/marandiLogo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 261 KiB

BIN
public/paramisLogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

3
public/sepidehLogo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 34 KiB

12
public/zarsunLogo.svg Normal file
View File

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1085" height="438" viewBox="0 0 1085 438">
<defs>
<style>
.cls-1 {
font-size: 83.333px;
text-anchor: middle;
font-family: Constantia;
}
</style>
</defs>
<text id="ZARSUN" class="cls-1" transform="translate(542.499 297.887) scale(3.194)"><tspan x="0">ZARSUN</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 376 B

458
src/App.vue Normal file
View File

@ -0,0 +1,458 @@
<template>
<AConfigProvider
direction="rtl"
:theme="{
token: {
fontFamily: 'ModamSemiPro',
colorPrimary: colors.primary,
colorLink: colors.primary,
colorLinkActive: colors.primary,
colorLinkHover: colors['primary']
}
}"
>
<div class="relative">
<InstallPWA v-if="userStore.user" class="fixed left-0 bottom-24 w-full flex justify-center z-50"/>
<AAffix :offset-top="0">
<div class="">
<div class="container mx-auto max-w-[92rem]">
<Navbar class="md:hidden" v-if="router.currentRoute.value.meta.showNavbar" />
<div class="hidden md:block relative" v-if="router.currentRoute.value.meta.showMenu">
<Menu />
<div class="flex justify-center absolute top-0 bottom-0 left-4">
<div class="hidden md:flex items-center">
<ADropdown placement="bottom">
<div
class="bg-[#E2E8F0] p-2 rounded-full flex justify-center items-center cursor-pointer w-12 h-12">
<img :src="avatar" alt="">
</div>
<template #overlay>
<div class="w-[334px] backUserSetting1 shadow-lg py-6 px-4 rounded-md">
<UserSetting />
</div>
</template>
</ADropdown>
</div>
</div>
<div class="flex justify-center absolute top-0 bottom-0 p-2 right-4">
<img :src="logo" alt="">
</div>
</div>
</div>
</div>
</AAffix>
<RouterView v-slot="{ Component }">
<KeepAlive :include="keepAliveList">
<Component class="container mx-auto max-w-[90rem]" :is="Component" />
</KeepAlive>
</RouterView>
<AAffix class="md:hidden bottom-4 p-4 fixed w-full">
<div class="menuBorder">
<Menu v-if="router.currentRoute.value.meta.showMenu" />
</div>
</AAffix>
</div>
</AConfigProvider>
<BasicModal width="390px" v-model:visible="openConfirm" custom-footer :loading="loading" :closable="false"
:maskClosable="false">
<div class="flex textCard1 flex-col items-center ">
<div>سفارش شما ثبت شد و در حال بررسی می باشد.</div>
<div>لطفا تا زمان تعیین وضعیت سفارش منتظر بمانید.</div>
<div class="typewriter p-4 mt-8">
<div class="slide"><i></i></div>
<div class="paper"></div>
<div class="keyboard"></div>
</div>
<BasicButton @click="$router.push('orders')" class="w-full buttonLogin border-primary">رفتن به لیست سفارشات</BasicButton>
<!-- <img :src="order" alt="" class="my-5">-->
<!-- <BasicButton @click="$router.push('orders')" class="w-full text-primary border-primary">رفتن به لیست سفارشات</BasicButton>-->
</div>
</BasicModal>
<BasicModal width="390px"
v-model:visible="openResult"
custom-footer
:loading="loading"
:closable="false"
:maskClosable="false">
<div v-if="orderResult?.sts === 4" class="flex flex-col items-center">
<div class="text-red-600 ">متاسفانه سفارش شما رد شد.</div>
<div class="textCard1 text-center">شما میتوانید در لیست محصولات، سفارش جدیدی ثبت کنید.</div>
<BasicIcon icon="vuesax-linear:clipboard-close" color="red" :size="80" class="my-5" />
<BasicButton @click="$router.push('products');openResult = false" class="w-full text-primary buttonLogin border-primary">رفتن
به لیست محصولات
</BasicButton>
</div>
<div v-if="orderResult?.sts === 2" class="flex flex-col items-center">
<div class="text-green-600">سفارش شما تایید شد.</div>
<div class="textCard1 text-center">شما میتوانید در لیست سفارشات، سفارش خود را پیگیری کنید.</div>
<BasicIcon icon="vuesax-linear:clipboard-tick" color="green" :size="80" class="my-5" />
<BasicButton @click="$router.push('orders');openResult = false" class="w-full text-primary border-primary">رفتن به
لیست سفارشات
</BasicButton>
</div>
<div v-if="orderResult?.sts === 6" class="flex flex-col items-center">
<div class="text-yellow-600">سفارش شما نتیجه ای در پی نداشت</div>
<div>شما میتوانید در لیست محصولات، سفارش جدیدی ثبت کنید</div>
<BasicIcon icon="vuesax-linear:clipboard-text" color="orange" :size="80" class="my-5" />
<BasicButton @click="$router.push('products');openResult = false" class="w-full text-primary border-primary">رفتن
به لیست محصولات
</BasicButton>
</div>
<div v-if="orderResult?.sts === 3" class="flex flex-col items-center">
<div class="text-yellow-600">سفارش شما رد و قیمت پیشنهادی جدیدی برای شما ثبت شد</div>
<div class=" mt-5 bg-yellow-50 w-full p-2 rounded-lg">
<div class="flex gap-3 justify-between w-full">
<div class="font-bold">مقدار:</div>
<div>{{ orderResult.amount }} {{ orderResult.product?.unit === 'گرم' ? 'گرم' : 'عدد' }}</div>
</div>
</div>
<div class=" mt-5 bg-blue-50 w-full p-2 rounded-lg">
<div class="flex gap-3 justify-between w-full">
<div class="font-bold">قیمت کل پیشنهادی:</div>
<div>{{ usePrice((stsOfferInfo?.offer * orderResult.amount) ?? 0) }}</div>
</div>
<div class="flex gap-3 justify-between w-full">
<div class="font-bold">قیمت هر {{ orderResult.product?.unit === 'گرم' ? 'گرم' : 'عدد' }} پیشنهادی:</div>
<div>{{ usePrice(stsOfferInfo?.offer ?? 0) }}</div>
</div>
<div v-if="orderResult.product?.unit === 'گرم'" class="flex gap-3 justify-between w-full">
<div class="font-bold">قیمت هر {{ orderResult.product?.unit === 'گرم' ? 'مثقال' : 'عدد' }} پیشنهادی:</div>
<div>{{ usePrice((stsOfferInfo?.offer_mesghal_price) ?? 0) }}</div>
</div>
</div>
<div class=" mt-5 bg-red-50 w-full p-2 rounded-lg">
<div class="flex gap-3 justify-between w-full">
<div class="font-bold">قیمت کل قبلی:</div>
<div>{{ usePrice(orderResult?.total_price ?? 0) }}</div>
</div>
<div class="flex gap-3 justify-between w-full">
<div class="font-bold">قیمت قبلی هر {{ orderResult.product?.unit === 'گرم' ? 'گرم' : 'عدد' }}:</div>
<div>{{ usePrice(orderResult?.price ?? 0) }}</div>
</div>
<div v-if="orderResult.product?.unit === 'گرم'" class="flex gap-3 justify-between w-full">
<div class="font-bold">قیمت قبلی هر {{ orderResult.product?.unit === 'گرم' ? 'مثقال' : 'عدد' }}:</div>
<div>{{ usePrice(parseInt(((orderResult?.price ?? 0) * 4.331802).toFixed(0)) ?? 0) }}</div>
</div>
</div>
<div class="grid grid-cols-2 gap-2 w-full mt-5">
<BasicButton class="bg-green-600 text-white border-solid" @click="confirmOrder()">تایید</BasicButton>
<BasicButton class="bg-red-600 text-white border-solid" @click="rejectOrder()">رد</BasicButton>
</div>
<!-- <img :src="order" alt="" class="my-5">-->
<!-- <BasicIcon icon="vuesax-linear:clipboard-tick" color="green" :size="80" class="my-5"/>-->
<!-- <BasicButton @click="$router.push('orders')" class="w-full text-primary border-primary">رفتن به لیست سفارشات</BasicButton>-->
</div>
</BasicModal>
<BasicModal width="20rem"
v-model:visible="versionDialog"
custom-footer
:loading="loading"
:closable="false"
:maskClosable="false">
<!-- <div class="flex flex-col items-center">-->
<div class="flex flex-col items-center">
<BasicIcon class="home_appear_fade_in_up text-center" color="orange"
icon="vuesax-linear:info-circle"
size="50" />
<!-- <div class="home_appear_fade_in_up delay-100">به روز رسانی</div>-->
<div class="home_appear_fade_in_up mt-2 textCard1">نسخه جدید در دسترس است</div>
<BasicButton class="mt-2 w-full buttonLogin" @click="update">به روز رسانی</BasicButton>
</div>
<!-- </div>-->
</BasicModal>
</template>
<script setup lang="ts">
import { colors } from './themeConfig.ts'
import Navbar from '@/components/Navbar.vue'
import Menu from '@/components/Menu.vue'
import router from '@/router'
import avatar from '@/assets/img/avatar.svg'
import UserSetting from '@/components/UserSetting.vue'
import { openResult, openConfirm, rejectOrder, confirmOrder, orderResult, stsOfferInfo } from '@/utils/order'
import { loading } from '@/utils'
import BasicModal from '@/components/BasicPacks/BasicModal.vue'
import BasicButton from '@/components/BasicPacks/BasicButton.vue'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import { usePrice } from './composable/usePrice'
import { update } from 'lodash'
import pkg from '../package.json'
import { useRegisterSW } from 'virtual:pwa-register/vue'
import { onMounted, ref, watch } from 'vue'
import InstallPWA from '@/components/InstallPWA.vue'
import { useUserStore } from '@/store/user'
import { usePWAStore } from '@/store/usePWAStore'
const versionDialog = ref<boolean>(false)
const keepAliveList = ['product-list']
const {updateServiceWorker} = useRegisterSW()
const projectBase = import.meta.env.VITE_PROJECT_BASE
const logo = import.meta.env.VITE_PROJECT_LOGO
const userStore = useUserStore()
function checkVersion() {
const version = localStorage.getItem('version')
// if (true) {
if (version != pkg.version) {
versionDialog.value = true
}
}
onMounted(() => {
checkVersion()
document.body.classList.add(import.meta.env.VITE_PROJECT_BASE)
document.querySelector("link[rel~='icon']")?.setAttribute('href', `/fav_${projectBase}.png`)
document.title = import.meta.env.VITE_PROJECT_TITLE
const pwaStore = usePWAStore()
window.addEventListener('beforeinstallprompt', (e: any) => {
console.log('✅ beforeinstallprompt fired')
e.preventDefault()
pwaStore.setPrompt(e)
})
/* setTimeout(() => {
showSplash.value = false
}, 2000)*/
})
function update() {
localStorage.setItem('version', pkg.version)
updateServiceWorker()
window.location.reload()
}
</script>
<style>
/* From Uiverse.io by Nawsome */
.typewriter {
--blue: #5C86FF;
--blue-dark: #275EFE;
--key: #fff;
--paper: #EEF0FD;
--text: #D3D4EC;
--tool: #FBC56C;
--duration: 3s;
position: relative;
-webkit-animation: bounce05 var(--duration) linear infinite;
animation: bounce05 var(--duration) linear infinite;
}
.typewriter .slide {
width: 92px;
height: 20px;
border-radius: 3px;
margin-left: 14px;
transform: translateX(14px);
background: linear-gradient(var(--blue), var(--blue-dark));
-webkit-animation: slide05 var(--duration) ease infinite;
animation: slide05 var(--duration) ease infinite;
}
.typewriter .slide:before, .typewriter .slide:after,
.typewriter .slide i:before {
content: "";
position: absolute;
background: var(--tool);
}
.typewriter .slide:before {
width: 2px;
height: 8px;
top: 6px;
left: 100%;
}
.typewriter .slide:after {
left: 94px;
top: 3px;
height: 14px;
width: 6px;
border-radius: 3px;
}
.typewriter .slide i {
display: block;
position: absolute;
right: 100%;
width: 6px;
height: 4px;
top: 4px;
background: var(--tool);
}
.typewriter .slide i:before {
right: 100%;
top: -2px;
width: 4px;
border-radius: 2px;
height: 14px;
}
.typewriter .paper {
position: absolute;
left: 24px;
top: -26px;
width: 40px;
height: 46px;
border-radius: 5px;
background: var(--paper);
transform: translateY(46px);
-webkit-animation: paper05 var(--duration) linear infinite;
animation: paper05 var(--duration) linear infinite;
}
.typewriter .paper:before {
content: "";
position: absolute;
left: 6px;
right: 6px;
top: 7px;
border-radius: 2px;
height: 4px;
transform: scaleY(0.8);
background: var(--text);
box-shadow: 0 12px 0 var(--text), 0 24px 0 var(--text), 0 36px 0 var(--text);
}
.typewriter .keyboard {
width: 120px;
height: 56px;
margin-top: -10px;
z-index: 1;
position: relative;
}
.typewriter .keyboard:before, .typewriter .keyboard:after {
content: "";
position: absolute;
}
.typewriter .keyboard:before {
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 7px;
background: linear-gradient(135deg, var(--blue), var(--blue-dark));
transform: perspective(10px) rotateX(2deg);
transform-origin: 50% 100%;
}
.typewriter .keyboard:after {
left: 2px;
top: 25px;
width: 11px;
height: 4px;
border-radius: 2px;
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
-webkit-animation: keyboard05 var(--duration) linear infinite;
animation: keyboard05 var(--duration) linear infinite;
}
@keyframes bounce05 {
85%, 92%, 100% {
transform: translateY(0);
}
89% {
transform: translateY(-4px);
}
95% {
transform: translateY(2px);
}
}
@keyframes slide05 {
5% {
transform: translateX(14px);
}
15%, 30% {
transform: translateX(6px);
}
40%, 55% {
transform: translateX(0);
}
65%, 70% {
transform: translateX(-4px);
}
80%, 89% {
transform: translateX(-12px);
}
100% {
transform: translateX(14px);
}
}
@keyframes paper05 {
5% {
transform: translateY(46px);
}
20%, 30% {
transform: translateY(34px);
}
40%, 55% {
transform: translateY(22px);
}
65%, 70% {
transform: translateY(10px);
}
80%, 85% {
transform: translateY(0);
}
92%, 100% {
transform: translateY(46px);
}
}
@keyframes keyboard05 {
5%, 12%, 21%, 30%, 39%, 48%, 57%, 66%, 75%, 84% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
9% {
box-shadow: 15px 2px 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
18% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 2px 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
27% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 12px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
36% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 12px 0 var(--key), 60px 12px 0 var(--key), 68px 12px 0 var(--key), 83px 10px 0 var(--key);
}
45% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 2px 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
54% {
box-shadow: 15px 0 0 var(--key), 30px 2px 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
63% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 12px 0 var(--key);
}
72% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 2px 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 10px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
81% {
box-shadow: 15px 0 0 var(--key), 30px 0 0 var(--key), 45px 0 0 var(--key), 60px 0 0 var(--key), 75px 0 0 var(--key), 90px 0 0 var(--key), 22px 10px 0 var(--key), 37px 12px 0 var(--key), 52px 10px 0 var(--key), 60px 10px 0 var(--key), 68px 10px 0 var(--key), 83px 10px 0 var(--key);
}
}
</style>

21
src/api/auth.ts Normal file
View File

@ -0,0 +1,21 @@
import axios from '@/composable/useAxios'
import type { Login } from '@/model/login'
import type { User } from '@/model/user'
export const loginWithPass = async (payload: Login) => {
return await axios.post('/auth/login', payload)
}
export const loginWithSMS = async (payload:Login) => {
return await axios.post<any>('/auth/login', payload)
}
export const getSepideh = async () => {
return await axios.post<any>('/auth/login')
}
export const registerCustomer = async (obj: User) => await axios.post<User>(`/auth/register`, obj)
export async function verifyToken(id: any,token:string){
return await axios.post<any>('/auth/verify',{provider: "customer",token,id})
}

20
src/api/credit.ts Normal file
View File

@ -0,0 +1,20 @@
import axios from '@/composable/useAxios'
import type { Package } from '@/model/package'
import type { Credit } from '@/model/credit'
import { useUserStore } from '@/store/user'
const store = useUserStore()
// export const getCreditList = async () => await axios.get<Credit[]>(`customer/product/credit`)
export const getMyCredit = async () => await axios.get<Credit[]>(`customer/credit/${store.user?.id}`)
export const createCredit = async (obj?: Credit[]): Promise<any> => {
return await axios.post<Credit[]>(`/customer/credit`, obj)
}
export const updateCredit = async (id:number,obj?: Credit[]): Promise<any> => {
return await axios.put<Credit[]>(`/customer/credit/${id}`, obj)
}
export const getOneCredit = async (id:number): Promise<any> => {
return await axios.get<Credit[]>(`/customer/credit/${id}`)
}

7
src/api/message.ts Normal file
View File

@ -0,0 +1,7 @@
import axios from '@/composable/useAxios'
import type { TableInput, TableOutput } from '@/model/table'
import type { Order } from '@/model/order'
export const getMessages = async (tbl: TableInput): Promise<TableOutput<Message>> => {
return await axios.get<TableOutput<Message>>(`/customer/messageNotification/getCustomerMessages`, tbl)
}

25
src/api/order.ts Normal file
View File

@ -0,0 +1,25 @@
import axios from '@/composable/useAxios'
import type { Check, Order } from '@/model/order'
import type { TableInput, TableOutput } from '@/model/table'
import type { Transaction } from '@/model/transaction'
export const createOrder = async (payload: Order) => {
return await axios.post('customer/order', payload)
}
export const orderTable = async (tbl: TableInput): Promise<TableOutput<Order>> => {
return await axios.post<TableOutput<Order>>(`/customer/order/table`, tbl)
}
export const checkOrder = async () => {
return await axios.get<Check>(`/customer/order/check`)
}
export const confirmOrderApi = async (id?: number) => {
return await axios.get(`/customer/order/verify/${id}`)
}
export const rejectOrderApi = async (id?: number) => {
return await axios.get(`/customer/order/cancel/${id}`)
}

27
src/api/package.ts Normal file
View File

@ -0,0 +1,27 @@
import axios from '@/composable/useAxios'
import type {TableInput, TableOutput} from "@/model/table.ts";
import type {Package} from "@/model/package.ts";
import type {CustomerSetting} from "@/model/login.ts";
export const getPackages = async (tbl: TableInput): Promise<TableOutput<Package>> => {
return await axios.post<TableOutput<Package>>(`/customer/package/table`, tbl)
}
export const createPackage = async (obj: Package): Promise<any> => {
return await axios.post<Package>(`/customer/agent/customer_setting`, obj)
}
export const updatePackage = async (id?: number,obj?: Package): Promise<any> => {
return await axios.put<Package>(`/customer/agent/customer_setting/${id}`, obj)
}
export const getPackageList = async () => await axios.get<Package[]>(`/customer/package/list`)
export const getOnePackage = async (id?: number) => await axios.get<Package>(`/customer/agent/customer_setting/${id}`)
export const getBasePackage = async (id?: number) => await axios.get<Package>(`/customer/package/${id}`)
export const getCustomerSetting = async () => await axios.get<CustomerSetting[]>(`/customer/agent/customer_setting`)
export const getGroupType = async () => await axios.get<CustomerSetting[]>(`/site/customer_cat`)

14
src/api/product.ts Normal file
View File

@ -0,0 +1,14 @@
import axios from '@/composable/useAxios'
import type { TableInput, TableOutput } from '@/model/table'
import type { Product } from '@/model/product'
import type { Credit } from '@/model/credit'
export const productTable = async (tbl: TableInput): Promise<TableOutput<Product>> => {
return await axios.post<TableOutput<Product>>(`/customer/product/table`, tbl)
}
export const getProductsList = async (): Promise<Product[]> => {
return await axios.get<Product[]>(`/customer/product/list`)
}
export const getProductCreditList = async () => await axios.get<Credit[]>(`/customer/product/credit`)

24
src/api/transaction.ts Normal file
View File

@ -0,0 +1,24 @@
import type {TableInput, TableOutput, TableOutputAccounting} from '@/model/table'
import type { Product } from '@/model/product'
import axios from '@/composable/useAxios'
import type { Transaction } from '@/model/transaction'
import type { Accounting, Accounting_ } from '@/model/accounting'
export const transactionTable = async (tbl: TableInput): Promise<TableOutput<Transaction>> => {
return await axios.post<TableOutput<Transaction>>(`/customer/transaction/table/me`, tbl)
}
export const accountingTable = async () => {
return await axios.get<TableOutputAccounting<Accounting>>(`/customer/fin_tahesab/table`)
}
export const accountingDetail = async (factor_code?:number) => {
return await axios.get<TableOutputAccounting<Accounting>>(`/customer/fin_tahesab/detail/${factor_code}`)
}
export const accountingDetailList = async (offset?:number) => {
return await axios.get<TableOutputAccounting<Accounting>>(`/customer/fin_tahesab/my_detail/${offset}`)
}
export const dateAccountingTable = async (startDate: string, endDate: string) => {
return await axios.post<TableOutputAccounting<Accounting_>>(`/customer/fin_tahesab/table`, {startDate, endDate})
}

24
src/api/transfer.ts Normal file
View File

@ -0,0 +1,24 @@
import type { Order } from '@/model/order'
import axios from '@/composable/useAxios'
import type { Transfer ,Withdraw } from '@/model/transfer'
import type { TableInput, TableOutput } from '@/model/table'
export const createTransfer = async (payload: Transfer) => {
return await axios.post('customer/havaleh', payload)
}
export const createWithdraw = async (payload: Withdraw) => {
return await axios.post('customer/fin', payload)
}
export const updateTransfer = async (id: number, payload: Transfer) => {
return await axios.put(`customer/havaleh/${id}`, payload)
}
export const transferTable = async (tbl: TableInput): Promise<TableOutput<Transfer>> => {
return await axios.post<TableOutput<Transfer>>(`/customer/havaleh/table`, tbl)
}
export const withdrawTable = async (tbl: TableInput): Promise<TableOutput<Transfer>> => {
return await axios.post<TableOutput<Transfer>>(`/customer/fin/table`, tbl)
}

35
src/api/user.ts Normal file
View File

@ -0,0 +1,35 @@
import axios from '@/composable/useAxios'
import type { User } from '@/model/user'
import type { TableInput, TableOutput } from '@/model/table'
import type { Order } from '@/model/order'
export const getUsers = async (tbl: TableInput): Promise<TableOutput<User>> => {
return await axios.post<TableOutput<User>>(`/customer/customer/table`, tbl)
}
export const getMe = async () => {
return await axios.get('/customer/me')
}
export const updateMe = async (payload: User) => {
return await axios.post<User>('/customer/me/update', payload)
}
export const createUser = async (payload: User) => {
return await axios.post('/customer/customer', payload)
}
export const updateUser = async (id: number, payload: User) => {
return await axios.put(`/customer/customer/${id}`, payload)
}
export const getUserById = async (id: number) => {
return await axios.get(`/customer/customer/${id}`)
}
export const getUserTable = async () => {
return await axios.post('/customer/customer/table')
}
export const getUsersList = async () => await axios.get<User[]>(`/customer/customer/list`)

14
src/api/wallet.ts Normal file
View File

@ -0,0 +1,14 @@
import type { TableInput, TableOutput } from '@/model/table'
import axios from '@/composable/useAxios'
import type { Wallet } from '@/model/wallet'
export const walletTable = async (tbl: TableInput): Promise<TableOutput<Wallet>> => {
return await axios.post<TableOutput<Wallet>>(`/customer/wallet/table`, tbl)
}
// export const walletList = async (): Promise<Wallet[]> => {
// return await axios.get<Wallet[]>(`/customer/wallet/list`)
// }
export const walletList = async (): Promise<[]> => {
return await axios.get<[]>(`/customer/fin_tahesab/mandeh`)
}

4
src/assets/css/ant.less Normal file
View File

@ -0,0 +1,4 @@
.ant-modal-content {
padding: 16px !important;
}

View File

@ -0,0 +1,288 @@
body.emexgold{
background: #ffffff;
color: #000000;
}
body.emexgold .menuItem{
color: #5F6368;
fill: #5F6368;
stroke: #5F6368;
}
body.emexgold .menuItemSelect svg{
color: #2563EB;
fill: #2563EB;
stroke: #2563EB;
}
body.emexgold .textColor1{
color: #616161;
}
body.emexgold .textColor2{
color: #9E9E9E;
}
body.emexgold .ant-tabs-tab-btn{
color: #9CA3AF;
}
body.emexgold .text_Primary{
color: #424242;
}
body.emexgold .text_Secondary{
color: #2563EB;
}
body.emexgold .background_Primary{
background: #424242;
}
body.emexgold .background_Secondary{
background: #F5F5F5;
}
body.emexgold .primaryColor{
color: #000000 ;
}
body.emexgold .ant-menu{
color: #FFFFFFFF ;
}
body.emexgold .text_green{
color: #4CAF50FF ;
}
body.emexgold .background_green{
background: #4CAF50FF ;
}
body.emexgold .text_red{
color: #F44336FF ;
}
body.emexgold .background_red{
background: #F44336FF ;
}
body.emexgold .ant-table-cell{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.emexgold .ant-table-wrapper .ant-table-thead>tr>th {
background: #fafafa ;
border-color: #e5e7eb ;
}
body.emexgold .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: #F44336FF;
}
body.emexgold .ab-base-table .ant-table-wrapper {
border: none ;
}
body.emexgold .ant-table-wrapper .ant-table {
color: #000000;
}
body.emexgold :where(.css-dev-only-do-not-override-ajjz7p).ant-btn-primary {
background-color: #000000 ;
}
body.emexgold .ant-modal .ant-modal-content {
background-color: #ffffff ;
}
body.emexgold .ant-modal-title{
background-color: #ffffff ;
color: #000000;
}
body.emexgold .ant-input{
background: #ffffff ;
border-color: #e5e7eb ;
color: #000000 ;
}
body.emexgold .ant-input-group-addon{
background: #2563EB ;
border-color: #e5e7eb ;
color: #ffffff;
}
body.emexgold .ant-form-item .ant-form-item-label >label {
color: #000000 ;
}
//User Setting
body.emexgold .backUserSetting1 {
background-color: #ffffff ;
}
body.emexgold .backUserSetting2 {
background-color: #fafafa ;
border-color: #e5e7eb ;
}
body.emexgold .iconUserSetting {
stroke: #000000 ;
fill: #000000 ;
}
body.emexgold .okButtonUserSetting {
background-color: #2563EB ;
border-color: #2563EB ;
color: #ffffff ;
}
body.emexgold .cancelButtonUserSetting {
color: #000000 ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
//Security
body.emexgold .backSecurity {
background-color: #ffffff ;
}
body.emexgold .ant-input-password {
//border: none ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
body.emexgold .ant-input-password.input {
color: #ffffff ;
}
//Quit
body.emexgold .exit {
color: #F44336 ;
background-color: #F44336 ;
}
body.emexgold .exitButton {
color: #000000 ;
background-color: #ffffff ;
}
//Login
body.emexgold .backLogin {
background-color: #ffffff;
}
body.emexgold .textColorLogin1 {
color: #424242;
}
body.emexgold .textColorLogin2 {
color: #9E9E9E;
}
body.emexgold .buttonLogin {
background-color: #2563EB ;
color: #ffffff ;
}
body.emexgold .ab-login .ant-tabs-nav-wrap {
background: #f9fafb ;
//border-color: @bg ;
}
body.emexgold .buttonHover{
border-color: #e5e7eb ;
}
//BuySell
body.emexgold .BuySell_Style{
//background: #FAFAFA;
border-color: #e5e7eb;
}
body.emexgold .BuySell_text1{
color: #616161;
}
body.emexgold .BuySell_text2{
color: @color6 ;
}
body.emexgold .BuySell_button{
background-color: #2563EB ;
color: #ffffff ;
}
body.emexgold .BuySell_cancelButton{
background-color: #ffffff ;
color: #000000 ;
}
body.emexgold .BuySell_button_{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.emexgold .BuySell_back{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.emexgold .mobileBuySell_back{
background: #ffffff ;
color: #000000 ;
}
//hover style
body.emexgold .ant-input:hover {
border-color: #2563EB;
border-inline-end-width: 1px;
}
//mobile Header
body.emexgold .backHeader{
background: #ffffff ;
}
//transaction card
body.emexgold .backCard{
background: #ffffff;
}
body.emexgold .textCard1{
color: #616161;
}
body.emexgold .textCard2{
color: #BDBDBD;
}
body.emexgold .textCard3{
color: #9E9E9E;
}
body.emexgold .MobileNavbar{
background: #ffffff;
border-color: #e5e7eb;
color: black;
}
body.emexgold .back_SearchBoxCard{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.emexgold .back_SearchBoxCard2{
background: #ffffff;
}
body.emexgold .searchIcon{
stroke: #d9d9d9 ;
}
body.emexgold .transferIcon{
stroke: #000000;
}
//ADrawer
body.emexgold .ADrawer{
background: #ffffff;
border-color: #e5e7eb;
}
body.emexgold .icon_MobileNavbar{
stroke: #000000 ;
}
body.emexgold .drawer-body{
background: #112234FF ;
}
//order card
body.emexgold .orderCard_text{
color: #616161 ;
}
body.emexgold .orderCard_back{
background: #ffffff;
}
body.emexgold :where(.css-dev-only-do-not-override-1yhcnou).ant-float-btn-primary .ant-float-btn-body{
background-color: #2563EB;
}
body.emexgold .ant-tabs-nav-wrap{
justify-content: center;
}
body.emexgold .avatarIcon {
fill: #5F6368;
stroke: #5F6368;
}
body.emexgold .ant-picker-footer{
background: #2563EB;
}
body.emexgold .ant-picker-dropdown .ant-picker-today-btn{
color: #ffffff;
}
body.emexgold .userCard:hover {
border-color: #2563EB;
}
body.emexgold .userCard {
background-color: #ffffff;
}
//User Card
body.emexgold .userCard:hover {
border-color: #2563EB;
}
body.emexgold .userCard {
background-color: #ffffff;
}
//product Price Card
body.emexgold .productPriceCard {
background-color: #ffffff;
}
body.emexgold .backProductPriceCard {
background-color: #2563EB;
}
body.emexgold .iconProductPriceCard {
color: #2563EB;
background-color: rgba(37, 99, 235, 0.29);
}

43
src/assets/css/fonts.less Normal file
View File

@ -0,0 +1,43 @@
@import (less) './var.less';
@font-face {
font-family: @prefixCls-font-family;
src: url('../fonts/iranSans/woff2/IRANSansWeb(FaNum).woff2') format('woff2');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: @prefixCls-font-family;
src: url('../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Light.woff2') format('woff2');
font-weight: 100;
font-style: normal;
}
@font-face {
font-family: @prefixCls-font-family;
src: url('../fonts/iranSans/woff2/IRANSansWeb(FaNum)_UltraLight.woff2') format('woff2');
font-weight: 300;
font-style: normal;
}
@font-face {
font-family: @prefixCls-font-family;
src: url('../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
}
@font-face {
font-family: @prefixCls-font-family;
src: url('../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Bold.woff2') format('woff');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: @prefixCls-font-family;
src: url('../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Black.woff2') format('woff');
font-weight: 900;
font-style: normal;
}

389
src/assets/css/liman.less Normal file
View File

@ -0,0 +1,389 @@
body.liman{
background: #191919;
color: #ffffff;
}
body.liman .card{
color: #ffffff;
border-radius: 15px;
border: 1px solid #FFBF65;
box-shadow: 0px 4px 4px 1px rgba(0, 0, 0, 0.55);
background: linear-gradient(
rgba(217, 217, 217, 0.07),
rgba(217, 217, 217, 0.07)
), #1A1A1A;
}
body.liman .golden-icon {
filter: drop-shadow(0 0 2px #FFBF65)
drop-shadow(0 0 4px #FFBF65);
}
body.liman .green-color {
color: #64BA4A;
}
body.liman .red-color {
color: #BA4A4A;
}
body.liman .section-title {
position: absolute;
top: -25px;
left: 50%;
transform: translateX(-50%);
z-index: 1;
width: 115px;
height: 49px;
display: flex;
justify-content: center;
align-items: center;
padding: 6px 12px;
border-radius: 12px;
background: #1A1A1A;
border: 1px solid #FFBF65;
color: #ffffff;
font-weight: 600;
font-size: 24px;
box-shadow: 0 2px 4px rgba(255, 191, 101, 0.5);
}
body.liman .menuItem{
color: #ffffff;
fill: #ffffff;
stroke: #ffffff;
}
body.liman .menuItemSelect svg{
color: #FFBF65;
fill: #FFBF65;
stroke: #FFBF65;
}
body.liman .ant-menu-light {
background: none;
}
body.liman .menuItemSelectText{
color: #FFBF65;
}
body.liman .menuItemText{
color: #ffffff;
fill: #ffffff;
stroke: #ffffff;
}
body.liman .menuBorder{
border: 1px solid #FFBF65;
border-radius: 20px;
}
body.liman .navbar{
border: 1px solid #FFBF65;
border-radius: 202px;
background: linear-gradient(
rgba(217, 217, 217, 0.07),
rgba(217, 217, 217, 0.07)
), #1A1A1A;
}
body.liman .productDrawer{
background: #191919;
border-top-left-radius: 45px;
border-top-right-radius: 45px;
border: 3px solid #FFBF65;
}
//***************************************
//***************************************
//***************************************
//***************************************
body.liman .textColor2{
color: #9E9E9E;
}
body.liman .ant-tabs-tab-btn{
color: #000000;
}
body.liman .text_Primary{
color: #424242;
}
body.liman .text_Secondary{
color: #2563EB;
}
body.liman .background_Primary{
background: #424242;
}
body.liman .background_Secondary{
background: #F5F5F5;
}
body.liman .primaryColor{
color: #000000 ;
}
body.liman .text_green{
color: #4CAF50FF ;
}
body.liman .background_green{
background: #4CAF50FF ;
}
body.liman .text_red{
color: #F44336FF ;
}
body.liman .background_red{
background: #F44336FF ;
}
body.liman .ant-table-cell{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.liman .ant-table-wrapper .ant-table-thead>tr>th {
background: #fafafa ;
border-color: #e5e7eb ;
}
body.liman .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: #F44336FF;
}
body.liman .ab-base-table .ant-table-wrapper {
border: none ;
}
body.liman .ant-table-wrapper .ant-table {
color: #000000;
}
body.liman :where(.css-dev-only-do-not-override-ajjz7p).ant-btn-primary {
background-color: #000000 ;
}
body.liman .ant-modal .ant-modal-content {
background-color: #ffffff ;
}
body.liman .ant-modal-title{
background-color: #ffffff ;
color: #000000;
}
body.liman .ant-input{
background: #ffffff ;
border-color: #e5e7eb ;
color: #000000 ;
}
body.liman .ant-input-group-addon{
background: #2563EB ;
border-color: #e5e7eb ;
color: #ffffff;
}
body.liman .ant-form-item .ant-form-item-label >label {
color: #000000 ;
}
//User Setting
body.liman .backUserSetting1 {
background-color: #ffffff ;
}
body.liman .backUserSetting2 {
background-color: #fafafa ;
border-color: #e5e7eb ;
}
body.liman .iconUserSetting {
stroke: #000000 ;
fill: #000000 ;
}
body.liman .okButtonUserSetting {
background-color: #2563EB ;
border-color: #2563EB ;
color: #ffffff ;
}
body.liman .cancelButtonUserSetting {
color: #000000 ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
//Security
body.liman .backSecurity {
background-color: #ffffff ;
}
body.liman .ant-input-password {
//border: none ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
body.liman .ant-input-password.input {
//color: @bg ;
}
//Quit
body.liman .exit {
color: #F44336 ;
background-color: #F44336 ;
}
body.liman .exitButton {
color: #000000 ;
background-color: #ffffff ;
}
//Login
body.liman .backLogin {
background-color: #ffffff;
}
body.liman .textColorLogin1 {
color: #424242;
}
body.liman .textColorLogin2 {
color: #9E9E9E;
}
body.liman .buttonLogin {
background-color: #2563EB ;
color: #ffffff ;
}
body.liman .textColorLogin1 {
color: #424242;
}
body.liman .ab-login .ant-tabs-nav-wrap {
background: #f9fafb ;
}
body.liman .buttonHover{
border-color: #e5e7eb ;
}
//BuySell
body.liman .BuySell_Style{
//background: #FAFAFA;
border-color: #e5e7eb;
}
body.liman .BuySell_text1{
color: #616161;
}
body.liman .BuySell_text2{
color: #000000 ;
}
body.liman .BuySell_button{
background-color: #2563EB ;
color: #ffffff ;
}
body.liman .BuySell_cancelButton{
background-color: #ffffff ;
color: #000000 ;
}
body.liman .BuySell_button_{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.liman .BuySell_back{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.liman .mobileBuySell_back{
background: #ffffff ;
color: #000000 ;
}
//hover style
body.liman .ant-input:hover {
border-color: #2563EB;
border-inline-end-width: 1px;
}
//mobile Header
body.liman .backHeader{
background: #ffffff ;
}
//transaction card
body.liman .backCard{
background: #ffffff;
}
body.liman .textCard1{
color: #616161;
}
body.liman .textCard2{
color: #BDBDBD;
}
body.liman .textCard3{
color: #9E9E9E;
}
body.liman .MobileNavbar{
background: #ffffff;
border-color: #e5e7eb;
color: #000000;
}
body.liman .back_SearchBoxCard{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.liman .back_SearchBoxCard2{
background: #ffffff;
}
body.liman .searchIcon{
stroke: #d9d9d9 ;
}
body.liman .transferIcon{
stroke: #000000;
}
//ADrawer
body.liman .ADrawer{
background: #ffffff;
border-color: #e5e7eb;
}
body.liman .icon_MobileNavbar{
stroke: #000000 ;
}
body.liman .drawer-body{
background: #112234FF ;
}
//order card
body.liman .orderCard_text{
color: #616161 ;
}
body.liman .orderCard_back{
background: #dfdfdf;
}
body.liman :where(.css-dev-only-do-not-override-1yhcnou).ant-float-btn-primary .ant-float-btn-body{
background-color: #2563EB;
}
body.liman :where(.css-dev-only-do-not-override-1yhcnou).ant-input-affix-wrapper{
background-color: #ffffff;
border-color: #d9d9d9;
}
body.liman .ant-pagination .ant-pagination-item a {
color: #616161;
}
body.liman .ant-select {
background-color: #ffffff;
}
body.liman :where(.css-dev-only-do-not-override-ajjz7p).ant-select:not(.ant-select-customize-input) .ant-select-selector {
position: relative;
background-color: #ffffff;
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body.liman :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
border-color: #2563EB;
}
body.liman :where(.css-dev-only-do-not-override-1yhcnou).ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{
//color: #2563EB;
}
body.liman .ant-select-selector, .ant-tooltip-open, .ant-select-selection-item, .ant-select-item .ant-select-item-option{
color: #616161;
}
body.liman .ant-tabs-nav-wrap{
justify-content: center;
}
body.liman .avatarIcon {
fill: #5F6368;
stroke: #5F6368;
}
//User Card
body.liman .userCard:hover {
border-color: #2563EB;
}
body.liman .userCard {
background-color: #ffffff;
}
//product Price Card
body.liman .productPriceCard {
background-color: #ffffff;
}
body.liman .backProductPriceCard {
background-color: #2563EB;
}
body.liman .iconProductPriceCard {
color: #2563EB;
background-color: rgba(37, 99, 235, 0.29);
}

64
src/assets/css/main.less Normal file
View File

@ -0,0 +1,64 @@
@import (less) './var.less';
@import (less) './fonts.less';
@import (less) './ant.less';
@import (less) './scroll.less';
@import (less) 'liman.less';
@import (less) './sepidehgold.less';
@import (less) './emexgold.less';
@import (less) './zariran.less';
@import (less) './marandigold.less';
@import (less) './paramis.less';
@import (less) './zarsun.less';
html {
scroll-behavior: smooth;
}
body {
font-family: @prefixCls-font-family !important;
background-color: @prefixCls-background-color-mobile;
direction: rtl !important;
height: unset !important;
}
@media (min-width: 768px) {
body {
background-color: @prefixCls-background-color;
}
}
pre, .ant-btn, span, label, input, div {
font-family: @prefixCls-font-family !important;
}
.en-font {
font-family: Arial !important;
direction: rtl !important;
}
.ant-form .ant-form-item .ant-form-item-label, .ant-form .ant-form-item .ant-form-item-control {
flex: 0 0 100%;
max-width: 100%;
}
.ant-form-item .ant-form-item-label {
margin: 0;
padding: 0 0 8px;
white-space: initial;
text-align: start;
}
.ant-modal .ant-modal-footer {
margin-top: 0;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s ease;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}

View File

@ -0,0 +1,265 @@
body.marandigold{
background: #ffffff;
color: #000000;
}
body.marandigold .menuItem{
color: #5F6368;
fill: #5F6368;
stroke: #5F6368;
}
body.marandigold .menuItemSelect svg{
color: #2563EB;
fill: #2563EB;
stroke: #2563EB;
}
body.marandigold .textColor1{
color: #616161;
}
body.marandigold .textColor2{
color: #9E9E9E;
}
body.marandigold .ant-tabs-tab-btn{
color: #9CA3AF;
}
body.marandigold .text_Primary{
color: #424242;
}
body.marandigold .text_Secondary{
color: #2563EB;
}
body.marandigold .background_Primary{
background: #424242;
}
body.marandigold .background_Secondary{
background: #F5F5F5;
}
body.marandigold .primaryColor{
color: #000000 ;
}
body.marandigold .ant-menu{
color: #FFFFFFFF ;
}
body.marandigold .text_green{
color: #4CAF50FF ;
}
body.marandigold .background_green{
background: #4CAF50FF ;
}
body.marandigold .text_red{
color: #F44336FF ;
}
body.marandigold .background_red{
background: #F44336FF ;
}
body.marandigold .ant-table-cell{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.marandigold .ant-table-wrapper .ant-table-thead>tr>th {
background: #fafafa ;
border-color: #e5e7eb ;
}
body.marandigold .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: #F44336FF;
}
body.marandigold .ab-base-table .ant-table-wrapper {
border: none ;
}
body.marandigold .ant-table-wrapper .ant-table {
color: #000000;
}
body.marandigold :where(.css-dev-only-do-not-override-ajjz7p).ant-btn-primary {
background-color: #000000 ;
}
body.marandigold .ant-modal .ant-modal-content {
background-color: #ffffff ;
}
body.marandigold .ant-modal-title{
background-color: #ffffff ;
color: #000000;
}
body.marandigold .ant-input{
background: #ffffff ;
border-color: #e5e7eb ;
color: #000000 ;
}
body.marandigold .ant-input-group-addon{
background: #2563EB ;
border-color: #e5e7eb ;
color: #ffffff;
}
body.marandigold .ant-form-item .ant-form-item-label >label {
color: #000000 ;
}
//User Setting
body.marandigold .backUserSetting1 {
background-color: #ffffff ;
}
body.marandigold .backUserSetting2 {
background-color: #fafafa ;
border-color: #e5e7eb ;
}
body.marandigold .iconUserSetting {
stroke: #000000 ;
fill: #000000 ;
}
body.marandigold .okButtonUserSetting {
background-color: #2563EB ;
border-color: #2563EB ;
color: #ffffff ;
}
body.marandigold .cancelButtonUserSetting {
color: #000000 ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
//Security
body.marandigold .backSecurity {
background-color: #ffffff ;
}
body.marandigold .ant-input-password {
//border: none ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
body.marandigold .ant-input-password.input {
color: #ffffff ;
}
//Quit
body.marandigold .exit {
color: #F44336 ;
background-color: #F44336 ;
}
body.marandigold .exitButton {
color: #000000 ;
background-color: #ffffff ;
}
//Login
body.marandigold .backLogin {
background-color: #ffffff;
}
body.marandigold .textColorLogin1 {
color: #424242;
}
body.marandigold .textColorLogin2 {
color: #9E9E9E;
}
body.marandigold .buttonLogin {
background-color: #2563EB ;
color: #ffffff ;
}
body.marandigold .ab-login .ant-tabs-nav-wrap {
background: #f9fafb ;
//border-color: @bg ;
}
body.marandigold .buttonHover{
border-color: #e5e7eb ;
}
//BuySell
body.marandigold .BuySell_Style{
//background: #FAFAFA;
border-color: #e5e7eb;
}
body.marandigold .BuySell_text1{
color: #616161;
}
body.marandigold .BuySell_text2{
color: @color6 ;
}
body.marandigold .BuySell_button{
background-color: #2563EB ;
color: #ffffff ;
}
body.marandigold .BuySell_cancelButton{
background-color: #ffffff ;
color: #000000 ;
}
body.marandigold .BuySell_button_{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.marandigold .BuySell_back{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.marandigold .mobileBuySell_back{
background: #ffffff ;
color: #000000 ;
}
//hover style
body.marandigold .ant-input:hover {
border-color: #2563EB;
border-inline-end-width: 1px;
}
//mobile Header
body.marandigold .backHeader{
background: #ffffff ;
}
//transaction card
body.marandigold .backCard{
background: #ffffff;
}
body.marandigold .textCard1{
color: #616161;
}
body.marandigold .textCard2{
color: #BDBDBD;
}
body.marandigold .textCard3{
color: #9E9E9E;
}
body.marandigold .MobileNavbar{
background: #ffffff;
border-color: #e5e7eb;
color: black;
}
body.marandigold .back_SearchBoxCard{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.marandigold .back_SearchBoxCard2{
background: #ffffff;
}
body.marandigold .searchIcon{
stroke: #d9d9d9 ;
}
body.marandigold .transferIcon{
stroke: #000000;
}
//ADrawer
body.marandigold .ADrawer{
background: #ffffff;
border-color: #e5e7eb;
}
body.marandigold .icon_MobileNavbar{
stroke: #000000 ;
}
body.marandigold .drawer-body{
background: #112234FF ;
}
//order card
body.marandigold .orderCard_text{
color: #616161 ;
}
body.marandigold .orderCard_back{
background: #ffffff;
}
body.marandigold :where(.css-dev-only-do-not-override-1yhcnou).ant-float-btn-primary .ant-float-btn-body{
background-color: #2563EB;
}
body.marandigold .ant-tabs-nav-wrap{
justify-content: center;
}
body.marandigold .avatarIcon {
fill: #5F6368;
stroke: #5F6368;
}
//User Card
body.marandigold .userCard:hover {
border-color: #2563EB;
}
body.marandigold .userCard {
background-color: #ffffff;
}

636
src/assets/css/paramis.less Normal file
View File

@ -0,0 +1,636 @@
@bg: #112234;
@color1: #ffffff;
@color2: #e3c27b;
@color3: #214368;
@color4: #4CAF50;
@color5: #F44336;
@color6: #000000;
@color7: #d9d9d9;
body.paramis{
background: @bg ;
color: @color1 ;
}
body.paramis .menuItem{
fill: @color1 ;
stroke: @color1 ;
}
body.paramis .menuItemSelect svg{
stroke: @color2 ;
color: @color2 ;
fill:@color2;
}
body.paramis .text_Primary{
color: @color3 ;
}
body.paramis .text_Secondary{
color: @color2 ;
}
body.paramis .background_Primary{
background: @color3 ;
}
body.paramis .background_Secondary{
background: @color2 ;
}
body.paramis .primaryColor{
background: @color3 ;
color: @color1 ;
}
body.paramis .ant-menu{
background: @color3 ;
color: @color1 ;
}
body.paramis .text_green{
color: @color4 ;
}
body.paramis .background_green{
background: @color4 ;
}
body.paramis .text_red{
color: @color5 ;
}
body.paramis .background_red{
background: @color5 ;
}
body.paramis .textColor1{
color: @color1 ;
}
body.paramis .textColor2{
color: @color1 ;
}
body.paramis .ant-tabs-tab-btn{
color: @color1 ;
}
body.paramis .ant-table-cell{
background: @color3 ;
border-color: @bg ;
}
body.paramis .ant-table-wrapper .ant-table-thead>tr>th {
background: @color2 ;
border-color: @bg ;
}
body.paramis .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: @bg ;
}
body.paramis .ab-base-table .ant-table-wrapper {
border: none ;
}
body.paramis .ant-table-wrapper .ant-table {
color: @color1;
}
body.paramis :where(.css-dev-only-do-not-override-ajjz7p).ant-btn-primary {
background-color: @color2 ;
}
body.paramis .ant-modal .ant-modal-content {
background-color: @color3 ;
}
body.paramis .ant-modal-title{
background-color: @color3 ;
color: @color1;
}
body.paramis .ant-input{
background: @bg ;
border: @bg ;
color: @color1 ;
}
body.paramis .ant-input::placeholder{
color: gray ;
}
body.paramis .ant-input-group-addon{
border-color: @bg ;
color: @color1;
}
body.paramis .ant-form-item .ant-form-item-label >label {
color: @color1 ;
}
//User Setting
body.paramis .backUserSetting1 {
background-color: @color3 ;
}
body.paramis .backUserSetting2 {
background-color: @bg ;
}
body.paramis .iconUserSetting {
stroke: @color2 ;
fill: @color2 ;
}
body.paramis .okButtonUserSetting {
background-color: @color2 ;
border-color: @color2 ;
color: @bg ;
}
body.paramis .cancelButtonUserSetting {
color: @color2 ;
border-color: @color2 ;
background-color: @color3 ;
}
//Security
body.paramis .backSecurity {
background-color: @color3 ;
}
body.paramis .ant-input-password {
border: none ;
background-color: @bg ;
}
body.paramis .ant-input-password.input {
color: @bg ;
}
//Quit
body.paramis .exit {
color: @color5 ;
background-color: @color5 ;
}
body.paramis .exitButton {
color: @color6 ;
background-color: @color2 ;
}
//Login
body.paramis .backLogin {
background-color: @color3 ;
}
body.paramis .buttonLogin {
background-color: @color2 ;
color: @color6 ;
}
body.paramis .textColorLogin1 {
color: @color1 ;
}
body.paramis .textColorLogin2 {
color: @color1 ;
}
body.paramis .ab-login .ant-tabs-nav-wrap {
background: @bg ;
border-color: @bg ;
}
body.paramis .buttonHover{
border-color: @color1 ;
}
//BuySell
body.paramis .glow-effect {
box-shadow: 3px 3px 10px rgba(34, 197, 94, 0.5);
}
body.paramis .glow-effect-red {
box-shadow: 3px 3px 10px rgba(220, 38, 38, 0.5);
}
body.paramis .BuySell_style{
border-color: @color2 ;
background: @bg ;
}
body.paramis .BuySell_text1{
color: @color2 ;
}
body.paramis .BuySell_text2{
color: @color1 ;
}
body.paramis .BuySell_button{
background-color: @color2 ;
color: @color6 ;
}
body.paramis .BuySell_cancelButton{
background-color: @color3 ;
color: @color2 ;
}
body.paramis .BuySell_button_{
border-color: @bg ;
background: @bg ;
}
body.paramis .BuySell_back{
border-color: @bg ;
background: @bg ;
}
body.paramis .mobileBuySell_back{
background: @color2 ;
color: @color6 ;
}
//hover style
body.paramis .ant-input:hover {
border-color: @color2;
}
//mobile Header
body.paramis .backHeader{
background: @color3 ;
}
body.paramis .borderHeader{
border-color: @color3 ;
}
//transaction card
body.paramis .backCard{
background: @color3 ;
}
body.paramis .textCard1{
color: @color1 ;
}
body.paramis .textCard2{
color: @color1 ;
}
body.paramis .textCard3{
color: @color1 ;
}
body.paramis .back_SearchBoxCard{
background: @bg ;
border-color: @bg ;
}
body.paramis .back_SearchBoxCard2{
background: @color3 ;
}
body.paramis .searchIcon{
stroke: @color1 ;
}
body.paramis .transferIcon{
stroke: @color1 ;
}
//ADrawer
body.paramis .ADrawer{
background: @color3 ;
color: @color1 ;
}
body.paramis .MobileNavbar{
background: @bg ;
border-color: @color2 ;
color: @color1 ;
}
body.paramis .icon_MobileNavbar{
stroke: @color2 ;
}
body.paramis .ant-drawer-body{
background: @color3 ;
}
//order card
body.paramis .orderCard_text{
color: @color1 ;
}
body.paramis .orderCard_back{
background: @color3 ;
}
body.paramis .transferBorder{
border-color: @color2 ;
}
body.paramis .submit_Withdraw{
background-color: @color2 ;
color: @color6 ;
}
body.paramis .ant-drawer-body{
background-color: @color3 ;
}
body.paramis .cancel_Withdraw{
background-color: @color3 ;
color: @color2 ;
border-color: @color2 ;
}
//*************
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-float-btn-primary .ant-float-btn-body{
background-color: #e3c27b;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-input-affix-wrapper{
background-color: #112234;
border-color: #0d1925;
}
body.paramis .ant-pagination .ant-pagination-prev button, .ant-pagination .ant-pagination-next button{
color: #ffffff;
}
body.paramis .ant-pagination .ant-pagination-item a {
color: #ffffff;
}
body.paramis .ant-select {
background-color: #214368;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-pagination .ant-pagination-item-active {
background-color: #214368;
border-color: #e3c27b;
}
body.paramis .ant-pagination-item-ellipsis {
color: #ffffff;
}
body.paramis .ant-select-selector, .ant-tooltip-open, .ant-select-selection-item, .ant-select-item .ant-select-item-option {
color: #ffffff;
}
body.paramis :where(.css-dev-only-do-not-override-ajjz7p).ant-select:not(.ant-select-customize-input) .ant-select-selector {
position: relative;
background-color: #214368;
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-select:not(.ant-select-customize-input) .ant-select-selector {
background-color: #214368;
border: 1px solid #e3c27b;
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody >tr >td {
border-top: 1px solid #1a3451;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
border-color: #e3c27b;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{
color: #e3c27b;
}
body.paramis .ant-tabs-nav-wrap{
justify-content: center;
}
body.paramis .avatarIcon {
fill: #ffffff;
stroke: #ffffff;
}
//************
body.paramis .ant-select-selection-item{
color: #ffffff;
}
body.paramis .ant-select-dropdown .ant-select-item {
color: #ffffff;
background: #1C3959;
}
body.paramis .ant-select-selection-item{
color: #ffffff;
}
body.paramis .ant-select-clear{
color: #ffffff;
background-color: #214368;
}
body.paramis .ant-input-group-addon {
color: #000000;
border: none;
background: #e3c27b;
}
body.paramis .configButton {
color: #ffffff;
background: #112234;
}
body.paramis .configIcon {
color: #ffffff ;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
color: @color2;
border-color: @color2;
}
body.paramis .buttonRegister {
background: #1C3959;
border-color: #E3C27BFF ;
}
body.paramis .accountingCard_text{
color: #112234 ;
}
body.paramis .accountingCard_back{
background: @color3 ;
}
body.paramis .ant-switch-inner{
background: #1C3959 ;
}
body.paramis .ant-radio-inner{
background: #1C3959;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector {
border-color: #E3C27BFF;
}
body.paramis .ant-btn-primary {
background: #E3C27BFF;
&:hover {
background-color: #ffffff;
color: #E3C27BFF;
}
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-primary:not(:disabled):active {
background: #E3C27BFF;
}
body.paramis :where(.css-1yhcnou).ant-btn-primary:not(:disabled):hover {
background: #ffffff;
color: #E3C27BFF;
}
body.paramis .avatarIcon {
fill: #ffffff;
stroke: #ffffff;
}
body.paramis .ant-segmented .ant-segmented-item-selected {
background: #E3C27BFF ;
color: #1C3959;
}
body.paramis .ant-tabs-ink-bar {
background: #E3C27BFF !important;
color: #1C3959 !important;
}
body.paramis .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: #E3C27BFF !important;
}
body.paramis .ab-login .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: #000000 !important;
}
body.paramis .ant-picker{
background-color: #214368;
border: none;
}
body.paramis .ant-picker-input{
color: #ffffff;
}
body.paramis .ant-picker .ant-picker-input >input{
color: #ffffff !important;
}
body.paramis .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{
background: #1C3959 ;
color:white !important;
}
body.paramis .ant-picker-date-panel,.ant-picker-footer{
background:#E3C27BFF ;
color:white !important;
}
body.paramis .ant-picker-dropdown .ant-picker-today-btn{
color:#1C3959;
}
body.paramis .ant-picker .ant-picker-clear{
background: none;
}
body.paramis .skeleton{
background: #1C3959;
color:#1C3959;
}
body.paramis .rc-virtual-list{
background: #1C3959;
}
body.paramis .ant-select-dropdown .ant-select-item-option:hover:not(.ant-select-item-option-disabled) {
background:#E3C27BFF;
color: #ffffff !important;
}
body.paramis .ant-dropdown-menu-item {
color: #ffffff !important;
}
body.paramis .ant-select-dropdown {
border: 2px solid #E3C27BFF !important;
background: #1C3959 !important;
}
body.paramis .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{
border-color: #E3C27BFF;
}
body.paramis .birthDate.ant-picker{
background: #112234 !important;
border-color: #E3C27BFF;
}
body.paramis .ant-btn-primary.ant-btn-dangerous{
background: #ff4d4f !important;
}
body.paramis .ant-modal-confirm-title {
color: #ffffff;
}
body.paramis .ant-select-selection-item {
color: #ffffff;
}
body.paramis .ant-select-dropdown .ant-select-item {
color: #ffffff;
background: #1C3959;
}
body.paramis .ant-select-selection-item {
color: #ffffff;
}
body.paramis .ant-select-clear {
color: #ffffff;
background-color: #214368;
}
body.paramis .ant-input-group-addon {
color: #000000;
border: none;
background: #e3c27b;
}
body.paramis .configButton {
color: #ffffff;
background: #112234;
}
body.paramis .configIcon {
color: #ffffff ;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
color: @color2;
border-color: @color2;
}
body.paramis .buttonRegister {
background: #1C3959;
border-color: #E3C27BFF ;
}
body.paramis .accountingCard_text{
color: #112234 ;
}
body.paramis .accountingCard_back{
background: @color3 ;
}
body.paramis .ant-switch-inner{
background: #1C3959 ;
}
body.paramis .ant-radio-inner{
background: #1C3959;
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector {
border-color: #E3C27BFF;
}
body.paramis .ant-btn-primary {
background: #E3C27BFF;
&:hover {
background-color: #ffffff;
color: #E3C27BFF;
}
}
body.paramis :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-primary:not(:disabled):active {
background: #E3C27BFF;
}
body.paramis :where(.css-1yhcnou).ant-btn-primary:not(:disabled):hover {
background: #ffffff;
color: #E3C27BFF;
}
body.paramis .avatarIcon {
fill: #ffffff;
stroke: #ffffff;
}
body.paramis .ant-segmented .ant-segmented-item-selected {
background: #E3C27BFF ;
color: #1C3959;
}
body.paramis .ant-tabs-ink-bar {
background: #E3C27BFF !important;
color: #1C3959 !important;
}
body.paramis .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: #E3C27BFF !important;
}
body.paramis .ab-login .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: #000000 !important;
}
body.paramis .ant-picker{
background-color: #214368;
border: none;
}
body.paramis .ant-picker-input{
color: #ffffff;
}
body.paramis .ant-picker .ant-picker-input >input{
color: #ffffff !important;
}
body.paramis .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{
background: #1C3959 ;
color:white !important;
}
body.paramis .ant-picker-date-panel,.ant-picker-footer{
background:#E3C27BFF ;
color:white !important;
}
body.paramis .ant-picker-dropdown .ant-picker-today-btn{
color:#1C3959;
}
body.paramis .ant-picker .ant-picker-clear{
background: none;
}
body.paramis .skeleton{
background: #1C3959;
color:#1C3959;
}
body.paramis .rc-virtual-list{
background: #1C3959;
}
body.paramis .ant-select-dropdown .ant-select-item-option:hover:not(.ant-select-item-option-disabled) {
background:#E3C27BFF;
color: #ffffff !important;
}
body.paramis .ant-dropdown-menu-item {
color: #ffffff !important;
}
body.paramis .ant-select-dropdown {
border: 2px solid #E3C27BFF !important;
background: #1C3959 !important;
}
body.paramis .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{
border-color: #E3C27BFF;
}
body.paramis .birthDate.ant-picker{
background: #112234 !important;
border-color: #E3C27BFF;
}
body.paramis .ant-btn-primary.ant-btn-dangerous{
background: #ff4d4f !important;
}
body.paramis .ant-modal-confirm-title {
color: #ffffff;
}
body.paramis input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active{
-webkit-background-clip: text;
-webkit-text-fill-color: #ffffff;
transition: background-color 5000s ease-in-out 0s;
box-shadow: inset 0 0 20px 20px #112234;
}
//User Card
body.paramis .userCard:hover {
border-color: #E3C27BFF;
}
body.paramis .userCard {
background-color: #1e2a3a;
border-color: #37414c;
}
//product Price Card
body.paramis .productPriceCard {
background-color: #1e2a3a;
border-color: #616161;
}
body.paramis .backProductPriceCard {
background-color: #E3C27BFF;
}
body.paramis .iconProductPriceCard {
color: #b59c65;
background-color: #e3d8c7;
}

145
src/assets/css/scroll.less Normal file
View File

@ -0,0 +1,145 @@
//ok Code
/*html {
overflow: scroll;
overflow-x: hidden;
}*/
.scroll-none{
&::-webkit-scrollbar {
width: 0; /* Remove scrollbar space */
background: transparent; /* Optional: just make scrollbar invisible */
}
/* Optional: show position indicator in red */
&::-webkit-scrollbar-thumb {
//background: #FF0000;
}
}
//scroll style
::-webkit-scrollbar {
background-color: initial;
//background-color: red;
}
::-webkit-scrollbar {
width: 0.25rem !important;
height: 0.25rem !important;
}
::-webkit-scrollbar-thumb {
--tw-bg-opacity: 1 !important;
background-color: rgb(203 213 225/var(--tw-bg-opacity))!important;
//background-color: #E2E8F0 !important;
//background-color:red;
}
::-webkit-scrollbar-thumb {
border-radius: 0.25rem !important;
}
/*.scrollbar-track\:\!bg-slate-100::-webkit-scrollbar-track {
--tw-bg-opacity: 1!important;
// background-color: rgb(241 245 249/var(--tw-bg-opacity))!important;
// background-color: green
}*/
::-webkit-scrollbar-track {
border-radius: 0.25rem!important;
}
/*
.beauty-scroll{
scrollbar-color: red green;
scrollbar-width: thin;
-ms-overflow-style:none;
position: relative;
&::-webkit-scrollbar{
width: 3px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 3px;
background: burlywood;
}
&::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0);
border-radius: 3px;
background: aqua;
}
}
*/
/*&::-webkit-scrollbar{
width: 3px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 3px;
background: burlywood;
}
&::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0);
border-radius: 3px;
background: aqua;
}*/
/* custom scrollbar */
/*::-webkit-scrollbar {
width: 17px;
}
::-webkit-scrollbar-track {
background-color: transparent;
}
::-webkit-scrollbar-thumb {
background-color: #d6dee1;
border-radius: 20px;
border: 6px solid transparent;
background-clip: content-box;
}
::-webkit-scrollbar-thumb:hover {
background-color: #a8bbbf;
}*/
//ok Code
/*
html {
overflow: scroll;
overflow-x: hidden;
}
::-webkit-scrollbar {
width: 0; !* Remove scrollbar space *!
background: transparent; !* Optional: just make scrollbar invisible *!
}
!* Optional: show position indicator in red *!
::-webkit-scrollbar-thumb {
//background: #FF0000;
}
*/
//ok code
/*html {
overflow: scroll;
}
::-webkit-scrollbar {
width: 0px;
background: transparent; !* make scrollbar transparent *!
}*/

View File

@ -0,0 +1,541 @@
@bg: #112234;
@color3: #214368;
@color1: #ffffff;
@color2: #e3c27b;
@color4: #4CAF50;
@color5: #F44336;
@color6: #000000;
@color7: #d9d9d9;
body.sepidehgold{
background: @bg ;
color: @color1 ;
.ant-table-tbody > tr.ant-table-row td {
pointer-events: none;
}
.ant-radio-wrapper .ant-radio-checked .ant-radio-inner {
background:#E3C27BFF;
border-color:#ffffff;
}
}
body.sepidehgold .menuItem{
fill: @color1 ;
stroke: @color1 ;
}
body.sepidehgold .menuItemSelect svg {
stroke: @color2 ;
color: @color2 ;
fill:@color2;
}
body.sepidehgold .text_Primary{
color: @color3 ;
}
body.sepidehgold .text_Secondary{
color: @color2 ;
}
body.sepidehgold .border_Secondary{
border-color: @color2 ;
}
body.sepidehgold .background_Primary{
background: @color3 ;
}
body.sepidehgold .background_Secondary{
background: @color2 ;
}
body.sepidehgold .primaryColor{
background: @color3 ;
color: @color1 ;
}
body.sepidehgold .ant-menu{
background: @color3 ;
color: @color1 ;
}
body.sepidehgold .text_green{
color: @color4 ;
}
body.sepidehgold .background_green{
background: @color4 ;
}
body.sepidehgold .text_red{
color: @color5 ;
}
body.sepidehgold .background_red{
background: @color5 ;
}
body.sepidehgold .textColor1{
color: @color1 ;
}
body.sepidehgold .textColor2{
color: @color1 ;
}
body.sepidehgold .ant-tabs-tab-btn{
color: @color1 ;
}
body.sepidehgold .ant-table-cell{
background: @color3 ;
border-color: @bg ;
}
body.sepidehgold .ant-table-wrapper .ant-table-thead>tr>th {
background: @color2 ;
//border-color: @bg ;
}
body.sepidehgold .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: @bg ;
}
body.sepidehgold .ab-base-table .ant-table-wrapper {
border: none ;
}
body.sepidehgold .ant-table-wrapper .ant-table {
color: @color1;
}
body.sepidehgold .ant-modal .ant-modal-content {
background-color: @color3 ;
}
body.sepidehgold .ant-modal-title{
background-color: @color3 ;
color: @color1;
}
body.sepidehgold .ant-input{
background: @bg ;
border-color: @bg ;
color: @color1 ;
}
body.sepidehgold .ant-input::placeholder{
color: gray ;
}
body.sepidehgold .ant-input-group-addon{
border-color: @bg ;
color: @color1;
}
body.sepidehgold .ant-form-item .ant-form-item-label >label {
color: @color1 ;
}
//User Setting
body.sepidehgold .backUserSetting1 {
background-color: @color3 ;
}
body.sepidehgold .backUserSetting2 {
background-color: @bg ;
}
body.sepidehgold .iconUserSetting {
stroke: @color2 ;
fill: @color2 ;
}
body.sepidehgold .okButtonUserSetting {
background-color: @color2 ;
border-color: @color2 ;
color: @bg ;
}
body.sepidehgold .cancelButtonUserSetting {
color: @color2 ;
border-color: @color2 ;
background-color: @color3 ;
}
//Security
body.sepidehgold .backSecurity {
background-color: @color3 ;
}
body.sepidehgold .ant-input-password {
border: none ;
background-color: @bg ;
}
body.sepidehgold .ant-input-password.input {
color: @bg ;
}
//Quit
body.sepidehgold .exit {
color: @color5 ;
background-color: @color5 ;
}
body.sepidehgold .exitButton {
color: @color6 ;
background-color: @color2 ;
}
body.sepidehgold .ant-modal-confirm-title {
color: white !important;
}
//Login
body.sepidehgold .backLogin {
background-color: @color3 ;
}
body.sepidehgold .buttonLogin {
background-color: #e3c27b ;
color: #000000 ;
border: none;
&:hover {
background-color: #ffffff;
color: #000000 ;
}
}
body.sepidehgold .textColorLogin1 {
color: @color1 ;
}
body.sepidehgold .textColorLogin2 {
color: @color1 ;
}
body.sepidehgold .ab-login .ant-tabs-nav-wrap {
background: @bg ;
border-color: @bg ;
}
body.sepidehgold .buttonHover{
//border-color: @color1 ;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
border-color: @color2;
}
//BuySell
body.sepidehgold .BuySell_style{
border-color: @color2 ;
background: @bg ;
}
body.sepidehgold .BuySell_text1{
color: @color2 ;
}
body.sepidehgold .BuySell_text2{
color: @color1 ;
}
body.sepidehgold .BuySell_button{
background-color: @color2 ;
color: @color6 ;
}
body.sepidehgold .BuySell_cancelButton{
background-color: @color3 ;
color: @color2 ;
}
body.sepidehgold .BuySell_button_{
border-color: @bg ;
background: @bg ;
}
body.sepidehgold .BuySell_back{
border-color: @bg ;
background: @bg ;
}
body.sepidehgold .mobileBuySell_back{
background: @color2 ;
color: @color6 ;
}
//hover style
body.sepidehgold .ant-input:hover {
border-color: @color2;
border-inline-end-width: 1px;
}
//mobile Header
body.sepidehgold .backHeader{
background: @color3 ;
}
body.sepidehgold .borderHeader{
border-color: @color3 ;
}
body.sepidehgold .borderHeader{
border-color: @color3 ;
}
//transaction card
body.sepidehgold .backCard{
background: @color3 ;
}
body.sepidehgold .textCard1{
color: @color1 ;
}
body.sepidehgold .textCard2{
color: @color1 ;
}
body.sepidehgold .textCard3{
color: @color1 ;
}
body.sepidehgold .back_SearchBoxCard{
background: @bg ;
border-color: @bg ;
}
body.sepidehgold .back_SearchBoxCard2{
background: @color3 ;
}
body.sepidehgold .searchIcon{
stroke: @color1 ;
}
body.sepidehgold .transferBorder{
border-color: @color2 ;
}
body.sepidehgold .transferIcon{
stroke: @color1 ;
}
//ADrawer
body.sepidehgold .ADrawer{
background: @color3 ;
color: @color1 ;
}
//withdraw ADrawer
body.sepidehgold .submit_Withdraw{
background-color: @color2 ;
color: @color6 ;
}
body.sepidehgold .ant-drawer-body{
background-color: @color3 ;
}
body.sepidehgold .cancel_Withdraw{
background-color: @color3 ;
color: @color2 ;
border-color: @color2 ;
}
//
body.sepidehgold .MobileNavbar{
background: @bg ;
border-color: @color2 ;
color: @color1 ;
}
body.sepidehgold .icon_MobileNavbar{
stroke: @color2 ;
}
//a-segmented
body.sepidehgold .backSegmented{
//color: @color1 ;
//background: #1C3959 ;
}
body.sepidehgold .ant-segmented{
color: @color1 ;
background: #1C3959 ;
}
//order card
body.sepidehgold .orderCard_text{
color: @color1 ;
}
body.sepidehgold .orderCard_back{
background: #1e2a3a ;
}
body.sepidehgold .ant-float-btn-primary .ant-float-btn-body {
background-color: #e3c27b !important;
}
body.sepidehgold .ant-input-affix-wrapper{
background-color: #112234FF;
border-color: #0d1925;
}
body.sepidehgold .ant-pagination .ant-pagination-prev button, .ant-pagination .ant-pagination-next button{
color: #ffffff;
}
body.sepidehgold .ant-pagination .ant-pagination-item a {
color: #ffffff !important;
}
body.sepidehgold .ant-select {
background-color: #214368;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-pagination .ant-pagination-item-active {
background-color: #214368 !important;
border-color: #e3c27b;
}
body.sepidehgold .ant-pagination-item-ellipsis {
color: white;
}
body.sepidehgold .ant-select-selector, .ant-tooltip-open, .ant-select-selection-item, .ant-select-item .ant-select-item-option {
color: white;
}
body.sepidehgold :where(.css-dev-only-do-not-override-ajjz7p).ant-select:not(.ant-select-customize-input) .ant-select-selector {
position: relative;
background-color: #214368;
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body.sepidehgold .ant-select:not(.ant-select-customize-input) .ant-select-selector {
background-color: #112234 !important;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody >tr >td {
border-top: 1px solid #1a3451;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
border-color: #e3c27b;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{
color: #e3c27b;
}
body.sepidehgold .ant-tabs-nav-wrap{
justify-content: center;
}
#whatsapp-button {
position: fixed;
bottom: 6rem;
left: 20px;
z-index: 99;
display: none;
cursor: pointer;
img {
width: 50px;
height: 50px;
transition: transform 0.3s ease;
}
&:hover img {
transform: scale(1.1);
}
.label {
text-align: center;
font-size: 0.75rem;
}
}
//************
body.sepidehgold .ant-select-selection-item {
color: #ffffff;
}
body.sepidehgold .ant-select-dropdown .ant-select-item {
color: #ffffff;
background: #1C3959;
}
body.sepidehgold .ant-select-selection-item {
color: #ffffff;
}
body.sepidehgold .ant-select-clear {
color: #ffffff;
background-color: #214368;
}
body.sepidehgold .ant-input-group-addon {
color: #000000;
border: none;
background: #e3c27b;
}
body.sepidehgold .configButton {
color: #ffffff;
background: #112234;
}
body.sepidehgold .configIcon {
color: #ffffff ;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
color: #E3C27BFF;
border-color: #E3C27BFF;
}
body.sepidehgold .buttonRegister {
background: #1C3959;
border-color: #E3C27BFF ;
}
body.sepidehgold .accountingCard_text{
color: #112234 ;
}
body.sepidehgold .accountingCard_back{
background: @color3 ;
}
body.sepidehgold .ant-switch-inner{
background: #1C3959 ;
}
body.sepidehgold .ant-radio-inner{
background: #1C3959;
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector {
border-color: #E3C27BFF;
}
body.sepidehgold .ant-btn-primary {
background: #E3C27BFF;
&:hover {
background-color: #ffffff;
color: #E3C27BFF;
}
}
body.sepidehgold :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-primary:not(:disabled):active {
background: #E3C27BFF;
}
body.sepidehgold :where(.css-1yhcnou).ant-btn-primary:not(:disabled):hover {
background: #ffffff;
color: #E3C27BFF;
}
body.sepidehgold .avatarIcon {
fill: #ffffff;
stroke: #ffffff;
}
body.sepidehgold .ant-segmented .ant-segmented-item-selected {
background: #E3C27BFF ;
color: #1C3959;
}
body.sepidehgold .ant-tabs-ink-bar {
background: #E3C27BFF !important;
color: #1C3959 !important;
}
body.sepidehgold .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: #E3C27BFF !important;
}
body.sepidehgold .ab-login .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: #000000 !important;
}
body.sepidehgold .ant-picker{
background-color: #214368;
border: none;
}
body.sepidehgold .ant-picker-input{
color: #ffffff;
}
body.sepidehgold .ant-picker .ant-picker-input >input{
color: #ffffff !important;
}
body.sepidehgold .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{
background: #1C3959 ;
color:white !important;
}
body.sepidehgold .ant-picker-date-panel,.ant-picker-footer{
background:#E3C27BFF ;
color:white !important;
}
body.sepidehgold .ant-picker-dropdown .ant-picker-today-btn{
color:#1C3959;
}
body.sepidehgold .ant-picker .ant-picker-clear{
background: none;
}
body.sepidehgold .skeleton{
background: #1C3959;
color:#1C3959;
}
body.sepidehgold .rc-virtual-list{
background: #1C3959;
}
body.sepidehgold .ant-select-dropdown .ant-select-item-option:hover:not(.ant-select-item-option-disabled) {
background:#E3C27BFF;
color: #ffffff !important;
}
body.sepidehgold .ant-dropdown-menu-item {
color: #ffffff !important;
}
body.sepidehgold .ant-select-dropdown {
border: 2px solid #E3C27BFF !important;
background: #1C3959 !important;
}
body.sepidehgold .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{
border-color: #E3C27BFF;
}
body.sepidehgold .birthDate.ant-picker{
background: #112234 !important;
border-color: #E3C27BFF;
}
body.sepidehgold .ant-btn-primary.ant-btn-dangerous{
background: #ff4d4f !important;
}
body.sepidehgold .ant-modal-confirm-title {
color: #ffffff;
}
body.sepidehgold input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active{
-webkit-background-clip: text;
-webkit-text-fill-color: #ffffff;
transition: background-color 5000s ease-in-out 0s;
box-shadow: inset 0 0 20px 20px #112234;
}
//User Card
body.sepidehgold .userCard:hover {
border-color: #E3C27BFF;
}
body.sepidehgold .userCard {
background-color: #1e2a3a;
border-color: #37414c;
}
//product Price Card
body.sepidehgold .productPriceCard {
background-color: #1e2a3a;
border-color: #616161;
}
body.sepidehgold .backProductPriceCard {
background-color: #E3C27BFF;
}
body.sepidehgold .iconProductPriceCard {
color: #b59c65;
background-color: #e3d8c7;
}

15
src/assets/css/var.less Normal file
View File

@ -0,0 +1,15 @@
@prefixCls: 'ab';
@border-radius-base: 8px;
@primary-color: #1d4ed8;
// Border color
@border-color-base: @gray-100; // base border outline a component
// Form
@form-item-label-font-size: 14px;
//variables
@prefixCls-font-family: 'ModamSemiPro';
@prefixCls-background-color-mobile: #fafafa;
@prefixCls-background-color: #fff;
@gray-50: #f6f7f9;
@gray-100: #e8eaee;

284
src/assets/css/zariran.less Normal file
View File

@ -0,0 +1,284 @@
body.zariran{
background: #ffffff;
color: #000000;
}
body.zariran .menuItem{
color: #5F6368;
fill: #5F6368;
stroke: #5F6368;
}
body.zariran .menuItemSelect svg{
color: #2563EB;
fill: #2563EB;
stroke: #2563EB;
}
body.zariran .textColor1{
color: #616161;
}
body.zariran .textColor2{
color: #9E9E9E;
}
body.zariran .ant-tabs-tab-btn{
color: #000000;
}
body.zariran .text_Primary{
color: #424242;
}
body.zariran .text_Secondary{
color: #2563EB;
}
body.zariran .background_Primary{
background: #424242;
}
body.zariran .background_Secondary{
background: #F5F5F5;
}
body.zariran .primaryColor{
color: #000000 ;
}
body.zariran .ant-menu{
color: #FFFFFFFF ;
}
body.zariran .text_green{
color: #4CAF50FF ;
}
body.zariran .background_green{
background: #4CAF50FF ;
}
body.zariran .text_red{
color: #F44336FF ;
}
body.zariran .background_red{
background: #F44336FF ;
}
body.zariran .ant-table-cell{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.zariran .ant-table-wrapper .ant-table-thead>tr>th {
background: #fafafa ;
border-color: #e5e7eb ;
}
body.zariran .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: #F44336FF;
}
body.zariran .ab-base-table .ant-table-wrapper {
border: none ;
}
body.zariran .ant-table-wrapper .ant-table {
color: #000000;
}
body.zariran :where(.css-dev-only-do-not-override-ajjz7p).ant-btn-primary {
background-color: #000000 ;
}
body.zariran .ant-modal .ant-modal-content {
background-color: #ffffff ;
}
body.zariran .ant-modal-title{
background-color: #ffffff ;
color: #000000;
}
body.zariran .ant-input{
background: #ffffff ;
border-color: #e5e7eb ;
color: #000000 ;
}
body.zariran .ant-input-group-addon{
background: #2563EB ;
border-color: #e5e7eb ;
color: #ffffff;
}
body.zariran .ant-form-item .ant-form-item-label >label {
color: #000000 ;
}
//User Setting
body.zariran .backUserSetting1 {
background-color: #ffffff ;
}
body.zariran .backUserSetting2 {
background-color: #fafafa ;
border-color: #e5e7eb ;
}
body.zariran .iconUserSetting {
stroke: #000000 ;
fill: #000000 ;
}
body.zariran .okButtonUserSetting {
background-color: #2563EB ;
border-color: #2563EB ;
color: #ffffff ;
}
body.zariran .cancelButtonUserSetting {
color: #000000 ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
//Security
body.zariran .backSecurity {
background-color: #ffffff ;
}
body.zariran .ant-input-password {
//border: none ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
body.zariran .ant-input-password.input {
//color: @bg ;
}
//Quit
body.zariran .exit {
color: #F44336 ;
background-color: #F44336 ;
}
body.zariran .exitButton {
color: #000000 ;
background-color: #ffffff ;
}
//Login
body.zariran .backLogin {
background-color: #ffffff;
}
body.zariran .textColorLogin1 {
color: #424242;
}
body.zariran .textColorLogin2 {
color: #9E9E9E;
}
body.zariran .buttonLogin {
background-color: #2563EB ;
color: #ffffff ;
}
body.zariran .textColorLogin1 {
color: #424242;
}
body.zariran .ab-login .ant-tabs-nav-wrap {
background: #f9fafb ;
}
body.zariran .buttonHover{
border-color: #e5e7eb ;
}
//BuySell
body.zariran .BuySell_Style{
//background: #FAFAFA;
border-color: #e5e7eb;
}
body.zariran .BuySell_text1{
color: #616161;
}
body.zariran .BuySell_text2{
color: #000000 ;
}
body.zariran .BuySell_button{
background-color: #2563EB ;
color: #ffffff ;
}
body.zariran .BuySell_cancelButton{
background-color: #ffffff ;
color: #000000 ;
}
body.zariran .BuySell_button_{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.zariran .BuySell_back{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.zariran .mobileBuySell_back{
background: #ffffff ;
color: #000000 ;
}
//hover style
body.zariran .ant-input:hover {
border-color: #2563EB;
border-inline-end-width: 1px;
}
//mobile Header
body.zariran .backHeader{
background: #ffffff ;
}
//transaction card
body.zariran .backCard{
background: #ffffff;
}
body.zariran .textCard1{
color: #616161;
}
body.zariran .textCard2{
color: #BDBDBD;
}
body.zariran .textCard3{
color: #9E9E9E;
}
body.zariran .MobileNavbar{
background: #ffffff;
border-color: #e5e7eb;
color: #000000;
}
body.zariran .back_SearchBoxCard{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.zariran .back_SearchBoxCard2{
background: #ffffff;
}
body.zariran .searchIcon{
stroke: #d9d9d9 ;
}
body.zariran .transferIcon{
stroke: #000000;
}
//ADrawer
body.zariran .ADrawer{
background: #ffffff;
border-color: #e5e7eb;
}
body.zariran .icon_MobileNavbar{
stroke: #000000 ;
}
body.zariran .drawer-body{
background: #112234FF ;
}
//order card
body.zariran .orderCard_text{
color: #616161 ;
}
body.zariran .orderCard_back{
background: #dfdfdf;
}
body.zariran :where(.css-dev-only-do-not-override-1yhcnou).ant-float-btn-primary .ant-float-btn-body{
background-color: #2563EB;
}
body.zariran :where(.css-dev-only-do-not-override-1yhcnou).ant-input-affix-wrapper{
background-color: #ffffff;
border-color: #d9d9d9;
}
body.zariran .ant-pagination .ant-pagination-item a {
color: #616161;
}
body.zariran .ant-select {
background-color: #ffffff;
}
body.zariran :where(.css-dev-only-do-not-override-ajjz7p).ant-select:not(.ant-select-customize-input) .ant-select-selector {
position: relative;
background-color: #ffffff;
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body.zariran :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
border-color: #2563EB;
}
body.zariran :where(.css-dev-only-do-not-override-1yhcnou).ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{
//color: #2563EB;
}
body.zariran .ant-select-selector, .ant-tooltip-open, .ant-select-selection-item, .ant-select-item .ant-select-item-option{
color: #616161;
}
body.zariran .ant-tabs-nav-wrap{
justify-content: center;
}
body.zariran .avatarIcon {
fill: #5F6368;
stroke: #5F6368;
}

303
src/assets/css/zarsun.less Normal file
View File

@ -0,0 +1,303 @@
body.zarsun{
background: #ffffff;
color: #000000;
}
body.zarsun .menuItem{
color: #5F6368;
fill: #5F6368;
stroke: #5F6368;
}
body.zarsun .menuItemSelect svg{
color: #2563EB;
fill: #2563EB;
stroke: #2563EB;
}
body.zarsun .textColor1{
color: #616161;
}
body.zarsun .textColor2{
color: #9E9E9E;
}
body.zarsun .ant-tabs-tab-btn{
color: #000000;
}
body.zarsun .text_Primary{
color: #424242;
}
body.zarsun .text_Secondary{
color: #2563EB;
}
body.zarsun .background_Primary{
background: #424242;
}
body.zarsun .background_Secondary{
background: #F5F5F5;
}
body.zarsun .primaryColor{
color: #000000 ;
}
body.zarsun .ant-menu{
color: #FFFFFFFF ;
}
body.zarsun .text_green{
color: #4CAF50FF ;
}
body.zarsun .background_green{
background: #4CAF50FF ;
}
body.zarsun .text_red{
color: #F44336FF ;
}
body.zarsun .background_red{
background: #F44336FF ;
}
body.zarsun .ant-table-cell{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.zarsun .ant-table-wrapper .ant-table-thead>tr>th {
background: #fafafa ;
border-color: #e5e7eb ;
}
body.zarsun .ant-table-wrapper .ant-table-thead > tr > th::before,
.ant-table-wrapper .ant-table-thead > tr > td::before {
background-color: #F44336FF;
}
body.zarsun .ab-base-table .ant-table-wrapper {
border: none ;
}
body.zarsun .ant-table-wrapper .ant-table {
color: #000000;
}
body.zarsun :where(.css-dev-only-do-not-override-ajjz7p).ant-btn-primary {
background-color: #000000 ;
}
body.zarsun .ant-modal .ant-modal-content {
background-color: #ffffff ;
}
body.zarsun .ant-modal-title{
background-color: #ffffff ;
color: #000000;
}
body.zarsun .ant-input{
background: #ffffff ;
border-color: #e5e7eb ;
color: #000000 ;
}
body.zarsun .ant-input-group-addon{
background: #2563EB ;
border-color: #e5e7eb ;
color: #ffffff;
}
body.zarsun .ant-form-item .ant-form-item-label >label {
color: #000000 ;
}
//User Setting
body.zarsun .backUserSetting1 {
background-color: #ffffff ;
}
body.zarsun .backUserSetting2 {
background-color: #fafafa ;
border-color: #e5e7eb ;
}
body.zarsun .iconUserSetting {
stroke: #000000 ;
fill: #000000 ;
}
body.zarsun .okButtonUserSetting {
background-color: #2563EB ;
border-color: #2563EB ;
color: #ffffff ;
}
body.zarsun .cancelButtonUserSetting {
color: #000000 ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
//Security
body.zarsun .backSecurity {
background-color: #ffffff ;
}
body.zarsun .ant-input-password {
//border: none ;
border-color: #e5e7eb ;
background-color: #ffffff ;
}
body.zarsun .ant-input-password.input {
//color: @bg ;
}
//Quit
body.zarsun .exit {
color: #F44336 ;
background-color: #F44336 ;
}
body.zarsun .exitButton {
color: #000000 ;
background-color: #ffffff ;
}
//Login
body.zarsun .backLogin {
background-color: #ffffff;
}
body.zarsun .textColorLogin1 {
color: #424242;
}
body.zarsun .textColorLogin2 {
color: #9E9E9E;
}
body.zarsun .buttonLogin {
background-color: #2563EB ;
color: #ffffff ;
}
body.zarsun .textColorLogin1 {
color: #424242;
}
body.zarsun .ab-login .ant-tabs-nav-wrap {
background: #f9fafb ;
}
body.zarsun .buttonHover{
border-color: #e5e7eb ;
}
//BuySell
body.zarsun .BuySell_Style{
//background: #FAFAFA;
border-color: #e5e7eb;
}
body.zarsun .BuySell_text1{
color: #616161;
}
body.zarsun .BuySell_text2{
color: #000000 ;
}
body.zarsun .BuySell_button{
background-color: #2563EB ;
color: #ffffff ;
}
body.zarsun .BuySell_cancelButton{
background-color: #ffffff ;
color: #000000 ;
}
body.zarsun .BuySell_button_{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.zarsun .BuySell_back{
border-color: #e5e7eb ;
background: #ffffff ;
}
body.zarsun .mobileBuySell_back{
background: #ffffff ;
color: #000000 ;
}
//hover style
body.zarsun .ant-input:hover {
border-color: #2563EB;
border-inline-end-width: 1px;
}
//mobile Header
body.zarsun .backHeader{
background: #ffffff ;
}
//transaction card
body.zarsun .backCard{
background: #ffffff;
}
body.zarsun .textCard1{
color: #616161;
}
body.zarsun .textCard2{
color: #BDBDBD;
}
body.zarsun .textCard3{
color: #9E9E9E;
}
body.zarsun .MobileNavbar{
background: #ffffff;
border-color: #e5e7eb;
color: #000000;
}
body.zarsun .back_SearchBoxCard{
background: #ffffff ;
border-color: #e5e7eb ;
}
body.zarsun .back_SearchBoxCard2{
background: #ffffff;
}
body.zarsun .searchIcon{
stroke: #d9d9d9 ;
}
body.zarsun .transferIcon{
stroke: #000000;
}
//ADrawer
body.zarsun .ADrawer{
background: #ffffff;
border-color: #e5e7eb;
}
body.zarsun .icon_MobileNavbar{
stroke: #000000 ;
}
body.zarsun .drawer-body{
background: #112234FF ;
}
//order card
body.zarsun .orderCard_text{
color: #616161 ;
}
body.zarsun .orderCard_back{
background: #ffffff;
}
body.zarsun :where(.css-dev-only-do-not-override-1yhcnou).ant-float-btn-primary .ant-float-btn-body{
background-color: #2563EB;
}
body.zarsun :where(.css-dev-only-do-not-override-1yhcnou).ant-input-affix-wrapper{
background-color: #ffffff;
border-color: #d9d9d9;
}
body.zarsun .ant-pagination .ant-pagination-item a {
color: #616161;
}
body.zarsun .ant-select {
background-color: #ffffff;
}
body.zarsun :where(.css-dev-only-do-not-override-ajjz7p).ant-select:not(.ant-select-customize-input) .ant-select-selector {
position: relative;
background-color: #ffffff;
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body.zarsun :where(.css-dev-only-do-not-override-1yhcnou).ant-btn-default:not(:disabled):hover {
border-color: #2563EB;
}
body.zarsun :where(.css-dev-only-do-not-override-1yhcnou).ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{
//color: #2563EB;
}
body.zarsun .ant-select-selector, .ant-tooltip-open, .ant-select-selection-item, .ant-select-item .ant-select-item-option{
color: #616161;
}
body.zarsun .ant-tabs-nav-wrap{
justify-content: center;
}
body.zarsun .avatarIcon {
fill: #5F6368;
stroke: #5F6368;
}
//User Card
body.zarsun .userCard:hover {
border-color: #2563EB;
}
body.zarsun .userCard {
background-color: #ffffff;
}
//product Price Card
body.zarsun .productPriceCard {
background-color: #ffffff;
}
body.zarsun .backProductPriceCard {
background-color: #2563EB;
}
body.zarsun .iconProductPriceCard {
color: #2563EB;
background-color: rgba(37, 99, 235, 0.29);
}

View File

@ -0,0 +1,71 @@
<!doctype html>
<html lang="fa">
<head>
<meta charset="utf-8">
<title>Modam Family Type face: خانواده فونت مُدام</title>
<meta name="fontiran.com:license" content="کد ۵ رقمی لایسنس">
<link href="style.css" rel="stylesheet">
</head>
<body dir="rtl">
<div class="wrapper">
<div class="box100">
<h1>شکل‌گیری تایپ‌فیس مُدام</h1>
<p>یکی از دغدغه‌های من، طراحی تایپ‌فیس‌هایی برای استفاده در فضای بازی‌های دیجیتال و مدیوم‌هایی در بستر وِب است. در پاییز ۱۳۹۹ که در کلاس‌های آنلاینِ طراحی تایپِ استادم دامون خانجانزاده شرکت کردم، این فکر و دغدغه‌ام را با ایشان در میان گذاشتم و ایشان بسیار استقبال کردند.</p>
<p>
از میان مباحث گسترده‌ی تئوری،‌ تجزیه و تحلیل‌های فرمی و بصری، تحلیل کانسپت، اتودهای فرمی و در نهایت اتودهای طراحی حروف، این تایپ‌فیس ساخته شد که آن را «مُدام» نام نهادم. فرآیند مطالعات، تحقیق و طراحی این تایپ‌فیس و آنچه در این مسیر از جناب ایشان آموختم را به‌صورت مقاله‌ای جداگانه‌ای منتشر خواهم کرد.</p>
</div>
<div class="box300">
<h1>آشنایی با مُدام</h1>
<p>تایپ‌فیس «مُدام» دارای ساختاری ساده، اندامی استخوانی و فضاهای منفی باز است. این تایپ‌فیس به دلیل روحیه‌ی نمایشی و درجه‌ی بالای تناسبات هندسی آن، برای تیتر و متن‌های کوتاه و نیمه بلند مناسب است.</p>
<p>استارتاپ‌ها، طراحان و توسعه‌دهندگان بازی‌، وب و اپلیکیشن می‌توانند مهم‌ترین کاربران این تایپ‌فیس باشند.</p>
</div>
<div class="box400">
<h1>تنوع وزن</h1>
<p>مُدام دارای ۸ وزن از نازک تا تیره است که می‌تواند تمام نیازهای پروژه‌های طراحی گرافیک و هویت‌سازی را برطرف نماید.</p>
</div>
<div class="box500">
<h1>استایل فشرده</h1>
<p>از آنجایی که در اکثر بازی‌ها -در کنار خوانایی و خواندنی بودن نوشتار- نیاز به هیجان و انرژی همراه با تصویر در حروف نیز به چشم می‌خورد، همچنین محدودیت‌هایی که در نرم‌افزارها (باکس‌ها و دکمه‌ها) و یا ستون‌های صفحه‌آرایی وجود دارد، استایل فشرده‌ی این تایپ‌فیس نیز طراحی شد. برای فشرده‌سازی، تلاش شده است فرم حروف همچنان حفظ شود و این فشرده‌سازی در آنها اعوجاج ایجاد نکند. همچنین در این تغییر میزان فشردگی، ضخامتِ حروف نیز تا حد امکان ثابت مانده است؛ یعنی مثلاً ضخامتِ حروف در وزن رگولار با وزن رگولارِ فشرده یکسان است و فقط فرم حروف فشرده شده است.</p>
</div>
<div class="box600">
<h1>پشتیبانی از زبان عربی و انگلیسی</h1>
<p>یکی از امکاناتی که در تایپ‌فیس مُدام در نظر گرفته شده است، استفاده از Tabular lining است. با فعال‌سازی این ویژگی در نرم‌افزارهای گرافیکی مانند ایلاستریتور و فوتوشاپ، می‌توانید بدون استفاده از جدول‌کشی، اعداد را به صورت زیرِ هم بنویسید.</p>
</div>
<div class="box700">
<h1>اعداد جدول‌کشی‌شده!</h1>
<p>یکی از امکاناتی که در تایپ‌فیس مُدام در نظر گرفته شده است، استفاده از Tabular lining است. با فعال‌سازی این ویژگی در نرم‌افزارهای گرافیکی مانند ایلاستریتور و فوتوشاپ، می‌توانید بدون استفاده از جدول‌کشی، اعداد را به صورت زیرِ هم بنویسید.</p>
</div>
<div class="box800">
<h1>تاریخچه</h1>
<p>ایده‌ی اولیه‌ی قلم “پیدا” در سال ۱۳۹۸ شکل گرفت و در سال ۱۳۹۹ طراحی آن به اتمام رسید.</p>
</div>
<div class="box900">
<h1>دانلود رایگان فونت مُدام !</h1>
<p>دقت کنید که این فونت رایگان نیست. اگر وبسایت یا کانالی را مشاهده کردید که این فونت را با قیمت ارزان‌ترِ، با تخفیف یا رایگان عرضه کرده است آن را معرفی کنید تا پیگیری قانونی توسط فونت ‌ایران انجام شود.</p>
</div>
<div class="box400">
<h1>
اعداد فارسی: ۱۲۳۴۵۶۷۸۹۰
<br>
اعداد عربی: ۱۲۳٤٥٦۷۸۹۰
<br>
اعداد انگلیسی: 1234567890
</h1>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,81 @@
/**
*
* Name: Modam Fonts
* Version: 1.0
* Author: Naser Khadem
* Created on: April 22, 2023
* Updated on: April 22, 2023
* Website: http://fontiran.com
* Copyright: Commercial/Proprietary Software
--------------------------------------------------------------------------------------
فونت مُدام یک نرم افزار مالکیتی محسوب می شود. جهت آگاهی از قوانین استفاده از این فونت ها لطفا به وب سایت (فونت ایران دات کام) مراجعه نمایید
--------------------------------------------------------------------------------------
Modam fonts are considered a proprietary software. To gain information about the laws regarding the use of these fonts, please visit www.fontiran.com
--------------------------------------------------------------------------------------
This set of fonts are used in this project under the license: (.....)
------------------------------------------------------------------------------------- fonts/-
*
**/
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: 200;
src: url('fonts/woff2/ModamWeb-ExtraLight.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-ExtraLight.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: 300;
src: url('fonts/woff2/ModamWeb-Light.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-Light.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: normal;
src: url('fonts/woff2/ModamWeb-Regular.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-Regular.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: 500;
src: url('fonts/woff2/ModamWeb-Medium.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-Medium.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: 600;
src: url('fonts/woff2/ModamWeb-Semibold.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-Semibold.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: bold;
src: url('fonts/woff2/ModamWeb-Bold.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-Bold.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: 800;
src: url('fonts/woff2/ModamWeb-ExtraBold.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-ExtraBold.woff') format('woff'); /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}
@font-face {
font-family: ModamWeb;
font-style: normal;
font-weight: 900;
src: url('fonts/woff2/ModamWeb-Black.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
url('fonts/woff/ModamWeb-Black.woff') format('woff') /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
}

Some files were not shown because too many files have changed in this diff Show More