Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"check": "tsc --noEmit -p tsconfig.app.json --pretty false && tsc --noEmit -p tsconfig.node.json --pretty false",
"typecheck": "tsc -b --pretty false",
"build": "tsc -b && tsc --noEmit -p tsconfig.team-projects.json && vite build",
"check": "tsc --noEmit -p tsconfig.app.json --pretty false && tsc --noEmit -p tsconfig.node.json --pretty false && tsc --noEmit -p tsconfig.team-projects.json --pretty false",
"typecheck": "tsc -b --pretty false && tsc --noEmit -p tsconfig.team-projects.json --pretty false",
"test": "vitest run --config ../../vitest.config.ts --passWithNoTests",
"preview": "vite preview"
},
Expand Down
13 changes: 13 additions & 0 deletions apps/web/src/components/flaremo-explorer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,19 @@ export const FlareMoExplorer = memo(function FlareMoExplorer({
<BrainIcon className="size-4 shrink-0" />
<span className="min-w-0 flex-1 truncate">{t("nav.memory")}</span>
</Link>
<Link
activeProps={{
className: "!bg-accent !text-accent-foreground font-medium",
}}
className="flex h-9 items-center gap-3 rounded-lg px-2.5 text-muted-foreground hover:bg-muted hover:text-foreground"
onClick={onNavigate}
to="/team-projects"
>
<FolderKanbanIcon className="size-4 shrink-0" />
<span className="min-w-0 flex-1 truncate">
{t("nav.teamProjects")}
</span>
</Link>
<Link
activeProps={{
className: "!bg-accent !text-accent-foreground font-medium",
Expand Down
4 changes: 3 additions & 1 deletion apps/web/src/components/workspace/workspace-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export type WorkspaceLayoutProps = {
mainRef?: RefObject<HTMLElement | null>;
onScroll?: (event: UIEvent<HTMLElement>) => void;
maxWidthClass?: string;
outerMaxWidthClass?: string;
};

export function WorkspaceLayout({
Expand All @@ -64,6 +65,7 @@ export function WorkspaceLayout({
mainRef,
onScroll,
maxWidthClass = "max-w-[640px]",
outerMaxWidthClass = "max-w-[950px]",
}: WorkspaceLayoutProps) {
const navigate = useNavigate();
const [mobileSheetOpen, setMobileSheetOpen] = useState(false);
Expand Down Expand Up @@ -176,7 +178,7 @@ export function WorkspaceLayout({

return (
<div className="h-svh overflow-hidden bg-background">
<div className="mx-auto flex h-full w-full max-w-[950px]">
<div className={cn("mx-auto flex h-full w-full", outerMaxWidthClass)}>
<WorkspaceSidebar
collapsed={sidebarCollapsed}
explorer={sidebarContent}
Expand Down
302 changes: 302 additions & 0 deletions apps/web/src/features/team-projects/copy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,302 @@
// The existing KOSX record protocol is language-neutral; only UI copy is localized.
// zh-CN is the source wording. Other FlareMo locales use English until reviewed.
const pairs = `
· 保存于| · saved at
· 原始提交者未验证| · original author unverified
· 当前记录归属| · current record owner
· 最近更新:| · Last updated:s
← 返回|← Back
← 返回总览|← Back to projects
上传中…|Uploading…
上传失败:|Upload failed:s
上传结果待确认;请核对后以同一提交标识重试|Upload result is uncertain. Check it and retry with the same submission ID.
上传资料|Upload file
为|Fors
为进行中必填| is required when active
下一步|Next step
下一步动作|Next action
下次跟进日期|Next follow-up date
下次跟进:|Next follow-up:s
下载已验证文件|Download verified file
不能直接切换到这个状态|Cannot switch directly to this status
个项目| projects
个项目 · 团队共| projects · team totals
主记录暂无附件。|No files on the project record.
仅展示当前账号可访问且原版仍保留的修订。|Only retained revisions accessible to this account are shown.
仅展示当前账号可访问且原版仍保留的修订。原版有最近 50 份的保留阈值。|Only retained revisions accessible to this account are shown. FlareMo retains the latest 50.
仍无法确认结果:|Result is still uncertain:s
使用原版 FlareMo 账号登录,再返回此页刷新。|Sign in with your FlareMo account, then return and refresh.
保存|Save
保存中…|Saving…
保存修改|Save changes
保存失败:|Save failed:s
保存结果待确认。已阻止重复创建;请刷新核对。|Save result is uncertain. Duplicate creation is blocked; refresh to check.
保存结果待确认,请核对后使用同一次提交重试|Save result is uncertain. Check it, then retry the same submission.
信息待补充|Information needed
修改下一步|Edit next step
修改失败:|Update failed:s
修改本人记录|Edit my update
修订读取中…|Loading revisions…
修订读取失败。|Could not load revisions.
先核对上一笔保存结果,再继续提交|Check the previous save result before submitting again.
全部成员|All members
全部状态|All statuses
关联待处理 ·|Unlinked records ·s
关联待核验|Link not verified
关联项目|Linked project
关联项目已不可读或格式已变化,请刷新|The linked project is unavailable or changed format. Refresh.
关闭|Close
初始|Original
刷新|Refresh
刷新核对|Refresh and check
卡点|Blocker
原始提交者未验证 · 确认者未验证 · 原记录最后修改:|Original author unverified · confirmer unverified · last source edit:s
原成员当前不在名册|The original member is no longer in the directory
原版当前账号无权维护这条项目主记录|This account cannot edit the project record.
原记录已不在当前团队可见范围|The source record is no longer visible to this team.
原记录:|Original record:s
原记录已变化,请刷新并核对,不能自动重试|The source record changed. Refresh and check before retrying.
原记录已变化,请刷新并重新查看后再保存|The source record changed. Refresh and review it before saving.
原记录格式已变化,请重新查看|The source record format changed. Review it again.
原负责人目前不在名册|The original owner is no longer in the directory
原阶段说明格式异常,请先修复原记录|The original phase history is malformed. Repair the source record first.
发布|Post
发布失败:|Post failed:s
发生日期无效|Occurrence date is invalid
发生于|Occurred ons
发生日期未登记|Occurrence date not recorded
取消|Cancel
变化原因或结果|Reason or outcome
可选|Optional
同一次提交已核对并保存|The same submission was verified and saved.
名称|Name
启动为进行中前需修正全部必填字段|Fix all required fields before starting work.
启动为进行中前需补齐目标、负责人、当前情况、下一步和跟进日期|Provide the goal, owner, current status, next action and follow-up date before starting.
团队共享 · 最近同步|Team shared · last synceds
团队项目|Team projects
姓名:|Name:s
尚无关联进展。|No linked updates yet.
尚无已登记阶段说明。|No phase history recorded.
尚未安排|Not scheduled
尚未登记|Not recorded
尚未确认|Not confirmed
已保存到 FlareMo 团队记录。|Saved to FlareMo team records.
已核对保存结果:|Verified save result:s
已关联本账号|Linked to my account
已结束|Ended
已隐藏本账号资料。请在 FlareMo 退出并切换账号,然后返回刷新。|This account's information is hidden. Sign out or switch accounts in FlareMo, then refresh.
当前卡点|Current blocker
当前可访问范围内没有保留的修订。|No retained revisions are accessible to this account.
当前情况|Current status
当前显示|Showing
当前概况|Overview
当前筛选没有项目。|No projects match these filters.
当前记录归属:|Current record owner:s
当前账号无权编辑这条项目记录|This account cannot edit this project record.
当前账号没有有效团队成员身份|This account has no active team membership.
当前身份无权为这条记录上传资料|This account cannot upload to this record.
当前身份无权查看修订。|This account cannot view revisions.
当前身份无权查看这条记录的修订。|This account cannot view this record's revisions.
当前身份无权维护这条项目记录|This account cannot edit this project record.
当前身份无法访问原记录。|This account cannot access the source record.
当前进展|Current progress
当前项目|Current projects
待修正|Needs correction
待启动与进行中|Planned and active
待启动|Planned
待补充|Needs information
待补充,可逐项维护|Needs information; edit fields individually
必填|Required
情况确认时间|Status confirmed at
想法|Ideas
想法回看日期|Idea review date
想法待回看|Ideas to review
成员名册暂不可用;可继续查看项目,暂时无法变更负责人。|Member directory is unavailable. You can view projects, but cannot change the owner.
成员名册暂不可用;项目仍可浏览。|Member directory is unavailable; projects remain visible.
我已核对当前情况,登记确认时间|I have verified the current status; record confirmation time
我的项目|My projects
我维护的|Records I can edit
我负责的|Projects I own
打开 FlareMo|Open FlareMo
打开 FlareMo 原记录 ↗|Open source record in FlareMo ↗
按主状态|By main status
按成员筛选|Filter by member
按负责人分组|Group by owner
按负责人姓名筛选|Filter by owner name
按项目状态筛选|Filter by project status
接下来|Next
搜索项目名称|Search project name
搜索:|Search:s
收起记录|Hide records
新建项目|New project
新建项目或想法|New project or idea
无权查看他人修订。|You cannot view another author's revisions.
日期与资料链接(可选)|Dates and links (optional)
日期待修正|Date needs correction
日期无效|Invalid date
暂停|Paused
暂无已关联到你账号的项目。可查看“负责人未关联”的姓名记录。|No projects are linked to your account. Check unlinked owner names.
更多筛选|More filters
更新状态|Update status
最新进展|Latest updates
有一笔保存结果待确认。先刷新核对;需要重试时复用同一提交标识。|A save is uncertain. Refresh to check; use the same submission ID to retry.
服务器未返回记录 ID,保存结果待确认|The server returned no record ID; save result is uncertain.
未关联账号|No linked account
未分类|Uncategorized
未命名项目|Untitled project
未安排|Not scheduled
未安排跟进|Follow-up not scheduled
未指定|Unassigned
未登记|Not recorded
未设截止日|No due date
本人记录已修改|My update was changed.
本人进展|My updates
权限刷新失败;受保护内容已隐藏:|Permission refresh failed; protected content is hidden:s
权限待验证,无法预览。|Permission cannot be verified; preview unavailable.
条| items
来源与记录|Source and records
查看原记录|View source record
查看可访问的修订|View accessible revisions
查看可访问的原版修订|View accessible FlareMo revisions
查看范围|Show range
核对后同次重试|Check and retry the same submission
格式异常 ·|Malformed records ·s
正在核对同一次提交…|Checking the same submission…
正在核验原记录权限…|Checking source-record permissions…
正在读取团队记录|Loading team records…
正在重新验证附件及原记录权限…|Checking file and source-record permissions…
每行一个链接|One link per line
添加进展|Add update
清除条件|Clear filters
状态|Status
状态:|Status:s
目标|Goal
目标 / 预期结果|Goal / expected outcome
目标截止日|Target due date
目标截止日期|Target due date
目标截止:|Target due:s
编号|ID
编辑项目信息|Edit project information
范围:|Range:s
补充说明|Additional notes
记录 ID:|Record ID:s
记录实际进展、会议结论或资料说明|Record actual progress, meeting decisions or material notes
记录已变化或当前身份无权修改,请刷新|Record changed or this account can no longer edit it. Refresh.
记录想法|Record idea
记录类型|Record type
记录需处理 ·|Records needing attention ·s
该项目当前不可读取或格式已变化。|This project is unavailable or its format changed.
详情读取失败:|Could not load details:s
请先使用 FlareMo 账号登录。|Sign in to your FlareMo account first.
请先修正:|Fix these first:s
请填写阶段变化的原因或结果|Enter the reason or outcome for this phase change.
请填写项目名称|Enter a project name.
请检查表单|Check the form
请求已中断,保存结果待确认;请核对或同次重试。|Request interrupted; save result is uncertain. Check or retry the same submission.
请登录 FlareMo|Sign in to FlareMo
请说明状态变化的原因或结果|Explain the reason or outcome for the status change.
请选择有效日期|Choose a valid date.
读取中…|Loading…
调整跟进日期|Change follow-up date
负责人|Owner
负责人姓名|Owner name
负责人已不在当前可见名册,请重新选择|Owner is no longer in the visible directory. Choose again.
负责人未关联|Owner not linked
负责人未登记|Owner not recorded
负责人负责业务推进;项目编辑权限按当前记录归属判断。|The owner drives the work; edit access follows current record ownership.
负责人:|Owner:s
资料|Materials
资料已上传并绑定原记录|File uploaded and linked to the source record.
资料链接|Material links
资料链接 ↗|Material link ↗
资料链接须为有效的 HTTP 或 HTTPS 地址|Material links must be valid HTTP or HTTPS URLs.
跟进时间|Follow-up
输入姓名|Enter a name
这个阶段不能直接转换到所选阶段|You cannot move directly to the selected phase.
进展|Progress
会议结论|Meeting decisions
进行中|Active
已完成|Completed
已取消|Cancelled
进展已保存:|Update saved:s
进展已保存|Update saved
进展保存结果待确认,已阻止重复提交。|Update result is uncertain; duplicate submission is blocked.
进展正文|Update text
连接失败|Connection failed
重新连接|Reconnect
阶段变化原因 / 结果|Reason / outcome for phase change
阶段说明|Phase history
阶段说明与原版修订|Phase history and FlareMo revisions
阶段说明字段格式错误,请先在原记录修复,不能覆盖原值|The phase history is malformed. Repair the source record without overwriting it.
附件权限待验证:|File permission cannot be verified:s
附件预览|File preview
需要跟进|Needs follow-up
项| items
项目|Project
项目主记录|Project record
项目名称|Project name
项目已切换,请重新打开当前项目的编辑入口|The selected project changed. Reopen its edit form.
项目已更新|Project updated
项目已被其他入口更新,请刷新后再编辑|Another session updated this project. Refresh before editing.
项目格式已变化,请刷新后再试|Project format changed. Refresh and retry.
项目状态|Project status
项目编辑来源已变化,请重新打开|Edit source changed. Reopen this project.
项目阶段|Project phase
预览|Preview
今天跟进|Follow up today
跟进日期已过|Follow-up overdue
重复元数据块|Duplicate metadata blocks
元数据块未闭合|Unclosed metadata block
JSON 格式错误|Invalid JSON
未知协议或记录类型|Unknown protocol or record type
项目阶段缺失或非法|Missing or invalid project phase
原记录格式已变化,请在原记录修复后再保存|Source record format changed. Repair it before saving.
原记录格式已变化|Source record format changed
附件不可访问|File unavailable
附件地址无效|Invalid file URL
附件访问权限待验证|File permission could not be verified
服务器返回的数据格式不完整,结果待确认|Server response was incomplete; result is uncertain
身份响应缺少必要字段|Identity response is incomplete
成员名册响应不完整|Member directory response is incomplete
详情响应缺少必要字段|Detail response is incomplete
修订响应缺少列表|Revision response is incomplete
写入回执缺少记录 ID,结果待确认|Create response has no record ID; result is uncertain
修改回执不完整,结果待确认|Update response is incomplete; result is uncertain
附件回执不完整,结果待确认|File response is incomplete; result is uncertain
列表响应缺少记录或分页字段|List response is incomplete
团队记录响应缺少必要字段|Team record response is incomplete
分页标识重复,列表无法确认完整|Page token repeated; list completeness cannot be verified
(未关联)| (not linked)
`;
const en = Object.fromEntries(
pairs
.trim()
.split("\n")
.map((line) => {
const separator = line.indexOf("|");
return [
line.slice(0, separator),
line.slice(separator + 1).replace(/\\s/g, " "),
];
}),
);
let activeLocale = "zh-CN";
export function setTeamProjectsLocale(locale) {
activeLocale = locale;
}
export function teamProjectsDateLocale() {
return activeLocale === "zh-CN" ? "zh-CN" : "en-US";
}
export function tr(message) {
if (typeof message !== "string") return "";
if (activeLocale === "zh-CN") return message;
const normalized = message.trim().replace(/\s+/g, " ");
const translation = en[normalized];
if (!translation) return message;
const start = message.search(/\S/);
return (
message.slice(0, start) +
translation +
message.slice(start + message.trim().length)
);
}
Loading
Loading