Browse Source

Merge branch 'hotfix/fix-johan'

Vincent GUFFON 3 years ago
parent
commit
29a0c35b55

+ 34 - 1
assets/css/global.scss

@@ -21,7 +21,7 @@ header .v-toolbar__content{
 .header_menu{
   max-height: 300px;
   min-width: 300px;
-  overflow-y: scroll
+  overflow-y: auto;
 }
 
 .v-menu__content{
@@ -36,3 +36,36 @@ header .v-toolbar__content{
   height: 46px;
   width: 46px;
 }
+
+.left-menu > div > .v-list-group--no-action > .v-list-group__header,
+.left-menu > div > .v-list-item
+{
+  border-left:3px solid var(--v-ot_dark_grey-base, white);
+}
+
+.left-menu > div > .v-list-group--no-action > .v-list-group__header:hover,
+.left-menu > div > .v-list-group--no-action > .v-list-item--active,
+.left-menu > div > .v-list-group--no-action > .v-list-group__items,
+.left-menu > div > .v-list-item:hover,
+.left-menu > div > .v-list-item--active
+{
+  border-left:3px solid var(--v-ot_green-base, white);
+  background: var(--v-ot_dark_grey_hover-base, white);
+}
+
+.left-menu > div > .v-list-group--no-action > .v-list-group__header:hover > .v-list-item__action > .v-icon,
+.left-menu > div > .v-list-group--no-action > .v-list-group__header:hover > .v-list-item__content > .v-list-item__title,
+.left-menu > div > .v-list-group--no-action > .v-list-item--active > .v-list-item__action > .v-icon,
+.left-menu > div > .v-list-group--no-action > .v-list-item--active > .v-list-item__content > .v-list-item__title,
+.left-menu > div > .v-list-group--no-action > .v-list-group__items > .v-list-item__action,
+.left-menu > div > .v-list-item:hover > .v-list-item__action > .v-icon,
+.left-menu > div > .v-list-item:hover > .v-list-item__content > .v-list-item__title,
+{
+  color: var(--v-ot_white-base, white) !important;
+
+}
+
+.left-menu > div > .v-list-group--no-action > .v-list-item--active,
+.left-menu > div > .v-list-group--no-action > .v-list-group__items{
+  background: var(--v-ot_dark_grey_hover-base, white);
+}

+ 1 - 0
assets/css/variables.scss

@@ -6,3 +6,4 @@ $btn-text-transform: none;
 
 $breadcrumbs-padding: 5px 5px;
 $breadcrumbs-even-child-padding: 0 10px;
+$body-font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif !important;

+ 16 - 5
components/Layout/Header.vue

@@ -14,15 +14,19 @@ et aux préférences de l'utilisateur
   >
     <v-btn
       v-if="displayedMiniVariant"
-      class="menu-btn"
-      icon
-      @click.stop="displayedMenu()"
+      class="menu-btn d-none d-sm-none d-md-flex" icon @click.stop="displayedMiniMenu()"
     >
       <v-icon class="ot_white--text">
         mdi-menu{{ `${properties.miniVariant ? '' : '-open'}` }}
       </v-icon>
     </v-btn>
 
+    <v-btn class="menu-btn d-sm-flex d-md-none" icon @click.stop="displayedMenu()">
+      <v-icon class="ot_white--text">
+        mdi-menu
+      </v-icon>
+    </v-btn>
+
     <v-toolbar-title v-text="title" />
 
     <v-spacer />
@@ -75,6 +79,7 @@ export default defineComponent({
 
     const properties:UnwrapRef<AnyJson> = reactive({
       miniVariant: false,
+      openMenu: false,
       homeUrl: $config.baseURL_adminLegacy
     })
 
@@ -90,9 +95,14 @@ export default defineComponent({
     const configurationMenu:Ref<any> = $useMenu.setupContext().useConfigurationMenuConstruct()
     const accountMenu:Ref<any> = $useMenu.setupContext().useAccountMenuConstruct()
 
-    const displayedMenu = () => {
+    const displayedMiniMenu = () => {
       properties.miniVariant = !properties.miniVariant
-      emit('handle-open-menu-click', properties.miniVariant)
+      emit('handle-open-mini-menu-click', properties.miniVariant)
+    }
+
+    const displayedMenu = () => {
+      properties.openMenu = !properties.openMenu
+      emit('handle-open-menu-click', properties.openMenu )
     }
 
     const showUniversalButton =
@@ -114,6 +124,7 @@ export default defineComponent({
       hasAccessesMenu,
       hasFamilyMenu,
       title,
+      displayedMiniMenu,
       displayedMenu,
       webSiteMenu,
       myAccessesMenu,

+ 34 - 5
components/Layout/Menu.vue

@@ -6,12 +6,13 @@ Prend en paramètre une liste de ItemMenu et les met en forme
 <template>
   <v-navigation-drawer
     :mini-variant.sync="miniVariant"
+    v-model="open"
+    fixed
     clipped
     class="ot_dark_grey ot_menu_color--text"
-    fixed
     app
   >
-    <v-list>
+    <v-list class="left-menu">
       <div v-for="(item, i) in menu" :key="i">
         <v-list-item
           v-if="!item.children"
@@ -55,14 +56,18 @@ Prend en paramètre une liste de ItemMenu et les met en forme
             exact
           >
             <v-list-item-action>
-              <v-icon class="ot_menu_color--text" small>
+              <v-icon class="ot_white--text" small>
                 {{ child.icon }}
               </v-icon>
             </v-list-item-action>
             <v-list-item-content>
-              <v-list-item-title class="ot_menu_color--text" v-text="$t(child.title)" />
+              <v-list-item-title class="ot_white--text" v-text="$t(child.title)" />
             </v-list-item-content>
           </v-list-item>
+
+          <template #appendIcon>
+            <v-icon class="ot_menu_color--text" small>mdi-chevron-down</v-icon>
+          </template>
         </v-list-group>
       </div>
     </v-list>
@@ -70,8 +75,9 @@ Prend en paramètre une liste de ItemMenu et les met en forme
 </template>
 
 <script lang="ts">
-import { defineComponent } from '@nuxtjs/composition-api'
+import {computed, defineComponent, onUnmounted, ref, toRefs, watch} from '@nuxtjs/composition-api'
 import { ItemsMenu } from '~/types/interfaces'
+import {WatchStopHandle} from "@vue/composition-api";
 
 export default defineComponent({
   props: {
@@ -82,6 +88,25 @@ export default defineComponent({
     miniVariant: {
       type: Boolean,
       required: true
+    },
+    openMenu: {
+      type: Boolean,
+      required: true
+    }
+  },
+  setup(props){
+    const {openMenu} = toRefs(props)
+    const open = ref(false)
+    const unwatch: WatchStopHandle = watch(openMenu, (newValue, oldValue) => {
+      open.value = true
+    })
+
+    onUnmounted(() => {
+      unwatch()
+    })
+
+    return {
+      open
     }
   }
 })
@@ -92,6 +117,10 @@ export default defineComponent({
     margin-right: 10px !important;
   }
 
+  .v-application--is-ltr .v-list-group--no-action > .v-list-group__header{
+    margin-left: 0px;
+    padding-left: 0px;
+  }
   .v-application--is-ltr .v-list-group--no-action > .v-list-group__items > .v-list-item {
     padding-left: 30px;
   }

+ 2 - 1
components/Ui/ExpansionPanel.vue

@@ -6,7 +6,7 @@ Panneaux déroulants de type "accordéon"
 
 <template>
   <v-expansion-panel :id="id">
-    <v-expansion-panel-header class="ot_light_grey">
+    <v-expansion-panel-header color="ot_light_grey">
       <v-icon class="ot_white--text ot_green icon">
         {{ icon }}
       </v-icon>
@@ -44,6 +44,7 @@ export default {
   }
   .v-expansion-panel-header{
     padding: 0;
+    padding-right: 20px;
   }
   .v-expansion-panel--active > .v-expansion-panel-header{
     min-height: 47px;

+ 1 - 1
components/Ui/SystemBar.vue

@@ -5,7 +5,7 @@ System bars
 <template>
     <v-system-bar
       dark
-      height="40"
+      height="50"
       :color="color"
     >
         <div class="flex text-center ot_white--text">

+ 1 - 1
components/Ui/Display/MobytStatus.vue → components/Ui/Template/MobytStatus.vue

@@ -7,7 +7,7 @@ Texte descriptif du statut Mobyt de la structure
 <template>
   <span v-if="mobytStatus && !mobytStatusFetch.pending">
     {{ mobytStatus.money.toLocaleString($i18n.locale, { style: 'currency', currency: 'EUR' }) }}
-    ({{ mobytStatus.amount }} SMS)
+    {{ $t('convert_price_to_sms', { nb_sms: mobytStatus.amount }) }}
   </span>
 </template>
 

+ 1 - 1
composables/layout/Menus/accountMenu.ts

@@ -85,7 +85,7 @@ class AccountMenu extends BaseMenu implements Menu {
       children.push(this.constructMenu('my_bills', undefined, `/main/my_profile/${this.$store.state.profile.access.id}/dashboard/show/my_bills`, true))
     }
 
-    if (this.$ability.can('display', 'cmf_licence_page')) {
+    if (this.$ability.can('display', 'cmf_licence_person_page')) {
       children.push(this.constructMenu('print_my_licence', undefined, `/licence_cmf/user`, true))
     }
 

+ 2 - 2
composables/layout/Menus/configurationMenu.ts

@@ -62,11 +62,11 @@ class ConfigurationMenu extends BaseMenu implements Menu {
     }
 
     if (this.$ability.can('display', 'billing_settings_page')) {
-      children.push(this.constructMenu('billing_settings', undefined, '/billing_settings/' + this.$store.state.profile.organization.id, true))
+      children.push(this.constructMenu('billing_settings', undefined, '/main/edit/billing_settings/' + this.$store.state.profile.organization.id, true))
     }
 
     if (this.$ability.can('display', 'online_registration_settings_page')) {
-      children.push(this.constructMenu('online_registration_settings', undefined, '/online_registration_settings/' + this.$store.state.profile.organization.id, true))
+      children.push(this.constructMenu('online_registration_settings', undefined, '/main/edit/online_registration_settings/' + this.$store.state.profile.organization.id, true))
     }
 
     if (this.$ability.can('display', 'transition_next_year_page')) {

+ 3 - 2
config/abilities/pages/myAccount.yaml

@@ -8,7 +8,8 @@
     action: 'display'
     services:
       access:
-        - {function: hasAbility, parameters: [{action: 'write', subject: 'attendances'}]}
+        - { function: hasAbility, parameters: [{action: 'write', subject: 'attendances'}] }
+        - { function: isAdminAccount, result: false }
       organization:
         - {function: hasModule, parameters: ['Attendances']}
 
@@ -91,7 +92,7 @@
       access:
         - { function: hasProfile, parameters: ['guardian', 'payor']}
 
-  cmf_licence_page:
+  cmf_licence_person_page:
     action: 'display'
     services:
       access:

+ 13 - 4
config/nuxtConfig/head.js

@@ -1,15 +1,24 @@
 export default {
   // Global page headers (https://go.nuxtjs.dev/config-head)
   head: {
-    titleTemplate: '%s - admin',
-    title: 'admin',
+    title: 'Opentalent',
     meta: [
       { charset: 'utf-8' },
       { name: 'viewport', content: 'width=device-width, initial-scale=1' },
-      { hid: 'description', name: 'description', content: '' }
+      { hid: 'description', name: 'description', content: '' },
+      { name: 'msapplication-TileColor', content: '#324250' },
+      { name: 'msapplication-TileImage', content: '/favicon/mstile-144x144.png' }
     ],
     link: [
-      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
+      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
+      { rel: 'apple-touch-icon-precomposed', sizes: '57x57', href: '/favicon/apple-touch-icon-57x57.png' },
+      { rel: 'apple-touch-icon-precomposed', sizes: '114x114', href: '/favicon/apple-touch-icon-114x114.png' },
+      { rel: 'apple-touch-icon-precomposed', sizes: '72x72', href: '/favicon/apple-touch-icon-72x72.png' },
+      { rel: 'apple-touch-icon-precomposed', sizes: '144x144', href: '/favicon/apple-touch-icon-144x144.png' },
+      { rel: 'apple-touch-icon-precomposed', sizes: '120x120', href: '/favicon/apple-touch-icon-120x120.png' },
+      { rel: 'apple-touch-icon-precomposed', sizes: '152x152', href: '/favicon/apple-touch-icon-152x152.png' },
+      { rel: 'icon', sizes: '32x32', type: 'image/x-icon', href: '/favicon/favicon-32x32.png' },
+      { rel: 'icon', sizes: '16x16', type: 'image/x-icon', href: '/favicon/favicon-16x16.png' },
     ]
   },
 

+ 2 - 1
config/nuxtConfig/vuetify.js

@@ -33,7 +33,8 @@ export default {
           primary: colors.blue.darken2,
           ot_green: '#00ad8e',
           ot_light_green: '#a9e0d6',
-          ot_dark_grey: '#2c3a48',
+          ot_dark_grey: '#324150',
+          ot_dark_grey_hover: '#2c3a48',
           ot_grey: '#777777',
           ot_header_menu: '#ECE7E5',
           ot_light_grey: '#f5f5f5',

+ 1 - 0
lang/content/subscription/fr-FR.js

@@ -9,6 +9,7 @@ export default (context, locale) => {
   return ({
     get_more_functionalities_with_version: 'Bénéficiez de plus de fonctionnalités avec la version',
     for_only_x_eur_ttc_by_month: 'Pour seulement {price} TTC par mois',
+    convert_price_to_sms: 'soit {nb_sms} SMS',
     yearly_paid_giving_x_eur_ttc_per_year: 'Payable annuellement, soit {price} TTC / an',
     only_for_cmf_members: 'Offre réservée aux adhérents CMF',
     public_price_x_ttc_a_year: 'Prix public: {price} TTC/an',

+ 11 - 5
layouts/default.vue

@@ -4,9 +4,9 @@
     <client-only placeholder=" " />
 
     <v-app dark>
-      <LayoutMenu v-if="displayedMenu" :menu="menu" :mini-variant="properties.miniVariant" />
+      <LayoutMenu v-if="displayedMenu" :menu="menu" :mini-variant="properties.miniVariant" :openMenu="properties.openMenu" />
 
-      <LayoutHeader @handle-open-menu-click="handleOpenMenu" />
+      <LayoutHeader @handle-open-menu-click="handleOpenMenu" @handle-open-mini-menu-click="handleOpenMiniMenu" />
 
       <v-main class="ot_content_color">
         <LayoutSubheader />
@@ -36,12 +36,17 @@ export default defineComponent({
 
     const properties = reactive({
       clipped: false,
-      miniVariant: false
+      miniVariant: false,
+      openMenu: false
     })
 
     const displayedMenu: ComputedRef<boolean> = computed(() => store.state.profile.access.hasLateralMenu)
 
-    const handleOpenMenu = (miniVariant: boolean) => {
+    const handleOpenMenu = (openMenu: boolean) => {
+      properties.openMenu = openMenu
+    }
+
+    const handleOpenMiniMenu = (miniVariant: boolean) => {
       properties.miniVariant = miniVariant
     }
 
@@ -49,7 +54,8 @@ export default defineComponent({
       properties,
       menu,
       displayedMenu,
-      handleOpenMenu
+      handleOpenMenu,
+      handleOpenMiniMenu
     }
   }
 })

+ 4 - 0
pages/organization.vue

@@ -40,6 +40,10 @@ import {File} from "~/models/Core/File"
 
 export default defineComponent({
   name: 'Organization',
+  middleware({ $ability, redirect }) {
+    if(!$ability.can('display', 'organization_page'))
+      return redirect('/error')
+  },
   setup () {
     const { store } = useContext()
 

+ 9 - 3
pages/subscription.vue

@@ -6,8 +6,6 @@ Page 'Mon abonnement'
 <template>
   <LayoutContainer>
     <v-col cols="12" sm="12" md="12">
-      <h3 class="mb-5">{{ $t('my_subscription') }}</h3>
-
       <v-expansion-panels focusable multiple :value="[0,1,2]">
         <UiExpansionPanel id="informations" icon="fa-info">
           <v-container fluid class="container">
@@ -36,7 +34,7 @@ Page 'Mon abonnement'
                   <tr>
                     <td>{{ $t('remaining_sms_credit') }}</td>
                     <td>
-                      <UiDisplayMobytStatus />
+                      <UiTemplateMobytStatus />
                     </td>
                   </tr>
                 </tbody>
@@ -275,6 +273,10 @@ import { ApiResponse, DolibarrAccount } from '~/types/interfaces'
 
 export default defineComponent({
   name: 'Subscription',
+  middleware({ $ability, redirect }) {
+    if(!$ability.can('display', 'subscription_page'))
+      return redirect('/error')
+  },
   setup () {
     const { store, $dataProvider } = useContext()
     const organizationProfile = ref($organizationProfile(store))
@@ -328,4 +330,8 @@ export default defineComponent({
     padding: 12px 18px;
     vertical-align: top;
   }
+
+  .theme--light.v-data-table > .v-data-table__wrapper > table > tbody > tr:hover:not(.v-data-table__expanded__content):not(.v-data-table__empty-wrapper) {
+    background:none;
+  }
 </style>

BIN
static/favicon/apple-touch-icon-114x114.png


BIN
static/favicon/apple-touch-icon-120x120.png


BIN
static/favicon/apple-touch-icon-144x144.png


BIN
static/favicon/apple-touch-icon-152x152.png


BIN
static/favicon/apple-touch-icon-57x57.png


BIN
static/favicon/apple-touch-icon-72x72.png


BIN
static/favicon/favicon-16x16.png


BIN
static/favicon/favicon-32x32.png


BIN
static/favicon/favicon.ico


BIN
static/favicon/mstile-144x144.png