feat: 负责人下钻视图+项目负责人编辑管理+企微授权自助绑定
- 任务/项目负责人 union scope:任务中心分组视图、工作台项目进度卡、收录验证列 - 项目负责人可管理自己项目:编辑/删除项目、编辑任务、分配负责人、推送、项目内建任务;堵死转移归属/越权新建/任务迁移 - 只读依赖放开给已登录:inspect_feishu、wecom_list_internal_contacts - 企微 OAuth 自助绑定:/api/wecom-bind(state 签名校验+登录态一致性+归属冲突检查),未绑定 banner 增加入口 - 工作台项目进度卡与未绑定 banner 排版修复 - 修 user-auth 判空分支被 Turbopack dev 折叠删除导致匿名请求 500
This commit is contained in:
@@ -304,6 +304,34 @@ export async function GET(request: Request) {
|
||||
.bind(taskId)
|
||||
.all<ExportRow>();
|
||||
const rows = result.results;
|
||||
const companionTaskRow = await db
|
||||
.prepare(
|
||||
"SELECT id FROM tasks WHERE related_task_id = ? AND task_type = 'screenshot_collect' LIMIT 1",
|
||||
)
|
||||
.bind(taskId)
|
||||
.first<{ id: string }>();
|
||||
let companionSubmittedByContent: Map<string, boolean> | null = null;
|
||||
if (companionTaskRow) {
|
||||
const companionRows = await db
|
||||
.prepare(
|
||||
`SELECT c.related_content_id, d.result_submitted_at
|
||||
FROM distributions d
|
||||
JOIN contents c ON c.id = d.content_id
|
||||
WHERE d.task_id = ? AND c.related_content_id != ''`,
|
||||
)
|
||||
.bind(companionTaskRow.id)
|
||||
.all<{
|
||||
related_content_id: string;
|
||||
result_submitted_at: string | null;
|
||||
}>();
|
||||
companionSubmittedByContent = new Map<string, boolean>();
|
||||
for (const row of companionRows.results) {
|
||||
companionSubmittedByContent.set(
|
||||
row.related_content_id,
|
||||
Boolean(row.result_submitted_at),
|
||||
);
|
||||
}
|
||||
}
|
||||
const assetsByContent = new Map(
|
||||
rows.map((row) => [row.content_id, parseAssets(row.image_assets)]),
|
||||
);
|
||||
@@ -356,6 +384,7 @@ export async function GET(request: Request) {
|
||||
"采集状态",
|
||||
"合作方",
|
||||
"领取人微信号/手机号",
|
||||
...(companionSubmittedByContent ? ["收录截图"] : []),
|
||||
];
|
||||
const originalImageStart = 3;
|
||||
const accountColumn = originalImageStart + maxContentImages;
|
||||
@@ -398,6 +427,15 @@ export async function GET(request: Request) {
|
||||
row.distribution_id ? collectionLabel(row) : "未领取",
|
||||
row.partner_name || "",
|
||||
row.claimant_name || "",
|
||||
...(companionSubmittedByContent
|
||||
? [
|
||||
companionSubmittedByContent.has(row.content_id)
|
||||
? companionSubmittedByContent.get(row.content_id)
|
||||
? "已提交"
|
||||
: "未提交"
|
||||
: "—",
|
||||
]
|
||||
: []),
|
||||
];
|
||||
const images: RecoveryWorkbookRow["images"] = [];
|
||||
for (const asset of contentAssets) {
|
||||
@@ -433,6 +471,7 @@ export async function GET(request: Request) {
|
||||
24,
|
||||
18,
|
||||
22,
|
||||
...(companionSubmittedByContent ? [12] : []),
|
||||
];
|
||||
const workbook = buildRecoveryWorkbook({
|
||||
sheetName: `${task.name}-数据回收`,
|
||||
|
||||
Reference in New Issue
Block a user