{"version":3,"file":"index-911d51a7.js","sources":["../../../vite/modulepreload-polyfill","../../../src/components/AppMobileTip.vue","../../../src/api/instance.js","../../../src/api/APIResponse.js","../../../src/api/index.js","../../../src/components/toast/index.js","../../../src/core/passport.js","../../../src/hooks/useVisitedGroups.js","../../../src/store/defineStore.js","../../../src/core/dataGenerator.js","../../../src/models/group.js","../../../src/store/userGroupsStore.js","../../../src/components/DialogSelectRecGroup.vue","../../../src/components/AppLink.vue","../../../src/core/PageInfo.js","../../../src/core/pages.js","../../../src/assets/images/404.png","../../../src/assets/images/badge-tit-bg.png","../../../src/assets/images/bg-reg-time.png","../../../src/assets/images/ico-camera.png","../../../src/assets/images/ico-change.png","../../../src/assets/images/ico-face.png","../../../src/assets/images/ico-link.png","../../../src/assets/images/ico-loc.png","../../../src/assets/images/ico-msg.png","../../../src/assets/images/ico-type-jh.png","../../../src/assets/images/loading.gif","../../../src/assets/images/logo.png","../../../src/assets/images/medal-official.png","../../../src/assets/images/qrcode-bg.png","../../../src/assets/images/qrcode-bg2.png","../../../src/assets/images/qrcode.png","../../../src/assets/images/tip-ico.png","../../../src/assets/images/user-default-top.jpg","../../../src/assets/images/visited-bg.png","../../../src/core/util.js","../../../src/store/appHotGroupsStore.js","../../../src/components/AppSideBar.vue","../../../src/store/appGroupsStore.js","../../../src/store/userFollowsStore.js","../../../src/App.vue","../../../src/components/AppFixedBar.vue","../../../src/components/UserFollowBtn.vue","../../../src/components/AppUserList.vue","../../../src/components/AppRecommdUsers.vue","../../../src/components/ParagraphText.vue","../../../src/components/UserCardPopup.vue","../../../src/components/UserCard.vue","../../../src/components/dialog/DialogTemplate.vue","../../../src/components/dialog/index.js","../../../src/components/ThreadItem.vue","../../../src/pages/home/components/GroupVisited.vue","../../../src/store/defineListStore.js","../../../src/store/defineDetailStore.js","../../../src/models/richContent.js","../../../src/models/userBadge.js","../../../src/models/thread.js","../../../src/store/group.js","../../../plugin-vue:export-helper","../../../src/components/ListLoader.vue","../../../src/pages/home/Home.vue","../../../src/components/DialogReport.vue","../../../src/components/AppPublishPlatform.vue","../../../src/plugins/editor.js","../../../src/components/Editor.vue","../../../src/pages/thread/components/CommentForm.vue","../../../src/pages/thread/components/ThreadArticle.vue","../../../src/components/CommentItem.vue","../../../src/store/comment.js","../../../src/pages/thread/components/CommentList.vue","../../../src/pages/thread/Thread.vue","../../../src/pages/thread/post.vue","../../../src/pages/group/Group.vue","../../../src/pages/group/GroupManagerList.vue","../../../src/components/GroupFollowBtn.vue","../../../src/pages/group/GroupList.vue","../../../src/components/ThreadReplyItem.vue","../../../src/store/user.js","../../../src/models/user.js","../../../src/pages/user/User.vue","../../../src/pages/user/UserFollowList.vue","../../../src/pages/user/UserFansList.vue","../../../src/pages/user/UserNotification.vue","../../../src/pages/user/components/AvatarDialog.vue","../../../src/pages/user/components/GenderDialog.vue","../../../src/pages/user/components/SignatureDialog.vue","../../../src/pages/user/UserProfile.vue","../../../src/pages/help/Help.vue","../../../src/pages/404.vue","../../../src/pages/Sample.vue","../../../src/pages/index.js","../../../src/routes.js","../../../src/directives/bi.js","../../../src/main.js"],"sourcesContent":["const p = function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n};__VITE_IS_MODERN__&&p();","\n\n\n\n\n","import axios from 'axios'\nimport qs from 'qs'\nimport md5 from 'md5'\n\nconst getToken = (url) => {\n const appkey = '50d85cf01cf70d6ec430105437d28568'\n const uri = url.replace('https', 'http')\n const timestamp = Math.floor(Date.now() / 1000)\n const accessToken = md5(appkey + uri + timestamp)\n return { timestamp, access_token: accessToken }\n}\n\nlet baseUrl = import.meta.env.VITE_API_HOST\n// 兼容内网地址\nif (baseUrl.indexOf('internal') !== -1) {\n baseUrl = 'https://club.internal.17173.com/'\n}\n\nconst instance = axios.create({\n // baseURL: '/api',\n baseURL: baseUrl,\n timeout: 60000,\n paramsSerializer(params) {\n return qs.stringify(params)\n },\n data: {\n a: 1,\n },\n})\n\ninstance.interceptors.request.use(\n (config) => {\n const tokens = getToken(config.baseURL + config.url)\n const cfg = { ...config, params: { ...config.params, ...tokens } }\n return { ...cfg, withCredentials: true }\n },\n (error) => {\n console.error(error)\n return null\n }\n)\ninstance.interceptors.response.use(\n (response) => response,\n (error) => {\n console.error(error)\n return null\n }\n)\n\nexport default instance\n","class APIResponse {\n constructor(axiosResPromise, config) {\n this.config = config\n this.axiosResPromise = axiosResPromise\n this.res = null\n }\n\n async check() {\n const res = await this.getRes()\n return {\n success: res.status === 200 && res.data.code === 200,\n status: res.status,\n code: res.data && res.data.code,\n msg: res.data && res.data.messages ? res.data.messages[0] : '',\n }\n }\n\n async getRes() {\n this.res = this.res || (await this.axiosResPromise)\n return this.res\n }\n\n async data() {\n const res = await this.getRes()\n let data = null\n if (\n res !== null &&\n res.status === 200 &&\n res.data.code === 200 &&\n res.data.data\n ) {\n data = res.data.data\n }\n return data\n }\n}\n\nexport default APIResponse\n","import instance from './instance'\nimport APIResponse from './APIResponse'\n\n// 帖子相关接口\nexport const threadAPI = {\n // 首页帖子列表\n plazaList(params) {\n const axiosRes = instance.get('/group/plaza-list', { params })\n return new APIResponse(axiosRes)\n },\n dynamicList(params) {\n const axiosRes = instance.get('/dynamic/thread-list', { params })\n return new APIResponse(axiosRes)\n },\n digestList(params) {\n const axiosRes = instance.get('/thread/digest-list', { params })\n return new APIResponse(axiosRes)\n },\n submitSupportThread(id) {\n const axiosRes = instance.get('/thread/support', { params: { tid: id } })\n return new APIResponse(axiosRes)\n },\n delThread(id) {\n const axiosRes = instance.get('/thread/del', { params: { tid: id } })\n return new APIResponse(axiosRes)\n },\n groupHomeList(params) {\n const axiosRes = instance.get('/group/thread-list', { params })\n return new APIResponse(axiosRes)\n },\n getUserThreadList(params) {\n const axiosRes = instance.get('/home/thread', { params })\n return new APIResponse(axiosRes)\n },\n getUserReplyList(params) {\n const axiosRes = instance.get('/home/post', { params })\n return new APIResponse(axiosRes)\n },\n // 评论列表\n getCommentList(params) {\n const axiosRes = instance.get('/thread/post-list', { params })\n return new APIResponse(axiosRes)\n },\n // 评论的回复列表\n getReplyList(params) {\n const axiosRes = instance.get('/thread/reply-list', { params })\n return new APIResponse(axiosRes)\n },\n getThreadInfo(params) {\n const axiosRes = instance.get('/thread/info', { params })\n return new APIResponse(axiosRes)\n },\n // 发表回帖/回复\n postComment(params) {\n const data = new FormData()\n data.append('tid', params.tid)\n data.append('message', params.message)\n data.append('platform', 'web')\n if (params.pid) data.append('pid', params.pid)\n if (params.aid) data.append('attachQuote', params.aid)\n const axiosRes = instance.post('/thread/reply', data)\n return new APIResponse(axiosRes)\n },\n // 发帖&编辑帖子\n postThread(params) {\n const data = new FormData()\n data.append('gid', params.gid)\n data.append('subId', params.sid)\n data.append('subject', params.title)\n data.append('message', params.content)\n data.append('platform', 'web')\n if (params.id) data.append('tid', params.id)\n const axiosRes = instance.post('/thread/issue', data)\n return new APIResponse(axiosRes)\n },\n supportComment(id) {\n const axiosRes = instance.get('/thread/post-support', {\n params: { pid: id },\n })\n return new APIResponse(axiosRes)\n },\n delComment(id) {\n const axiosRes = instance.get('/thread/post-del', {\n params: { pid: id },\n })\n return new APIResponse(axiosRes)\n },\n hideThread(id) {\n const axiosRes = instance.get('/thread/hide', {\n params: { tid: id },\n })\n return new APIResponse(axiosRes)\n },\n digestThread(id) {\n const axiosRes = instance.get('/thread/digest', {\n params: { tid: id },\n })\n return new APIResponse(axiosRes)\n },\n}\n\nexport const groupAPI = {\n selectRecGroup(params) {\n const axiosRes = instance.get('/group/rec-list', { params })\n return new APIResponse(axiosRes)\n },\n allGroups() {\n const axiosRes = instance.get('/group/list')\n return new APIResponse(axiosRes)\n },\n getSections(id) {\n const axiosRes = instance.get('/group/sub-list', {\n params: { gid: id },\n })\n return new APIResponse(axiosRes)\n },\n getMyGroupList() {\n const axiosRes = instance.get('/follow/group-list')\n return new APIResponse(axiosRes)\n },\n getHotGroupList(params) {\n const axiosRes = instance.get('/group/rec-list', { params })\n return new APIResponse(axiosRes)\n },\n submitFollowGroup(id) {\n const axiosRes = instance.get('/follow/group', { params: { gid: id } })\n return new APIResponse(axiosRes)\n },\n cancelFollowGroup(id) {\n const axiosRes = instance.get('/follow/group-cancel', {\n params: { gid: id },\n })\n return new APIResponse(axiosRes)\n },\n groupFinal(id) {\n const axiosRes = instance.get('/group/info', {\n params: { gid: id },\n })\n return new APIResponse(axiosRes)\n },\n hotThread(id) {\n const axiosRes = instance.get('/group/hot-thread', { params: { gid: id } })\n return new APIResponse(axiosRes)\n },\n}\n\nexport const editorAPI = {\n getLinkInfo(href) {\n const axiosRes = instance.get('/app/get-title-by-url', {\n params: { url: href },\n })\n return new APIResponse(axiosRes)\n },\n get17173VideoInfo(href) {\n const axiosRes = instance.get('/app/get-video-info-by-url', {\n params: { vurl: href },\n })\n return new APIResponse(axiosRes)\n },\n async upLoadImage(file, name) {\n const data = new FormData()\n data.append('pic[0]', file, name)\n\n const axiosRes = instance.post('/upload/image', data, {\n headers: { 'Content-Type': 'multipart/form-data' },\n })\n return new APIResponse(axiosRes)\n },\n getQiniuToken() {\n const axiosRes = instance.get('/upload/get-video-token')\n return new APIResponse(axiosRes)\n },\n qiniuUploadReceipt(params) {\n const axiosRes = instance.get('/upload/confirm-video-info', {\n params,\n })\n return new APIResponse(axiosRes)\n },\n}\n\nexport const userAPI = {\n login() {\n const axiosRes = instance.get('/my/login')\n return new APIResponse(axiosRes)\n },\n logout() {\n const axiosRes = instance.get('/my/logout')\n return new APIResponse(axiosRes)\n },\n getAccountStatus() {\n const axiosRes = instance.get('/my/get-status')\n return new APIResponse(axiosRes)\n },\n getMyInfo() {\n const axiosRes = instance.get('/my/info')\n return new APIResponse(axiosRes)\n },\n getUserInfo(id) {\n const axiosRes = instance.get('/home/info', { params: { uuid: id } })\n return new APIResponse(axiosRes)\n },\n getUserFollowList(id) {\n const axiosRes = instance.get('/follow/user-list', { params: { uuid: id } })\n return new APIResponse(axiosRes)\n },\n getUserFansList(id) {\n const axiosRes = instance.get('/follow/fans-list', { params: { uuid: id } })\n return new APIResponse(axiosRes)\n },\n submitFollowUser(id) {\n const axiosRes = instance.get('/follow/user', { params: { uid: id } })\n return new APIResponse(axiosRes)\n },\n cancelFollowUser(id) {\n const axiosRes = instance.get('/follow/user-cancel', {\n params: { uid: id },\n })\n return new APIResponse(axiosRes)\n },\n getGroupManagers(id) {\n const axiosRes = instance.get('/group/manager', {\n params: { gid: id },\n })\n return new APIResponse(axiosRes)\n },\n getNotification(params) {\n const axiosRes = instance.get('/my/message', { params })\n return new APIResponse(axiosRes)\n },\n submitSignature(val) {\n const axiosRes = instance.get('/my/signature', {\n params: {\n signature: val,\n },\n })\n return new APIResponse(axiosRes)\n },\n submitGender(val) {\n const axiosRes = instance.get('/my/gender', {\n params: {\n gender: val,\n },\n })\n return new APIResponse(axiosRes)\n },\n getBadgeList(params) {\n const axiosRes = instance.get('/home/badge', { params })\n return new APIResponse(axiosRes)\n },\n getRecommdUsers(params) {\n const axiosRes = instance.get('/group/active-user', { params })\n return new APIResponse(axiosRes)\n },\n}\n\nexport const otherAPI = {\n initStatus() {\n const axiosRes = instance.get('/app/info')\n return new APIResponse(axiosRes)\n },\n report(params) {\n const axiosRes = instance.get('/report/submit', { params })\n return new APIResponse(axiosRes)\n },\n}\n","import { createVNode, render } from 'vue'\nimport ToastTemplate from './ToastTemplate.vue'\n\nconst defaultOption = {\n duration: 3000,\n}\n\nexport function toast(msg, option) {\n const container = document.createElement('div')\n const opt = { ...defaultOption, ...option, msg }\n const vm = createVNode(ToastTemplate, opt)\n render(vm, container)\n document.body.appendChild(container)\n // 销毁弹窗, 如果duration设置为0,需要调用者手动销毁\n const dispose = () => {\n if (vm.el.querySelector('.toast-msg')) {\n // 淡入淡出效果\n vm.el.querySelector('.toast-msg').classList.add('reomve') // 销毁时添加淡入淡出效果\n const t = setTimeout(() => {\n render(null, container)\n clearTimeout(t)\n document.body.removeChild(container)\n }, 400)\n }\n }\n if (opt.duration) {\n const timer = setTimeout(() => {\n dispose()\n clearTimeout(timer)\n }, opt.duration)\n }\n return {\n dispose,\n }\n}\n","import md5 from 'md5'\nimport { toast } from '@/components/toast'\nimport { userAPI } from '@/api/index'\n\n// 当前用户uid\nexport const getUid = () => {\n return Passport.data('uid')\n}\n\nexport const getUname = () => {\n return Passport.data('nickname')\n}\n\nexport const getName = () => {\n return Passport.data('username')\n}\n\nexport const isBindPhone = async () => {\n return new Promise((resolve) => {\n Passport.getMobileStatus((o) => {\n resolve(o)\n })\n })\n}\n\nexport const isSockpuppet = async () => {\n const data = await userAPI.getAccountStatus().data()\n return data.identity ? data.identity === 2 : false\n}\n\n// 通过Uid获取用户头像, 不传uid则返回当前用户头像\nexport const getAvatar = (uid) => {\n const userId = (uid || getUid()).toString()\n let avator = 'https://ue.17173cdn.com/a/hao/app/images/avatar.png'\n if (userId) {\n const md5Str = md5(userId)\n avator = `https://i.17173cdn.com/avatar/YWxqaGBf/${md5Str.slice(\n 0,\n 2\n )}/${md5Str.slice(2, 4)}/${md5Str.slice(\n 4,\n 6\n )}/${userId}/hd.jpg?t=${Math.floor(Math.random() * 10000)}`\n }\n\n return avator\n}\n// 当前用户是否已登录\nexport const isLoggedIn = () => {\n return Passport.isLoggedIn()\n}\n\n// 当前用户是否禁言\nexport const isMuted = () => {\n return false\n}\n\n// 传入的uid是否当前用户\nexport const isCurrent = (uid) => {\n return uid === getUid()\n}\n\n// 当前用户是否被ban\nexport const isBaned = () => {\n return false\n}\n\n// 当前用户是否可以发言\nexport const canComment = () => {\n return !isBaned() && !isMuted()\n}\n\nconst isMobile = /android|iphone|ipad|ipod|Windows Phone|SymbianOS/gi.test(\n navigator.userAgent\n)\n\nexport const login = () => {\n if (!isLoggedIn()) {\n if (isMobile) {\n window.location.href = `https://passport.17173.com/wap?return_url=${encodeURIComponent(\n window.location.href\n )}`\n } else {\n Passport.Dialog.show()\n }\n }\n}\n\nexport const postAuthCheck = (fn) => {\n if (!isLoggedIn()) {\n if (isMobile) {\n login()\n } else {\n // eslint-disable-next-line no-restricted-globals\n const result = confirm('您尚未登录,是否跳转到登录页?')\n if (result) login()\n }\n return\n }\n\n if (canComment()) {\n fn()\n } else {\n toast('被禁言')\n }\n}\n","import { getUid } from '@/core/passport'\n\nconst useVisitedGroups = () => {\n /**\n * {\n * id,\n * visitedDate\n * }\n */\n const groups = useStorage(`17173club_visited_group_${getUid() || 0}`, [])\n\n function addGroup(group) {\n groups.value = [\n {\n id: group.id,\n visitedDate: Math.ceil(Date.now() / 1000),\n },\n ...groups.value.filter((g) => g.id !== group.id),\n ].slice(0, 7)\n }\n\n return {\n groups,\n addGroup,\n }\n}\n\nexport default useVisitedGroups\n","const storeCache = {}\n\n// debug\nwindow.storeCache = storeCache\n\n/*\n * 定义一个store函数,如果调用该函数时传入id字符串,则会以该id缓存store, 下次执行该函数会返回上一次缓存的结果.\n */\nfunction defineStore(creater) {\n return (config) => {\n let storeInstance\n if (config !== undefined && config.id !== undefined) {\n if (!storeCache[config.id]) {\n storeCache[config.id] = creater(config)\n }\n storeInstance = storeCache[config.id]\n } else {\n storeInstance = creater(config)\n }\n return storeInstance\n }\n}\nexport { defineStore }\n","export function gString(value) {\n return value ? value.toString() : ''\n}\n\nexport function gNum(value) {\n return value || 0\n}\n\n// 服务端接口 1= true, 0=false\nexport function gBool(value) {\n if (typeof value === 'boolean') {\n return value\n }\n if (value * 1 === 1) {\n return true\n }\n return false\n}\n\nexport function gList(value) {\n return value || []\n}\n","import * as d from '@/core/dataGenerator'\n\nexport default class GroupModel {\n static fromJson(data) {\n const model = new GroupModel()\n model.id = d.gString(data.gid)\n model.name = d.gString(data.name)\n model.logo = d.gString(data.icon).length\n ? `${d.gString(data.icon)}!a-3-240x${d\n .gString(data.icon)\n .substr(d.gString(data.icon).lastIndexOf('.'))}`\n : ''\n model.bgImage = d.gString(data.bgImage)\n model.lastThread = d.gNum(data.lastThread)\n model.threadNum = d.gNum(data.threadNum)\n model.followNum = d.gNum(data.follow || data.followNum)\n model.followState = d.gNum(data.followState)\n model.newGameCode = d.gNum(data.newGameCode)\n model.rule = d.gString(data.rule)\n model.official = d.gNum(data.official)\n model.headlines = d.gString(data.header)\n model.platform = d.gNum(data.platform || 0)\n\n // 是否有新帖\n model.$hasNew = false\n // 用于默认订阅的圈子,不能取订阅\n model.$isDefaultFollow = model.id === '1'\n\n return model\n }\n}\n","import { defineStore } from './defineStore'\nimport { groupAPI } from '@/api'\nimport GroupModel from '@/models/group'\n\nexport const userGroupsStore = defineStore(() => {\n const loading = ref(true)\n const items = ref([])\n\n async function init() {\n const res = groupAPI.getMyGroupList()\n\n if (!(await res.check()).success) return\n\n const { dataSet } = await res.data()\n\n items.value = dataSet ? dataSet.map((g) => GroupModel.fromJson(g)) : []\n\n loading.value = false\n }\n\n function add(group) {\n items.value = [...items.value, group]\n }\n\n function remove(group) {\n items.value = items.value.filter((g) => g.id !== group.id)\n }\n\n return {\n loading,\n items,\n init,\n add,\n remove,\n }\n})({ id: 'userGroups' })\n","\n\n\n\n\n","\n\n\n","import qs from 'qs'\n\nexport default class PageInfo {\n constructor(config) {\n // 页面标题\n this.title = config.title\n // 页面地址\n this.path = config.path\n // // 页面组件实例\n // this.component = config.component\n // 父页面\n this.parent = config.parent\n this.needAuth = config.needAuth === true\n this.meta = config.meta\n }\n\n // 路由配置信息\n get routeInfo() {\n return { path: this.path }\n }\n\n // 返回指定参数后的完整跳转链接\n toLink(params, query) {\n let href = this.path\n href = href.replace(/\\?/g, '')\n if (params) {\n Object.keys(params).forEach((key) => {\n href = href.replace(`:${key}`, params[key])\n })\n }\n\n // 移除未传值的参数\n href = href.replace(/\\/:[a-z]*/g, '')\n if (query) {\n if (typeof query === 'string' && query.indexOf('#') > -1) {\n href += query\n } else {\n href += `?${qs.stringify(query)}`\n }\n }\n return href\n }\n\n // 跳转\n to(params) {\n const href = this.toLink(params)\n window.location.href = href\n }\n}\n","import PageInfo from './PageInfo'\n/*\n社区主页\nhttp://dev.club.17173.com/group/index\n圈子主页\nhttp://dev.club.17173.com/group/info\n圈子列表\nhttp://dev.club.17173.com/group/list\n\n贴子详情\nhttp://dev.club.17173.com/thread/info\n发布贴子\nhttp://dev.club.17173.com/thread/issue\n\n用户主页\nhttp://dev.club.17173.com/user/space\n*/\n\n/*\nexport的变量名称要与pages/index.js下保持一致.\n没有直接饮用pages/index.js是为了防止循环import\n */\n\nconst keywords =\n '玩家论坛,玩家社区,游戏圈,游戏论坛,游戏社区,17173玩家社区,17173游戏圈,硬核游戏玩家聚集地'\nconst description =\n '一起一起上是17173旗下游戏玩家社区,与游戏爱好者一起共建高质量讨论的游戏社区。玩硬核游戏,就一起一起上!'\n\nexport const home = new PageInfo({\n title: '首页',\n path: '/',\n meta: {\n keywords,\n description,\n },\n})\n\nexport const post = new PageInfo({\n title: '发表帖子',\n path: '/thread/issue/:id?',\n needAuth: true,\n meta: {\n keywords,\n description,\n },\n})\n\nexport const thread = new PageInfo({\n title: '帖子',\n path: '/thread/info/:id',\n meta: {\n keywords,\n description,\n },\n})\n\nexport const group = new PageInfo({\n title: '圈子',\n path: '/group/info/:id',\n meta: {\n keywords,\n description,\n },\n})\n\nexport const groupList = new PageInfo({\n title: '圈子列表',\n path: '/group/list',\n meta: {\n keywords,\n description,\n },\n})\nexport const groupManagerList = new PageInfo({\n title: '管理成员',\n path: '/manager-list/:id',\n meta: {\n keywords,\n description,\n },\n})\n\nexport const user = new PageInfo({\n title: '个人页',\n path: '/user/space/:id',\n meta: {\n keywords,\n description,\n },\n})\nexport const userFollowList = new PageInfo({\n title: '关注',\n path: '/user/follow/:id',\n meta: {\n keywords,\n description,\n },\n})\nexport const userFansList = new PageInfo({\n title: '粉丝',\n path: '/user/fans/:id',\n meta: {\n keywords,\n description,\n },\n})\n\nexport const userNotification = new PageInfo({\n title: '消息中心',\n path: '/user/notification/:id?',\n meta: {\n keywords,\n description,\n },\n needAuth: true,\n})\n\nexport const userProfile = new PageInfo({\n title: '编辑个人资料',\n path: '/user/profile',\n meta: {\n keywords,\n description,\n },\n needAuth: true,\n})\n\nexport const help = new PageInfo({\n title: '玩家帮助中心',\n path: '/help',\n meta: {\n keywords,\n description,\n },\n})\n\nexport const error = new PageInfo({\n title: '404',\n path: '/404',\n meta: {\n keywords,\n description,\n },\n})\n\n// export const sample = new PageInfo({\n// title: '功能示例',\n// path: '/sample/:id/:cc',\n// needAuth: true,\n// })\n","export default \"__VITE_ASSET__d14b9540__\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAU8AAAAeCAYAAACsaJwUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcxNEExNkVCMDBFMzExRURCRjFFODM0NEMwQjBEQkREIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcxNEExNkVDMDBFMzExRURCRjFFODM0NEMwQjBEQkREIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NzE0QTE2RTkwMEUzMTFFREJGMUU4MzQ0QzBCMERCREQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NzE0QTE2RUEwMEUzMTFFREJGMUU4MzQ0QzBCMERCREQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ZzCbqAAAEDklEQVR42uydPUwTYRzG32vvrkDQfvARBAxGEjdjjMbBxc2NGA1GBhITBzFgcHAxDq6OxjjoAokRExUSExxcHJ1ckcEoKKEUaEs5oHD9uLv6f7UlzeVqWqS995Lnl7x5/3dH+Xjyv+fep9cWqVAoMHD4LCwuDdI0DSWAi9zoP9n3DjLUBwnmWRfjbKdpvqe7q7OpKQBBQMPJZnNsJbaapNP7NBnoGhQ5fHyQoC48C4WOwjiBawQCKguFgvwi/gJqwDy9suq8pijKUCQcghjAVcKhIFNV9Qr15E2ogdiOuA5ADeRyORZdWdPoPOfxPQpFsPIUN64HEdeBONDKk4XDQR6DJujiLkERmKeIq86riiIPRSKI60C8+B4IBC5TOQI1ENtFM85IMa53YdUJRCSfz7Pl6GqazvczFN8XoQhWnqLwlOI6jBMIi6IojFJRK5WTdLHHeQ/zFCauDyOuA9GhCzyjC/wlKsehBmI74joANcV3g0VXYrplFc5SfP8GRbDydC2uB4NHYJzAQ/FdZm2RcDOVL+ni74ci/7Hy/LHwCyocjAFqxNnjvd1MkvAKEOAtYqvrTNczD6l8DDVgno0kTOMrxfVup1Xn3p7O4omNP3VnRxtraWmGYqBhVNN/hmHwu+85y7LO0+YcVKsdmRtoMb77bLWveLxU+8tm2aEun/22uVSXb8u2Y/Zacfh6f4X9ssM+n8Mxf5XDV2FIxdFKcV2pFNd545qmuV+f6OtFp4GGUU3/yTKP7yE1kUxN0OYpGhaNQnFYFYZZ5TDKZqP4WKNsmLbt0r68w7HSfvvjnL6HYfsdDIffx7LNpkNtlv3Nhk2DfX3k4kbpB4LqmPX5fAOQAXh6hapn+PSRxgWocYDYjrvttbOwuNQtSdJcT09XJKCqFWMTfyq0ox2xHbgT2//Vf+n0LluPJ+epPNd/si8L1WCejTTQYVVVXvX2HMMNI+ApTNNiy9EYJXvzIhnnFyhyMPBSpQNCTTeVy+VnN7UtiAE8RXIjxZ8TfQLjhHm6yYimbaX4p3YD4AV2d/d4ZP9O5SOoAfN0c/W5Viiw8XgiyfD0BxAdy7JYMpnid4pvUe/qUATm6baBvqb4/n5zE/EdiB7XN5lhms+pZz9DDZinKIxqW4jvQFz2dJ3t7KR/UvkAasA8RYvvY4jvQNS4nkikeGPepl5NQxGYp2gG+gbxHYjIRkrjb8ecpB79BDVgnqJyh+J7MpvFa46BGOiZDNve3uH/+O0+1IB5irz6jFNqv8vf3YH4DtyG92Di7weEjFJvIhLBPIU30LcU32dSiO/AZVIU1/N5Y4p68gPUgHl6hTFNQ3wH7pHJZJm2tR2n8h7UqA94b3udWFhcGqRpGkoAF7lOq84ZyFAffgswAOgo3I/5OXuUAAAAAElFTkSuQmCC\"","export default \"__VITE_ASSET__97409377__\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEwMEQ4RTNEQzlFNDExRUNCQUU2OThEQjYwMUU5NjA0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEwMEQ4RTNFQzlFNDExRUNCQUU2OThEQjYwMUU5NjA0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTAwRDhFM0JDOUU0MTFFQ0JBRTY5OERCNjAxRTk2MDQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTAwRDhFM0NDOUU0MTFFQ0JBRTY5OERCNjAxRTk2MDQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5kHWNvAAADnUlEQVR42rxXXSybYRQ+/cGqiFlvlpAh2EWXIWFdYk03wYQgu5Fd0rAuRGQxibvtghsSF27ERW8qCOGCXlCyaKiLKSMLlpifhMzF4maYv2m7c06+T5ql1a9d9Umevuf96XvO+3POez6Zx+MBCbiH1CMfImUSxu8iHcgfAUeSAb6Ynp7ORLnPEzrM/uYXqbzJuO3t7XdYvHG5XDA7Ows7OzsgZceSk5OhuLgYoqOjjVj9g3zrb6wywFyv6aepqQlsNhsEg7y8PBgaGgK5XG7C6nvkia9xch9tauQzXP1LLJ+sra0FrZywtLQEDodDrL5CGpAJNxmQgbQKls4jp6hxenoaQoWX4RakHflLmFf37xFokU6k6uzsDDY2NuD8/Jw7pqamQjaA7s3CwgLLUVFRoNVqQa1W084SnyI/y/BS0bZ8RT4YGxuD9vZ2ODo6gttAbGwsNDc3Q11dHVVJyWMy4CMKH+x2O3dIjAv/he7ubqiqqiKxTy4EGDCbzRFRTujt7RVFPd2BRyRtbm4GvZ0pKSmgUChgb28PTk5OJP+X4omAh2TAHZIuLi4k/ZmUtrS0QElJCcTExHDb1dUV0BF2dXXB1tZWwDkosAlQyINZtU6ng/HxcaioqLhWzq6kVEJRURFMTExAYWFhUDtJl5B8MyEnJweOj4/9DkxKSoKZmRlITEzkFff393Pd7XaDXq8Ho9EIKpUKTk9PoaysDPb39yFAmJcUiq9RX1/PykmhyWTiLRfhdDrZ5wcHB/luNDY2Qltbm6R5JR8BnTmBVu2tXMTKygqMjo6yXFpaSm9AeA2gy0dYXFz0O0bsi4+PB41GE14DLi8vuYyLi/M7xrtPDOVhM2B9fZ3L8vJy9n1fIO8g0AWUGs4lGzA8PMxlVlYWdHR08ONy7cxoUGtrK7spYWRkJPxuSEoGBgYgPz+f6wcHBzA3N8dBpaCgAFJTU7md8ofq6uqAgU10Q8kGiGfc09MDBoPBZ//y8jI0NDTA4eFhwJWHZAD/QSbjqFdZWQmZmZlc393dBavVCpOTkxwnpCBkA8IF0QC6hHxYmMFGTLmXF7nIgG+cEGZkRMyAtLQ0UfwuFxJQqK2tjZgBNTU1ojhPd0Aj5IT3LRYLdHZ2AiWmtwGKHfSNQY8Vwi3mhFTJRX7hTBEj2OrqalAZjhTQU52dnc3PuoAXnKp7faflIm2e28cn5HNRr8xHInpX+HBICPMJ/Ba+PX56N/4VYABiJkZj3Wd0igAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIyQUU1NjRCMkU5MjExRURCREIxRjdENTlBMjQ2NjUyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIyQUU1NjRDMkU5MjExRURCREIxRjdENTlBMjQ2NjUyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjJBRTU2NDkyRTkyMTFFREJEQjFGN0Q1OUEyNDY2NTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjJBRTU2NEEyRTkyMTFFREJEQjFGN0Q1OUEyNDY2NTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Uw5I5AAABT0lEQVR42pzUzysEcRjH8VmmKawiuexFLsqvlJSjk4O0OVEc1F7k4MLdDeXgIpJ/gOIgaeXXSUsOkk1ycHGRAwdSEm15P/pMTdNgxlOvdtrd57PPd77f2dT6Rt75oSrQgnq84AbPUV8si3ivCWt4QgErOMCjXnv+CpnAla57kUYjqtGFa+wr2I0KGcM8hjCCU5QCnxcxiW70YTkc0oZFNW87v5eF9WMYg8GQaezECPDLljUjKQupwgCWnGRl96XBlmchHZqokCCgEh4u7IZbc622s5QgJIc77VydhbwpKEnZzoziFfeuzoWnZRUTBG3J972wpRxrxH+Vv8VzGEd7zL4anKM1GHKIVeyiOUaAnad33IaP/RSOcKbrdKjZ0ym9RDmy+HCCD5G2OKdp7CTOquEBGU1oTQvy6Te6EeNuSqeeXPs/2dPoJ/6vB+tLgAEA6yZFjZwCtfwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkI4NTZBQ0UxQkM4RTExRURCMjhEQzlDNjUzNzNDQjUxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI4NTZBQ0UyQkM4RTExRURCMjhEQzlDNjUzNzNDQjUxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Qjg1NkFDREZCQzhFMTFFREIyOERDOUM2NTM3M0NCNTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Qjg1NkFDRTBCQzhFMTFFREIyOERDOUM2NTM3M0NCNTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz40gp2/AAACP0lEQVR42qyWTUhUURTH37xiTEh3hVEowUBZ0qbQtatWRil9L1qFiyANmibaR42k4seyZTX5RR/QNluXQYGCCzEdFMFalVJZqf8jvyevx52XY3Pgx5u559z/8V3PPWcSucFXXoxVi0uiURwRe8QvMSdmxRsxID4VEtgZI3xfnBM7Ir4ycRhOirskuS3yUSHfIX5KjIuL4o8Y5C0OIl4halkbEr+JneAZ+wZtoovEz8QtMRWJWRGTkBMpkRXN4rGoEt2uNziPY01k2DDl/dsspoU9q6ITrb8S2Jk/FAlxR3R4xVsHexNoVYcT3BO7xfA2xcNJhtHKBglqxAXO9ob3/9aOllVgjY+4T0XMRYKtBL/x9Lbom6fyNrR9LpHZc4fITV73epG+QKvREtTx5Z0j8IFYFr1F+sZ41iXUKn5wgXaJn15pLInWih9ZLLlZgi983ldC3UDrs08PMTtWwgQneI5bgtd8Oe0ILKeMKx2+SnzlDl+gNerTaq2HnBUHIoFXaGhv6U0V0Mxajpiw7UfLNAcswQwXI0knDdsL8UEcEiPiK4yw9pGYsHVTlaY5E1SRdcIlMqdDwQuiges/Rt0v89nW6okJLI3GEpqb88Am0VXxhMb3XfSH+n8PxNk19q6hlY/Og6c0O2u3fXTF1BYqJkUf60cvjZZzovUwwB8xRJrYbNPtPY0s+EceF2c4kiTH0sopxA79l/SnLC33MhSyVf7ijGvoF/pVkWeAZ0I/W46KvfgXuaCjVMt0oezrAgwAexWOcBFHBpgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAYAAABX5MJvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA25pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyMTc2YTRkOC02NzdkLWJkNDItYjRhYy0wNWUxYmVlMTNjNTciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTZEN0IzNzlBNjgwMTFFQzkyRjc5RDVFRjAwRkIyMUMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTZEN0IzNzhBNjgwMTFFQzkyRjc5RDVFRjAwRkIyMUMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkY5QUEwQ0FBNjdFMTFFQ0JBMTQ5MDEyNjA3RkIyQzQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkY5QUEwQ0JBNjdFMTFFQ0JBMTQ5MDEyNjA3RkIyQzQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz496QsQAAAD7klEQVR42qyYeUhVURDG9bmVtmiLbZpBFEFEK23YYhqVWRRhGLT+oUWBf1RmUVFkC4ZBYVRUtmJGRVGSEUUhQgW22F4mEWlZFiYuSfnMvoHvxnS59y3qwA89x/Pemzdn5pu5+uZduO7TDhYAuoOxYBjoCerAF/AYvAS1Vi9MSoz38fdpH5sJ5oEhoBcIAb9APfgMHoGToNTqxW11Qj50D5gCwmzODAXTwSJwCuwGv/UBRxscmAVuMALaAYnAT9AImtR+FNgKzoEe7RGJueAoQ2/YW5APboNPIIiRmg1iQTi/9ALQESwEDa11IgEcUQ40cb0dVJvOSi7kgjFgH5jM/XiwA6xrzXVMZAT6cO0EG0CqhQPaHvKb31J7KSD6/MUCX2+ckLPzlQPNYC3Y7+Hrv/KDK7nuBFaC/t440QKK1Fq+fbaXkfwAToA/XI8CM7x1QpRtEBgMDrkp3d42fzvLChLrJ1fizolg4KfWcgVl4J0L5cwEJWS4xZlSiphYZxDhyolpFJedINRD6d7FRA1i9UTbRLRO5VmYXYlKCR1XSVgMLrtJ2gyQpvbegJs2Z0OVQ/UOGx04phwQHahyEwWR4nS1fgWW8uqsZDyYv9fI1fpbNKIcqpuRA+vBfRcO7DVFQDrmMgqVlaXwuoxquaMjIRl/WDngpAPZdMbKMnnGsBdguQsHpNUnAl+uH4iAOdQ9SUgHqAhsBAd4b2bzowNp6g0lAiuojlYWSWEz5L6S7b3KwTeMAzEqWQ5S61tsqiCDVWA48NoDB86ACWpP+k0xhpoWByci6Wzd+McyRsXHJgLbwCZTEi5hBVmZtPDTYKraO8Ny/tfKRzJjjSjku6gG6ZSbTUm4mMJkZSG8ghi1J/PEap1nEokRKhmlHAtt3lAisEWtn7lxQKwLGK/WuWxaDVbC0UElZKXFm4WbdOApy7DEjX5849WJw1lglZLs/yYrp+pqvsohbSKz5WCgKsMSD6TcSem/xmnbaTfolqtx3J96UWQ618iZchK4Cz66CH84Z4c6tV/tblAp5kxoOJFgc/Y9s9zOgQiQxw6bo6TZo2lJBtR76kriTNnsiUWw7OK5TnTxCGDpRCOVq1yNXVlKPd1ZJLM+xiRE1d44IdpQQZVsUWOXhHa0B4PvFTVFG2WYzi/nsROGSaO6pNZS3wXsH+NAIKsnkPIr88ZVk6OGDtR6c5f+picno83O4QeGc6BN5qNbA1UwyFTKzbzSVG8iYPcYKENGEjtkudqXJ6auoC9/agcqqKbJrXHA7gmskSonObGG4Y7ihwdQ2n9wIClmOT5py1O1q8fA52xYsRSpSDpSQwcKKVzf2/p/hb8CDAC9uO20ew7vbgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAANCAYAAACQN/8FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM0RjJENDU3MDQzODExRUQ4Mzg4RTc0OUIyRUZCQTE1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM0RjJENDU4MDQzODExRUQ4Mzg4RTc0OUIyRUZCQTE1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzRGMkQ0NTUwNDM4MTFFRDgzODhFNzQ5QjJFRkJBMTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzRGMkQ0NTYwNDM4MTFFRDgzODhFNzQ5QjJFRkJBMTUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7yQut9AAAAvElEQVR42mL8//8/AxIQAWIHIOYD4htAfAKI/4FlQAqBmBGIK4H4239UcB6INcGGQRWW/McNngCxKEgRLxB/QZI4CcTzgfgTklgnSKEHksAFIGaG2uKLJH6OCehMHiTPPADiv1D2HSRxXpBOVSSdv4A4CYgNgXgnkvhqmGeO/8cP/GEKXfAoOgUKPphCEJ6DRREoXHWQwxGEuaG+hoF/QBwNk0dWCMKiQHwbqrACWQ5dIQgrA3EVujhAgAEAI+qPkMmhURwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM3Qzc5MkJGQzZDMzExRUM4RDhGRkMzQjVFRUU5RjJEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM3Qzc5MkMwQzZDMzExRUM4RDhGRkMzQjVFRUU5RjJEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzdDNzkyQkRDNkMzMTFFQzhEOEZGQzNCNUVFRTlGMkQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzdDNzkyQkVDNkMzMTFFQzhEOEZGQzNCNUVFRTlGMkQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7u0zFbAAABA0lEQVR42mL8//+/GwMDw3QglmCgDngBxJmMQIPvUtFQuOEgg78y0AAwMdAIgAz2BuLjVDQTFLSBDMCggGE3ID4MChoy8UsgzgNiNpB5IAO3ArEl1HBQmHsD8UkSDPwMxNOBWAJqhjIQr2dAUrAeiI2gkkxAHAzE5wgYuh+ITaF6eIC4HYjfgxMEmsIvQLwKiHWQLIgE4sto6u4CcRTUhyA1cVAxuBoGPN5bBMTqUAtYgDgeiC8CcRPUdSBxMyA+gM0MBiLCbw4QKyFFMgM0PGdDfYhVL7EZ5A8QLwXiPiD2B+IyIObBp2Fo5rxRg+EGv6CBuS9BBmeBGFQ09BmoBgEIMAB+TAIIr9kjbQAAAABJRU5ErkJggg==\"","export default \"__VITE_ASSET__c0616eb4__\"","export default \"__VITE_ASSET__5149d0b6__\"","export default \"__VITE_ASSET__03d6d6da__\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAAAYCAYAAABgBArrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJDNjE1NDZGM0M1OTExRUM5ODNGOUI4Q0UzNjZERkVCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJDNjE1NDcwM0M1OTExRUM5ODNGOUI4Q0UzNjZERkVCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkM2MTU0NkQzQzU5MTFFQzk4M0Y5QjhDRTM2NkRGRUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkM2MTU0NkUzQzU5MTFFQzk4M0Y5QjhDRTM2NkRGRUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5leg+WAAALFklEQVR42uxZ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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACJCAYAAADNGg3BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjc2OTJFRjhBOThEMTFFQzlEMkI4QUY5NUJCQTM2QzUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjc2OTJFRjdBOThEMTFFQzlEMkI4QUY5NUJCQTM2QzUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OERCMkM0MjA4RkQzMTFFQ0E0MkZERkYxQ0MyNzlERDUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OERCMkM0MjE4RkQzMTFFQ0E0MkZERkYxQ0MyNzlERDUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B8vY9AAAF1klEQVR42uyZ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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACJCAYAAADNGg3BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEYwNjFGMTdBOThFMTFFQzk5QzQ5Mzk1OEYyOTg1NDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEYwNjFGMTZBOThFMTFFQzk5QzQ5Mzk1OEYyOTg1NDAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OERCMkM0MjA4RkQzMTFFQ0E0MkZERkYxQ0MyNzlERDUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OERCMkM0MjE4RkQzMTFFQ0E0MkZERkYxQ0MyNzlERDUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4cEcEaAAAFdUlEQVR42uyaMY/cRBSAbXQKRZIuTRQJJF+FRHUiPwBpt7kIKowSRL2GkuqkpKZIAyXc1kiHWBoQoTlL1BR3VSSq2wLRUd5RJI15c/cmmRvNjO09J7uG75Oecrtee+33+b2Z8SZvjjLLNYnPJB5IvCtxI4ux0+QZDMdx3iS2nkk8lTiQ+FbiuXnzDd14R+J3iYnEQ4nbEnkiYFhSub6tTqbq6I4VZyrtF4kfJT6U+E0tw2Zwpk4+UEdPJN404iqJvyS+JEcbj3H0p8TMiPtE4ityMhq+Ns5ymZw8kz9uSZx23nWnIX1Xn5CsuudNib/tGHdKJkfDqR3jYIRsrbHk4bWLQ9baoVUiDhAHreRN04THL7NWYyxbL4n1MhVHqwTEAeL+f+KYmKyfhAMqjlYJiAPEIQ4QB4hDHCAOEAeIQxwgDhCHOEAcIA4QhzhAHCAOcYA4QBwgDnGAOEAc4gBxgDjEAeIAcYA4xAHiAHGIA8QB4gBxiAPEAeIQB4gDxAHiEAeIA8QhDhAHiAPEIQ4QB4hDHCAOEIc4QBwgDhCHOEAcIA5xgDhAHCAOcYA4QBziYLTidhqys24SDvLmKDNbc7I0KhpaJWMcIA4QhzhAHAwj7rnETVIxGm5InBlxxxLvkY/RcFfiqRF3IPEF+RgNxtWBEbcv8ZbEI3Ky8RhHbxtnRtwziXsSH0n8JPG+xHVytDFcVyc/S5QSu8aZeVZpuSbxucSnEu8k5e00L59tHvOYcyXcB8jHeeqJ/j8Sf0h8J/GNTiazvGkuHYCEjkT2RcWFfj5A4uZVpuPmZatc9fc3BA8npEe+t/jBdJzCL49xMBp4VjlStr5f/DroAe+Xu2SVigPE/cdgckLFAeIAcYgDxMEAC/BVd5SF+yy7+PXcUj34+N7cvjj44cn5Nnmv0teH8s/EO4y/j9l+KO/lzjFmkVOYyudq9w35fGPfl7/NfqX8PQ3trNv3e172pfP1jnci/9T2elPoZ5eBfPjU98vdaW9xIsd8QZE4aC6sdOEqsgu1n3wVFBKxdGTuSTyOHVTPYx45TlR44njb5rwkjmJynZuzMJ83r+1yTHJt8rGUnFZdvq/3Ok6+4PwutV/gi4tVVnbxs/vCE+e/dvezF9+p4nR/I67qUE1LTfR5hfe56Vq6QOvNZ89T4qhDxU8lz/WgrTJx501DrUNel237+a3Skd7WemYqfepUm91vz97dKYleiy/citNryZzWX3nbKr9tJ6rNnmehFbYdqjh53aw8xunBJokxzpzMiwpxJE0SLbYTgaqxVTtxkpg7otzEL7U6ulRGEWm9XVtRn+v0K6zwBdm8XmlyEhoY21qlYqtrJgko+o4XmrS5vRm88dC2rBO3QrT9GCZehYXEuJOMUMVl7iTDrbgIh84NHKxme1x/+yupuCswcwf+yElHx0ZTSbbinKpZ2LvWO16hrccmfDvVCodEO0vmtfbMu6FenKedwLzSiku1yUirzPSurzUybzlw4lRFcowLzfqcycw0Mqaumv8iMUtto0xdU+g8/VmtM6u81MlWrrjY+qHLrFIl7AemwHXkrvUnJLExZuJVW92hDYfEnLdgXe+FlikLb315kugsVWLsW7at5ySflc4cC6ermPzmr7VVRhJZulUY6vWB4+Retdm28zi1TmqbNYa+xyRQb4hKb7C5v0aLtPZlz3MJrv3s/0KIFctaHnlpRc0Si+Eise++VstC5ZpjlD1mfJ0T6Mz6irbJiB2PW8bOia7VWteHTjdrbEcb5JGXHszt+X1miXvamupAldmTtLNEI7F2lgJz5/FX6Y1pzVUmHv6C36vwWeTmqJ2JRh54jFV4bXzeoX3Xbls0T6uc8S36yOtfAQYAiv6RzeZ7di4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkZCRDg1NzAwQTk5MjExRUNCNDM5OThFMzc1MzYzQTdCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkZCRDg1NzAxQTk5MjExRUNCNDM5OThFMzc1MzYzQTdCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkJEODU2RkVBOTkyMTFFQ0I0Mzk5OEUzNzUzNjNBN0IiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RkJEODU2RkZBOTkyMTFFQ0I0Mzk5OEUzNzUzNjNBN0IiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6BEBBsAAAGyElEQVR42uxdS2wcRRDt2Z3ZdbyxExzHYDu2EllBCQFsRWBHCQHyuyCEOERwQUIcOSFx4cABAUICiTsccom4cAAfonDiEyNbCPwhgGQ+FvHNsYKF4t964/0NYy9EG89O+VX1mN1DtTbRatzT0zP9purV6+pex/d9owUrbvDPcRywduXJVtcPH4mqH/5eXcJtRhX6WlF1wn+le16z/YTihYcsm/GMGj2kTvUIV49zGH1RNcNn0YiW9fzuuYosEbKQtx23ZfhfoxARRlMYZQhmkT6A967IskAW7hNxv0P7R9obRnlS2q7RbYrZkiJrh5FFsxUuY6KRGD5OoxVhheKiyLJAFvLsZZyFa61oX4ngDokcWPeuyBIhC4+SEJaMx4P0uTgjx1k7bisVWXbIileloa2DLFKzr0/3R71h/WJDxJvgPjSqHZmfpdk/wgfB2EORxUQW8obTvizKHnFZPq3E4v5apqZG3ZHarPgYPMJW8Pietik080KuzlUpZDGp2qw4VAfadnB1KLq+jENFYT8KcXjUSdyjIovDfu4+QiT6xzGCR1647mrjB7lvT836iiwRshC1AJ9PxvkxoqMjKKD5Pe3lkXPVZkkZPD7CtL9D1AjZLJ7MhspmhmpeS5FloWdx/R137kSmduEo4/I4GnFbWlBkWfMsHGV4phU+r4f7RHs+hXt2tVl2yLLh6DiX4c4q47YPzyPjcn21WXGoDtsqOyw/yMUg3gfcJ0YpFjiDU5slRVZ4tPH5OG7OH57dbMPXkHcCz2tWm8X3hrg+zc05oMfcdZ2hh83br5pT/SblkX7T8czuJxJd7zqZIeMkxbbP0l/X82GdGnA+fd90thvMiTvG60r0feZkTtT/YSHqEs50kNnj4h9nzcq1oC5DB209lzj85Y7yNaL/dbVZq2OcJ7V5CyujDeoNEc8l49OVmqUp/lD5eboP+LwhN55VnhU3g6fxwl03Uf29OLnxf75olrOJlGs8z0+5fvK/4QvqLa4k5v5K3Po72dtZOtxTpC2ObMVauDWiTbeOA7W06ly6evDGrX4vfV/bvo7V1dVCdvqlCz8Hj6y5qfzJleRS4uIjA/1Lt29fvvLhsb7S8aOF80P5BlVKEa+B+KCo47NXvb6B11+58MLkxPjTZ895njf27YjXuit3Zy29p8Xt+PyhBw6cfvKpmZmZ5mzhi5GmfMGcP5HHfZzMGxKUop42a2+L//3IpWKxcPnjd9587dk7udzsnzd6Dz44Pzff3HL/8lK260BPd0/Pem65bW95d6Z8qKfs1NVmoQ/L3yz0EfrcSnE2S+V4a6Z0pv/3hYWFwWP5Z860ptLptbWsX16f/fG9pcXF+Ztz+/e3u4ElK2ev/ZC+Pu11d5S2tBD+Xn0tpJ/hv1a3Eyn+yWgnwuajzg0MfK7gDE++7K981d3dWcw8P/XdcF+vs2/Xr07m9OjYL48OPren/ejUxFRTfriYNyePFx47kk8PGmM3wSUQlGs/LK7GhM/QhVvb9IZ+obgxkMG3ku8kE/d4w1Ip+DgruURQoa2lXDnuPY6qC1wFlba2wRHX1Lt47r83lryXzQfddJPBx0+nSlU9biSehec0RXEuPEc0X/BTHq+7gUOkzQWSvYVLAw00bzj2Ew8pQeXR6/VGls0qdTz7NDxiJ/udIx+gEk1wxs0F89ZHjPlEm5ychuNZ49PmxTfMNxOVl8vZ9DZmy6dyfD1vvh7fqDz5W2MopTTT3U5nQtdoydY/IziSrc1mqVqqOsSkOuAkU4ZKPJfGhk/hOt22GoYiy0J1QEaeqzogVgNRx7irnaPWaIhXuCmyRN6QG+XJ1gzS+LXJ+cJ3D0EUt5pvgyJL5A3x7AEuUujjeHYFrrLboIywboosps2S2R2b3c9kM8n21hC5lq7d2UkGj0RwOJOio3l6hGX7sOFXRLIYNQ8+Pj0L2R9Gtk8Dd58h7l4O9NURDYvIgFRkiWJD7h5CyDuPq5RcZodgn8WhEButyNoBb8jlUNx5FNnKV/qKeHSJZAopz7JDVngEbPLR6bHiKg205+KqVNwYVm2WlGfJfEeUcmCzfgxBKL5mEIn7QJ+ryBLxLO4bLttRi0YEneeJ94p7RzTjV54Vn82iR4OryttwaJxbIZYRj3lr3qkiS8SzZL9hgUd8+I4hNsxOttYD4V9qs+Jj8Li9wMcT33PbJg5FYlLBLiSKLGvVIa5in4CN+z7kijbahiLr/0KWbHc92e8NxBUV0jrdtnOUiiwLZHF/v0n2+yfxnkUzftmOzLpPqW3Zmq0si9S5GhZi0WT6h/0uR0Q/FVlMZOlTAMs/AgwAhYXbZcot/RIAAAAASUVORK5CYII=\"","export default \"__VITE_ASSET__69c0aa5c__\"","export default \"__VITE_ASSET__87329142__\"","export default \"__VITE_ASSET__40b5ff40__\"","/*\n * 引入assets下的静态资源\n * @param {name} 静态资源地址(assets下路径+文件名, 如: 'images/logo.png')\n * @example\n * getAssets('images/logo.png')\n */\nimport debounce from 'lodash.debounce'\n\nexport const getAssets = (name) => {\n const path = `../assets/${name}`\n const modules = import.meta.globEager('../assets/*/*')\n return modules[path].default\n}\n\nexport const getType = (o) => {\n const s = Object.prototype.toString.call(o)\n return s.match(/\\[object (.*?)\\]/)[1].toLowerCase()\n}\n\nexport const emptyFn = () => {}\n\nexport const dateFormatNormal = (val, isYearOnly = false) => {\n const date = new Date(val.length > 10 ? val : val * 1000)\n const y = date.getFullYear()\n const m =\n date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1\n const d = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate()\n const hh = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours()\n const mm =\n date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes()\n\n return isYearOnly ? `${y}-${m}-${d}` : `${y}-${m}-${d} ${hh}:${mm}`\n}\n\nexport const dateFormat = (val) => {\n const time = val.length > 10 ? val : val * 1000\n\n const diff = new Date().getTime() - time\n let text = ''\n\n if (diff < 0) {\n return dateFormatNormal(time)\n }\n\n const m = 60 * 1000\n const h = m * 60\n const d = h * 24\n\n const diffM = Math.floor(diff / m)\n const diffH = Math.floor(diff / h)\n const diffD = Math.floor(diff / d)\n\n if (diffD >= 7) {\n text = '7天前'\n } else if (diffH >= 24) {\n text = `${diffD}天前`\n } else if (diffH >= 1) {\n text = `${diffH}小时前`\n } else if (diffM > 5) {\n text = `${diffM}分钟前`\n } else {\n text = '刚刚'\n }\n\n return `${text}`\n}\n\nexport const numberFormat = (val) => {\n if (val >= 10000) {\n return `${Math.round(val / 1000) / 10}万`\n }\n\n return val\n}\n\nexport const sticky = (parent, el, time = 200) => {\n window.addEventListener(\n 'scroll',\n debounce(() => {\n const top = document.documentElement.scrollTop || document.body.scrollTop\n\n const $parent = document.querySelector(parent)\n const $el = document.querySelector(el)\n if (top >= $parent.offsetTop) {\n if (!$el.classList.contains('fixed')) {\n $el.style.width = `${$parent.clientWidth}px`\n $el.classList.add('fixed')\n $el.style.top = document.querySelector('body').style.paddingTop || 0\n }\n } else if ($el.classList.contains('fixed')) {\n $el.classList.remove('fixed')\n $el.style.top = 'auto'\n }\n }, time)\n )\n}\n\nexport const emoList = [\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/01.png',\n title: 'GD01',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/02.png',\n title: 'GD02',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/03.png',\n title: 'GD03',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/04.png',\n title: 'GD04',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/05.png',\n title: 'GD05',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/06.png',\n title: 'GD06',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/07.png',\n title: 'GD07',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/08.png',\n title: 'GD08',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/09.png',\n title: 'GD09',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/10.png',\n title: 'GD10',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/11.png',\n title: 'GD11',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/12.png',\n title: 'GD12',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/13.png',\n title: 'GD13',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/14.png',\n title: 'GD14',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/15.png',\n title: 'GD15',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/51.png',\n title: 'GD51',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/52.png',\n title: 'GD52',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/90.png',\n title: 'GD90',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/91.png',\n title: 'GD91',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/92.png',\n title: 'GD92',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/93.png',\n title: 'GD93',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/94.png',\n title: 'GD94',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/95.png',\n title: 'GD95',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/96.png',\n title: 'GD96',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/97.png',\n title: 'GD97',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/98.png',\n title: 'GD98',\n },\n {\n url: 'https://ue.17173cdn.com/a/lib/v4/1.3.24/comment/assets/img/attitude/99.png',\n title: 'GD99',\n },\n]\n\nfunction findEmoByCode(t) {\n return emoList.find((it) => it.title === t)\n}\nexport const formatParagraph = (t) => {\n return t.replace(/\\[(GD[0-9]{2})\\]/g, (_, code) => {\n const found = findEmoByCode(code)\n return found ? `` : ''\n })\n}\n","import { defineStore } from './defineStore'\nimport { groupAPI } from '@/api'\nimport GroupModel from '@/models/group'\n\nexport const appHotGroupsStore = defineStore(() => {\n const loading = ref(false)\n const items = ref([])\n\n async function init() {\n const data = await groupAPI\n .getHotGroupList({ platform: 'web', num: 5 })\n .data()\n\n items.value = data.map((g) => GroupModel.fromJson(g))\n\n loading.value = false\n }\n\n return {\n loading,\n items,\n init,\n }\n})({ id: 'appHotGroups' })\n","\n\n\n\n\n","import { defineStore } from './defineStore'\nimport { groupAPI } from '@/api'\nimport GroupModel from '@/models/group'\n\nexport const appGroupsStore = defineStore(() => {\n const loading = ref(false)\n const items = ref([])\n\n async function init() {\n const data = await groupAPI.allGroups().data()\n\n items.value = data.map((g) => GroupModel.fromJson(g))\n\n loading.value = false\n }\n\n return {\n loading,\n items,\n init,\n }\n})({ id: 'appGroups' })\n","import { defineStore } from './defineStore'\nimport { userAPI } from '@/api'\nimport { getUid } from '@/core/passport'\n\nexport const userFollowsStore = defineStore(() => {\n const loading = ref(true)\n const items = ref([])\n\n async function init() {\n const res = userAPI.getUserFollowList(getUid())\n\n if (!(await res.check()).success) return\n\n const { dataSet } = await res.data()\n\n items.value = dataSet\n ? dataSet.map((g) => {\n return {\n uid: g.uid.toString(),\n nickname: g.nickname,\n followState: g.followState,\n fansNum: g.fansNum,\n }\n })\n : []\n\n loading.value = false\n }\n\n function add(user) {\n items.value = [...items.value, user]\n }\n\n function remove(user) {\n items.value = items.value.filter((g) => {\n return `${user.uid || user.authorUid}` !== `${g.uid || g.authorUid}`\n })\n }\n\n return {\n loading,\n items,\n init,\n add,\n remove,\n }\n})({ id: 'userFollows' })\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import { createVNode, render } from 'vue'\nimport DialogTemplate from './DialogTemplate.vue'\n\nexport const dialog = ({ msg, onConfirm, onCancel }) => {\n const container = document.createElement('div')\n\n const close = () => {\n document.body.removeChild(container)\n }\n\n const opt = {\n msg,\n\n onConfirm: () => {\n if (onConfirm) {\n onConfirm()\n }\n close()\n },\n onCancel: () => {\n if (onCancel) {\n onCancel()\n }\n close()\n },\n }\n\n const vm = createVNode(DialogTemplate, opt)\n render(vm, container)\n document.body.appendChild(container)\n\n return close\n}\n","\n\n\n","\n\n\n\n\n","import { isArray } from '@vue/shared'\nimport { defineStore } from './defineStore'\n/*\n *定义列表store\n * @param {config.pageSize} 分页大小\n * @param {config.getMethod} /src/api/index.js 下定义的接口方法, 如: threadAPI.plazaList\n */\nexport default function defineListStore(config) {\n return defineStore(() => {\n const items = ref([])\n\n const pageIndex = ref(0)\n\n const pageSize = ref(config.pageSize || 10)\n const empty = ref(false)\n const loading = ref(false)\n const finished = ref(false)\n const totalCount = ref(-1)\n\n async function load(params, option = {}) {\n const targetOption = {\n ...option,\n ...{\n limitTime: 1000,\n },\n }\n if (loading.value !== true) {\n loading.value = true\n pageIndex.value += 1 // 因为服务端接口页数是从 1开始的,所以这里即使首次加载也+1\n const beginTime = Date.now() * 1\n const data = await config\n .getMethod({\n pageSize: pageSize.value,\n page: pageIndex.value,\n ...params,\n })\n .data()\n if (data !== null) {\n if (isArray(data)) {\n const dataSet =\n typeof config.dataParser === 'function'\n ? config.dataParser(data || [])\n : data || []\n pageIndex.value = 1\n totalCount.value = dataSet.length\n empty.value = dataSet.length === 0\n finished.value = true\n items.value = dataSet\n } else {\n const dataSet =\n typeof config.dataParser === 'function'\n ? config.dataParser(data.dataSet || [])\n : data.dataSet || []\n pageIndex.value = data.page\n totalCount.value = data.totalCount\n empty.value = data.totalCount === 0\n items.value = [...items.value, ...dataSet]\n finished.value = items.value.length >= totalCount.value\n }\n }\n const duration = Date.now() * 1 - beginTime\n const delay =\n duration > targetOption.limitTime\n ? 0\n : targetOption.limitTime - duration\n\n if (delay > 0) {\n setTimeout(() => {\n loading.value = false\n }, delay)\n } else {\n loading.value = false\n }\n }\n }\n\n function reset() {\n pageIndex.value = 0\n items.value = []\n loading.value = false\n finished.value = false\n empty.value = false\n totalCount.value = -1\n }\n\n return {\n items,\n pageSize,\n totalCount,\n states: reactive({\n loading,\n finished,\n empty,\n }),\n actions: {\n load,\n reset,\n },\n }\n })\n}\n","import { defineStore } from './defineStore'\n/*\n *定义详情store\n */\nexport default function defineDetailStore(config) {\n return defineStore(() => {\n const data = ref(null)\n const loading = ref(false)\n const check = ref(null)\n\n async function load(params, option = {}) {\n const targetOption = {\n ...option,\n ...{\n limitTime: 0,\n },\n }\n\n if (loading.value) return\n\n loading.value = true\n const beginTime = Date.now()\n\n const instance = await config.getMethod({\n ...params,\n })\n const checkStatus = await instance.check()\n if (checkStatus.success) {\n const resData = await instance.data()\n data.value =\n typeof config.dataParser === 'function'\n ? config.dataParser(resData || [])\n : resData || {}\n\n const duration = Date.now() - beginTime\n const delay =\n duration > targetOption.limitTime\n ? 0\n : targetOption.limitTime - duration\n\n if (delay > 0) {\n setTimeout(() => {\n loading.value = false\n }, delay)\n } else {\n loading.value = false\n }\n } else {\n data.value = {}\n check.value = checkStatus\n loading.value = false\n }\n }\n\n function reset() {\n data.value = {}\n check.value = {}\n loading.value = false\n }\n\n return {\n check,\n data,\n loading,\n actions: {\n load,\n reset,\n },\n }\n })\n}\n","import * as d from '@/core/dataGenerator'\n\nexport default class RichContentModel {\n static fromJson(data) {\n const model = new RichContentModel()\n model.type = d.gString(data.type)\n model.value = model.isImage\n ? `${data.value}!a-3-640x${data.value.substr(\n data.value.lastIndexOf('.')\n )}`\n : data.value\n\n if (data.childs) model.childs = data.childs\n\n model.attr = data.attr ? JSON.parse(data.attr) : {}\n\n if (model.attr.needComment === 'true') {\n model.needCommentClass =\n model.value.length > 0\n ? 'show-need-comment-con'\n : 'hide-need-comment-con'\n }\n\n if (data.aid) {\n model.aid = d.gString(data.aid)\n }\n return model\n }\n\n get isImage() {\n return this.type === 'image'\n }\n\n get isText() {\n return this.type === 'text'\n }\n\n get isLink() {\n return this.type === 'link'\n }\n\n get isVideo() {\n return this.type === 'video'\n }\n\n get isIframe() {\n return this.type === 'iframe'\n }\n\n get isBlockText() {\n return this.attr.h || this.value === '\\n'\n }\n}\n","import * as d from '@/core/dataGenerator'\n\nexport default class UserBadgeModel {\n static fromJson(data) {\n const model = new UserBadgeModel()\n\n model.src = d.gString(data.logo)\n model.title = d.gString(data.title)\n model.time = d.gString(data.time)\n model.desc = d.gString(data.intro)\n model.level = 1\n\n const levelStr = model.src.match(/-\\d+\\.png/)\n if (levelStr) {\n const level = levelStr[0].split('-')[1].split('.')[0]\n model.level = level\n }\n\n return model\n }\n}\n","import * as d from '@/core/dataGenerator'\nimport RichContentModel from './richContent'\nimport UserBadgeModel from './userBadge'\n\nexport default class ThreadModel {\n static fromJson(data) {\n const model = new ThreadModel()\n // 如果是回帖&回复则id取的是pid, 如果是帖子则取得是tid\n model.id = d.gString(data.pid || data.tid)\n\n // 圈子id\n model.gid = d.gString(data.gid)\n\n // 子板块id\n model.subId = d.gString(data.subId)\n\n // 标题\n model.title = d.gString(data.subject)\n\n // 作者昵称\n model.author = d.gString(data.author)\n\n // 用户认证组名称\n model.authorTitle = d.gString(data.authorTitle)\n\n // 作者uid\n model.authorUid = d.gString(data.authorid)\n\n // 内容\n model.content = JSON.parse(d.gString(data.message))\n\n // 点赞数\n model.supports = d.gNum(data.support)\n\n // 当前用户是否已点赞\n model.hasSupported = d.gBool(data.supportState)\n\n // 回复数量(如果是帖子,则是所有评论)\n model.replies = d.gNum(data.replies)\n\n // 浏览数量\n model.views = d.gNum(data.views)\n\n // 回复的帖子用户uid\n model.puid = d.gString(data.puid)\n\n // 回复的帖子用户昵称\n model.pname = d.gString(data.pname)\n\n // 创建时间\n model.createDate = d.gNum(data.threadDate || data.postDate)\n // model.updateDate = d.gNum(data.threadEditDate || data.postEditDate)\n\n // 关联游戏\n model.newGameCode = d.gString(data.newGameCode)\n\n // 圈子名称\n model.groupName = d.gString(data.groupName)\n\n // 精华帖\n model.digest = d.gBool(data.digest)\n\n // 回复关联的回复id(对回复的回复)\n model.rpid = d.gString(data.rpid)\n\n // 回复关联的回帖id(对回帖的回复)\n model.ppid = d.gString(data.ppid)\n\n // 回帖/回复关联的帖子id\n model.tid = d.gString(data.tid)\n\n // 是否隐藏\n model.isHide = d.gNum(data.displayState) === 3\n\n // 发布平台platform(1: app 2: web)\n model.platform = d.gNum(data.platform || 0)\n\n // 回复列表\n model.replys = []\n if (data.reply) {\n data.reply.forEach((t) => {\n model.replys.push(ThreadModel.fromJson(t))\n })\n }\n\n // 【回帖】数,含子评论\n model.posts = d.gNum(data.totalPostTotal)\n\n // 回帖列表新增字段\n // 主贴的字段\n model.orginThreadTitle = d.gString(data.threadSubject)\n model.orginThreadContent = d.gString(data.threadMessage)\n // 回帖的评论的字段\n model.orginReplyAuthor = d.gString(data.atAuthor)\n model.orginReplyAuthorUid = d.gString(data.atAuthorid)\n model.orginReplyContent = d.gString(data.postMessage)\n model.orginExist = model.orginThreadContent || model.orginReplyContent\n\n // 徽章\n if (data.badge) {\n model.badge = UserBadgeModel.fromJson(data.badge)\n }\n\n // 表情引用\n model.attachQuote = data.attachQuote ? data.attachQuote : null\n\n // 内容:文本\n // model.text = model.getText\n\n // 内容:图片\n // model.images = model.getImages\n\n // 内容:视频\n // model.videos = model.getVideos\n\n // ui state\n // 列表里面删帖\n model.$visible = true\n return model\n }\n\n // 内容:文本\n get text() {\n return this.richContents.filter((t) => t.isText)\n }\n\n // 内容:图片\n get images() {\n return this.richContents.filter((t) => t.isImage)\n }\n\n // 内容:视频\n get videos() {\n return this.richContents.filter((t) => t.isVideo)\n }\n\n // 内容:视频\n get iframe() {\n return this.richContents.filter((t) => t.isIframe)\n }\n\n // 内容:鏈接\n get link() {\n return this.richContents.filter((t) => t.isLink)\n }\n\n // content转成RichContentModel列表\n get richContents() {\n const list = []\n // const c = JSON.parse(\n // '[{\"type\":\"video\",\"value\":\"40026153\",\"attr\":\"{\\\\\"videoid\\\\\":\\\\\"40026153\\\\\"}\",\"aid\":\"0\"},{\"type\":\"text\",\"value\":\"了个文件管理\\\\n\",\"attr\":\"{}\"},{\"type\":\"image\",\"value\":\"https://i.17173cdn.com/2fhnvk/YWxqaGBf/cms3/xydDJRbpqqxtDrt.jpg!a-3-480x.jpg\",\"attr\":\"{\\\\\"height\\\\\":\\\\\"300\\\\\",\\\\\"width\\\\\":\\\\\"400\\\\\"}\",\"aid\":0},{\"type\":\"text\",\"value\":\"\\\\n\",\"attr\":\"{}\"},{\"type\":\"link\",\"value\":\"https://www.17173.com\",\"attr\":\"{\\\\\"title\\\\\":\\\\\"17173网络游戏门户站\\\\\"}\"},{\"type\":\"text\",\"value\":\"\\\\n\",\"attr\":\"{}\"},{\"type\":\"iframe\",\"value\":\"https://player.bilibili.com/player.html?aid=717833773&bvid=BV12Q4y1C7wh&cid=402195847&page=1\",\"attr\":\"{}\"},{\"type\":\"text\",\"value\":\"\\\\n\",\"attr\":\"{}\"}]'\n // )\n // this.content = [\n // { type: 'text', value: '11111', attr: '{}', aid: 0 },\n // { type: 'text', value: '2222', attr: '{\"bold\":true}', aid: 0 },\n // { type: 'text', value: '3333\\n', attr: '{}', aid: 0 },\n // { type: 'text', value: '4444', attr: '{\"h\":2}', aid: 0 },\n // { type: 'text', value: '\\n5555\\n6666\\n', attr: '{}', aid: 0 },\n // ]\n let textPara = []\n // 拆分换行\n const splitContents = []\n this.content.forEach((t) => {\n if (t.type === 'text') {\n const values = t.value.split(/(\\n)/g).filter((value) => value !== '')\n values.forEach((value) => {\n splitContents.push({ ...t, value })\n })\n } else {\n splitContents.push(t)\n }\n })\n for (let i = 0; i < splitContents.length; i += 1) {\n const t = splitContents[i]\n const richModel = RichContentModel.fromJson(t)\n if (richModel.type === 'text' && !richModel.isBlockText) {\n textPara.push(richModel)\n }\n // 最后一行,或者当前行不是文本,并且已经有暂存的文本组,则将文本组加入内容列表\n if (\n textPara.length &&\n (richModel.type !== 'text' ||\n i === splitContents.length - 1 ||\n richModel.isBlockText)\n ) {\n let text = ''\n textPara.forEach((tt) => {\n text += tt.value\n })\n const textParaContent = RichContentModel.fromJson({\n type: 'text',\n value: text,\n childs: [...textPara],\n })\n textPara = []\n list.push(textParaContent)\n // console.log(textParaContent, 1)\n }\n\n if (\n (richModel.type !== 'text' || richModel.isBlockText) &&\n (typeof richModel.value !== 'string' ||\n richModel.attr.needComment ||\n richModel.value)\n ) {\n list.push(richModel)\n }\n }\n // console.log(list, 11)\n return list\n }\n}\n","import { threadAPI } from '@/api'\nimport defineListStore from './defineListStore'\nimport defineDetailStore from './defineDetailStore'\nimport ThreadModel from '@/models/thread'\n\nexport const threadInfoStore = defineDetailStore({\n getMethod: threadAPI.getThreadInfo,\n dataParser: (data) => {\n const json = { ...data.threadInfo, ...data.groupInfo }\n const threadModel = ThreadModel.fromJson(json)\n return threadModel\n },\n})\n\n// 首页帖子列表\nexport const homeThreadListStore = defineListStore({\n getMethod: threadAPI.plazaList,\n dataParser: (items) => {\n return items.map((item) => {\n const threadModel = ThreadModel.fromJson(item)\n try {\n return threadModel\n } catch (e) {\n console.error(e)\n }\n return item\n })\n },\n})\n\n// 首页关注动态列表\nexport const homeDynamicListStore = defineListStore({\n getMethod: threadAPI.dynamicList,\n dataParser: (items) => {\n return items.map((item) => {\n const threadModel = ThreadModel.fromJson(item)\n try {\n return threadModel\n } catch (e) {\n console.error(e)\n }\n return item\n })\n },\n})\n\n// 首页关注动态列表\nexport const homeDigestListStore = defineListStore({\n getMethod: threadAPI.digestList,\n dataParser: (items) => {\n return items.map((item) => {\n const threadModel = ThreadModel.fromJson(item)\n try {\n return threadModel\n } catch (e) {\n console.error(e)\n }\n return item\n })\n },\n})\n\n// 圈子主页帖子列表\nexport const groupHomeThreadListStore = defineListStore({\n getMethod: threadAPI.groupHomeList,\n dataParser: (items) => {\n return items.map((item) => {\n const threadModel = ThreadModel.fromJson(item)\n try {\n return threadModel\n } catch (e) {\n console.error(e)\n }\n return item\n })\n },\n})\n\n// 用户帖子列表\nexport const userThreadListStore = defineListStore({\n getMethod: threadAPI.getUserThreadList,\n dataParser: (items) => {\n return items.map((item) => {\n const threadModel = ThreadModel.fromJson(item)\n try {\n return threadModel\n } catch (e) {\n console.error(e)\n }\n return item\n })\n },\n})\n","\nexport default (sfc, props) => {\n for (const [key, val] of props) {\n sfc[key] = val\n }\n return sfc\n}\n","\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import { threadAPI, userAPI } from '@/api'\nimport defineListStore from './defineListStore'\nimport ThreadModel from '@/models/thread'\n\n// 用户回帖列表\nexport const userReplyListStore = defineListStore({\n getMethod: threadAPI.getUserReplyList,\n dataParser: (items) => {\n return items.map((item) => {\n const threadModel = ThreadModel.fromJson(item)\n try {\n return threadModel\n } catch (e) {\n console.error(e)\n }\n return item\n })\n },\n})\n\nexport const userNotificationStore = defineListStore({\n getMethod: userAPI.getNotification,\n})\n","import * as d from '@/core/dataGenerator'\nimport UserBadgeModel from './userBadge'\n\nexport default class UserModel {\n static fromJson(data) {\n const model = new UserModel()\n\n model.id = d.gString(data.uid || data.authorUid)\n model.uid = model.id\n model.nickname = d.gString(data.nickname)\n\n model.gender = d.gNum(data.gender)\n\n model.title = d.gString(data.userTitle)\n model.signature = d.gString(data.signature)\n model.location = d.gString(data.location)\n\n model.support = d.gString(data.support)\n\n model.fansNum = d.gNum(data.fansNum || data.fansNum)\n\n model.threadNum = d.gNum(data.threadNum)\n model.followNum = d.gNum(data.follow || data.followNum)\n model.postNum = d.gNum(data.postNum)\n\n model.status = d.gString(data.status)\n model.followState = d.gNum(data.followState)\n\n model.clubDate = d.gNum(data.clubDate)\n model.clubDays = d.gNum(data.clubDays)\n model.ppDate = d.gNum(data.ppDate)\n model.ppDays = d.gNum(data.ppDays)\n\n // 徽章\n if (data.badge) {\n model.badge = UserBadgeModel.fromJson(data.badge)\n }\n return model\n }\n}\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import home from './home/Home.vue'\nimport thread from './thread/Thread.vue'\nimport post from './thread/post.vue'\nimport group from './group/Group.vue'\nimport groupManagerList from './group/GroupManagerList.vue'\nimport groupList from './group/GroupList.vue'\nimport user from './user/User.vue'\nimport userFollowList from './user/UserFollowList.vue'\nimport userFansList from './user/UserFansList.vue'\nimport userNotification from './user/UserNotification.vue'\nimport userProfile from './user/UserProfile.vue'\nimport help from './help/Help.vue'\nimport error from './404.vue'\nimport sample from './Sample.vue'\n\nexport default {\n home,\n thread,\n post,\n group,\n groupManagerList,\n groupList,\n user,\n userFollowList,\n userFansList,\n userNotification,\n userProfile,\n help,\n error,\n sample,\n}\n","import { createRouter, createWebHistory } from 'vue-router'\nimport { isLoggedIn, login } from './core/passport'\nimport * as pages from './core/pages'\nimport templates from '@/pages/index'\n\nconst routes = []\n\nObject.keys(pages).forEach((key) => {\n const routeInfo = pages[key]\n routeInfo.component = templates[key]\n routeInfo.meta = {\n title: `${routeInfo.title}_一起一起上游戏圈_硬核游戏玩家聚集地_17173.com中国游戏门户站`,\n ...routeInfo.meta,\n ...{\n needAuth: routeInfo.needAuth,\n },\n }\n routes.push(routeInfo)\n})\n// 所有未定义的路由跳转到404页面\nroutes.push({\n path: '/:pathMatch(.*)*',\n redirect: '/404',\n})\n\nconst router = createRouter({\n history: createWebHistory(),\n routes,\n})\n\nrouter.beforeEach((to) => {\n // 需要登录的页面,直接调用登录方法\n if (to.meta.needAuth === true && !isLoggedIn()) {\n login()\n }\n if (to.meta.title) {\n document.title = to.meta.title\n }\n if (to.meta.keywords) {\n document\n .querySelector('meta[name=\"keywords\"]')\n .setAttribute('content', to.meta.keywords)\n }\n if (to.meta.description) {\n document\n .querySelector('meta[name=\"description\"]')\n .setAttribute('content', to.meta.description)\n }\n})\n\nexport default router\n","/**\n * 绑定模块统计\n * 在html元素上配置属性: v-track-module=\"'模块统计代码'\"\n */\nexport const trackModule = {\n mounted: (el, binding) => {\n if (binding.value) {\n _jc_ping.push(['_trackModule', el, binding.value])\n }\n },\n}\n\n/**\n * 绑定点击统计\n * 在html元素上配置属性: v-track-click=\"'点击统计代码'\"\n */\nexport const trackClick = {\n mounted: (el, binding) => {\n if (binding.value) {\n el.addEventListener('click', () => {\n console.log(el, binding.value)\n _jc_ping.push(['_trackBlockClick', binding.value])\n })\n }\n },\n}\n","import mitt from 'mitt'\nimport App from './App.vue'\nimport routes from './routes'\nimport svgIcon from './components/SvgIcon.vue'\nimport pages from './pages'\nimport { trackModule, trackClick } from './directives/bi'\n\nconst app = createApp(App)\n\napp.use(routes).component('svg-icon', svgIcon)\n\napp.provide('pages', pages)\napp.directive('trackModule', trackModule)\napp.directive('trackClick', trackClick)\n\nconst eventBus = mitt()\neventBus.on('*', (...args) => console.debug(args))\napp.provide('event-bus', eventBus)\n\napp.mount('#app')\n"],"names":["qs","userAPI","ToastTemplate","d.gString","d\n .gString","d.gNum","help","debounce","DialogTemplate","d.gBool","home","thread","post","group","groupManagerList","groupList","user","userFollowList","userFansList","userNotification","userProfile","error","pages","templates","App","routes","svgIcon"],"mappings":"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"}