You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.9 KiB
170 lines
4.9 KiB
import {
|
|
ref,
|
|
onMounted,
|
|
computed,
|
|
watch,
|
|
nextTick
|
|
} from 'vue';
|
|
import {
|
|
onLoad
|
|
} from '@dcloudio/uni-app';
|
|
import useGetUserIdFromLocal from '@/hooks/user/useGetUserIdFromLocal';
|
|
|
|
import {
|
|
useStore
|
|
} from 'vuex';
|
|
// import {
|
|
// flatten
|
|
// } from 'lodash';
|
|
|
|
export default function useInit() {
|
|
const store = useStore();
|
|
const token = computed(() => store.state.user.token);
|
|
const userId = useGetUserIdFromLocal();
|
|
const roleId = computed(() => store.state.role.roleId);
|
|
const timeNode = computed(() => store.state.task.timeNode);
|
|
const timeUnit = computed(() => store.state.task.timeUnit);
|
|
const tasks = computed(() => store.state.task.tasks);
|
|
const newProjectInfo = computed(() => store.state.task.newProjectInfo);
|
|
const showScrollTo = computed(() => store.state.task.showScrollTo);
|
|
const timeGranularity = computed(() => store.getters['task/timeGranularity']);
|
|
const projectId = computed(() => store.getters['project/projectId']);
|
|
const height = ref(null);
|
|
const timeLine = ref(null);
|
|
|
|
onLoad(options => {
|
|
if (options.share && options.share === '1') {
|
|
shareInit(options);
|
|
} else {
|
|
init(options);
|
|
}
|
|
});
|
|
|
|
// onMounted(() => {
|
|
// const system = uni.getSystemInfoSync();
|
|
// height.value = `${system.windowHeight}px`;
|
|
// });
|
|
|
|
|
|
|
|
// 设置 初始显示角色信息
|
|
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', '');
|
|
}
|
|
|
|
/**
|
|
* 通过项目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 : []);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 通过项目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 || '获取项目信息失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 初始化
|
|
* @param {object | null} options
|
|
*/
|
|
function init(options) {
|
|
console.log('初始化init')
|
|
if (!token.value) {
|
|
// 不论有没有token都直接从userId获取token
|
|
// token有过期时间 从本地获取可能是过期 干脆直接从userId获取
|
|
if (!options || !options.u) {
|
|
uni.$ui.showToast('缺少用户信息参数'); // 参数里没有u (userId)提示
|
|
} else {
|
|
store.dispatch('user/getToken', options.u);
|
|
}
|
|
}
|
|
|
|
// 参数里有项目名称 就设置标题里的项目名称
|
|
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);
|
|
// 查询医院是否填写了调查问卷
|
|
// this.handleQueryNotWrite(options.p);
|
|
// 根据项目id获取成员列表
|
|
store.dispatch('role/getAllMembers', {
|
|
projectId: options.p
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
// 分享链接来的初始化
|
|
async function shareInit(options) {
|
|
console.log('分享链接来的初始化init')
|
|
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
|
|
});
|
|
console.log('query',query)
|
|
init(query);
|
|
}
|
|
} else {
|
|
uni.$ui.showToast('缺少用户信息参数,请登录');
|
|
}
|
|
}
|
|
|
|
return {
|
|
init
|
|
}
|
|
|
|
}
|
|
|