Aggiungere "San Marino" e suoi comuni

Corretto Filtro a mano della ricerca
Creare filtro ricerca per trovare la sottocategoria o categoria -> Skill e SubSkill
This commit is contained in:
paoloar77
2022-02-12 02:19:49 +01:00
parent 7c0c2fef39
commit b21a7d1885
63 changed files with 541 additions and 752 deletions

View File

@@ -1,23 +1,23 @@
APP_VERSION="0.1.8" APP_VERSION="0.1.9"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="1" APP_ID="12"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"
DIRECTORY_SERVER="freeplanet_serverside" DIRECTORY_SERVER="freeplanet_serverside"
SERVERDIR_WEBSITE="" SERVERDIR_WEBSITE=""
SERVERPW_WEBSITE="" SERVERPW_WEBSITE=""
APP_URL="http://localhost" APP_URL="http://localhost"
URL_FACEBOOK="https://www.facebook.com/freeplanetapp" URL_FACEBOOK="https://www.facebook.com/"
PROVA_PAOLO="PROVA ENV FUNZIONA!" PROVA_PAOLO="PROVA ENV FUNZIONA!"
LANG_DEFAULT="it" LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF" PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T" MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="http://192.168.0.200:3000" MONGODB_HOST="http://192.168.0.200:3000"
LOGO_REG="freeplanet-logo-full.svg" LOGO_REG='logo-full.png'
TEST_NAME="Paolo" TEST_NAME="Paolo"
TEST_SURNAME="Arena" TEST_SURNAME="Arena"
TEST_EMAIL="paolo@freeplanet.app" TEST_EMAIL="perseo@freeplanet.app"
TEST_USERNAME="paoloar773" TEST_USERNAME="paoloar773"
TEST_PASSWORD="" TEST_PASSWORD="passpao1fr@1A"
TEST_APORTADOR="" TEST_APORTADOR=""
PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8' PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
IN_CONSTRUCTION="0" IN_CONSTRUCTION="0"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.1.8" APP_VERSION="0.1.9"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="1" APP_ID="1"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -208,7 +208,7 @@ const msg_website_it = {
descr: '<ul class="mylist" style="padding-left: 20px;">' descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>' + '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
+ '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>' + '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>'
+ '<li>Tramite una piccola <strong>donazione</strong> per le spese dei Server<br>' + '<li>Tramite una piccola <strong>donazione</strong> per le spese dei Server.<br>'
+ '</ul>' + '</ul>'
+ 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>', + 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>',
}, },

View File

@@ -416,7 +416,7 @@ const baseroutes: IListRoutes[] = [
active: true, active: true,
order: 130, order: 130,
path: '/friends', path: '/friends',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-user-friends',
name: 'mypages.friends', name: 'mypages.friends',
component: () => import('@/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
@@ -583,7 +583,7 @@ const baseroutes: IListRoutes[] = [
inmenu: true, inmenu: true,
}, },
{ {
active: true, active: false,
order: 80, order: 80,
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
@@ -628,8 +628,8 @@ const baseroutes: IListRoutes[] = [
const arrLangUsed = [ const arrLangUsed = [
'it', 'it',
'enUs', // 'enUs',
'es', // 'es',
] ]
const lang_available: ILang[] = [ const lang_available: ILang[] = [

View File

@@ -49,7 +49,7 @@ module.exports = configure((ctx) => ({
extras: [ extras: [
// 'ionicons-v4', // 'ionicons-v4',
// 'mdi-v5', // 'mdi-v5',
// 'eva-icons', 'eva-icons',
// 'themify', // 'themify',
// 'line-awesome', // 'line-awesome',
'ionicons-v4', 'ionicons-v4',
@@ -57,6 +57,7 @@ module.exports = configure((ctx) => ({
'fontawesome-v5', 'fontawesome-v5',
'roboto-font', // optional, you are not bound to it 'roboto-font', // optional, you are not bound to it
'material-icons', // optional, you are not bound to it 'material-icons', // optional, you are not bound to it
'material-icons-outlined'
], ],
aliases: { aliases: {
@@ -154,7 +155,6 @@ module.exports = configure((ctx) => ({
framework: { framework: {
config: {}, config: {},
// iconSet: 'material-icons', // Quasar icon set
// lang: 'en-US', // Quasar language pack // lang: 'en-US', // Quasar language pack
// For special cases outside of where the auto-import strategy can have an impact // For special cases outside of where the auto-import strategy can have an impact

View File

@@ -1,69 +0,0 @@
import {
defineComponent, ref, computed,
} from 'vue'
import { tools } from '@src/store/Modules/tools'
import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder'
import { CChartMap } from '@src/components/CChartMap'
import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data'
import MixinBase from '@/mixins/mixin-base'
export default defineComponent({
name: 'Home',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram },
setup() {
const globalStore = useGlobalStore()
const userStore = useUserStore()
const { getValDb } = MixinBase()
function isEmailVerified() {
return userStore.my.verified_email
}
function TelegCode() {
return userStore.my.profile.teleg_checkcode
}
function TelegVerificato(): boolean {
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
}
function openrighttoolbar() {
globalStore.rightDrawerOpen = true
}
function isLogged() {
return userStore.isLogged
}
function isUserOk() {
return userStore.isUserOk()
}
function getLinkBotTelegram(): string {
if (tools.isTest() && !process.env.DEV) {
return getValDb('TELEG_BOT_LINK_TEST', false)
} else{
return getValDb('TELEG_BOT_LINK', false)
}
}
return {
tools,
static_data,
isEmailVerified,
TelegCode,
TelegVerificato,
isLogged,
openrighttoolbar,
isUserOk,
getLinkBotTelegram,
}
},
})

View File

@@ -1,76 +0,0 @@
<template>
<q-page class="">
<!--<CChartMap
title="Mappa"
subtitle="cartina..."
serie1="Serie 1"
>
</CChartMap>-->
<!--<CMapsEsempio></CMapsEsempio>-->
<div v-if="isLogged()">
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<CVerifyTelegram v-if="TelegCode() || !TelegVerificato()">
</CVerifyTelegram>
<div v-if="isUserOk()">
<div v-if="isUserOk()">
<q-banner rounded class="bg-primary text-white">
<div class="text-h6 text-center">
Ora Accedi al Bot Telegram <br>
per vedere tutti i Menu e le chat !
</div>
<template v-slot:action>
<q-btn icon="fab fa-telegram" flat color="white" label="Accedi al Bot Telegram" type="a" target="__blank" :href="getLinkBotTelegram()"/>
</template>
</q-banner>
</div>
</div>
</div>
<div v-else>
<div class="q-pa-md q-gutter-sm">
<q-banner rounded class="bg-primary text-white">
<div class="text-h6 text-center">
Accedi al menu inserendo le tue credenziali 🔑<br><br>
📝 Non sei <strong>Registrato</strong>?<br>
👉🏻 Chiedi in chat il link a chi ti ha <strong>invitato</strong>.<br>
</div>
<template v-slot:action>
<q-btn flat color="white" label="Accedi al Login" @click="openrighttoolbar"/>
</template>
</q-banner>
</div>
<div
v-if="!isLogged() && static_data.functionality.ENABLE_REGISTRATION && static_data.functionality.SHOW_REG_BUTTON"
style="margin:20px; text-align: center;">
<q-btn rounded size="lg" color="primary" @click="openrighttoolbar">{{ $t('login.enter') }}
</q-btn>
</div>
<!--
<div v-if="!isLogged && static_data.functionality.ENABLE_REGISTRATION" align="center" style="margin:20px;">
<q-btn rounded size="lg" color="primary" to="/signup">{{$t('reg.submit')}}
</q-btn>
</div>
-->
</div>
</q-page>
</template>
<script lang="ts" src="./home.ts">
</script>
<style lang="scss" scoped>
@import './home.scss';
</style>

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.1.8" APP_VERSION="0.1.9"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="1" APP_ID="1"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -416,7 +416,7 @@ const baseroutes: IListRoutes[] = [
active: true, active: true,
order: 130, order: 130,
path: '/friends', path: '/friends',
materialIcon: 'eva-people-outline', materialIcon: 'fas fa-user-friends',
name: 'mypages.friends', name: 'mypages.friends',
component: () => import('@/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },

View File

@@ -57,6 +57,7 @@ module.exports = configure((ctx) => ({
'fontawesome-v5', 'fontawesome-v5',
'roboto-font', // optional, you are not bound to it 'roboto-font', // optional, you are not bound to it
'material-icons', // optional, you are not bound to it 'material-icons', // optional, you are not bound to it
'material-icons-outlined',
], ],
aliases: { aliases: {

View File

@@ -1,69 +0,0 @@
import {
defineComponent, ref, computed,
} from 'vue'
import { tools } from '@src/store/Modules/tools'
import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder'
import { CChartMap } from '@src/components/CChartMap'
import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data'
import MixinBase from '@/mixins/mixin-base'
export default defineComponent({
name: 'Home',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram },
setup() {
const globalStore = useGlobalStore()
const userStore = useUserStore()
const { getValDb } = MixinBase()
function isEmailVerified() {
return userStore.my.verified_email
}
function TelegCode() {
return userStore.my.profile.teleg_checkcode
}
function TelegVerificato(): boolean {
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
}
function openrighttoolbar() {
globalStore.rightDrawerOpen = true
}
function isLogged() {
return userStore.isLogged
}
function isUserOk() {
return userStore.isUserOk()
}
function getLinkBotTelegram(): string {
if ( tools.isTest() && !process.env.DEV) {
return getValDb('TELEG_BOT_LINK_TEST', false)
} else{
return getValDb('TELEG_BOT_LINK', false)
}
}
return {
tools,
static_data,
isEmailVerified,
TelegCode,
TelegVerificato,
isLogged,
openrighttoolbar,
isUserOk,
getLinkBotTelegram,
}
},
})

View File

@@ -1,67 +0,0 @@
<template>
<q-page class="">
<!--<CChartMap
title="Mappa"
subtitle="cartina..."
serie1="Serie 1"
>
</CChartMap>-->
<!--<CMapsEsempio></CMapsEsempio>-->
<div v-if="isLogged()">
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<CVerifyTelegram v-if="TelegCode() || !TelegVerificato()">
</CVerifyTelegram>
<div v-if="isUserOk()">
<div v-if="isUserOk()">
</div>
</div>
</div>
<div v-else>
<div class="q-pa-md q-gutter-sm">
<q-banner rounded class="bg-primary text-white">
<div class="text-h6 text-center">
Accedi al menu inserendo le tue credenziali 🔑<br><br>
📝 Non sei <strong>Registrato</strong>?<br>
👉🏻 Chiedi in chat il link a chi ti ha <strong>invitato</strong>.<br>
</div>
<template v-slot:action>
<q-btn flat color="white" label="Accedi al Login" @click="openrighttoolbar"/>
</template>
</q-banner>
</div>
<div
v-if="!isLogged() && static_data.functionality.ENABLE_REGISTRATION && static_data.functionality.SHOW_REG_BUTTON"
style="margin:20px; text-align: center;">
<q-btn rounded size="lg" color="primary" @click="openrighttoolbar">{{ $t('login.enter') }}
</q-btn>
</div>
<!--
<div v-if="!isLogged && static_data.functionality.ENABLE_REGISTRATION" align="center" style="margin:20px;">
<q-btn rounded size="lg" color="primary" to="/signup">{{$t('reg.submit')}}
</q-btn>
</div>
-->
</div>
</q-page>
</template>
<script lang="ts" src="./home.ts">
</script>
<style lang="scss" scoped>
@import './home.scss';
</style>

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.1.8" APP_VERSION="0.1.9"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="12" APP_ID="12"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -416,7 +416,7 @@ const baseroutes: IListRoutes[] = [
active: true, active: true,
order: 130, order: 130,
path: '/friends', path: '/friends',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-user-friends',
name: 'mypages.friends', name: 'mypages.friends',
component: () => import('@/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },

View File

@@ -57,6 +57,7 @@ module.exports = configure((ctx) => ({
'fontawesome-v5', 'fontawesome-v5',
'roboto-font', // optional, you are not bound to it 'roboto-font', // optional, you are not bound to it
'material-icons', // optional, you are not bound to it 'material-icons', // optional, you are not bound to it
'material-icons-outlined',
], ],
aliases: { aliases: {

View File

@@ -1,69 +0,0 @@
import {
defineComponent, ref, computed,
} from 'vue'
import { tools } from '@src/store/Modules/tools'
import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder'
import { CChartMap } from '@src/components/CChartMap'
import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data'
import MixinBase from '@/mixins/mixin-base'
export default defineComponent({
name: 'Home',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram },
setup() {
const globalStore = useGlobalStore()
const userStore = useUserStore()
const { getValDb } = MixinBase()
function isEmailVerified() {
return userStore.my.verified_email
}
function TelegCode() {
return userStore.my.profile.teleg_checkcode
}
function TelegVerificato(): boolean {
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
}
function openrighttoolbar() {
globalStore.rightDrawerOpen = true
}
function isLogged() {
return userStore.isLogged
}
function isUserOk() {
return userStore.isUserOk()
}
function getLinkBotTelegram(): string {
if ( tools.isTest() && !process.env.DEV) {
return getValDb('TELEG_BOT_LINK_TEST', false)
} else{
return getValDb('TELEG_BOT_LINK', false)
}
}
return {
tools,
static_data,
isEmailVerified,
TelegCode,
TelegVerificato,
isLogged,
openrighttoolbar,
isUserOk,
getLinkBotTelegram,
}
},
})

View File

@@ -1,76 +0,0 @@
<template>
<q-page class="">
<!--<CChartMap
title="Mappa"
subtitle="cartina..."
serie1="Serie 1"
>
</CChartMap>-->
<!--<CMapsEsempio></CMapsEsempio>-->
<div v-if="isLogged()">
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<CVerifyTelegram v-if="TelegCode() || !TelegVerificato()">
</CVerifyTelegram>
<div v-if="isUserOk()">
<div v-if="isUserOk()">
<q-banner rounded class="bg-primary text-white">
<div class="text-h6 text-center">
Ora Accedi al Bot Telegram <br>
per vedere tutti i Menu e le chat !
</div>
<template v-slot:action>
<q-btn icon="fab fa-telegram" flat color="white" label="Accedi al Bot Telegram" type="a" target="__blank" :href="getLinkBotTelegram()"/>
</template>
</q-banner>
</div>
</div>
</div>
<div v-else>
<div class="q-pa-md q-gutter-sm">
<q-banner rounded class="bg-primary text-white">
<div class="text-h6 text-center">
Accedi al menu inserendo le tue credenziali 🔑<br><br>
📝 Non sei <strong>Registrato</strong>?<br>
👉🏻 Chiedi in chat il link a chi ti ha <strong>invitato</strong>.<br>
</div>
<template v-slot:action>
<q-btn flat color="white" label="Accedi al Login" @click="openrighttoolbar"/>
</template>
</q-banner>
</div>
<div
v-if="!isLogged() && static_data.functionality.ENABLE_REGISTRATION && static_data.functionality.SHOW_REG_BUTTON"
style="margin:20px; text-align: center;">
<q-btn rounded size="lg" color="primary" @click="openrighttoolbar">{{ $t('login.enter') }}
</q-btn>
</div>
<!--
<div v-if="!isLogged && static_data.functionality.ENABLE_REGISTRATION" align="center" style="margin:20px;">
<q-btn rounded size="lg" color="primary" to="/signup">{{$t('reg.submit')}}
</q-btn>
</div>
-->
</div>
</q-page>
</template>
<script lang="ts" src="./home.ts">
</script>
<style lang="scss" scoped>
@import './home.scss';
</style>

View File

@@ -1,8 +1,8 @@
{ {
"name": "freeplanet", "name": "popolodelnuovomondo",
"version": "0.0.7", "version": "0.0.8",
"description": "FreePlanet", "description": "Popolo Del Nuovo Mondo",
"productName": "FreePlanet", "productName": "Popolo Del Nuovo Mondo",
"author": "Paolo Arena", "author": "Paolo Arena",
"private": true, "private": true,
"keywords": [ "keywords": [
@@ -23,25 +23,25 @@
"dependencies": { "dependencies": {
"axios": "0.21.4", "axios": "0.21.4",
"@vue/eslint-config-standard": "5.1.2", "@vue/eslint-config-standard": "5.1.2",
"@quasar/extras": "^1.12.2", "@quasar/extras": "^1.12.4",
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.11", "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.12",
"@vue/compat": "^3.2.26", "@vue/compat": "^3.2.26",
"@vue/compiler-sfc": "^3.2.26", "@vue/compiler-sfc": "^3.2.26",
"@vuelidate/core": "^2.0.0-alpha.32", "@vuelidate/core": "^2.0.0-alpha.34",
"@vuelidate/validators": "^2.0.0-alpha.25", "@vuelidate/validators": "^2.0.0-alpha.26",
"acorn": "^8.6.0", "acorn": "^8.7.0",
"autoprefixer": "^10.4.0", "autoprefixer": "^10.4.2",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"core-js": "^3.20.0", "core-js": "^3.20.3",
"crypto": "^1.0.1", "crypto": "^1.0.1",
"date-fns": "^2.27.0", "date-fns": "^2.28.0",
"dotenv": "^10.0.0", "dotenv": "^11.0.0",
"echarts": "^5.2.2", "echarts": "^5.2.2",
"eslint-plugin-quasar": "^1.0.0", "eslint-plugin-quasar": "^1.1.0",
"eslint-plugin-standard": "^5.0.0", "eslint-plugin-standard": "^5.0.0",
"graphql": "^16.1.0", "graphql": "^16.2.0",
"graphql-tag": "^2.12.6", "graphql-tag": "^2.12.6",
"gsap": "^3.9.0", "gsap": "^3.9.1",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.1",
"localforage": "^1.10.0", "localforage": "^1.10.0",
@@ -49,9 +49,9 @@
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"npm": "^8.3.0", "npm": "^8.3.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.0.6", "pinia": "^2.0.9",
"prerender-spa-plugin": "^3.4.0", "prerender-spa-plugin": "^3.4.0",
"quasar": "^2.3.4", "quasar": "^2.4.12",
"quasar-extras": "^2.0.9", "quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"vee-validate": "^4.4.10", "vee-validate": "^4.4.10",
@@ -72,9 +72,9 @@
}, },
"devDependencies": { "devDependencies": {
"node-sass": "6.0.1", "node-sass": "6.0.1",
"webpack": "^5.0.0", "webpack": "^5.66.0",
"@quasar/app": "^3.2.5", "@quasar/app": "^3.2.9",
"@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.11", "@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.12",
"@types/bcryptjs": "^2.4.2", "@types/bcryptjs": "^2.4.2",
"@types/dotenv": "^8.2.0", "@types/dotenv": "^8.2.0",
"@types/googlemaps": "^3.43.3", "@types/googlemaps": "^3.43.3",
@@ -84,31 +84,31 @@
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@types/vue-tel-input": "^2.1.2", "@types/vue-tel-input": "^2.1.2",
"@types/vuelidate": "^0.7.15", "@types/vuelidate": "^0.7.15",
"@typescript-eslint/eslint-plugin": "^5.7.0", "@typescript-eslint/eslint-plugin": "^5.10.0",
"@typescript-eslint/parser": "^5.7.0", "@typescript-eslint/parser": "^5.10.0",
"eslint": "^8.4.1", "eslint": "^8.7.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.3", "eslint-plugin-import": "^2.25.4",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.2.0", "eslint-plugin-promise": "^5.2.0",
"eslint-plugin-vue": "^8.2.0", "eslint-plugin-vue": "^8.3.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.0", "html-webpack-plugin": "^5.5.0",
"http-proxy-middleware": "^2.0.1", "http-proxy-middleware": "^2.0.1",
"jest": "^27.4.5", "jest": "^27.4.5",
"json-loader": "^0.5.7", "json-loader": "^0.5.7",
"npm-check-updates": "^12.0.5", "npm-check-updates": "^12.1.0",
"optimize-css-assets-webpack-plugin": "^6.0.1", "optimize-css-assets-webpack-plugin": "^6.0.1",
"postcss": "^8.4.5", "postcss": "^8.4.5",
"postcss-loader": "^6.2.1", "postcss-loader": "^6.2.1",
"sass-loader": "^12.4.0", "sass-loader": "^12.4.0",
"strip-ansi": "=7.0.1", "strip-ansi": "=7.0.1",
"ts-jest": "^27.1.1", "ts-jest": "^27.1.2",
"ts-loader": "^9.2.6", "ts-loader": "^9.2.6",
"tslint": "^6.1.3", "tslint": "^6.1.3",
"tslint-config-standard": "^9.0.0", "tslint-config-standard": "^9.0.0",
"tslint-loader": "^3.5.4", "tslint-loader": "^3.5.4",
"typescript": "^4.5.4", "typescript": "^4.5.5",
"vue-cli-plugin-element-ui": "^1.1.4", "vue-cli-plugin-element-ui": "^1.1.4",
"vueify": "^9.4.1", "vueify": "^9.4.1",
"workbox-webpack-plugin": "^6.4.2" "workbox-webpack-plugin": "^6.4.2"

View File

@@ -49,7 +49,7 @@ module.exports = configure((ctx) => ({
extras: [ extras: [
// 'ionicons-v4', // 'ionicons-v4',
// 'mdi-v5', // 'mdi-v5',
'eva-icons', // 'eva-icons',
// 'themify', // 'themify',
// 'line-awesome', // 'line-awesome',
'ionicons-v4', 'ionicons-v4',
@@ -57,7 +57,7 @@ module.exports = configure((ctx) => ({
'fontawesome-v5', 'fontawesome-v5',
'roboto-font', // optional, you are not bound to it 'roboto-font', // optional, you are not bound to it
'material-icons', // optional, you are not bound to it 'material-icons', // optional, you are not bound to it
'material-icons-outlined' 'material-icons-outlined',
], ],
aliases: { aliases: {
@@ -147,14 +147,16 @@ module.exports = configure((ctx) => ({
}, },
devServer: { devServer: {
https: false, https: false,
port: 8082, port: 8083,
open: false, // opens browser window automatically open: false, // opens browser window automatically
liveReload: false,
}, },
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework // https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework
framework: { framework: {
config: {}, config: {},
// iconSet: 'material-icons', // Quasar icon set
// lang: 'en-US', // Quasar language pack // lang: 'en-US', // Quasar language pack
// For special cases outside of where the auto-import strategy can have an impact // For special cases outside of where the auto-import strategy can have an impact
@@ -284,21 +286,31 @@ module.exports = configure((ctx) => ({
}, },
manifest: { manifest: {
name: 'FreePlanet', name: 'PopoloDelNuovoMondo',
short_name: 'FreePlanet', short_name: 'PdNM',
description: 'New Free Social', description: 'Popolo del Nuovo Mondo',
display: 'standalone', display: 'standalone',
orientation: 'portrait', orientation: 'portrait',
background_color: '#ffffff', background_color: '#ffffff',
theme_color: '#027be3', theme_color: '#027be3',
icons: [ icons: [
{ {
src: 'images/android-chrome-192x192.png', src: 'images/pdnm-android-icon-96x96.png',
sizes: '384x384', sizes: '96x96',
type: 'image/png', type: 'image/png',
}, },
{ {
src: 'images/android-chrome-512x512.png', src: 'images/pdnm-android-icon-144x144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: 'images/pdnm-android-icon-192x192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: 'images/pdnm-android-icon-512x512.png',
sizes: '512x512', sizes: '512x512',
type: 'image/png', type: 'image/png',
}, },

View File

@@ -16,5 +16,5 @@ export class Patterns {
* *
* 8 to 20 characters string with at least one digit, one upper case letter, one lower case letter and one special symbol * 8 to 20 characters string with at least one digit, one upper case letter, one lower case letter and one special symbol
*/ */
public static Password = /^((?=.*[A-Z])(?=.*\d)(?=.*[@#*=])(?!.* ).{8,30})/i public static Password = /^((?=.*[A-Z])(?=.*\d)(?!.* ).{8,30})/i
} }

View File

@@ -84,12 +84,14 @@ export const shared_consts = {
PARAM_SHOW_PROVINCE: 1, PARAM_SHOW_PROVINCE: 1,
TABLES_ID_NUMBER: ['permissions', 'levels', 'statusSkills', 'sectors', 'catgrps', 'skills', 'subskills', 'cities', 'provinces', 'myskills', 'mygroups'], TABLES_ID_NUMBER: ['permissions', 'levels', 'adtypes', 'statusSkills', 'sectors', 'catgrps', 'skills', 'subskills', 'cities', 'provinces', 'myskills', 'mygroups'],
TABLES_USER_ID: ['myskills'], TABLES_USER_ID: ['myskills'],
TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybots'], TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybots'],
TABLES_FINDER: ['myskills', 'mygroups'], TABLES_FINDER: ['myskills', 'mygroups'],
TABLES_PERM_CHANGE_FOR_USERS: ['myskills'], TABLES_PERM_CHANGE_FOR_USERS: ['myskills'],
TABLES_VISU_LISTA_USER: ['myskills', 'users'],
TABLES_NOT_SHOW_IF_USERNAME: ['myskills'],
VISIB_ALL: 0, VISIB_ALL: 0,
VISIB_ONLYIF_VERIFIED: 1, VISIB_ONLYIF_VERIFIED: 1,
@@ -459,6 +461,10 @@ export const shared_consts = {
label: 'Reggio Emilia', label: 'Reggio Emilia',
value: 'RE', value: 'RE',
}, },
{
label: 'Repubblica di San Marino',
value: 'RSM',
},
{ {
label: 'Rieti', label: 'Rieti',
value: 'RI', value: 'RI',

View File

@@ -90,6 +90,17 @@ export default defineComponent({
searchList.value = [ searchList.value = [
{
label: 'Offro/Cerco',
table: 'adtypes',
key: 'adType',
value: tools.getCookie(tools.COOK_SEARCH + 'adtypes', costanti.FILTER_TUTTI),
arrvalue: [],
addall: true,
type: costanti.FieldType.select,
filter: null,
useinput: false,
},
{ {
label: 'Settore', label: 'Settore',
table: 'sectors', table: 'sectors',
@@ -204,27 +215,6 @@ export default defineComponent({
} }
async function createNewRecordInUserTable() {
console.log('createNewRecordInUserTable')
let mydata = {
table: mytable,
data: {
userId: userStore.my._id,
data: {},
field: 'myskills'
}
};
if (props.defaultnewrec) {
mydata.data.data = props.defaultnewrec
}
console.log('mydata', mydata)
const data = await globalStore.saveSubRec(mydata)
}
function getdefaultnewrec(): IMySkill { function getdefaultnewrec(): IMySkill {
return { return {
_id: 0, _id: 0,
@@ -235,9 +225,10 @@ export default defineComponent({
idContribType: [], idContribType: [],
idCity: [], idCity: [],
NumLevel: 0, NumLevel: 0,
adType: 0,
photos: [], photos: [],
note: '', note: '',
subTitle: '', descr: '',
} }
} }
@@ -263,13 +254,15 @@ export default defineComponent({
idSector: 1, idSector: 1,
idSkill: 1, idSkill: 1,
idSubSkill: 1, idSubSkill: 1,
myskill: 1,
idStatusSkill: 1, idStatusSkill: 1,
idContribType: 1, idContribType: 1,
idCity: 1, idCity: 1,
numLevel: 1, numLevel: 1,
adType: 1,
photos: 1, photos: 1,
note: 1, note: 1,
subTitle: 1, descr: 1,
date_created: 1, date_created: 1,
date_updated: 1, date_updated: 1,
userId: 1, userId: 1,

View File

@@ -18,7 +18,9 @@
prop_mytitle="" prop_mytitle=""
:prop_mycolumns="colmySkills" :prop_mycolumns="colmySkills"
prop_colkey="idSkill" prop_colkey="idSkill"
col_title="subTitle" col_title="descr"
col_footer="idCity"
col_tabfooter="mycities"
:vertical="-1" :vertical="-1"
:nodataLabel="idSector > 0 ? 'Nessuna Competenza trovata': 'Selezionare un Settore'" :nodataLabel="idSector > 0 ? 'Nessuna Competenza trovata': 'Selezionare un Settore'"
:prop_search="true" :prop_search="true"

View File

@@ -18,7 +18,6 @@
</div> </div>
</q-card> </q-card>
<div v-if="!isInModif && getlistimages().length <= 0 && imagebak"> <div v-if="!isInModif && getlistimages().length <= 0 && imagebak">
<q-card :class="getclass()" @click="ImgFullScreen(mygallery)"> <q-card :class="getclass()" @click="ImgFullScreen(mygallery)">
<q-img <q-img
:src="imagebak" :class="getclimg()"> :src="imagebak" :class="getclimg()">

View File

@@ -20,6 +20,7 @@ import { lists } from '@store/Modules/lists'
import { IParamsQuery } from 'model' import { IParamsQuery } from 'model'
import { CMyPopupEdit } from '../CMyPopupEdit' import { CMyPopupEdit } from '../CMyPopupEdit'
import { CMyFriends } from '../CMyFriends' import { CMyFriends } from '../CMyFriends'
import { CMyUser } from '../CMyUser'
import { CMyGroups } from '../CMyGroups' import { CMyGroups } from '../CMyGroups'
import { CMyFieldDb } from '../CMyFieldDb' import { CMyFieldDb } from '../CMyFieldDb'
import { CMySelect } from '../CMySelect' import { CMySelect } from '../CMySelect'
@@ -172,6 +173,16 @@ export default defineComponent({
required: false, required: false,
default: '', default: '',
}, },
col_footer: {
type: String,
required: false,
default: '',
},
col_tabfooter: {
type: String,
required: false,
default: '',
},
showCol: { showCol: {
type: Boolean, type: Boolean,
required: false, required: false,
@@ -193,7 +204,7 @@ export default defineComponent({
default: '', default: '',
}, },
}, },
components: { CMyPopupEdit, CTitleBanner, CMyFieldDb, CMySelect, CMyFriends, CMyGroups }, components: { CMyPopupEdit, CTitleBanner, CMyFieldDb, CMySelect, CMyFriends, CMyGroups, CMyUser },
setup(props, { emit }) { setup(props, { emit }) {
const $q = useQuasar() const $q = useQuasar()
const { t } = useI18n() const { t } = useI18n()
@@ -342,6 +353,8 @@ export default defineComponent({
if (userId === userStore.my._id) { if (userId === userStore.my._id) {
// E' il mio, quindi modificalo // E' il mio, quindi modificalo
return true return true
} else {
return false
} }
} else { } else {
return false return false
@@ -878,9 +891,7 @@ export default defineComponent({
pagination.value = props.prop_pagination pagination.value = props.prop_pagination
myvertical.value = props.vertical myvertical.value = props.vertical
if (props.finder) { myvertical.value = tools.getCookie('myv_' + props.prop_mytable, props.vertical)
myvertical.value = tools.getCookie('myv', 0)
}
} }
function mounted() { function mounted() {
@@ -1019,7 +1030,7 @@ export default defineComponent({
function checkIfColShow(field: string | undefined) { function checkIfColShow(field: string | undefined) {
let vis = true let vis = true
if (props.prop_mytable === 'myskills' && !props.prop_search) { if (shared_consts.TABLES_NOT_SHOW_IF_USERNAME.includes(props.prop_mytable) && !props.prop_search) {
if (field === 'username') { if (field === 'username') {
vis = false vis = false
} }
@@ -1333,6 +1344,17 @@ export default defineComponent({
return '' return ''
} }
function getLabelFooterByRow(row: any) {
if (props.col_footer) {
let mycol = fieldsTable.getColByTable(tablesel.value, props.col_footer)
if (mycol) {
return tools.getValueByRemoteField(mycol, row, row[props.col_footer], props.col_tabfooter)
}
}
return ''
}
// onMounted(mounted) // onMounted(mounted)
created() created()
@@ -1413,6 +1435,7 @@ export default defineComponent({
showColCheck, showColCheck,
getValueExtra, getValueExtra,
shared_consts, shared_consts,
getLabelFooterByRow,
} }
} }
}) })

View File

@@ -247,13 +247,13 @@
<div v-if="choose_visutype" class=""> <div v-if="choose_visutype" class="">
<q-radio v-model="myvertical" :val="2" label="Lista" <q-radio v-model="myvertical" :val="2" label="Lista"
@update:model-value="tools.setCookie('myv', myvertical) "/> @update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>
<q-radio v-if="mytable === toolsext.TABMYGROUPS" v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_GROUP" label="Scheda" <q-radio v-if="mytable === toolsext.TABMYGROUPS" v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_GROUP" label="Scheda"
@update:model-value="tools.setCookie('myv', myvertical) "/> @update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>
<q-radio v-else v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_USER" label="Scheda" <q-radio v-else v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_USER" label="Scheda"
@update:model-value="tools.setCookie('myv', myvertical) "/> @update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>
<q-radio v-model="myvertical" :val="0" label="Tabella" <q-radio v-if="$q.screen.gt.xs" v-model="myvertical" :val="0" label="Tabella"
@update:model-value="tools.setCookie('myv', myvertical) "/> @update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>
</div> </div>
</template> </template>
@@ -303,8 +303,18 @@
</template> </template>
<template v-slot:item="props"> <template v-slot:item="props">
<div v-if="((showType === costanti.SHOW_USERINFO) && myvertical !== costanti.VISUTABLE_SCHEDA_USER) || ((myvertical === 2) && (tablesel === 'users' || tablesel === 'myskills'))" class="fill-all-width"> <div v-if="((showType === costanti.SHOW_USERINFO) && myvertical !== costanti.VISUTABLE_SCHEDA_USER) || ((myvertical === 2) && (shared_consts.TABLES_VISU_LISTA_USER.includes(tablesel)))" class="fill-all-width">
<div> <div>
<CMyUser
:mycontact="props.row"
:visu="visufind"
:groupname="extrafield"
:labelextra="col_title ? props.row[col_title] : ''"
:labelFooter="col_footer ? getLabelFooterByRow(props.row) : ''"
>
</CMyUser>
<!--
<CMyFriends <CMyFriends
v-model="filter" v-model="filter"
:finder="false" :finder="false"
@@ -313,6 +323,8 @@
:groupname="extrafield" :groupname="extrafield"
:labelextra="props.row[col_title]" :labelextra="props.row[col_title]"
/> />
-->
<q-separator></q-separator>
</div> </div>
</div> </div>
@@ -330,12 +342,14 @@
</div> </div>
<div <div
v-else v-else
class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3 grid-style-transition" class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3 "
:style="props.selected ? 'transform: scale(0.95);' : ''" :style="props.selected ? 'transform: scale(0.95);' : ''"
> >
<q-card :class="props.selected ? 'bg-grey-2 my-card' : 'my-card'">
<q-bar v-if="!visuinpage" dense class="bg-primary text-white full-height"> <q-card :class="props.selected ? 'bg-grey-2 my-card-withshadow no-padding' : 'my-card-withshadow no-padding'"
<span class=""> {{ props.row[col_title] }} </span> style="background: radial-gradient(circle, #ffffff 0%, #bbddff 100%)">
<q-bar v-if="!visuinpage && canModifyThisRec(props.row)" dense class="bg-primary text-white full-height">
<span v-if="props.row['username']">{{props.row['username']}}</span>
<q-space/> <q-space/>
<q-btn <q-btn
@@ -352,7 +366,8 @@
{{ props.row[col_title] }} {{ props.row[col_title] }}
</q-toolbar-title> </q-toolbar-title>
</q-toolbar>--> </q-toolbar>-->
<q-card-section class="inset-shadow">
<q-card-section class="">
<q-list dense> <q-list dense>
<div v-for="col in mycolumns" :key="col.name"> <div v-for="col in mycolumns" :key="col.name">
<q-item v-if="showColCheck(col, tools.TIPOVIS_SHOW_RECORD, false, tools.getValue(props.row,col.field, col.subfield))" <q-item v-if="showColCheck(col, tools.TIPOVIS_SHOW_RECORD, false, tools.getValue(props.row,col.field, col.subfield))"
@@ -438,7 +453,7 @@
</div> </div>
</div> </div>
</div> </div>
<q-dialog v-model="newRecordBool" @hide="hidewindow"> <q-dialog v-model="newRecordBool" @hide="hidewindow" :maximized="true">
<q-card class="dialog_card"> <q-card class="dialog_card">
<q-bar dense class="bg-primary text-white"> <q-bar dense class="bg-primary text-white">
Nuovo: Nuovo:
@@ -483,8 +498,7 @@
<q-dialog v-model="editRecordBool"> <q-dialog v-model="editRecordBool">
<q-card class="dialog_card"> <q-card class="dialog_card">
<q-bar dense class="bg-primary text-white full-height"> <q-bar dense class="bg-primary text-white full-height">
<span v-if="mytitle">{{ mytitle }}</span> <span class="ellipsis">{{ recModif[col_title] }}</span>
<span v-else>{{ recModif[col_title] }}</span>
<q-space/> <q-space/>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-bar> </q-bar>

View File

@@ -60,8 +60,8 @@ export default defineComponent({
const toolbarcomp = ref([ const toolbarcomp = ref([
['left', 'center', 'right', 'justify'], ['left', 'center', 'right', 'justify'],
['bold', 'italic', 'underline', 'strike'], ['bold', 'italic', 'underline', 'strike'],
['token', 'hr', 'link', 'custom_btn'], ['token', 'hr', 'link', 'custom_btn', 'print', 'fullscreen'],
['print', 'fullscreen'], [ [
{ {
label: $q.lang.editor.formatting, label: $q.lang.editor.formatting,
icon: $q.iconSet.editor.formatting, icon: $q.iconSet.editor.formatting,

View File

@@ -53,7 +53,7 @@
<q-btn v-if="col.tipovisu === costanti.TipoVisu.LINK && myvalue" <q-btn v-if="col.tipovisu === costanti.TipoVisu.LINK && myvalue"
type="a" rounded size="md" type="a" rounded size="md"
:class="{disabled: disable }" :class="{disabled: disable }"
color="white" text-color="blue" :icon="`img:`+userStore.getImgByUsername(myvalue)" :to="col.link.replace(col.name, myvalue)" color="white" text-color="blue" :icon="`img:`+userStore.getImgUserByUsername(myvalue)" :to="col.link.replace(col.name, myvalue)"
:label="myvalue" :label="myvalue"
> >
</q-btn> </q-btn>
@@ -108,7 +108,7 @@
</div> </div>
<div v-else-if="col.fieldtype === costanti.FieldType.listimages" style="text-align: center;"> <div v-else-if="col.fieldtype === costanti.FieldType.listimages" style="text-align: center;">
<CGallery <CGallery
:imagebak="col.showpicprofile_ifnotset ? userStore.getImgByProfile(row) : ''" :imagebak="col.showpicprofile_ifnotset ? userStore.getImgByProfile(row, true) : ''"
:title="getTitleGall()" :title="getTitleGall()"
:directory="getDirectoryGall()" :directory="getDirectoryGall()"
:imgGall="myvalue" :imgGall="myvalue"
@@ -122,7 +122,7 @@
<div v-if="canEdit"> <div v-if="canEdit">
{{ $t('reg.photo') }} {{ $t('reg.photo') }}
<CGallery <CGallery
:imagebak="col.showpicprofile_ifnotset ? userStore.getImgByProfile(row['profile']) : ''" :imagebak="col.showpicprofile_ifnotset ? userStore.getImgByProfile(row['profile'], true) : ''"
:title="getTitleGall()" :title="getTitleGall()"
:directory="getDirectoryGall()" :directory="getDirectoryGall()"
:imgGall="[{ imagefile: myvalue }]" :imgGall="[{ imagefile: myvalue }]"

View File

@@ -35,6 +35,16 @@ export default defineComponent({
type: String, type: String,
required: false, required: false,
default: '', default: '',
},
labelFooter: {
type: String,
required: false,
default: '',
},
notsetcmd: {
type: Boolean,
required: false,
default: false,
} }
}, },
@@ -79,7 +89,11 @@ export default defineComponent({
} }
function setCmd($q: any, cmd: number, myusername: string, value: any, groupname: string) { function setCmd($q: any, cmd: number, myusername: string, value: any, groupname: string) {
emit('setCmd', $q, cmd, myusername, value, groupname) if (props.notsetcmd) {
tools.setCmd($q, cmd, myusername, value, groupname)
}else {
emit('setCmd', $q, cmd, myusername, value, groupname)
}
} }
onMounted(mounted) onMounted(mounted)

View File

@@ -12,6 +12,8 @@
<q-item-label>{{ contact.username }} <span v-if="contact.name">({{ contact.name }} {{ contact.surname }})</span> <q-item-label>{{ contact.username }} <span v-if="contact.name">({{ contact.name }} {{ contact.surname }})</span>
</q-item-label> </q-item-label>
<q-item-label v-if="contact.profile" caption lines="1"><em>{{ contact.profile.qualifica }}</em></q-item-label> <q-item-label v-if="contact.profile" caption lines="1"><em>{{ contact.profile.qualifica }}</em></q-item-label>
<q-item-label caption lines="1"></q-item-label>
<q-item-label v-if="labelFooter" lines="1"><em>{{ labelFooter }}</em></q-item-label>
</q-item-section> </q-item-section>
<q-item-section side v-if="visu === costanti.FRIENDS"> <q-item-section side v-if="visu === costanti.FRIENDS">

View File

@@ -44,26 +44,6 @@ export default defineComponent({
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const userStore = useUserStore() const userStore = useUserStore()
async function createNewRecordInUserTable() {
console.log('createNewRecordInUserTable')
let mydata = {
table: mytable,
data: {
userId: userStore.my._id,
data: {},
field: 'myskills'
}
}
if (props.defaultnewrec) {
mydata.data.data = props.defaultnewrec
}
console.log('mydata', mydata)
const data = await globalStore.saveSubRec(mydata)
}
function getdefaultnewrec(): IMySkill { function getdefaultnewrec(): IMySkill {
return { return {
@@ -75,9 +55,10 @@ export default defineComponent({
idContribType: [], idContribType: [],
idCity: [], idCity: [],
NumLevel: 0, NumLevel: 0,
adType: 0,
photos: [], photos: [],
note: '', note: '',
subTitle: '', descr: '',
} }
} }
@@ -106,13 +87,15 @@ export default defineComponent({
idSector: 1, idSector: 1,
idSkill: 1, idSkill: 1,
idSubSkill: 1, idSubSkill: 1,
myskill: 1,
idStatusSkill: 1, idStatusSkill: 1,
idContribType: 1, idContribType: 1,
idCity: 1, idCity: 1,
numLevel: 1, numLevel: 1,
adType: 1,
photos: 1, photos: 1,
note: 1, note: 1,
subTitle: 1, descr: 1,
date_created: 1, date_created: 1,
date_updated: 1, date_updated: 1,
userId: 1, userId: 1,
@@ -137,13 +120,15 @@ export default defineComponent({
idSector: 1, idSector: 1,
idSkill: 1, idSkill: 1,
idSubSkill: 1, idSubSkill: 1,
myskill: 1,
idStatusSkill: 1, idStatusSkill: 1,
idContribType: 1, idContribType: 1,
idCity: 1, idCity: 1,
numLevel: 1, numLevel: 1,
adType: 1,
photos: 1, photos: 1,
note: 1, note: 1,
subTitle: 1, descr: 1,
date_created: 1, date_created: 1,
date_updated: 1, date_updated: 1,
comune: 1, comune: 1,

View File

@@ -7,7 +7,8 @@
prop_mytitle="" prop_mytitle=""
:prop_mycolumns="colmySkills" :prop_mycolumns="colmySkills"
prop_colkey="idSkill" prop_colkey="idSkill"
col_title="subTitle" col_title="descr"
col_footer="idCity"
:vertical="-1" :vertical="-1"
:choose_visutype="!visuinpage" :choose_visutype="!visuinpage"
:butt_modif_new="!visuinpage" :butt_modif_new="!visuinpage"

View File

@@ -0,0 +1,30 @@
import { computed, defineComponent, PropType, ref } from 'vue'
import { ICalcStat, IOperators } from '../../model'
import { useUserStore } from '../../store/UserStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '../../store/globalStore'
import { useI18n } from '../../boot/i18n'
import { CTitleBanner } from '@/components/CTitleBanner'
import { tools } from '@store/Modules/tools'
export default defineComponent({
name: 'CUserNonVerif',
components: {
CTitleBanner
},
props: {
},
setup(props) {
const userStore = useUserStore()
const $router = useRouter()
const globalStore = useGlobalStore()
const { t } = useI18n();
return {
userStore,
tools,
}
},
})

View File

@@ -0,0 +1,14 @@
<template>
<div class="q-ma-md">
<CTitleBanner title="Verifica">
La verifica è in corso. Ti arriverà un messaggio dal Bot quando sarai abilitato.
</CTitleBanner>
</div>
</template>
<script lang="ts" src="./CUserNonVerif.ts">
</script>
<style lang="scss" scoped>
@import './CUserNonVerif.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CUserNonVerif} from './CUserNonVerif.vue'

View File

@@ -80,6 +80,7 @@ export default defineComponent({
getNumMsg, getNumMsg,
getNumMsgUnread, getNumMsgUnread,
getMsgText, getMsgText,
isVerified,
paotest } = MixinUsers(); paotest } = MixinUsers();
function isonline() { function isonline() {
@@ -382,10 +383,6 @@ export default defineComponent({
return userStore.isLogged return userStore.isLogged
} }
function isEmailVerified() {
return userStore.my.verified_email
}
function clickregister() { function clickregister() {
rightDrawerOpen.value = false rightDrawerOpen.value = false
@@ -445,7 +442,6 @@ export default defineComponent({
lang, lang,
langshort, langshort,
isLogged, isLogged,
isEmailVerified,
getnumOrdersCart, getnumOrdersCart,
t, t,
isonline, isonline,
@@ -485,6 +481,7 @@ export default defineComponent({
paotest, paotest,
logoutHandler, logoutHandler,
isUserNotAuth, isUserNotAuth,
isVerified,
} }
}, },

View File

@@ -129,11 +129,18 @@
<q-img :src="getMyImgforIcon()" :alt="Username()" img-class=""/> <q-img :src="getMyImgforIcon()" :alt="Username()" img-class=""/>
</q-avatar>--> </q-avatar>-->
<q-avatar v-if="static_data.functionality.SHOW_USER_MENU && isLogged()"
<q-avatar v-if="static_data.functionality.SHOW_USER_MENU && isLogged() && getMyImg()"
size="36px" class="center_img cursor-pointer" size="36px" class="center_img cursor-pointer"
@click="rightDrawerOpen = !rightDrawerOpen"> @click="rightDrawerOpen = !rightDrawerOpen">
<q-img ratio="1" fit="conver" :src="getMyImg()" :alt="Username()" img-class="imgprofile_small" stretch="false" /> <q-img ratio="1" fit="conver" :src="getMyImg()" :alt="Username()" img-class="imgprofile_small" stretch="false"
placeholder-src="https://placeimg.com/36/36/nature"/>
</q-avatar> </q-avatar>
<q-btn
v-else
class="q-mx-xs iconprofile_small" round dense flat
@click="rightDrawerOpen = !rightDrawerOpen" :icon="getMyImgforIcon()" :color="getcolormenu()">
</q-btn>
<!--<q-btn <!--<q-btn
class="q-mx-xs iconprofile_small" v-if="static_data.functionality.SHOW_USER_MENU && isLogged()" round dense flat class="q-mx-xs iconprofile_small" v-if="static_data.functionality.SHOW_USER_MENU && isLogged()" round dense flat
@@ -188,7 +195,7 @@
dense flat round icon="close" @click="rightDrawerOpen = !rightDrawerOpen"> dense flat round icon="close" @click="rightDrawerOpen = !rightDrawerOpen">
</q-btn> </q-btn>
<div v-if="isLogged()" class="text-weight-bold text-user">{{ Username() }} - {{ myName() }} <div v-if="isLogged()" class="text-weight-bold text-user">{{ Username() }}<span v-if="myName()"> - {{ myName() }}</span>
</div> </div>
<div class="row justify-evenly q-pa-xs-sm"> <div class="row justify-evenly q-pa-xs-sm">
<div v-if="isLogged() && isAdmin()" class="text-weight-bold text-user bg-red q-px-xs">Admin</div> <div v-if="isLogged() && isAdmin()" class="text-weight-bold text-user bg-red q-px-xs">Admin</div>
@@ -203,7 +210,7 @@
{{ t('user.loggati') }} {{ t('user.loggati') }}
</div> </div>
<div v-if="isLogged() && !isEmailVerified()" class="text-verified">{{ <div v-if="isLogged() && !isVerified()" class="text-verified">{{
t('components.authentication.email_verification.verify_email') t('components.authentication.email_verification.verify_email')
}} }}
</div> </div>

View File

@@ -280,6 +280,14 @@ $heightBtn: 100%;
box-shadow: none; box-shadow: none;
} }
.my-card-withshadow {
width: 100%;
max-width: 300px;
min-width: 300px;
padding: 1rem 1rem;
}
.myimgtitle { .myimgtitle {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@@ -936,3 +944,7 @@ $heightBtn: 100%;
display: block; display: block;
} }
} }
.no-padding{
padding: 0 !important;
}

View File

@@ -102,7 +102,7 @@ const msg_website = {
descr: '<ul class="mylist" style="padding-left: 20px;">' descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>' + '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
+ '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>' + '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>'
+ '<li>Tramite una piccola <strong>donazione</strong> per le spese dei Server<br>' + '<li>Tramite una <strong>donazione</strong> (<strong>anche 1€</strong> ) per le spese.<br>'
+ '</ul>' + '</ul>'
+ 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>', + 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>',
}, },

View File

@@ -27,6 +27,10 @@ const msg_website_es = {
nave: 'Nave', nave: 'Nave',
testimonial: 'Opiniones', testimonial: 'Opiniones',
Test: 'Test', Test: 'Test',
chisiamo: 'Chi Siamo',
linkamici: 'Link Amici',
dovesiamo: 'Dove Siamo',
calendarioeventi: 'Calendario Eventi',
Category: 'Categorie', Category: 'Categorie',
Admin: 'Admin', Admin: 'Admin',
Test1: 'Test1', Test1: 'Test1',

View File

@@ -1,8 +1,8 @@
const msg_website_it = { const msg_website_it = {
ws: { ws: {
sitename: 'FreePlanet', sitename: 'PopoloDelNuovoMondo',
siteshortname: 'FreePlanet', siteshortname: 'PDNM',
botname: 'il Bot di FreePlanet', botname: 'il Bot di PdNM',
}, },
products: { products: {
quantity: 'Quantità', quantity: 'Quantità',
@@ -208,7 +208,7 @@ const msg_website_it = {
descr: '<ul class="mylist" style="padding-left: 20px;">' descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>' + '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
+ '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>' + '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>'
+ '<li>Tramite una piccola <strong>donazione</strong> per le spese dei Server.<br>' + '<li>Tramite una <strong>donazione</strong> (<strong>anche 1€</strong> ) per le spese.<br>'
+ '</ul>' + '</ul>'
+ 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>', + 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>',
}, },

View File

@@ -20,7 +20,7 @@ const functionality: IFunctionality = {
BOOKING_EVENTS: true, BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false, ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true, ENABLE_REG_ISP: true,
SHOW_NAMESURNAME: false, ENABLE_GROUPS: false,
} }
// const SHOW_PROJINTHEMENU = false // const SHOW_PROJINTHEMENU = false
@@ -374,12 +374,12 @@ const baseroutes: IListRoutes[] = [
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/home_freeplanet/home_freeplanet.vue'), component: () => import('@src/root/home_pdnm/home_pdnm.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
}, },
{ /*{
active: true, active: true,
order: 100, order: 100,
path: '/presentazione', path: '/presentazione',
@@ -389,7 +389,7 @@ const baseroutes: IListRoutes[] = [
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
}, },*/
{ {
active: true, active: true,
order: 120, order: 120,
@@ -424,7 +424,7 @@ const baseroutes: IListRoutes[] = [
infooter: true, infooter: true,
}, },
{ {
active: true, active: functionality.ENABLE_GROUPS,
order: 132, order: 132,
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
@@ -447,7 +447,7 @@ const baseroutes: IListRoutes[] = [
}, },
{ {
active: true, active: true,
order: 135, order: 136,
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
@@ -628,8 +628,8 @@ const baseroutes: IListRoutes[] = [
const arrLangUsed = [ const arrLangUsed = [
'it', 'it',
// 'enUs', 'enUs',
// 'es', 'es',
] ]
const lang_available: ILang[] = [ const lang_available: ILang[] = [

View File

@@ -113,7 +113,7 @@ export default function () {
function Verificato() { function Verificato() {
const userStore = useUserStore() const userStore = useUserStore()
return userStore.my.verified_email && userStore.my.verified_by_aportador return isVerified() && userStore.my.verified_by_aportador
} }
function paotest() { function paotest() {
@@ -155,6 +155,20 @@ export default function () {
return ris return ris
} }
function isEmailVerified() {
const userStore = useUserStore()
return userStore.my.verified_email
}
function TelegVerificato(): boolean {
const userStore = useUserStore()
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
}
function isVerified() {
return TelegVerificato()
}
return { return {
getUsernameChatByMsg, getUsernameChatByMsg,
getMyUsername, getMyUsername,
@@ -175,6 +189,9 @@ export default function () {
getNumMsg, getNumMsg,
getNumMsgUnread, getNumMsgUnread,
getMsgText, getMsgText,
isEmailVerified,
TelegVerificato,
isVerified,
paotest, paotest,
} }
} }

View File

@@ -257,6 +257,7 @@ export interface IGlobalState {
URL_RITORNA: string URL_RITORNA: string
URL_RESTORE: string URL_RESTORE: string
levels: ILevel[], levels: ILevel[],
adtypes: IAdType[],
skills: ISkill[], skills: ISkill[],
subSkills: ISubSkill[], subSkills: ISubSkill[],
statusSkills: IStatusSkill[], statusSkills: IStatusSkill[],
@@ -660,6 +661,11 @@ export interface ILevel {
years_of_exp: number years_of_exp: number
} }
export interface IAdType {
_id: number
descr: string
}
export interface ICity { export interface ICity {
_id: number _id: number
istat: string istat: string
@@ -677,8 +683,9 @@ export interface IMySkill {
idCity: number[] idCity: number[]
photos: IGallery[] photos: IGallery[]
NumLevel: number NumLevel: number
adType: number
note: string note: string
subTitle: string descr: string
date_created?: Date, date_created?: Date,
date_updated?: Date, date_updated?: Date,
} }

View File

@@ -7,6 +7,7 @@ import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder' import { CFinder } from '@/components/CFinder'
import { CDashboard } from '@/components/CDashboard' import { CDashboard } from '@/components/CDashboard'
import { CChartMap } from '@src/components/CChartMap' import { CChartMap } from '@src/components/CChartMap'
import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CMapsEsempio } from '@src/components/CMapsEsempio' import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail' import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram' import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
@@ -14,28 +15,22 @@ import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data' import { static_data } from '@/db/static_data'
import MixinBase from '@/mixins/mixin-base' import MixinBase from '@/mixins/mixin-base'
import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({ export default defineComponent({
name: 'Home', name: 'Home',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif },
setup() { setup() {
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const userStore = useUserStore() const userStore = useUserStore()
const { getValDb } = MixinBase() const { getValDb } = MixinBase()
const { isEmailVerified, TelegVerificato } = MixinUsers()
function isEmailVerified() {
return userStore.my.verified_email
}
function TelegCode() { function TelegCode() {
return userStore.my.profile.teleg_checkcode return userStore.my.profile.teleg_checkcode
} }
function TelegVerificato(): boolean {
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
}
function openrighttoolbar() { function openrighttoolbar() {
globalStore.rightDrawerOpen = true globalStore.rightDrawerOpen = true
} }

View File

@@ -13,14 +13,14 @@
<div v-if="isLogged()"> <div v-if="isLogged()">
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<CVerifyTelegram v-if="TelegCode() || !TelegVerificato()"> <CVerifyTelegram v-if="TelegCode() || !TelegVerificato()">
</CVerifyTelegram> </CVerifyTelegram>
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<div v-if="isUserOk()"> <div v-if="isUserOk()">
<CFinder> <CFinder>
@@ -30,6 +30,9 @@
<CDashboard></CDashboard> <CDashboard></CDashboard>
</div> </div>
<div v-else>
<CUserNonVerif></CUserNonVerif>
</div>
</div> </div>
<div v-else> <div v-else>

View File

@@ -7,6 +7,7 @@ import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder' import { CFinder } from '@/components/CFinder'
import { CChartMap } from '@src/components/CChartMap' import { CChartMap } from '@src/components/CChartMap'
import { CDashboard } from '@/components/CDashboard' import { CDashboard } from '@/components/CDashboard'
import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CMapsEsempio } from '@src/components/CMapsEsempio' import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail' import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram' import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
@@ -14,19 +15,17 @@ import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data' import { static_data } from '@/db/static_data'
import MixinBase from '@/mixins/mixin-base' import MixinBase from '@/mixins/mixin-base'
import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({ export default defineComponent({
name: 'Home', name: 'Home',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif },
setup() { setup() {
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const userStore = useUserStore() const userStore = useUserStore()
const { getValDb } = MixinBase() const { getValDb } = MixinBase()
const { isEmailVerified } = MixinUsers()
function isEmailVerified() {
return userStore.my.verified_email
}
function TelegCode() { function TelegCode() {
return userStore.my.profile.teleg_checkcode return userStore.my.profile.teleg_checkcode

View File

@@ -13,14 +13,14 @@
<div v-if="isLogged()"> <div v-if="isLogged()">
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<CVerifyTelegram v-if="TelegCode() || !TelegVerificato()"> <CVerifyTelegram v-if="TelegCode() || !TelegVerificato()">
</CVerifyTelegram> </CVerifyTelegram>
<CVerifyEmail v-if="!isEmailVerified() && !TelegVerificato()">
</CVerifyEmail>
<div v-if="isUserOk()"> <div v-if="isUserOk()">
<div v-if="isUserOk()"> <div v-if="isUserOk()">
@@ -32,6 +32,9 @@
</div> </div>
</div> </div>
<div v-else>
<CUserNonVerif></CUserNonVerif>
</div>
</div> </div>
<div v-else> <div v-else>

View File

@@ -7,6 +7,7 @@ import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder' import { CFinder } from '@/components/CFinder'
import { CChartMap } from '@src/components/CChartMap' import { CChartMap } from '@src/components/CChartMap'
import { CDashboard } from '@/components/CDashboard' import { CDashboard } from '@/components/CDashboard'
import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CMapsEsempio } from '@src/components/CMapsEsempio' import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail' import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram' import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
@@ -14,28 +15,23 @@ import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data' import { static_data } from '@/db/static_data'
import MixinBase from '@/mixins/mixin-base' import MixinBase from '@/mixins/mixin-base'
import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({ export default defineComponent({
name: 'Home', name: 'Home',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif },
setup() { setup() {
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const userStore = useUserStore() const userStore = useUserStore()
const { getValDb } = MixinBase() const { getValDb } = MixinBase()
const { isEmailVerified, TelegVerificato } = MixinUsers()
function isEmailVerified() {
return userStore.my.verified_email
}
function TelegCode() { function TelegCode() {
return userStore.my.profile.teleg_checkcode return userStore.my.profile.teleg_checkcode
} }
function TelegVerificato(): boolean {
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
}
function openrighttoolbar() { function openrighttoolbar() {
globalStore.rightDrawerOpen = true globalStore.rightDrawerOpen = true
} }

View File

@@ -12,14 +12,12 @@
<!--<CMapsEsempio></CMapsEsempio>--> <!--<CMapsEsempio></CMapsEsempio>-->
<div v-if="isLogged()"> <div v-if="isLogged()">
<CVerifyEmail v-if="!isEmailVerified()">
</CVerifyEmail>
<CVerifyTelegram v-if="TelegCode() || !TelegVerificato()"> <CVerifyTelegram v-if="TelegCode() || !TelegVerificato()">
</CVerifyTelegram> </CVerifyTelegram>
<CVerifyEmail v-if="!isEmailVerified() && !TelegVerificato()">
</CVerifyEmail>
<div v-if="isUserOk()"> <div v-if="isUserOk()">
@@ -39,6 +37,9 @@
</template> </template>
</q-banner> </q-banner>
</div> </div>
<div v-else>
<CUserNonVerif></CUserNonVerif>
</div>
</div> </div>
<div v-else> <div v-else>

View File

@@ -31,7 +31,7 @@ const msg_it = {
otherpages: { otherpages: {
product: 'Prodotto', product: 'Prodotto',
sito_offline: 'Sito in Aggiornamento', sito_offline: 'Sito in Aggiornamento',
modifprof: 'Modifica Profilo', modifprof: 'Modifica',
modifgrp: 'Modifica Gruppo', modifgrp: 'Modifica Gruppo',
biografia: 'Biografia', biografia: 'Biografia',
qualifica: 'Qualifica (in breve)', qualifica: 'Qualifica (in breve)',

View File

@@ -316,6 +316,11 @@ export const colTableStorehouse = [
AddCol(DuplicateRec), AddCol(DuplicateRec),
] ]
export const colAdType = [
AddCol({ name: '_id', label_trans: 'index', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'descr', label_trans: 'store.description' }),
]
export const colSectors = [ export const colSectors = [
AddCol({ name: '_id', label_trans: 'index', fieldtype: costanti.FieldType.number }), AddCol({ name: '_id', label_trans: 'index', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'descr', label_trans: 'store.description' }), AddCol({ name: 'descr', label_trans: 'store.description' }),
@@ -502,7 +507,7 @@ export const colmyUserGroup = [
noshowlabel: true, noshowlabel: true,
icon: 'fas fa-map-marker-alt', icon: 'fas fa-map-marker-alt',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
remote_table: 'comune', remote_table: 'mycities',
remote_key: '_id', remote_key: '_id',
remote_field: 'comune', remote_field: 'comune',
}), }),
@@ -523,8 +528,18 @@ export const colmySkills = [
}), */ }), */
//AddCol({ name: 'name', label_trans: 'reg.name', fieldtype: costanti.FieldType.string }), //AddCol({ name: 'name', label_trans: 'reg.name', fieldtype: costanti.FieldType.string }),
//AddCol({ name: 'surname', label_trans: 'reg.surname', fieldtype: costanti.FieldType.string }), //AddCol({ name: 'surname', label_trans: 'reg.surname', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'subTitle', label_trans: 'event.title', fieldtype: costanti.FieldType.string, // AddCol({ name: 'subTitle', label_trans: 'event.title', fieldtype: costanti.FieldType.string,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit , maxlength: 70, noshowlabel: true }), // showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit , maxlength: 70, noshowlabel: true }),
AddCol({
name: 'adTypes',
label_trans: 'adTypes.name',
fieldtype: costanti.FieldType.select,
required: true,
jointable: 'adtypes',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
noshowlabel: true,
icon: 'grading',
}),
AddCol({ name: 'descr', label_trans: 'proj.shortdescr', fieldtype: costanti.FieldType.string, AddCol({ name: 'descr', label_trans: 'proj.shortdescr', fieldtype: costanti.FieldType.string,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist, noshowlabel: true, maxlength: 200 }), showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist, noshowlabel: true, maxlength: 200 }),
AddCol({ AddCol({
@@ -569,7 +584,7 @@ export const colmySkills = [
filter_field: 'idSkill', filter_field: 'idSkill',
noshowlabel: true, noshowlabel: true,
icon: 'far fa-id-card', icon: 'far fa-id-card',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
allowNewValue: true, allowNewValue: true,
}), }),
AddCol({ AddCol({
@@ -609,7 +624,10 @@ export const colmySkills = [
tablesel: 'cities', tablesel: 'cities',
noshowlabel: true, noshowlabel: true,
icon: 'fas fa-map-marker-alt', icon: 'fas fa-map-marker-alt',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
remote_table: 'mycities',
remote_key: '_id',
remote_field: 'comune',
}), }),
AddCol({ name: 'username', label_trans: 'reg.username', foredit: false, tipovisu: costanti.TipoVisu.LINK, link: '/my/username', noshowlabel: true }), AddCol({ name: 'username', label_trans: 'reg.username', foredit: false, tipovisu: costanti.TipoVisu.LINK, link: '/my/username', noshowlabel: true }),
AddCol({ name: 'note', label_trans: 'proj.longdescr', fieldtype: costanti.FieldType.html, AddCol({ name: 'note', label_trans: 'proj.longdescr', fieldtype: costanti.FieldType.html,
@@ -1984,6 +2002,13 @@ export const fieldsTable = {
colkey: '_id', colkey: '_id',
collabel: 'descr', collabel: 'descr',
}, },
{
value: 'adtypes',
label: 'Tipo Annuncio',
columns: colAdType,
colkey: '_id',
collabel: 'descr',
},
{ {
value: 'cities', value: 'cities',
label: 'Comune', label: 'Comune',

View File

@@ -3124,7 +3124,7 @@ export const tools = {
const msg2 = t('fetch.errore_generico') + userStore.getMsgError(riscode) const msg2 = t('fetch.errore_generico') + userStore.getMsgError(riscode)
this.showNotif(mythisq, msg2) this.showNotif(mythisq, msg2)
} else if (riscode === this.OK) { } else if (riscode === this.OK) {
$router.push('/regok') $router.push('/')
this.showNotif(mythisq, t('components.authentication.email_verification.link_sent', { botname: t('ws.botname') }), { this.showNotif(mythisq, t('components.authentication.email_verification.link_sent', { botname: t('ws.botname') }), {
color: 'green', color: 'green',
textColor: 'black', textColor: 'black',
@@ -4856,6 +4856,27 @@ export const tools = {
} else { } else {
return value[keyfunz] return value[keyfunz]
} }
},
getValueByRemoteField(col: IColGridTable, row: any, value: any, col_tabfooter: string) {
if (col) {
if (col.remote_table && col.remote_key && col.remote_field && col_tabfooter) {
const myarrremote = row[col.remote_table]
let myarr: any = []
for (const myrec of myarrremote) {
let myval = myrec[col.remote_field]
myarr.push(myval)
}
return myarr ? myarr.join(' - ') : ''
}
}
return ''
} }

View File

@@ -221,7 +221,12 @@ export const useUserStore = defineStore('UserStore', {
return '' return ''
}, },
getImgByProfile(userparam: IUserFields): string { getImgUserByUsername(username: string): string {
let img = this.getImgByUsername(username)
return img ? img : 'images/noimg-user.svg'
},
getImgByProfile(userparam: IUserFields, reale: any = false): string {
try { try {
if (userparam.profile && userparam.profile.img) { if (userparam.profile && userparam.profile.img) {
@@ -229,7 +234,10 @@ export const useUserStore = defineStore('UserStore', {
} }
} catch (e) { } catch (e) {
} }
return 'images/noimg.png' if (!reale)
return 'images/noimg.png'
else
return ''
}, },
getImgByGroup(group: IMyGroup): string { getImgByGroup(group: IMyGroup): string {

View File

@@ -117,6 +117,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
URL_RITORNA: '', URL_RITORNA: '',
URL_RESTORE: '', URL_RESTORE: '',
levels: [], levels: [],
adtypes: [],
skills: [], skills: [],
subSkills: [], subSkills: [],
statusSkills: [], statusSkills: [],
@@ -232,6 +233,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
return state.settings return state.settings
else if (table === 'levels') else if (table === 'levels')
return state.levels return state.levels
else if (table === 'adtypes')
return state.adtypes
else if (table === 'skills') else if (table === 'skills')
return state.skills return state.skills
else if (table === 'subskills') else if (table === 'subskills')
@@ -1227,6 +1230,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
this.sectors = (res.data.sectors) ? [...res.data.sectors] : [] this.sectors = (res.data.sectors) ? [...res.data.sectors] : []
this.cities = (res.data.cities) ? [...res.data.cities] : [] this.cities = (res.data.cities) ? [...res.data.cities] : []
this.catgrps = (res.data.catgrps) ? [...res.data.catgrps] : [] this.catgrps = (res.data.catgrps) ? [...res.data.catgrps] : []
this.adtypes = (res.data.adtypes) ? [...res.data.adtypes] : []
// console.log('res.data.cart', res.data.cart) // console.log('res.data.cart', res.data.cart)

View File

@@ -220,6 +220,40 @@
<br> <br>
</div> </div>
<div class="row">
<q-btn
label="Populate Tables" color="negative"
@click="EseguiFunz('PopulateTables')"></q-btn>
<br>
</div>
<div class="row">
<q-btn
label="Rewrite Cities Table" color="negative"
@click="EseguiFunz('RewriteCitiesTable')"></q-btn>
<br>
</div>
<div class="row">
<q-btn
label="Rewrite Levels Table" color="negative"
@click="EseguiFunz('RewriteLevelsTable')"></q-btn>
<br>
</div>
<div class="row">
<q-btn
label="Rewrite Provinces Table" color="negative"
@click="EseguiFunz('RewriteProvincesTable')"></q-btn>
<br>
</div>
<div class="row">
<q-btn
label="Rewrite ContribType" color="negative"
@click="EseguiFunz('RewriteContribType')"></q-btn>
<br>
</div>
<q-field <q-field
stack-label stack-label

View File

@@ -2,6 +2,7 @@ import { defineComponent } from 'vue'
import { Footer } from '@/components/Footer' import { Footer } from '@/components/Footer'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({ export default defineComponent({
name: 'Regok', name: 'Regok',
@@ -9,13 +10,7 @@ export default defineComponent({
props: {}, props: {},
setup() { setup() {
const userStore = useUserStore() const userStore = useUserStore()
const { isEmailVerified } = MixinUsers()
function isEmailVerified() {
if (userStore.my)
return userStore.my.verified_email
else
return false
}
return { return {
isEmailVerified, isEmailVerified,

View File

@@ -74,7 +74,7 @@
<CTitleBanner <CTitleBanner
class="q-pa-xs" title="Competenze e Talenti" bgcolor="bg-primary" clcolor="text-white" class="q-pa-xs" title="Competenze Personali (Offerte)" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true"> myclass="myshad" :canopen="true">
<CSkill <CSkill

View File

@@ -89,6 +89,10 @@ export default defineComponent({
return site return site
} }
function isMyRecord(username: string){
return username === userStore.my.username
}
onMounted(mounted) onMounted(mounted)
return { return {
@@ -109,6 +113,7 @@ export default defineComponent({
t, t,
static_data, static_data,
animation, animation,
isMyRecord,
} }
} }
}) })

View File

@@ -1,125 +1,87 @@
<template> <template>
<div class="row q-col-gutter-sm q-ma-xs">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<q-card v-if="myuser.date_reg" class="my-card" flat bordered>
<q-card-section>
<div class="text-overline" v-if="myuser.profile.qualifica"><em><span
class="qualifica">{{ myuser.profile.qualifica }}</span></em></div>
<div class="text-overline"><span
v-if="myuser.profile && myuser.profile.born_city">{{ myuser.profile.born_city }}</span>
<span
v-if="myuser.profile && myuser.profile.nationality && myuser.profile.nationality !== 'Italia'">({{
myuser.profile.nationality
}})</span>
</div>
</q-card-section>
<q-card-section horizontal>
<q-card-section class="q-pt-xs">
<div class="text-h5 q-mt-sm q-mb-xs">{{ myuser.username }}</div>
<div class="text-caption text-blue-grey-10">
{{ myuser.profile.biografia }}
</div>
</q-card-section>
<q-card-section class="col-5 flex flex-center">
<q-avatar size="140px" class="rounded-borders">
<q-img :src="getImgUser()" :alt="username" img-class="imgprofile" height="140px" @click="showPic = true"/>
</q-avatar>
</q-card-section>
</q-card-section>
<q-separator/>
</q-card>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<q-card>
<q-card-section>
<div v-if="static_data.functionality.SHOW_NAMESURNAME">
<div class="text-h6">
<span v-if="checkifShow('name')"> {{ myuser.name }}</span> <span v-if="checkifShow('surname')">{{
myuser.surname
}}</span>
</div>
</div>
<div class="col-6 text-h6">
<CTitleBanner
class="" title="Info" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true">
<CDateTime
v-if="checkifShow('profile.dateofbirth') && !!myuser.profile.dateofbirth"
v-model:value="myuser.profile.dateofbirth"
:label="$t('reg.dateofbirth')"
:canEdit="false">
</CDateTime>
<q-card-section class="col-md-6 col-sm-6 q-ma-xs col-xs-12 flex flex-center">
<div>
<div v-if="myuser.username !== userStore.my.username">
<q-btn
v-if="!userStore.IsMyFriendByUsername(myuser.username) && !userStore.IsAskedFriendByUsername(myuser.username)"
icon="fas fa-user-plus"
color="primary" :label="$t('friends.ask_friend')"
@click="tools.setRequestFriendship($q, userStore.my.username, myuser.username, true)"
/>
<q-btn
v-if="userStore.IsAskedFriendByUsername(myuser.username) && !userStore.IsMyFriendByUsername(myuser.username)"
icon="fas fa-user-minus"
flat :label="$t('friends.cancel_ask_friend_short')"
@click="tools.cancelReqFriends($q, userStore.my.username, myuser.username)"
/>
</div>
<q-btn
v-if="myuser.username === myusername()" icon="fas fa-pencil-alt"
color="blue"
size="md"
:label="$t('otherpages.modifprof')"
to="/editprofile">
</q-btn>
</div>
<div v-if="myuser._id" class="myrow justify-evenly items-center q-pa-xs q-ma-xs">
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<q-btn
v-if="getLinkUserTelegram()" icon="fab fa-telegram"
color="blue" type="a"
size="md"
rounded
:label="$t('msgs.telegrammsg')"
:href="getLinkUserTelegram()" target="__blank">
</q-btn>
</div>
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<q-btn
v-if="getLinkWebSite()" icon="fas fa-globe"
color="blue" type="a"
size="md"
rounded
:label="$t('reg.website')"
:href="getLinkWebSite()" target="__blank">
</q-btn>
</div>
</div>
</q-card-section>
</CTitleBanner>
</div>
</q-card-section>
</q-card>
</div>
</div>
<div class="q-gutter-sm q-pa-sm q-pb-md"> <div class="q-gutter-sm q-pa-sm q-pb-md">
<div v-if="myuser.date_reg" class="fit column no-wrap justify-evenly items-center content-start"> <div v-if="myuser.date_reg" class="fit column no-wrap justify-evenly items-center content-start">
<div class="">
<q-avatar size="140px">
<q-img :src="getImgUser()" :alt="username" img-class="imgprofile" height="140px" @click="showPic = true"/>
</q-avatar>
</div>
<div v-if="static_data.functionality.SHOW_NAMESURNAME">
<div class="text-h6">
<span v-if="checkifShow('name')"> {{ myuser.name }}</span> <span v-if="checkifShow('surname')">{{
myuser.surname
}}</span>
</div>
</div>
<div class="col-12 text-h7 text-blue text-shadow-2">
{{ myuser.username }}
</div>
<div class="col-12 text-h7">
<span v-if="myuser.profile && myuser.profile.born_city">{{ myuser.profile.born_city }}</span> <span
v-if="myuser.profile && myuser.profile.nationality && myuser.profile.nationality !== 'Italia'">({{
myuser.profile.nationality
}})</span>
</div>
<div v-if="myuser._id" class="col-12 text-h8 q-mt-sm">
<span v-if="myuser.profile.qualifica">
<em><span class="qualifica">{{ myuser.profile.qualifica }}</span></em>
</span>
</div>
<div v-if="myuser._id" class="col-12 text-h8 q-mt-sm">
{{ myuser.profile.biografia }}
</div>
<div v-if="!isMyRecord(myuser.username)">
<q-btn
v-if="!userStore.IsMyFriendByUsername(myuser.username) && !userStore.IsAskedFriendByUsername(myuser.username)"
icon="fas fa-user-plus"
color="primary" :label="$t('friends.ask_friend')"
@click="tools.setRequestFriendship($q, userStore.my.username, myuser.username, true)"
/>
<q-btn
v-if="userStore.IsAskedFriendByUsername(myuser.username) && !userStore.IsMyFriendByUsername(myuser.username)"
icon="fas fa-user-minus"
flat :label="$t('friends.cancel_ask_friend_short')"
@click="tools.cancelReqFriends($q, userStore.my.username, myuser.username)"
/>
</div>
<q-btn
v-if="myuser.username === myusername()" icon="fas fa-pencil-alt"
color="blue"
size="md"
:label="$t('otherpages.modifprof')"
to="/editprofile">
</q-btn>
<div v-if="myuser._id" class="myrow justify-evenly items-center q-pa-sm q-ma-sm">
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<q-btn
v-if="getLinkUserTelegram()" icon="fab fa-telegram"
color="blue" type="a"
size="md"
rounded
:label="$t('msgs.telegrammsg')"
:href="getLinkUserTelegram()" target="__blank">
</q-btn>
</div>
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<q-btn
v-if="getLinkWebSite()" icon="fas fa-globe"
color="blue" type="a"
size="md"
rounded
:label="$t('reg.website')"
:href="getLinkWebSite()" target="__blank">
</q-btn>
</div>
</div>
</div> </div>
<div v-else class="fit column no-wrap justify-evenly items-center content-start"> <div v-else class="fit column no-wrap justify-evenly items-center content-start">
<q-skeleton type="QAvatar" size="140px" height="140px" animation="fade"/> <q-skeleton type="QAvatar" size="140px" height="140px" animation="fade"/>
@@ -149,7 +111,7 @@
<CSkill <CSkill
:filtercustom="filtroutente" :filtercustom="filtroutente"
:butt_modif_new="false" :butt_modif_new="isMyRecord(myuser.username)"
> >
@@ -158,6 +120,28 @@
</CTitleBanner> </CTitleBanner>
<div v-if="myuser._id">
<CTitleBanner
class="" :title="$t('dashboard.info')" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true">
<div v-if="myuser.profile" class="fit column no-wrap justify-evenly content-start">
<div class="col-6 text-h6">
<CDateTime
v-if="checkifShow('profile.dateofbirth') && !!myuser.profile.dateofbirth"
v-model:value="myuser.profile.dateofbirth"
:label="$t('reg.dateofbirth')"
:canEdit="false">
</CDateTime>
</div>
</div>
</CTitleBanner>
</div>
</div> </div>
<q-dialog <q-dialog