- Aggiornato grafica Pagina Gruppi

- Lista Utenti appartenenti al gruppo
- Lista richieste gruppo
- Nome e Cognome tolti
This commit is contained in:
paoloar77
2022-02-08 23:06:22 +01:00
parent 980ff4b48e
commit a2f7f7a8d2
97 changed files with 1141 additions and 441 deletions

View File

@@ -12,7 +12,7 @@ LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="http://192.168.0.200:3000"
LOGO_REG='insiemesipuo-logo-full.png'
LOGO_REG="freeplanet-logo-full.svg"
TEST_NAME="Paolo"
TEST_SURNAME="Arena"
TEST_EMAIL="paolo@freeplanet.app"

View File

@@ -3,16 +3,16 @@ SERVICE_WORKER_FILE="service-worker.js"
APP_ID="1"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=freeplanet_serverside
SERVERDIR_WEBSITE=www.insiemesipuo.app
SERVERDIR_WEBSITE=www.freeplanet.app
SERVERPW_WEBSITE=pwdadmin@1AOK
APP_URL="https://www.insiemesipuo.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
APP_URL="https://www.freeplanet.app"
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
PROVA_PAOLO="PROVA ENV FUNZIONA!"
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://www.freeplanet.app:3000"
LOGO_REG='insiemesipuo-logo-full.png'
LOGO_REG='freeplanet-logo-full.svg'
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/"
TELEGRAM_SUPPORT="https://t.me/freeplanet_supporto"
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
TEST_CELL=""
ISTEST=0

View File

@@ -3,21 +3,21 @@ SERVICE_WORKER_FILE="service-worker.js"
APP_ID="1"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside
SERVERDIR_WEBSITE="test.insiemesipuo.app"
SERVERDIR_WEBSITE="test.freeplanet.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"
APP_URL="https://test.insiemesipuo.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
APP_URL="https://test.freeplanet.app"
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
PROVA_PAOLO="PROVA ENV FUNZIONA!"
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://test.freeplanet.app:3001"
LOGO_REG='insiemesipuo-logo-full.png'
LOGO_REG="freeplanet-logo-full.svg"
TEST_NAME="Paolo"
TEST_SURNAME="Arena"
TEST_EMAIL="paolo@freeplanet.app"
TEST_USERNAME="paoloar77"
TEST_PASSWORD=""
TEST_PASSWORD="passpao1fr@1A"
TEST_APORTADOR=""
PUBLICKEY_PUSH="BNRBtL3iaLVGW-aQckwQBmh5uKKzcizOZsMjnzCtSuHkssEhbyioEN2E_CwItDLDShMO-OQ1uhK51ty6zG_gCT8"
IN_CONSTRUCTION="0"

View File

@@ -20,6 +20,7 @@ const functionality: IFunctionality = {
BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true,
SHOW_NAMESURNAME: false,
}
// const SHOW_PROJINTHEMENU = false

View File

@@ -12,7 +12,7 @@ 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="paolo@freeplanet.app"

View File

@@ -12,7 +12,7 @@ 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"

File diff suppressed because one or more lines are too long

View File

@@ -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',

View File

@@ -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',
@@ -19,6 +19,7 @@ const msg_website_es = {
status: 'Estadísticas',
nextzoom: 'Conferencias',
requestresetpwd: 'Solicitud de restablecimiento de contraseña',
calendarioeventi: 'Calendario Eventos',
vreg: 'Verifica Reg',
dashboard: 'Tablero',
statoattuale: 'Estado Actual',

View File

@@ -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',

View File

@@ -1,8 +1,8 @@
const msg_website_it = {
ws: {
sitename: 'FreePlanet',
siteshortname: 'FreePlanet',
botname: 'il Bot di FreePlanet',
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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -20,6 +20,7 @@ const functionality: IFunctionality = {
BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true,
ENABLE_GROUPS: true,
}
// const SHOW_PROJINTHEMENU = false
@@ -422,6 +423,17 @@ const baseroutes: IListRoutes[] = [
inmenu: true,
infooter: true,
},
{
active: functionality.ENABLE_GROUPS,
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 +445,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,

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -293,12 +293,22 @@ module.exports = configure((ctx) => ({
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',
},
@@ -336,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

View File

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

View File

@@ -20,6 +20,7 @@ const functionality: IFunctionality = {
BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true,
ENABLE_GROUPS: false,
}
// const SHOW_PROJINTHEMENU = false
@@ -422,6 +423,17 @@ const baseroutes: IListRoutes[] = [
inmenu: true,
infooter: true,
},
{
active: functionality.ENABLE_GROUPS,
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 +445,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 +582,7 @@ const baseroutes: IListRoutes[] = [
isseparator: true,
inmenu: true,
},
/*{
{
active: true,
order: 80,
path: '/calendario-eventi',
@@ -569,7 +592,7 @@ const baseroutes: IListRoutes[] = [
extraclass: 'isCalendar',
inmenu: true,
infooter: true
},*/
},
{
active: true,
order: 1000,

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@@ -294,12 +294,22 @@ module.exports = configure((ctx) => ({
theme_color: '#027be3',
icons: [
{
src: 'images/android-chrome-192x192.png',
sizes: '384x384',
src: 'images/pdnm-android-icon-96x96.png',
sizes: '96x96',
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',
type: 'image/png',
},

View File

@@ -18,5 +18,6 @@ else
cp -R _ALL_SITES/$site/.env.development .
cp -R _ALL_SITES/$site/.env.production .
cp -R _ALL_SITES/$site/.env.test .
cp -R _ALL_SITES/$site/images/ ./public/images/
fi

View File

@@ -1,8 +1,8 @@
{
"name": "insiemesipuo",
"version": "0.1.0",
"description": "Insieme Si Puo",
"productName": "Insieme Si Puo",
"name": "freeplanet",
"version": "0.0.7",
"description": "FreePlanet",
"productName": "FreePlanet",
"author": "Paolo Arena",
"private": true,
"keywords": [

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
public/images/pdnm-logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -284,31 +284,21 @@ module.exports = configure((ctx) => ({
},
manifest: {
name: 'InsiemeSiPuo',
short_name: 'InsiemeSiPuo',
description: 'Insieme Si Può',
name: 'FreePlanet',
short_name: 'FreePlanet',
description: 'New Free Social',
display: 'standalone',
orientation: 'portrait',
background_color: '#ffffff',
theme_color: '#027be3',
icons: [
{
src: 'images/isp-android-icon-96x96.png',
sizes: '96x96',
src: 'images/android-chrome-192x192.png',
sizes: '384x384',
type: 'image/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',
src: 'images/android-chrome-512x512.png',
sizes: '512x512',
type: 'image/png',
},
@@ -346,7 +336,7 @@ module.exports = configure((ctx) => ({
builder: {
// https://www.electron.build/configuration/configuration
appId: 'InsiemeSiPuo',
appId: 'firstproj',
},
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain

View File

@@ -16,6 +16,8 @@ export const shared_consts = {
},
},
QUERYTYPE_MYGROUP: 1,
ALL_SAW_AND_ACCEPTED: 3,
FILTER_EXTRALIST_NOT_REGISTERED: 1,

View File

@@ -38,7 +38,7 @@ export default defineComponent({
myval = searchList.value.find((rec) => (rec.table === 'sectors'))
if (myval) {
const ris = myval.value || 0
// console.log('idSector=', ris)
console.log('idSector=', ris)
return ris
} else {
return 0

View File

@@ -208,6 +208,7 @@ export default defineComponent({
const newRecordBool = ref(false)
const editRecordBool = ref(false)
const newRecord: any = ref({})
const recSaved: any = ref({})
const recModif: any = ref({})
const mytable = ref('')
@@ -945,6 +946,7 @@ export default defineComponent({
console.log('Edit', item)
selItem(item, col)
recModif.value = item
recSaved.value = {...item}
editRecordBool.value = true
} else {
@@ -1243,6 +1245,16 @@ export default defineComponent({
})
}
function cancelrecModif() {
recModif.value = {...recSaved.value}
if (recModif.value._id) {
const indrec = serverData.value.findIndex((rec: any) => rec._id === recModif.value._id)
if (indrec >= 0)
serverData.value[indrec] = recModif.value
editRecordBool.value = false
}
}
async function saverecModif() {
console.log('saverecModif')
const mydata = {
@@ -1259,7 +1271,7 @@ export default defineComponent({
// console.log('ris', ris)
if (ris) {
editRecordBool.value = false
const indrec = serverData.value.findIndex((rec: IMySkill) => rec._id === ris._id)
const indrec = serverData.value.findIndex((rec: any) => rec._id === ris._id)
console.log('indrec', indrec, serverData.value[indrec])
mycolumns.value.forEach((col: IColGridTable) => {
if (!col.foredit) {
@@ -1347,6 +1359,7 @@ export default defineComponent({
getusernamesel,
saveNewRecord,
saverecModif,
cancelrecModif,
hidewindow,
isfinishLoading,
getlabelAddRow,
@@ -1372,6 +1385,7 @@ export default defineComponent({
editRecordBool,
newRecord,
recModif,
recSaved,
lists,
refresh,
spinner_visible,

View File

@@ -120,6 +120,7 @@
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:options="valoriopt(item, false)"
:filter="item.filter"
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server">
</CMySelect>
@@ -144,6 +145,7 @@
:icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:filter="item.filter"
:options="valoriopt(item, false)"
:useinput="true">
</CMySelect>
@@ -164,6 +166,7 @@
stack-label
:useinput="item.useinput"
:options="valoriopt(item, item.addall)"
:filter="item.filter"
class="combowidth"
:option-value="fieldsTable.getKeyByTable(item.table)"
>
@@ -513,7 +516,7 @@
</q-card-section>
<q-card-actions align="center">
<q-btn flat :label="$t('dialog.ok')" color="primary" @click="saverecModif"></q-btn>
<q-btn flat :label="$t('dialog.cancel')" color="primary" v-close-popup></q-btn>
<q-btn flat :label="$t('dialog.cancel')" color="primary" @click="cancelrecModif"></q-btn>
</q-card-actions>
</q-card>
</q-dialog>

View File

@@ -21,7 +21,7 @@ export default defineComponent({
required: false,
},
optlab: {
type: String,
type: [String, Function],
required: true,
},
optval: {
@@ -111,7 +111,7 @@ export default defineComponent({
if (mydata.label)
mydata.label = mydata.label[0]
} else {
mydata.label = rec[props.optlab]
mydata.label = tools.getValueByFunzOrVal(rec, props.optlab)
}
// console.log('mydata.label', mydata.label)
@@ -141,7 +141,7 @@ export default defineComponent({
if (mydata.label)
mydata.label = mydata.label[0]
} else {
mydata.label = rec[props.optlab]
mydata.label = tools.getValueByFunzOrVal(rec, props.optlab)
}
if (props.opticon)
@@ -155,7 +155,7 @@ export default defineComponent({
} else {
if (tools.isBitActive(myval.value, rec[props.optval])) {
const mydata = {
label: t(rec[props.optlab]),
label: t(tools.getValueByFunzOrVal(rec, props.optlab)),
value: rec[props.optval],
valbool: tools.isBitActive(myval.value, rec[props.optval]),
icon: '',

View File

@@ -37,7 +37,9 @@ export default defineComponent({
setup(props, { emit }) {
const $q = useQuasar()
const editor = ref(null)
const editorRef = ref(<any>null)
const editor = ref('')
//const myvalue = toRef(props, 'value')
const myvalue = ref('')
const mycolor = ref('')
@@ -58,7 +60,8 @@ export default defineComponent({
const toolbarcomp = ref([
['left', 'center', 'right', 'justify'],
['bold', 'italic', 'underline', 'strike'],
[
['token', 'hr', 'link', 'custom_btn'],
['print', 'fullscreen'], [
{
label: $q.lang.editor.formatting,
icon: $q.iconSet.editor.formatting,
@@ -112,7 +115,7 @@ export default defineComponent({
])
function changeval(newval: any) {
console.log('myEditor: changeval', newval)
// console.log('myEditor: changeval', newval)
emit('update:value', newval)
}
@@ -171,6 +174,29 @@ export default defineComponent({
myvalue.value = props.value
}
function onPaste (evt: any) {
// Let inputs do their thing, so we don't break pasting of links.
if (evt.target.nodeName === 'INPUT') return
let text, onPasteStripFormattingIEPaste
evt.preventDefault()
evt.stopPropagation()
if (evt.originalEvent && evt.originalEvent.clipboardData.getData) {
text = evt.originalEvent.clipboardData.getData('text/plain')
editorRef.value.runCmd('insertText', text)
}
else if (evt.clipboardData && evt.clipboardData.getData) {
text = evt.clipboardData.getData('text/plain')
editorRef.value.runCmd('insertText', text)
}
/*else if (ClipboardEvent.clipboardData && ClipboardEvent.clipboardData.getData) {
if (!onPasteStripFormattingIEPaste) {
onPasteStripFormattingIEPaste = true
editorRef.value.runCmd('ms-pasteTextOnly', text)
}
onPasteStripFormattingIEPaste = false
}*/
}
onMounted(mounted)
return {
@@ -185,6 +211,8 @@ export default defineComponent({
setcolor,
pasteCapture,
tools,
onPaste,
editorRef,
}
}
})

View File

@@ -25,7 +25,7 @@
</q-btn>
<q-editor
ref="editor"
ref="editorRef"
content-class="wrap_anywhere"
toolbar-text-color="white"
toolbar-toggle-color="yellow-8"
@@ -33,7 +33,7 @@
:toolbar="toolbarcomp"
:fonts="myfonts"
@update:model-value="changeval"
@paste="evt => pasteCapture(evt)"
@paste="onPaste"
@keyup.enter.stop
v-model="myvalue">
</q-editor>

View File

@@ -1,6 +1,6 @@
<template>
<div class="text-center">
<div v-if="visuElem()" class="row items-center justify-center q-gutter-md q-ma-xs">
<div v-if="visuElem()" class="row items-center justify-center q-ma-xs">
<div class="q-ma-xs">
<q-field rounded outlined bg-color="blue-1" dense style="min-width:110px;">
@@ -36,6 +36,8 @@
:myimg="myimg"
:canModify="canModify"
:canEdit="canEdit"
:id="id"
:idmain="idmain"
:visulabel="true"
:mycol="col"
:tablesel="tablesel"
@@ -47,6 +49,7 @@
</CMyPopupEdit>
</div>
<slot></slot>
</div>
</div>
</template>

View File

@@ -204,72 +204,12 @@ export default defineComponent({
})
}
function removeFromMyFriends(usernameDest: string) {
$q.dialog({
message: t('db.domanda_removefriend', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username.value, usernameDest, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, null).then((res) => {
if (res) {
userStore.my.profile.friends = userStore.my.profile.friends.filter((rec: IFriends) => rec.username !== usernameDest)
tools.showPositiveNotif($q, t('db.removedfriend'))
}
})
})
}
function setCmd($q: any, cmd: number, usernameDest: string, value: any, groupname: string) {
tools.setCmd($q, cmd, usernameDest, value, username.value)
function refuseReqFriends(usernameDest: string) {
$q.dialog({
message: t('db.domanda_revoke_friend', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username.value, usernameDest, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, null).then((res) => {
if (res) {
userStore.my.profile.req_friends = userStore.my.profile.req_friends.filter((user: IFriends) => user.username !== usernameDest)
tools.showPositiveNotif($q, t('db.removedfriend'))
}
})
})
}
function blockUser(usernameDest: string) {
$q.dialog({
message: t('db.domanda_blockuser', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username.value, usernameDest, shared_consts.FRIENDSCMD.BLOCK_USER, null).then((res) => {
if (res) {
userStore.my.profile.friends = userStore.my.profile.friends.filter((rec: IFriends) => rec.username !== usernameDest)
tools.showPositiveNotif($q, t('db.blockedfriend'))
}
})
})
}
function setCmd(cmd: number, usernameDest: string, value: any = '') {
if (cmd === shared_consts.FRIENDSCMD.SETTRUST) {
setRequestTrust(usernameDest, value)
} else if (cmd === shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS) {
removeFromMyFriends(usernameDest)
} else if (cmd === shared_consts.FRIENDSCMD.BLOCK_USER) {
blockUser(usernameDest)
} else if (cmd === shared_consts.FRIENDSCMD.SETFRIEND) {
tools.addToMyFriends($q, username.value, usernameDest)
} else if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) {
tools.setRequestFriendship($q, username.value, usernameDest, value)
} else if (cmd === shared_consts.FRIENDSCMD.REFUSE_REQ_FRIEND) {
refuseReqFriends(usernameDest)
} else if (cmd === shared_consts.FRIENDSCMD.CANCEL_REQ_FRIEND) {
tools.cancelReqFriends($q, username.value, usernameDest)
}
}

View File

@@ -81,6 +81,7 @@ export default defineComponent({
setCmd,
shared_consts,
userStore,
$q,
}
},
})

View File

@@ -19,12 +19,12 @@
<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)">
@click="tools.setCmd($q, shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP, myusername(), '', 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 clickable icon="fas fa-ban" v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.BLOCK_GROUP, myusername(), '', grp.groupname)">
<q-item-section>{{ $t('groups.block_group') }}</q-item-section>
</q-item>
</q-list>
@@ -38,7 +38,7 @@
<q-menu>
<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)">
@click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), false, grp.groupname)">
<q-item-section>{{ $t('groups.reject_ask_group') }}</q-item-section>
</q-item>
</q-list>
@@ -52,7 +52,7 @@
<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)">
@click="tools.setCmd($q, shared_consts.GROUPSCMD.CANCEL_REQ_GROUP, myusername(), '', grp.groupname)">
<q-item-section>{{ $t('groups.cancel_ask_group') }}</q-item-section>
</q-item>
</q-list>
@@ -65,17 +65,17 @@
<q-btn 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 clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), true, grp.groupname)">
<q-item-section>{{ $t('groups.ask_group') }}</q-item-section>
</q-item>
</q-list>
<q-list v-else-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, false)">
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), false, grp.groupname)">
<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 clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUPS, myusername(), '', grp.groupname)">
<q-item-section>{{ $t('groups.remove_from_mygroups') }}</q-item-section>
</q-item>
</q-list>

View File

@@ -103,7 +103,8 @@ export default defineComponent({
userStore.loadGroups(username.value).then((ris) => {
// console.log('ris', ris)
if (ris) {
userStore.my.profile.mygroups = ris.listUsersGroup ? ris.listUsersGroup : []
userStore.my.profile.mygroups = ris.mygroups ? ris.mygroups : []
userStore.my.profile.list_usersgroup = 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 }]
@@ -113,36 +114,6 @@ export default defineComponent({
}
}
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.mygroups = userStore.my.profile.mygroups.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) {
tools.removeFromMyGroups($q, username.value, 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()
@@ -161,7 +132,6 @@ export default defineComponent({
shared_consts,
filtroutente,
listgroupsfiltered,
setCmd,
updateValue,
myoptions,
}

View File

@@ -23,7 +23,6 @@
<span v-for="(grp, index) in listgroupsfiltered" :key="index" class="q-my-sm" clickable>
<CMyGroup
:mygrp="grp"
@setCmd="setCmd"
:visu="modelValue">
</CMyGroup>
</span>
@@ -35,7 +34,6 @@
<span class="q-my-sm" clickable>
<CMyGroup
:mygrp="mygrp"
@setCmd="setCmd"
:visu="visu">
</CMyGroup>
</span>

View File

@@ -231,8 +231,6 @@ export default defineComponent({
}
}
console.log('col.value', col.value)
// console.log('CMyFieldDb crea', myvalue)
}
@@ -251,10 +249,13 @@ export default defineComponent({
function changeval(newval: any) {
console.log('changeval update:row', newval)
emit('update:row', props.row)
if (!props.isrec) {
emit('update:row', props.row)
}
if (props.isInModif)
OpenEdit()
}
function getrealval(newval: any) {

View File

@@ -126,6 +126,10 @@ export default defineComponent({
type: String,
required: false,
default: '',
},
filter: {
type: Function,
required: false,
}
},
components: {},
@@ -194,7 +198,7 @@ export default defineComponent({
// console.log('----------- arrtempOpt.value', arrtempOpt.value)
localStorage.setItem(props.tablesel + num + props.optval, id)
localStorage.setItem(props.tablesel + num + props.optlab, rec[`${props.optlab}`])
localStorage.setItem(props.tablesel + num + props.optlab, tools.getValueByFunzOrVal(rec, props.optlab))
num += 1
localStorage.setItem(props.tablesel + 'NUM', num.toString())
@@ -320,7 +324,7 @@ export default defineComponent({
}
if (props.tablesel === 'friendsandme') {
debugger;
// debugger;
}
if (props.multiple) {
@@ -349,7 +353,7 @@ export default defineComponent({
if (props.funcgetvaluebyid)
myvalue.value = props.funcgetvaluebyid(rec[`${props.optval}`])
else
myvalue.value = rec[`${props.optlab}`]
myvalue.value = tools.getValueByFunzOrVal(rec, props.optlab)
} else {
// if (!props.useinput) {
if (props.value) {
@@ -372,13 +376,16 @@ export default defineComponent({
function updateArrOptions() {
let myarr: any = []
// console.log(props.col.jointable, props.filter)
if (props.col.jointable) {
optionsreal.value = globalStore.getTableJoinByName(props.col.jointable, props.col.addall, props.col.filter)
optionsreal.value = globalStore.getTableJoinByName(props.col.jointable, props.col.addall, props.filter)
// console.log('optionsreal.value', optionsreal.value)
} else {
optionsreal.value = props.options
}
// console.log('optionsreal.value', optionsreal.value)
myarr = optionsreal.value
if (!fieldsTable.tableRemotePickup.includes(props.tablesel)) {
@@ -386,7 +393,7 @@ export default defineComponent({
// console.log('needle', needle, 'props.multiple', props.multiple)
if (props.filter_table) {
console.log(' FILTERTABLE', props.filter_field, myarr)
// console.log(' FILTERTABLE', props.filter_field, myarr)
if (props.multiple) {
myarr = myarr.filter((rec: any) => rec[props.filter_field] === needle)
} else {
@@ -578,6 +585,7 @@ export default defineComponent({
abortFilterFn,
newvaluefuncfirst,
getIcon,
tools,
}
}
})

View File

@@ -105,7 +105,7 @@
<template v-slot:option="scope">
<q-item v-bind="scope.itemProps">
<q-item-section>
<q-item-label> {{ scope.opt[optlab] }}</q-item-label>
<q-item-label> {{ tools.getValueByFunzOrVal(scope.opt,optlab) }}</q-item-label>
</q-item-section>
</q-item>
</template>
@@ -139,7 +139,7 @@
</template>
<template
v-slot:selected-item="scope">
<div v-if="scope.opt[optlab]">
<div v-if="tools.getValueByFunzOrVal(scope.opt,optlab)">
<q-chip
removable
dense
@@ -149,7 +149,7 @@
class="q-my-none q-ml-xs q-mr-none"
>
<q-avatar color="primary" text-color="white" :icon="scope.opt.icon ? scope.opt.icon : ''" size="12px"/>
{{ scope.opt[optlab] }}
{{ tools.getValueByFunzOrVal(scope.opt, optlab) }}
</q-chip>
</div>
</template>
@@ -158,7 +158,7 @@
v-slot:option="{ itemProps, opt, selected, toggleOption }">
<q-item v-bind="itemProps">
<q-item-section>
<q-item-label>{{ opt[optlab] }}</q-item-label>
<q-item-label>{{ tools.getValueByFunzOrVal(opt,optlab) }}</q-item-label>
<q-item-label v-if="'hint' in opt" class="hint">{{ opt['hint'] }}</q-item-label>
</q-item-section>
<q-item-section side>
@@ -200,7 +200,7 @@
<q-icon :name="scope.opt.icon ? scope.opt.icon : ''"/>
</q-item-section>
<q-item-section>
<q-item-label>{{ scope.opt[optlab] }}</q-item-label>
<q-item-label>{{ tools.getValueByFunzOrVal(scope.opt,optlab) }}</q-item-label>
<q-item-label v-if="'hint' in scope.opt" class="hint">{{ scope.opt['hint'] }}</q-item-label>
</q-item-section>
</q-item>

View File

@@ -73,8 +73,8 @@ export default defineComponent({
$router.push(path)
}
function setCmd(cmd: number, myusername: string, value: any = '') {
emit('setCmd', cmd, myusername, value)
function setCmd($q: any, cmd: number, myusername: string, value: any, groupname: string) {
emit('setCmd', $q, cmd, myusername, value, groupname)
}
onMounted(mounted)

View File

@@ -8,7 +8,7 @@
</q-item-section>
<q-item-section @click="naviga(`/my/` + contact.username)">
<q-item-label><strong>{{ contact.name }} {{ contact.surname }}</strong> ({{ contact.username }})
<q-item-label><strong>{{ contact.username }}</strong> <span v-if="contact.name">({{ contact.name }} {{ contact.surname }})</span>
</q-item-label>
<q-item-label v-if="contact.profile" caption lines="1"><em>{{ contact.profile.qualifica }}</em></q-item-label>
</q-item-section>
@@ -19,12 +19,12 @@
<q-menu>
<q-list style="min-width: 150px">
<q-item clickable icon="fas fa-user-minus" v-close-popup
@click="setCmd(shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, contact.username)">
@click="setCmd($q, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, contact.username, '', '')">
<q-item-section>{{ $t('friends.remove_from_myfriends') }}</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.FRIENDSCMD.BLOCK_USER, contact.username)">
<q-item clickable icon="fas fa-ban" v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.BLOCK_USER, contact.username, '', '')">
<q-item-section>{{ $t('friends.block_user') }}</q-item-section>
</q-item>
</q-list>
@@ -32,18 +32,18 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.REQ_FRIENDS">
<q-item-section side v-else-if="visu === costanti.REQ_FRIENDS">
<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.FRIENDSCMD.SETFRIEND, contact.username)">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.SETFRIEND, contact.username, '', '')">
<q-item-section>{{ $t('friends.accept_friend') }}</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.FRIENDSCMD.REQFRIEND, contact.username, false)">
@click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, contact.username, false, '')">
<q-item-section>{{ $t('friends.reject_ask_friend') }}</q-item-section>
</q-item>
</q-list>
@@ -51,7 +51,7 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.REQ_ADD_USER_TO_GROUP">
<q-item-section side v-else-if="visu === costanti.REQ_ADD_USER_TO_GROUP">
<q-item-label>
<q-btn rounded icon="fas fa-ellipsis-h">
<q-menu>
@@ -79,7 +79,7 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.REQ_REMOVE_USER_TO_GROUP">
<q-item-section side v-else-if="visu === costanti.REQ_REMOVE_USER_TO_GROUP">
<q-item-label>
<q-btn rounded icon="fas fa-ellipsis-h">
<q-menu>
@@ -95,13 +95,13 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.ASK_SENT_FRIENDS">
<q-item-section side v-else-if="visu === costanti.ASK_SENT_FRIENDS">
<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.FRIENDSCMD.CANCEL_REQ_FRIEND, contact.username)">
@click="setCmd($q, shared_consts.FRIENDSCMD.CANCEL_REQ_FRIEND, contact.username, '', '')">
<q-item-section>{{ $t('friends.cancel_ask_friend') }}</q-item-section>
</q-item>
</q-list>
@@ -109,25 +109,25 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.ASK_TRUST">
<q-item-section side v-else-if="visu === costanti.ASK_TRUST">
<q-item-label>
<q-btn color="positive" :label="$t('friends.accept_trust')" @click="setCmd(shared_consts.FRIENDSCMD.SETTRUST, contact.username, true)"/>
<q-btn color="positive" :label="$t('friends.accept_trust')" @click="setCmd($q, shared_consts.FRIENDSCMD.SETTRUST, contact.username, true, '')"/>
</q-item-label>
<q-item-label>
<q-btn color="negative" :label="$t('friends.refuse_trust')" @click="setCmd(shared_consts.FRIENDSCMD.SETTRUST, contact.username, false)"/>
<q-btn color="negative" :label="$t('friends.refuse_trust')" @click="setCmd($q, shared_consts.FRIENDSCMD.SETTRUST, contact.username, false, '')"/>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.TRUSTED">
<q-item-section side v-else-if="visu === costanti.TRUSTED">
<q-item-label>
<q-btn rounded icon="fas fa-ellipsis-h">
<q-menu>
<q-list v-if="!userStore.IsMyFriendByUsername(contact.username)" style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd(shared_consts.FRIENDSCMD.REQFRIEND, contact.username, true)">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, contact.username, true, '')">
<q-item-section>{{ $t('friends.ask_friend') }}</q-item-section>
</q-item>
</q-list>
<q-list style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd(shared_consts.FRIENDSCMD.SETTRUST, contact.username, false)">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.SETTRUST, contact.username, false, '')">
<q-item-section>{{ $t('friends.reject_trust') }}</q-item-section>
</q-item>
</q-list>
@@ -135,22 +135,22 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.FIND_PEOPLE">
<q-item-section side v-else-if="visu === costanti.FIND_PEOPLE">
<q-item-label>
<q-btn v-if="contact.username !== userStore.my.username" rounded :icon="userStore.IsMyFriendByUsername(contact.username) ? `fas fa-ellipsis-h` : `fas fa-user`">
<q-menu>
<q-list v-if="(!userStore.IsMyFriendByUsername(contact.username) && !userStore.IsAskedFriendByUsername(contact.username))" style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd(shared_consts.FRIENDSCMD.REQFRIEND, contact.username, true)">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, contact.username, true, '')">
<q-item-section>{{ $t('friends.ask_friend') }}</q-item-section>
</q-item>
</q-list>
<q-list v-else-if="(!userStore.IsMyFriendByUsername(contact.username) && userStore.IsAskedFriendByUsername(contact.username))" style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd(shared_consts.FRIENDSCMD.REQFRIEND, contact.username, false)">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, contact.username, false, '')">
<q-item-section>{{ $t('friends.cancel_ask_friend') }}</q-item-section>
</q-item>
</q-list>
<q-list v-else-if="userStore.IsMyFriendByUsername(contact.username)" style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd(shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, contact.username)">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, contact.username, '', '')">
<q-item-section>{{ $t('friends.remove_from_myfriends') }}</q-item-section>
</q-item>
</q-list>
@@ -158,13 +158,13 @@
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.REJECTED">
<q-item-section side v-else-if="visu === costanti.REJECTED">
<q-item-label>
<q-btn rounded icon="fas fa-ellipsis-h">
<q-menu>
<q-list style="min-width: 200px">
<q-item clickable icon="fas fa-user-minus" v-close-popup
@click="setCmd(shared_consts.FRIENDSCMD.SETTRUST, contact.username, true)">
@click="setCmd($q, shared_consts.FRIENDSCMD.SETTRUST, contact.username, true, '')">
<q-item-section>{{ $t('friends.accept_trust') }}</q-item-section>
</q-item>
</q-list>

View File

@@ -22,6 +22,7 @@ import { complexity, registereduser, aportadorexist } from '../../validation'
// import 'vue3-tel-input/dist/vue3-tel-input.css'
import { useRoute, useRouter } from 'vue-router'
import { static_data } from '@/db/static_data'
// import {Loading, QSpinnerFacebook, QSpinnerGears} from 'quasar'
@@ -49,6 +50,11 @@ export default defineComponent({
required: false,
default: false,
},
show_namesurname: {
type: Boolean,
required: false,
default: true,
},
},
setup(props, { emit }) {
const $q = useQuasar()
@@ -65,8 +71,8 @@ export default defineComponent({
const signup = reactive(<ISignupOptions>{
email: process.env.TEST_EMAIL || '',
username: process.env.TEST_USERNAME || '',
name: process.env.TEST_NAME || '',
surname: process.env.TEST_SURNAME || '',
name: static_data.functionality.SHOW_NAMESURNAME ? (process.env.TEST_NAME || '') : '',
surname: static_data.functionality.SHOW_NAMESURNAME ? (process.env.TEST_SURNAME || '') : '',
password: process.env.TEST_PASSWORD || '',
repeatPassword: process.env.TEST_PASSWORD || '',
terms: !process.env.PROD,
@@ -75,7 +81,7 @@ export default defineComponent({
})
const validations: any = computed(() => {
return {
let valid: any = {
repeatPassword: {
required,
repeatPassword: sameAs(signup.password),
@@ -90,12 +96,6 @@ export default defineComponent({
minLength: minLength(6),
registereduser,
},
name: {
required,
},
surname: {
required,
},
terms: {
required,
},
@@ -104,6 +104,17 @@ export default defineComponent({
required
}
}
if (props.show_namesurname) {
valid.name = {
required,
}
valid.surname = {
required,
}
}
return valid
})
// @ts-ignore
@@ -176,8 +187,10 @@ export default defineComponent({
return
} */
signup.name = tools.CapitalizeAllWords(signup.name)
signup.surname = tools.CapitalizeAllWords(signup.surname)
if (signup.name) {
signup.name = tools.CapitalizeAllWords(signup.name)
signup.surname = tools.CapitalizeAllWords(signup.surname)
}
$q.loading.show({ message: t('reg.incorso') })

View File

@@ -2,7 +2,8 @@
<div>
<div class="text-center">
<p>
<logo></logo><CTitleBanner :title="$t('pages.SignUp')"></CTitleBanner>
<logo></logo>
<CTitleBanner :title="$t('pages.SignUp')"></CTitleBanner>
</p>
</div>
@@ -53,7 +54,7 @@
debounce="3000"
:rules="[ myRuleEmail ]"
lazy-rules
:label="$t('reg.email')">
:label="$t('reg.email_reg')">
<template v-slot:prepend>
<q-icon name="email"/>
@@ -69,9 +70,10 @@
:error="v$.username.$error"
@keydown.space="(event) => event.preventDefault()"
maxlength="20"
:hint="$t('reg.username_hint')"
debounce="1000"
:error-message="tools.errorMsg( 'username', v$.username)"
:label="$t('reg.username')">
:label="$t('reg.username_reg')">
<template v-slot:prepend>
<q-icon name="person"/>
@@ -79,37 +81,40 @@
</q-input>
<q-input
v-model="signup.name"
rounded outlined
@blur="v$.name.$touch"
:error="v$.name.$error"
maxlength="30"
debounce="1000"
:error-message="tools.errorMsg( 'name', v$.name)"
:label="$t('reg.name')">
<div v-if="show_namesurname">
<q-input
v-model="signup.name"
rounded outlined
@blur="v$.name.$touch"
:error="v$.name.$error"
maxlength="30"
debounce="1000"
:error-message="tools.errorMsg( 'name', v$.name)"
:label="$t('reg.name')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
</q-input>
<q-input
v-model="signup.surname"
rounded outlined
:error="v$.surname.$error"
@blur="v$.surname.$touch"
maxlength="30"
debounce="1000"
:error-message="tools.errorMsg( 'surname', v$.surname)"
:label="$t('reg.surname')">
<q-input
v-model="signup.surname"
rounded outlined
:error="v$.surname.$error"
@blur="v$.surname.$touch"
maxlength="30"
debounce="1000"
:error-message="tools.errorMsg( 'surname', v$.surname)"
:label="$t('reg.surname')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
</q-input>
</div>
<q-input
v-model="signup.password"
@@ -120,7 +125,7 @@
:error-message="`${tools.errorMsg( 'password', v$.password)}`"
maxlength="30"
debounce="1000"
:label="$t('reg.password')">
:label="$t('reg.password_reg')">
<template v-slot:prepend>
<q-icon name="vpn_key"/>
@@ -203,10 +208,11 @@
</div>
<div class="wrapper">
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit()' :label="$t('reg.submit')">
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit()'
:label="$t('reg.submit')">
</q-btn>
</div>
<br /><br /><br />
<br/><br/><br/>
</div>
</div>
@@ -215,5 +221,5 @@
<script lang="ts" src="./CSignUp.ts">
</script>
<style lang="scss" scoped>
@import './CSignUp.scss';
@import './CSignUp.scss';
</style>

View File

@@ -13,7 +13,7 @@
</q-item-section>
<q-item-section>
<q-item-label>{{ user.name }} {{ user.surname }} {{ getindorder(user) }}<br>
<q-item-label><span v-if="user.name">{{ user.name }} {{ user.surname }}</span> {{ getindorder(user) }}<br>
<span class="text-grey">({{ getusername(user) }}) <strong>{{ getquanti(user)}}</strong></span>
<br><!--<span v-if="isextralist(user)" class="notreg">{{ $t('dashboard.notreg') }}</span>-->
</q-item-label>

View File

@@ -98,7 +98,6 @@
</div>-->
<!-- BUTTON USER BAR -->
<q-btn
class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && !isLogged()" dense flat round
icon="menu"

View File

@@ -868,7 +868,7 @@ $heightBtn: 100%;
}
.combowidth {
min-width: 180px;
min-width: 190px;
@media (max-width: 450px) {
min-width: 250px;
}

View File

@@ -1,8 +1,8 @@
const msg_website_enUs = {
ws: {
sitename: 'InsiemeSuPuò',
siteshortname: 'InsiemeSuPuò',
botname: 'InsiemeSuPuò BOT',
sitename: 'Comunità Nuovo Mondo',
siteshortname: 'CNM',
botname: 'CNM BOT',
},
pages: {
home: 'Home',

View File

@@ -1,8 +1,8 @@
const msg_website_es = {
ws: {
sitename: 'InsiemeSuPuò',
siteshortname: 'InsiemeSuPuò',
botname: 'InsiemeSuPuò BOT',
sitename: 'AYNI',
siteshortname: 'Ayni',
botname: 'AYNI BOT',
},
pages: {
home: 'Home',

View File

@@ -1,8 +1,8 @@
const msg_website_fr = {
ws: {
sitename: 'InsiemeSuPuò',
siteshortname: 'InsiemeSuPuò',
botname: 'InsiemeSuPuò BOT',
sitename: 'AYNI',
siteshortname: 'Ayni',
botname: 'AYNI BOT',
},
homepage: {
titlecontatti: 'CONTACTS',

View File

@@ -1,8 +1,8 @@
const msg_website_it = {
ws: {
sitename: 'InsiemeSuPuò',
siteshortname: 'InsiemeSuPuò',
botname: 'il Bot di InsiemeSuPuò',
sitename: 'FreePlanet',
siteshortname: 'FreePlanet',
botname: 'il Bot di FreePlanet',
},
products: {
quantity: 'Quantità',
@@ -128,8 +128,8 @@ const msg_website_it = {
color: 'Colore',
},
msg: {
myAppName: 'InsiemeSiPuò',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
myAppName: 'FreePlanet',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito e senza Pubblicità',
underconstruction: 'App in costruzione...',
myDescriz: '',
sottoTitoloApp: 'Il primo Vero Social',

View File

@@ -1,8 +1,8 @@
const msg_website_pt = {
ws: {
sitename: 'InsiemeSuPuò',
siteshortname: 'InsiemeSuPuò',
botname: 'InsiemeSuPuò BOT',
sitename: 'CNM',
siteshortname: 'CNM',
botname: 'CNM BOT',
},
pages: {
home: 'Home',

View File

@@ -1,8 +1,8 @@
const msg_website_si = {
ws: {
sitename: 'InsiemeSuPuò',
siteshortname: 'InsiemeSuPuò',
botname: 'InsiemeSuPuò BOT',
sitename: 'AYNI',
siteshortname: 'Ayni',
botname: 'AYNI BOT',
},
pages: {
home: 'Domača stran',

View File

@@ -20,6 +20,7 @@ const functionality: IFunctionality = {
BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true,
SHOW_NAMESURNAME: false,
}
// const SHOW_PROJINTHEMENU = false
@@ -373,12 +374,12 @@ const baseroutes: IListRoutes[] = [
path: '/',
materialIcon: 'home',
name: 'pages.home',
component: () => import('@src/root/home_insiemesipuo/home_insiemesipuo.vue'),
component: () => import('@src/root/home_freeplanet/home_freeplanet.vue'),
reqauth: false,
inmenu: true,
infooter: true,
},
/*{
{
active: true,
order: 100,
path: '/presentazione',
@@ -388,7 +389,7 @@ const baseroutes: IListRoutes[] = [
reqauth: false,
inmenu: true,
infooter: true,
},*/
},
{
active: true,
order: 120,
@@ -446,7 +447,7 @@ const baseroutes: IListRoutes[] = [
},
{
active: true,
order: 136,
order: 135,
path: '/grp/:groupname',
materialIcon: 'fas fa-user',
name: 'proj.group2',

View File

@@ -65,7 +65,7 @@ export default function () {
function getMyImg() {
const userStore = useUserStore()
const ris = userStore.getImgByUsername(userStore.my.username)
const out = (ris !== '') ? `${ris}` : ''
const out = (ris !== '') ? `${ris}` : 'images/noimg-user.svg'
// console.log('getMyImg = ', out)
return out
}

View File

@@ -444,6 +444,8 @@ export interface IFunctionality {
ENABLE_REG_AYNI?: boolean
ENABLE_REG_CNM?: boolean
ENABLE_REG_ISP?: boolean
SHOW_NAMESURNAME?: boolean
ENABLE_GROUPS?: boolean
}
export interface IParLookup {

View File

@@ -14,6 +14,7 @@ export interface IFriends {
}
export interface IMyGroup {
_id: string
groupname: string
title?: string
descr?: string
@@ -75,6 +76,7 @@ export interface IUserProfile {
// in memory
asked_friends: any[]
asked_groups: any[]
list_usersgroup?: IFriends[]
}
export interface IPaymentType {

View File

@@ -630,6 +630,7 @@ const msg_es = {
mypages: {
find_people: 'Busca Personas',
friends: 'Amigos',
groups: 'Grupos',
request_friends: 'Rich. Amicizia',
request_sent_friends: 'Rich. Inviate',
request_trust: 'Rich. Fiducia',

View File

@@ -408,6 +408,7 @@ const msg_it = {
iscrizioneincorso: 'Iscrizione in corso...',
richiesto: 'Campo Richiesto',
email: 'Email',
email_reg: 'la tua Email',
website: 'Sito Web',
intcode_cell: 'Prefisso Int.',
cell: 'Cellulare',
@@ -448,12 +449,15 @@ const msg_it = {
deleted: 'Nascosto',
sospeso: 'Sospeso',
username: 'Username',
username_reg: 'Scegli il tuo Username',
username_hint: 'i caratteri speciali consentiti sono il tratteggio (_) e il meno (-)',
username_pseudonimo: 'Username (Pseudonimo)',
username_short: 'Username',
name: 'Nome',
surname: 'Cognome',
username_login: 'Username o email',
password: 'Password',
password_reg: 'Scegli una nuova Password',
repeatPassword: 'Ripeti password',
terms: 'Accetto i termini della privacy',
metodopagamento: 'Metodo di Pagamento',
@@ -890,6 +894,9 @@ const msg_it = {
reject_ask_friend: 'Rifiuta la richiesta di Amicizia',
},
groups: {
member: 'membro',
members: 'membri',
admin: 'amministratore',
admins: 'Amministratori',
ask_group: 'Chiedi di entrare nel Gruppo',
accept_group: 'Accetta la richiesta',

View File

@@ -39,6 +39,8 @@ export const costanti = {
CREATE_GROUP: 30,
MANAGE_GROUPS: 31,
SHOW_ALL: 50,
REQ_ADD_USER_TO_GROUP: 40,
REQ_REMOVE_USER_TO_GROUP: 41,

View File

@@ -1539,6 +1539,10 @@ export const tools = {
return Object(anything) === anything
},
isFunc(anything: any) {
return (typeof anything === 'function')
},
isDebug() {
return process.env.DEV
},
@@ -4424,6 +4428,62 @@ export const tools = {
})
},
removeFromMyFriends($q: any, username: string, usernameDest: string) {
const userStore = useUserStore()
$q.dialog({
message: t('db.domanda_removefriend', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username, usernameDest, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, null).then((res) => {
if (res) {
userStore.my.profile.friends = userStore.my.profile.friends.filter((rec: IFriends) => rec.username !== usernameDest)
tools.showPositiveNotif($q, t('db.removedfriend'))
}
})
})
},
blockUser($q: any, username: string, usernameDest: string) {
const userStore = useUserStore()
$q.dialog({
message: t('db.domanda_blockuser', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username, usernameDest, shared_consts.FRIENDSCMD.BLOCK_USER, null).then((res: any) => {
if (res) {
userStore.my.profile.friends = userStore.my.profile.friends.filter((rec: IFriends) => rec.username !== usernameDest)
tools.showPositiveNotif($q, t('db.blockedfriend'))
}
})
})
},
refuseReqFriends($q: any, username: string, usernameDest: string) {
const userStore = useUserStore()
$q.dialog({
message: t('db.domanda_revoke_friend', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username, usernameDest, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, null).then((res) => {
if (res) {
userStore.my.profile.req_friends = userStore.my.profile.req_friends.filter((user: IFriends) => user.username !== usernameDest)
tools.showPositiveNotif($q, t('db.removedfriend'))
}
})
})
},
addToMyGroups($q: any, username: string, groupnameDest: string) {
const userStore = useUserStore()
@@ -4447,6 +4507,24 @@ export const tools = {
})
},
blockGroup($q: any, username: string, usernameDest: string) {
const userStore = useUserStore()
$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, usernameDest, shared_consts.GROUPSCMD.BLOCK_GROUP, null).then((res) => {
if (res) {
userStore.my.profile.mygroups = userStore.my.profile.mygroups.filter((rec: IMyGroup) => rec.groupname !== usernameDest)
tools.showPositiveNotif($q, t('db.blockedgroup'))
}
})
})
},
removeFromMyGroups($q: any, username: string, groupnameDest: string) {
const userStore = useUserStore()
@@ -4743,6 +4821,44 @@ export const tools = {
},
setCmd($q: any, cmd: number, username: string, value: any, dest: string) {
if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP) {
tools.removeFromMyGroups($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_GROUP) {
tools.blockGroup($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.SETGROUP) {
tools.addToMyGroups($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.REQGROUP) {
tools.setRequestGroup($q, username, dest, value)
} else if (cmd === shared_consts.GROUPSCMD.CANCEL_REQ_GROUP) {
tools.cancelReqGroups($q, username, dest)
} else if (cmd === shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS) {
tools.removeFromMyFriends($q, username, value)
} else if (cmd === shared_consts.FRIENDSCMD.BLOCK_USER) {
tools.blockUser($q, username, dest)
} else if (cmd === shared_consts.FRIENDSCMD.SETFRIEND) {
tools.addToMyFriends($q, username, dest)
} else if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) {
tools.setRequestFriendship($q, username, dest, value)
} else if (cmd === shared_consts.FRIENDSCMD.REFUSE_REQ_FRIEND) {
tools.refuseReqFriends($q, username, dest)
} else if (cmd === shared_consts.FRIENDSCMD.CANCEL_REQ_FRIEND) {
tools.cancelReqFriends($q, username, dest)
}
},
isCallable(anything: any) {
return typeof anything === 'function'
},
getValueByFunzOrVal(value: any, keyfunz: any) {
if (typeof keyfunz === 'function') {
return keyfunz(value)
} else {
return value[keyfunz]
}
}
// getLocale() {
// if (navigator.languages && navigator.languages.length > 0) {
// return navigator.languages[0]

View File

@@ -1,6 +1,6 @@
<template>
<q-page padding class="signup">
<CSignUp :showcell="false" :showaportador="true">
<CSignUp :showcell="false" :showaportador="true" :show_namesurname="false">
</CSignUp>
</q-page>

View File

@@ -11,6 +11,7 @@ import { useI18n } from '@/boot/i18n'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
import { static_data } from '@/db/static_data'
export default defineComponent({
@@ -87,6 +88,7 @@ export default defineComponent({
getpayment,
tools,
costanti,
static_data,
filtroutente,
}
}

View File

@@ -7,18 +7,20 @@
<div class="column">
<div class="myrow">
<CMyFieldDb
:title="$t('reg.name')"
table="users"
mykey="name"
:type="costanti.FieldType.string">
</CMyFieldDb>
<CMyFieldDb
:title="$t('reg.surname')"
table="users"
mykey="surname"
:type="costanti.FieldType.string">
</CMyFieldDb>
<div v-if="static_data.functionality.SHOW_NAMESURNAME">
<CMyFieldDb
:title="$t('reg.name')"
table="users"
mykey="name"
:type="costanti.FieldType.string">
</CMyFieldDb>
<CMyFieldDb
:title="$t('reg.surname')"
table="users"
mykey="surname"
:type="costanti.FieldType.string">
</CMyFieldDb>
</div>
</div>
<div class="myrow">
<CMyFieldDb

View File

@@ -16,3 +16,9 @@
border-radius: 1rem;
padding: 5px;
}
.members, .admins{
font-weight: bold;
text-align: center;
vertical-align: center;
}

View File

@@ -1,5 +1,6 @@
import { CGridTableRec } from '@/components/CGridTableRec'
import { CMyFriends } from '@/components/CMyFriends'
import { CMyUser } from '@/components/CMyUser'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CProfile } from '@/components/CProfile'
import { CMyFieldRec } from '@/components/CMyFieldRec'
@@ -21,7 +22,7 @@ import { colmyUserPeople, colmyUserGroup } from '@store/Modules/fieldsTable'
export default defineComponent({
name: 'mygroup',
components: { CProfile, CTitleBanner, CMyFieldRec, CSkill, CDateTime, CMyFriends, CGridTableRec },
components: { CProfile, CTitleBanner, CMyFieldRec, CSkill, CDateTime, CMyFriends, CGridTableRec, CMyUser },
props: {},
setup() {
const userStore = useUserStore()
@@ -39,6 +40,7 @@ export default defineComponent({
const mygrp = ref(<IMyGroup|null>{})
const users_in_group = ref(<IFriends[]>[])
const tabgrp = ref('info')
const tab = ref('membri')
const arrfilterand: any = ref([])
@@ -54,10 +56,10 @@ export default defineComponent({
return userStore.my.username
}
function loadGroup() {
async function loadGroup() {
// Carica il profilo di quest'utente
if (groupname.value) {
userStore.loadGroup(groupname.value).then((ris) => {
await userStore.loadGroup(groupname.value).then((ris) => {
if (ris) {
mygrp.value = ris.mygroup
users_in_group.value = ris.users_in_group
@@ -75,13 +77,14 @@ export default defineComponent({
loadGroup()
})
function mounted() {
loadGroup()
async function mounted() {
await loadGroup()
searchList.value = []
filtercustom.value = [{ 'profile.mygroups': { $elemMatch: {groupname: {$eq: groupname.value }} } } ]
filtercustom_rich.value = [{ req_users: { $elemMatch: {username: {$eq: userStore.my.username }} } } ]
arrfilterand.value = []
filtercustom_rich.value = []
//++TODO: sistemare la filtercustom ... richieste...
}
@@ -124,11 +127,11 @@ export default defineComponent({
}
function extraparams() {
let lk_tab = 'users'
let lk_LF = 'userId'
let lk_FF = '_id'
let lk_as = 'user'
let af_objId_tab = 'myId'
let lk_tab = ''
let lk_LF = ''
let lk_FF = ''
let lk_as = ''
let af_objId_tab = ''
return {
lookup1: {
@@ -138,15 +141,31 @@ export default defineComponent({
lk_as,
af_objId_tab,
lk_proj: {
username: 1,
name: 1,
'username': 1,
'profile.img': 1,
'profile.qualifica': 1,
}
}
},
}
}
function extraparams_rich() {
return {
querytype: shared_consts.QUERYTYPE_MYGROUP,
myid: mygrp.value ? mygrp.value._id : '',
}
}
function numUsers() {
return users_in_group.value ? users_in_group.value.length : 0
}
function numAdmins() {
return (mygrp.value && mygrp.value.admins) ? mygrp.value.admins.length : 0
}
function listaAdmins() {
return (mygrp.value && mygrp.value.admins) ? mygrp.value.admins.map((rec) => rec.username).join(', ') : ''
}
onMounted(mounted)
@@ -174,7 +193,12 @@ export default defineComponent({
colmyUserPeople,
colmyUserGroup,
extraparams,
extraparams_rich,
tab,
tabgrp,
numUsers,
numAdmins,
listaAdmins,
users_in_group,
}
}

View File

@@ -15,19 +15,6 @@
<div class="col-12 text-h7 text-blue text-shadow-2">
{{ mygrp.groupname }}
</div>
<div>
<CMyFieldRec
title="Visibilità"
table="mygroups"
:columns="colmyUserGroup"
:rec="mygrp"
field="visibility"
:canModify="false">
</CMyFieldRec>
</div>
<div class="col-12 text-h7">
<span v-if="checkifShow('descr')">{{ mygrp.descr }}</span>
</div>
<div>
<q-btn
@@ -45,13 +32,157 @@
/>
</div>
<div v-if="mygrp.title">
<br>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<div v-if="mygrp.note" v-html="mygrp.note">
<q-tabs v-model="tabgrp" class="text-blue">
<q-tab label="Info" name="info" icon="fas fa-info"></q-tab>
<q-tab v-if="!!mygrp.note && userStore.IsMyGroupByGroupname(mygrp.groupname)" label="Pagina" name="page" icon="fas fa-file-word"></q-tab>
<q-tab v-if="userStore.IsMyGroupByGroupname(mygrp.groupname)" label="Iscritti" name="membri" icon="fas fa-users"></q-tab>
<q-tab v-if="tools.iAmAdminGroup(groupname)" label="Richieste" name="rich" icon="fas fa-user-plus"></q-tab>
</q-tabs>
<q-tab-panels v-model="tabgrp" animated>
<q-tab-panel name="info">
<div>
<q-card>
<CMyFieldRec
title="Visibilità"
table="mygroups"
:id="mygrp._id"
:columns="colmyUserGroup"
:rec="mygrp"
field="visibility"
:canEdit="true"
:canModify="true">
</CMyFieldRec>
</q-card>
<q-card>
<div class="members">
<q-icon name="fas fa-users"></q-icon>
{{ numUsers() }} {{ numUsers() === 1 ? t('groups.member') : t('groups.members') }}
</div>
<div class="admins">
<q-icon name="fas fa-user-cog"></q-icon>
{{ numAdmins() }} {{ numAdmins() === 1 ? t('groups.admin') : t('groups.admins') }}
</div>
<div v-for="(user, index) of mygrp.admins" :key="index">
<CMyUser
:mycontact="user"
:visu="costanti.FIND_PEOPLE"
@setCmd="setCmd"
>
</CMyUser>
</div>
</q-card>
</div>
</div>
</div>
<q-card>
<br>
<div class="col-12 text-h7">
<span v-if="checkifShow('descr')">{{ mygrp.descr }}</span>
</div>
</q-card>
<div v-if="mygrp.title" class="myrow justify-evenly items-center q-pa-sm q-ma-sm">
<q-card>
<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>
</q-card>
</div>
</q-tab-panel>
<q-tab-panel name="page">
<div v-if="mygrp.title">
<br>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<div v-if="mygrp.note" v-html="mygrp.note">
</div>
</div>
</div>
</q-tab-panel>
<q-tab-panel name="membri">
<CGridTableRec
ref="tabMembri"
prop_mytable="users"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessun Iscritto"
:prop_search="true"
hint="Username da trovare"
:finder="false"
:choose_visutype="true"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ONLY_FULL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extrafield="groupname"
:extraparams="extraparams()"
:visufind="tools.iAmAdminGroup(groupname) ? costanti.REQ_REMOVE_USER_TO_GROUP : costanti.FIND_PEOPLE"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="rich">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessuna Richiesta in sospeso"
:prop_search="false"
hint="Username da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ONLY_FULL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extraparams="extraparams_rich()"
:extrafield="groupname"
:visufind="costanti.REQ_ADD_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
</q-tab-panels>
<q-btn
v-if="mygrp.admins.includes(userStore.my.username)" icon="fas fa-pencil-alt"
@@ -61,103 +192,6 @@
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 v-if="tools.iAmAdminGroup(groupname)">
<q-tabs v-model="tab" class="text-blue">
<q-tab label="Membri" name="membri" icon="fas fa-users"></q-tab>
<q-tab label="Richieste" name="rich" icon="fas fa-user-plus"></q-tab>
</q-tabs>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="membri">
<CGridTableRec
ref="tabMembri"
prop_mytable="users"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessun Membro"
:prop_search="true"
hint="Username da trovare"
:finder="false"
:choose_visutype="true"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ONLY_FULL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extrafield="groupname"
:extraparams="extraparams()"
:visufind="costanti.REQ_REMOVE_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="rich">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel=" "
:prop_search="false"
hint="Username da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ONLY_FULL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extraparams="extraparams()"
:extrafield="groupname"
:visufind="costanti.REQ_ADD_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
</q-tab-panels>
</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"/>

View File

@@ -11,7 +11,7 @@
prop_colkey="_id"
col_title="groupname"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessuna Richiesta in sospeso"
nodataLabel=" Nessun Gruppo"
:prop_search="true"
hint="nome del gruppo da trovare"
:finder="true"

View File

@@ -14,6 +14,7 @@ import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
import { IUserFields } from 'model'
import { shared_consts } from '@/common/shared_vuejs'
import { static_data } from '@/db/static_data'
export default defineComponent({
@@ -106,6 +107,7 @@ export default defineComponent({
myusername,
userStore,
t,
static_data,
animation,
}
}

View File

@@ -8,10 +8,12 @@
</q-avatar>
</div>
<div class="text-h6">
<span v-if="checkifShow('name')"> {{ myuser.name }}</span> <span v-if="checkifShow('surname')">{{
myuser.surname
}}</span>
<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 }}
@@ -38,7 +40,7 @@
/>
</div>
<div v-if="myuser.name">
<div v-if="myuser._id">
<div class="col-12 text-h8 q-mt-sm" v-if="myuser.profile.qualifica">
<em><span class="qualifica">{{ myuser.profile.qualifica }}</span></em>
</div>
@@ -55,7 +57,7 @@
to="/editprofile">
</q-btn>
<div v-if="myuser.name" class="myrow justify-evenly items-center q-pa-sm q-ma-sm">
<div v-if="myuser._id" class="myrow justify-evenly items-center q-pa-sm q-ma-sm">
<div class="col-6 q-ma-xs">
<q-btn
@@ -117,7 +119,7 @@
</CTitleBanner>
<div v-if="myuser.name">
<div v-if="myuser._id">
<CTitleBanner
class="" :title="$t('dashboard.info')" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true">