搜索结果列表页面开发

This commit is contained in:
付民康
2025-03-12 18:41:20 +08:00
commit 7cebe8fc00
739 changed files with 88149 additions and 0 deletions

View 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
};
};