岗位会商样式修改
This commit is contained in:
1 parent
a0a75a9964
commit
1ffead7ee2
5 files changed
+275
-30
No files matched your search
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><defs><style>.a{fill:#fff;opacity:0;}.b,.c{fill:none;stroke:#fff;stroke-linejoin:round;}.b{stroke-linecap:round;}</style></defs><g transform="translate(-1)"><rect class="a" width="16" height="16" transform="translate(1)"/><path class="b" d="M7,42H19" transform="translate(-4 -28)"/><path class="b" d="M0,0H3" transform="translate(9.848 3.848) rotate(45)"/><path class="c" d="M11,12.907v2.427h2.439l6.894-6.9L17.9,6Z" transform="translate(-6.667 -4)"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 545 B |
@@ -97,6 +97,7 @@ export function getPositionDemoTask(): PositionTask {
|
|||||||
direction: String(task.direction ?? ""),
|
direction: String(task.direction ?? ""),
|
||||||
source: String(task.source ?? "演示数据"),
|
source: String(task.source ?? "演示数据"),
|
||||||
issuedAt: String(task.issuedAt ?? ""),
|
issuedAt: String(task.issuedAt ?? ""),
|
||||||
|
priority: String(task.priority ?? "紧急"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ export interface PositionTask {
|
|||||||
direction: string;
|
direction: string;
|
||||||
source: string;
|
source: string;
|
||||||
issuedAt: string;
|
issuedAt: string;
|
||||||
|
priority?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const MOCK_POSITION_TASKS: readonly PositionTask[] = [
|
export const MOCK_POSITION_TASKS: readonly PositionTask[] = [
|
||||||
@@ -53,6 +54,7 @@ export function taskFromPositionSnapshot(
|
|||||||
title: value(["title", "taskName", "name"], fallback.title),
|
title: value(["title", "taskName", "name"], fallback.title),
|
||||||
description: value(["description", "taskContent", "overview", "content"], fallback.description),
|
description: value(["description", "taskContent", "overview", "content"], fallback.description),
|
||||||
direction: value(["direction", "taskDirection", "category"], fallback.direction),
|
direction: value(["direction", "taskDirection", "category"], fallback.direction),
|
||||||
|
priority: value(["priority", "level", "urgency"], fallback.priority ?? "紧急"),
|
||||||
source: (() => {
|
source: (() => {
|
||||||
const source = value(["source", "taskSource", "sourceName"], fallback.source);
|
const source = value(["source", "taskSource", "sourceName"], fallback.source);
|
||||||
return source === "mock" ? "本系统创建" : source;
|
return source === "mock" ? "本系统创建" : source;
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ import { textOfMessage } from "@/core/threads/utils";
|
|||||||
import { desensitize } from "@/lib/desensitize";
|
import { desensitize } from "@/lib/desensitize";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import expandLogo from "@/assets/position-roundtable/expand-logo.svg";
|
import expandLogo from "@/assets/position-roundtable/expand-logo.svg";
|
||||||
|
import editTaskIcon from "@/assets/position-roundtable/edit-task.svg";
|
||||||
import { listChains } from "@/roundtable-planning/api/chains";
|
import { listChains } from "@/roundtable-planning/api/chains";
|
||||||
import { Step1Panel } from "@/roundtable-planning/components/Step1Panel";
|
import { Step1Panel } from "@/roundtable-planning/components/Step1Panel";
|
||||||
import { PositionIntentInput } from "@/position-roundtable/components/PositionIntentInput";
|
import { PositionIntentInput } from "@/position-roundtable/components/PositionIntentInput";
|
||||||
@@ -1071,6 +1072,7 @@ export default function PositionRoundtablePage({
|
|||||||
const nextTask: PositionTask = {
|
const nextTask: PositionTask = {
|
||||||
...task,
|
...task,
|
||||||
title,
|
title,
|
||||||
|
priority: taskDraft.priority?.trim() || task.priority || "紧急",
|
||||||
description: taskDraft.description.trim(),
|
description: taskDraft.description.trim(),
|
||||||
direction: taskDraft.direction.trim() || task.direction,
|
direction: taskDraft.direction.trim() || task.direction,
|
||||||
source: taskDraft.source.trim() || task.source,
|
source: taskDraft.source.trim() || task.source,
|
||||||
@@ -2594,34 +2596,33 @@ export default function PositionRoundtablePage({
|
|||||||
<aside
|
<aside
|
||||||
aria-hidden={leftSidebarHidden || undefined}
|
aria-hidden={leftSidebarHidden || undefined}
|
||||||
className={cn(
|
className={cn(
|
||||||
"position-roundtable-sidebar-scrollbar custom-scrollbar relative flex min-h-0 shrink-0 flex-col gap-3 overflow-y-auto rounded-2xl border border-slate-200 bg-white shadow-sm transition-[width,opacity,transform,padding,border-width] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none dark:rounded-none dark:border-0 dark:bg-transparent dark:text-[#c5cfe0] dark:shadow-none",
|
"position-roundtable-sidebar-scrollbar custom-scrollbar relative flex min-h-0 shrink-0 flex-col gap-3 overflow-y-auto rounded-2xl border border-slate-200 shadow-sm transition-[width,opacity,transform,padding,border-width] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none dark:rounded-none dark:border-0 dark:bg-transparent dark:text-[#c5cfe0] dark:shadow-none",
|
||||||
leftSidebarHidden
|
leftSidebarHidden
|
||||||
? "w-0 translate-x-4 !border-0 !p-0 opacity-0 pointer-events-none"
|
? "w-0 translate-x-4 !border-0 !p-0 opacity-0 pointer-events-none"
|
||||||
: "w-[360px] translate-x-0 p-3 opacity-100 dark:p-0",
|
: "w-[360px] translate-x-0 p-3 opacity-100 dark:p-0",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<TaskAnalysisPanel
|
{activePosition.isIntentPosition && !isIntelligenceDeliveryOverview && (
|
||||||
task={task}
|
<PositionRoundtableEntrySidebar
|
||||||
intent={frozenIntent ?? intent.intentReady}
|
task={task}
|
||||||
taskEditable={!isArchivedSession}
|
editable={!isArchivedSession}
|
||||||
intentEditable={!isArchivedSession}
|
onEditTask={openTaskEditor}
|
||||||
onEditTask={openTaskEditor}
|
chains={chains}
|
||||||
onEditIntent={openIntentEditor}
|
loading={chainsLoading}
|
||||||
collapsed={false}
|
value={selectedChainId}
|
||||||
onCollapsedChange={setLeftPanelCollapsed}
|
onChange={setSelectedChainId}
|
||||||
className="min-h-full"
|
onConfigure={openPositionConfig}
|
||||||
>
|
/>
|
||||||
{activePosition.isIntentPosition && !isIntelligenceDeliveryOverview && (
|
)}
|
||||||
<BusinessChainSelector
|
{(!activePosition.isIntentPosition || isIntelligenceDeliveryOverview) && (
|
||||||
chains={chains}
|
<>
|
||||||
loading={chainsLoading}
|
<TaskInformationCard
|
||||||
value={selectedChainId}
|
task={task}
|
||||||
onChange={setSelectedChainId}
|
editable={!isArchivedSession}
|
||||||
onConfigure={openPositionConfig}
|
onEdit={openTaskEditor}
|
||||||
className="min-h-0 flex-1"
|
collapsed={false}
|
||||||
|
onCollapsedChange={() => undefined}
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
{(!activePosition.isIntentPosition || isIntelligenceDeliveryOverview) && (
|
|
||||||
<BusinessChainFlow
|
<BusinessChainFlow
|
||||||
chain={activeChain}
|
chain={activeChain}
|
||||||
nodes={positionSession?.nodes ?? []}
|
nodes={positionSession?.nodes ?? []}
|
||||||
@@ -2630,8 +2631,8 @@ export default function PositionRoundtablePage({
|
|||||||
onSelectSeat={openSeatFlowDetail}
|
onSelectSeat={openSeatFlowDetail}
|
||||||
embedded
|
embedded
|
||||||
/>
|
/>
|
||||||
)}
|
</>
|
||||||
</TaskAnalysisPanel>
|
)}
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
{leftSidebarHidden && (
|
{leftSidebarHidden && (
|
||||||
@@ -3878,6 +3879,82 @@ function TaskAnalysisPanel({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function PositionRoundtableEntrySidebar({
|
||||||
|
task,
|
||||||
|
editable,
|
||||||
|
onEditTask,
|
||||||
|
chains,
|
||||||
|
loading,
|
||||||
|
value,
|
||||||
|
onChange,
|
||||||
|
onConfigure,
|
||||||
|
}: {
|
||||||
|
task: PositionTask;
|
||||||
|
editable: boolean;
|
||||||
|
onEditTask: () => void;
|
||||||
|
chains: BusinessChain[];
|
||||||
|
loading: boolean;
|
||||||
|
value: string;
|
||||||
|
onChange: (value: string) => void;
|
||||||
|
onConfigure: (chainId: string) => void;
|
||||||
|
}) {
|
||||||
|
const displayDescription =
|
||||||
|
task.id === DEFAULT_MOCK_POSITION_TASK_ID
|
||||||
|
? "围绕暑期活动的游泳夏令营开展宣传,结合线上线下渠道吸引目标人群参与,持续提升活动影响力。"
|
||||||
|
: desensitize(task.description);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="position-roundtable-entry-sidebar">
|
||||||
|
<section className="position-roundtable-entry-task-card">
|
||||||
|
{editable && (
|
||||||
|
<button type="button" className="position-roundtable-entry-edit" onClick={onEditTask} aria-label="编辑任务信息">
|
||||||
|
<img src={editTaskIcon} alt="" />
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
<h2 title={desensitize(task.title)}>{desensitize(task.title)}</h2>
|
||||||
|
<div className="position-roundtable-entry-tags">
|
||||||
|
<span>{desensitize(task.priority || "紧急")}</span>
|
||||||
|
<span>{desensitize(task.source)}</span>
|
||||||
|
<span>{desensitize(task.direction)}</span>
|
||||||
|
</div>
|
||||||
|
<p>{desensitize(task.description)}</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="position-roundtable-entry-chain-card">
|
||||||
|
<header>
|
||||||
|
<span aria-hidden="true" />
|
||||||
|
<h2>作业链条选择</h2>
|
||||||
|
<b>{chains.length}</b>
|
||||||
|
</header>
|
||||||
|
<div className="position-roundtable-entry-chain-list">
|
||||||
|
{loading ? (
|
||||||
|
<div className="position-roundtable-entry-empty"><Loader2 className="size-4 animate-spin" />正在加载作业链条…</div>
|
||||||
|
) : chains.length === 0 ? (
|
||||||
|
<div className="position-roundtable-entry-empty">暂无可用作业链条</div>
|
||||||
|
) : (
|
||||||
|
chains.map((chain) => {
|
||||||
|
const selected = chain.id === value;
|
||||||
|
return (
|
||||||
|
<article key={chain.id} className={selected ? "is-selected" : undefined}>
|
||||||
|
<button type="button" onClick={() => onChange(selected ? "" : chain.id)} aria-pressed={selected}>
|
||||||
|
<i aria-hidden="true" />
|
||||||
|
<span>{desensitize(chain.title)}</span>
|
||||||
|
<em>{chain.seats.length} 席</em>
|
||||||
|
<small>{desensitize(chain.description || "点击选择该业务链")}</small>
|
||||||
|
</button>
|
||||||
|
<button type="button" className="position-roundtable-entry-config" onClick={() => onConfigure(chain.id)} aria-label={`配置岗位:${desensitize(chain.title)}`}>
|
||||||
|
<Settings className="size-3.5" />
|
||||||
|
</button>
|
||||||
|
</article>
|
||||||
|
);
|
||||||
|
})
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function TaskInformationCard({
|
function TaskInformationCard({
|
||||||
task,
|
task,
|
||||||
editable,
|
editable,
|
||||||
@@ -3892,8 +3969,34 @@ function TaskInformationCard({
|
|||||||
onCollapsedChange: (collapsed: boolean) => void;
|
onCollapsedChange: (collapsed: boolean) => void;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<section className="group relative shrink-0 overflow-hidden rounded-[4px] border border-[#ECE7E4] bg-white shadow-[0_4px_20px_rgba(0,0,0,0.02)] dark:border-[rgba(43,143,254,0.6)] dark:bg-[#032650] dark:shadow-none">
|
<section className="position-roundtable-task-card group relative shrink-0 overflow-hidden rounded-[4px] border border-[#ECE7E4] bg-white p-5 shadow-[0_4px_20px_rgba(0,0,0,0.02)] dark:border-[rgba(0,110,254,0.5)] dark:bg-[#032650] dark:shadow-none">
|
||||||
<div className="relative flex h-10 items-center border-b border-rose-100 bg-[linear-gradient(89.65deg,rgba(245,34,45,0.10)_0.03%,rgba(245,34,45,0)_99.97%)] px-4 [&_h2]:!text-slate-900 dark:!bg-[linear-gradient(89.65deg,#0062d9_0.03%,#0062d900_99.97%)] dark:border-b-[#2b8ffe]/60 dark:[&_h2]:!text-white dark:after:absolute dark:after:inset-x-0 dark:after:bottom-[-1px] dark:after:h-px dark:after:bg-[#45c3f3]/85 dark:after:content-['']">
|
<div className="position-roundtable-task-card__content relative z-10">
|
||||||
|
<h2
|
||||||
|
title={desensitize(task.title)}
|
||||||
|
className="pr-8 text-[18px] font-medium leading-7 text-slate-900 dark:text-white"
|
||||||
|
style={{ fontFamily: "'Noto Sans SC', sans-serif" }}
|
||||||
|
>
|
||||||
|
<span className="line-clamp-1">{desensitize(task.title)}</span>
|
||||||
|
</h2>
|
||||||
|
<div
|
||||||
|
data-task-tags
|
||||||
|
className="mt-3 flex flex-wrap gap-2 [&>span]:inline-flex [&>span]:min-h-7 [&>span]:items-center [&>span]:!leading-5 [&>span:first-child]:!border-[#cf1322] [&>span:nth-child(2)]:!shadow-none"
|
||||||
|
style={{ fontFamily: "'Noto Sans SC', sans-serif" }}
|
||||||
|
>
|
||||||
|
<span className="rounded-[2px] border border-[#cf1322] bg-[rgba(207,19,34,0.5)] px-2 py-0.5 text-center text-[16px] font-light leading-4 text-white">紧急</span>
|
||||||
|
<span className="rounded-[2px] border border-[#4bcdff] bg-[rgba(75,205,255,0.3)] px-2 py-0.5 text-[16px] font-light leading-7 text-[#4bcdff] shadow-[0_0_9px_rgba(252,131,131,0.27)]">{desensitize(task.source)}</span>
|
||||||
|
<span className="rounded-[2px] border border-[#a2e1f9] bg-[rgba(162,225,249,0.3)] px-2 py-0.5 text-[16px] font-light leading-[18px] text-[#a2e1f9]">{desensitize(task.direction)}</span>
|
||||||
|
</div>
|
||||||
|
<p
|
||||||
|
data-task-description
|
||||||
|
title={desensitize(task.description)}
|
||||||
|
className="mt-3 line-clamp-3 whitespace-pre-wrap text-sm leading-[22px] text-slate-600 dark:text-[#96bbf8]"
|
||||||
|
style={{ fontFamily: "'Noto Sans SC', sans-serif" }}
|
||||||
|
>
|
||||||
|
{desensitize(task.description)}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div style={{ display: "none" }} className="relative flex h-10 items-center border-b border-rose-100 bg-[linear-gradient(89.65deg,rgba(245,34,45,0.10)_0.03%,rgba(245,34,45,0)_99.97%)] px-4 [&_h2]:!text-slate-900 dark:!bg-[linear-gradient(89.65deg,#0062d9_0.03%,#0062d900_99.97%)] dark:border-b-[#2b8ffe]/60 dark:[&_h2]:!text-white dark:after:absolute dark:after:inset-x-0 dark:after:bottom-[-1px] dark:after:h-px dark:after:bg-[#45c3f3]/85 dark:after:content-['']">
|
||||||
<span
|
<span
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
className="mr-3 h-5 w-1 shrink-0 rounded-l-[2px] rounded-br-[2px] bg-[linear-gradient(167.47deg,#f15959_0%,#cc1925_100%)] dark:bg-[linear-gradient(167.47deg,#a2e1f9_0%,#45c3f3_100%)]"
|
className="mr-3 h-5 w-1 shrink-0 rounded-l-[2px] rounded-br-[2px] bg-[linear-gradient(167.47deg,#f15959_0%,#cc1925_100%)] dark:bg-[linear-gradient(167.47deg,#a2e1f9_0%,#45c3f3_100%)]"
|
||||||
@@ -3914,8 +4017,9 @@ function TaskInformationCard({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
style={{ display: "none" }}
|
||||||
className={cn(
|
className={cn(
|
||||||
"grid transition-[grid-template-rows,opacity] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none",
|
"hidden grid transition-[grid-template-rows,opacity] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none",
|
||||||
collapsed ? "grid-rows-[0fr] opacity-0" : "grid-rows-[1fr] opacity-100",
|
collapsed ? "grid-rows-[0fr] opacity-0" : "grid-rows-[1fr] opacity-100",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
@@ -3973,6 +4077,20 @@ function TaskInformationEditDialog({
|
|||||||
<DialogTitle>编辑任务信息</DialogTitle>
|
<DialogTitle>编辑任务信息</DialogTitle>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
<div className="space-y-4 py-1">
|
<div className="space-y-4 py-1">
|
||||||
|
<div className="grid grid-cols-3 gap-3">
|
||||||
|
<label className="block space-y-1.5">
|
||||||
|
<span className="text-xs font-semibold text-slate-500 dark:text-[#9ebfe2]">标签一</span>
|
||||||
|
<TInput value={task.priority ?? ""} onChange={(value) => onChange({ ...task, priority: String(value) })} placeholder="例如:紧急" />
|
||||||
|
</label>
|
||||||
|
<label className="block space-y-1.5">
|
||||||
|
<span className="text-xs font-semibold text-slate-500 dark:text-[#9ebfe2]">标签二</span>
|
||||||
|
<TInput value={task.source} onChange={(value) => onChange({ ...task, source: String(value) })} placeholder="例如:本系统创建" />
|
||||||
|
</label>
|
||||||
|
<label className="block space-y-1.5">
|
||||||
|
<span className="text-xs font-semibold text-slate-500 dark:text-[#9ebfe2]">标签三</span>
|
||||||
|
<TInput value={task.direction} onChange={(value) => onChange({ ...task, direction: String(value) })} placeholder="例如:暑期活动" />
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<label className="block space-y-1.5">
|
<label className="block space-y-1.5">
|
||||||
<span className="text-xs font-semibold text-slate-500 dark:text-[#9ebfe2]">任务名称</span>
|
<span className="text-xs font-semibold text-slate-500 dark:text-[#9ebfe2]">任务名称</span>
|
||||||
<TInput
|
<TInput
|
||||||
@@ -4048,19 +4166,25 @@ function BusinessChainSelector({
|
|||||||
const [relationOpenId, setRelationOpenId] = useState<string | null>(null);
|
const [relationOpenId, setRelationOpenId] = useState<string | null>(null);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className={cn("group/business-chain flex min-h-0 flex-col", className)}>
|
<section className={cn("position-roundtable-chain-selector group/business-chain flex min-h-0 flex-col rounded-[4px] border border-[#ECE7E4] bg-white p-5 shadow-[0_4px_20px_rgba(0,0,0,0.02)] dark:border-[rgba(0,110,254,0.5)] dark:bg-[#032650] dark:shadow-none [&>div>h3:first-of-type]:hidden", className)}>
|
||||||
<div className="relative flex h-10 items-center border-b border-slate-200 dark:border-[#2b8ffe]/60">
|
<div className="relative flex h-8 shrink-0 items-center">
|
||||||
<span
|
<span
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
className="mr-3 h-6 w-1 shrink-0 rounded-l-[2px] rounded-br-[2px] bg-[linear-gradient(167.47deg,#f15959_0%,#cc1925_100%)] dark:bg-[linear-gradient(167.47deg,#a2e1f9_0%,#45c3f3_100%)]"
|
className="mr-3 h-6 w-1 shrink-0 rounded-l-[2px] rounded-br-[2px] bg-[linear-gradient(167.47deg,#f15959_0%,#cc1925_100%)] dark:bg-[linear-gradient(167.47deg,#a2e1f9_0%,#45c3f3_100%)]"
|
||||||
/>
|
/>
|
||||||
<h3 className="text-lg font-[550] tracking-wide text-slate-900 dark:text-white">业务链</h3>
|
<h3 className="text-lg font-[550] tracking-wide text-slate-900 dark:text-white">业务链</h3>
|
||||||
|
<h3
|
||||||
|
className="text-[18px] font-medium leading-7 tracking-wide text-slate-900 dark:text-white"
|
||||||
|
style={{ fontFamily: "'Noto Sans SC', sans-serif" }}
|
||||||
|
>
|
||||||
|
作业链条选择
|
||||||
|
</h3>
|
||||||
<span className="ml-auto flex size-6 items-center justify-center rounded-[4px] bg-slate-100 text-xs font-semibold tabular-nums text-slate-500 dark:bg-[#0b386d] dark:text-[#83c1ff]">
|
<span className="ml-auto flex size-6 items-center justify-center rounded-[4px] bg-slate-100 text-xs font-semibold tabular-nums text-slate-500 dark:bg-[#0b386d] dark:text-[#83c1ff]">
|
||||||
{chains.length}
|
{chains.length}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="business-chain-scrollbar min-h-0 flex-1 space-y-2.5 overflow-y-auto py-4 pr-1 custom-scrollbar">
|
<div className="business-chain-scrollbar min-h-0 flex-1 space-y-2.5 overflow-y-auto pt-4 pr-1 custom-scrollbar">
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<div className="flex h-20 items-center justify-center gap-2 text-xs text-slate-400 dark:text-[#8aa0c4]">
|
<div className="flex h-20 items-center justify-center gap-2 text-xs text-slate-400 dark:text-[#8aa0c4]">
|
||||||
<Loader2 className="size-4 animate-spin" />
|
<Loader2 className="size-4 animate-spin" />
|
||||||
|
|||||||
@@ -69,3 +69,120 @@
|
|||||||
.position-roundtable-intent-model-switch {
|
.position-roundtable-intent-model-switch {
|
||||||
border-radius: var(--prt-intent-radius);
|
border-radius: var(--prt-intent-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 岗位会商第一步左侧栏:使用独立样式,避免与通用 Tailwind 面板规则相互覆盖。 */
|
||||||
|
.dark .position-roundtable-task-card {
|
||||||
|
padding: 10px 15px !important;
|
||||||
|
background: #032650;
|
||||||
|
border-color: rgba(0, 110, 254, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .position-roundtable-task-card [data-task-description] {
|
||||||
|
color: #96bbf8 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .position-roundtable-chain-selector {
|
||||||
|
background: #032650;
|
||||||
|
border-color: rgba(0, 110, 254, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* First-step entry rail is a self-contained redraw; do not inherit legacy panel rules. */
|
||||||
|
.dark .position-roundtable-sidebar-scrollbar:has(.position-roundtable-entry-sidebar) {
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-sidebar {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
font-family: "Noto Sans SC", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-task-card,
|
||||||
|
.position-roundtable-entry-chain-card {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid rgba(0, 110, 254, 0.5);
|
||||||
|
border-radius: 4px;
|
||||||
|
background: #032650;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-task-card {
|
||||||
|
position: relative;
|
||||||
|
flex: none;
|
||||||
|
padding: 10px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-task-card h2 {
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 28px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-tags {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 10px;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-tags span {
|
||||||
|
display: inline-flex;
|
||||||
|
box-sizing: border-box;
|
||||||
|
min-height: 28px;
|
||||||
|
align-items: center;
|
||||||
|
padding: 3px 8px;
|
||||||
|
border: 1px solid;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 20px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-tags span:nth-child(1) { border-color: #cf1322; background: rgba(207, 19, 34, 0.5); color: #fff; }
|
||||||
|
.position-roundtable-entry-tags span:nth-child(2) { border-color: #4bcdff; background: rgba(75, 205, 255, 0.3); color: #4bcdff; }
|
||||||
|
.position-roundtable-entry-tags span:nth-child(3) { border-color: #a2e1f9; background: rgba(162, 225, 249, 0.3); color: #a2e1f9; }
|
||||||
|
|
||||||
|
.position-roundtable-entry-task-card > p {
|
||||||
|
display: -webkit-box;
|
||||||
|
margin: 12px 0 0;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #96bbf8;
|
||||||
|
color: #96bbf8 !important;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 22px;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-roundtable-entry-edit { position: absolute; top: 8px; right: 8px; display: none; width: 16px; height: 16px; padding: 0; cursor: pointer; color: #4bcdff; }
|
||||||
|
.position-roundtable-entry-edit img { display: block; width: 16px; height: 16px; }
|
||||||
|
.position-roundtable-entry-task-card:hover .position-roundtable-entry-edit,
|
||||||
|
.position-roundtable-entry-edit:focus-visible { display: inline-flex; }
|
||||||
|
|
||||||
|
.position-roundtable-entry-chain-card { display: flex; min-height: 0; flex: 1; flex-direction: column; padding: 10px 15px; }
|
||||||
|
.position-roundtable-entry-chain-card header { display: flex; height: 36px; flex: none; align-items: center; gap: 10px; }
|
||||||
|
.position-roundtable-entry-chain-card header > span { width: 4px; height: 16px; border-radius: 2px 0 2px 0; background: linear-gradient(165.96deg, #a2e1f9 0%, #45c3f3 100%); }
|
||||||
|
.position-roundtable-entry-chain-card h2 { margin: 0; color: #fff; font-size: 18px; font-weight: 500; line-height: 28px; }
|
||||||
|
.position-roundtable-entry-chain-card header b { margin-left: auto; padding: 2px 9px; border-radius: 4px; background: #0b234c; color: #a2e1f9; font-size: 16px; line-height: 24px; }
|
||||||
|
.position-roundtable-entry-chain-list { min-height: 0; flex: 1; margin-top: 10px; overflow-y: auto; }
|
||||||
|
.position-roundtable-entry-chain-list article { position: relative; margin-bottom: 10px; border: 1px solid rgba(43, 143, 254, 0.35); border-radius: 4px; background: rgba(11, 56, 109, 0.45); }
|
||||||
|
.position-roundtable-entry-chain-list article.is-selected { border-color: #2b8ffe; background: rgba(43, 143, 254, 0.18); box-shadow: 0 0 0 1px rgba(43, 143, 254, 0.22); }
|
||||||
|
.position-roundtable-entry-chain-list article > button:first-child { display: grid; width: 100%; grid-template-columns: 18px minmax(0, 1fr) auto; gap: 8px; padding: 14px; color: #d8e6f8; text-align: left; }
|
||||||
|
.position-roundtable-entry-chain-list i { width: 14px; height: 14px; align-self: center; border: 4px solid #2b8ffe; border-radius: 50%; box-sizing: border-box; }
|
||||||
|
.position-roundtable-entry-chain-list article:not(.is-selected) i { border: 1px solid #83b6ed; }
|
||||||
|
.position-roundtable-entry-chain-list article > button:first-child > span { overflow: hidden; font-size: 16px; font-weight: 500; line-height: 22px; text-overflow: ellipsis; white-space: nowrap; }
|
||||||
|
.position-roundtable-entry-chain-list em { border-radius: 16px; background: rgba(162, 225, 249, 0.16); padding: 2px 8px; color: #a2e1f9; font-size: 14px; font-style: normal; line-height: 20px; }
|
||||||
|
.position-roundtable-entry-chain-list small { grid-column: 2 / 4; color: #96bbf8; font-size: 14px; line-height: 22px; }
|
||||||
|
.position-roundtable-entry-config { position: absolute; top: 10px; right: 10px; display: inline-flex; padding: 4px; color: #83c1ff; }
|
||||||
|
.position-roundtable-entry-empty { display: flex; min-height: 80px; align-items: center; justify-content: center; gap: 8px; color: #96bbf8; font-size: 14px; }
|
||||||
Reference in new issue
Block a user