kuaifan bbec0eaebd feat(appstore): 应用商店 URL 增加 hide_apps 参数,移动 APP 隐藏 AI 时同步隐藏 AI 助手应用
主程序新增 hiddenStoreAppIds getter 与 {store_hidden_app_ids} 占位符,
由 appAiHidden 决定需在应用商店中隐藏的应用 ID,以逗号分隔传给应用商店。
2026-10-01 13:45:01 +00:00

368 lines
11 KiB
JavaScript
Vendored
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default {
/**
* 是否加载中
* @param state
* @returns {function(*)}
*/
isLoad(state) {
return function (key) {
const load = state.loads.find(item => item.key === key);
return !!(load && load.num > 0)
}
},
/**
* 是否在消息页面
* @param state
* @returns {boolean}
*/
isMessengerPage(state) {
return state.routeName === 'manage-messenger'
},
/**
* 当前打开的项目
* @param state
* @returns {{cacheParameter: {}}}
*/
projectData(state) {
if (state.projectId > 0) {
let data = state.cacheProjects.find(({id}) => id == state.projectId);
if (data) {
let cacheParameter = state.cacheProjectParameter.find(({project_id}) => project_id == state.projectId);
if (!cacheParameter) {
cacheParameter = $A.projectParameterTemplate(state.projectId)
state.cacheProjectParameter.push(cacheParameter);
}
if (cacheParameter.menuType === undefined) {
cacheParameter.menuType = 'column'
}
data.cacheParameter = cacheParameter;
return data;
}
}
return {
cacheParameter: {}
};
},
/**
* 当前打开的任务
* @param state
* @returns {{}|{readonly id?: *}}
*/
taskData(state) {
let taskId = state.taskId;
if (taskId == 0) {
taskId = $A.runNum(window.__taskId);
}
if (taskId > 0) {
window.__taskId = taskId;
const task = state.cacheTasks.find(({id}) => id == taskId);
if (task) {
return task;
}
}
return {};
},
/**
* 转换任务列表
* @returns {function(*): *}
*/
transforTasks(state) {
return function (list) {
return list.filter(({parent_id}) => {
if (parent_id > 0) {
if (list.find(({id}) => id == parent_id)) {
return false;
}
}
return true;
}).map(task => {
if (task.parent_id > 0) {
// 子任务
const data = state.cacheTasks.find(({id}) => id == task.parent_id);
if (data) {
return Object.assign({}, data, {
id: task.id,
parent_id: task.parent_id,
name: task.name,
start_at: task.start_at,
end_at: task.end_at,
complete_at: task.complete_at,
_time: task._time,
flow_item_id: task.flow_item_id,
flow_item_name: task.flow_item_name,
flow_item_status: task.flow_item_status,
sub_top: true,
sub_my: [],
});
} else {
return Object.assign({}, task, {
sub_top: true,
sub_my: [],
});
}
} else {
// 主任务
return Object.assign({}, task, {
sub_top: false,
sub_my: list.filter(({parent_id}) => parent_id == task.id),
});
}
})
}
},
/**
* 仪表盘任务数据
* @param state
* @returns {{
* overdue: Array, // 超期任务列表
* overdue_count: number, // 超期任务数量
* today: Array, // 今日任务列表
* today_count: number, // 今日任务数量
* todo: Array, // 待办任务列表
* todo_count: number // 待办任务数量
* }}
*/
dashboardTask(state) {
const todayStart = $A.daytz().startOf('day'),
todayEnd = $A.daytz().endOf('day'),
todayNow = $A.daytz();
const filterTask = (task, checkCompleted = true) => {
if (task.archived_at) {
return false;
}
if (task.complete_at && checkCompleted === true) {
return false;
}
if (task.start_at && $A.dayjs(task.start_at) > todayNow) {
return false;
}
return task.owner == 1;
}
// 获取所有未完成的任务
let array = state.cacheTasks.filter(task => filterTask(task));
// 处理临时完成的任务
let tmpCount = 0;
if (state.taskCompleteTemps.length > 0) {
let tmps = state.cacheTasks.filter(task => state.taskCompleteTemps.includes(task.id) && filterTask(task, false));
if (tmps.length > 0) {
tmpCount = tmps.length;
array = $A.cloneJSON(array);
array.push(...tmps);
}
}
// 使用一次遍历完成任务分类
const result = {
overdue: [],
today: [],
todo: [],
overdue_count: 0,
today_count: 0,
todo_count: 0
};
// 遍历任务进行分类
array.forEach(task => {
const isTemp = state.taskCompleteTemps.includes(task.id);
if (task.end_at && $A.dayjs(task.end_at) <= todayNow) {
// 超期任务
result.overdue.push(task);
if (!isTemp) {
result.overdue_count++;
}
} else if (task.end_at) {
const end = $A.dayjs(task.end_at);
if (todayStart <= end && end <= todayEnd) {
// 今日任务
result.today.push(task);
if (!isTemp) {
result.today_count++;
}
} else {
// 待办任务
result.todo.push(task);
if (!isTemp) {
result.todo_count++;
}
}
} else {
// 无截止日期的任务归类为待办
result.todo.push(task);
if (!isTemp) {
result.todo_count++;
}
}
});
return result;
},
/**
* 协助任务
* @param state
* @returns {Array} // 协助任务列表
*/
assistTask(state) {
const filterTask = (task, checkCompleted = true) => {
if (task.archived_at) {
return false;
}
if (task.complete_at && checkCompleted === true) {
return false;
}
return task.assist && task.owner === 0;
}
// 获取所有未完成的协助任务
let array = state.cacheTasks.filter(task => filterTask(task));
// 处理临时完成的任务
if (state.taskCompleteTemps.length > 0) {
const tmps = state.cacheTasks.filter(task =>
state.taskCompleteTemps.includes(task.id) &&
filterTask(task, false)
);
if (tmps.length > 0) {
array = $A.cloneJSON(array);
array.push(...tmps);
}
}
// 按截止时间排序:无截止时间的任务排在最后
return array.sort((a, b) => {
const timeA = a.end_at ? $A.dayjs(a.end_at) : $A.dayjs('2099-12-31 23:59:59');
const timeB = b.end_at ? $A.dayjs(b.end_at) : $A.dayjs('2099-12-31 23:59:59');
return timeA - timeB;
});
},
/**
* 获取草稿
* @param state
* @returns {function(*): *|string}
*/
getDialogDraft: (state) => (id) => {
const draft = state.dialogDrafts.find(item => item.id === id)
return draft || null
},
/**
* 是否显示草稿标签
* @param state
* @returns {function(*): boolean}
*/
tagDialogDraft: (state) => (id) => {
const draft = state.dialogDrafts.find(item => item.id === id)
return !!draft?.tag
},
/**
* 获取引用
* @param state
* @returns {function(*): *}
*/
getDialogQuote: (state) => (id) => {
const quote = state.dialogQuotes.find(item => item.id === id)
return quote || null
},
/**
* AI 界面是否可见
* 移动 APP 等待系统配置加载完成后再展示,避免启动时闪现。
*/
aiVisible(state, getters) {
const installed = state.microAppsIds?.includes('ai')
if (!$A.isEEUIApp) {
return installed
}
return installed && state.systemConfig.__state === 'success' && !getters.appAiHidden
},
/**
* 移动 APP 是否隐藏 AI 功能
*/
appAiHidden(state) {
return $A.isEEUIApp
&& (state.systemConfig.__state !== 'success' || state.systemConfig.app_ai_hidden === true)
},
/**
* 当前客户端需在应用商店中隐藏的应用 ID 列表
*/
hiddenStoreAppIds(state, getters) {
return getters.appAiHidden ? ['ai'] : []
},
/**
* 当前客户端可见的会话
*/
visibleDialogs(state, getters) {
if (!getters.appAiHidden) {
return state.cacheDialogs
}
return state.cacheDialogs.filter(dialog => !$A.isAiBotDialog(dialog))
},
/**
* 系统功能是否启用(「系统功能」应用未安装或该功能被停用时为 false)
* 工作报告、日历、我的收藏、最近打开、签到打卡的所有入口统一以此判断
*
* @param {Object} state
* @returns {function(string): boolean} 参数为功能标识:report/calendar/favorite/recent/checkin
*/
systemFunctionEnabled: (state) => (name) => {
return state.systemFunctions?.[name] === true
},
/**
* 获取应用菜单
* 过滤出location为application的菜单项
*
* @param {Object} state
* @returns {Array}
*/
filterMicroAppsMenus: (state, getters) => {
return state.microAppsMenus.filter(item => {
return item.location === 'application' && (item.id !== 'ai' || getters.aiVisible)
})
},
/**
* 获取应用管理菜单
* 过滤出location为application/admin的菜单项
*
* @param {Object} state
* @returns {Array}
*/
filterMicroAppsMenusAdmin: (state, getters) => {
return state.microAppsMenus.filter(item => {
return item.location === 'application/admin' && (item.id !== 'ai' || getters.aiVisible)
})
},
/**
* 获取主导航菜单
* 过滤出location为main/menu的菜单项
*
* @param {Object} state
* @returns {Array}
*/
filterMicroAppsMenusMain: (state, getters) => {
return state.microAppsMenus.filter(item => {
return item.location === 'main/menu' && (item.id !== 'ai' || getters.aiVisible)
})
}
}