7021f2fd创建于 2025年5月14日历史提交
<route lang="json5" type="page">
{
  layout: 'default',
  style: {
    navigationBarTitleText: '',
    navigationStyle: 'custom',
    disableScroll: true, // 微信禁止页面滚动
    'app-plus': {
      bounce: 'none', // 禁用 iOS 弹性效果
    },
  },
}
</route>
<template>
  <PageLayout :navTitle="`${typeLabel}设置`" backRouteName="chat">
    <view class="wrap">
      <wd-cell-group>
        <view @click="handleRename">
          <wd-input
            :label="`${typeLabel}名称`"
            :placeholder="`请输入${typeLabel}`"
            v-model="dataSource.groupName"
            clearable
            readonly
          ></wd-input>
        </view>
        <wd-cell title="消息免打扰" center>
          <wd-switch
            v-model="messageNotDisturb"
            size="20px"
            @change="handleNotDisturbChange"
          ></wd-switch>
        </wd-cell>
        <wd-cell
          v-if="pageType == 'group' && groupLevel == 'leader'"
          title="仅允许群主及管理员邀请新成员"
          center
        >
          <wd-switch v-model="izInvitation" size="20px" @change="handleInvitation"></wd-switch>
        </wd-cell>
      </wd-cell-group>
      <chatTeam
        v-model="authList"
        :pageType="pageType"
        :izInvitation="izInvitation"
        :groupLevel="groupLevel"
        :chatto="chatto"
      ></chatTeam>
      <view class="btn-group">
        <wd-button @click="handleExit">退出{{ pageType == 'group' ? '群聊' : '聊天' }}</wd-button>
        <wd-button type="error" v-if="groupLevel == 'leader'" @click="handleDissolve">
          解散{{ pageType == 'group' ? '群聊' : '聊天' }}
        </wd-button>
      </view>
    </view>
    <wd-toast :selector="selector"></wd-toast>
  </PageLayout>
</template>

<script setup lang="ts">
import { onShow, onHide, onLoad, onReady } from '@dcloudio/uni-app'
import { http } from '@/utils/http'
import { useToast, useMessage, useNotify, dayjs } from 'wot-design-uni'
import { useUserStore } from '@/store/user'
import chatTeam from './components/chatTeam.vue'
import { uuid } from '@/common/uitls'
import { useRouter } from '@/plugin/uni-mini-router'
import { useParamsStore } from '@/store/page-params'

defineOptions({
  name: 'CreateShareFolder',
  options: {
    styleIsolation: 'shared',
  },
})
const selector = uuid()
const toast = useToast(selector)
const userStore = useUserStore()
const paramsStore = useParamsStore()
const router = useRouter()
const pageType = ref('add')
const myuid = ref(userStore.userInfo.userid)
const groupLevel = ref('')
const typeLabel = ref('群组')
// 群组:['member','admin','leader'] 聊天:['member','leader']
// 群组id 或 聊天id
const chatto = ref()
const api = {
  getGroupLevel: '/eoa/im/newApi/getGroupLevel',
  getMembers: '/eoa/im/api/getMembers',
  updateGroup: '/eoa/im/newApi/updateGroup',
  chatDisturb: '/eoa/im/newApi/chatDisturb',
  exitGroup: '/eoa/im/newApi/exitGroup',
  dismissGroup: '/eoa/im/newApi/dismissGroup',
}
const columns = ref([])
const folderName = ref('')
const tenantId = ref('')
const authList = ref([])
const dataSource: any = ref({})
const message = useMessage()

const messageNotDisturb = ref(false)
const izInvitation = ref(false)
const handleNotDisturbChange = ({ value }) => {
  http
    .post(api.chatDisturb, {
      groupId: chatto.value,
      izDisturb: value ? '1' : '0',
      type: pageType.value,
    })
    .then((res: any) => {
      if (res.success) {
        toast.success(res.message)
      } else {
        toast.warning(res.message)
      }
    })
}
const handleInvitation = ({ value }) => {
  http
    .post(api.updateGroup, {
      id: chatto.value,
      izInvitation: value ? '1' : '0',
    })
    .then((res: any) => {
      toast.success(res.message)
    })
}
const handleRename = () => {
  // 群名 群公告仅允许 leader修改
  if (['leader'].includes(groupLevel.value)) {
    message
      .prompt({
        inputValue: dataSource.value.groupName,
        title: `修改${typeLabel.value}名称`,
      })
      .then(({ action, value }) => {
        http.post(api.updateGroup, { id: chatto.value, groupName: value }).then((res: any) => {
          if (res.success) {
            toast.success(`修改${typeLabel.value}名称成功~`)
            dataSource.value.groupName = value as string
            uni.$emit('chat:updateTile', value)
            uni.$emit('myGroup:reload')
          }
        })
      })
      .catch((err) => {})
  }
}
const handleExit = () => {
  message
    .confirm({
      msg: `退出${typeLabel.value}后,聊天列表会消失`,
      title: '是否确认退出?',
    })
    .then(({ action, value }) => {
      http
        .post(api.exitGroup, {
          groupId: chatto.value,
          id: myuid.value,
          type: pageType.value,
        })
        .then((res: any) => {
          if (res.success) {
            uni.$emit('chatList:reload')
            setTimeout(() => {
              router.pushTab({ name: 'message' })
            }, 100)
          } else {
            toast.warning(res.message)
          }
        })
        .catch((err) => {})
    })
}
const handleDissolve = () => {
  message
    .confirm({
      msg: `${typeLabel.value}解散后,将永久删除该聊天。不可恢复`,
      title: '是否确认解散?',
    })
    .then(({ action, value }) => {
      http
        .post(api.dismissGroup, {
          groupId: chatto.value,
          groupName: dataSource.value.groupName,
          id: myuid.value,
          username: userStore.userInfo.realname,
          type: pageType.value,
        })
        .then((res: any) => {
          if (res.success) {
            uni.$emit('chatList:reload')
            setTimeout(() => {
              router.pushTab({ name: 'message' })
            }, 100)
          } else {
            toast.warning(res.message)
          }
        })
        .catch((err) => {})
    })
}
const getGroupLevel = () => {
  http.get(api.getGroupLevel, { groupId: chatto.value, userId: myuid.value }).then((res: any) => {
    if (res.success) {
      groupLevel.value = res.result
    }
  })
}
const getMembers = () => {
  http.get(api.getMembers, { id: chatto.value }).then((res: any) => {
    if (res.code === 0) {
      const { data } = res
      const { eoaChatGroup, list, owner, izDisturb } = data
      authList.value = list
      dataSource.value = eoaChatGroup
      izInvitation.value = eoaChatGroup.izInvitation == '1' ? true : false
      messageNotDisturb.value = izDisturb == '1' ? true : false
    }
  })
}
const init = () => {
  const params = paramsStore.getPageParams('chatSetting')
  chatto.value = params.chatto
  pageType.value = params.type
  typeLabel.value = params.type == 'group' ? '群组' : '聊天'
  getGroupLevel()
  getMembers()
}
init()
</script>

<style lang="scss" scoped>
:deep(.wd-cell-group) {
  background-color: transparent;
  --wot-cell-title-fs: 15px;
  .wd-cell-group__body {
    background-color: transparent;
    padding-top: 15px;
  }
  .wd-input__label,
  .wd-select-picker__label {
    width: 70px !important;
    min-width: auto !important;
    max-width: auto !important;
    color: var(--color-grey);
  }
  .wd-input,
  .wd-cell {
    margin-bottom: 15px;
  }
  .wd-cell {
    --wot-cell-title-color: var(--color-grey);
    .wd-cell__left {
      flex: 2;
    }
    .wd-cell__value {
      display: flex;
      align-items: center;
      flex-direction: row-reverse;
    }
  }
  .wd-select-picker {
    margin: 15px 0;
    .wd-select-picker__cell {
      padding-block: 14px;
    }
  }
}
.btn-group {
  padding-block: 30px;
  display: flex;
  justify-content: space-between;
  width: 80%;
  margin: 0 auto;
  :deep(.wd-button) {
    display: block;
    width: 100%;
    &:nth-child(2) {
      margin-left: 10px;
    }
  }
}
</style>