Nuova Grafica , Nuovi settori e categorie, Beni e Servizi.

Nella Nazionalità non c'è Repubblica di San Marino
Aggiungere Bottone di "Chiudi" nella visualizzazione della Card
cerca persona, mettere solo una parte della parola da cercare...
Gruppi sistemare il bottone di Nuovo e controllare altro..
adTypeBacheca per la tabella mybachecas (Evento, Offro, Cerco)
Semplificare le CATEGORIE ?! o togliere la Specializzazione?  (con Giovanna)
This commit is contained in:
paoloar77
2022-02-19 22:02:54 +01:00
parent 9161909003
commit 1aea88a1fa
61 changed files with 1669 additions and 399 deletions

View File

@@ -0,0 +1,38 @@
.my-text {
font-size: 1rem;
font-weight: bold;
line-height: 1.5rem;
letter-spacing: 0.0125em;
}
.my-text_3 {
font-size: 1rem;
font-weight: bold;
line-height: 1.5rem;
letter-spacing: 0.0125em;
}
.my-text-small {
font-size: 1rem;
line-height: 1rem;
letter-spacing: 0.0125em;
}
.mybox_3 {
min-width: 100px;
min-height: 100px;
width: 100%;
}
.mybox {
min-width: 125px;
min-height: 137px;
width: 100%;
}
.mybox_small {
min-width: 110px;
width: 100%;
}

View File

@@ -29,6 +29,16 @@ export default defineComponent({
required: false,
default: 'grey'
},
small: {
type: Boolean,
required: false,
default: false
},
numcol: {
type: Number,
required: false,
default: 3
},
},
setup(props, { emit }) {

View File

@@ -1,10 +1,26 @@
<template>
<div class="q-pa-xs col-xs-6 col-sm-6 col-md-4 col-lg-2">
<div v-if="numcol === 3" class="col-xs-4 col-sm-4 col-md-3 col-lg-2">
<div class="q-ma-xs">
<q-btn v-if="!small" class="mybox_3" :color="color" rounded :to="to" v-bind="$attrs">
<q-icon class="q-ma-sm" :name="icon"/>
<div class="q-ma-sm my-text_3">{{ label }}</div>
</q-btn>
<q-btn v-if="small" class="mybox_small" :color="color" rounded :to="to" v-bind="$attrs">
<q-icon class="q-ma-xs" :name="icon" size="sm"/>
<div class="q-ma-xs my-text-small">{{ label }}</div>
</q-btn>
</div>
</div>
<div v-else class="col-xs-6 col-sm-6 col-md-4 col-lg-3">
<div class="q-ma-sm">
<q-btn :color="color" rounded :to="to" v-bind="$attrs">
<q-icon class="q-ma-sm" size="4em" :name="icon"/>
<q-btn v-if="!small" class="mybox" :color="color" rounded :to="to" v-bind="$attrs">
<q-icon class="q-ma-sm" size="4.5rem" :name="icon"/>
<div class="q-ma-sm text-h5">{{ label }}</div>
</q-btn>
<q-btn v-if="small" class="mybox_small" :color="color" rounded :to="to" v-bind="$attrs">
<q-icon class="q-ma-xs" :name="icon" size="sm"/>
<div class="q-ma-xs my-text-small">{{ label }}</div>
</q-btn>
</div>
</div>
</template>

View File

@@ -19,7 +19,7 @@ export default defineComponent({
const globalStore = useGlobalStore()
const { t } = useI18n();
const calcstat = computed(() => userStore.my.calcstat ? userStore.my.calcstat : {numUsersReg: 0, numMySkills: 0, numMyBachecas: 0} )
const calcstat = computed(() => userStore.my.calcstat ? userStore.my.calcstat : {numUsersReg: 0, numMySkills: 0, numMyGoods: 0, numMyBachecas: 0} )
return {
userStore,

View File

@@ -51,7 +51,29 @@
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numMyBachecas }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Annunci</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Dacci un Occhio</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="engineering" class="box_3" size="60px"></q-icon>
</q-item-section>
</q-item>
<q-item class="q-py-xs" style="min-height: unset">
<q-item-section>
<div class="progress-base q-my-sm">
<div class="progress-bar-3" style="width:100%"></div>
</div>
</q-item-section>
</q-item>
</q-card>
</div>
<div class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_3" style="border-left: 1px solid #efefef;"
v-bind:class="{'border-top': $q.platform.is.mobile}">
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numMyGoods }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Beni</q-item-label>
</q-item-section>
<q-item-section side>

View File

@@ -28,14 +28,14 @@ export default defineComponent({
CMyFieldDb, CGridTableRec,
},
setup(props, { attrs, slots, emit }) {
const mytable = 'users'
const { t } = useI18n()
const globalStore = useGlobalStore()
const userStore = useUserStore()
const arrfilterand: any = ref([])
const filtercustom: any = ref([])
const searchList = ref(<ISearchList[]>[])
const searchList_Servizi = ref(<ISearchList[]>[])
const searchList_Beni = ref(<ISearchList[]>[])
const search = ref('')
const myrecfiltertoggle = ref(tools.FILTER_ALL)
@@ -45,22 +45,25 @@ export default defineComponent({
const col_footer = ref('idCity')
const col_tabfooter = ref('mycities')
const mypagination = ref({ sortBy: 'date_created', descending: true, page: 1, rowsNumber: 10, rowsPerPage: 10 })
const mypagination = ref({ sortBy: 'date_created', descending: true, page: 1, rowsNumber: 20, rowsPerPage: 20 })
const col = ref(<IColGridTable>{})
const idSector = computed(() => {
/*
const idSectorServizi = computed(() => {
let myval: any = null
myval = searchList.value.find((rec) => (rec.table === 'sectors'))
myval = searchList_Servizi.value.find((rec) => (rec.table === 'sectors'))
if (myval) {
const ris = myval.value || 0
// console.log('idSector=', ris)
// console.log('idSectorServizi=', ris)
return ris
} else {
return 0
}
})
*/
watch(() => myrecfiltertoggle.value, (value: any, oldval: any) => {
if (value === tools.FILTER_MYREC) {
filtercustom.value = [{ userId: userStore.my._id }]
@@ -70,6 +73,15 @@ export default defineComponent({
},
)
const searchList = computed(() => {
if (props.table === 'mygoods')
return searchList_Beni.value
else if (props.table === 'myskills')
return searchList_Servizi.value
return searchList_Servizi.value
})
function mounted() {
@@ -93,6 +105,16 @@ export default defineComponent({
}
}
function getFilterGoods(recGood: any, index: number, arr: any) {
const recsectorGoods: any = searchList.value.find((rec) => rec.table === 'sectorgoods')
// console.log('getFilterSkills', recSkill.idSector, recsectors.value)
if (recsectorGoods) {
return recGood.idSectorGood.includes(recsectorGoods.value)
} else {
return true
}
}
function getFilterSubSkills(recSubSkill: any, index: number, arr: any) {
const recskills: any = searchList.value.find((rec) => rec.table === 'skills')
// console.log('recSubSkill', recSubSkill, 'recskills', recskills)
@@ -114,9 +136,30 @@ export default defineComponent({
}
searchList.value = [
searchList_Servizi.value = [
{
label: 'Stato',
table: 'statusSkills',
key: 'idStatusSkill',
value: 0,
// arrvalue: tools.getCookie(tools.COOK_SEARCH + 'statusSkills', []),
arrvalue: [],
type: costanti.FieldType.multiselect,
filter: null,
useinput: false,
icon: 'mood',
filteradv: true,
},
/*{
label: 'Regione',
table: 'regions',
key: 'idReg',
value: 0,
type: costanti.FieldType.select,
arrvalue: tools.getCookie(tools.COOK_SEARCH + 'regions', [costanti.FILTER_TUTTI]),
filter: null,
useinput: true,
},*/
{
label: 'Provincia',
table: 'provinces',
@@ -130,7 +173,7 @@ export default defineComponent({
icon: 'flag',
},
{
label: 'Città',
label: 'Comune',
table: 'cities',
key: 'idCity',
type: costanti.FieldType.select_by_server,
@@ -167,7 +210,7 @@ export default defineComponent({
useinput: false,
},
{
label: 'Competenza',
label: 'Categoria',
table: 'skills',
key: 'idSkill',
value: tools.getCookie(tools.COOK_SEARCH + 'skills' + '_' + tools.getCookie(tools.COOK_SEARCH + 'sectors', costanti.FILTER_TUTTI), costanti.FILTER_TUTTI),
@@ -178,7 +221,7 @@ export default defineComponent({
showcount: true,
useinput: false,
},
{
/*{
label: 'Specializzazione',
table: 'subskills',
key: 'idSubSkill',
@@ -191,16 +234,11 @@ export default defineComponent({
useinput: false,
icon: 'far fa-id-card',
},
/*{
label: 'Regione',
table: 'regions',
key: 'idReg',
value: 0,
type: costanti.FieldType.select,
arrvalue: tools.getCookie(tools.COOK_SEARCH + 'regions', [costanti.FILTER_TUTTI]),
filter: null,
useinput: true,
},*/
*/
/*
{
label: 'Livello',
table: 'levels',
@@ -213,20 +251,160 @@ export default defineComponent({
useinput: false,
filteradv: true,
},
*/
{
label: 'Stato',
table: 'statusSkills',
key: 'idStatusSkill',
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
value: 0,
arrvalue: tools.getCookie(tools.COOK_SEARCH + 'statusSkills', []),
arrvalue: tools.getCookie(tools.COOK_SEARCH + 'contribtypes', []),
type: costanti.FieldType.multiselect,
filter: null,
useinput: false,
icon: 'mood',
icon: 'fas fa-hand-holding',
filteradv: true,
//icon: 'swap_horizontal_circle',
},
/*
{
label: '',
table: '',
key: '',
value: 0,
type: costanti.FieldType.separator,
arrvalue: [],
addall: true,
filter: null,
showcount: true,
useinput: false,
notinsearch: true,
icon: '',
},
*/
]
searchList_Beni.value = [
/*{
label: 'Regione',
table: 'regions',
key: 'idReg',
value: 0,
type: costanti.FieldType.select,
arrvalue: tools.getCookie(tools.COOK_SEARCH + 'regions', [costanti.FILTER_TUTTI]),
filter: null,
useinput: true,
},*/
{
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + 'provinces', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
useinput: true,
icon: 'flag',
},
{
label: 'Contributo',
label: 'Comune',
table: 'cities',
key: 'idCity',
type: costanti.FieldType.select_by_server,
value: tools.getCookie(tools.COOK_SEARCH + 'cities', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
useinput: true,
filter: null,
// filter: getFilterCitiesByProvince,
// param1: shared_consts.PARAM_SHOW_PROVINCE,
tablesel: 'cities',
},
{
label: 'Offro/Cerco',
table: 'adtypegoods',
key: 'adType',
value: tools.getCookie(tools.COOK_SEARCH + 'adtypegoods', costanti.FILTER_TUTTI),
arrvalue: [],
addall: true,
type: costanti.FieldType.select,
filter: null,
useinput: false,
},
{
label: 'Settore',
table: 'sectorgoods',
key: 'idSectorGood',
value: tools.getCookie(tools.COOK_SEARCH + 'sectorgoods', 0),
arrvalue: [],
type: costanti.FieldType.select,
filter: null,
addall: true,
notinsearch: true,
useinput: false,
},
{
label: 'Categoria',
table: 'goods',
key: 'idGood',
value: tools.getCookie(tools.COOK_SEARCH + 'goods' + '_' + tools.getCookie(tools.COOK_SEARCH + 'sectorgoods', costanti.FILTER_TUTTI), costanti.FILTER_TUTTI),
arrvalue: [],
type: costanti.FieldType.select,
addall: true,
filter: getFilterGoods,
showcount: true,
useinput: false,
},
{
label: 'Spedizione',
table: 'shippings',
key: 'idShipping',
value: tools.getCookie(tools.COOK_SEARCH + 'shippings', costanti.FILTER_TUTTI),
arrvalue: [],
type: costanti.FieldType.select,
addall: true,
filter: null,
useinput: false,
},
/*{
label: 'Specializzazione',
table: 'subskills',
key: 'idSubSkill',
value: tools.getCookie(tools.COOK_SEARCH + 'subskills' + '_' + tools.getCookie(tools.COOK_SEARCH + 'skills', costanti.FILTER_TUTTI), costanti.FILTER_TUTTI),
type: costanti.FieldType.select,
arrvalue: [],
addall: true,
filter: getFilterSubSkills,
showcount: true,
useinput: false,
icon: 'far fa-id-card',
},
*/
/*
{
label: 'Livello',
table: 'levels',
key: 'numLevel',
value: tools.getCookie(tools.COOK_SEARCH + 'levels', costanti.FILTER_TUTTI),
arrvalue: [],
addall: true,
type: costanti.FieldType.select,
filter: null,
useinput: false,
filteradv: true,
},
*/
{
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
value: 0,
@@ -259,73 +437,124 @@ export default defineComponent({
}
function extraparams() {
return {
lookup1: {
lk_tab: 'users',
lk_LF: 'userId',
lk_FF: '_id',
lk_as: 'user',
af_objId_tab: 'myId',
},
lookup2: {
lk_tab: 'skills',
lk_LF: 'idSkill',
lk_FF: '_id',
lk_as: 'recSkill',
af_objId_tab: '',
lk_proj: {
recSkill: 1,
sector: 1,
idSector: 1,
idSkill: 1,
idSubSkill: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
idCity: 1,
numLevel: 1,
adType: 1,
photos: 1,
note: 1,
website: 1,
//**ADDFIELD_MYSKILL
descr: 1,
date_created: 1,
date_updated: 1,
userId: 1,
username: 1,
name: 1,
surname: 1,
comune: 1,
mycities: 1,
'profile.img': 1,
'profile.qualifica': 1,
}
},
lookup3: {
lk_tab: 'sectors',
lk_LF: 'recSkill.idSector',
lk_FF: '_id',
lk_as: 'sector',
af_objId_tab: '',
},
lookup4: {
lk_tab: 'subskills',
lk_LF: 'idSubSkill',
lk_FF: '_id',
lk_as: 'myrec',
af_objId_tab: '',
},
lookup5: {
lk_tab: 'cities',
lk_LF: 'idCity',
lk_FF: '_id',
lk_as: 'mycities',
af_objId_tab: '',
},
if (props.table === 'myskills') {
return {
lookup1: {
lk_tab: 'users',
lk_LF: 'userId',
lk_FF: '_id',
lk_as: 'user',
af_objId_tab: 'myId',
},
lookup2: {
lk_tab: 'skills',
lk_LF: 'idSkill',
lk_FF: '_id',
lk_as: 'recSkill',
af_objId_tab: '',
lk_proj: {
recSkill: 1,
sector: 1,
idSector: 1,
idSkill: 1,
// idSubSkill: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
idCity: 1,
numLevel: 1,
adType: 1,
photos: 1,
note: 1,
website: 1,
//**ADDFIELD_MYSKILL
descr: 1,
date_created: 1,
date_updated: 1,
userId: 1,
username: 1,
name: 1,
surname: 1,
comune: 1,
mycities: 1,
'profile.img': 1,
'profile.qualifica': 1,
}
},
lookup3: {
lk_tab: 'sectors',
lk_LF: 'recSkill.idSector',
lk_FF: '_id',
lk_as: 'sector',
af_objId_tab: '',
},
lookup5: {
lk_tab: 'cities',
lk_LF: 'idCity',
lk_FF: '_id',
lk_as: 'mycities',
af_objId_tab: '',
},
}
} else if (props.table === 'myskills') {
return {
lookup1: {
lk_tab: 'users',
lk_LF: 'userId',
lk_FF: '_id',
lk_as: 'user',
af_objId_tab: 'myId',
},
lookup2: {
lk_tab: 'goods',
lk_LF: 'idGood',
lk_FF: '_id',
lk_as: 'recGood',
af_objId_tab: '',
lk_proj: {
recGood: 1,
sectorGood: 1,
idSectorGood: 1,
idGood: 1,
mygood: 1,
idStatusSkill: 1,
idContribType: 1,
idCity: 1,
numLevel: 1,
adType: 1,
photos: 1,
note: 1,
website: 1,
//**ADDFIELD_MYSKILL
descr: 1,
date_created: 1,
date_updated: 1,
userId: 1,
username: 1,
name: 1,
surname: 1,
comune: 1,
mycities: 1,
'profile.img': 1,
'profile.qualifica': 1,
}
},
lookup3: {
lk_tab: 'sectorgoods',
lk_LF: 'recGood.idSectorGood',
lk_FF: '_id',
lk_as: 'sectorgood',
af_objId_tab: '',
},
lookup5: {
lk_tab: 'cities',
lk_LF: 'idCity',
lk_FF: '_id',
lk_as: 'mycities',
af_objId_tab: '',
},
}
}
}
@@ -334,6 +563,8 @@ export default defineComponent({
return tools.getdefaultnewrec_MySkill()
} else if (props.table === toolsext.TABMYBACHECAS) {
return tools.getdefaultnewrec_MyBacheca()
} else if (props.table === toolsext.TABMYGOODS) {
return tools.getdefaultnewrec_MyGoods()
}
return null
}
@@ -353,7 +584,6 @@ export default defineComponent({
arrfilterand,
filtercustom,
searchList,
idSector,
search,
doSearch,
myrecfiltertoggle,

View File

@@ -37,7 +37,7 @@
:vertical="costanti.VISUTABLE_LISTA"
:prop_pagination="mypagination"
:showType="costanti.SHOW_MYCARD"
:nodataLabel="'Nessuna Competenza trovata'"
:nodataLabel="'Nessun annuncio trovato con i filtri selezionati'"
:prop_search="true"
:finder="true"
:choose_visutype="$q.screen.gt.xs"

View File

@@ -1,6 +1,6 @@
<template>
<div v-if="tools.isTest()">
<q-banner
<!--<q-banner
rounded
dense
class="bg-primary text-white"
@@ -10,7 +10,7 @@
<q-icon name="fas fa-exclamation-triangle" color="yellow" size="xs" />
</template>
<span class="mybanner">Ambiente di Test</span>
</q-banner>
</q-banner>-->
</div>
</template>

View File

@@ -299,50 +299,40 @@ export default defineComponent({
refresh()
})
function setCategBySector(tablecat: string, tabsector: string, newval: any) {
const recSector = searchList.value.find((rec) => rec.table === tabsector)
if (recSector)
tools.setCookie(tools.COOK_SEARCH + tablecat + '_' + recSector.value, newval)
for (const item of searchList.value) {
if (item.table === tablecat) {
const valsaved = tools.getCookie(tools.COOK_SEARCH + tablecat + '_' + newval, costanti.FILTER_TUTTI)
const rec = searchList.value.find((rec) => rec.table === tablecat) // check if exist
let trovato = false
if (rec) {
const arrvalues = valoriopt.value(rec.value, false)
if (arrvalues)
trovato = arrvalues.find((rec: any) => rec[rec.key] === valsaved)
}
if (valsaved && trovato)
item.value = valsaved
else
item.value = costanti.FILTER_TUTTI
}
}
}
function searchval(newval: any, table: any) {
// console.log('searchval', newval, table)
tools.setCookie(tools.COOK_SEARCH + table, newval)
if (table === 'skills') {
const recSector = searchList.value.find((rec) => rec.table === 'sectors')
if (recSector)
tools.setCookie(tools.COOK_SEARCH + table + '_' + recSector.value, newval)
setCategBySector(table, 'sectors', newval)
}else if (table === 'goods') {
setCategBySector(table, 'sectorgoods', newval)
}
if (table === 'sectors') {
for (const item of searchList.value) {
if ((item.table === 'subskills')) {
// item.arrvalue = [costanti.FILTER_TUTTI]
}
if (item.table === 'skills') {
// console.log('---PRIMA ', item.value)
const valsaved = tools.getCookie(tools.COOK_SEARCH + 'skills' + '_' + newval, costanti.FILTER_TUTTI)
// check if exist
const recSkill = searchList.value.find((rec) => rec.table === 'skills')
let trovato = false
if (recSkill) {
// console.log('recSkill.value', recSkill)
const arrvalues = valoriopt.value(recSkill.value, false)
// console.log('arrvalues', arrvalues)
if (arrvalues)
trovato = arrvalues.find((rec: any) => rec[recSkill.key] === valsaved)
}
if (valsaved && trovato)
item.value = valsaved
else
item.value = costanti.FILTER_TUTTI
// console.log('---DOPO ', item.value)
}
}
}
/*if (table === 'skills') {
for (const item of searchList.value) {
if (item.table === 'subskills') {
item.arrvalue = [costanti.FILTER_TUTTI]
}
}
} */
refresh()
}
@@ -412,15 +402,21 @@ export default defineComponent({
let filtersearch3or: any[] = []
let recSector = null
let recSectorGood = null
let recProvince = null
let recSkill = null
let idSector = 0
let idSectorGood = 0
let idProvince = 0
let idSkill = 0
if (searchList.value) {
recSector = searchList.value.find((item: ISearchList) => item.table === 'sectors')
idSector = recSector ? recSector.value : 0
}
if (searchList.value) {
recSectorGood = searchList.value.find((item: ISearchList) => item.table === 'sectorgoods')
idSectorGood = recSectorGood ? recSectorGood.value : 0
}
if (searchList.value) {
recProvince = searchList.value.find((item: ISearchList) => item.table === 'provinces')
idProvince = recProvince ? recProvince.value : 0
@@ -494,6 +490,14 @@ export default defineComponent({
filtersearch2.push(obj2)
}
}
if ((item.table === 'goods') && item.value === costanti.FILTER_TUTTI) {
let obj2: any = {}
if (idSectorGood > 0) {
// idSectorGood
obj2['sectorgood._id'] = idSectorGood
filtersearch2.push(obj2)
}
}
if ((item.table === 'subskills') && item.value === costanti.FILTER_TUTTI) {
let obj2: any = {}
// idSector

View File

@@ -106,9 +106,10 @@
<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)">
<!--<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>
</div>-->
<CMySelect
:col="fieldsTable.getColByTable(mytable, item.key)"
@@ -223,6 +224,7 @@
<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"
>
@@ -497,7 +499,7 @@
v-for="col in mycolumns" :key="col.name" class="newrec_fields">
<div class="text-center q-my-xs" v-if="(col.fieldtype === costanti.FieldType.separator)">
<q-btn size="sm" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'" label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
<q-btn color="primary" size="md" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'" label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>
<div
v-if="showColCheck(col, tools.TIPOVIS_NEW_RECORD, true, 0, newRecord) && col.foredit ">
@@ -542,7 +544,7 @@
<div
v-for="col in mycolumns" :key="col.name">
<div class="text-center q-my-xs" v-if="(col.fieldtype === costanti.FieldType.separator)">
<q-btn size="sm" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'" label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
<q-btn color="primary" size="md" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'" label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>
<div
v-else-if="showColCheck(col, tools.TIPOVIS_EDIT_RECORD, false) && col.foredit">

View File

@@ -4,6 +4,7 @@ import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore'
import { useI18n } from '@/boot/i18n'
import { tools } from '@store/Modules/tools'
import { costanti } from '@store/Modules/costanti'
import { CBigBtn } from '@/components/CBigBtn'
@@ -18,9 +19,23 @@ export default defineComponent({
const globalStore = useGlobalStore()
const { t } = useI18n()
const showInfo = ref(false)
const cardsbig = computed(() => {
return costanti.MAINCARDS.filter((rec: any) => !rec.small)
})
const cardssmall = computed(() => {
return costanti.MAINCARDS.filter((rec: any) => rec.small)
})
return {
userStore,
tools,
costanti,
cardsbig,
cardssmall,
showInfo,
}
}
})

View File

@@ -1,32 +1,34 @@
<template>
<div>
<div class="row q-ma-sm shadow justify-center" style="border-radius: 4px;border: 1px solid rgba(0, 0, 0, 0.12);">
<CBigBtn
label="Bacheca" to="/bacheca" icon="fas fa-bullhorn" color="indigo">
</CBigBtn>
<CBigBtn
label="Lavoro" to="/work" icon="fas fa-briefcase" color="blue">
</CBigBtn>
<CBigBtn
label="Scuola" to="/school" icon="fas fa-book-reader" color="orange" disable>
</CBigBtn>
<CBigBtn
label="Luoghi" to="/places" icon="fas fa-map-marker-alt" color="cyan" disable>
</CBigBtn>
<CBigBtn
label="Mobilità" to="/mobility" icon="fas fa-car-side" color="red" disable>
</CBigBtn>
<CBigBtn
label="Alimentari" to="/grocery" icon="fas fa-utensils" color="green" disable>
</CBigBtn>
<CBigBtn
label="Socializza" to="/socialising" icon="fas fa-users" color="purple" disable>
</CBigBtn>
<div class="row q-ma-xs shadow justify-center" style="border-radius: 4px;border: 1px solid rgba(0, 0, 0, 0.12);">
<CBigBtn
v-for="(card, ind) of cardsbig" :key="ind"
:label="card.title" :to="card.to" :icon="card.icon" :color="card.color" :text-color="!!card.textcolor ? card.textcolor : ''"
:small="card.small"
:numcol="2"
:hint="card.hint" :disable="card.disable">
</CBigBtn>
</div>
<div class="row shadow justify-center" style="border-radius: 4px;border: 1px solid rgba(0, 0, 0, 0.12);">
<CBigBtn
v-for="(card, ind) of cardssmall" :key="ind"
:label="card.title" :to="card.to" :icon="card.icon" :color="card.color" :text-color="!!card.textcolor ? card.textcolor : ''"
:small="card.small"
:numcol="3"
:hint="card.hint" :disable="card.disable">
</CBigBtn>
</div>
<div class="text-center">P.S: Attualmente sono attivi il bottone <b>Bacheca e Lavoro</b>.<br>
Gli altri verranno attivati prossimamente .</div>
</div>
<!--<div class="row justify-center">
<CBigBtn
label="Info" to="" @click="showInfo = true" icon="fas fa-info" color="primary"
:numcol="3"
>
</CBigBtn>
</div>
<div v-if="showInfo">
</div>-->
</template>
<script lang="ts" src="./CMainView.ts">

View File

@@ -1,5 +1,12 @@
<template>
<q-card class="dialog_card" v-if="mybacheca">
<q-footer
class="bg-white small-screen-only text-center"
bordered
>
<q-btn push rounded color="primary" icon="close" label="Chiudi" v-close-popup></q-btn>
</q-footer>
<q-bar dense class="bg-primary text-white">
{{ mybacheca.username }}
<q-space/>

View File

@@ -253,17 +253,26 @@
</div>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.date">
<CDateTime
:label="col.label"
class="cursor-pointer"
v-model:value="myvalue"
:readonly="false"
:minuteinterval="minuteinterval"
:dense="true"
:canEdit="canEdit"
@savetoclose="SaveValueInt"
@show="OpenEdit">
</CDateTime>
<div v-if="myvalue">
<CDateTime
:label="col.label"
class="cursor-pointer"
v-model:value="myvalue"
:readonly="false"
:minuteinterval="minuteinterval"
:dense="true"
:canEdit="canEdit"
@savetoclose="SaveValueInt"
@show="OpenEdit">
</CDateTime>
</div>
<div v-else-if="canEdit">
<q-btn
dense
color="primary" @click="OpenEdit"
icon="fas fa-calendar-day"
/>
</div>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.onlydate">
<CDateTime
@@ -461,7 +470,7 @@
:color="tools.getColByLevel(myvalue)"
icon="star_border"
icon-selected="star"
:max="costanti.FieldType.star5 ? 5 : 3"
:max="col.fieldtype === costanti.FieldType.star5 ? 5 : 3"
:readonly="true"
/>
</div>
@@ -745,6 +754,34 @@
</CMySelect>
</div>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.date">
<CDateTime
:label="col.label"
class="cursor-pointer"
v-model:value="myvalue"
:readonly="false"
:minuteinterval="minuteinterval"
:dense="true"
:canEdit="canEdit"
@savetoclose="SaveValueInt"
@show="OpenEdit">
</CDateTime>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.onlydate">
<CDateTime
:label="col.label"
class="cursor-pointer"
:valueDate="myvalue"
v-model:value="myvalue"
:readonly="false"
:minuteinterval="minuteinterval"
:dense="true"
:canEdit="canEdit"
@savetoclose="SaveValueInt"
@show="OpenEdit"
view="date">
</CDateTime>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.binary">
<CMyToggleList

View File

@@ -22,7 +22,7 @@
:label="$t('reg.username_login')"
:rules="[
val => !!val || $t('reg.err.required'),
val => val.length > 6 || $t('reg.err.atleast') + ' 6 ' + $t('reg.err.char'),
val => val.length >= 6 || $t('reg.err.atleast') + ' 6 ' + $t('reg.err.char'),
]">
<template v-slot:prepend>
@@ -40,7 +40,7 @@
:label="$t('reg.password')"
:rules="[
val => !!val || $t('reg.err.required'),
val => val.length > 8 || $t('reg.err.atleast') + ' 8 ' + $t('reg.err.char'),
val => val.length >= 8 || $t('reg.err.atleast') + ' 8 ' + $t('reg.err.char'),
]">
<template v-slot:prepend>

View File

@@ -1,5 +1,5 @@
import {
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRef, toRefs, watch,
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRef, toRefs, watch, computed,
} from 'vue'
import { tools } from '@store/Modules/tools'
@@ -7,7 +7,6 @@ import { CMyFieldDb } from '@/components/CMyFieldDb'
import { costanti } from '@costanti'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { colmySkills } from '@store/Modules/fieldsTable'
import { CGridTableRec } from '@/components/CGridTableRec'
import { IColGridTable, IMySkill, ISkill } from 'model'
import { toolsext } from '@store/Modules/toolsext'
@@ -58,6 +57,13 @@ export default defineComponent({
const col_footer = ref('')
const col_tabfooter = ref('')
const extraparams = computed(() =>{
if (props.table === 'goods')
return extraparams_Goods()
else
return extraparams_Servizi()
})
function mounted() {
let obj = tools.getParamsByTable(props.table)
@@ -71,7 +77,8 @@ export default defineComponent({
}
function extraparams() {
function extraparams_Servizi() {
let lk_tab = 'users'
let lk_LF = 'userId'
let lk_FF = '_id'
@@ -94,7 +101,6 @@ export default defineComponent({
sector: 1,
idSector: 1,
idSkill: 1,
idSubSkill: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
@@ -129,7 +135,6 @@ export default defineComponent({
sector: 1,
idSector: 1,
idSkill: 1,
idSubSkill: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
@@ -164,7 +169,6 @@ export default defineComponent({
sector: 1,
idSector: 1,
idSkill: 1,
idSubSkill: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
@@ -189,13 +193,134 @@ export default defineComponent({
}
},
lookup4: {
lk_tab: 'subskills',
lk_LF: 'idSubSkill',
lk_tab: 'cities',
lk_LF: 'idCity',
lk_FF: '_id',
lk_as: 'myrec',
lk_as: 'mycities',
af_objId_tab: '',
},
lookup5: {
}
}
function extraparams_Goods() {
let lk_tab = 'users'
let lk_LF = 'userId'
let lk_FF = '_id'
let lk_as = 'user'
let af_objId_tab = 'myId'
if (props.username) {
// lk_LF = 'username'
}
return {
lookup1: {
lk_tab,
lk_LF,
lk_FF,
lk_as,
af_objId_tab,
lk_proj: {
recSkill: 1,
sector: 1,
idSector: 1,
idSkill: 1,
idShipping: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
idCity: 1,
numLevel: 1,
adType: 1,
photos: 1,
note: 1,
//**ADDFIELD_MYSKILL
website: 1,
descr: 1,
date_created: 1,
date_updated: 1,
userId: 1,
username: 1,
name: 1,
surname: 1,
comune: 1,
mycities: 1,
'profile.img': 1,
'profile.qualifica': 1,
}
},
lookup2: {
lk_tab: 'cities',
lk_LF: 'idCity',
lk_FF: '_id',
lk_as: 'comune',
af_objId_tab: '',
lk_proj: {
recSkill: 1,
sector: 1,
idSector: 1,
idSkill: 1,
idShipping: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
idCity: 1,
numLevel: 1,
adType: 1,
photos: 1,
note: 1,
//**ADDFIELD_MYSKILL
website: 1,
descr: 1,
date_created: 1,
date_updated: 1,
comune: 1,
userId: 1,
username: 1,
name: 1,
surname: 1,
mycities: 1,
'profile.img': 1,
'profile.qualifica': 1,
}
},
lookup3: {
lk_tab: 'skills',
lk_LF: 'idSkill',
lk_FF: '_id',
lk_as: 'recSkill',
af_objId_tab: '',
lk_proj: {
recSkill: 1,
sector: 1,
idSector: 1,
idSkill: 1,
idShipping: 1,
myskill: 1,
idStatusSkill: 1,
idContribType: 1,
idCity: 1,
numLevel: 1,
adType: 1,
photos: 1,
note: 1,
//**ADDFIELD_MYSKILL
website: 1,
descr: 1,
date_created: 1,
date_updated: 1,
userId: 1,
username: 1,
name: 1,
surname: 1,
comune: 1,
mycities: 1,
'profile.img': 1,
'profile.qualifica': 1,
}
},
lookup4: {
lk_tab: 'cities',
lk_LF: 'idCity',
lk_FF: '_id',
@@ -211,6 +336,8 @@ export default defineComponent({
return tools.getdefaultnewrec_MySkill()
} else if (props.table === toolsext.TABMYBACHECAS) {
return tools.getdefaultnewrec_MyBacheca()
} else if (props.table === toolsext.TABMYGOODS) {
return tools.getdefaultnewrec_MyGoods()
}
return null
}
@@ -220,7 +347,6 @@ export default defineComponent({
return {
tools,
costanti,
colmySkills,
extraparams,
fieldsTable,
col,

View File

View File

@@ -0,0 +1,51 @@
import { computed, defineComponent, onMounted, PropType, ref } from 'vue'
import { costanti } from '@costanti'
export default defineComponent({
name: 'CTitlePage',
props: {
ind: {
type: Number,
required: false,
default: -1,
},
title: {
type: String,
required: false
},
icon: {
type: String,
required: false
},
color: {
type: String,
required: false
},
},
setup(props) {
const mytitle = ref('')
const myicon = ref('')
const mycolor = ref('')
function mount() {
if (props.ind === -1) {
mytitle.value = props.title!
myicon.value = props.icon!
mycolor.value = props.color!
} else {
mytitle.value = costanti.MAINCARDS[props.ind].title
myicon.value = costanti.MAINCARDS[props.ind].icon
mycolor.value = costanti.MAINCARDS[props.ind].color
}
}
onMounted(mount)
return {
mytitle,
myicon,
mycolor,
}
},
})

View File

@@ -0,0 +1,19 @@
<template>
<q-banner
rounded
dense
class="text-white"
:style="`text-align: center; background-color: ${mycolor}`">
<template v-slot:avatar>
<q-icon :name="myicon" size="xs" />
</template>
<span class="mybanner">{{mytitle}}</span>
</q-banner>
</template>
<script lang="ts" src="./CTitlePage.ts">
</script>
<style lang="scss" scoped>
@import './CTitlePage.scss';
</style>

View File

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

View File

@@ -345,13 +345,18 @@ export default defineComponent({
}
function getappname() {
let mystr = tools.getsuffisso() + tools.getappname(tools.isMobile())
if (!tools.isMobile()) {
//if (!tools.isMobile()) {
mystr += ' ' + getAppVersion()
//}
let mystr = ''
if (tools.isTest()){
mystr = 'Ambiente di TEST'
} else {
mystr = ''
let mystr = tools.getsuffisso() + tools.getappname(tools.isMobile())
if (!tools.isMobile()) {
//if (!tools.isMobile()) {
mystr += ' ' + getAppVersion()
//}
} else {
mystr = ''
}
}
return mystr
@@ -420,9 +425,9 @@ export default defineComponent({
}
function getClassColorHeader() {
if (tools.isTest()) return 'bg-warning'
if (tools.isTest()) return 'bg-light-blue'
if (tools.isDebug()) return 'bg-info'
return 'bg-primary'
return 'bg-light-blue'
}
function changecmd(value: any) {