This commit is contained in:
2025-08-02 11:20:01 +03:00
parent feb351424e
commit 09feab1c42
18 changed files with 95 additions and 85 deletions

25
.drone.yml Normal file
View File

@@ -0,0 +1,25 @@
kind: pipeline
type: docker
name: deploy
steps:
- name: build
image: node:22
commands:
- npm install -g @quasar/cli
- npm install
- quasar build -m spa
- name: deploy
image: appleboy/drone-scp
settings:
host: 10.10.10.8
username: root
key:
from_secret: SSH-nginx-key
source: ./dist/spa/*
strip_components: 2
target: /usr/share/nginx/tgcrew/admin
rm: true
when:
branch: main

Binary file not shown.

View File

@@ -1,10 +1,10 @@
<template> <template>
<div class="flex row items-center no-wrap"> <div
class="flex row items-center no-wrap logo-component"
>
<svg <svg
class="iconcolor q-mr-xs" class="iconcolor"
viewBox="0 0 8.4666662 8.4666662" viewBox="0 0 8.4666662 8.4666662"
width="32"
height="32"
version="1.1" version="1.1"
id="svg1" id="svg1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@@ -13,7 +13,8 @@
<defs id="defs1" /> <defs id="defs1" />
<g id="layer1"> <g id="layer1">
<rect <rect
style="fill:var(--icon-color);stroke-width:0.233149" class="fill-brand"
style="stroke-width:0.233149"
id="rect5" id="rect5"
width="6.9885192" width="6.9885192"
height="0.35581663" height="0.35581663"
@@ -22,7 +23,8 @@
transform="matrix(0.77578367,0.63099897,-0.77578367,0.63099897,0,0)" transform="matrix(0.77578367,0.63099897,-0.77578367,0.63099897,0,0)"
/> />
<rect <rect
style="fill:var(--icon-color);stroke-width:0.24961" class="fill-brand"
style="stroke-width:0.24961"
id="rect5-7" id="rect5-7"
width="7.4819207" width="7.4819207"
height="0.3809379" height="0.3809379"
@@ -31,28 +33,32 @@
transform="matrix(-0.70756824,0.70664502,0.70756824,0.70664502,0,0)" transform="matrix(-0.70756824,0.70664502,0.70756824,0.70664502,0,0)"
/> />
<circle <circle
style="fill:var(--icon-color);stroke-width:0.134869" class="fill-brand"
style="stroke-width:0.134869"
id="path5-8" id="path5-8"
cx="1.5875" cx="1.5875"
cy="6.8791666" cy="6.8791666"
r="1.0583333" r="1.0583333"
/> />
<circle <circle
style="fill:var(--icon-color);stroke-width:0.168586" class="fill-brand"
style="stroke-width:0.168586"
id="path5-8-5" id="path5-8-5"
cx="7.1437502" cx="7.1437502"
cy="7.1437502" cy="7.1437502"
r="1.3229166" r="1.3229166"
/> />
<circle <circle
style="fill:var(--icon-color);stroke-width:0.118011" class="fill-brand"
style="stroke-width:0.118011"
id="path5-8-5-1" id="path5-8-5-1"
cx="1.4552083" cx="1.4552083"
cy="2.5135417" cy="2.5135417"
r="0.92604166" r="0.92604166"
/> />
<circle <circle
style="fill:var(--icon-color);stroke-width:0.101152" class="fill-brand"
style="stroke-width:0.101152"
id="path5-8-5-1-7" id="path5-8-5-1-7"
cx="7.1437502" cx="7.1437502"
cy="1.3229166" cy="1.3229166"
@@ -69,51 +75,46 @@
</svg> </svg>
<span <span
class="text-h4 text-brand" class="text-brand"
style=" style="margin-right: 0.075em;"
color: var(--logo-color-bg-white);
margin-right: 2px;"
> >
tg tg
</span> </span>
<span class="text-h4 text-brand2 text-bold q-pa-0"> <span class="text-brand2 text-bold">
Crew Crew
</span> </span>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
body { .logo-component {
background: white; svg {
margin: 0rem; width: 1em;
min-height: 100vh; height: 1em;
font-family: Futura, sans-serif; margin-right: 0.125em;
}
span {
line-height: 1;
}
} }
#canvas { .fill-brand {
position: absolute; fill: $brand;
display: block;
top: 0;
left: 0;
z-index: -1;
}
.iconcolor {
--icon-color: #27A7E7;
} }
@keyframes blink { @keyframes blink {
100%, 100%,
0% { 0% {
fill: #fa9e7a; fill: $brand2;
} }
60% { 60% {
fill: #F36D3A; fill: $brand2;
opacity: 0.8;
} }
} }

View File

@@ -6,7 +6,7 @@
<template #footer> <template #footer>
<q-btn <q-btn
rounded color="primary" rounded color="primary"
class="w100 q-mt-md q-mb-xs" class="w100 q-mt-md q-mb-xs fix-disabled-btn"
:disable="!isFormValid" :disable="!isFormValid"
@click = "onSubmit" @click = "onSubmit"
> >

View File

@@ -57,7 +57,7 @@ interface TimeZone {
offsetHours: number offsetHours: number
} }
const props = defineProps<{ defineProps<{
locale: string locale: string
}>() }>()

View File

@@ -6,7 +6,7 @@
<template #footer> <template #footer>
<q-btn <q-btn
rounded color="primary" rounded color="primary"
class="w100 q-mt-md q-mb-xs" class="w100 q-mt-md q-mb-xs fix-disabled-btn"
:disable="!isFormValid" :disable="!isFormValid"
@click = "emit('update')" @click = "emit('update')"
> >

View File

@@ -6,7 +6,7 @@
<template #footer> <template #footer>
<q-btn <q-btn
rounded color="primary" rounded color="primary"
class="w100 q-mt-md q-mb-xs" class="w100 q-mt-md q-mb-xs fix-disabled-btn"
@click = "onSubmit" @click = "onSubmit"
> >
{{ $t(btnText) }} {{ $t(btnText) }}

View File

@@ -1,18 +1,18 @@
// app global css in SCSS form // app global css in SCSS form
.text-brand { .text-brand {
color: #27A7E7 !important; color: $brand !important;
} }
.bg-brand { .bg-brand {
background: #27A7E7 !important; background: $brand !important;
} }
.text-brand2 { .text-brand2 {
color: #F36D3A !important; color: $brand2 !important;
} }
.bg-brand2 { .bg-brand2 {
background: #F36D3A !important; background: $brand2 !important;
} }
$base-width: 100; $base-width: 100;
@@ -21,10 +21,14 @@ $base-width: 100;
$base-width: $base-width - 10; $base-width: $base-width - 10;
} }
$base-height: 100; body, html, #q-app {
@while $base-height > 0 { font-family: $typography-font-family;
.h#{$base-height} { height: #{$base-height}+'%'; } -webkit-font-smoothing: antialiased;
$base-height: $base-height - 10; -moz-osx-font-smoothing: grayscale;
}
* {
font-family: inherit;
} }
:root { :root {
@@ -76,9 +80,14 @@ body {
@font-face { @font-face {
font-family: 'myFont'; font-family: 'myFont';
src: url(./fonts/OpenSans-Regular.woff2); src: url(./fonts/Inter-Regular.woff2);
} }
button[disabled] { .fix-disabled-btn.q-btn[disabled]:not(.q-btn--flat) {
background-color: $grey-5 !important; background-color: $grey-5 !important;
} }
.fix-disabled-btn.q-btn.q-btn--flat[disabled] {
color: $grey-9 !important;
opacity: 1;
}

Binary file not shown.

Binary file not shown.

View File

@@ -1,17 +1,3 @@
// Quasar SCSS (& Sass) Variables
// --------------------------------------------------
// To customize the look and feel of this app, you can override
// the Sass/SCSS variables found in Quasar's source Sass/SCSS files.
// Check documentation for full list of Quasar variables
// Your own variables (that are declared here) and Quasar's own
// ones will be available out of the box in your .vue/.scss/.sass files
// It's highly recommended to change the default colors
// to match your app's branding.
// Tip: Use the "Theme Builder" on Quasar's documentation website.
$primary : #27A7E7; $primary : #27A7E7;
$secondary : #26A69A; $secondary : #26A69A;
$accent : #9C27B0; $accent : #9C27B0;
@@ -26,16 +12,9 @@ $warning : #F2C037;
$lightgrey : #DCDCDC; $lightgrey : #DCDCDC;
$brand: #27A7E7;
$brand2: #F36D3A;
$body-font-size: var(--dynamic-font-size); $body-font-size: var(--dynamic-font-size);
$typography-font-family: 'myFont', Roboto !default; $typography-font-family: 'myFont', Roboto !default;
body, html, #q-app {
font-family: $typography-font-family;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
* {
font-family: inherit;
}

File diff suppressed because one or more lines are too long

View File

@@ -8,7 +8,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive } from 'vue' import { ref } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import companyBlock from 'components/companyBlock.vue' import companyBlock from 'components/companyBlock.vue'
import { useCompaniesStore } from 'stores/companies' import { useCompaniesStore } from 'stores/companies'
@@ -17,7 +17,7 @@
const router = useRouter() const router = useRouter()
const companiesStore = useCompaniesStore() const companiesStore = useCompaniesStore()
const newCompany = reactive<CompanyParams>({} as CompanyParams) const newCompany = ref<CompanyParams>({} as CompanyParams)
async function addCompany(companyData: CompanyParams) { async function addCompany(companyData: CompanyParams) {
await companiesStore.add(companyData) await companiesStore.add(companyData)

View File

@@ -13,8 +13,7 @@
style="max-width: 400px;" style="max-width: 400px;"
> >
<base-logo <base-logo
class="col-grow q-pa-lg" class="col-grow q-pa-lg text-h5"
:style="{ alignItems: 'flex-end' }"
/> />
<div class="flex column w100"> <div class="flex column w100">

View File

@@ -84,20 +84,20 @@
import pnTimeZoneSelector from 'components/pnTimeZoneSelector.vue' import pnTimeZoneSelector from 'components/pnTimeZoneSelector.vue'
const settingsStore = useSettingsStore() const settingsStore = useSettingsStore()
const locale = ref('')
const localeBot = ref('')
const localeOptions = settingsStore.supportLocale const localeOptions = settingsStore.supportLocale
const locale = ref('')
watch(locale, async (newValue) => { watch(locale, async (newValue) => {
await settingsStore.updateSettings({ locale: newValue }) await settingsStore.updateSettings({ locale: newValue })
}) })
const localeBot = ref('')
watch(localeBot, async (newValue) => { watch(localeBot, async (newValue) => {
await settingsStore.updateSettings({ localeBot: newValue }) await settingsStore.updateSettings({ localeBot: newValue })
}) })
const fontSize = ref(14) const fontSize = ref(16)
const fontSizeOptions = settingsStore.supportFontSizes const fontSizeOptions = settingsStore.supportFontSizes
const fontSizeLabel = computed(() => const fontSizeLabel = computed(() =>
fontSizeOptions.find(el => el.value === fontSize.value)?.label ?? '' fontSizeOptions.find(el => el.value === fontSize.value)?.label ?? ''

View File

@@ -339,8 +339,6 @@
if (!newD) unblockUserId.value = undefined if (!newD) unblockUserId.value = undefined
}) })
</script> </script>
<style scoped> <style scoped>

View File

@@ -26,7 +26,7 @@ export const useChatsStore = defineStore('chats', () => {
} }
async function unlink (chatId: number) { async function unlink (chatId: number) {
const { data } = await api.get('/project/' + currentProjectId.value + '/chat/' + chatId) const { data } = await api.delete('/project/' + currentProjectId.value + '/chat/' + chatId)
const chatAPIid = data.data.id const chatAPIid = data.data.id
const idx = chats.value.findIndex(item => item.id === chatAPIid) const idx = chats.value.findIndex(item => item.id === chatAPIid)
chats.value.splice(idx, 1) chats.value.splice(idx, 1)

View File

@@ -80,7 +80,6 @@ export const useSettingsStore = defineStore('settings', () => {
if (authStore.isAuth) { if (authStore.isAuth) {
try { try {
const { data } = await api.get('/customer/settings') const { data } = await api.get('/customer/settings')
console.log(data.data)
settings.value = { settings.value = {
fontSize: data.data.fontSize || defaultSettings.fontSize, fontSize: data.data.fontSize || defaultSettings.fontSize,
locale: data.data.locale || detectLocale(), locale: data.data.locale || detectLocale(),