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

View File

@@ -17,7 +17,8 @@ export default defineComponent({
props: {
discipline: {
Type: Object as PropType<IDiscipline>,
required: true,
required: false,
default: {}
},
directory: {
type: String,
@@ -54,7 +55,7 @@ export default defineComponent({
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)
// console.log('nextlesson', this.nextlesson)
}
@@ -73,7 +74,8 @@ export default defineComponent({
}
function created() {
disciplinechanged(props.discipline)
if (tools.isObject(props.discipline))
disciplinechanged(props.discipline)
}
created()

View File

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

View File

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

View File

@@ -1172,7 +1172,7 @@ export default defineComponent({
}
function refresh_infscroll(done: any) {
// console.log('refresh_infscroll', 'pag', pagination.value.rowsNumber)
console.log('refresh_infscroll', 'pag', pagination.value.rowsNumber)
rowclicksel.value = null
onUpdateData(0,
@@ -2157,7 +2157,7 @@ export default defineComponent({
function onLoadScroll(index: number, done: any) {
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 (pagination.value.rowsNumber === 0) {
pagination.value.page = 0

View File

@@ -1,361 +1,8 @@
<template>
<div v-if="tools.isDebugOn()"></div>
<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
ref="myinfscroll"
v-if="shared_consts.VERTIC_SHOW_GRID.includes(myvertical) && !loading"
:initial-index="0"
@load="onLoadScroll"
:offset="350"
@@ -566,544 +213,6 @@
</div>
</template>
</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
v-if="mytable && butt_modif_new && !hidetitleIfEmpty"

View File

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

View File

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

View File

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

View File

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

View File

@@ -160,13 +160,15 @@ export default function () {
function getNotifText($t: any, notif: INotif) {
let descr = notif.descr
let status = notif.status
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>'
} 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>'
}
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) {
if (notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) {
// console.log('notif.extrarec', notif.extrarec)
@@ -175,11 +177,11 @@ export default function () {
}
}
} 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>'
}
} 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>'
// }
} 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) {
if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_ACCEPTED) {
if (status === shared_consts.GroupsNotifs.STATUS_GROUPS_ACCEPTED) {
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>'
} 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>'
} 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>'
} 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>'
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -159,7 +159,7 @@ export const toolsext = {
// 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 userStore = useUserStore()

View File

@@ -31,6 +31,7 @@ export const useNotifStore = defineStore('NotifStore', {
},
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) : []
return (ctrec)

View File

@@ -270,7 +270,7 @@ export const useProjectStore = defineStore({
idparent = tipovisuproj.id_parent!
proj = tipovisuproj
}
return tipovisuproj!.tipovisu
return tipovisuproj ? tipovisuproj.tipovisu : null
},
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)
// console.log('getValueSettingsByKey', myrec, 'key=', key, 'srv=', serv)
if (myrec) {

View File

@@ -22,7 +22,7 @@
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel=" "
nodataLabel="Nessuna persona trovata con questo nome, cognome o username"
:prop_search="true"
:prop_showfilter="true"
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