bach преди 1 година
родител
ревизия
109705d11a
променени са 7 файла, в които са добавени 127 реда и са изтрити 12 реда
  1. 4 4
      src/App.vue
  2. 7 0
      src/assets/layout.scss
  3. 19 0
      src/assets/main.scss
  4. 12 6
      src/components/MapConcernements.vue
  5. 75 0
      src/components/RecitPlayer.vue
  6. 9 0
      src/stores/concernements.js
  7. 1 2
      src/views/Concernement.vue

+ 4 - 4
src/App.vue

@@ -22,9 +22,9 @@ export default {
   },
   computed: {
     ...mapState(UserStore,['isloggedin']),
-    ...mapState(ConcernementsStore,['concernements']),
-    ...mapState(ConcernementsStore,['concernementsByID']),
-    ...mapState(ConcernementsStore,['opened'])
+    ...mapState(ConcernementsStore,['concernements',
+                                    'concernementsByID',
+                                    'opened_recit'])
   },
   methods: {
     ...mapActions(ConcernementsStore,['loadConcernements']),
@@ -63,7 +63,7 @@ export default {
         />
       </template>
     </MapConcernements>
-    <div id="content">
+    <div id="content" :class="{'recit-opened':opened_recit}">
       <RouterView />
     </div>
   </div>

+ 7 - 0
src/assets/layout.scss

@@ -97,5 +97,12 @@ html,body{
     padding: 0.5rem;
   }
 
+  #recit-player{
+    box-sizing: border-box;
+    position: absolute;
+    bottom: 0; right: 0;
+    padding: 0.5rem;
+    z-index: 100;
+  }
 }
 

+ 19 - 0
src/assets/main.scss

@@ -404,6 +404,25 @@ body{
 
       
      
+    }
+    &.recit-opened section.concernement {
+      padding-bottom: 4rem;
+    }
+  }
+
+  #recit-player{
+    --plyr-color-main: #01ffe2;
+    --plyr-control-icon-size: 14px;
+    --plyr-audio-controls-background: rgba(255,255,255,0.4);
+    --plyr-control-spacing: 4px;
+    --plyr-range-track-height: 2px;
+    // --plyr-control-radius: 10px;
+    >div.plyr{
+      width:450px;
+      >div.plyr__controls{
+        border-radius: 3px;
+        // border: #fff 1px solid;
+      }
     }
   }
 

+ 12 - 6
src/components/MapConcernements.vue

@@ -17,6 +17,7 @@ import { ConcernementsStore } from '@/stores/concernements'
 import { CommonStore } from '@/stores/common'
 
 import ConcernementMapPopup from '@components/ConcernementMapPopup.vue';
+import RecitPlayer from '@components/RecitPlayer.vue';
 
 // import iconTerraindevie from "@/assets/icons/terraindevie.svg"
 // import iconProximite from "@/assets/icons/proximite.svg"
@@ -52,10 +53,12 @@ export default {
     }
   },
   computed: {
-    ...mapState(ConcernementsStore,['map_mode']),
-    ...mapState(ConcernementsStore,['concernements']),
-    ...mapState(ConcernementsStore,['concernementsByID']),
-    ...mapState(ConcernementsStore,['opened_concernement']),
+    ...mapState(ConcernementsStore,['map_mode',
+                                    'concernements',
+                                    'concernementsByID',
+                                    'opened_concernement',
+                                    'opened_recit'
+                                  ]),
     ...mapState(CommonStore,['map_item_ray']),
     ...mapState(CommonStore,['hover_elmt']),
     ...mapState(CommonStore,['paper_symbol_definitions'])
@@ -952,7 +955,8 @@ export default {
   },
   components: {
     MapBackground,
-    ConcernementMapPopup
+    ConcernementMapPopup,
+    RecitPlayer
   }
 }
 
@@ -1020,10 +1024,12 @@ export default {
       </li>
     </ul>
   </nav>
+  <RecitPlayer v-if="opened_recit" />
   <ConcernementMapPopup
     v-if="hover_elmt && hover_elmt.type !== 'doleance_step' && !hover_elmt.no_popup"
     :infos="hover_elmt"
-  />  
+  />
+
 </template>
 
 <style lang="css" scoped>

+ 75 - 0
src/components/RecitPlayer.vue

@@ -0,0 +1,75 @@
+<script>
+
+import { mapActions, mapState } from 'pinia'
+import { ConcernementsStore } from '@stores/concernements'
+import { CommonStore } from '@/stores/common'
+
+export default {
+  props: [],
+  data() {
+    return {
+      plyr_options: {
+        controls: ['play', 'progress', 'current-time', 'mute', 'volume']
+      }
+    }
+  },
+  computed: {
+    ...mapState(ConcernementsStore,['opened_recit', 'recit_player']),
+    // ...mapState(CommonStore,['hover_elmt'])
+  },
+  mounted() {
+    console.log('RecitPlayer mounted', this.$refs);
+    this.setRecitPlayer(this.$refs.plyr_player.player)
+  },
+  watch: {
+    opened_recit: {
+      handler (n,o){
+        console.log('recitPlayer watch opened_recit o, n', o, n);
+        let fadeInterval = setInterval(()=>{
+          if (this.recit_player.volume > 0) {
+            // console.log(`fading volume:${this.recit_player.volume}`);
+            this.recit_player.volume -= 0.8;
+          }else{
+            // console.log(`switching source`);
+            this.recit_player.source = {
+              type: 'audio',
+              sources: [
+                {
+                  src: n.file.url,
+                  type: n.file.filemine,
+                }
+              ]
+            }
+            this.recit_player.volume = 1;
+            this.recit_player.play();
+            clearInterval(fadeInterval);
+          }
+        }, 1);
+        
+      },
+      deep: true
+    }
+  },
+  methods: {
+    ...mapActions(ConcernementsStore, ['setRecitPlayer']),
+    // setPlayer(player){
+    //   console.log('setPlayer', player);
+    //   this.setRecitPlayer(player);
+    // }
+  },
+
+}
+</script>
+
+
+<template>
+    <aside
+      id="recit-player">
+      <vue-plyr ref="plyr_player" :options="plyr_options">
+          <audio playsinline autoplay>
+            <source :src="opened_recit.file.url" :type="opened_recit.file.filemime" />
+          </audio>
+      </vue-plyr>
+    </aside>
+
+</template>

+ 9 - 0
src/stores/concernements.js

@@ -23,6 +23,8 @@ export const ConcernementsStore = defineStore({
     allBesoinsById: {},
     opened_concernement: false,
     opened_entite_id: null,
+    opened_recit: false,
+    recit_player: null,
     ct_concernement: {},
     ct_entite: {},
     ct_cercle_politique: {},
@@ -235,6 +237,9 @@ export const ConcernementsStore = defineStore({
         c.opened = this.concernements[i].opened = this.concernementsByID[c.id].opened = state;
         if (state) {
           this.opened_concernement = c;
+          if (c.has_recit) {
+            this.opened_recit = c.recit;
+          }
           // console.log('openCloseConcernements', this.opened_concernement.opened);
         }
       });
@@ -281,6 +286,10 @@ export const ConcernementsStore = defineStore({
         field: field,
         field_index: index
       };
+    },
+    setRecitPlayer (player) {
+      console.log('concernement store setRecitPlayer', player);
+      this.recit_player = player;
     }
   }
 })

+ 1 - 2
src/views/Concernement.vue

@@ -102,8 +102,7 @@ export default {
   <section v-if="opened_concernement" class="concernement">
     <TerrainDeVie v-if="map_mode === 'terraindevie' || map_mode === 'action'" :id="id" :eid="eid" :entite="entite"/>
     <PuissanceAgir v-if="map_mode === 'puissancedagir'" :id="id"/>
-    <Doleancer v-if="map_mode === 'doleancer'" :id="id"/>
-    
+    <Doleancer v-if="map_mode === 'doleancer'" :id="id"/>    
   </section>
 </template>