123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <template>
- <view class="create_group_container">
- <custom-nav-bar title="发起群聊" />
- <u-toast ref="uToast"></u-toast>
- <view class="main">
- <view class="group_base_info">
- <my-avatar
- @click="chooseImage"
- :isGroup="true"
- :src="groupFaceUrl"
- size="44"/>
- <u--input
- placeholder="取个群名称方便后续搜索"
- border="none"
- maxlength="16"
- v-model="groupName"></u--input>
- </view>
- <view class="member_row" @click="toChooseMember">
- <view class="desc_title">
- <text>群成员</text>
- <text>{{ `${checkedMemberList.length}人` }}</text>
- </view>
-
- <view class="member_list">
- <view
- v-for="member in checkedMemberList.slice(0, 5)"
- :key="member.userID"
- class="member_item">
- <my-avatar :src="member.userID" :desc="member.nickname" size="42" />
- </view>
- </view>
- </view>
- </view>
-
- <view class="action_bar">
- <u-button
- :loading="createLoading"
- :disabled="disabledCreate"
- @click="complateCreate"
- type="primary"
- text="完成创建">
-
- </u-button>
- </view>
-
- </view>
- </template>
- <script>
- import { ContactChooseTypes } from "../../../constant";
- import IMSDK, {
- GroupType,
- IMMethods,
- SessionType,
- } from "openim-uniapp-polyfill";
- import CustomNavBar from "../../../components/CustomNavBar/index.vue";
- import MyAvatar from "../../../components/MyAvatar/index.vue";
- import { navigateToDesignatedConversation } from "../../../util/imCommon";
- import { getPurePath, toastWithCallback } from "../../../util/common";
- export default {
- components: {
- CustomNavBar,
- MyAvatar,
- },
- data() {
- return {
- groupName: "",
- groupFaceUrl: "",
- checkedMemberList: [],
- fileList: [],
- createLoading: false,
- };
- },
- computed: {
- disabledCreate() {
- return !this.groupName || this.checkedMemberList.length === 0;
- },
- },
- onLoad(options) {
- const { checkedMemberList } = options;
- this.checkedMemberList = checkedMemberList
- ? JSON.parse(checkedMemberList)
- : [];
- },
- methods: {
- toChooseMember() {
- uni.navigateTo({
- url: `/pages_im/pages/common/contactChoose/index?type=${
- ContactChooseTypes.GetList
- }&checkedUserInfoList=${JSON.stringify(this.checkedMemberList)}`,
- });
- },
- complateCreate() {
- this.createLoading = true;
- const options = {
- adminUserIDs: [],
- memberUserIDs: this.checkedMemberList.map((member) => member.userID),
- groupInfo: {
- groupType: GroupType.WorkingGroup,
- groupName: this.groupName,
- faceURL: this.groupFaceUrl,
- },
- };
- console.log(options);
- IMSDK.asyncApi(IMSDK.IMMethods.CreateGroup, IMSDK.uuid(), options)
- .then(({ data }) => {
- toastWithCallback("创建成功", () =>
- navigateToDesignatedConversation(
- data.groupID,
- SessionType.WorkingGroup,
- true,
- ),
- );
- })
- .catch((err) => {
- console.log(err);
- uni.$u.toast("创建失败");
- })
- .finally(() => (this.createLoading = false));
- },
- getCheckedUsers(list) {
- this.checkedMemberList = [...list];
- },
- chooseImage() {
- uni.chooseImage({
- count: 1,
- sizeType: ["compressed"],
- success: async ({ tempFilePaths }) => {
- const path = tempFilePaths[0];
- const nameIdx = path.lastIndexOf("/") + 1;
- const typeIdx = path.lastIndexOf(".") + 1;
- const fileName = path.slice(nameIdx);
- const fileType = path.slice(typeIdx);
- try {
- const {
- data: { url },
- } = await IMSDK.asyncApi(IMMethods.UploadFile, IMSDK.uuid(), {
- filepath: getPurePath(tempFilePaths[0]),
- name: fileName,
- contentType: fileType,
- uuid: IMSDK.uuid(),
- });
- this.groupFaceUrl = url;
- } catch (error) {
- uni.$u.toast("上传失败");
- }
- },
- fail: function (err) {
- console.log(err)
- if(err.errMsg === 'chooseImage:fail cancel') return
- uni.$u.toast("上传失败");
- },
- });
- },
- },
- };
- </script>
- <style lang="scss">
- .create_group_container {
- @include colBox(false);
- height: 100vh;
- background-color: #f6f6f6;
- .main {
- display: flex;
- flex-direction: column;
- flex: 1;
- }
- .group_base_info {
- @include vCenterBox();
- padding: 44rpx;
- background-color: #fff;
- margin: 36rpx 0;
- .u-input {
- margin-left: 48rpx;
- }
- }
- .member_row {
- padding: 44rpx;
- background-color: #fff;
- color: #999;
- .desc_title {
- @include vCenterBox();
- justify-content: space-between;
- }
- .member_list {
- display: flex;
- flex-wrap: wrap;
- margin-top: 24rpx;
- .member_item {
- @include colBox(false);
- align-items: center;
- margin-right: 12rpx;
- .member_name {
- @include nomalEllipsis();
- max-width: 42px;
- margin-top: 12rpx;
- }
- }
- }
- }
- .action_bar {
- background-color: #fff;
- padding: 44rpx 44rpx;
- }
- }
- </style>
|