소스 검색

登录页面UI规整

yuan 1 개월 전
부모
커밋
e0af7040fe
6개의 변경된 파일과 12개의 추가작업 그리고 8개의 파일을 삭제
  1. BIN
      .DS_Store
  2. 6 4
      CMS-UI完整设计.html
  3. 1 1
      src/book.js
  4. 1 1
      src/data2.js
  5. 3 1
      src/pages.css
  6. 1 1
      src/pages.js

BIN
.DS_Store


+ 6 - 4
CMS-UI完整设计.html

@@ -860,7 +860,9 @@ body.bk-solo .bk-host { width: 1440px; }
 
 /* ---------- 登录页:分项选型 C「右侧浮卡·全幅底图」(表单卡片靠右浮着,左侧一列是系统名、业务模块、三端入口) ---------- */
 .cv.login { height: 900px; overflow: hidden; }
-.lg { position: relative; height: 100%; display: flex; align-items: center; justify-content: flex-end; padding-right: 96px; background: var(--bg-page); color: var(--t2); }
+.lg { position: relative; height: 100%; display: flex; align-items: center; justify-content: center; background: var(--bg-page); color: var(--t2); }
+/* 左列和浮卡成一组:组宽按 1440 基准(左 72 + 列 440 + 间距 392 + 卡 440 + 右 96),窗口更宽时整组居中、两块间距不变(2026-10-08 定) */
+.lg-stage { position: relative; z-index: 1; display: flex; align-items: center; justify-content: flex-end; width: 100%; max-width: 1440px; padding: 0 96px 0 72px; }
 .lg-actions { position: absolute; top: 20px; right: 28px; z-index: 5; display: flex; gap: 4px; }
 .lg-actions .icb { color: var(--t3); }
 .lg-deco { position: absolute; inset: 0; width: 100%; height: 100%; color: var(--c-primary); pointer-events: none; }
@@ -1676,7 +1678,7 @@ window.SPEC_DATA2 = (function () {
       src: "分项选型 · 基础视觉 F(晴空蓝 #3C8CFF、文字链接 #1668DC)", points: ["颜色、文字、按钮、输入控件、状态标签、表格、提示、键值、弹窗外观,全部读同一份令牌;换肤只换令牌取值,尺寸、圆角、字体、排布不变。", "深色皮肤 B 石墨灰(10-08 从三版候选里选定):中性灰、扁平、1px 描边、无渐变无投影,主按钮实心蓝,状态标签只描边。对照见「规范摘要 → 换肤」。", "主按钮是左上浅、右下深的渐变,下面有一层淡蓝投影;页面底色是蓝白渐变,右上角一团浅蓝光晕;卡片白底、14px 圆角、淡蓝投影。", "表头很淡的蓝底,行高 40px;状态是无描边的浅色圆角标签;中性色带蓝调;数字用 Inter。"], todo: ["深色默认跟随系统还是手动切换;切换后的选择记在账号还是本机。"] },
     { key: "login", group: "全局", title: "登录页", kind: "login", sub: "分项选型登录页 C:右侧浮卡·全幅底图 + 左侧三端入口", variants: [["login", "登录"], ["reset", "重置密码"]], ends: true,
       src: "分项选型 · 登录页 C(2026-10-07 选定);views/login/index.vue、components/Login.vue、ResetPwd.vue;文案取自 lang/package/zh-cn.json",
-      points: ["整页是视觉 F 的蓝白渐变底色,叠一层很淡的网格、几条主色曲线和右上角两个圆(内联 SVG,不用图片文件)。", "左侧一列(垂直居中,和卡片对齐):系统名 32px 和版本号、本系统业务模块(取自本系统菜单的业务分组,不列运维配置类)、「三端系统」三张入口卡片——当前系统标「当前」,另外两个点一下跳到对应系统的登录页。", "右侧 440px 浮卡,离右边 96px:小标志+系统名、「登录」标题、用户名/密码/验证码标签在上,输入框按代码现状 40px(登录页 size=large),其余页面仍是 32px;记住我、忘记密码;登录按钮通宽。", "右上角的主题按钮可以点:在浅色和最近看过的深色皮肤之间来回切(月亮/太阳);语言切换只保留入口;「注册」组件代码里存在但登录页没有入口,本稿不画。", "画面里可以点:三端入口(切到那个系统)、忘记密码/返回登录、换一张验证码、显示密码、记住我。"],
+      points: ["整页是视觉 F 的蓝白渐变底色,叠一层很淡的网格、几条主色曲线和右上角两个圆(内联 SVG,不用图片文件)。", "左侧一列(垂直居中,和卡片对齐):系统名 32px 和版本号、本系统业务模块(取自本系统菜单的业务分组,不列运维配置类)、「三端系统」三张入口卡片——当前系统标「当前」,另外两个点一下跳到对应系统的登录页。", "右侧 440px 浮卡,离右边 96px:小标志+系统名、「登录」标题、用户名/密码/验证码标签在上,输入框按代码现状 40px(登录页 size=large),其余页面仍是 32px;记住我、忘记密码;登录按钮通宽。", "宽屏:左列和浮卡成一组,组宽按 1440 基准(左 72、列 440、间距 392、卡 440、右 96),窗口更宽时整组居中,两块间距保持 392px 不变;底图和右上角按钮仍铺满整屏。窗口放不下左列(1100 以下)时只留卡片居中。(2026-10-08 定)", "右上角的主题按钮可以点:在浅色和最近看过的深色皮肤之间来回切(月亮/太阳);语言切换只保留入口;「注册」组件代码里存在但登录页没有入口,本稿不画。", "画面里可以点:三端入口(切到那个系统)、忘记密码/返回登录、换一张验证码、显示密码、记住我。"],
       todo: ["验证码图片是示意;登录页的控件要不要也统一成 32px。", "三端入口是跳到各系统各自的登录地址,三个地址要放在前端配置里维护;跳转时要不要带上当前输入的用户名。", "三端登录页只换系统名、标志、模块清单和入口里的高亮,其余完全一样——是否需要三端不同的底色做区分(口径是三端完全一致,本稿没有区分)。"] },
     { key: "home", group: "全局", title: "整体框架 · 首页", kind: "shell", active: "首页", ends: true, sub: "框架 A 经典三段 + 首页工作台",
       src: "layouts/(侧栏、标签页、菜单搜索、通知、用户菜单、交易日);views/dashboard/index.vue 现状只有问候语",
@@ -2762,7 +2764,7 @@ window.UI = (function () {
         <div class="lg-row center"><span class="t3">${c.think}</span><span class="lnk" data-act="lv" data-v="login">${c.back}</span></div>`;
     }
     return `<div class="lg">${LG_DECO}<div class="lg-actions"><span class="icb" data-act="theme" title="${c.theme}:在浅色和最近看过的深色皮肤之间切换">${ic(T.dark ? "sun" : "moon")}</span><span class="icb" data-act="toast" data-msg="示例:${c.lang}" title="${c.lang}">${ic("globe")}</span></div>
-      ${left}<div class="lg-card"><div class="lg-brand sm"><span class="lg-logo sm">${e.logo}</span><b>${esc(e.sys)}</b></div>${form}</div></div>`;
+      <div class="lg-stage">${left}<div class="lg-card"><div class="lg-brand sm"><span class="lg-logo sm">${e.logo}</span><b>${esc(e.sys)}</b></div>${form}</div></div></div>`;
   };
   U.extraActions.cap = (host, sp) => { sp.cap = (sp.cap || 0) + 1; return true; };
   U.extraActions.eye = (host, sp) => { sp.showPw = !sp.showPw; return true; };
@@ -2933,7 +2935,7 @@ window.UI = (function () {
       ["深色皮肤", "B", "石墨灰", "中性暗灰不偏蓝;扁平,卡片靠 1px 描边分区,没有渐变、光晕和投影;主按钮实心蓝;状态标签只描边不铺底。尺寸、圆角、字体、排布和浅色完全相同,只换令牌取值。(10-08 三版深色候选里选 B;A 夜空蓝、C 极光玻璃未选。)", "kit"],
     ];
     const dims = [
-      ["设计基准", "1440 × 900;三端完全一致,不做识别色"], ["控件高度", "32px(登录页按代码现状 40px)"], ["表格", "表头 40px、行高 40px;表头 13px、很淡的蓝底;数字右对齐用 Inter"],
+      ["设计基准", "1440 × 900;三端完全一致,不做识别色"], ["宽屏(大于 1440)", "登录页:左列和浮卡成一组按 1440 基准居中,两块间距保持 392px,底图铺满整屏(2026-10-08 定)"], ["控件高度", "32px(登录页按代码现状 40px)"], ["表格", "表头 40px、行高 40px;表头 13px、很淡的蓝底;数字右对齐用 Inter"],
       ["文字", "正文 14px / 22px,辅助 12px / 18px,区块标题 15px,弹窗标题 16px,编号标题 20px;中文系统字体,英文和数字 Inter"],
       ["圆角", "控件 8px、卡片 14px、标签 6px、弹窗 16px"], ["投影", "卡片和主按钮用淡蓝投影;弹层 0 10px 28px;弹窗与抽屉 0 24px 64px"],
       ["侧栏与顶栏", "侧栏 220px 浅色(深色皮肤下近黑),收起后 64px;顶栏 52px;标签页栏 38px;内容区四周留 16px,卡片间距 12px"], ["页签", "框架标签页 28px 卡片式,当前页带主色圆点;页面级页签 40px 无底色;卡片内页签 48px 在卡片标题栏里;抽屉内页签 42px"],

+ 1 - 1
src/book.js

@@ -69,7 +69,7 @@
       ["深色皮肤", "B", "石墨灰", "中性暗灰不偏蓝;扁平,卡片靠 1px 描边分区,没有渐变、光晕和投影;主按钮实心蓝;状态标签只描边不铺底。尺寸、圆角、字体、排布和浅色完全相同,只换令牌取值。(10-08 三版深色候选里选 B;A 夜空蓝、C 极光玻璃未选。)", "kit"],
     ];
     const dims = [
-      ["设计基准", "1440 × 900;三端完全一致,不做识别色"], ["控件高度", "32px(登录页按代码现状 40px)"], ["表格", "表头 40px、行高 40px;表头 13px、很淡的蓝底;数字右对齐用 Inter"],
+      ["设计基准", "1440 × 900;三端完全一致,不做识别色"], ["宽屏(大于 1440)", "登录页:左列和浮卡成一组按 1440 基准居中,两块间距保持 392px,底图铺满整屏(2026-10-08 定)"], ["控件高度", "32px(登录页按代码现状 40px)"], ["表格", "表头 40px、行高 40px;表头 13px、很淡的蓝底;数字右对齐用 Inter"],
       ["文字", "正文 14px / 22px,辅助 12px / 18px,区块标题 15px,弹窗标题 16px,编号标题 20px;中文系统字体,英文和数字 Inter"],
       ["圆角", "控件 8px、卡片 14px、标签 6px、弹窗 16px"], ["投影", "卡片和主按钮用淡蓝投影;弹层 0 10px 28px;弹窗与抽屉 0 24px 64px"],
       ["侧栏与顶栏", "侧栏 220px 浅色(深色皮肤下近黑),收起后 64px;顶栏 52px;标签页栏 38px;内容区四周留 16px,卡片间距 12px"], ["页签", "框架标签页 28px 卡片式,当前页带主色圆点;页面级页签 40px 无底色;卡片内页签 48px 在卡片标题栏里;抽屉内页签 42px"],

+ 1 - 1
src/data2.js

@@ -235,7 +235,7 @@ window.SPEC_DATA2 = (function () {
       src: "分项选型 · 基础视觉 F(晴空蓝 #3C8CFF、文字链接 #1668DC)", points: ["颜色、文字、按钮、输入控件、状态标签、表格、提示、键值、弹窗外观,全部读同一份令牌;换肤只换令牌取值,尺寸、圆角、字体、排布不变。", "深色皮肤 B 石墨灰(10-08 从三版候选里选定):中性灰、扁平、1px 描边、无渐变无投影,主按钮实心蓝,状态标签只描边。对照见「规范摘要 → 换肤」。", "主按钮是左上浅、右下深的渐变,下面有一层淡蓝投影;页面底色是蓝白渐变,右上角一团浅蓝光晕;卡片白底、14px 圆角、淡蓝投影。", "表头很淡的蓝底,行高 40px;状态是无描边的浅色圆角标签;中性色带蓝调;数字用 Inter。"], todo: ["深色默认跟随系统还是手动切换;切换后的选择记在账号还是本机。"] },
     { key: "login", group: "全局", title: "登录页", kind: "login", sub: "分项选型登录页 C:右侧浮卡·全幅底图 + 左侧三端入口", variants: [["login", "登录"], ["reset", "重置密码"]], ends: true,
       src: "分项选型 · 登录页 C(2026-10-07 选定);views/login/index.vue、components/Login.vue、ResetPwd.vue;文案取自 lang/package/zh-cn.json",
-      points: ["整页是视觉 F 的蓝白渐变底色,叠一层很淡的网格、几条主色曲线和右上角两个圆(内联 SVG,不用图片文件)。", "左侧一列(垂直居中,和卡片对齐):系统名 32px 和版本号、本系统业务模块(取自本系统菜单的业务分组,不列运维配置类)、「三端系统」三张入口卡片——当前系统标「当前」,另外两个点一下跳到对应系统的登录页。", "右侧 440px 浮卡,离右边 96px:小标志+系统名、「登录」标题、用户名/密码/验证码标签在上,输入框按代码现状 40px(登录页 size=large),其余页面仍是 32px;记住我、忘记密码;登录按钮通宽。", "右上角的主题按钮可以点:在浅色和最近看过的深色皮肤之间来回切(月亮/太阳);语言切换只保留入口;「注册」组件代码里存在但登录页没有入口,本稿不画。", "画面里可以点:三端入口(切到那个系统)、忘记密码/返回登录、换一张验证码、显示密码、记住我。"],
+      points: ["整页是视觉 F 的蓝白渐变底色,叠一层很淡的网格、几条主色曲线和右上角两个圆(内联 SVG,不用图片文件)。", "左侧一列(垂直居中,和卡片对齐):系统名 32px 和版本号、本系统业务模块(取自本系统菜单的业务分组,不列运维配置类)、「三端系统」三张入口卡片——当前系统标「当前」,另外两个点一下跳到对应系统的登录页。", "右侧 440px 浮卡,离右边 96px:小标志+系统名、「登录」标题、用户名/密码/验证码标签在上,输入框按代码现状 40px(登录页 size=large),其余页面仍是 32px;记住我、忘记密码;登录按钮通宽。", "宽屏:左列和浮卡成一组,组宽按 1440 基准(左 72、列 440、间距 392、卡 440、右 96),窗口更宽时整组居中,两块间距保持 392px 不变;底图和右上角按钮仍铺满整屏。窗口放不下左列(1100 以下)时只留卡片居中。(2026-10-08 定)", "右上角的主题按钮可以点:在浅色和最近看过的深色皮肤之间来回切(月亮/太阳);语言切换只保留入口;「注册」组件代码里存在但登录页没有入口,本稿不画。", "画面里可以点:三端入口(切到那个系统)、忘记密码/返回登录、换一张验证码、显示密码、记住我。"],
       todo: ["验证码图片是示意;登录页的控件要不要也统一成 32px。", "三端入口是跳到各系统各自的登录地址,三个地址要放在前端配置里维护;跳转时要不要带上当前输入的用户名。", "三端登录页只换系统名、标志、模块清单和入口里的高亮,其余完全一样——是否需要三端不同的底色做区分(口径是三端完全一致,本稿没有区分)。"] },
     { key: "home", group: "全局", title: "整体框架 · 首页", kind: "shell", active: "首页", ends: true, sub: "框架 A 经典三段 + 首页工作台",
       src: "layouts/(侧栏、标签页、菜单搜索、通知、用户菜单、交易日);views/dashboard/index.vue 现状只有问候语",

+ 3 - 1
src/pages.css

@@ -178,7 +178,9 @@
 
 /* ---------- 登录页:分项选型 C「右侧浮卡·全幅底图」(表单卡片靠右浮着,左侧一列是系统名、业务模块、三端入口) ---------- */
 .cv.login { height: 900px; overflow: hidden; }
-.lg { position: relative; height: 100%; display: flex; align-items: center; justify-content: flex-end; padding-right: 96px; background: var(--bg-page); color: var(--t2); }
+.lg { position: relative; height: 100%; display: flex; align-items: center; justify-content: center; background: var(--bg-page); color: var(--t2); }
+/* 左列和浮卡成一组:组宽按 1440 基准(左 72 + 列 440 + 间距 392 + 卡 440 + 右 96),窗口更宽时整组居中、两块间距不变(2026-10-08 定) */
+.lg-stage { position: relative; z-index: 1; display: flex; align-items: center; justify-content: flex-end; width: 100%; max-width: 1440px; padding: 0 96px 0 72px; }
 .lg-actions { position: absolute; top: 20px; right: 28px; z-index: 5; display: flex; gap: 4px; }
 .lg-actions .icb { color: var(--t3); }
 .lg-deco { position: absolute; inset: 0; width: 100%; height: 100%; color: var(--c-primary); pointer-events: none; }

+ 1 - 1
src/pages.js

@@ -256,7 +256,7 @@
         <div class="lg-row center"><span class="t3">${c.think}</span><span class="lnk" data-act="lv" data-v="login">${c.back}</span></div>`;
     }
     return `<div class="lg">${LG_DECO}<div class="lg-actions"><span class="icb" data-act="theme" title="${c.theme}:在浅色和最近看过的深色皮肤之间切换">${ic(T.dark ? "sun" : "moon")}</span><span class="icb" data-act="toast" data-msg="示例:${c.lang}" title="${c.lang}">${ic("globe")}</span></div>
-      ${left}<div class="lg-card"><div class="lg-brand sm"><span class="lg-logo sm">${e.logo}</span><b>${esc(e.sys)}</b></div>${form}</div></div>`;
+      <div class="lg-stage">${left}<div class="lg-card"><div class="lg-brand sm"><span class="lg-logo sm">${e.logo}</span><b>${esc(e.sys)}</b></div>${form}</div></div></div>`;
   };
   U.extraActions.cap = (host, sp) => { sp.cap = (sp.cap || 0) + 1; return true; };
   U.extraActions.eye = (host, sp) => { sp.showPw = !sp.showPw; return true; };