feat(frontend): 移除万华相关元素并更新门户登录展示

统一清理前端万华相关文案与公司展示口径为滨化集团,移除登录与门户页角色选框,并同步更新全量页面截图及Word汇总文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-13 15:48:44 +08:00
parent 41fc6e86dd
commit 3dba6db9d2
19 changed files with 24 additions and 92 deletions
+6 -51
View File
@@ -8,20 +8,11 @@ import { XiaobinAssistant } from "../components/XiaobinAssistant";
type Mode = "employee" | "vendor"; type Mode = "employee" | "vendor";
type Tab = "account" | "mobile"; type Tab = "account" | "mobile";
type LoginRole = "purchaser" | "supplier" | "expert" | "other";
const ROLE_BUTTONS: { id: LoginRole; label: string; en: string }[] = [
{ id: "purchaser", label: "采购人", en: "Purchaser" },
{ id: "supplier", label: "供应商", en: "Supplier" },
{ id: "expert", label: "专家", en: "Expert" },
{ id: "other", label: "其他", en: "Other" },
];
export function LoginPage() { export function LoginPage() {
const navigate = useNavigate(); const navigate = useNavigate();
const [mode, setMode] = useState<Mode>("vendor"); const [mode, setMode] = useState<Mode>("vendor");
const [tab, setTab] = useState<Tab>("account"); const [tab, setTab] = useState<Tab>("account");
const [loginRole, setLoginRole] = useState<LoginRole>("supplier");
const [account, setAccount] = useState("zhangwei"); const [account, setAccount] = useState("zhangwei");
const [pwd, setPwd] = useState("123456"); const [pwd, setPwd] = useState("123456");
const [showPwd, setShowPwd] = useState(false); const [showPwd, setShowPwd] = useState(false);
@@ -51,25 +42,13 @@ export function LoginPage() {
function submit(e: React.FormEvent) { function submit(e: React.FormEvent) {
e.preventDefault(); e.preventDefault();
if (mode === "employee") { if (mode === "employee") {
toast.info("正在跳转至集团 IAM 统一身份认证…"); toast.info("正在跳转至滨化集团 IAM 统一身份认证…");
setTimeout(() => navigate("/app"), 800); setTimeout(() => navigate("/app"), 800);
return; return;
} }
navigate("/app"); navigate("/app");
} }
function selectRole(role: LoginRole) {
setLoginRole(role);
// 与现有登录逻辑联动:供应商走外部账号,其他角色默认走内部员工
if (role === "supplier") {
setMode("vendor");
setTab("account");
} else {
setMode("employee");
setTab("account");
}
}
return ( return (
<div className="min-h-screen bg-[#f3f5f8]"> <div className="min-h-screen bg-[#f3f5f8]">
<header className="border-b bg-[#0f4ea6] text-white"> <header className="border-b bg-[#0f4ea6] text-white">
@@ -90,26 +69,6 @@ export function LoginPage() {
<Link to="/register" className="ml-1 text-primary hover:underline"></Link> <Link to="/register" className="ml-1 text-primary hover:underline"></Link>
</p> </p>
{/* 角色登录按钮:对齐万华站点风格 */}
<div className="mt-4 grid grid-cols-2 gap-2">
{ROLE_BUTTONS.map((r) => (
<button
key={r.id}
type="button"
onClick={() => selectRole(r.id)}
className={cn(
"border px-3 py-3 text-center transition-colors",
loginRole === r.id
? "border-primary bg-[#eef5ff] text-primary"
: "border-[#d9dee7] bg-white text-[#374151] hover:border-primary/60 hover:bg-[#f8fbff]",
)}
>
<div className="text-sm font-medium leading-none">{r.label}</div>
<div className="mt-1 text-[11px] text-[#6b7280]">{r.en}</div>
</button>
))}
</div>
<div className="mt-4 flex border bg-[#f8fafc] p-1"> <div className="mt-4 flex border bg-[#f8fafc] p-1">
{( {(
[ [
@@ -130,10 +89,6 @@ export function LoginPage() {
</button> </button>
))} ))}
</div> </div>
<p className="mt-1 text-[11px] text-muted-foreground">
{ROLE_BUTTONS.find((x) => x.id === loginRole)?.label}
</p>
<div className="mt-3 flex border-b border-border"> <div className="mt-3 flex border-b border-border">
{( {(
[ [
@@ -279,8 +234,8 @@ export function LoginPage() {
{[ {[
["[公开招标] 扣电测试柜框架", "2026-07-13"], ["[公开招标] 扣电测试柜框架", "2026-07-13"],
["[公开招标] 2026年橡胶密封件框架招标O型圈", "2026-07-13"], ["[公开招标] 2026年橡胶密封件框架招标O型圈", "2026-07-13"],
["[公开招标] 万华莱州100MW分散式风电项目EPC工程总承包[变更公告]", "2026-07-13"], ["[公开招标] 莱州100MW分散式风电项目EPC工程总承包[变更公告]", "2026-07-13"],
["[公开招标] 万华旋塞阀框架包一 金属旋塞阀、包二 衬氟旋塞阀", "2026-07-10"], ["[公开招标] 旋塞阀框架包一 金属旋塞阀、包二 衬氟旋塞阀", "2026-07-10"],
["[公开招标] 改性TPU熟化料仓", "2026-07-09"], ["[公开招标] 改性TPU熟化料仓", "2026-07-09"],
].map(([title, date]) => ( ].map(([title, date]) => (
<li key={title} className="flex items-center gap-3 border-b border-dashed py-1.5"> <li key={title} className="flex items-center gap-3 border-b border-dashed py-1.5">
@@ -295,9 +250,9 @@ export function LoginPage() {
<div className="border bg-white"> <div className="border bg-white">
<div className="border-b bg-[#f8fafc] px-4 py-3 text-sm font-semibold"></div> <div className="border-b bg-[#f8fafc] px-4 py-3 text-sm font-semibold"></div>
<div className="space-y-1 p-4 text-sm text-muted-foreground"> <div className="space-y-1 p-4 text-sm text-muted-foreground">
<p></p> <p></p>
<p></p> <p></p>
<p></p> <p></p>
</div> </div>
</div> </div>
<div className="border bg-white"> <div className="border bg-white">
+8 -31
View File
@@ -1,18 +1,11 @@
import { useState } from "react"; import { useState } from "react";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import { UserRound, Building2, Briefcase, Users } from "lucide-react";
import { cn } from "../components/ui/utils"; import { cn } from "../components/ui/utils";
import { PortalShell } from "./portal/PortalShell"; import { PortalShell } from "./portal/PortalShell";
import { XiaobinAssistant } from "../components/XiaobinAssistant"; import { XiaobinAssistant } from "../components/XiaobinAssistant";
type Notice = { title: string; date: string }; type Notice = { title: string; date: string };
const ROLES = [
{ key: "purchaser", label: "采购人", en: "Purchaser", icon: Building2 },
{ key: "supplier", label: "供应商", en: "Supplier", icon: Briefcase },
{ key: "expert", label: "专家", en: "Expert", icon: UserRound },
{ key: "other", label: "其他", en: "Other", icon: Users },
];
const NOTICE_TABS = ["招标公告", "资格预审公告", "中标候选人公示", "结果公告", "终止公告"]; const NOTICE_TABS = ["招标公告", "资格预审公告", "中标候选人公示", "结果公告", "终止公告"];
const BANNERS = [ const BANNERS = [
{ {
@@ -35,9 +28,9 @@ const BANNERS = [
const NOTICE_DATA: Record<string, Notice[]> = { const NOTICE_DATA: Record<string, Notice[]> = {
: [ : [
{ title: "[公开招标] 2026年地脚螺栓、不锈钢及五金紧固件框架招标", date: "2026-07-13" }, { title: "[公开招标] 2026年地脚螺栓、不锈钢及五金紧固件框架招标", date: "2026-07-13" },
{ title: "[公开招标] 万华莱州100MW分散式风电项目EPC工程总承包[变更公告]", date: "2026-07-13" }, { title: "[公开招标] 莱州100MW分散式风电项目EPC工程总承包[变更公告]", date: "2026-07-13" },
{ title: "[公开招标] 2026年橡胶密封件框架招标O型圈", date: "2026-07-13" }, { title: "[公开招标] 2026年橡胶密封件框架招标O型圈", date: "2026-07-13" },
{ title: "[公开招标] 万华旋塞阀框架包一 金属旋塞阀、包二 衬氟旋塞阀", date: "2026-07-10" }, { title: "[公开招标] 旋塞阀框架包一 金属旋塞阀、包二 衬氟旋塞阀", date: "2026-07-10" },
{ title: "[公开招标] 改性TPU熟化料仓", date: "2026-07-09" }, { title: "[公开招标] 改性TPU熟化料仓", date: "2026-07-09" },
], ],
: [ : [
@@ -52,13 +45,13 @@ const NOTICE_DATA: Record<string, Notice[]> = {
], ],
: [ : [
{ title: "[公开招标] HDPE管道管件框架招标中标结果公告", date: "2026-07-07" }, { title: "[公开招标] HDPE管道管件框架招标中标结果公告", date: "2026-07-07" },
{ title: "[公开招标] 万华起重框架招标包一 单梁起重机中标结果公告", date: "2026-07-02" }, { title: "[公开招标] 起重框架招标包一 单梁起重机中标结果公告", date: "2026-07-02" },
{ title: "[公开招标] 万华海阳绿电直连光伏组件项目中标结果公告", date: "2026-06-30" }, { title: "[公开招标] 海阳绿电直连光伏组件项目中标结果公告", date: "2026-06-30" },
], ],
: [ : [
{ title: "国标切断双偏心蝶阀框架招标废标公告", date: "2026-07-06" }, { title: "国标切断双偏心蝶阀框架招标废标公告", date: "2026-07-06" },
{ title: "TPU四期熟化料仓招标废标公告", date: "2026-07-01" }, { title: "TPU四期熟化料仓招标废标公告", date: "2026-07-01" },
{ title: "万华滨州碳酸锂项目冷却窑废标公告", date: "2026-06-24" }, { title: "滨州碳酸锂项目冷却窑废标公告", date: "2026-06-24" },
], ],
}; };
@@ -94,22 +87,6 @@ export function PortalHome() {
<button onClick={() => navigate("/register")} className="text-primary hover:underline"></button> <button onClick={() => navigate("/register")} className="text-primary hover:underline"></button>
</p> </p>
</div> </div>
<div className="grid grid-cols-2 gap-2 p-4">
{ROLES.map((r) => {
const Icon = r.icon;
return (
<button
key={r.key}
onClick={() => navigate("/")}
className="flex flex-col items-center justify-center border border-[#d9dee7] px-3 py-3.5 text-center hover:border-primary hover:bg-[#f8fbff]"
>
<Icon className="size-5 text-primary" />
<span className="mt-2 text-sm">{r.label}</span>
<span className="text-[11px] text-[#6b7280]">{r.en}</span>
</button>
);
})}
</div>
<div className="space-y-3 px-4 pb-4"> <div className="space-y-3 px-4 pb-4">
<input <input
placeholder="账号 / 手机号" placeholder="账号 / 手机号"
@@ -190,9 +167,9 @@ export function PortalHome() {
<div className="p-4"> <div className="p-4">
<NoticeList <NoticeList
items={[ items={[
{ title: "万华蓬莱园区高温管道耐火衬里类物资供应商招募", date: "2026-07-10" }, { title: "蓬莱园区高温管道耐火衬里类物资供应商招募", date: "2026-07-10" },
{ title: "万华化学桨叶冷却机类供应商招募", date: "2026-07-10" }, { title: "化学桨叶冷却机类供应商招募", date: "2026-07-10" },
{ title: "万华化学洗车平台服务类供应商招募", date: "2026-06-25" }, { title: "化学洗车平台服务类供应商招募", date: "2026-06-25" },
]} ]}
/> />
</div> </div>
+1 -1
View File
@@ -465,7 +465,7 @@ export function RegisterPage() {
<Notice <Notice
items={[ items={[
"所有信息须与身份证及职称证书一致", "所有信息须与身份证及职称证书一致",
"集团公司将对信息进行真实性核验", "滨化集团将对信息进行真实性核验",
"入库专家须遵守《评委管理规定》", "入库专家须遵守《评委管理规定》",
"至少具备中级及以上职称方可入库", "至少具备中级及以上职称方可入库",
"个人信息变更需及时在线更新", "个人信息变更需及时在线更新",
@@ -11,7 +11,7 @@ const users = [
{ id: "U1", name: "张伟", dept: "招标采购中心", role: "招标专员", status: "启用" }, { id: "U1", name: "张伟", dept: "招标采购中心", role: "招标专员", status: "启用" },
{ id: "U2", name: "刘晓敏", dept: "氯碱生产部", role: "需求部门人员", status: "启用" }, { id: "U2", name: "刘晓敏", dept: "氯碱生产部", role: "需求部门人员", status: "启用" },
{ id: "U3", name: "陈晨", dept: "采购供应部", role: "采购专员", status: "启用" }, { id: "U3", name: "陈晨", dept: "采购供应部", role: "采购专员", status: "启用" },
{ id: "U4", name: "王立强", dept: "公司领导", role: "审批人", status: "启用" }, { id: "U4", name: "王立强", dept: "集团领导", role: "审批人", status: "启用" },
{ id: "U5", name: "孙建华", dept: "评标委员会", role: "领导小组", status: "启用" }, { id: "U5", name: "孙建华", dept: "评标委员会", role: "领导小组", status: "启用" },
{ id: "U6", name: "李审计", dept: "审计监察部", role: "合规/审计", status: "停用" }, { id: "U6", name: "李审计", dept: "审计监察部", role: "合规/审计", status: "停用" },
]; ];
@@ -1,7 +1,7 @@
import { PortalShell } from "./PortalShell"; import { PortalShell } from "./PortalShell";
const GUIDES = [ const GUIDES = [
"万华电子招投标平台-供应商注册操作指南", "电子招投标平台-供应商注册操作指南",
"电子招标投标平台投标文件制作软件操作手册", "电子招标投标平台投标文件制作软件操作手册",
"标证通申请-投标单位操作指南", "标证通申请-投标单位操作指南",
"投标文件制作专用软件安装说明", "投标文件制作专用软件安装说明",
@@ -25,7 +25,7 @@ export function PortalShell({
<div className="min-h-screen bg-[#f5f7fa] text-[#1f2937]"> <div className="min-h-screen bg-[#f5f7fa] text-[#1f2937]">
<header className="border-b bg-white"> <header className="border-b bg-white">
<div className="mx-auto flex h-11 max-w-[1260px] items-center px-6 text-xs text-[#6b7280]"> <div className="mx-auto flex h-11 max-w-[1260px] items-center px-6 text-xs text-[#6b7280]">
<span></span> <span></span>
</div> </div>
<div className="border-t border-b bg-[#0f4ea6]"> <div className="border-t border-b bg-[#0f4ea6]">
<div className="mx-auto flex h-16 max-w-[1260px] items-center px-6"> <div className="mx-auto flex h-16 max-w-[1260px] items-center px-6">
@@ -63,9 +63,9 @@ export function PortalShell({
<footer className="mt-6 border-t bg-white"> <footer className="mt-6 border-t bg-white">
<div className="mx-auto max-w-[1260px] space-y-2 px-6 py-5 text-xs text-[#6b7280]"> <div className="mx-auto max-w-[1260px] space-y-2 px-6 py-5 text-xs text-[#6b7280]">
<div> </div> <div> </div>
<div> </div> <div> </div>
<div> </div> <div></div>
</div> </div>
</footer> </footer>
</div> </div>
@@ -10,7 +10,7 @@ const NOTICE_DATA: Record<string, Notice[]> = {
: [ : [
{ title: "[公开招标] 扣电测试柜框架", date: "2026-07-13" }, { title: "[公开招标] 扣电测试柜框架", date: "2026-07-13" },
{ title: "[公开招标] 2026年地脚螺栓、不锈钢及五金紧固件框架招标", date: "2026-07-13" }, { title: "[公开招标] 2026年地脚螺栓、不锈钢及五金紧固件框架招标", date: "2026-07-13" },
{ title: "[公开招标] 万华莱州100MW分散式风电项目EPC工程总承包[变更公告]", date: "2026-07-13" }, { title: "[公开招标] 莱州100MW分散式风电项目EPC工程总承包[变更公告]", date: "2026-07-13" },
{ title: "[公开招标] TPU掺混特种线项目FFS包装机[变更公告]", date: "2026-07-13" }, { title: "[公开招标] TPU掺混特种线项目FFS包装机[变更公告]", date: "2026-07-13" },
], ],
: [ : [
@@ -25,13 +25,13 @@ const NOTICE_DATA: Record<string, Notice[]> = {
], ],
: [ : [
{ title: "[公开招标] HDPE管道管件框架招标中标结果公告", date: "2026-07-07" }, { title: "[公开招标] HDPE管道管件框架招标中标结果公告", date: "2026-07-07" },
{ title: "[公开招标] 万华起重框架招标包一 单梁起重机中标结果公告", date: "2026-07-02" }, { title: "[公开招标] 起重框架招标包一 单梁起重机中标结果公告", date: "2026-07-02" },
{ title: "[公开招标] 万华海阳绿电直连光伏组件项目中标结果公告", date: "2026-06-30" }, { title: "[公开招标] 海阳绿电直连光伏组件项目中标结果公告", date: "2026-06-30" },
], ],
: [ : [
{ title: "国标切断双偏心蝶阀框架招标废标公告", date: "2026-07-06" }, { title: "国标切断双偏心蝶阀框架招标废标公告", date: "2026-07-06" },
{ title: "TPU四期熟化料仓招标废标公告", date: "2026-07-01" }, { title: "TPU四期熟化料仓招标废标公告", date: "2026-07-01" },
{ title: "万华滨州碳酸锂项目冷却窑废标公告", date: "2026-06-24" }, { title: "滨州碳酸锂项目冷却窑废标公告", date: "2026-06-24" },
], ],
}; };
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 429 KiB

After

Width:  |  Height:  |  Size: 406 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 105 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 96 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 101 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 84 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 99 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 154 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 KiB

After

Width:  |  Height:  |  Size: 380 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 245 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 227 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 207 KiB