jwyu 3 жил өмнө
parent
commit
49e41f0bc5

+ 3 - 0
src/layout/component/Aside.vue

@@ -87,6 +87,9 @@ const menuList = reactive([
   width: 100%;
   border: none;
 }
+.el-menu-item:hover{
+  background-color: #f0d6b2;
+}
 // .el-menu-item.is-active {
 //   background-color: rgba(253, 184, 99, 0.1) !important;
 // }

+ 4 - 0
src/style/global.scss

@@ -104,4 +104,8 @@ img{
   &:hover{
       background-color: #fff;
   }
+}
+
+.el-popover.el-popper{
+  min-width: 50px;
 }

+ 70 - 3
src/views/activity/Detail.vue

@@ -174,6 +174,71 @@ const handleApply=()=>{
         }
     }
 }
+
+
+// 会议提醒\报名会议
+import {apiActivityAddRemind,apiActivityCancelRemind,apiActivityRegister,apiActivityCancelRegister} from '@/api/activity.js'
+import {applyAuth} from './applyAuth'
+// 添加/取消提醒
+const handleRemind=()=>{
+    if(info.value.hasRemind ==0){
+        addRemind()
+    }else{
+        cancelRemind()
+    }
+}
+// 添加提醒
+const addRemind=async ()=>{
+    const res=await apiActivityAddRemind({activity_id:Number(info.value.activityId)})
+    if(res.code===200){
+        info.value.hasRemind=1
+        store.commit('updateActivityStatus',{activityId:info.value.activityId,type:'会议'})
+    }
+    applyAuth(res,'会议',2,'活动列表')
+}
+//取消提醒
+const cancelRemind=async ()=>{
+    const res=await apiActivityCancelRemind({activity_id:Number(info.value.activityId)})
+    if(res.code===200){
+        ElMessage('取消提醒成功')
+        info.value.hasRemind=0
+        store.commit('updateActivityStatus',{activityId:info.value.activityId,type:'会议'})
+    }else if(res.code===403){
+        ElMessage.warning(res.msg)
+    }
+}
+
+// 报名/取消报名 线下参会
+const handleRegister=()=>{
+    if(info.value.registerState===0){
+        addRegister()
+    }else{
+        cancelRegister()
+    }
+}
+// 报名
+const addRegister=async ()=>{
+    const res=await apiActivityRegister({activity_id:Number(info.value.activityId)})
+    if(res.code===200){
+        info.value.registerState=1
+        store.commit('updateActivityStatus',{activityId:info.value.activityId,type:'报名'})
+        getDetail()
+    }
+    applyAuth(res,'活动',2,'活动列表')
+}
+//取消报名
+const cancelRegister=async ()=>{
+    const res=await apiActivityCancelRegister({activity_id:Number(info.value.activityId)})
+    if(res.code===200){
+        ElMessage('取消报名成功')
+        info.value.registerState=0
+        store.commit('updateActivityStatus',{activityId:info.value.activityId,type:'报名'})
+        getDetail()
+    }else if(res.code===403){
+        ElMessage.warning(res.msg)
+    }
+}
+
 </script>
 
 <template>
@@ -221,6 +286,7 @@ const handleApply=()=>{
                             <el-popover
                                 placement="right-end"
                                 trigger="hover"
+                                width="90px"
                             >   
                                 <template #reference> {{ item.text }} </template>
                                 <template  #default><span @click="handleCopyTel(item.text)">复制{{item.type=='tel'?'号码':'链接'}}</span></template>
@@ -233,7 +299,7 @@ const handleApply=()=>{
                 <div class="btns">
                     <div class="btn active" v-if="info.reportLink" @click="goDetail">查看相关报告</div>
                     <block v-if="info.activityState === 1">
-                    <div class="btn" v-if="info.firstActivityTypeId === 3">
+                    <div class="btn" v-if="info.firstActivityTypeId === 3" @click="handleRegister">
                         {{
                             info.registerState == 0
                             ? "报名线下参会"
@@ -241,7 +307,7 @@ const handleApply=()=>{
                         }}
                         ({{ info.registeredNum>info.limitPeopleNum?info.limitPeopleNum:info.registeredNum }}/{{ info.limitPeopleNum }})
                     </div>
-                    <div class="btn">{{info.hasRemind == 1 ? "取消会议提醒" : "会议提醒"}}</div>
+                    <div class="btn" @click="handleRemind">{{info.hasRemind == 1 ? "取消会议提醒" : "会议提醒"}}</div>
                     <p style="text-align:center;color:#B6B6B6">(会前15分钟推送微信消息提醒)</p>
                     </block>
                 </div>
@@ -347,7 +413,8 @@ const handleApply=()=>{
             .btns{
                 margin: 36px 0;
                 .btn{
-                    width: 180px;
+                    min-width: 180px;
+                    max-width: 200px;
                     height: 36px;
                     text-align: center;
                     line-height: 36px;

+ 11 - 10
src/views/activity/List.vue

@@ -1,5 +1,5 @@
 <script setup>
-import {reactive,ref, watch} from 'vue'
+import {reactive,ref, watch,onUnmounted} from 'vue'
 import { useRouter } from "vue-router";
 import {formatActivityTime} from './utils'
 
@@ -171,13 +171,12 @@ const handleGetAudio=async (item)=>{
 
 
 // 监听详情的会议提醒\报名状态是否变化
-watch(
-    ()=>store.state.activityItemStatus.activityId,
-    ()=>{
+const subscribeUpdateActivitStatus=store.subscribe((mutation, state) => {
+  if(mutation.type==='updateActivityStatus'){
         console.log('更新列表项状态');
         listData.list.forEach(item=>{
-            if(item.activityId==store.state.activityItemStatus.activityId){
-                if(store.state.activityItemStatus.type=='会议'){
+            if(item.activityId==mutation.payload.activityId){
+                if(mutation.payload.type=='会议'){
                     if(item.hasRemind===0){
                         item.hasRemind=1
                     }else{
@@ -192,11 +191,13 @@ watch(
                 }
             }
         })
-        
-    }
-)
-
+  }
+})
 
+onUnmounted(()=>{
+    // 取消监听 活动报名状态
+    subscribeUpdateActivitStatus()
+})
 
 // 记录滚动条
 import {onActivated} from 'vue'