import { computed } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useStore } from 'vuex'; export default function useInit() { const store = useStore(); const token = computed(() => store.state.user.token); onLoad(options => { if (options.share && options.share === '1') { shareInit(options); } else { init(options); } }); /** * 通过项目id获取项目信息 * @param {object} params 提交的参数 */ async function getProjectById(params) { try { const data = await uni.$u.api.findProjectById(params); store.commit('project/setProject', data); // 根据项目id获取角色列表 getRoles(params); } catch (error) { console.log('error: ', error || '获取项目信息失败'); } } /** * 通过项目id获取角色信息 * @param {string} projectId * @param {object} params 提交的参数 */ function getRoles(params) { uni.$catchReq.findShowRole(params, (err, data) => { if (err) { console.error('err: ', err || '获取角色信息失败'); } else { store.commit('role/setInvisibleRoles', data ? data.invisibleList : []); store.commit('role/setVisibleRoles', data ? data.visibleList : []); setInitialRoleId(data ? data.visibleList : []); } }); } // 设置 初始显示角色信息 function setInitialRoleId(visibleList) { if (!visibleList || !visibleList.length) return; const index = visibleList.findIndex(item => +item.mine === 1); const currentRole = index > 0 ? visibleList[index] : visibleList[0]; const storageRoleId = uni.$storage.getStorageSync('roleId'); const currentRoleId = storageRoleId || (currentRole ? currentRole.id : ''); store.commit('role/setRoleId', currentRoleId); // 清空storage uni.$storage.setStorageSync('roleId', ''); } /** * 初始化 * @param {object | null} options */ function init(options) { // 参数里有项目名称 就设置标题里的项目名称 options && options.pname && store.commit('project/setProjectName', options.pname); if (!options || !options.p) { uni.$ui.showToast('缺少项目信息参数'); // 没有项目id参数 } else { if (options.p !== uni.$storage.getStorageSync('projectId')) { console.log('切项目了'); uni.$storage.setStorageSync('roleId', ''); } // 根据项目id获取项目信息 const params = { projectId: options.p, num: 0 }; getProjectById(params); // 根据项目id获取成员列表 store.dispatch('role/getAllMembers', { projectId: options.p }); } } // 分享链接来的初始化 async function shareInit(options) { const storageUser = uni.$storage.getStorageSync('user'); const user = storageUser ? JSON.parse(storageUser) : null; if (user && user.id) { await store.dispatch('user/getToken', user.id); const res = await clickShare({ code: options.shareId }); if (res && res.projectId) { let query = { ...uni.$route.query }; query = { u: user.id, p: res.projectId }; uni.$router.push({ path: uni.$route.path, query }); init(query); } } else { uni.$ui.showToast('缺少用户信息参数,请登录'); } } /** * 点击分享连接 * @param {any} commit * @param {object} param 请求参数 */ async function clickShare(param) { try { const data = await uni.$catchReq.clickShare(param); return data; } catch (error) { uni.$ui.showToast(error.msg || '获取失败'); } } return { init }; }