2021-06-12 13:52:15 +08:00

260 lines
9.8 KiB
JavaScript
Vendored

export default {
/**
* @param context
* @param params // {url,data,method,timeout,header,spinner,websocket, before,complete,success,error,after}
* @returns {Promise<unknown>}
*/
call(context, params) {
const {state, commit} = context;
if (!state.method.isJson(params)) params = {url: params}
if (!state.method.isJson(params.header)) params.header = {}
params.url = state.method.apiUrl(params.url);
params.data = state.method.date2string(params.data);
params.header['Content-Type'] = 'application/json';
params.header['language'] = $A.getLanguage();
params.header['token'] = state.userToken;
params.header['fd'] = state.method.getStorageString("userWsFd");
//
return new Promise(function (resolve, reject) {
if (params.spinner === true) {
const spinner = document.getElementById("common-spinner");
if (spinner) {
const beforeCall = params.before;
params.before = () => {
state.ajaxLoadNum++;
spinner.style.display = "block"
typeof beforeCall == "function" && beforeCall();
};
//
const completeCall = params.complete;
params.complete = () => {
state.ajaxLoadNum--;
if (state.ajaxLoadNum <= 0) {
spinner.style.display = "none"
}
typeof completeCall == "function" && completeCall();
};
}
}
//
params.success = (result, status, xhr) => {
if (!state.method.isJson(result)) {
resolve(result, status, xhr);
return;
}
const {ret, data, msg} = result;
if (ret === -1 && params.checkRole !== false) {
//身份丢失
$A.modalError({
content: msg,
onOk: () => {
commit("logout")
}
});
return;
}
if (ret === 1) {
resolve(data, msg);
} else {
reject(data, msg || "Unknown error")
}
};
params.error = () => {
reject({}, "System error")
};
//
if (params.websocket === true || params.ws === true) {
const apiWebsocket = state.method.randomString(16);
const apiTimeout = setTimeout(() => {
const WListener = state.ajaxWsListener.find((item) => item.apiWebsocket == apiWebsocket);
if (WListener) {
WListener.complete();
WListener.error("timeout");
WListener.after();
}
state.ajaxWsListener = state.ajaxWsListener.filter((item) => item.apiWebsocket != apiWebsocket);
}, params.timeout || 30000);
state.ajaxWsListener.push({
apiWebsocket: apiWebsocket,
complete: typeof params.complete === "function" ? params.complete : () => { },
success: typeof params.success === "function" ? params.success : () => { },
error: typeof params.error === "function" ? params.error : () => { },
after: typeof params.after === "function" ? params.after : () => { },
});
//
params.complete = () => { };
params.success = () => { };
params.error = () => { };
params.after = () => { };
params.header['Api-Websocket'] = apiWebsocket;
//
if (state.ajaxWsReady === false) {
state.ajaxWsReady = true;
commit("wsMsgListener", {
name: "apiWebsocket",
callback: (msg) => {
switch (msg.type) {
case 'apiWebsocket':
clearTimeout(apiTimeout);
const apiWebsocket = msg.apiWebsocket;
const apiSuccess = msg.apiSuccess;
const apiResult = msg.data;
const WListener = state.ajaxWsListener.find((item) => item.apiWebsocket == apiWebsocket);
if (WListener) {
WListener.complete();
if (apiSuccess) {
WListener.success(apiResult);
} else {
WListener.error(apiResult);
}
WListener.after();
}
state.ajaxWsListener = state.ajaxWsListener.filter((item) => item.apiWebsocket != apiWebsocket);
break;
}
}
});
}
}
$A.ajaxc(params);
})
},
/**
* 获取任务信息
* @param state
* @param dispatch
* @param task_id
* @returns {Promise<unknown>}
*/
taskOne({state, dispatch}, task_id) {
return new Promise(function (resolve, reject) {
dispatch("call", {
url: 'project/task/one',
data: {
task_id,
},
}).then((data, msg) => {
state.projectDetail.project_column.some(({project_task}) => {
let index = project_task.findIndex(({id}) => id === task_id);
if (index > -1) {
project_task.splice(index, 1, Object.assign(project_task[index], data))
return true;
}
});
if (task_id == state.projectOpenTask.id) {
state.projectOpenTask = Object.assign({}, state.projectOpenTask, data);
}
resolve(data, msg)
}).catch((data, msg) => {
reject(data, msg)
});
});
},
/**
* 获取任务详细描述
* @param state
* @param dispatch
* @param task_id
* @returns {Promise<unknown>}
*/
taskContent({state, dispatch}, task_id) {
return new Promise(function (resolve, reject) {
dispatch("call", {
url: 'project/task/content',
data: {
task_id,
},
}).then((data, msg) => {
state.projectTaskContent[task_id] = data;
if (task_id == state.projectOpenTask.id) {
state.projectOpenTask = Object.assign({}, state.projectOpenTask, {content: data || {}});
}
resolve(data, msg)
}).catch((data, msg) => {
reject(data, msg)
});
});
},
/**
* 获取任务文件
* @param state
* @param dispatch
* @param task_id
* @returns {Promise<unknown>}
*/
taskFiles({state, dispatch}, task_id) {
return new Promise(function (resolve, reject) {
dispatch("call", {
url: 'project/task/files',
data: {
task_id,
},
}).then((data, msg) => {
state.projectTaskFiles[task_id] = data;
if (task_id == state.projectOpenTask.id) {
state.projectOpenTask = Object.assign({}, state.projectOpenTask, {files: data});
}
resolve(data, msg)
}).catch((data, msg) => {
reject(data, msg)
});
});
},
/**
* 获取子任务
* @param state
* @param dispatch
* @param task_id
* @returns {Promise<unknown>}
*/
subTask({state, dispatch}, task_id) {
return new Promise(function (resolve, reject) {
dispatch("call", {
url: 'project/task/sublist',
data: {
task_id,
},
}).then((data, msg) => {
state.projectSubTask[task_id] = data;
if (task_id == state.projectOpenTask.id) {
state.projectOpenTask = Object.assign({}, state.projectOpenTask, {sub_task: data});
}
resolve(data, msg)
}).catch((data, msg) => {
reject(data, msg)
});
});
},
/**
* 打开任务详情页
* @param state
* @param dispatch
* @param task_id
*/
openTask({state, dispatch}, task_id) {
let data = {id: task_id};
state.projectDetail.project_column.some(({project_task}) => {
const task = project_task.find(({id}) => id === task_id);
if (task) {
data = Object.assign(data, task);
return true
}
});
//
data.content = state.projectTaskContent[task_id] || {}
data.files = state.projectTaskFiles[task_id] || []
data.subtask = state.projectSubTask[task_id] || []
state.projectOpenTask = Object.assign({}, data, {_show: true});
//
dispatch("taskOne", task_id);
dispatch("taskContent", task_id);
dispatch("taskFiles", task_id);
dispatch("subTask", task_id);
},
}