Browse Source

feat:1.聊天模快的群设置和群二维码

suwenjiang 2 months ago
parent
commit
410dd5cf5f

+ 3 - 3
.env.development

@@ -4,12 +4,12 @@ VITE_APP_ENV=development
 # VITE_APP_BASE_URL=http://101.126.146.250:8082/
 # 测试服
 # 黄文
-VITE_APP_BASE_URL=http://192.168.1.44:8082/
+# VITE_APP_BASE_URL=http://192.168.1.44:8082/
 # 畅哥
-# VITE_APP_BASE_URL=http://192.168.1.38:8082/
+# VITE_APP_BASE_URL=http://192.168.1.38:8082//
 
 # 张维
-# VITE_APP_BASE_URL=http://192.168.1.73:8082/
+VITE_APP_BASE_URL=http://192.168.1.73:8082/
 
 # VITE_APP_BASE_URL=http://192.168.1.204:8082
 VITE_APP_EMOJI_API=https://v.xiaoyaotravel.com/emoji/

+ 71 - 92
src/components/NavigationBar/LeftMenu.vue

@@ -5,22 +5,13 @@
     </div>
     <div class="px-20">
       <NuxtLink v-if="!token" to="/login" class="flex items-center space-x-15">
-        <div
-          class="flex items-center justify-center bg-[#d9d9d9] rounded-full h-60 w-60"
-        >
-          <span
-            class="iconfont icon-profile text-black-6"
-            style="font-size: 30px"
-          ></span>
+        <div class="flex items-center justify-center bg-[#d9d9d9] rounded-full h-60 w-60">
+          <span class="iconfont icon-profile text-black-6" style="font-size: 30px"></span>
         </div>
         <span class="text-black-6 text-base">登录</span>
       </NuxtLink>
 
-      <div
-        @click="handleToProfile"
-        v-else-if="token"
-        class="flex items-center space-x-15"
-      >
+      <div @click="handleToProfile" v-else-if="token" class="flex items-center space-x-15">
         <van-image
           :src="userInfo.headImageUrl || defaultAvatar"
           height="60"
@@ -34,9 +25,7 @@
           </div>
           <div v-if="userInfo.personalSign" class="text-black-6 text-sm">
             <span class="text-black-6">个性签名:</span>
-            <span class="text-black-3 break-all">{{
-              userInfo.personalSign
-            }}</span>
+            <span class="text-black-3 break-all">{{ userInfo.personalSign }}</span>
           </div>
         </div>
       </div>
@@ -72,154 +61,144 @@
       </div>
     </div>
 
-    <van-button
-      v-if="token"
-      round=""
-      @click="handleLogout"
-      plain
-      style="margin: 20px 20px"
-    >
+    <van-button v-if="token" round="" @click="handleLogout" plain style="margin: 20px 20px">
       退出登录
     </van-button>
   </div>
 </template>
 
 <script setup>
-import menu_travel_home from "~/assets/img/navbar/menu_home.png";
-import menu_car from "@/assets/img/navbar/menu_car.png";
-import menu_create_note from "@/assets/img/navbar/menu_create_note.png";
-import menu_house from "@/assets/img/navbar/menu_house.png";
-import menu_labour from "@/assets/img/navbar/menu_loubar.png";
-import menu_tickets from "@/assets/img/navbar/menu_tickets.png";
-import menu_travel_note from "@/assets/img/navbar/menu_travel_note.png";
-import menu_travel_project from "@/assets/img/navbar/menu_travel_project.png";
-import menu_visa from "@/assets/img/navbar/menu_visa.png";
-import menu_profile from "@/assets/img/navbar/menu_profile.png";
-import defaultAvatar from "~/assets/img/default_avatar.png";
-import LeftMenuItem from "./LeftMenuItem.vue";
+import menu_travel_home from '~/assets/img/navbar/menu_home.png'
+import menu_car from '@/assets/img/navbar/menu_car.png'
+import menu_create_note from '@/assets/img/navbar/menu_create_note.png'
+import menu_house from '@/assets/img/navbar/menu_house.png'
+import menu_labour from '@/assets/img/navbar/menu_loubar.png'
+import menu_tickets from '@/assets/img/navbar/menu_tickets.png'
+import menu_travel_note from '@/assets/img/navbar/menu_travel_note.png'
+import menu_travel_project from '@/assets/img/navbar/menu_travel_project.png'
+import menu_visa from '@/assets/img/navbar/menu_visa.png'
+import menu_profile from '@/assets/img/navbar/menu_profile.png'
+import defaultAvatar from '~/assets/img/default_avatar.png'
+import LeftMenuItem from './LeftMenuItem.vue'
 
-const visible = defineModel("visible");
+const visible = defineModel('visible')
 
-const route = useRoute();
+const route = useRoute()
 
-const authStore = useAuthStore();
-const { token } = storeToRefs(authStore);
+const authStore = useAuthStore()
+const { token } = storeToRefs(authStore)
 
-const userInfoStore = useUserInfoStore();
-const { userInfo } = storeToRefs(userInfoStore);
+const userInfoStore = useUserInfoStore()
+const { userInfo } = storeToRefs(userInfoStore)
 
-const menuData = ref([]);
+const menuData = ref([])
 
 const writeNoteMenu = {
-  title: "写游记",
+  title: '写游记',
   icon: menu_travel_note,
-  to: "/note-create",
-};
+  to: '/note-create'
+}
 
 const fixedMenuData = [
   {
-    title: "首页",
+    title: '首页',
     icon: menu_travel_home,
-    to: "/",
+    to: '/'
   },
   {
-    title: "旅行游记",
+    title: '旅行游记',
     icon: menu_create_note,
-    to: "/travel-notes",
+    to: '/travel-notes'
   },
   {
-    title: "旅行项目",
+    title: '旅行项目',
     icon: menu_travel_project,
-    to: "/travel-projects",
+    to: '/travel-projects'
   },
   {
-    title: "签证居留",
+    title: '签证居留',
     icon: menu_visa,
-    to: "/visa",
+    to: '/visa'
   },
   {
-    title: "全球包车",
+    title: '全球包车',
     icon: menu_car,
-    to: "/car",
+    to: '/car'
   },
   {
-    title: "房屋租售",
+    title: '房屋租售',
     icon: menu_house,
-    to: "/house",
-  },
-];
+    to: '/house'
+  }
+]
 
 const profileMenu = [
   {
-    title: "旅游订单",
-    to: "/profile/travel-orders",
+    title: '旅游订单',
+    to: '/profile/travel-orders'
   },
   {
-    title: "签证订单",
-    to: "/profile/visa-orders",
+    title: '签证订单',
+    to: '/profile/visa-orders'
   },
   {
-    title: "包车订单",
-    to: "/profile/car-orders",
+    title: '包车订单',
+    to: '/profile/car-orders'
   },
   {
-    title: "我的游记",
-    to: "/profile/notes",
+    title: '我的游记',
+    to: '/profile/notes'
   },
   {
-    title: "我的收藏",
-    to: "/profile/collection",
+    title: '我的收藏',
+    to: '/profile/collection'
   },
 
   {
-    title: "我的评论",
-    to: "/profile/my-comment",
-  },
-];
+    title: '我的消息',
+    to: '/profile/my-news'
+  }
+]
 
-const isProfileMenuExpanded = ref(true);
+const isProfileMenuExpanded = ref(true)
 
 watch(
   token,
   (val) => {
     if (!val) {
-      menuData.value = fixedMenuData;
+      menuData.value = fixedMenuData
     } else {
-      userInfoStore.getUserInfo();
+      userInfoStore.getUserInfo()
 
-      menuData.value = [
-        ...fixedMenuData.slice(0, 1),
-        writeNoteMenu,
-        ...fixedMenuData.slice(1),
-      ];
+      menuData.value = [...fixedMenuData.slice(0, 1), writeNoteMenu, ...fixedMenuData.slice(1)]
     }
   },
   {
-    immediate: true,
+    immediate: true
   }
-);
+)
 
 function handleClickMenu(item) {
-  visible.value = false;
+  visible.value = false
   navigateTo({
-    path: item.to,
-  });
+    path: item.to
+  })
 }
 
 function handleToProfile() {
-  visible.value = false;
+  visible.value = false
   navigateTo({
-    path: "/profile",
-  });
+    path: '/profile'
+  })
 }
 
 function handleLogout() {
   try {
-    request("/website/web/doLogout", { method: "post" });
+    request('/website/web/doLogout', { method: 'post' })
   } finally {
-    authStore.cleanToken();
-    navigateTo("/");
-    visible.value = false;
+    authStore.cleanToken()
+    navigateTo('/')
+    visible.value = false
   }
 }
 </script>

+ 84 - 0
src/pages/chat/background.vue

@@ -0,0 +1,84 @@
+<template>
+  <div class="w-full h-[100vh] bg-white">
+    <ChatHeaderBar title="设置当前聊天背景"></ChatHeaderBar>
+    <div class="pt-50">
+      <van-cell clickable @click="open" size="large" title="从相册中选择" is-link></van-cell>
+      <van-cell clickable @click="changeGroupBg" size="large" title="设置成默认背景"></van-cell>
+    </div>
+  </div>
+</template>
+<script setup>
+const route = useRoute()
+
+definePageMeta({
+  layout: false
+})
+
+useSeoMeta({
+  title: '我的消息'
+})
+
+const { open, onChange } = useFileDialog({
+  accept: '.png,.png,.jpeg,.JPG,Png '
+})
+
+const bgImage = ref('')
+
+onChange(async (files) => {
+  if (!files.length) return
+
+  const formData = new FormData()
+  formData.append('uploadFile', files[0])
+  formData.append('asImage', true)
+  formData.append('fieldName', 'image')
+  const maxSize = 20 * 1024 * 1024 // 20 MB
+  if (files[0].size > maxSize) {
+    showToast('上传图片过大,请重新上传')
+    return
+  } else {
+    try {
+      showLoadingToast({
+        message: '图片上传中...',
+        duration: 1000000
+      })
+
+      const { data } = await request('/website/tourMessage/upload', {
+        method: 'post',
+        body: formData
+      })
+      bgImage.value = data.fileUrl
+      changeGroupBg()
+      closeToast()
+    } catch (error) {
+      closeToast()
+      showToast('图片上传失败')
+    }
+  }
+})
+
+// 修改背景图
+const changeGroupBg = async () => {
+  try {
+    const res = await request('/website/tourMember/updateSingleTourMember', {
+      method: 'post',
+      body: {
+        groupId: route.query.groupId,
+        groupBackImage: bgImage.value
+      }
+    })
+
+    if (res && res?.success) {
+      navigateTo({
+        path: 'chat/group',
+        query: route.query.groupId,
+        replace: true
+      })
+      showSuccessToast('聊天背景设置成功')
+    }
+    // else {
+    //   showFailToast('聊天背景设置失败')
+    // }
+  } catch (error) {}
+}
+</script>
+<style lang="scss" scoped></style>

+ 55 - 52
src/pages/chat/examine.vue

@@ -4,9 +4,8 @@
     <ChatSearch placeholder="请输入关键词" v-model:searchString="searchString" @search="search" />
 
     <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
-      <ChatEmpty v-if="!list?.length && !loading" image="search" title="暂无数据" />
+      <!-- <ChatEmpty v-if="!addDataList?.length && !loading" image="search" title="暂无数据" /> -->
       <van-list
-        v-else-if="addDataList.length"
         v-model:loading="loading"
         error-text="获取失败"
         finished-text="-- 没有更多了 --"
@@ -14,22 +13,18 @@
         :immediate-check="false"
         @load="getLoadList"
       >
+        <!-- addDataList v-else-if="addDataList.length" -->
+        <!--  v-for="(item, index) in addDataList"
+              :key="item?.id" -->
         <van-checkbox-group v-model="checked">
-          <template v-for="(item, index) in addDataList" :key="item?.id">
-            <van-cell
-              v-for="(item, index) in addDataList"
-              :key="item?.id"
-              center
-              clickable
-              @click="toggle(index)"
-              disabled
-            >
+          <template v-for="(item, index) in 12" :key="item?.id">
+            <van-cell center clickable @click="toggle(item?.id)" disabled>
               <template #icon>
                 <div class="flex justify-start">
                   <van-checkbox
                     checked-color="#FD9A00"
-                    :name="item.id"
-                    :ref="(el) => (checkboxRefs[index] = el)"
+                    :ref="(el) => (checkboxRefs[item?.id] = el)"
+                    :name="item"
                     @click.stop
                   />
 
@@ -40,7 +35,8 @@
               </template>
               <template #title>
                 <div class="flex items-center">
-                  <h1 class="text-xl text-black-3">{{ item?.visaTitle }}</h1>
+                  <!-- <h1 class="text-xl text-black-3">{{ item?.visaTitle }}</h1> -->
+                  <h1 class="text-xl text-black-3">{{ item }}</h1>
                 </div>
               </template>
             </van-cell>
@@ -51,7 +47,7 @@
 
     <div class="fixed bottom-0 left-0 w-full flex justify-between items-center p-16 pb-40 bg-white">
       <van-button
-        @click="handlePass"
+        @click="handleCancel"
         size="large"
         style="color: #ff9300; margin-right: 8px"
         class="font-semibold w-[48%]"
@@ -61,7 +57,7 @@
         取消
       </van-button>
       <van-button
-        @click="handleCancel"
+        @click="handlePass"
         size="large"
         class="font-semibold w-[48%]"
         round
@@ -73,97 +69,104 @@
   </div>
 </template>
 <script setup>
+const route = useRoute()
 definePageMeta({
   layout: false
 })
 
 useSeoMeta({
-  title: '管理员审核成员'
+  title: '群聊'
 })
 
 const refreshing = ref(false)
+
 const loading = ref(false)
 const finished = ref(false)
 const searchString = ref('')
 
-const queryParams = reactive({
-  pageNum: 1,
-  pageSize: 10,
-  searchString: ''
-})
+const checkedId = ref(['1877552279941410817'])
 
 const checked = ref([])
+const checkboxRefs = ref([])
+
 onMounted(() => {
   getList()
 })
 
 const addDataList = ref([])
+const filterDataList = ref([])
 
 const toggle = (index) => {
+  // console.log(index)
   checkboxRefs.value[index].toggle()
+
+  console.log(checked.value, 'checked')
+  console.log(checkboxRefs.value, 'checkboxRefs')
 }
 
 const search = () => {
-  addDataList.value = []
-  queryParams.pageNum = 1
-  queryParams.searchString = searchString.value
-  getList()
+  searchString.value
+  addDataList.value = filterDataList.value.map((item) => {
+    if (item.groupName.includes(searchString.value)) {
+      return item
+    }
+  })
 }
 
 const onRefresh = () => {
-  queryParams.pageNum = 1
-  addDataList.value = []
-  getList()
-}
-
-// 触底加载
-const getLoadList = () => {
-  queryParams.pageNum++
-  finished.value = true
   getList()
 }
 
 // 获取数据
 const getList = async () => {
   try {
-    let url = `/website/tourism/visa/list/page`
+    let url = `/website/tourGroup/getApplicationsList`
 
     loading.value = true
-    let {
-      data: { dataList, totalCount }
-    } = await request(url, {
+    let { data } = await request(url, {
+      method: 'post',
       query: {
-        ...queryParams
+        groupId: route.query.groupId
       }
     })
 
-    if (Array.isArray(dataList) && dataList?.length) {
-      addDataList.value = addDataList.value.concat(dataList)
+    if (Array.isArray(data) && data?.length) {
+      addDataList.value = data
+      filterDataList.value = data
     } else {
       addDataList.value = []
+      filterDataList.value = []
     }
 
     loading.value = false
     refreshing.value = false
-    if (addDataList.value.length >= totalCount) {
-      finished.value = true
-    } else {
-      finished.value = false
-    }
   } catch (err) {
   } finally {
-    refreshing.value = false
     loading.value = false
   }
 }
 
 // 通过成员
-function handlePass() {}
+async function handlePass() {
+  let { data } = await request('/website/tourGroup/applyIsPass', {
+    query: {
+      id: checkedId.value,
+      isPass: 2 //2 同意 3 不同意
+    }
+  })
+
+  if (data) {
+    showSuccessToast('审核通过')
+  } else {
+    showSuccessToast('审核失败')
+  }
+}
 // 取消
 function handleCancel() {
-  navigateTo('/chat/group', {
-    replace: true
-  })
+  // checked.value = []
+  // navigateTo('/chat/group', {
+  //   replace: true
+  // })
 }
 </script>
 <style lang="scss" scoped></style>

+ 8 - 1
src/pages/chat/group.vue

@@ -20,7 +20,10 @@
     </div>
 
     <van-pull-refresh v-model="loading" @refresh="onRefresh">
-      <div style="height: calc(100vh - 50px)" class="w-full px-12 pt-60 border bg-[#F3F3F3]">
+      <div
+        style="height: calc(100vh - 50px)"
+        :class="`w-full px-12 pt-60 border ${bg ? `bg-[url(${bg})] bg-cover` : 'bg-[#F3F3F3]'} `"
+      >
         <ChatItem></ChatItem>
         <!-- <div style="width: calc(100vw - 74px)" class="flex justify-start items-start">
           <div class="shrink-0 w-40 h-40 border rounded-[4px]">
@@ -58,6 +61,10 @@ const idInfo = reactive({
   groupId: computed(() => route.query.groupId ?? ''),
   userId: computed(() => route.query.userId ?? '')
 })
+
+// 背景图
+const bg = ref('')
+
 const messageData = reactive({
   pageNum: 1,
   pageSize: 10,

+ 14 - 6
src/pages/chat/qr-code.vue

@@ -3,13 +3,21 @@
     <ChatHeaderBar title="群聊二维码" />
     <div class="h-100"></div>
 
-    <!-- <div class="w-60 h-60 mx-auto border"></div> 
-    :list="queueParmars?.groupAvatar" 
-    -->
-    <ChatGroupAvatar></ChatGroupAvatar>
+    <div class="w-60 h-60 mx-auto rounded-full border overflow-hidden">
+      <img
+        class="w-full h-full object-cover"
+        v-if="queueParmars?.groupAvatar"
+        :src="queueParmars.groupAvatar"
+        alt=""
+      />
+      <img class="w-full h-full object-cover" v-else src="~/assets/img/default_avatar.png" alt="" />
+    </div>
+    <!-- :list="queueParmars?.groupAvatar"  -->
+
+    <!-- <ChatGroupAvatar class="mx-auto"></ChatGroupAvatar> -->
 
     <h1 title="" class="w-300 mt-16 mb-18 text-center mx-auto text-xl text-black-3 font-semibold">
-      群聊:{{ queueParmars?.groupNickname }}
+      群聊:{{ queueParmars?.groupName }}
     </h1>
 
     <div class="relative mb-21 w-220 h-220 bg-white rounded-lg mx-auto box-border">
@@ -40,7 +48,7 @@ const QRURI = ref(`${import.meta.env.VITE_APP_BASE_URL}website/tourGroup/getGrou
 const qrCode = ref('')
 const queueParmars = reactive({
   groupId: computed(() => route.query?.groupId ?? ''),
-  groupNickname: computed(() => route.query?.groupNickname ?? ''),
+  groupName: computed(() => route.query?.groupName ?? ''),
   groupAvatar: computed(() => route.query?.groupAvatar ?? '')
 })
 

+ 18 - 37
src/pages/chat/set-sub/index.vue

@@ -84,37 +84,20 @@ const route = useRoute()
 const tab = useRouteQuery('tab')
 
 const queryParams = reactive({
+  groupId: computed(() => route.query.groupId ?? ''),
   pageNum: 1,
-  pageSize: 20
+  pageSize: 20,
+  searchMessage: ''
 })
 
 const loading = ref(false)
 const refreshing = ref(false)
 const searchString = ref('')
-// const groupRole = computed(() => route.query?.groupRole ?? '')
 
 onMounted(() => {
   getList()
 })
 
-// const tabs = [
-//   {
-//     label: '群成员',
-//     name: 'member',
-//     to: ''
-//   },
-//   {
-//     label: '添加成员',
-//     name: 'addMember',
-//     to: ''
-//   },
-//   {
-//     label: '聊天记录',
-//     name: 'records',
-//     to: ''
-//   }
-// ]
-
 // 全部成员
 const list = ref([])
 
@@ -122,6 +105,7 @@ const title = ref('聊天记录')
 
 // 搜索
 const search = () => {
+  queryParams.searchMessage = searchString.value
   queryParams.pageNum = 1
   list.value = []
   getList()
@@ -134,38 +118,35 @@ const onRefresh = () => {
   getList()
 }
 
-// 获取群设置的配置信息
+// 获取聊天记录
 const getList = async () => {
   try {
     loading.value = true
-    let data = {}
     if (tab == 'records') data.records = searchString.value
-
-    let {
-      data: { dataList, totalCount }
-    } = await request('/website/tourism/visa/list/page')
-    // // query: {
-    //   groupId: '0',
-    //   ...data
-    // }
-
-    if (Array.isArray(dataList) && dataList?.length) {
-      list.value.unshift(...dataList)
+    let { data } = await request('/website/tourMessage/getMessageByGroupId', {
+      query: {
+        ...queryParams
+      }
+    })
+
+    if (Array.isArray(data.data) && data?.data?.length) {
+      list.value = list.value.concat(...data.data)
     } else {
       list.value = []
     }
-
+    refreshing.value = false
     loading.value = false
   } catch (err) {
   } finally {
+    refreshing.value = false
     loading.value = false
   }
 }
 
 // 是否是普通成员
-const isRankAndFiler = (role) => {
-  return role == 1 || role == 2 ? true : false
-}
+// const isRankAndFiler = (role) => {
+//   return role == 1 || role == 2 ? true : false
+// }
 
 definePageMeta({
   layout: false

+ 161 - 86
src/pages/chat/set.vue

@@ -42,20 +42,18 @@
             </div>
             <p class="w-full line-clamp-1 lin text-sm text-center text-black-6">添加成员</p>
           </van-col>
-          <van-col v-if="isRankAndFiler(userGroupData?.groupRemark)" span="4 mb-12 mr-10">
+          <van-col v-if="isRankAndFiler(userGroupData?.groupRole)" span="4 mb-12 mr-10">
             <div
               class="w-40 h-40 rounded-full flex justify-center items-center bg-[#F3F3F3] border mx-auto overflow-hidden mb-4"
             >
-              <span class="iconfont icon-minus text-black-6" style="font-size: 24px"></span>
-
-              <!-- <van-icon name="minus" size="24" /> -->
+              <van-icon name="minus" size="24" color="#666666" />
             </div>
             <p class="w-full line-clamp-1 lin text-sm text-center text-black-6">删除成员</p>
           </van-col>
         </van-row>
 
-        <!-- showBottom  @click="showBottom = true"  v-if="setData?.groupMember?.lenght == 15"   @click="navigateTo('/chat/group-member')"-->
         <div
+          v-if="changeState(userGroupData?.groupRole) && setData?.memberList?.lenght == 13"
           @click="navigateTo('/chat/group-member')"
           class="w-full flex pb-5 box-border justify-center items-center leading-3xl text-sm text-black"
         >
@@ -68,14 +66,26 @@
         <van-cell
           size="large"
           @click="
-            openDialog({
-              // title: setData?.groupName ? '修改群名称' : '添加群名称',
-              title: '修改群名称',
-              value: setData?.groupName,
-              isRemark: 0,
-              placeholder: '未命名',
-              subTitle: '最多不能超过12个字'
-            })
+            changeState(userGroupData?.groupRole)
+              ? openDialog({
+                  title: '修改群名称',
+                  value: setData?.groupName,
+                  isRemark: 0,
+                  placeholder: '未命名',
+                  subTitle: '最多不能超过12个字'
+                })
+              : showDialog({
+                  title: '群名称',
+                  message: setData.groupName,
+                  confirmButtonColor: '#FF9300',
+                  showCancelButton: false
+                })
+                  .then(() => {
+                    // on close
+                  })
+                  .catch(() => {
+                    // on cancel
+                  })
           "
           center
           is-link
@@ -94,7 +104,7 @@
               query: {
                 groupName: setData.groupName,
                 groupAvatar: setData.groupAvatar,
-                groupId: setData?.groupId
+                groupId: setData?.id
               }
             })
           "
@@ -111,13 +121,13 @@
         </van-cell>
 
         <van-cell
-          :clickable="isRankAndFiler(userGroupData?.groupRemark)"
+          :clickable="isRankAndFiler(userGroupData?.groupRole)"
           @click="handleAnnouncement"
           size="large"
           center
           is-link
           title="群公告"
-          :value="setData?.groupAnnouncement ? '' : '未设置'"
+          :value="setData?.groupNotice ? '' : '未设置'"
         ></van-cell>
 
         <van-cell size="large" center>
@@ -132,26 +142,13 @@
         </van-cell>
         <van-cell
           @click="
-            changeState(userGroupData?.groupRole)
-              ? openDialog({
-                  title: '群备注',
-                  value: userGroupData?.remark,
-                  isRemark: 1,
-                  placeholder: '备注',
-                  subTitle: '群备注仅自己可见'
-                })
-              : showDialog({
-                  title: '群名称',
-                  message: setData.groupName,
-                  confirmButtonColor: '#FF9300',
-                  showCancelButton: false
-                })
-                  .then(() => {
-                    // on close
-                  })
-                  .catch(() => {
-                    // on cancel
-                  })
+            openDialog({
+              title: '群备注',
+              value: userGroupData?.groupRemark, //groupRemark
+              isRemark: 1,
+              placeholder: '备注',
+              subTitle: '群备注仅自己可见'
+            })
           "
           size="large"
           is-link
@@ -160,14 +157,14 @@
         >
           <template #value>
             <p class="w-full line-clamp-1">
-              {{ userGroupData?.remark ? userGroupData?.remark : '未设置' }}
+              {{ userGroupData?.groupRemark ? userGroupData?.groupRemark : '未设置' }}
             </p>
           </template>
         </van-cell>
       </van-cell-group>
 
       <van-cell-group
-        v-if="isRankAndFiler(userGroupData?.groupRemark)"
+        v-if="isRankAndFiler(userGroupData?.groupRole)"
         style="margin-bottom: 12px"
         inset
       >
@@ -177,7 +174,7 @@
             <span>开启后,在群聊广场和个人主页</span>
           </template>
           <template #right-icon>
-            <van-switch v-model="showHomePage" active-color="#FF9300" inactive-color="#dcdee0" />
+            <van-switch v-model="isPublic" active-color="#FF9300" inactive-color="#dcdee0" />
           </template>
         </van-cell>
         <van-cell size="large" center title="群聊邀请确认">
@@ -188,7 +185,7 @@
             </span>
           </template>
           <template #right-icon>
-            <van-switch v-model="checked" active-color="#FF9300" inactive-color="#dcdee0" />
+            <van-switch v-model="isNeedConfirm" active-color="#FF9300" inactive-color="#dcdee0" />
           </template>
         </van-cell>
 
@@ -197,7 +194,7 @@
             navigateTo({
               path: '/chat/examine',
               query: {
-                groupId: setData?.groupId
+                groupId: setData?.id
               }
             })
           "
@@ -238,7 +235,7 @@
               path: '/chat/set-sub',
               query: {
                 tab: 'records',
-                groupId: setData?.groupId
+                groupId: setData?.id
               }
             })
           "
@@ -253,22 +250,41 @@
           <template #right-icon>
             <van-switch
               v-model="isNotDisturb"
-              @change="
-                (val) => {
-                  isNotDisturb = val
-                }
-              "
+              @click="handleIsNotDisturb"
               active-color="#FF9300"
               inactive-color="#dcdee0"
             />
+            <!-- @change="
+                (val) => {
+                  isNotDisturb = val
+                }
+              " -->
           </template>
         </van-cell>
         <van-cell size="large" is-link center title="置顶聊天">
           <template #right-icon>
-            <van-switch v-model="isTop" active-color="#FF9300" inactive-color="#dcdee0" />
+            <van-switch
+              v-model="isTop"
+              @click="handleIsTop"
+              active-color="#FF9300"
+              inactive-color="#dcdee0"
+            />
           </template>
         </van-cell>
-        <van-cell size="large" is-link center title="设置当前聊天背景"></van-cell>
+        <van-cell
+          @click="
+            navigateTo({
+              path: '/chat/background',
+              query: {
+                groupId: setData?.id
+              }
+            })
+          "
+          size="large"
+          is-link
+          center
+          title="设置当前聊天背景"
+        ></van-cell>
       </van-cell-group>
 
       <van-cell-group style="margin-bottom: 12px" inset>
@@ -277,7 +293,7 @@
             navigateTo({
               path: '/chat/report',
               query: {
-                groupId: setData?.groupId,
+                groupId: setData?.id,
                 objectType: 2
               }
             })
@@ -338,15 +354,16 @@ useSeoMeta({
 })
 
 onMounted(() => {
-  // userInfoStore.getUserInfo()
+  userInfoStore.getUserInfo()
   getGroupSetData()
 })
+// computed(() => route.query.userId ?? '')
 
 let setData = reactive({
-  groupId: computed(() => route.query.groupId ?? ''),
-  userId: computed(() => route.query.userId ?? '')
-  // groupRole: 1,
-  // groupAnnouncement:
+  // groupId: computed(() => route.query.groupId ?? ''),
+  userId: userInfo.value.userId
+  // groupRole: 1
+  // groupNotice:
   //   '群公告模版 1.本群提倡友好理性交流,鼓励群友多发言,多互动 2.禁止无意义刷屏、发送广告信息以及谩骂等不良消息 3.为了保证群活跃不经常发言的群友,可能会被定时清理出群'
 })
 
@@ -358,8 +375,11 @@ const userGroupData = ref(null)
 
 const groupName = ref('')
 
+// isPublic 是否公开展示 0隐藏 1公开。
+// isNeedConfirm 是否开启群聊邀请确认 0不开启 1开启。
 // 是否显示到个人主页
-const showHomePage = ref(false)
+const isPublic = ref(false)
+const isNeedConfirm = ref(false)
 const isNotDisturb = ref(false)
 const isTop = ref(false)
 
@@ -423,6 +443,19 @@ const changeTourMember = async (body) => {
       method: 'post',
       body
     })
+    console.log(data, '修改自己在群里的备注')
+
+    if (data) {
+      //修改成功
+      if ((Object.keys(body)[1] = 'remark')) {
+        userGroupData.groupRemark = groupName.value
+      } else {
+        userGroupData[Object.keys(body)[1]] = groupName.value
+      }
+      showSuccessToast('操作成功')
+    } else {
+      // showSuccessToast('操作失败')
+    }
   } catch (error) {}
 }
 
@@ -430,34 +463,75 @@ const cancel = () => {
   showDialog.value = false
 }
 
-// 修改群名称
-const handleUpdGroupNickname = () => {}
-
 // 改变状态的公用方法
 const changeState = (state) => {
   if (state == 1) return true
   if (state == 0) return false
 }
 
+const changeStateBoolean = (state) => {
+  if (state) {
+    return 1
+  } else {
+    return 0
+  }
+}
+
+// 是否置顶
+const handleIsTop = () => {
+  handleBoolean({ isTop: changeStateBoolean(isTop.value) })
+}
+
+// 是否免打扰
+const handleIsNotDisturb = () => {
+  handleBoolean({ isNotDisturb: changeStateBoolean(isNotDisturb.value) })
+}
+
+const handleBoolean = async (params) => {
+  try {
+    let { data } = await request('/website/tourMember/updateSingleTourMember', {
+      method: 'post',
+      body: {
+        groupId: userGroupData.value.groupId,
+        ...params
+      }
+    })
+    if (data) {
+      if (Object.keys(params)[0] == 'isTop') {
+        isTop.value ? showToast('已置顶') : showToast('置顶取消')
+      }
+      if (Object.keys(params)[0] == 'isNotDisturb') {
+        isNotDisturb.value ? showToast('已开启面打扰') : showToast('已关闭面打扰')
+      }
+    }
+  } catch (error) {}
+}
 // 获取群设置的配置信息
 const getGroupSetData = async () => {
   const { data } = await request('/website/tourGroup/getGroupInfoAndMemberByGroupId', {
     query: {
-      groupId: setData.groupId
+      groupId: route.query.groupId
     }
   })
   if (typeof data == 'object') {
     setData = data
+    console.log(setData.id, 'setDataid')
+    console.log(setData, 'setData')
+
     console.log(data.memberList, '555')
-    console.log(userInfo.value.userId, '555')
+    console.log(userInfo.value.userId, 'userInfo')
 
     userGroupData.value = data.memberList.find((item) => item.userId == userInfo.value.userId)
+    console.log()
+
     console.log(userGroupData.value, '4444')
+    console.log(userGroupData.value.groupRole, 'userGroupData groupRole')
+
+    isPublic.value = changeState(setData.isPublic)
+    isNeedConfirm.value = changeState(setData.isNeedConfirm)
 
-    userGroupData.value.isNotDisturb == 0
-      ? (isNotDisturb.value = false)
-      : (isNotDisturb.value = true)
-    userGroupData.value.isTop == 0 ? (isTop.value = false) : (isTop.value = true)
+    isNotDisturb.value = changeState(userGroupData.value?.isNotDisturb)
+    isTop.value = changeState(userGroupData.value.isTop)
   }
 }
 
@@ -480,25 +554,35 @@ const clearChatHistory = () => {
     confirmButtonColor: '#FF9300'
   })
     .then(async () => {
-      const { data } = await request('/tourMessage/clearGroupMessage', {
-        query: {
-          groupId: setData?.groupId
-        }
-      })
-      if (data) {
-        return
-      } else {
-        return
-      }
+      try {
+        const res = await request('/website/tourMessage/clearGroupMessage', {
+          query: {
+            groupId: setData?.id
+          }
+        })
+        if (res && res?.success) return
+      } catch (error) {}
     })
     .catch(() => {})
 }
 
 // 点击公告
 const handleAnnouncement = () => {
-  console.log(!isRankAndFiler(userGroupData?.groupRemark))
+  console.log(userGroupData.value?.groupRole, 'userGroupData?.groupRole')
+  console.log(!isRankAndFiler(3))
+  //  && !setData?.groupNotice
+  if (isRankAndFiler(userGroupData.value?.groupRole)) {
+    // navigateTo({
+    //   path: '/chat/announcement',
+    //   query: {
+    //     groupId: setData?.id,
+    //     userId: userInfo.value.userId,
+    //     groupRole: userGroupData.value?.groupRole
+    //   }
+    // })
+  }
 
-  if (!isRankAndFiler(userGroupData?.groupRemark) && !setData?.groupAnnouncement) {
+  if (!isRankAndFiler(userGroupData.value?.groupRole)) {
     showConfirmDialog({
       width: 260,
       message: `只有群主${setData?.groupName ? setData?.groupName : ''}或群管理员才能修改公告`,
@@ -508,15 +592,6 @@ const handleAnnouncement = () => {
     }).then(() => {})
     return
   }
-
-  navigateTo({
-    path: '/chat/announcement',
-    query: {
-      groupId: setData?.groupId,
-      userId: userInfo.value.userId,
-      groupRole: userGroupData?.groupRemark
-    }
-  })
 }
 
 // 退出群聊

+ 1 - 1
src/pages/chat/sweep.vue

@@ -95,7 +95,7 @@ const handleQrcode = () => {
           (decodedText, decodedResult) => {
             let groupId
             if (decodedText) {
-              groupId = decodedText.split('?')[1].split('=')[1]
+              groupId = decodedText.split('?')[1].split('=')[1].split('&')[0]
 
               // 扫描结果
               results.value = {

+ 9 - 7
src/pages/profile/my-news/index.vue

@@ -131,7 +131,9 @@
         <template v-for="(item, index) in pinnedList" :key="index">
           <ProfileNewsGroupChat
             :item-data="{ title: item }"
-            @on-chat-page="onChatPage('/chat/group', { userId: userInfo.userId, groupId: '2' })"
+            @on-chat-page="
+              onChatPage('/chat/group', { userId: userInfo.userId, groupId: '1877542109622431746' })
+            "
             @on-no-bother="noBother(item)"
             @on-conv-delete="convDelete()"
           />
@@ -179,7 +181,7 @@ const actionsList = [
   { text: '添加用户', icon: userAdd }
 ]
 
-const websocketStore = useWebSocketStore()
+const chatStore = useChatStore()
 
 const userInfoStore = useUserInfoStore()
 const { userInfo } = storeToRefs(userInfoStore)
@@ -193,25 +195,25 @@ useSeoMeta({
 })
 
 // 获取连接状态
-const isConnected = computed(() => websocketStore.isConnected)
+const isConnected = computed(() => chatStore.isConnected)
 
 // 连接 WebSocket
 const connectSocket = () => {
-  websocketStore.connect(`?userId=${userInfo.value.userId}`)
+  chatStore.connect(`?userId=${userInfo.value.userId}`)
 }
 
 // 发送测试消息
 const sendTestMessage = () => {
-  websocketStore.sendMessage({ message: 'Hello WebSocket!' })
+  chatStore.sendMessage({ message: 'Hello WebSocket!' })
 }
 
 // 断开 WebSocket
 const disconnectSocket = () => {
-  websocketStore.disconnect()
+  chatStore.disconnect()
 }
 
 // 消息历史
-const messages = computed(() => websocketStore.wsService.value?.messages || [])
+const messages = computed(() => chatStore.wsService.value?.messages || [])
 
 const finished = ref(false)
 

+ 1 - 1
src/stores/useWebsoket.js → src/stores/chat.js

@@ -4,7 +4,7 @@ import { skipHydrate } from 'pinia'
 // const userInfoStore = useUserInfoStore()
 // const { userInfo } = storeToRefs(userInfoStore)
 // userInfoStore.getUserInfo()
-export const useWebSocketStore = defineStore('websocket', () => {
+export const useChatStore = defineStore('chat', () => {
   const startUrl = ref('wss://your-websocket-url')
 
   const message = ref(null)