update quasar

This commit is contained in:
Surya Paolo
2023-09-28 17:12:59 +02:00
parent 2b359d5260
commit bfceb64811
24 changed files with 4109 additions and 4594 deletions

View File

@@ -150,7 +150,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
order: 130, order: 130,
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.friends', name: 'mypages.iscritti',
component: () => import('@/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,

143
package copy_nuovo.json Executable file
View File

@@ -0,0 +1,143 @@
{
"name": "riso",
"version": "0.6.1",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso",
"author": "Paolo Arena",
"private": true,
"keywords": [],
"license": "MIT",
"scripts": {
"dev": "quasar dev",
"build": "quasar build",
"buildpwa": "quasar build -m pwa",
"buildspa": "quasar build -m spa",
"lint": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./",
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint --ext .ts,.vue --ignore-path .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa",
"spa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m spa",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js"
},
"dependencies": {
"@quasar/extras": "^1.16.7",
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16",
"@vue-leaflet/vue-leaflet": "^0.10.1",
"@vue/compat": "^3.3.4",
"@vue/compiler-sfc": "^3.3.4",
"@vue/eslint-config-standard": "7.0.0",
"@vuelidate/core": "^2.0.3",
"@vuelidate/validators": "^2.0.4",
"acorn": "^8.10.0",
"animate.css": "^4.1.1",
"autoprefixer": "^10.4.16",
"axios": "^1.5.1",
"bcryptjs": "^2.4.3",
"chart.js": "3.9.1",
"core-js": "^3.32.2",
"crypto": "^1.0.1",
"date-fns": "^2.30.0",
"dotenv": "^16.3.1",
"echarts": "5.4.3",
"eslint-plugin-quasar": "^1.1.0",
"eslint-plugin-standard": "^5.0.0",
"graphql": "^16.8.1",
"graphql-tag": "^2.12.6",
"gsap": "^3.12.2",
"jquery": "^3.7.1",
"js-cookie": "^3.0.5",
"localforage": "^1.10.0",
"lodash": "^4.17.21",
"normalize.css": "^8.0.1",
"npm": "^10.1.0",
"nprogress": "^0.2.0",
"pinia": "^2.1.6",
"prerender-spa-plugin": "^3.4.0",
"quasar": "^2.12.7",
"quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2",
"vee-validate": "^4.11.7",
"vue": "^3.3.4",
"vue-chart-3": "^3.1.8",
"vue-class-component": "^8.0.0-rc.1",
"vue-country-code": "^1.1.3",
"vue-echarts": "^6.6.1",
"vue-i18n": "^9.4.1",
"vue-idb": "^0.2.0",
"vue-loader": "^17.2.2",
"vue-property-decorator": "^10.0.0-rc.3",
"vue-router": "^4.2.5",
"vue-scroll-reveal": "^2.1.0",
"vue-social-sharing": "^4.0.0-alpha4",
"vue-svgicon": "^4.0.0-alpha.3",
"vue-timeago3": "^2.3.1",
"vue2-dragula": "^2.5.5",
"vuex": "^4.1.0",
"vuex-router-sync": "^6.0.0-rc.1"
},
"devDependencies": {
"@quasar/app": "^3.3.3",
"@types/bcryptjs": "^2.4.4",
"@types/dotenv": "^8.2.0",
"@types/google.maps": "^1.0.0",
"@types/jest": "^29.5.5",
"@types/js-cookie": "^3.0.4",
"@types/node": "20.7.1",
"@types/nprogress": "^0.2.1",
"@types/vue-tel-input": "^2.1.3",
"@types/vuelidate": "^0.7.19",
"@typescript-eslint/eslint-plugin": "^6.7.3",
"@typescript-eslint/parser": "^6.7.3",
"eslint": "^8.50.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.17.0",
"file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.3",
"http-proxy-middleware": "^2.0.6",
"jest": "^29.7.0",
"json-loader": "^0.5.7",
"node-sass": "7.0.0",
"npm-check-updates": "^16.14.4",
"optimize-css-assets-webpack-plugin": "^6.0.1",
"postcss": "^8.4.30",
"postcss-loader": "^7.3.3",
"sass-loader": "^13.3.2",
"strip-ansi": "=7.1.0",
"ts-jest": "^29.1.1",
"ts-loader": "^9.4.4",
"tslint": "^6.1.3",
"tslint-config-standard": "^9.0.0",
"tslint-loader": "^3.5.4",
"typescript": "^5.2.2",
"vue-cli-plugin-element-ui": "^1.1.4",
"vueify": "^9.4.1",
"webpack": "^5.78.0",
"workbox-webpack-plugin": "^6.5.4"
},
"browser": {
"crypto": false
},
"browserslist": [
"last 80 Chrome versions",
"last 40 Firefox versions",
"last 20 Edge versions",
"last 55 Safari versions",
"last 90 Android versions",
"last 250 ChromeAndroid versions",
"last 60 FirefoxAndroid versions",
"last 30 iOS versions",
"last 10 Opera versions",
"> 0.03%",
"not dead"
],
"engines": {
"node": ">= 18.18.0",
"npm": ">= 6.14.8",
"yarn": ">= 1.21.1"
}
}

View File

@@ -22,7 +22,7 @@
"generate-sw": "workbox generateSW workbox-config.js" "generate-sw": "workbox generateSW workbox-config.js"
}, },
"dependencies": { "dependencies": {
"@quasar/extras": "^1.16.2", "@quasar/extras": "^1.16.7",
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16", "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16",
"@vue-leaflet/vue-leaflet": "^0.9.0", "@vue-leaflet/vue-leaflet": "^0.9.0",
"@vue/compat": "^3.2.47", "@vue/compat": "^3.2.47",
@@ -42,7 +42,6 @@
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"echarts": "5.4.2", "echarts": "5.4.2",
"eslint-plugin-quasar": "^1.1.0", "eslint-plugin-quasar": "^1.1.0",
"eslint-plugin-standard": "^5.0.0",
"graphql": "^16.6.0", "graphql": "^16.6.0",
"graphql-tag": "^2.12.6", "graphql-tag": "^2.12.6",
"gsap": "^3.11.5", "gsap": "^3.11.5",
@@ -55,9 +54,10 @@
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.0.33", "pinia": "^2.0.33",
"prerender-spa-plugin": "^3.4.0", "prerender-spa-plugin": "^3.4.0",
"quasar": "^2.11.10", "quasar": "^2.12.07",
"quasar-extras": "^2.0.9", "quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"typescript-eslint": "^0.0.1-alpha.0",
"vee-validate": "^4.8.4", "vee-validate": "^4.8.4",
"vue": "^3.2.47", "vue": "^3.2.47",
"vue-chart-3": "^3.1.8", "vue-chart-3": "^3.1.8",
@@ -88,8 +88,8 @@
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@types/vue-tel-input": "^2.1.2", "@types/vue-tel-input": "^2.1.2",
"@types/vuelidate": "^0.7.16", "@types/vuelidate": "^0.7.16",
"@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/eslint-plugin": "^6.7.3",
"@typescript-eslint/parser": "^5.57.1", "@typescript-eslint/parser": "^6.7.2",
"eslint": "^8.37.0", "eslint": "^8.37.0",
"eslint-config-prettier": "^8.8.0", "eslint-config-prettier": "^8.8.0",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.27.5",
@@ -101,7 +101,7 @@
"http-proxy-middleware": "^2.0.6", "http-proxy-middleware": "^2.0.6",
"jest": "^29.5.0", "jest": "^29.5.0",
"json-loader": "^0.5.7", "json-loader": "^0.5.7",
"node-sass": "7.0.0", "node-sass": "^9.0.0",
"npm-check-updates": "^16.10.7", "npm-check-updates": "^16.10.7",
"optimize-css-assets-webpack-plugin": "^6.0.1", "optimize-css-assets-webpack-plugin": "^6.0.1",
"postcss": "^8.4.21", "postcss": "^8.4.21",
@@ -113,7 +113,7 @@
"tslint": "^6.1.3", "tslint": "^6.1.3",
"tslint-config-standard": "^9.0.0", "tslint-config-standard": "^9.0.0",
"tslint-loader": "^3.5.4", "tslint-loader": "^3.5.4",
"typescript": "^5.0.3", "typescript": "^5.2.2",
"vue-cli-plugin-element-ui": "^1.1.4", "vue-cli-plugin-element-ui": "^1.1.4",
"vueify": "^9.4.1", "vueify": "^9.4.1",
"webpack": "^5.78.0", "webpack": "^5.78.0",

View File

@@ -17,7 +17,8 @@ export default defineComponent({
props: { props: {
discipline: { discipline: {
Type: Object as PropType<IDiscipline>, Type: Object as PropType<IDiscipline>,
required: true, required: false,
default: {}
}, },
directory: { directory: {
type: String, type: String,
@@ -54,7 +55,7 @@ export default defineComponent({
return calendarStore.eventlist.find((myevent: IEvents) => (myevent.typol === typol) && (new Date(myevent.dateTimeEnd!) >= datenow)) return calendarStore.eventlist.find((myevent: IEvents) => (myevent.typol === typol) && (new Date(myevent.dateTimeEnd!) >= datenow))
} }
function disciplinechanged(myrec: IDiscipline | any) { function disciplinechanged(myrec: IDiscipline) {
nextlesson.value = getNextLesson(myrec.typol_code) nextlesson.value = getNextLesson(myrec.typol_code)
// console.log('nextlesson', this.nextlesson) // console.log('nextlesson', this.nextlesson)
} }
@@ -73,7 +74,8 @@ export default defineComponent({
} }
function created() { function created() {
disciplinechanged(props.discipline) if (tools.isObject(props.discipline))
disciplinechanged(props.discipline)
} }
created() created()

View File

@@ -1075,6 +1075,8 @@ export default defineComponent({
const myfilternow = myfilter.value const myfilternow = myfilter.value
const myfilterandnow = myfilterand.value const myfilterandnow = myfilterand.value
console.log('onUpdateData')
if (ordinam.value) { if (ordinam.value) {
sortBy = ordinam.value sortBy = ordinam.value
descending = ordinam_desc.value descending = ordinam_desc.value
@@ -1085,6 +1087,7 @@ export default defineComponent({
savefilter() savefilter()
if (!mytable.value) { if (!mytable.value) {
console.log(' startsearch.value', startsearch.value)
startsearch.value = false startsearch.value = false
if (myinfscroll.value) { if (myinfscroll.value) {
// @ts-ignore // @ts-ignore
@@ -1102,6 +1105,9 @@ export default defineComponent({
const endRow = startRow + fetchCount const endRow = startRow + fetchCount
// console.log('startRow', startRow, 'endRow', endRow, 'rowsNumber', pagination.value.rowsNumber) // console.log('startRow', startRow, 'endRow', endRow, 'rowsNumber', pagination.value.rowsNumber)
startsearch.value = true
console.log(' TRUE: startsearch.value', startsearch.value)
if ((startRow < pagination.value.rowsNumber) || clickbuttsearch.value) { if ((startRow < pagination.value.rowsNumber) || clickbuttsearch.value) {
@@ -1143,6 +1149,8 @@ export default defineComponent({
changetable.value = false changetable.value = false
startsearch.value = false startsearch.value = false
console.log(' FINE- startsearch.value', startsearch.value)
if (myinfscroll.value) { if (myinfscroll.value) {
// @ts-ignore // @ts-ignore
myinfscroll.value.resume() myinfscroll.value.resume()
@@ -2360,6 +2368,7 @@ export default defineComponent({
showInnerDialog, showInnerDialog,
lengthopt, lengthopt,
update_col, update_col,
startsearch,
} }
} }
}) })

View File

@@ -55,7 +55,7 @@
color="primary" color="primary"
class="centermydiv q-mb-sm" class="centermydiv q-mb-sm"
:label="labelBtnAddExtra" :label="labelBtnAddExtra"
:disable="loading" :disable="startsearch"
icon="fas fa-plus" icon="fas fa-plus"
@click="createNewRecord" @click="createNewRecord"
> >
@@ -361,6 +361,9 @@
:offset="350" :offset="350"
debounce="300" debounce="300"
> >
<div v-if="numRecLoaded === 0 && !startsearch">
<div class="text-grey text-italic">{{ nodataLabel }}</div>
</div>
<div v-if="showHeaderCol"> <div v-if="showHeaderCol">
<div <div
v-for="col in mycolumns" v-for="col in mycolumns"
@@ -568,9 +571,9 @@
</div> </div>
</div> </div>
<template v-slot:loading> <template v-slot:loading>
<div v-if="!hidetitleIfEmpty" class="text-center"> <div class="row justify-center q-my-md">
<q-spinner-dots color="primary" size="40px" /> <q-spinner-dots color="primary" size="40px" />
</div> </div>
</template> </template>
</q-infinite-scroll> </q-infinite-scroll>
<q-table <q-table
@@ -590,7 +593,7 @@
@request="onRequest" @request="onRequest"
virtual-scroll virtual-scroll
:row-key="colkey" :row-key="colkey"
:loading="loading" :loading="startsearch"
@selection="selectionclick" @selection="selectionclick"
binary-state-sort binary-state-sort
:visible-columns="colVisib" :visible-columns="colVisib"

View File

@@ -1172,7 +1172,7 @@ export default defineComponent({
} }
function refresh_infscroll(done: any) { function refresh_infscroll(done: any) {
// console.log('refresh_infscroll', 'pag', pagination.value.rowsNumber) console.log('refresh_infscroll', 'pag', pagination.value.rowsNumber)
rowclicksel.value = null rowclicksel.value = null
onUpdateData(0, onUpdateData(0,
@@ -2157,7 +2157,7 @@ export default defineComponent({
function onLoadScroll(index: number, done: any) { function onLoadScroll(index: number, done: any) {
if (index > 1) { if (index > 1) {
// console.log('onLoadScroll', index, 'RECLOAD', numRecLoaded.value, 'ROWS: ', pagination.value.rowsNumber, 'PAGE: ', pagination.value.page) console.log('onLoadScroll', index, 'RECLOAD', numRecLoaded.value, 'ROWS: ', pagination.value.rowsNumber, 'PAGE: ', pagination.value.page)
if (numRecLoaded.value < pagination.value.rowsNumber || (pagination.value.rowsNumber <= 0 && clickbuttsearch.value)) { if (numRecLoaded.value < pagination.value.rowsNumber || (pagination.value.rowsNumber <= 0 && clickbuttsearch.value)) {
if (pagination.value.rowsNumber === 0) { if (pagination.value.rowsNumber === 0) {
pagination.value.page = 0 pagination.value.page = 0

View File

@@ -1,361 +1,8 @@
<template> <template>
<div v-if="tools.isDebugOn()"></div> <div v-if="tools.isDebugOn()"></div>
<div :class="$q.screen.lt.sm ? `` : `q-pa-xs`" v-if="isfinishLoading"> <div :class="$q.screen.lt.sm ? `` : `q-pa-xs`" v-if="isfinishLoading">
<q-toggle
v-if="tools.isManager()"
v-model="editOn"
color="green"
icon="fas fa-pencil-alt"
>
</q-toggle>
<div
v-if="mytable && visButtRow()"
class="centermydiv q-my-sm"
style="text-align: center"
>
<q-btn
v-if="mytable && visButtRow()"
rounded
dense
color="primary"
size="lg"
:label="getlabelAddRow()"
@click="createNewRecordDialog"
></q-btn>
</div>
<div
v-if="butt_modif_new || mytitle"
:class="$q.screen.lt.sm ? `` : `q-gutter-md q-ma-xs` + ` row`"
>
<div class="q-table__title" style="min-width: 150px">
{{ mytitle }}
</div>
<q-space></q-space>
<div v-if="butt_modif_new">
<q-btn
v-if="mytable && !shared_consts.TABLES_FINDER.includes(mytable)"
rounded
dense
size="sm"
flat
:color="canEdit ? 'positive' : 'light-gray'"
:disable="disabilita()"
:val="lists.MenuAction.CAN_EDIT_TABLE"
icon="fas fa-pencil-alt"
@update:model-value="changefuncAct"
@click="canEdit = !canEdit"
>
</q-btn>
<q-btn
v-if="mytable && labelBtnAddExtra"
rounded
outline
size="md"
color="primary"
class="centermydiv q-mb-sm"
:label="labelBtnAddExtra"
:disable="loading"
icon="fas fa-plus"
@click="createNewRecord"
>
</q-btn>
</div>
</div>
<q-inner-loading :showing="spinner_visible">
<q-spinner-tail size="2em" color="primary" />
</q-inner-loading>
<div v-if="shared_consts.VERTIC_SHOW_GRID.includes(myvertical)">
<div v-if="(prop_search || canEdit) && finder" class="q-my-xs text-right">
<!--<q-btn
size="sm"
dense
icon="fas fa-filter"
:label="$t('grid.showfilters')"
@click="showfilter = !showfilter"
></q-btn>
-->
</div>
<q-slide-transition>
<div v-show="showfilter || prop_showfilter">
<div
v-show="searchList"
:class="$q.screen.lt.sm ? `` : `row` + ` text-blue `"
>
<span v-for="(item, index) in searchList" :key="index">
<CMySelect
:col="fieldsTable.getColByColumns(mycolumns, item.key)"
v-if="
(item.type === costanti.FieldType.select ||
item.type === costanti.FieldType.select_by_server) &&
lengthopt(item, false) > 1
"
:label="labelcombo(item)"
v-model:value="item.value"
@update:value="searchval(item.value, item.table)"
:addall="item.addall"
:addnone="item.addnone"
:tablesel="
item.type === costanti.FieldType.select_by_server
? item.tablesel
: ''
"
:pickup="item.type === costanti.FieldType.select_by_server"
label-color="primary"
class="combowidth"
color="primary"
:icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:options="valoriopt(item, false)"
:filter="item.filter"
:filter_extra="item.filter_extra"
:useinput="
item.useinput &&
item.type !== costanti.FieldType.select_by_server
"
>
</CMySelect>
<!--<div v-if="item.type === costanti.FieldType.multiselect_by_server">
item: {{ item}}
</div>-->
<CMySelect
v-if="
item.type === costanti.FieldType.multiselect_by_server &&
lengthopt(item, false) > 1
"
:col="fieldsTable.getColByColumns(mycolumns, item.key)"
:multiselect_by_server="true"
:label="labelcombo(item)"
v-model:arrvalue="item.arrvalue"
@update:arrvalue="searchval(item.arrvalue, item.table)"
:addall="item.addall"
:addnone="item.addnone"
:tablesel="item.tablesel"
:pickup="true"
:param1="item.param1"
label-color="primary"
class="combowidth"
color="primary"
:icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:filter="item.filter"
:filter_extra="item.filter_extra"
:options="valoriopt(item, false)"
:useinput="true"
>
</CMySelect>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="item.type === costanti.FieldType.multiselect"
v-model="item.arrvalue"
label-color="primary"
:label="labelcombo(item)"
@update:model-value="searchval(item.arrvalue, item.table)"
rounded
dense
outlined
multiple
options-dense
emit-value
map-options
stack-label
:useinput="item.useinput"
:options="valoriopt(item, item.addall, item.addnone)"
:filter="item.filter"
class="combowidth"
:option-value="fieldsTable.getKeyByTable(item.table)"
>
<template v-if="item.icon" v-slot:prepend>
<q-icon :name="item.icon" />
</template>
<template
v-if="item.arrvalue.length >= 1"
v-slot:selected-item="scope"
>
<div
v-if="
scope.opt[fieldsTable.getLabelByTable(item.table)] ||
(scope.opt && checkIfShowRec(scope.opt))
"
>
<q-chip
removable
dense
@remove="scope.removeAtIndex(scope.index)"
v-if="checkIfShowRec(scope.opt)"
color="white"
text-color="mycol"
class="q-my-none q-ml-xs q-mr-none"
>
<q-avatar
color="primary"
text-color="white"
:icon="item.icon"
size="12px"
/>
{{
scope.opt[fieldsTable.getLabelByTable(item.table)] ||
scope.opt
}}
</q-chip>
</div>
</template>
<template
v-slot:option="{ itemProps, opt, selected, toggleOption }"
>
<q-item v-bind="itemProps">
<q-item-section>
<q-item-label>{{
opt[fieldsTable.getLabelByTable(item.table)]
}}</q-item-label>
</q-item-section>
<q-item-section side>
<q-toggle
:model-value="selected"
@update:model-value="toggleOption(opt)"
/>
</q-item-section>
</q-item>
</template>
</q-select>
</span>
</div>
</div>
</q-slide-transition>
<div v-if="prop_search || canEdit">
<div
v-if="searchList && finder"
class="row justify-evenly q-mb-sm q-mx-sm"
>
<q-btn
dense
label="Filtra Ricerca"
color="positive"
icon="fas fa-filter"
@click="showfilter = !showfilter"
><q-badge
v-if="getNumFilterSelected()"
color="red"
floating
transparent
>
{{ getNumFilterSelected() }}
</q-badge>
</q-btn>
<q-btn
dense
icon="add"
color="primary"
@click="createNewRecordDialog"
/>
<q-btn
dense
color="orange"
icon="fas fa-bell"
label="Avvisami se..."
@click="showNotification = !showNotification"
></q-btn>
</div>
<div v-if="prop_search" class="q-mr-sm full-width">
<q-input
v-model="search"
filled
dense
type="search"
debounce="500"
:hint="hint"
label="Cerca"
v-on:keyup.enter="doSearch"
>
<template v-slot:prepend>
<q-icon name="search" />
</template>
<template v-slot:after>
<q-select
v-if="prop_SortFieldsAvailable.length > 0"
:behavior="'menu'"
rounded
outlined
dense
v-model="ordinam"
:options="prop_SortFieldsAvailable"
label="Ordinamento:"
emit-value
map-options
style="min-width: 120px"
>
</q-select>
<q-btn
dense
label=""
color="primary"
@click="doSearch"
icon="fas fa-search"
></q-btn>
</template>
</q-input>
</div>
<q-space></q-space>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="
mytable &&
pagination.rowsNumber > 0 &&
(prop_search || canEdit) &&
showCol &&
myvertical === 0
"
v-model="colVisib"
rounded
outlined
multiple
dense
options-dense
:display-value="$t('grid.columns')"
emit-value
map-options
:options="mycolumns"
option-value="name"
@update:model-value="changeCol"
>
</q-select>
</div>
<div v-if="pagination.rowsNumber === 1 && prop_search">
{{ pagination.rowsNumber }} elemento trovato
</div>
<div v-if="pagination.rowsNumber > 1 && prop_search">
{{ pagination.rowsNumber }} {{ labelElemFind }}
</div>
<div v-if="choose_visutype && $q.screen.gt.xs" class="">
<q-radio v-model="myvertical" :val="2" label="Lista" />
<!--<q-radio v-if="mytable === toolsext.TAB" v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_GROUP"
label="Scheda"
@update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>
<q-radio v-else-if="mytable !== toolsext.TABMYGROUPS && !finder" v-model="myvertical"
:val="costanti.VISUTABLE_SCHEDA_USER" slabel="Scheda"
@update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>-->
<q-radio
v-if="$q.screen.gt.xs"
v-model="myvertical"
:val="0"
label="Tabella"
/>
</div>
</div>
<q-infinite-scroll <q-infinite-scroll
ref="myinfscroll" ref="myinfscroll"
v-if="shared_consts.VERTIC_SHOW_GRID.includes(myvertical) && !loading"
:initial-index="0" :initial-index="0"
@load="onLoadScroll" @load="onLoadScroll"
:offset="350" :offset="350"
@@ -566,544 +213,6 @@
</div> </div>
</template> </template>
</q-infinite-scroll> </q-infinite-scroll>
<q-table
v-else
:grid="shared_consts.VERTIC_SHOW_GRID.includes(myvertical)"
:grid-header="
shared_consts.VERTIC_SHOW_GRID.includes(myvertical) &&
shared_consts.TABLES_WITH_SORTING.includes(mytable)
"
flat
bordered
class="my-sticky-header-table"
:rows="serverData"
:columns="mycolumns"
:filter="myfilter"
v-model:pagination="pagination"
@request="onRequest"
virtual-scroll
:row-key="colkey"
:loading="loading"
@selection="selectionclick"
binary-state-sort
:visible-columns="colVisib"
:no-data-label="nodataLabel"
:no-results-label="noresultLabel"
:selected-rows-label="getSelectedString"
selection="single"
v-model:selected="selected"
>
<template
v-if="
!(
myvertical === costanti.VISUTABLE_SCHEDA_USER ||
myvertical === 2 ||
myvertical === costanti.VISUTABLE_SCHEDA_GROUP
)
"
v-slot:header="props"
>
<q-tr :props="props">
<q-th> </q-th>
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
class="text-italic text-weight-bold"
>
<span
v-if="col && showColCheck(col, tools.TIPOVIS_SHOW_RECORD, true)"
>
{{ col.label }}
</span>
</q-th>
</q-tr>
</template>
<template v-else v-slot:header="props">
<q-tr :props="props">
<q-th> </q-th>
<span v-for="col in props.cols" :key="col.name">
<q-th
v-if="col.sortable"
:key="col.name"
:props="props"
class="text-italic text-weight-bold"
>
<span>
{{ col.label }}
</span>
</q-th>
</span>
</q-tr>
</template>
<template
v-slot:top-right
v-if="tablesList || arrfilters || enableExport"
>
<span style="display: none">{{ (actual = null) }}</span>
<q-btn
v-if="enableExport"
color="primary"
icon-right="archive"
:label="t('export.csv')"
no-caps
@click="exportTable"
/>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="tablesList"
v-model="tablesel"
rounded
outlined
dense
:options="tablesList"
:display-value="mytitle"
emit-value
@update:model-value="changeTable"
>
</q-select>
<div class="row">
<q-toggle
v-for="(filt, index) of arrfilters"
:key="index"
v-model="myfilterand"
:disable="filt.hide"
:val="filt.value"
:label="filt.label"
>
</q-toggle>
</div>
<!--<q-input borderless dense debounce="300" v-model="filter" placeholder="Search">
<template v-slot:append>
<q-icon name="search" />
</template>
</q-input>-->
</template>
<template v-slot:top-left>
<div
v-if="searchList"
:class="$q.screen.lt.sm ? `` : `row` + ` text-blue `"
>
<span v-for="(item, index) in searchList" :key="index">
<!--<div class="text-center q-my-xs" v-if="(item.type === costanti.FieldType.separator)">
<q-btn size="sm" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'" label="Filtri Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>-->
<CMySelect
:col="fieldsTable.getColByColumns(mycolumns, item.key)"
v-if="
item.type === costanti.FieldType.select ||
item.type === costanti.FieldType.select_by_server
"
:label="labelcombo(item)"
v-model:value="item.value"
@update:value="searchval(item.value, item.table)"
:addall="item.addall"
:addnone="item.addnone"
:tablesel="
item.type === costanti.FieldType.select_by_server
? item.tablesel
: ''
"
:pickup="item.type === costanti.FieldType.select_by_server"
label-color="primary"
class="combowidth"
color="primary"
:icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:options="valoriopt(item, false)"
:filter="item.filter"
:filter_extra="item.filter_extra"
:useinput="
item.useinput &&
item.type !== costanti.FieldType.select_by_server
"
>
</CMySelect>
<!--<div v-if="item.type === costanti.FieldType.multiselect_by_server">
item: {{ item}}
</div>-->
<CMySelect
v-if="item.type === costanti.FieldType.multiselect_by_server"
:col="fieldsTable.getColByColumns(mycolumns, item.key)"
:multiselect_by_server="true"
:label="labelcombo(item)"
v-model:arrvalue="item.arrvalue"
@update:arrvalue="searchval(item.arrvalue, item.table)"
:addall="item.addall"
:addnone="item.addnone"
:tablesel="item.tablesel"
:pickup="true"
:param1="item.param1"
label-color="primary"
class="combowidth"
color="primary"
:icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:filter="item.filter"
:filter_extra="item.filter_extra"
:options="valoriopt(item, false)"
:useinput="true"
>
</CMySelect>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="item.type === costanti.FieldType.multiselect"
v-model="item.arrvalue"
label-color="primary"
:label="labelcombo(item)"
@update:model-value="searchval(item.arrvalue, item.table)"
rounded
dense
outlined
multiple
options-dense
emit-value
map-options
stack-label
:useinput="item.useinput"
:options="valoriopt(item, item.addall, item.addnone)"
:filter="item.filter"
class="combowidth"
:option-value="fieldsTable.getKeyByTable(item.table)"
>
<template v-if="item.icon" v-slot:prepend>
<q-icon :name="item.icon" />
</template>
<template
v-if="item.arrvalue.length >= 1"
v-slot:selected-item="scope"
>
<div
v-if="
scope.opt[fieldsTable.getLabelByTable(item.table)] ||
(scope.opt && checkIfShowRec(scope.opt))
"
>
<q-chip
removable
dense
@remove="scope.removeAtIndex(scope.index)"
v-if="checkIfShowRec(scope.opt)"
color="white"
text-color="mycol"
class="q-my-none q-ml-xs q-mr-none"
>
<q-avatar
color="primary"
text-color="white"
:icon="item.icon"
size="12px"
/>
{{
scope.opt[fieldsTable.getLabelByTable(item.table)] ||
scope.opt
}}
</q-chip>
</div>
</template>
<template
v-slot:option="{ itemProps, opt, selected, toggleOption }"
>
<q-item v-bind="itemProps">
<q-item-section>
<q-item-label>{{
opt[fieldsTable.getLabelByTable(item.table)]
}}</q-item-label>
</q-item-section>
<q-item-section side>
<q-toggle
:model-value="selected"
@update:model-value="toggleOption(opt)"
/>
</q-item-section>
</q-item>
</template>
</q-select>
</span>
</div>
<div
v-if="prop_search || canEdit"
class="row justify-center vertical-middle"
>
<div v-if="prop_search" class="q-mr-sm full-width">
<q-input
v-model="search"
filled
dense
type="search"
debounce="500"
:hint="hint"
label="Cerca"
v-on:keyup.enter="doSearch"
>
<template v-slot:after>
<q-btn
v-if="mytable"
dense
label=""
color="primary"
@click="refresh"
icon="search"
></q-btn>
</template>
</q-input>
</div>
<q-space></q-space>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="
mytable &&
pagination.rowsNumber > 0 &&
(prop_search || canEdit) &&
showCol &&
myvertical === 0
"
v-model="colVisib"
rounded
outlined
multiple
dense
options-dense
:display-value="$t('grid.columns')"
emit-value
map-options
:options="mycolumns"
option-value="name"
@update:model-value="changeCol"
>
</q-select>
</div>
<div v-if="pagination.rowsNumber === 1 && prop_search">
{{ pagination.rowsNumber }} elemento trovato
</div>
<div v-if="pagination.rowsNumber > 1 && prop_search">
{{ pagination.rowsNumber }} elementi trovati
</div>
<div v-if="choose_visutype && $q.screen.gt.xs" class="">
<q-radio v-model="myvertical" :val="2" label="Lista" />
<!--<q-radio v-if="mytable === toolsext.TAB" v-model="myvertical" :val="costanti.VISUTABLE_SCHEDA_GROUP"
label="Scheda"
@update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>
<q-radio v-else-if="mytable !== toolsext.TABMYGROUPS && !finder" v-model="myvertical"
:val="costanti.VISUTABLE_SCHEDA_USER" slabel="Scheda"
@update:model-value="tools.setCookie('myv_' + prop_mytable, myvertical) "/>-->
<q-radio
v-if="$q.screen.gt.xs"
v-model="myvertical"
:val="0"
label="Tabella"
/>
</div>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="trclass">
<q-td auto-width class="tdclass">
<q-checkbox dense v-model="props.selected"></q-checkbox>
</q-td>
<q-td v-for="col in mycolumns" :key="col.name" :props="props">
<div
v-if="
showColCheck(col, tools.TIPOVIS_SHOW_RECORD, true, 1, props.row)
"
class="tdclass"
>
<div :class="getclrow(props.row)">
<CMyPopupEdit
:table="mytable"
:canEdit="canEdit"
:canModify="
tools.canModifyThisRec(props.row, tablesel) || editOn
"
:disable="disabilita()"
:mycol="col"
v-model:row="props.row"
:field="col.field"
:subfield="col.subfield"
minuteinterval="1"
@save="SaveValue"
@show="selItem(props.row, col)"
@showandsave="showandsel"
>
</CMyPopupEdit>
</div>
</div>
</q-td>
<q-td v-for="col in mycolumns" :key="col.name" :props="props">
<div v-if="colExtra.includes(col.name)" class="tdclass">
<div v-if="col.action && visCol(col)">
<q-btn
flat
round
color="red"
:icon="col.icon"
size="sm"
@click="clickFunz(props.row, col)"
></q-btn>
</div>
</div>
</q-td>
</q-tr>
<br />
</template>
<template v-slot:item="props">
<div
class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3"
:style="props.selected ? 'transform: scale(0.95);' : ''"
>
<q-card
:class="
props.selected
? 'bg-grey-2 my-card-withshadow no-padding'
: 'my-card-withshadow no-padding'
"
style="
background: radial-gradient(circle, #ffffff 0%, #bbddff 100%);
"
>
<q-bar
v-if="
!visuinpage &&
(tools.canModifyThisRec(props.row, tablesel) || editOn)
"
dense
class="bg-primary text-white full-height"
>
<q-badge
v-if="props.row['adType']"
:color="fieldsTable.getColByAdType(props.row['adType'])"
>
{{
fieldsTable.getValByTabAndId(
tablesel,
'adType',
props.row['adType']
)
}}
<q-icon
:name="fieldsTable.getIconByAdType(props.row['adType'])"
color="white"
class="q-ml-xs"
/>
</q-badge>
<q-space />
<q-btn
v-if="tools.canModifyThisRec(props.row, tablesel) || editOn"
flat
round
color="white"
icon="fas fa-pencil-alt"
size="sm"
@click="
clickFunz(
props.row,
prop_mycolumns.find(
(rec) => rec.action === lists.MenuAction.CAN_EDIT_TABLE
)
)
"
></q-btn>
<q-btn
v-if="tools.canModifyThisRec(props.row, tablesel) || editOn"
flat
round
color="white"
icon="fas fa-trash-alt"
size="sm"
@click="
clickFunz(
props.row,
prop_mycolumns.find(
(rec) => rec.action === lists.MenuAction.DELETE_RECTABLE
)
)
"
></q-btn>
</q-bar>
<!--<q-toolbar dense v-if="col_title" class="bg-primary text-white centeritems">
<q-toolbar-title>
{{ props.row[col_title] }}
</q-toolbar-title>
</q-toolbar>-->
<q-card-section class="">
<q-list dense>
<div v-for="col in mycolumns" :key="col.name">
<q-item
v-if="
showColCheck(
col,
tools.TIPOVIS_SHOW_RECORD,
false,
tools.getValue(props.row, col.field, col.subfield)
)
"
:class="clByCol(col)"
class="riduci_pad"
>
<q-item-section avatar v-if="col.icon">
<q-item-label class="q-table__col">
<q-icon :name="col.icon"></q-icon>
</q-item-label>
</q-item-section>
<q-item-section avatar v-if="visuIntestazCol(col)">
<q-item-label class="q-table__col">{{
col.label
}}</q-item-label>
</q-item-section>
<q-item-section>
<div class="tdclass">
<div :class="getclrow(props.row)">
<CMyPopupEdit
:table="mytable"
:canEdit="canEdit"
:canModify="
tools.canModifyThisRec(props.row, tablesel) ||
editOn
"
:disable="disabilita()"
:mycol="col"
v-model:row="props.row"
:field="col.field"
:subfield="col.subfield"
minuteinterval="1"
@save="SaveValue"
@show="selItem(props.row, col)"
@showandsave="showandsel"
>
</CMyPopupEdit>
</div>
</div>
</q-item-section>
</q-item>
</div>
</q-list>
</q-card-section>
</q-card>
</div>
</template>
</q-table>
<q-page-sticky <q-page-sticky
v-if="mytable && butt_modif_new && !hidetitleIfEmpty" v-if="mytable && butt_modif_new && !hidetitleIfEmpty"

View File

@@ -22,7 +22,7 @@ export default defineComponent({
required: true, required: true,
}, },
prop_myrec: { prop_myrec: {
type: Object as PropType<any | null>, type: Object as PropType<any>,
required: false, required: false,
default: null, default: null,
}, },
@@ -46,7 +46,7 @@ export default defineComponent({
const { t } = useI18n() const { t } = useI18n()
const $router = useRouter() const $router = useRouter()
const myrec = ref(<any | null>null) const myrec = ref(<any>null)
const visupage = ref(false) const visupage = ref(false)

View File

@@ -25,7 +25,7 @@ export default defineComponent({
required: true, required: true,
}, },
prop_myrec: { prop_myrec: {
type: Object as PropType<any | null>, type: Object as PropType<any>,
required: false, required: false,
default: null, default: null,
}, },
@@ -40,7 +40,7 @@ export default defineComponent({
const { t } = useI18n() const { t } = useI18n()
// const $router = useRouter() // const $router = useRouter()
const circuit = ref(<any | null>null) const circuit = ref(<any>null)
const showingtooltip = ref(false) const showingtooltip = ref(false)

View File

@@ -21,7 +21,7 @@ export default defineComponent({
required: true, required: true,
}, },
prop_myrec: { prop_myrec: {
type: Object as PropType<any | null>, type: Object as PropType<any>,
required: false, required: false,
default: null, default: null,
}, },
@@ -34,7 +34,7 @@ export default defineComponent({
const { t } = useI18n() const { t } = useI18n()
// const $router = useRouter() // const $router = useRouter()
const myrec = ref(<any | null>null) const myrec = ref(<any>null)
const visupage = ref(false) const visupage = ref(false)

View File

@@ -150,7 +150,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
order: 130, order: 130,
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.friends', name: 'mypages.iscritti',
component: () => import('@/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,

View File

@@ -160,13 +160,15 @@ export default function () {
function getNotifText($t: any, notif: INotif) { function getNotifText($t: any, notif: INotif) {
let descr = notif.descr let descr = notif.descr
let status = notif.status
if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_FRIENDS) { if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_FRIENDS) {
if (notif.status === shared_consts.StatusNotifs.STATUS_FRIENDS_ACCEPTED) { if (status === shared_consts.StatusNotifs.STATUS_FRIENDS_ACCEPTED) {
descr += '<br><em>' + $t('friends.accepted') + '</em>' descr += '<br><em>' + $t('friends.accepted') + '</em>'
} else if (notif.status === shared_consts.StatusNotifs.STATUS_FRIENDS_REFUSED) { } else if (status === shared_consts.StatusNotifs.STATUS_FRIENDS_REFUSED) {
descr += '<br><em>' + $t('friends.refused') + '</em>' descr += '<br><em>' + $t('friends.refused') + '</em>'
} }
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) { } else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) {
if (notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) { if (notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) {
// console.log('notif.extrarec', notif.extrarec) // console.log('notif.extrarec', notif.extrarec)
@@ -175,11 +177,11 @@ export default function () {
} }
} }
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_HANDSHAKE) { } else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_HANDSHAKE) {
if (notif.status === shared_consts.StatusNotifs.STATUS_HANDSHAKE_ACCEPTED) { if (status === shared_consts.StatusNotifs.STATUS_HANDSHAKE_ACCEPTED) {
descr += '<br><em>' + $t('handshake.accepted') + '</em>' descr += '<br><em>' + $t('handshake.accepted') + '</em>'
} }
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_FAVORITE) { } else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_FAVORITE) {
// if (notif.status === shared_consts.StatusNotifs.STATUS_HANDSHAKE_ACCEPTED) { // if (status === shared_consts.StatusNotifs.STATUS_HANDSHAKE_ACCEPTED) {
// descr += '<br><em>' + $t('handshake.accepted') + '</em>' // descr += '<br><em>' + $t('handshake.accepted') + '</em>'
// } // }
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) { } else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) {
@@ -190,15 +192,15 @@ export default function () {
} }
} }
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) { } else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) {
if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_ACCEPTED) { if (status === shared_consts.GroupsNotifs.STATUS_GROUPS_ACCEPTED) {
descr += '<br><em>' + $t('groups.accepted') + '</em>' descr += '<br><em>' + $t('groups.accepted') + '</em>'
} else if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_REFUSED) { } else if (status === shared_consts.GroupsNotifs.STATUS_GROUPS_REFUSED) {
descr += '<br><em>' + $t('groups.refused') + '</em>' descr += '<br><em>' + $t('groups.refused') + '</em>'
} else if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_BLOCKED) { } else if (status === shared_consts.GroupsNotifs.STATUS_GROUPS_BLOCKED) {
descr += '<br><em>' + $t('groups.blocked') + '</em>' descr += '<br><em>' + $t('groups.blocked') + '</em>'
} else if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_DELETED) { } else if (status === shared_consts.GroupsNotifs.STATUS_GROUPS_DELETED) {
descr += '<br><em>' + $t('groups.deleted') + '</em>' descr += '<br><em>' + $t('groups.deleted') + '</em>'
} else if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_REMOVED) { } else if (status === shared_consts.GroupsNotifs.STATUS_GROUPS_REMOVED) {
descr += '<br><em>' + $t('groups.removed') + '</em>' descr += '<br><em>' + $t('groups.removed') + '</em>'
} }
} }

View File

@@ -38,7 +38,7 @@ export interface INotData {
receiveRislist?: IUserFields[] receiveRislist?: IUserFields[]
receiveRislistgroup?: IMyGroup[] receiveRislistgroup?: IMyGroup[]
strettelist?: IUserFields[] strettelist?: IUserFields[]
checkuser?: ICheckUser | any checkuser?: any // ICheckUser
numreg_untilday?: number numreg_untilday?: number
reg_daily?: string reg_daily?: string
imbarcati_daily?: string imbarcati_daily?: string
@@ -588,7 +588,7 @@ export interface ITimeLineEntry {
} }
export interface ITimeLineMain { export interface ITimeLineMain {
titlemain: IAllLang | any titlemain: any
body: ITimeLineEntry[] body: ITimeLineEntry[]
} }
@@ -621,9 +621,9 @@ export interface IGallery {
} }
export interface IColl { export interface IColl {
title: IAllLang | any title: any // IAllLang
date?: string date?: string
subtitle?: IAllLang | any subtitle?: any //IAllLang
img: string img: string
img2?: string img2?: string
linkagg?: string linkagg?: string
@@ -635,7 +635,7 @@ export interface IColl {
} }
export interface ICollaborations { export interface ICollaborations {
withwhom_title: IAllLang | any withwhom_title: any
list: IColl[] list: IColl[]
} }
@@ -827,7 +827,7 @@ export interface IDataToSet {
table?: string table?: string
fieldsvalue?: any fieldsvalue?: any
unset?: any, unset?: any,
notifBot?: any | null notifBot?: any
tipomsg?: number tipomsg?: number
invitante_username?: string invitante_username?: string
ind_order?: any ind_order?: any

View File

@@ -86,7 +86,7 @@ export interface INotif {
title: string title: string
descr: string descr: string
datenotif?: Date datenotif?: Date
status?: StatusMessage status?: number
openUrl?: string openUrl?: string
read?: boolean read?: boolean
tablerec?: string tablerec?: string

View File

@@ -1084,6 +1084,7 @@ const msg_it = {
follow_groups: 'Gruppi di cui fai parte', follow_groups: 'Gruppi di cui fai parte',
create_group: 'Crea Gruppo', create_group: 'Crea Gruppo',
friends: 'Amici', friends: 'Amici',
iscritti: 'Iscritti',
bacheca: 'Bacheca', bacheca: 'Bacheca',
services: 'Servizi', services: 'Servizi',
handshake: 'Rapporti di Fiducia', handshake: 'Rapporti di Fiducia',
@@ -1392,7 +1393,7 @@ const msg_it = {
home: 'Home', home: 'Home',
groups: 'Gruppi', groups: 'Gruppi',
eventi: 'Eventi', eventi: 'Eventi',
friends: 'Amici', friends: 'Iscritti',
bookings: 'Prenotaz.', bookings: 'Prenotaz.',
profile: 'Profilo', profile: 'Profilo',
circuits: 'Circuiti', circuits: 'Circuiti',

View File

@@ -91,7 +91,7 @@ export const useCalendarStore = defineStore('CalendarStore', {
ris = myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeopleDinnerShared!, 0) ris = myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeopleDinnerShared!, 0)
} }
return ris! return ris ? ris : 0
} else { } else {
return 0 return 0
} }

View File

@@ -46,9 +46,9 @@ import { PayloadMessageTypes } from '@/common'
import { useNotifStore } from '@store/NotifStore' import { useNotifStore } from '@store/NotifStore'
export interface INotify { export interface INotify {
color?: string | 'primary' color?: string
textColor?: string textColor?: string
icon?: string | '' icon?: string
} }
const { t } = useI18n() const { t } = useI18n()

View File

@@ -159,7 +159,7 @@ export const toolsext = {
// this.$q.lang.set(mylang) // this.$q.lang.set(mylang)
}, },
getValDb(keystr: string, serv: boolean, def?: any, table?: string, subkey?: string, id?: any, idmain?: any, indrec?: number, subsubkey?: string, specialField?: ISpecialField): any | undefined { getValDb(keystr: string, serv: boolean, def?: any, table?: string, subkey?: string, id?: any, idmain?: any, indrec?: number, subsubkey?: string, specialField?: ISpecialField): any {
const todos = useTodoStore() const todos = useTodoStore()
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -31,6 +31,7 @@ export const useNotifStore = defineStore('NotifStore', {
}, },
getnotifs_coinsreq: (mystate: INotifState) => (): INotif[] => { getnotifs_coinsreq: (mystate: INotifState) => (): INotif[] => {
const ctrec = (mystate.last_notifs) ? mystate.last_notifs.slice(0, 20).filter((rec) => rec.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS && rec.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ && rec.status === shared_consts.CircuitsNotif.STATUS_NONE) : [] const ctrec = (mystate.last_notifs) ? mystate.last_notifs.slice(0, 20).filter((rec) => rec.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS && rec.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ && rec.status === shared_consts.CircuitsNotif.STATUS_NONE) : []
return (ctrec) return (ctrec)

View File

@@ -270,7 +270,7 @@ export const useProjectStore = defineStore({
idparent = tipovisuproj.id_parent! idparent = tipovisuproj.id_parent!
proj = tipovisuproj proj = tipovisuproj
} }
return tipovisuproj!.tipovisu return tipovisuproj ? tipovisuproj.tipovisu : null
}, },
getarrByCategory(category: string) { getarrByCategory(category: string) {

View File

@@ -385,7 +385,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
} }
}, },
getValueSettingsByKey(key: any, serv: any): any | undefined { getValueSettingsByKey(key: any, serv: any): any {
const myrec = this.getrecSettingsByKey(key, serv) const myrec = this.getrecSettingsByKey(key, serv)
// console.log('getValueSettingsByKey', myrec, 'key=', key, 'srv=', serv) // console.log('getValueSettingsByKey', myrec, 'key=', key, 'srv=', serv)
if (myrec) { if (myrec) {

View File

@@ -22,7 +22,7 @@
prop_colkey="_id" prop_colkey="_id"
col_title="username" col_title="username"
:vertical="costanti.VISUTABLE_LISTA" :vertical="costanti.VISUTABLE_LISTA"
nodataLabel=" " nodataLabel="Nessuna persona trovata con questo nome, cognome o username"
:prop_search="true" :prop_search="true"
:prop_showfilter="true" :prop_showfilter="true"
hint="Scegli una Regione o Provincia oppure digita il nome o Username" hint="Scegli una Regione o Provincia oppure digita il nome o Username"

7553
yarn.lock

File diff suppressed because it is too large Load Diff