搜索结果列表页面开发
This commit is contained in:
274
src/views/Org/hooks/orgInfo.ts
Normal file
274
src/views/Org/hooks/orgInfo.ts
Normal file
@@ -0,0 +1,274 @@
|
||||
import { onMounted, reactive, ref, computed, watch } from 'vue';
|
||||
import { orgInfoStore, type OrgInfo } from '@/stores/Org/index';
|
||||
import { reqCatch } from '@/utils/catch';
|
||||
import { getOrg, getOrgLanguages, getOrgMemberList, checkUserCreateOrg } from '@/api/org/index';
|
||||
import { joinCommunity, unJoinCommunity, getArticle, getCommunityAttentionStatus, getActivity, getAdvertisement, getLoginState, getArticleAndFansTotle } from '@/api/org/devIndex';
|
||||
import { discussList } from '@/api/discussion';
|
||||
import * as types from '@/api/org/types';
|
||||
import { useAccountStore } from '@/stores/user';
|
||||
|
||||
// 封装组织模块公共的方法
|
||||
export const getOrgInfo = () => {
|
||||
// 组织数据
|
||||
const orgStore = orgInfoStore();
|
||||
// 组织path
|
||||
const namespace = computed(() => {
|
||||
return orgStore.orgInfo.full_path;
|
||||
});
|
||||
const loadingStatus = reactive<Record<string, boolean>>({
|
||||
reposLoading: false,
|
||||
articleLoading: true,
|
||||
activityLoading: true,
|
||||
dynamicLoading: false
|
||||
});
|
||||
const orgData = ref<OrgInfo>({});
|
||||
const getOrgData = async(orgName: string) => {
|
||||
const params = {
|
||||
orgId: orgName || namespace.value,
|
||||
moduleSetting: true,
|
||||
with_full_path: true
|
||||
};
|
||||
const { data, error } = await reqCatch(getOrg, params);
|
||||
if (!error && data) {
|
||||
orgData.value = data.data;
|
||||
orgStore.setOrgInfo(orgData.value);
|
||||
}
|
||||
};
|
||||
|
||||
// 判断用户是否关注组织
|
||||
const user = useAccountStore();
|
||||
const isFollow = ref<boolean>(false);
|
||||
const checkHasFollowedFun = async() => {
|
||||
const params = {
|
||||
username: user.accountInfo.username,
|
||||
otherUsername: orgStore.orgInfo.full_path,
|
||||
followType: 1 // 0-用户 1-组织
|
||||
};
|
||||
const res = await reqCatch(getCommunityAttentionStatus, params);
|
||||
if (!res.error) {
|
||||
const { data } = res.data;
|
||||
isFollow.value = data;
|
||||
orgStore.setFollow(isFollow.value);
|
||||
}
|
||||
};
|
||||
|
||||
// 关注社区事件
|
||||
const followDevCommunity = async(val: boolean) => {
|
||||
// const { userInfo } = useUserInfo();
|
||||
// if (!orgStore.communityInfo.ns_id) {
|
||||
// return Message.warning({
|
||||
// message: 'devpress社区暂未创建!'
|
||||
// });
|
||||
// };
|
||||
if (orgStore.isDevLogin) {
|
||||
if (val) {
|
||||
const params = {
|
||||
unfollowUsername: namespace.value,
|
||||
followType: 1
|
||||
};
|
||||
const { data, error } = await reqCatch(unJoinCommunity, params);
|
||||
if (!error) {
|
||||
isFollow.value = false;
|
||||
orgStore.setFollow(isFollow.value);
|
||||
}
|
||||
} else {
|
||||
const params = {
|
||||
followedUsername: namespace.value,
|
||||
followType: 1
|
||||
};
|
||||
const { data, error } = await reqCatch(joinCommunity, params);
|
||||
if (!error) {
|
||||
isFollow.value = true;
|
||||
orgStore.setFollow(isFollow.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 获取组织语言
|
||||
const languageList = ref<{
|
||||
color: string,
|
||||
label: string
|
||||
}[]>([]);
|
||||
const getOrglanguageList = async(orgName: string) => {
|
||||
const params: types.commonGroupReqType = {
|
||||
orgId: orgName || namespace.value
|
||||
};
|
||||
const { data, error } = await reqCatch(getOrgLanguages, params);
|
||||
if (!error && data) {
|
||||
languageList.value = data.data;
|
||||
}
|
||||
};
|
||||
|
||||
// 组织成员
|
||||
const memList = ref<{ name: string, username: string, iam_id: string, avatar_url: string, [p: string]: any }[]>([]);
|
||||
const memCount = ref(0);
|
||||
const getOrgMemberListData = async(orgName: string) => {
|
||||
// 用户权限等级大于0才能查看成员
|
||||
if (orgData.value.my_role && orgData.value.my_role.access_level > 0) {
|
||||
const params = {
|
||||
orgId: orgName || namespace.value
|
||||
};
|
||||
const res = await reqCatch(getOrgMemberList, params);
|
||||
if (!res.error) {
|
||||
memList.value = res.data?.data.content;
|
||||
memCount.value = res.data?.data.total || 0;
|
||||
orgStore.setOrgMember(memCount.value, memList.value);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 获取组织文章和粉丝数量
|
||||
const articleTotal = ref<number>(0);
|
||||
const fansTotal = ref<number>(0);
|
||||
const getArticleAndFans = async(orgName?: string) => {
|
||||
const params = {
|
||||
orgId: orgName || namespace.value
|
||||
};
|
||||
const res = await reqCatch(getArticleAndFansTotle, params);
|
||||
if (!res.error) {
|
||||
fansTotal.value = res.data?.data.follower_count || 0;
|
||||
orgStore.setFansTotal(fansTotal.value);
|
||||
articleTotal.value = res.data?.data.article_count || 0;
|
||||
orgStore.setArticleTotal(articleTotal.value);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取dev社区文章 142269
|
||||
const articleData = ref<{ [p: string]: any }>({ content: [] });
|
||||
const getDevArticle = async() => {
|
||||
const params = {
|
||||
nsId: orgStore.communityInfo.ns_id,
|
||||
sort: '',
|
||||
pageNum: 1,
|
||||
pageSize: 10
|
||||
};
|
||||
loadingStatus.articleLoading = true;
|
||||
const res = await reqCatch(getArticle, params);
|
||||
if (!res.error) {
|
||||
articleData.value = res.data.data.data;
|
||||
}
|
||||
loadingStatus.articleLoading = false;
|
||||
};
|
||||
|
||||
// 获取社区活动
|
||||
const activityData = ref<{ [p: string]: any }>({ content: [] });
|
||||
const getDevActivity = async() => {
|
||||
const params = {
|
||||
nsId: orgStore.communityInfo.ns_id,
|
||||
sort: 'timeAsc',
|
||||
pageNum: 1,
|
||||
pageSize: 10
|
||||
};
|
||||
loadingStatus.activityLoading = true;
|
||||
const res = await reqCatch(getActivity, params);
|
||||
if (!res.error) {
|
||||
activityData.value = res.data.data.data;
|
||||
}
|
||||
loadingStatus.activityLoading = false;
|
||||
};
|
||||
|
||||
// 获取讨论详情
|
||||
const discussData = ref<{ [p: string]: any }[]>([]);
|
||||
const discussPager = reactive({
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
pageIndex: 1
|
||||
});
|
||||
const getDiscussData = async(orgName?: string) => {
|
||||
const params = {
|
||||
source_id: orgName || orgStore.orgInfo.id,
|
||||
source_type: 1,
|
||||
page: discussPager.pageIndex,
|
||||
size: discussPager.pageSize
|
||||
};
|
||||
loadingStatus.dynamicLoading = true;
|
||||
const res = await reqCatch(discussList, params);
|
||||
if (!res.error) {
|
||||
discussPager.total = res.data.data.data.total;
|
||||
discussData.value = [...res.data.data.data.records];
|
||||
}
|
||||
loadingStatus.dynamicLoading = false;
|
||||
};
|
||||
|
||||
// 获取dev运营广告
|
||||
const advertisementData = ref<{ [p: string]: any }[]>([]);
|
||||
const getDevAdvertisement = async() => {
|
||||
const params = {
|
||||
nsId: orgStore.communityInfo.ns_id
|
||||
};
|
||||
const res = await reqCatch(getAdvertisement, params);
|
||||
if (!res.error) {
|
||||
advertisementData.value = res.data?.data.data;
|
||||
orgStore.setAdvertisementData(res.data?.data.data);
|
||||
}
|
||||
};
|
||||
|
||||
// 判断dev社区是否登录
|
||||
const isDevLogin = ref<boolean>(false);
|
||||
const getDevLogin = async() => {
|
||||
const res = await reqCatch(getLoginState);
|
||||
if (!res.error) {
|
||||
isDevLogin.value = res.data?.data.data.isLogin;
|
||||
orgStore.setDevLogin(true);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取用户是否可以创建组织 checkUserCreateOrg
|
||||
const getUserCreateOrg = async(user?: any) => {
|
||||
const token = localStorage.getItem('access_token');
|
||||
if (!token) {
|
||||
return null;
|
||||
}
|
||||
const params = {
|
||||
username: user
|
||||
};
|
||||
const res = await reqCatch(checkUserCreateOrg, params);
|
||||
if (!res.error) {
|
||||
if (!user) {
|
||||
localStorage.setItem('group_quota', res.data?.data.group_quota);
|
||||
localStorage.setItem('manageable_group_num', res.data?.data.manageable_group_num);
|
||||
orgStore.setIsCreateOrg(res.data?.data.group_quota - res.data?.data.manageable_group_num > 0);
|
||||
};
|
||||
}
|
||||
return res.data?.data.group_quota - res.data?.data.manageable_group_num > 0;
|
||||
};
|
||||
|
||||
// init方法
|
||||
const init = (orgName: string, userName: string) => {
|
||||
getOrgData(orgName);
|
||||
checkHasFollowedFun();
|
||||
};
|
||||
return {
|
||||
orgData,
|
||||
isFollow,
|
||||
namespace,
|
||||
languageList,
|
||||
memList,
|
||||
memCount,
|
||||
articleData,
|
||||
articleTotal,
|
||||
fansTotal,
|
||||
activityData,
|
||||
discussData,
|
||||
discussPager,
|
||||
advertisementData,
|
||||
isDevLogin,
|
||||
loadingStatus,
|
||||
getOrgData,
|
||||
checkHasFollowedFun,
|
||||
getOrglanguageList,
|
||||
getOrgMemberListData,
|
||||
followDevCommunity,
|
||||
getDevArticle,
|
||||
// getDevArticleTotal,
|
||||
// getDevFansTotal,
|
||||
getDevActivity,
|
||||
getDiscussData,
|
||||
getDevAdvertisement,
|
||||
getDevLogin,
|
||||
getArticleAndFans,
|
||||
getUserCreateOrg,
|
||||
init
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user