- Gruppi
@@ -1,23 +1,23 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="12"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
DIRECTORY_SERVER="freeplanet_serverside"
|
||||
SERVERDIR_WEBSITE=""
|
||||
SERVERPW_WEBSITE=""
|
||||
APP_URL="http://localhost"
|
||||
URL_FACEBOOK="https://www.facebook.com/"
|
||||
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
|
||||
PROVA_PAOLO="PROVA ENV FUNZIONA!"
|
||||
LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="http://192.168.0.200:3000"
|
||||
LOGO_REG="freeplanet-logo-full.svg"
|
||||
LOGO_REG='insiemesipuo-logo-full.png'
|
||||
TEST_NAME="Paolo"
|
||||
TEST_SURNAME="Arena"
|
||||
TEST_EMAIL="perseo@freeplanet.app"
|
||||
TEST_EMAIL="paolo@freeplanet.app"
|
||||
TEST_USERNAME="paoloar773"
|
||||
TEST_PASSWORD="passpao1fr@1A"
|
||||
TEST_PASSWORD=""
|
||||
TEST_APORTADOR=""
|
||||
PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
|
||||
IN_CONSTRUCTION="0"
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="12"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
DIRECTORY_SERVER=freeplanet_serverside
|
||||
SERVERDIR_WEBSITE=popolodelnuovomondo.app
|
||||
SERVERDIR_WEBSITE=www.insiemesipuo.app
|
||||
SERVERPW_WEBSITE=pwdadmin@1AOK
|
||||
APP_URL="https://popolodelnuovomondo.insiemesipuo.app"
|
||||
URL_FACEBOOK="https://www.facebook.com/"
|
||||
PROVA_PAOLO="PROVA ENV FUNZIONA!"
|
||||
APP_URL="https://www.insiemesipuo.app"
|
||||
URL_FACEBOOK=""
|
||||
PROVA_PAOLO=""
|
||||
LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="https://www.freeplanet.app:3000"
|
||||
LOGO_REG='freeplanet-logo-full.svg'
|
||||
LOGO_REG='insiemesipuo-logo-full.png'
|
||||
TEST_NAME=""
|
||||
TEST_SURNAME=""
|
||||
TEST_EMAIL=""
|
||||
@@ -22,7 +22,7 @@ TEST_APORTADOR="------"
|
||||
PUBLICKEY_PUSH="BNM-cEpTbPVc_ujXf3QOC8ggf7b-X44P44esfJUWqNOFq1XhWCoZJpOi71_cbXC5SnfO9HassQ6OouAYgtBA9Pw"
|
||||
IN_CONSTRUCTION="1"
|
||||
DEBUG="1"
|
||||
TELEGRAM_SUPPORT="https://t.me/freeplanet_supporto"
|
||||
TELEGRAM_SUPPORT="https://t.me/"
|
||||
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
|
||||
TEST_CELL=""
|
||||
ISTEST=0
|
||||
|
||||
16
.env.test
@@ -1,23 +1,23 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="12"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
DIRECTORY_SERVER=test.freeplanet_serverside
|
||||
SERVERDIR_WEBSITE="testpopolodelnuovomondo.app"
|
||||
SERVERDIR_WEBSITE="test.insiemesipuo.app"
|
||||
SERVERPW_WEBSITE="pwdadmin@1AOK"
|
||||
APP_URL="https://testpopolodelnuovomondo.insiemesipuo.app"
|
||||
URL_FACEBOOK="https://www.facebook.com/"
|
||||
PROVA_PAOLO="PROVA ENV FUNZIONA!"
|
||||
APP_URL="https://test.insiemesipuo.app"
|
||||
URL_FACEBOOK=""
|
||||
PROVA_PAOLO=""
|
||||
LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="https://test.freeplanet.app:3001"
|
||||
LOGO_REG="freeplanet-logo-full.svg"
|
||||
LOGO_REG='insiemesipuo-logo-full.png'
|
||||
TEST_NAME="Paolo"
|
||||
TEST_SURNAME="Arena"
|
||||
TEST_EMAIL="paolo@freeplanet.app"
|
||||
TEST_USERNAME="paoloar77"
|
||||
TEST_PASSWORD="passpao1fr@1A"
|
||||
TEST_PASSWORD=""
|
||||
TEST_APORTADOR=""
|
||||
PUBLICKEY_PUSH="BNRBtL3iaLVGW-aQckwQBmh5uKKzcizOZsMjnzCtSuHkssEhbyioEN2E_CwItDLDShMO-OQ1uhK51ty6zG_gCT8"
|
||||
IN_CONSTRUCTION="0"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
@@ -11,7 +11,7 @@ PROVA_PAOLO="PROVA ENV FUNZIONA!"
|
||||
LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="http://192.168.1.8:3000"
|
||||
MONGODB_HOST="http://192.168.0.200:3000"
|
||||
LOGO_REG="freeplanet-logo-full.svg"
|
||||
TEST_NAME="Paolo"
|
||||
TEST_SURNAME="Arena"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
448
_ALL_SITES/freeplanet.app/db/data/popolazione.js
Normal file
@@ -422,6 +422,17 @@ const baseroutes: IListRoutes[] = [
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 132,
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 135,
|
||||
@@ -433,6 +444,17 @@ const baseroutes: IListRoutes[] = [
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 135,
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 130,
|
||||
|
||||
BIN
_ALL_SITES/freeplanet.app/favicon.ico
Executable file
|
After Width: | Height: | Size: 15 KiB |
BIN
_ALL_SITES/freeplanet.app/images/favicon-16x16.png
Executable file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
_ALL_SITES/freeplanet.app/images/favicon-32x32.png
Executable file
|
After Width: | Height: | Size: 2.2 KiB |
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
@@ -11,7 +11,7 @@ PROVA_PAOLO="PROVA ENV FUNZIONA!"
|
||||
LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="http://192.168.1.8:3000"
|
||||
MONGODB_HOST="http://192.168.0.200:3000"
|
||||
LOGO_REG="freeplanet-logo-full.svg"
|
||||
TEST_NAME="Paolo"
|
||||
TEST_SURNAME="Arena"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
@@ -12,7 +12,7 @@ LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="https://www.freeplanet.app:3000"
|
||||
LOGO_REG='freeplanet-logo-full.svg'
|
||||
LOGO_REG='insiemesipuo-logo-full.png'
|
||||
TEST_NAME=""
|
||||
TEST_SURNAME=""
|
||||
TEST_EMAIL=""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="1"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
BIN
_ALL_SITES/insiemesipuo.app/images/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-android-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-android-icon-192x192.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-android-icon-48x48.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-android-icon-96x96.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-apple-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-apple-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-apple-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-apple-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-apple-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
_ALL_SITES/insiemesipuo.app/images/isp-favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="12"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="12"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="0.1.6"
|
||||
APP_VERSION="0.1.7"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="12"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
58
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "popolodelnuovomondo",
|
||||
"version": "0.0.8",
|
||||
"description": "Popolo Del Nuovo Mondo",
|
||||
"productName": "Popolo Del Nuovo Mondo",
|
||||
"name": "insiemesipuo",
|
||||
"version": "0.1.0",
|
||||
"description": "Insieme Si Puo",
|
||||
"productName": "Insieme Si Puo",
|
||||
"author": "Paolo Arena",
|
||||
"private": true,
|
||||
"keywords": [
|
||||
@@ -23,25 +23,25 @@
|
||||
"dependencies": {
|
||||
"axios": "0.21.4",
|
||||
"@vue/eslint-config-standard": "5.1.2",
|
||||
"@quasar/extras": "^1.12.4",
|
||||
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.12",
|
||||
"@quasar/extras": "^1.12.2",
|
||||
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.11",
|
||||
"@vue/compat": "^3.2.26",
|
||||
"@vue/compiler-sfc": "^3.2.26",
|
||||
"@vuelidate/core": "^2.0.0-alpha.34",
|
||||
"@vuelidate/validators": "^2.0.0-alpha.26",
|
||||
"acorn": "^8.7.0",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"@vuelidate/core": "^2.0.0-alpha.32",
|
||||
"@vuelidate/validators": "^2.0.0-alpha.25",
|
||||
"acorn": "^8.6.0",
|
||||
"autoprefixer": "^10.4.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"core-js": "^3.20.3",
|
||||
"core-js": "^3.20.0",
|
||||
"crypto": "^1.0.1",
|
||||
"date-fns": "^2.28.0",
|
||||
"dotenv": "^11.0.0",
|
||||
"date-fns": "^2.27.0",
|
||||
"dotenv": "^10.0.0",
|
||||
"echarts": "^5.2.2",
|
||||
"eslint-plugin-quasar": "^1.1.0",
|
||||
"eslint-plugin-quasar": "^1.0.0",
|
||||
"eslint-plugin-standard": "^5.0.0",
|
||||
"graphql": "^16.2.0",
|
||||
"graphql": "^16.1.0",
|
||||
"graphql-tag": "^2.12.6",
|
||||
"gsap": "^3.9.1",
|
||||
"gsap": "^3.9.0",
|
||||
"jquery": "^3.6.0",
|
||||
"js-cookie": "^3.0.1",
|
||||
"localforage": "^1.10.0",
|
||||
@@ -49,9 +49,9 @@
|
||||
"normalize.css": "^8.0.1",
|
||||
"npm": "^8.3.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"pinia": "^2.0.9",
|
||||
"pinia": "^2.0.6",
|
||||
"prerender-spa-plugin": "^3.4.0",
|
||||
"quasar": "^2.4.12",
|
||||
"quasar": "^2.3.4",
|
||||
"quasar-extras": "^2.0.9",
|
||||
"register-service-worker": "^1.7.2",
|
||||
"vee-validate": "^4.4.10",
|
||||
@@ -72,9 +72,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"node-sass": "6.0.1",
|
||||
"webpack": "^5.66.0",
|
||||
"@quasar/app": "^3.2.9",
|
||||
"@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.12",
|
||||
"webpack": "^5.0.0",
|
||||
"@quasar/app": "^3.2.5",
|
||||
"@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.11",
|
||||
"@types/bcryptjs": "^2.4.2",
|
||||
"@types/dotenv": "^8.2.0",
|
||||
"@types/googlemaps": "^3.43.3",
|
||||
@@ -84,31 +84,31 @@
|
||||
"@types/nprogress": "^0.2.0",
|
||||
"@types/vue-tel-input": "^2.1.2",
|
||||
"@types/vuelidate": "^0.7.15",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.0",
|
||||
"@typescript-eslint/parser": "^5.10.0",
|
||||
"eslint": "^8.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.7.0",
|
||||
"@typescript-eslint/parser": "^5.7.0",
|
||||
"eslint": "^8.4.1",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.25.4",
|
||||
"eslint-plugin-import": "^2.25.3",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^5.2.0",
|
||||
"eslint-plugin-vue": "^8.3.0",
|
||||
"eslint-plugin-vue": "^8.2.0",
|
||||
"file-loader": "^6.2.0",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"http-proxy-middleware": "^2.0.1",
|
||||
"jest": "^27.4.5",
|
||||
"json-loader": "^0.5.7",
|
||||
"npm-check-updates": "^12.1.0",
|
||||
"npm-check-updates": "^12.0.5",
|
||||
"optimize-css-assets-webpack-plugin": "^6.0.1",
|
||||
"postcss": "^8.4.5",
|
||||
"postcss-loader": "^6.2.1",
|
||||
"sass-loader": "^12.4.0",
|
||||
"strip-ansi": "=7.0.1",
|
||||
"ts-jest": "^27.1.2",
|
||||
"ts-jest": "^27.1.1",
|
||||
"ts-loader": "^9.2.6",
|
||||
"tslint": "^6.1.3",
|
||||
"tslint-config-standard": "^9.0.0",
|
||||
"tslint-loader": "^3.5.4",
|
||||
"typescript": "^4.5.5",
|
||||
"typescript": "^4.5.4",
|
||||
"vue-cli-plugin-element-ui": "^1.1.4",
|
||||
"vueify": "^9.4.1",
|
||||
"workbox-webpack-plugin": "^6.4.2"
|
||||
|
||||
BIN
public/favicon.ico
Executable file → Normal file
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
public/images/favicon-16x16.png
Executable file → Normal file
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
public/images/favicon-32x32.png
Executable file → Normal file
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.6 KiB |
BIN
public/images/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 200 KiB |
BIN
public/images/insiemesipuo-logo-full.png
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
public/images/isp-android-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/images/isp-android-icon-192x192.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/images/isp-android-icon-48x48.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
public/images/isp-android-icon-96x96.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/images/isp-apple-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/images/isp-apple-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/images/isp-apple-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/images/isp-apple-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/images/isp-apple-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/images/isp-favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 190 KiB |
BIN
public/upload/mygroups/noi_siamo_magia.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/upload/mygroups/sm_noi_siamo_magia.jpg
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
@@ -146,9 +146,8 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
devServer: {
|
||||
https: false,
|
||||
port: 8083,
|
||||
port: 8082,
|
||||
open: false, // opens browser window automatically
|
||||
liveReload: false,
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework
|
||||
@@ -285,21 +284,31 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
|
||||
manifest: {
|
||||
name: 'PopoloDelNuovoMondo',
|
||||
short_name: 'PdNM',
|
||||
description: 'Popolo del Nuovo Mondo',
|
||||
name: 'InsiemeSiPuo',
|
||||
short_name: 'InsiemeSiPuo',
|
||||
description: 'Insieme Si Può',
|
||||
display: 'standalone',
|
||||
orientation: 'portrait',
|
||||
background_color: '#ffffff',
|
||||
theme_color: '#027be3',
|
||||
icons: [
|
||||
{
|
||||
src: 'images/android-chrome-192x192.png',
|
||||
sizes: '384x384',
|
||||
src: 'images/isp-android-icon-96x96.png',
|
||||
sizes: '96x96',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/android-chrome-512x512.png',
|
||||
src: 'images/isp-android-icon-144x144.png',
|
||||
sizes: '144x144',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/isp-android-icon-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/isp-android-icon-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
},
|
||||
@@ -337,7 +346,7 @@ module.exports = configure((ctx) => ({
|
||||
builder: {
|
||||
// https://www.electron.build/configuration/configuration
|
||||
|
||||
appId: 'firstproj',
|
||||
appId: 'InsiemeSiPuo',
|
||||
},
|
||||
|
||||
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
|
||||
|
||||
@@ -54,6 +54,17 @@ export const shared_consts = {
|
||||
FIND_PEOPLE: 166,
|
||||
},
|
||||
|
||||
GROUPSCMD: {
|
||||
SETTRUST: 1121,
|
||||
REQGROUP: 1125,
|
||||
SETGROUP: 1132,
|
||||
REMOVE_FROM_MYGROUP: 1144,
|
||||
REFUSE_REQ_GROUP: 1145,
|
||||
CANCEL_REQ_GROUP: 1146,
|
||||
BLOCK_GROUP: 1155,
|
||||
FIND_GROUP: 1166,
|
||||
},
|
||||
|
||||
REPORT_FILT_RESP: 1,
|
||||
REPORT_FILT_ATTIVITA: 2,
|
||||
|
||||
@@ -673,6 +684,21 @@ export const shared_consts = {
|
||||
},
|
||||
],
|
||||
|
||||
VisibilGroup: [
|
||||
{
|
||||
value: 1,
|
||||
label: 'Pubblico',
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: 'Privato',
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
label: 'Nascosto',
|
||||
},
|
||||
],
|
||||
|
||||
Permissions: {
|
||||
Admin: {
|
||||
value: 1,
|
||||
|
||||
@@ -68,7 +68,7 @@ export default defineComponent({
|
||||
// @ts-ignore
|
||||
let myarr: any = props.imgGall
|
||||
gallerylist.value = []
|
||||
if (myarr) {
|
||||
if (Array.isArray(myarr)) {
|
||||
myarr.forEach((pic: any) => {
|
||||
if (pic.imagefile) {
|
||||
gallerylist.value.push(pic)
|
||||
|
||||
@@ -18,6 +18,7 @@ import { lists } from '@store/Modules/lists'
|
||||
import { IParamsQuery } from 'model'
|
||||
import { CMyPopupEdit } from '../CMyPopupEdit'
|
||||
import { CMyFriends } from '../CMyFriends'
|
||||
import { CMyGroups } from '../CMyGroups'
|
||||
import { CMyFieldDb } from '../CMyFieldDb'
|
||||
import { CMySelect } from '../CMySelect'
|
||||
import { CTitleBanner } from '../CTitleBanner'
|
||||
@@ -27,6 +28,7 @@ import { useGlobalStore } from '@store/globalStore'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
import translate from '@/globalroutines/util'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CGridTableRec',
|
||||
@@ -179,7 +181,7 @@ export default defineComponent({
|
||||
default: false
|
||||
}
|
||||
},
|
||||
components: { CMyPopupEdit, CTitleBanner, CMyFieldDb, CMySelect, CMyFriends },
|
||||
components: { CMyPopupEdit, CTitleBanner, CMyFieldDb, CMySelect, CMyFriends, CMyGroups },
|
||||
setup(props, { emit }) {
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
@@ -234,6 +236,7 @@ export default defineComponent({
|
||||
const selected: any = ref([])
|
||||
|
||||
const filter = ref(0)
|
||||
const filtergrp = ref(costanti.MY_GROUPS)
|
||||
|
||||
const mycodeid = toRef(props, 'prop_codeId')
|
||||
|
||||
@@ -1320,6 +1323,7 @@ export default defineComponent({
|
||||
myfilterand,
|
||||
tools,
|
||||
costanti,
|
||||
toolsext,
|
||||
fieldsTable,
|
||||
globalStore,
|
||||
searchList,
|
||||
@@ -1329,6 +1333,7 @@ export default defineComponent({
|
||||
valoriopt,
|
||||
labelcombo,
|
||||
filter,
|
||||
filtergrp,
|
||||
myvertical,
|
||||
showColCheck,
|
||||
getValueExtra,
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<q-spinner-tail size="2em" color="primary"/>
|
||||
</q-inner-loading>
|
||||
<q-table
|
||||
:grid="myvertical === -1 || myvertical === 2"
|
||||
:grid="myvertical === costanti.VISUTABLE_SCHEDA_USER || myvertical === 2 || myvertical === costanti.VISUTABLE_SCHEDA_GROUP"
|
||||
flat
|
||||
bordered
|
||||
class="my-sticky-header-table"
|
||||
@@ -89,11 +89,11 @@
|
||||
|
||||
<div class="row">
|
||||
<q-toggle
|
||||
v-for="(filter, index) of arrfilters"
|
||||
v-for="(filt, index) of arrfilters"
|
||||
:key="index"
|
||||
v-model="myfilterand" :disable="filter.hide"
|
||||
:val="filter.value"
|
||||
:label="filter.label">
|
||||
v-model="myfilterand" :disable="filt.hide"
|
||||
:val="filt.value"
|
||||
:label="filt.label">
|
||||
|
||||
</q-toggle>
|
||||
</div>
|
||||
@@ -244,7 +244,9 @@
|
||||
<div v-if="choose_visutype" class="">
|
||||
<q-radio v-model="myvertical" :val="2" label="Lista"
|
||||
@update:model-value="tools.setCookie('myv', myvertical) "/>
|
||||
<q-radio v-model="myvertical" :val="-1" 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) "/>
|
||||
<q-radio v-else v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_USER" label="Scheda"
|
||||
@update:model-value="tools.setCookie('myv', myvertical) "/>
|
||||
<q-radio v-model="myvertical" :val="0" label="Tabella"
|
||||
@update:model-value="tools.setCookie('myv', myvertical) "/>
|
||||
@@ -297,7 +299,7 @@
|
||||
|
||||
|
||||
<template v-slot:item="props">
|
||||
<div v-if="(showType === costanti.SHOW_USERINFO) || (myvertical === 2)" class="fill-all-width">
|
||||
<div v-if="((showType === costanti.SHOW_USERINFO) && myvertical !== costanti.VISUTABLE_SCHEDA_USER) || ((myvertical === 2) && (tablesel === 'users' || tablesel === 'myskills'))" class="fill-all-width">
|
||||
<div>
|
||||
<CMyFriends
|
||||
v-model="filter"
|
||||
@@ -307,6 +309,18 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else-if="((showType === costanti.SHOW_GROUPINFO) && myvertical !== costanti.VISUTABLE_SCHEDA_GROUP) || ((myvertical === 2) && (tablesel === 'mygroups'))" class="fill-all-width">
|
||||
<div>
|
||||
|
||||
<CMyGroups
|
||||
v-model="filtergrp"
|
||||
:finder="false"
|
||||
:mygrp="props.row"
|
||||
:visu="costanti.FIND_GROUP"
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
|
||||
@@ -114,6 +114,11 @@ export default defineComponent({
|
||||
return (arr) ? arr.length : 0
|
||||
})
|
||||
|
||||
const numAskSentGroups = computed(() => {
|
||||
const arr = userStore.my.profile.asked_groups
|
||||
return (arr) ? arr.length : 0
|
||||
})
|
||||
|
||||
const numAskTrust = computed(() => {
|
||||
if (!listTrusted.value)
|
||||
return 0
|
||||
|
||||
4
src/components/CMyGroup/CMyGroup.scss
Executable file
@@ -0,0 +1,4 @@
|
||||
.myflex{
|
||||
display: flex;
|
||||
flex: 1;
|
||||
}
|
||||
86
src/components/CMyGroup/CMyGroup.ts
Executable file
@@ -0,0 +1,86 @@
|
||||
import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { IMyGroup, IImgGallery, IUserFields, IUserProfile } from 'model'
|
||||
import { costanti } from '@costanti'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CMyGroup',
|
||||
emits: ['setCmd'],
|
||||
props: {
|
||||
mygrp: {
|
||||
type: Object as PropType<IMyGroup | null>,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
mygroupname: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
visu: {
|
||||
type: Number,
|
||||
required: true,
|
||||
}
|
||||
},
|
||||
|
||||
setup(props, { emit }) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
const $router = useRouter()
|
||||
const $route = useRoute()
|
||||
|
||||
const groupname = ref('')
|
||||
|
||||
const grp = ref(<IMyGroup | null>null)
|
||||
|
||||
watch(() => props.mygrp, (newval, oldval) => {
|
||||
mounted()
|
||||
})
|
||||
|
||||
function mounted() {
|
||||
if (!props.mygrp) {
|
||||
if (props.mygroupname) {
|
||||
groupname.value = props.mygroupname
|
||||
//++Todo: carica contact
|
||||
grp.value = null
|
||||
}
|
||||
} else {
|
||||
if (props.mygrp) {
|
||||
grp.value = props.mygrp
|
||||
groupname.value = props.mygrp.groupname
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getImgGroup(group: IMyGroup) {
|
||||
return userStore.getImgByGroup(group)
|
||||
}
|
||||
|
||||
function naviga(path: string) {
|
||||
$router.push(path)
|
||||
}
|
||||
|
||||
function setCmd(cmd: number, myusername: string, value: any = '') {
|
||||
emit('setCmd', cmd, myusername, value)
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
grp,
|
||||
costanti,
|
||||
getImgGroup,
|
||||
naviga,
|
||||
setCmd,
|
||||
shared_consts,
|
||||
userStore,
|
||||
}
|
||||
},
|
||||
})
|
||||
123
src/components/CMyGroup/CMyGroup.vue
Executable file
@@ -0,0 +1,123 @@
|
||||
<template>
|
||||
<div v-if="grp">
|
||||
<q-item class="q-my-sm" clickable>
|
||||
<q-item-section avatar @click="naviga(`/grp/` + grp.groupname)">
|
||||
<q-avatar size="60px">
|
||||
<q-img :src="getImgGroup(grp)" :alt="grp.groupname" img-class="imgprofile" height="60px"/>
|
||||
</q-avatar>
|
||||
</q-item-section>
|
||||
|
||||
<q-item-section @click="naviga(`/grp/` + grp.groupname)">
|
||||
<q-item-label><strong>{{ grp.name }} {{ grp.surname }}</strong> ({{ grp.groupname }})
|
||||
</q-item-label>
|
||||
<q-item-label v-if="grp.profile" caption lines="1"><em>{{ grp.profile.qualifica }}</em></q-item-label>
|
||||
</q-item-section>
|
||||
|
||||
<q-item-section side v-if="visu === costanti.MY_GROUPS">
|
||||
<q-item-label>
|
||||
<q-btn rounded icon="fas fa-ellipsis-h">
|
||||
<q-menu>
|
||||
<q-list style="min-width: 150px">
|
||||
<q-item clickable icon="fas fa-user-minus" v-close-popup
|
||||
@click="setCmd(shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP, grp.groupname)">
|
||||
<q-item-section>{{ $t('groups.remove_from_mygroups') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list style="min-width: 150px">
|
||||
<q-item clickable icon="fas fa-ban" v-close-popup @click="setCmd(shared_consts.GROUPSCMD.BLOCK_GROUP, grp.groupname)">
|
||||
<q-item-section>{{ $t('groups.block_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side v-if="visu === costanti.REQ_GROUP">
|
||||
<q-item-label>
|
||||
<q-btn rounded icon="fas fa-ellipsis-h">
|
||||
<q-menu>
|
||||
<q-list v-if="true" style="min-width: 150px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.SETGROUP, grp.groupname)">
|
||||
<q-item-section>{{ $t('groups.accept_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list style="min-width: 150px">
|
||||
<q-item clickable icon="fas fa-user-minus" v-close-popup
|
||||
@click="setCmd(shared_consts.GROUPSCMD.REQGROUP, grp.groupname, false)">
|
||||
<q-item-section>{{ $t('groups.reject_ask_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side v-if="visu === costanti.ASK_SENT_GROUPS">
|
||||
<q-item-label>
|
||||
<q-btn rounded icon="fas fa-ellipsis-h">
|
||||
<q-menu>
|
||||
<q-list style="min-width: 150px">
|
||||
<q-item clickable icon="fas fa-user-minus" v-close-popup
|
||||
@click="setCmd(shared_consts.GROUPSCMD.CANCEL_REQ_GROUP, grp.groupname)">
|
||||
<q-item-section>{{ $t('groups.cancel_ask_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side v-if="visu === costanti.FIND_GROUP">
|
||||
<q-item-label>
|
||||
<q-btn v-if="grp.admins && grp.admins.includes(userStore.my.username)" rounded :icon="userStore.IsMyGroupByGroupname(grp.groupname) ? `fas fa-ellipsis-h` : `fas fa-user`">
|
||||
<q-menu>
|
||||
<q-list v-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && !userStore.IsAskedGroupByGroupname(grp.groupname))" style="min-width: 200px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.REQGROUP, grp.groupname, true)">
|
||||
<q-item-section>{{ $t('groups.ask_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list v-else-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && userStore.IsAskedGroupByUsername(grp.groupname))" style="min-width: 200px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.REQGROUP, grp.groupname, false)">
|
||||
<q-item-section>{{ $t('groups.cancel_ask_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list v-else-if="userStore.IsMyGroupByGroupname(grp.groupname)" style="min-width: 200px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUPS, grp.groupname)">
|
||||
<q-item-section>{{ $t('groups.remove_from_mygroups') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side v-if="visu === costanti.FIND_GROUP">
|
||||
<q-item-label>
|
||||
<q-btn v-if="grp.admins && grp.admins.includes(userStore.my.username)" rounded :icon="userStore.IsMyGroupByGroupname(grp.groupname) ? `fas fa-ellipsis-h` : `fas fa-user`">
|
||||
<q-menu>
|
||||
<q-list v-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && !userStore.IsAskedGroupByGroupname(grp.groupname))" style="min-width: 200px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.REQGROUP, grp.groupname, true)">
|
||||
<q-item-section>{{ $t('groups.ask_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list v-else-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && userStore.IsAskedGroupByUsername(grp.groupname))" style="min-width: 200px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.REQGROUP, grp.groupname, false)">
|
||||
<q-item-section>{{ $t('groups.cancel_ask_group') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list v-else-if="userStore.IsMyGroupByGroupname(grp.groupname)" style="min-width: 200px">
|
||||
<q-item clickable v-close-popup @click="setCmd(shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUPS, grp.groupname)">
|
||||
<q-item-section>{{ $t('groups.remove_from_mygroups') }}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CMyGroup.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './CMyGroup.scss';
|
||||
</style>
|
||||
1
src/components/CMyGroup/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as CMyGroup } from './CMyGroup.vue'
|
||||
0
src/components/CMyGroups/CMyGroups.scss
Executable file
180
src/components/CMyGroups/CMyGroups.ts
Executable file
@@ -0,0 +1,180 @@
|
||||
import { CMyGroup } from '@/components/CMyGroup'
|
||||
import { computed, defineComponent, onMounted, PropType, ref, toRef } from 'vue'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
import { IMyGroup, ISearchList, IUserFields } from 'model'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CMyGroups',
|
||||
components: { CMyGroup },
|
||||
emits: ['update:modelValue'],
|
||||
props: {
|
||||
modelValue: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 0,
|
||||
},
|
||||
finder: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
mygrp: {
|
||||
type: Object as PropType<IMyGroup | null>,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
mygroupname: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
visu: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 0,
|
||||
},
|
||||
},
|
||||
setup(props, { emit }) {
|
||||
const userStore = useUserStore()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
|
||||
const username = ref('')
|
||||
|
||||
const filtroutente = ref(<any[]>[])
|
||||
|
||||
const listgroupsfiltered = computed(() => {
|
||||
let arr: any[] = []
|
||||
try {
|
||||
if (props.modelValue === costanti.GROUPS) {
|
||||
arr = userStore.my.profile.groups
|
||||
} else if (props.modelValue === costanti.MY_GROUPS) {
|
||||
arr = userStore.my.profile.groups
|
||||
// } else if (props.modelValue === costanti.REQ_GROUP) {
|
||||
// arr = userStore.my.profile.req_groups
|
||||
} else if (props.modelValue === costanti.ASK_SENT_GROUP) {
|
||||
arr = userStore.my.profile.asked_groups
|
||||
}
|
||||
} catch (e) {
|
||||
arr = []
|
||||
}
|
||||
|
||||
return arr
|
||||
})
|
||||
|
||||
const myoptions = computed(() => {
|
||||
const mybutt = []
|
||||
mybutt.push({ label: t('mypages.find_group'), value: costanti.FIND_GROUP })
|
||||
mybutt.push({ label: t('mypages.my_groups') + ' (' + numGroups.value + ')', value: costanti.MY_GROUPS })
|
||||
|
||||
if (numAskSentGroups.value > 0 || props.modelValue === costanti.ASK_SENT_GROUP)
|
||||
mybutt.push({
|
||||
label: t('mypages.request_sent_groups') + ' (' + numAskSentGroups.value + ')',
|
||||
value: costanti.ASK_SENT_GROUP
|
||||
})
|
||||
|
||||
return mybutt
|
||||
})
|
||||
|
||||
const numGroups = computed(() => {
|
||||
const arr = userStore.my.profile.groups
|
||||
return (arr) ? arr.length : 0
|
||||
})
|
||||
|
||||
const numAskSentGroups = computed(() => {
|
||||
const arr = userStore.my.profile.asked_groups
|
||||
return (arr) ? arr.length : 0
|
||||
})
|
||||
|
||||
function loadGroups() {
|
||||
// Carica il profilo di quest'utente
|
||||
if (username.value) {
|
||||
userStore.loadGroups(username.value).then((ris) => {
|
||||
// console.log('ris', ris)
|
||||
if (ris) {
|
||||
userStore.my.profile.groups = ris.listUsersGroup ? ris.listUsersGroup : []
|
||||
userStore.groups = ris.listgroups ? ris.listgroups : []
|
||||
userStore.my.profile.asked_groups = ris.listSentRequestGroups ? ris.listSentRequestGroups : []
|
||||
filtroutente.value = [{ userId: userStore.my._id }]
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function removeFromMyGroups(groupnameDest: string) {
|
||||
$q.dialog({
|
||||
message: t('db.domanda_removegroup', { username: groupnameDest }),
|
||||
ok: { label: t('dialog.yes'), push: true },
|
||||
cancel: { label: t('dialog.cancel') },
|
||||
title: t('db.domanda')
|
||||
}).onOk(() => {
|
||||
|
||||
userStore.setGroupsCmd($q, t, username.value, groupnameDest, shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP, null).then((res) => {
|
||||
if (res) {
|
||||
userStore.my.profile.groups = userStore.my.profile.groups.filter((rec: IMyGroup) => rec.groupname !== groupnameDest)
|
||||
tools.showPositiveNotif($q, t('db.removedgroup'))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function blockGroup(usernameDest: string) {
|
||||
$q.dialog({
|
||||
message: t('db.domanda_blockgroup', { groupname: usernameDest }),
|
||||
ok: { label: t('dialog.yes'), push: true },
|
||||
cancel: { label: t('dialog.cancel') },
|
||||
title: t('db.domanda')
|
||||
}).onOk(() => {
|
||||
userStore.setGroupsCmd($q, t, username.value, usernameDest, shared_consts.GROUPSCMD.BLOCK_GROUP, null).then((res) => {
|
||||
if (res) {
|
||||
userStore.my.profile.groups = userStore.my.profile.groups.filter((rec: IMyGroup) => rec.groupname !== usernameDest)
|
||||
tools.showPositiveNotif($q, t('db.blockedgroup'))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function setCmd(cmd: number, groupnameDest: string, value: any = '') {
|
||||
if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP) {
|
||||
removeFromMyGroups(groupnameDest)
|
||||
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_GROUP) {
|
||||
blockGroup(groupnameDest)
|
||||
} else if (cmd === shared_consts.GROUPSCMD.SETGROUP) {
|
||||
tools.addToMyGroups($q, username.value, groupnameDest)
|
||||
} else if (cmd === shared_consts.GROUPSCMD.REQGROUP) {
|
||||
tools.setRequestGroup($q, username.value, groupnameDest, value)
|
||||
} else if (cmd === shared_consts.GROUPSCMD.CANCEL_REQ_GROUP) {
|
||||
tools.cancelReqGroups($q, username.value, groupnameDest)
|
||||
}
|
||||
}
|
||||
|
||||
function mounted() {
|
||||
username.value = userStore.my.username
|
||||
loadGroups()
|
||||
|
||||
}
|
||||
|
||||
function updateValue(val: number) {
|
||||
emit('update:modelValue', val)
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
tools,
|
||||
costanti,
|
||||
shared_consts,
|
||||
filtroutente,
|
||||
listgroupsfiltered,
|
||||
setCmd,
|
||||
updateValue,
|
||||
myoptions,
|
||||
}
|
||||
}
|
||||
})
|
||||
53
src/components/CMyGroups/CMyGroups.vue
Executable file
@@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<div v-if="finder" class="q-gutter-sm q-pa-sm q-pb-sm">
|
||||
<q-btn-toggle
|
||||
:model-value="modelValue"
|
||||
@update:model-value="updateValue"
|
||||
class="my-custom-toggle"
|
||||
no-caps
|
||||
rounded
|
||||
unelevated
|
||||
push
|
||||
toggle-color="primary"
|
||||
color="white"
|
||||
text-color="primary"
|
||||
:options="myoptions"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="finder" class="">
|
||||
|
||||
<div v-if="modelValue === costanti.FIND_GROUP">
|
||||
<slot></slot>
|
||||
</div>
|
||||
<div v-else>
|
||||
<q-list>
|
||||
<span v-for="(grp, index) in listgroupsfiltered" :key="index" class="q-my-sm" clickable>
|
||||
<CMyGroup
|
||||
:mygrp="grp"
|
||||
@setCmd="setCmd"
|
||||
:visu="modelValue">
|
||||
</CMyGroup>
|
||||
</span>
|
||||
</q-list>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<q-list class="width-container">
|
||||
<span class="q-my-sm" clickable>
|
||||
<CMyGroup
|
||||
:mygrp="mygrp"
|
||||
@setCmd="setCmd"
|
||||
:visu="visu">
|
||||
</CMyGroup>
|
||||
</span>
|
||||
</q-list>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CMyGroups.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './CMyGroups';
|
||||
</style>
|
||||
|
||||
1
src/components/CMyGroups/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as CMyGroups} from './CMyGroups.vue'
|
||||
@@ -399,9 +399,6 @@
|
||||
</div>
|
||||
<div v-else-if="col.fieldtype === costanti.FieldType.html">
|
||||
<div v-if="isInModif">
|
||||
<div v-if="insertMode">
|
||||
|
||||
</div>
|
||||
<p v-if="isInModif" class="text-center">
|
||||
{{ $t('event.testo_di_spiegazione') }}:
|
||||
</p>
|
||||
@@ -692,7 +689,17 @@
|
||||
|
||||
</q-input>
|
||||
</div>
|
||||
</q-popup-edit>
|
||||
<div v-else-if="col.fieldtype === costanti.FieldType.html">
|
||||
<div v-if="!isFieldDb()">
|
||||
<CMyEditor
|
||||
v-model:value="myvalue" :title="!isInModif ? getTitleEditor(col, row) : ''" @keyup.enter.stop
|
||||
:showButtons="false"
|
||||
:canModify="canModify"
|
||||
@update:value="changevalRec"
|
||||
@showandsave="Savedb">
|
||||
</CMyEditor>
|
||||
</div>
|
||||
</div> </q-popup-edit>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -37,4 +37,5 @@ export * from './CVerifyEmail'
|
||||
export * from './CMyUser'
|
||||
export * from './CVerifyTelegram'
|
||||
export * from './CMyFriends'
|
||||
export * from './CMyGroups'
|
||||
// export * from './CPreloadImages'
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const msg_website_enUs = {
|
||||
ws: {
|
||||
sitename: 'Comunità Nuovo Mondo',
|
||||
siteshortname: 'CNM',
|
||||
botname: 'CNM BOT',
|
||||
sitename: 'InsiemeSuPuò',
|
||||
siteshortname: 'InsiemeSuPuò',
|
||||
botname: 'InsiemeSuPuò BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const msg_website_es = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
sitename: 'InsiemeSuPuò',
|
||||
siteshortname: 'InsiemeSuPuò',
|
||||
botname: 'InsiemeSuPuò BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const msg_website_fr = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
sitename: 'InsiemeSuPuò',
|
||||
siteshortname: 'InsiemeSuPuò',
|
||||
botname: 'InsiemeSuPuò BOT',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'CONTACTS',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const msg_website_it = {
|
||||
ws: {
|
||||
sitename: 'PopoloDelNuovoMondo',
|
||||
siteshortname: 'PDNM',
|
||||
botname: 'il Bot di PdNM',
|
||||
sitename: 'InsiemeSuPuò',
|
||||
siteshortname: 'InsiemeSuPuò',
|
||||
botname: 'il Bot di InsiemeSuPuò',
|
||||
},
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
@@ -128,8 +128,8 @@ const msg_website_it = {
|
||||
color: 'Colore',
|
||||
},
|
||||
msg: {
|
||||
myAppName: 'FreePlanet',
|
||||
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito e senza Pubblicità',
|
||||
myAppName: 'InsiemeSiPuò',
|
||||
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
|
||||
underconstruction: 'App in costruzione...',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: 'Il primo Vero Social',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const msg_website_pt = {
|
||||
ws: {
|
||||
sitename: 'CNM',
|
||||
siteshortname: 'CNM',
|
||||
botname: 'CNM BOT',
|
||||
sitename: 'InsiemeSuPuò',
|
||||
siteshortname: 'InsiemeSuPuò',
|
||||
botname: 'InsiemeSuPuò BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const msg_website_si = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
sitename: 'InsiemeSuPuò',
|
||||
siteshortname: 'InsiemeSuPuò',
|
||||
botname: 'InsiemeSuPuò BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Domača stran',
|
||||
|
||||
@@ -373,7 +373,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/home_pdnm/home_pdnm.vue'),
|
||||
component: () => import('@src/root/home_insiemesipuo/home_insiemesipuo.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -422,6 +422,17 @@ const baseroutes: IListRoutes[] = [
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 132,
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 135,
|
||||
@@ -433,6 +444,17 @@ const baseroutes: IListRoutes[] = [
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 136,
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 130,
|
||||
@@ -559,7 +581,7 @@ const baseroutes: IListRoutes[] = [
|
||||
isseparator: true,
|
||||
inmenu: true,
|
||||
},
|
||||
/*{
|
||||
{
|
||||
active: true,
|
||||
order: 80,
|
||||
path: '/calendario-eventi',
|
||||
@@ -569,7 +591,7 @@ const baseroutes: IListRoutes[] = [
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: true,
|
||||
infooter: true
|
||||
},*/
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 1000,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { IToken } from '@model/other'
|
||||
import { ICart, IOrderCart, IShareWithUs } from '@src/model/Products'
|
||||
import { IGallery } from '@model/GlobalStore'
|
||||
|
||||
const enum ESexType {
|
||||
None = 0,
|
||||
@@ -8,10 +9,26 @@ const enum ESexType {
|
||||
}
|
||||
|
||||
export interface IFriends {
|
||||
username?: string
|
||||
username: string
|
||||
date?: Date
|
||||
}
|
||||
|
||||
export interface IMyGroup {
|
||||
groupname: string
|
||||
title?: string
|
||||
descr?: string
|
||||
photos: IGallery[]
|
||||
visibility?: number
|
||||
date_created?: Date
|
||||
admins?: IFriends[]
|
||||
req_users?: IFriends[]
|
||||
blocked?: boolean
|
||||
website?: string
|
||||
link_telegram?: string
|
||||
username_who_block?: string
|
||||
date_blocked?: Date
|
||||
}
|
||||
|
||||
export interface IUserProfile {
|
||||
img?: string
|
||||
nationality?: string
|
||||
@@ -52,9 +69,11 @@ export interface IUserProfile {
|
||||
myshares: IShareWithUs[]
|
||||
friends: IFriends[]
|
||||
req_friends: IFriends[]
|
||||
groups: IMyGroup[]
|
||||
|
||||
// in memory
|
||||
asked_friends: any[]
|
||||
asked_groups: any[]
|
||||
}
|
||||
|
||||
export interface IPaymentType {
|
||||
|
||||
@@ -22,7 +22,11 @@
|
||||
</CVerifyTelegram>
|
||||
|
||||
<div v-if="isUserOk()">
|
||||
<div v-if="isUserOk()">
|
||||
|
||||
<CFinder>
|
||||
|
||||
</CFinder>
|
||||
|
||||
<q-banner rounded class="bg-primary text-white">
|
||||
<div class="text-h6 text-center">
|
||||
Ora Accedi al Bot Telegram <br>
|
||||
@@ -33,7 +37,6 @@
|
||||
</template>
|
||||
</q-banner>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else>
|
||||
|
||||
@@ -23,6 +23,12 @@
|
||||
|
||||
<div v-if="isUserOk()">
|
||||
<div v-if="isUserOk()">
|
||||
|
||||
<CFinder>
|
||||
|
||||
</CFinder>
|
||||
|
||||
|
||||
<q-banner rounded class="bg-primary text-white">
|
||||
<div class="text-h6 text-center">
|
||||
Ora Accedi al Bot Telegram <br>
|
||||
|
||||
@@ -461,7 +461,7 @@ const msg_enUs = {
|
||||
titlegranted: 'Notification Permission Granted!',
|
||||
statusnot: 'status Notification',
|
||||
titledenied: 'Notification Permission Denied!',
|
||||
title_subscribed: 'Subscribed to FreePlanet.app!',
|
||||
title_subscribed: 'Subscribed to the App!',
|
||||
subscribed: 'You can now receive Notification and Messages.',
|
||||
newVersionAvailable: 'Upgrade',
|
||||
},
|
||||
|
||||
@@ -31,6 +31,7 @@ const msg_it = {
|
||||
product: 'Prodotto',
|
||||
sito_offline: 'Sito in Aggiornamento',
|
||||
modifprof: 'Modifica Profilo',
|
||||
modifgrp: 'Modifica Gruppo',
|
||||
biografia: 'Biografia',
|
||||
qualifica: 'Qualifica (in breve)',
|
||||
update: 'Aggiornamento in Corso...',
|
||||
@@ -182,19 +183,29 @@ const msg_it = {
|
||||
friendsadded: 'Aggiunto alla lista di Amici',
|
||||
domanda_removefriend: 'Rimuovi dagli Amici {username}?',
|
||||
removedfriend: 'Rimosso dalla lista di Amici',
|
||||
removedgroup: 'Rimosso dal Gruppo',
|
||||
domanda_addtofriend: 'Aggiungere agli amici {username}?',
|
||||
domanda_addtogroup: 'Aggiungi {username} al gruppo {groupname}?',
|
||||
addedfriend: 'Aggiunto alla lista di Amici',
|
||||
addedgroup: 'Aggiunto al Gruppo',
|
||||
domanda_trusted: 'Accettare la Fiducia a {username}?',
|
||||
trusted: 'Accettato la Fiducia',
|
||||
domanda_ask_friend: 'Chiedere l\'Amicizia a {username}?',
|
||||
domanda_ask_group: 'Chiedere l\'invito al Gruppo {groupname}?',
|
||||
askedtofriend: 'Chiesto l\'Amicizia a {username}',
|
||||
askedtogroup: 'Chiesto l\'invito al Gruppo {groupname}',
|
||||
domanda_revoke_friend: 'Revocare la richiesta di Amicizia a {username}?',
|
||||
domanda_revoke_group: 'Revocare la richiesta al gruppo {groupname}?',
|
||||
revoketofriend: 'Revocato la richiesta di Amicizia a {username}',
|
||||
revoketogroup: 'Revocato la richiesta d\'invito al gruppo {groupname}',
|
||||
domanda_cancel_req_friend: 'Annullare la richiesta di Amicizia a {username}?',
|
||||
domanda_cancel_req_group: 'Annullare la richiesta d\'invito al gruppo {groupname}?',
|
||||
cancel_req_friend: 'Annullata la richiesta di Amicizia a {username}',
|
||||
cancel_req_group: 'Annullata la richiesta al gruppo {groupname}',
|
||||
domanda_rejectedtrust: 'Rifiutare la Fiducia a {username}?',
|
||||
rejected: 'Rifiutato la Fiducia',
|
||||
domanda_blockuser: 'Bloccare {username}?',
|
||||
domanda_blockgroup: 'Bloccare il gruppo {groupname}?',
|
||||
blockedfriend: 'Utente Bloccato',
|
||||
domanda: 'Domanda',
|
||||
},
|
||||
@@ -409,6 +420,7 @@ const msg_it = {
|
||||
note_payment: 'Note Aggiuntive',
|
||||
country_pay: 'Paese di Destinazione Pagamenti',
|
||||
username_telegram: 'Username Telegram',
|
||||
groupname: 'Codice Gruppo',
|
||||
firstname_telegram: 'Nome Telegram',
|
||||
lastname_telegram: 'Cognome Telegram',
|
||||
telegram: 'Chat Telegram \'{botname}\'',
|
||||
@@ -618,6 +630,7 @@ const msg_it = {
|
||||
themecolor: 'Tema Colore',
|
||||
themebgcolor: 'Tema Colore Sfondo',
|
||||
group: 'Gruppo',
|
||||
group2: 'Gruppo2',
|
||||
respUsername: 'Responsabile',
|
||||
viceRespUsername: 'Vice Responsabile',
|
||||
vice2RespUsername: 'Vice 2 Responsabile',
|
||||
@@ -683,7 +696,7 @@ const msg_it = {
|
||||
showlastschedule: 'Vedi tutto il Calendario',
|
||||
},
|
||||
msgs: {
|
||||
telegrammsg: 'Msg Telegram',
|
||||
telegrammsg: 'Telegram',
|
||||
message: 'Messaggio',
|
||||
messages: 'Messaggi',
|
||||
nomessage: 'Nessun Messaggio',
|
||||
@@ -846,7 +859,11 @@ const msg_it = {
|
||||
},
|
||||
mypages: {
|
||||
find_people: 'Cerca Persone',
|
||||
find_group: 'Cerca Gruppo',
|
||||
my_groups: 'Miei Gruppi',
|
||||
create_group: 'Crea Gruppo',
|
||||
friends: 'Amici',
|
||||
groups: 'Gruppi',
|
||||
request_friends: 'Rich. Amicizia',
|
||||
request_sent_friends: 'Rich. Inviate',
|
||||
request_trust: 'Rich. Fiducia',
|
||||
@@ -864,6 +881,15 @@ const msg_it = {
|
||||
cancel_ask_friend: 'Annulla la richiesta di Amicizia',
|
||||
cancel_ask_friend_short: 'Annulla richiesta',
|
||||
reject_ask_friend: 'Rifiuta la richiesta di Amicizia',
|
||||
},
|
||||
groups: {
|
||||
admins: 'Amministratori',
|
||||
ask_group: 'Chiedi di entrare nel Gruppo',
|
||||
accept_group: 'Accetta la richiesta per entrare',
|
||||
remove_from_mygroups: 'Rimuovi dai tuoi Gruppi',
|
||||
block_group: 'Blocca Gruppo',
|
||||
cancel_ask_group: 'Annulla la richiesta',
|
||||
cancel_ask_group_short: 'Annulla richiesta',
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -474,7 +474,7 @@ const msg_pt = {
|
||||
titlegranted: 'Permesso Notifiche Abilitato!',
|
||||
statusnot: 'Stato Notifiche',
|
||||
titledenied: 'Permesso Notifiche Disabilitato!',
|
||||
title_subscribed: 'Sottoscrizione a FreePlanet.app!',
|
||||
title_subscribed: 'Sottoscrizione alla App!',
|
||||
subscribed: 'Ora potrai ricevere i messaggi e le notifiche.',
|
||||
newVersionAvailable: 'Aggiorna',
|
||||
},
|
||||
|
||||
@@ -9,6 +9,10 @@ export const costanti = {
|
||||
CONFIG_ID_SHOW_TYPE_TODOS: '3',
|
||||
|
||||
SHOW_USERINFO: 1,
|
||||
SHOW_GROUPINFO: 5,
|
||||
|
||||
VISUTABLE_SCHEDA_USER: -1,
|
||||
VISUTABLE_SCHEDA_GROUP: -3,
|
||||
|
||||
DIR_UPLOAD: 'upload/', // upload/
|
||||
|
||||
@@ -20,7 +24,17 @@ export const costanti = {
|
||||
ASK_SENT_FRIENDS: 6,
|
||||
FIND_PEOPLE: 10,
|
||||
|
||||
GROUPS: 11,
|
||||
GRP_REJECTED: 14,
|
||||
REQ_GROUP: 15,
|
||||
ASK_SENT_GROUP: 16,
|
||||
FIND_GROUP: 20,
|
||||
MY_GROUPS: 21,
|
||||
CREATE_GROUP: 30,
|
||||
|
||||
FILTER_TUTTI: -100,
|
||||
TABLES_ARRAY: ['mygroups'],
|
||||
TABLES_USERNAME_DATE: ['friends', 'friendsandme'],
|
||||
|
||||
FuncDialog: {
|
||||
CANCEL_BOOKING: 1,
|
||||
|
||||
@@ -368,6 +368,18 @@ export const colTablePhones = [
|
||||
AddCol({ name: 'flag', label_trans: 'city.flag' }),
|
||||
]
|
||||
|
||||
export const colTableUsersGeneric = [
|
||||
AddCol({ name: 'username', label_trans: 'reg.username_short' }),
|
||||
AddCol({ name: 'date', label_trans: 'reg.date', fieldtype: costanti.FieldType.onlydate,
|
||||
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView_OnlyifExist }),
|
||||
]
|
||||
|
||||
export const colTableMyGroup = [
|
||||
AddCol({ name: 'groupname', label_trans: 'reg.groupname' }),
|
||||
AddCol({ name: 'date', label_trans: 'reg.date', fieldtype: costanti.FieldType.onlydate,
|
||||
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView_OnlyifExist }),
|
||||
]
|
||||
|
||||
export const colSkills = [
|
||||
// AddCol({ name: '_id', label_trans: 'index', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'descr', label_trans: 'store.description' }),
|
||||
@@ -408,11 +420,54 @@ export const colmyUserPeople = [
|
||||
AddCol({ name: 'name', label_trans: 'reg.name' }),
|
||||
AddCol({
|
||||
name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false,
|
||||
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
|
||||
}),
|
||||
// AddCol({ name: 'sospeso', label_trans: 'reg.sospeso', fieldtype: costanti.FieldType.boolean }),
|
||||
// AddCol({ name: 'deleted', label_trans: 'reg.deleted', fieldtype: costanti.FieldType.boolean }),
|
||||
]
|
||||
|
||||
export const colmyUserGroup = [
|
||||
// AddCol({ name: '_id', label_trans: 'reg.id' }),
|
||||
AddCol({ name: 'groupname', label_trans: 'reg.groupname', required: true }),
|
||||
AddCol({ name: 'title', label_trans: 'reg.name', required: true }),
|
||||
AddCol({
|
||||
name: 'idSector',
|
||||
label_trans: 'sectors.name',
|
||||
fieldtype: costanti.FieldType.select,
|
||||
required: true,
|
||||
jointable: 'sectors',
|
||||
visible: true,
|
||||
icon: 'category',
|
||||
}),
|
||||
AddCol({ name: 'descr', label_trans: 'proj.longdescr', required: true }),
|
||||
AddCol({ name: 'visibility', label_trans: 'bot.visibility', fieldtype: costanti.FieldType.select, jointable: 'visibilGroup', required: true }),
|
||||
AddCol({
|
||||
name: 'admins',
|
||||
label_trans: 'groups.admins',
|
||||
fieldtype: costanti.FieldType.multiselect,
|
||||
jointable: 'friendsandme',
|
||||
}),
|
||||
AddCol({
|
||||
name: 'photos',
|
||||
label_trans: 'skill.photos',
|
||||
fieldtype: costanti.FieldType.listimages,
|
||||
jointable: '',
|
||||
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
|
||||
}),
|
||||
AddCol({
|
||||
name: 'idCity',
|
||||
label_trans: 'skill.city',
|
||||
fieldtype: costanti.FieldType.multiselect_by_server,
|
||||
jointable: 'cities',
|
||||
tablesel: 'cities',
|
||||
noshowlabel: true,
|
||||
icon: 'fas fa-map-marker-alt',
|
||||
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
|
||||
}),
|
||||
AddCol({ name: 'date_created', label_trans: 'reg.date_created', fieldtype: costanti.FieldType.onlydate,
|
||||
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView_OnlyifExist }),
|
||||
]
|
||||
|
||||
|
||||
|
||||
export const colmySkills = [
|
||||
@@ -807,6 +862,11 @@ const colTablePermission = [
|
||||
AddCol(DuplicateRec),
|
||||
]
|
||||
|
||||
const colTableGeneric = [
|
||||
AddCol({ name: 'value', label_trans: 'others.value' }),
|
||||
AddCol({ name: 'label', label_trans: 'proj.longdescr' }),
|
||||
]
|
||||
|
||||
const colTableOperator = [
|
||||
AddCol({ name: 'username', label_trans: 'reg.username_short' }),
|
||||
AddCol({ name: 'name', label_trans: 'reg.name' }),
|
||||
@@ -1502,6 +1562,7 @@ export const fieldsTable = {
|
||||
}),
|
||||
AddCol({
|
||||
name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false,
|
||||
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
|
||||
}),
|
||||
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: costanti.FieldType.date }),
|
||||
AddCol({ name: 'lasttimeonline', label_trans: 'reg.lasttimeonline', fieldtype: costanti.FieldType.date }),
|
||||
@@ -1765,13 +1826,21 @@ export const fieldsTable = {
|
||||
},
|
||||
{
|
||||
value: 'visibility',
|
||||
label: 'Visibilità',
|
||||
label: 'Visibilità Permessi',
|
||||
columns: colTablePermission,
|
||||
colkey: 'value',
|
||||
collabel: 'label',
|
||||
colicon: 'icon',
|
||||
noshow: true,
|
||||
},
|
||||
{
|
||||
value: 'visibilGroup',
|
||||
label: 'Visibilità',
|
||||
columns: colTableGeneric,
|
||||
colkey: 'value',
|
||||
collabel: 'label',
|
||||
noshow: true,
|
||||
},
|
||||
{
|
||||
value: 'lang',
|
||||
label: 'Lingua',
|
||||
@@ -1893,6 +1962,27 @@ export const fieldsTable = {
|
||||
collabel: 'value',
|
||||
remote: true,
|
||||
},
|
||||
{
|
||||
value: 'friends',
|
||||
label: 'Amici',
|
||||
columns: colTableUsersGeneric,
|
||||
colkey: 'username',
|
||||
collabel: 'username',
|
||||
},
|
||||
{
|
||||
value: 'friendsandme',
|
||||
label: 'Amici',
|
||||
columns: colTableUsersGeneric,
|
||||
colkey: 'username',
|
||||
collabel: 'username',
|
||||
},
|
||||
{
|
||||
value: 'mygroups',
|
||||
label: 'Gruppi',
|
||||
columns: colTableMyGroup,
|
||||
colkey: 'groupname',
|
||||
collabel: 'groupname',
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import {
|
||||
IColGridTable,
|
||||
IColl,
|
||||
ICollaborations, IDataToSet,
|
||||
IEvents, IFriends,
|
||||
IEvents, IFriends, IMyGroup,
|
||||
IListRoutes,
|
||||
IParamDialog,
|
||||
IPathFile,
|
||||
@@ -56,6 +56,7 @@ export const tools = {
|
||||
COOK_SEARCH: 'SEARCH_',
|
||||
|
||||
FRIENDS_SEARCH: 'FR_SE',
|
||||
GROUP_SEARCH: 'GR_SE',
|
||||
|
||||
getprefCountries: ['it', 'es', 'us'],
|
||||
|
||||
@@ -4422,6 +4423,26 @@ export const tools = {
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
addToMyGroups($q: any, username: string, groupnameDest: string) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
$q.dialog({
|
||||
message: t('db.domanda_addtogroup', { username, groupname: groupnameDest }),
|
||||
ok: { label: t('dialog.yes'), push: true },
|
||||
cancel: { label: t('dialog.cancel') },
|
||||
title: t('db.domanda')
|
||||
}).onOk(() => {
|
||||
|
||||
userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.SETGROUP, null)
|
||||
.then((res: any) => {
|
||||
if (res) {
|
||||
userStore.my.profile.groups = [...userStore.my.profile.groups, res]
|
||||
tools.showPositiveNotif($q, t('db.addedgroup'))
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
setRequestFriendship($q: any, username: string, usernameDest: string, value: boolean) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
@@ -4464,6 +4485,48 @@ export const tools = {
|
||||
})
|
||||
})
|
||||
},
|
||||
setRequestGroup($q: any, username: string, groupnameDest: string, value: boolean) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
||||
let msg = ''
|
||||
if (value) {
|
||||
msg = t('db.domanda_ask_group', { groupname: groupnameDest })
|
||||
} else {
|
||||
msg = t('db.domanda_revoke_group', { groupname: groupnameDest })
|
||||
}
|
||||
|
||||
$q.dialog({
|
||||
message: msg,
|
||||
ok: {
|
||||
label: t('dialog.yes'),
|
||||
push: true
|
||||
},
|
||||
cancel: {
|
||||
label: t('dialog.cancel')
|
||||
},
|
||||
title: t('db.domanda')
|
||||
}).onOk(() => {
|
||||
|
||||
userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.REQGROUP, value)
|
||||
.then((res: any) => {
|
||||
if (res) {
|
||||
if (value) {
|
||||
// ADD to req Friends
|
||||
userStore.my.profile.asked_groups.push(res)
|
||||
tools.showPositiveNotif($q, t('db.askedtogroup', { groupname: groupnameDest }))
|
||||
} else {
|
||||
// REMOVE to req Friends
|
||||
userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IMyGroup) => rec.groupname !== groupnameDest)
|
||||
tools.showPositiveNotif($q, t('db.revoketogroup', { groupname: groupnameDest }))
|
||||
}
|
||||
|
||||
} else {
|
||||
tools.showNegativeNotif($q, t('db.recfailed'))
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
cancelReqFriends($q: any, username: string, usernameDest: string) {
|
||||
const userStore = useUserStore()
|
||||
$q.dialog({
|
||||
@@ -4480,6 +4543,23 @@ export const tools = {
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
cancelReqGroups($q: any, username: string, groupnameDest: string) {
|
||||
const userStore = useUserStore()
|
||||
$q.dialog({
|
||||
message: t('db.domanda_cancel_req_group', { groupname: groupnameDest }),
|
||||
ok: { label: t('dialog.yes'), push: true },
|
||||
cancel: { label: t('dialog.cancel') },
|
||||
title: t('db.domanda')
|
||||
}).onOk(() => {
|
||||
|
||||
userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.CANCEL_REQ_GROUP, null).then((res) => {
|
||||
if (res) {
|
||||
userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IMyGroup) => rec.groupname !== groupnameDest)
|
||||
tools.showPositiveNotif($q, t('db.cancel_req_group'))
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
CSVToArray(strData: any, strDelimiter: string) {
|
||||
// Check to see if the delimiter is defined. If not,
|
||||
|
||||
@@ -58,6 +58,8 @@ export const func_tools = {
|
||||
|
||||
export const toolsext = {
|
||||
TABUSER: 'users',
|
||||
TABFRIENDS: 'friends',
|
||||
TABMYGROUPS: 'mygroups',
|
||||
TABNAVI: 'navi',
|
||||
TABLISTAINGRESSO: 'listaingressos',
|
||||
TABGRADUATORIA: 'graduatorias',
|
||||
@@ -65,10 +67,10 @@ export const toolsext = {
|
||||
TABNEWSLETTER: 'newstosent',
|
||||
TABGALLERY: 'gallery',
|
||||
TABMAILINGLIST: 'mailinglist',
|
||||
TABGROUPS: 'groups',
|
||||
TABMYPAGE: 'mypage',
|
||||
TABMYBOT: 'mybots',
|
||||
TABCALZOOM: 'calzoom',
|
||||
TABGROUPS: 'groups',
|
||||
TABTEMPLEMAIL: 'templemail',
|
||||
TABOPZEMAIL: 'opzemail',
|
||||
TABSHAREWITHUS: 'sharewithus',
|
||||
|
||||
@@ -23,6 +23,7 @@ import { Router } from 'vue-router'
|
||||
import { useProjectStore } from '@store/Projects'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
import { costanti } from '@costanti'
|
||||
import { IMyGroup } from '@model/UserStore'
|
||||
|
||||
export const DefaultUser: IUserFields = {
|
||||
_id: '',
|
||||
@@ -49,7 +50,9 @@ export const DefaultUser: IUserFields = {
|
||||
myshares: [],
|
||||
friends: [],
|
||||
req_friends: [],
|
||||
groups: [],
|
||||
asked_friends: [],
|
||||
asked_groups: [],
|
||||
},
|
||||
cart: {
|
||||
userId: '',
|
||||
@@ -91,12 +94,15 @@ export const DefaultProfile: IUserProfile = {
|
||||
myshares: [],
|
||||
friends: [],
|
||||
req_friends: [],
|
||||
groups: [],
|
||||
asked_friends: [],
|
||||
asked_groups: [],
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore('UserStore', {
|
||||
state: () => ({
|
||||
my: { ...DefaultUser },
|
||||
groups: [],
|
||||
lang: process.env.LANG_DEFAULT ? process.env.LANG_DEFAULT : 'it',
|
||||
repeatPassword: '',
|
||||
categorySel: 'personal',
|
||||
@@ -170,6 +176,13 @@ export const useUserStore = defineStore('UserStore', {
|
||||
return false
|
||||
},
|
||||
|
||||
IsMyGroupByGroupname(groupname: string): boolean {
|
||||
if (this.my.profile.friends)
|
||||
return this.my.profile.groups.findIndex((rec) => rec.groupname === groupname) >= 0
|
||||
else
|
||||
return false
|
||||
},
|
||||
|
||||
IsAskedFriendByUsername(username: string): boolean {
|
||||
if (this.my.profile.asked_friends)
|
||||
return this.my.profile.asked_friends.findIndex((rec) => rec.username === username) >= 0
|
||||
@@ -177,6 +190,13 @@ export const useUserStore = defineStore('UserStore', {
|
||||
return false
|
||||
},
|
||||
|
||||
IsAskedGroupByGroupname(groupname: string): boolean {
|
||||
if (this.my.profile.asked_groups)
|
||||
return this.my.profile.asked_groups.findIndex((rec: IMyGroup) => rec.groupname === groupname) >= 0
|
||||
else
|
||||
return false
|
||||
},
|
||||
|
||||
getUserByUsername(username: string): IUserFields | null {
|
||||
// Check if is this User!
|
||||
if (this.my.username === username) return this.my
|
||||
@@ -210,6 +230,16 @@ export const useUserStore = defineStore('UserStore', {
|
||||
return 'images/noimg.png'
|
||||
},
|
||||
|
||||
getImgByGroup(group: IMyGroup): string {
|
||||
|
||||
try {
|
||||
//++Todo: Sistemare!
|
||||
return costanti.DIR_UPLOAD + 'groups/' + group.groupname + '/' + group.photos[0].directory
|
||||
} catch (e) {
|
||||
}
|
||||
return 'images/noimg.png'
|
||||
},
|
||||
|
||||
getRefLink(username: string): string {
|
||||
if (username === '')
|
||||
username = this.my.username
|
||||
@@ -446,6 +476,7 @@ export const useUserStore = defineStore('UserStore', {
|
||||
|
||||
// Memory
|
||||
this.my.profile.asked_friends = []
|
||||
this.my.profile.asked_groups = []
|
||||
}
|
||||
|
||||
this.isAdmin = tools.isBitActive(this.my.perm, shared_consts.Permissions.Admin.value)
|
||||
@@ -825,7 +856,7 @@ export const useUserStore = defineStore('UserStore', {
|
||||
verified_by_aportador,
|
||||
made_gift,
|
||||
perm,
|
||||
profile: { img, teleg_id, myshares: [], friends: [], req_friends: [], asked_friends: [] },
|
||||
profile: { img, teleg_id, myshares: [], friends: [], req_friends: [], asked_friends: [], groups: [], asked_groups: [] },
|
||||
})
|
||||
|
||||
isLogged = true
|
||||
@@ -857,6 +888,20 @@ export const useUserStore = defineStore('UserStore', {
|
||||
|
||||
},
|
||||
|
||||
async loadGroup(groupname: string) {
|
||||
const data = {
|
||||
groupname
|
||||
}
|
||||
|
||||
return Api.SendReq('/mygroup/load', 'POST', data)
|
||||
.then((res) => {
|
||||
return res.data
|
||||
}).catch((error) => {
|
||||
return {}
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
async loadSkill(idSkill: string) {
|
||||
const data = {
|
||||
idSkill
|
||||
@@ -881,6 +926,16 @@ export const useUserStore = defineStore('UserStore', {
|
||||
|
||||
},
|
||||
|
||||
async loadGroups(username: string) {
|
||||
return Api.SendReq('/users/groups', 'POST', null)
|
||||
.then((res) => {
|
||||
return res.data
|
||||
}).catch((error) => {
|
||||
return {}
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
async setFriendsCmd($q: any, t: any, usernameOrig: string, usernameDest: string, cmd: number, value: any) {
|
||||
return Api.SendReq('/users/friends/cmd', 'POST', { usernameOrig, usernameDest, cmd, value })
|
||||
.then((res) => {
|
||||
@@ -892,6 +947,17 @@ export const useUserStore = defineStore('UserStore', {
|
||||
|
||||
},
|
||||
|
||||
async setGroupsCmd($q: any, t: any, usernameOrig: string, groupnameDest: string, cmd: number, value: any) {
|
||||
return Api.SendReq('/users/groups/cmd', 'POST', { usernameOrig, groupnameDest, cmd, value })
|
||||
.then((res) => {
|
||||
return res.data
|
||||
}).catch((error) => {
|
||||
tools.showNegativeNotif($q, t('db.recfailed'))
|
||||
return {}
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
async importToServerCmd($q: any, t: any, cmd: number, data: any) {
|
||||
return Api.SendReq('/admin/import', 'POST', { cmd, data })
|
||||
.then((res) => {
|
||||
|
||||
@@ -219,6 +219,12 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
return calendarStore.bookedevent
|
||||
else if (table === 'users')
|
||||
return userStore.usersList
|
||||
else if (table === 'friends')
|
||||
return userStore.my.profile.friends
|
||||
else if (table === 'friendsandme')
|
||||
return [{username: userStore.my.username }, ...userStore.my.profile.friends]
|
||||
else if (table === 'mygroups')
|
||||
return userStore.groups
|
||||
else if (table === 'sendmsgs')
|
||||
return messageStore.last_msgs
|
||||
else if (table === 'settings')
|
||||
@@ -1356,12 +1362,22 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
if (table === 'metodo_pagamento') return tools.SelectMetodiPagamento
|
||||
if (table === 'bottype') return shared_consts.BotType
|
||||
if (table === 'visibility') return shared_consts.Visibility
|
||||
if (table === 'visibilGroup') return shared_consts.VisibilGroup
|
||||
if (table === 'lang') return shared_consts.Lang
|
||||
if (table === 'regions') return shared_consts.Regions
|
||||
if (table === 'provinces') return shared_consts.Provinces
|
||||
|
||||
let myarr = this.getListByTable(table)
|
||||
|
||||
if (costanti.TABLES_ARRAY.includes(table)) {
|
||||
const newarr = []
|
||||
for (const value of myarr) {
|
||||
newarr.push({value, label:value})
|
||||
}
|
||||
|
||||
myarr = newarr
|
||||
}
|
||||
|
||||
if (addall)
|
||||
myarr = [costanti.FILTER_TUTTI, ...myarr]
|
||||
|
||||
|
||||
@@ -70,6 +70,19 @@
|
||||
|
||||
</CTitleBanner>
|
||||
|
||||
|
||||
<CTitleBanner
|
||||
class="q-pa-xs" title="Competenze e Talenti" bgcolor="bg-primary" clcolor="text-white"
|
||||
myclass="myshad" :canopen="true">
|
||||
|
||||
<CSkill
|
||||
:filtercustom="filtroutente">
|
||||
|
||||
</CSkill>
|
||||
|
||||
|
||||
</CTitleBanner>
|
||||
|
||||
<CTitleBanner
|
||||
class="q-pa-xs" title="Informazioni su di te" bgcolor="bg-primary" clcolor="text-white"
|
||||
myclass="myshad" :canopen="true">
|
||||
@@ -157,18 +170,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</CTitleBanner>
|
||||
|
||||
<CTitleBanner
|
||||
class="q-pa-xs" title="Competenze e Talenti" bgcolor="bg-primary" clcolor="text-white"
|
||||
myclass="myshad" :canopen="true">
|
||||
|
||||
<CSkill
|
||||
:filtercustom="filtroutente">
|
||||
|
||||
</CSkill>
|
||||
|
||||
|
||||
</CTitleBanner>
|
||||
|
||||
<!--
|
||||
|
||||
18
src/views/user/mygroup/mygroup.scss
Executable file
@@ -0,0 +1,18 @@
|
||||
.profile {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
max-width: 450px;
|
||||
}
|
||||
|
||||
.myrow{
|
||||
display: flex;
|
||||
@media (max-width: 600px) {
|
||||
flex-flow: column;
|
||||
}
|
||||
}
|
||||
|
||||
.qualifica{
|
||||
border: solid 2px #4198ef;
|
||||
border-radius: 1rem;
|
||||
padding: 5px;
|
||||
}
|
||||
113
src/views/user/mygroup/mygroup.ts
Executable file
@@ -0,0 +1,113 @@
|
||||
import { CMyFieldDb } from '@/components/CMyFieldDb'
|
||||
import { CTitleBanner } from '@/components/CTitleBanner'
|
||||
import { CProfile } from '@/components/CProfile'
|
||||
import { CSkill } from '@/components/CSkill'
|
||||
import { CDateTime } from '@/components/CDateTime'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { computed, defineComponent, onMounted, ref, watch } from 'vue'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
import { IMyGroup, IUserFields } from 'model'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
name: 'mygroup',
|
||||
components: { CProfile, CTitleBanner, CMyFieldDb, CSkill, CDateTime },
|
||||
props: {},
|
||||
setup() {
|
||||
const userStore = useUserStore()
|
||||
const $route = useRoute()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
|
||||
const animation = ref('fade')
|
||||
|
||||
const groupname = computed(() => $route.params.groupname ? $route.params.groupname.toString() : '')
|
||||
|
||||
const filtroutente = ref(<any[]>[])
|
||||
const showPic = ref(false)
|
||||
|
||||
const mygrp = ref(<IMyGroup>{})
|
||||
|
||||
function profile() {
|
||||
return userStore.my.profile
|
||||
}
|
||||
|
||||
function mygrpname() {
|
||||
return userStore.my.username
|
||||
}
|
||||
|
||||
function loadGroup() {
|
||||
// Carica il profilo di quest'utente
|
||||
if (groupname.value) {
|
||||
userStore.loadGroup(groupname.value).then((ris) => {
|
||||
mygrp.value = ris
|
||||
// filtroutente.value = [{ userId: userStore.my._id }]
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
watch(() => groupname.value, (to: any, from: any) => {
|
||||
loadGroup()
|
||||
})
|
||||
|
||||
function mounted() {
|
||||
loadGroup()
|
||||
}
|
||||
|
||||
function getImgGrp() {
|
||||
return userStore.getImgByGroup(mygrp.value)
|
||||
}
|
||||
|
||||
function checkifShow(col: string) {
|
||||
//++Todo: checkifShow Permessi !
|
||||
return true
|
||||
}
|
||||
|
||||
function getLinkGrpTelegram() {
|
||||
|
||||
if (!!mygrp.value.link_telegram) {
|
||||
return 'https://t.me/' + mygrp.value.link_telegram
|
||||
}
|
||||
}
|
||||
|
||||
function getLinkWebSite() {
|
||||
|
||||
let site = mygrp.value.website!
|
||||
if (site) {
|
||||
if (!site.startsWith('http')) {
|
||||
site = 'https://' + site
|
||||
}
|
||||
}
|
||||
return site
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
groupname,
|
||||
profile,
|
||||
tools,
|
||||
costanti,
|
||||
mygrp,
|
||||
shared_consts,
|
||||
getImgGrp,
|
||||
checkifShow,
|
||||
getLinkGrpTelegram,
|
||||
getLinkWebSite,
|
||||
filtroutente,
|
||||
showPic,
|
||||
mygrpname,
|
||||
userStore,
|
||||
t,
|
||||
animation,
|
||||
}
|
||||
}
|
||||
})
|
||||
114
src/views/user/mygroup/mygroup.vue
Executable file
@@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<div class="q-gutter-sm q-pa-sm q-pb-md">
|
||||
<div v-if="mygrp.descr" class="fit column no-wrap justify-evenly items-center content-start">
|
||||
|
||||
<div class="">
|
||||
<q-avatar size="140px">
|
||||
<q-img :src="getImgGrp()" :alt="username" img-class="imgprofile" height="140px" @click="showPic = true"/>
|
||||
</q-avatar>
|
||||
</div>
|
||||
|
||||
<div class="text-h6">
|
||||
<span v-if="checkifShow('name')"> {{ mygrp.title }}</span>
|
||||
</div>
|
||||
<div class="col-12 text-h7 text-blue text-shadow-2">
|
||||
{{ mygrp.groupname }}
|
||||
</div>
|
||||
<div class="col-12 text-h7">
|
||||
<span v-if="checkifShow('descr')">{{ mygrp.descr }}</span>
|
||||
</div>
|
||||
|
||||
<div v-if="mygrp.admins && !mygrp.admins.includes(userStore.my.username)">
|
||||
<q-btn
|
||||
v-if="!userStore.IsMyGroupByGroupname(mygrp.groupname) && !userStore.IsAskedGroupByGroupname(mygrp.groupname)"
|
||||
icon="fas fa-user-plus"
|
||||
color="primary" :label="$t('groups.ask_group')"
|
||||
@click="tools.setRequestGroup($q, userStore.my.username, mygrp.groupname, true)"
|
||||
/>
|
||||
|
||||
<q-btn
|
||||
v-if="userStore.IsAskedGroupByGroupname(mygrp.groupname) && !userStore.IsMyGroupByGroupname(mygrp.groupname)"
|
||||
icon="fas fa-user-minus"
|
||||
flat :label="$t('groups.cancel_ask_group_short')"
|
||||
@click="tools.cancelReqGroups($q, userStore.my.username, mygrp.groupname)"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div v-if="mygrp.title">
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<q-btn
|
||||
v-if="mygrp.admins.includes(userStore.my.username)" icon="fas fa-pencil-alt"
|
||||
color="blue"
|
||||
size="md"
|
||||
:label="$t('otherpages.modifgrp')"
|
||||
to="/editgrp">
|
||||
</q-btn>
|
||||
|
||||
<div v-if="mygrp.title" class="myrow justify-evenly items-center q-pa-sm q-ma-sm">
|
||||
|
||||
<div class="col-6 q-ma-xs">
|
||||
<q-btn
|
||||
v-if="getLinkGrpTelegram()" icon="fab fa-telegram"
|
||||
color="blue" type="a"
|
||||
size="md"
|
||||
rounded
|
||||
:label="$t('msgs.telegrammsg')"
|
||||
:href="getLinkGrpTelegram()" target="__blank">
|
||||
</q-btn>
|
||||
|
||||
</div>
|
||||
<div class="col-6 q-ma-xs">
|
||||
<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 v-else class="fit column no-wrap justify-evenly items-center content-start">
|
||||
<q-skeleton type="QAvatar" size="140px" height="140px" animation="fade"/>
|
||||
<q-card flat bordered style="width: 250px">
|
||||
<div class="text-h6">
|
||||
<q-skeleton :animation="animation"/>
|
||||
</div>
|
||||
<div class="col-12 text-h7 text-grey text-center">
|
||||
{{ groupname }}
|
||||
</div>
|
||||
<div class="col-12 text-h7">
|
||||
<q-skeleton :animation="animation"/>
|
||||
</div>
|
||||
|
||||
<div class="col-12 text-h8 q-mt-sm">
|
||||
<q-skeleton :animation="animation"/>
|
||||
</div>
|
||||
<div class="col-12 text-h8 q-mt-sm">
|
||||
<q-skeleton :animation="animation"/>
|
||||
</div>
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<q-dialog
|
||||
v-model="showPic"
|
||||
full-height full-width
|
||||
>
|
||||
|
||||
<img :src="getImgGrp()" :alt="groupname" class="full-width">
|
||||
|
||||
</q-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./mygroup.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './mygroup.scss';
|
||||
</style>
|
||||
|
||||
0
src/views/user/mygroups/mygroups.scss
Normal file
105
src/views/user/mygroups/mygroups.ts
Executable file
@@ -0,0 +1,105 @@
|
||||
import { CMyGroups } from '@/components/CMyGroups'
|
||||
import { CGridTableRec } from '@/components/CGridTableRec'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { computed, defineComponent, onMounted, ref, watch } from 'vue'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { colmyUserGroup } from '@store/Modules/fieldsTable'
|
||||
import { ISearchList } from 'model'
|
||||
import { costanti } from '@costanti'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'mygroups',
|
||||
components: { CMyGroups, CGridTableRec },
|
||||
props: {},
|
||||
setup() {
|
||||
const userStore = useUserStore()
|
||||
const $route = useRoute()
|
||||
const { t } = useI18n()
|
||||
|
||||
const arrfilterand: any = ref([])
|
||||
const filtercustom: any = ref([])
|
||||
const searchList = ref(<ISearchList[]>[])
|
||||
|
||||
const filter = ref(costanti.FIND_GROUP)
|
||||
|
||||
function mounted() {
|
||||
searchList.value = []
|
||||
filtercustom.value = []
|
||||
arrfilterand.value = []
|
||||
|
||||
const filt_loaded = tools.getCookie(tools.COOK_SEARCH + tools.GROUP_SEARCH)
|
||||
filter.value = filt_loaded ? filt_loaded : costanti.FIND_GROUP
|
||||
}
|
||||
|
||||
watch(() => filter.value, (newval: any, oldval) => {
|
||||
tools.setCookie(tools.COOK_SEARCH + tools.GROUP_SEARCH, newval)
|
||||
|
||||
})
|
||||
|
||||
function extraparams() {
|
||||
let lk_tab = 'mygroups'
|
||||
let lk_LF = 'userId'
|
||||
let lk_FF = '_id'
|
||||
let lk_as = 'group'
|
||||
let af_objId_tab = 'myId'
|
||||
|
||||
return {
|
||||
lookup1: {
|
||||
lk_tab,
|
||||
lk_LF,
|
||||
lk_FF,
|
||||
lk_as,
|
||||
af_objId_tab,
|
||||
lk_proj: {
|
||||
groupname: 1,
|
||||
title: 1,
|
||||
descr: 1,
|
||||
img: 1,
|
||||
visibility: 1,
|
||||
admins: 1,
|
||||
idSector: 1,
|
||||
photos: 1,
|
||||
idCity: 1,
|
||||
comune: 1,
|
||||
}
|
||||
},
|
||||
lookup2: {
|
||||
lk_tab: 'cities',
|
||||
lk_LF: 'idCity',
|
||||
lk_FF: '_id',
|
||||
lk_as: 'comune',
|
||||
lk_proj: {
|
||||
groupname: 1,
|
||||
title: 1,
|
||||
descr: 1,
|
||||
img: 1,
|
||||
idSector: 1,
|
||||
visibility: 1,
|
||||
admins: 1,
|
||||
photos: 1,
|
||||
idCity: 1,
|
||||
comune: 1,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
filter,
|
||||
costanti,
|
||||
shared_consts,
|
||||
arrfilterand,
|
||||
filtercustom,
|
||||
searchList,
|
||||
colmyUserGroup,
|
||||
extraparams,
|
||||
}
|
||||
}
|
||||
})
|
||||
46
src/views/user/mygroups/mygroups.vue
Executable file
@@ -0,0 +1,46 @@
|
||||
<template>
|
||||
<div class="">
|
||||
<CMyGroups
|
||||
v-model="filter"
|
||||
:finder="true"
|
||||
>
|
||||
<CGridTableRec
|
||||
prop_mytable="mygroups"
|
||||
prop_mytitle=""
|
||||
:prop_mycolumns="colmyUserGroup"
|
||||
prop_colkey="_id"
|
||||
col_title="groupname"
|
||||
:vertical="true"
|
||||
nodataLabel=" "
|
||||
:prop_search="true"
|
||||
hint="nome del gruppo da trovare"
|
||||
:finder="true"
|
||||
:choose_visutype="true"
|
||||
:finder_noNull="false"
|
||||
:options="shared_consts.OPTIONS_SEARCH_ONLY_FULL_WORDS"
|
||||
:butt_modif_new="true"
|
||||
noresultLabel="nome del gruppo non trovato"
|
||||
:arrfilters="arrfilterand"
|
||||
:filtercustom="filtercustom"
|
||||
:prop_searchList="searchList"
|
||||
:showType="costanti.SHOW_GROUPINFO"
|
||||
keyMain=""
|
||||
:showCol="false"
|
||||
:extraparams="extraparams()">
|
||||
|
||||
</CGridTableRec>
|
||||
</CMyGroups>
|
||||
|
||||
<div v-if="filter === costanti.CREATE_GROUP">
|
||||
Nuovo Gruppo:
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./mygroups.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './mygroups.scss';
|
||||
</style>
|
||||
|
||||
@@ -17,7 +17,7 @@ import { shared_consts } from '@/common/shared_vuejs'
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
name: 'myuser',
|
||||
name: 'myprofile',
|
||||
components: { CProfile, CTitleBanner, CMyFieldDb, CSkill, CDateTime },
|
||||
props: {},
|
||||
setup() {
|
||||
|
||||
@@ -102,6 +102,21 @@
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
<CTitleBanner
|
||||
class="" title="Competenze e Talenti" bgcolor="bg-positive" clcolor="text-white"
|
||||
myclass="myshad" :canopen="true">
|
||||
|
||||
<CSkill
|
||||
:filtercustom="filtroutente"
|
||||
:butt_modif_new="false"
|
||||
|
||||
>
|
||||
|
||||
</CSkill>
|
||||
|
||||
|
||||
</CTitleBanner>
|
||||
|
||||
<div v-if="myuser.name">
|
||||
<CTitleBanner
|
||||
class="" :title="$t('dashboard.info')" bgcolor="bg-primary" clcolor="text-white"
|
||||
@@ -124,20 +139,6 @@
|
||||
</CTitleBanner>
|
||||
</div>
|
||||
|
||||
<CTitleBanner
|
||||
class="" title="Competenze e Talenti" bgcolor="bg-positive" clcolor="text-white"
|
||||
myclass="myshad" :canopen="true">
|
||||
|
||||
<CSkill
|
||||
:filtercustom="filtroutente"
|
||||
:butt_modif_new="false"
|
||||
|
||||
>
|
||||
|
||||
</CSkill>
|
||||
|
||||
|
||||
</CTitleBanner>
|
||||
|
||||
</div>
|
||||
<q-dialog
|
||||
|
||||
12
yarn.lock
@@ -6881,9 +6881,9 @@ is-absolute-url@^3.0.3:
|
||||
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
|
||||
integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
|
||||
|
||||
is-accessor-descriptor@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
|
||||
is-accessor-descriptor@^0.1.7:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.7.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
|
||||
integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
|
||||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
@@ -6983,11 +6983,11 @@ is-date-object@^1.0.1:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-descriptor@^0.1.0:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
|
||||
integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
|
||||
dependencies:
|
||||
is-accessor-descriptor "^0.1.6"
|
||||
is-accessor-descriptor "^0.1.7"
|
||||
is-data-descriptor "^0.1.4"
|
||||
kind-of "^5.0.0"
|
||||
|
||||
|
||||