后台前端界面调整
|
|
@ -0,0 +1,22 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="18" fill="url(#bg)"/>
|
||||
<rect x="4" y="4" width="56" height="56" rx="14" stroke="rgba(255,255,255,0.22)"/>
|
||||
<text
|
||||
x="32"
|
||||
y="38"
|
||||
text-anchor="middle"
|
||||
font-size="21"
|
||||
font-weight="700"
|
||||
font-family="Arial, PingFang SC, Microsoft YaHei, sans-serif"
|
||||
fill="white"
|
||||
letter-spacing="0.5"
|
||||
>
|
||||
CRM
|
||||
</text>
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="10" y1="8" x2="56" y2="56" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7C3AED"/>
|
||||
<stop offset="1" stop-color="#4F46E5"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 684 B |
|
|
@ -0,0 +1,46 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Ziguang Huizhi CRM Icon Logo</title>
|
||||
<desc id="desc">Brand-oriented CRM logo icon with an abstract converging symbol, data nodes, and geometric structure in purple tones.</desc>
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="72" y1="60" x2="448" y2="460" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#744CF7"/>
|
||||
<stop offset="1" stop-color="#2E1685"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="mark" x1="170" y1="152" x2="342" y2="360" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D4C4FF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="accent" x1="198" y1="184" x2="322" y2="322" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A98CFF"/>
|
||||
<stop offset="1" stop-color="#6C44F2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="112" fill="url(#bg)"/>
|
||||
<path d="M130 256C130 185.307 185.307 130 256 130C326.693 130 382 185.307 382 256C382 326.693 326.693 382 256 382C185.307 382 130 326.693 130 256Z" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="12"/>
|
||||
|
||||
<path d="M256 150L344 202V310L256 362L168 310V202L256 150Z" fill="#FFFFFF" fill-opacity="0.08"/>
|
||||
<path d="M256 174L323 213V299L256 338L189 299V213L256 174Z" stroke="#FFFFFF" stroke-opacity="0.16" stroke-width="2"/>
|
||||
|
||||
<path d="M206 193L256 242L306 193" stroke="url(#mark)" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M206 319L256 270L306 319" stroke="url(#mark)" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M206 193V319" stroke="url(#mark)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M306 193V319" stroke="url(#mark)" stroke-width="18" stroke-linecap="round"/>
|
||||
|
||||
<path d="M228 221L256 249L284 221" stroke="url(#accent)" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M228 291L256 263L284 291" stroke="url(#accent)" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
<circle cx="206" cy="193" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="306" cy="193" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="206" cy="319" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="306" cy="319" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="256" cy="242" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="256" cy="270" r="14" fill="#FFFFFF"/>
|
||||
|
||||
<circle cx="206" cy="193" r="5" fill="#7A57F8"/>
|
||||
<circle cx="306" cy="193" r="5" fill="#7A57F8"/>
|
||||
<circle cx="206" cy="319" r="5" fill="#7A57F8"/>
|
||||
<circle cx="306" cy="319" r="5" fill="#7A57F8"/>
|
||||
<circle cx="256" cy="242" r="5" fill="#7A57F8"/>
|
||||
<circle cx="256" cy="270" r="5" fill="#7A57F8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
|
|
@ -0,0 +1,37 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Ziguang Huizhi CRM Icon Minimal</title>
|
||||
<desc id="desc">Minimal enterprise CRM icon with geometric links, converging data paths, and a premium purple palette.</desc>
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="64" y1="56" x2="448" y2="456" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7B57F8"/>
|
||||
<stop offset="1" stop-color="#4320B7"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="line" x1="156" y1="156" x2="356" y2="356" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D7C9FF"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="108" fill="url(#bg)"/>
|
||||
<rect x="78" y="78" width="356" height="356" rx="88" stroke="#FFFFFF" stroke-opacity="0.12" stroke-width="2"/>
|
||||
|
||||
<circle cx="176" cy="176" r="20" fill="#F6F2FF"/>
|
||||
<circle cx="336" cy="176" r="20" fill="#F6F2FF"/>
|
||||
<circle cx="176" cy="336" r="20" fill="#F6F2FF"/>
|
||||
<circle cx="336" cy="336" r="20" fill="#F6F2FF"/>
|
||||
|
||||
<path d="M176 176L224 224" stroke="url(#line)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M336 176L288 224" stroke="url(#line)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M176 336L224 288" stroke="url(#line)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M336 336L288 288" stroke="url(#line)" stroke-width="18" stroke-linecap="round"/>
|
||||
|
||||
<path d="M232 176V336" stroke="#F4EEFF" stroke-width="24" stroke-linecap="round"/>
|
||||
<path d="M280 176V336" stroke="#F4EEFF" stroke-width="24" stroke-linecap="round"/>
|
||||
<path d="M232 256H280" stroke="#F4EEFF" stroke-width="24" stroke-linecap="round"/>
|
||||
|
||||
<rect x="220" y="220" width="72" height="72" rx="24" fill="#F8F5FF" fill-opacity="0.18"/>
|
||||
<circle cx="256" cy="256" r="22" fill="#FFFFFF"/>
|
||||
<circle cx="256" cy="256" r="8" fill="#7B57F8"/>
|
||||
|
||||
<path d="M128 256C128 185.308 185.308 128 256 128C326.692 128 384 185.308 384 256C384 326.692 326.692 384 256 384C185.308 384 128 326.692 128 256Z" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="10" stroke-dasharray="1 20"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
|
|
@ -0,0 +1,86 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Ziguang Huizhi CRM Icon Premium Glow</title>
|
||||
<desc id="desc">Premium CRM icon with luminous data rings, glowing nodes, and a glass-like core on a purple enterprise background.</desc>
|
||||
<defs>
|
||||
<radialGradient id="bg" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(190 152) rotate(44.5) scale(410 430)">
|
||||
<stop stop-color="#8B6BFF"/>
|
||||
<stop offset="0.45" stop-color="#5E34E6"/>
|
||||
<stop offset="1" stop-color="#20104D"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="glow" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(256 256) rotate(90) scale(150)">
|
||||
<stop stop-color="#FFFFFF" stop-opacity="0.9"/>
|
||||
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="ring" x1="128" y1="128" x2="384" y2="384" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F8F4FF"/>
|
||||
<stop offset="1" stop-color="#A887FF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="core" x1="210" y1="194" x2="314" y2="318" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D8CCFF"/>
|
||||
</linearGradient>
|
||||
<filter id="blur40" x="84" y="84" width="344" height="344" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="20" result="effect1_foregroundBlur"/>
|
||||
</filter>
|
||||
<filter id="blur12" x="118" y="118" width="276" height="276" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="6" result="effect1_foregroundBlur"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="112" fill="url(#bg)"/>
|
||||
<rect x="74" y="74" width="364" height="364" rx="92" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="2"/>
|
||||
|
||||
<g filter="url(#blur40)">
|
||||
<circle cx="256" cy="256" r="112" fill="url(#glow)" fill-opacity="0.5"/>
|
||||
</g>
|
||||
|
||||
<circle cx="256" cy="256" r="136" stroke="#FFFFFF" stroke-opacity="0.08" stroke-width="2"/>
|
||||
<circle cx="256" cy="256" r="104" stroke="url(#ring)" stroke-opacity="0.4" stroke-width="10"/>
|
||||
<circle cx="256" cy="256" r="78" stroke="#FFFFFF" stroke-opacity="0.18" stroke-width="2" stroke-dasharray="4 14"/>
|
||||
|
||||
<g filter="url(#blur12)">
|
||||
<path d="M172 184L228 228" stroke="#EDE6FF" stroke-width="16" stroke-linecap="round"/>
|
||||
<path d="M340 184L284 228" stroke="#EDE6FF" stroke-width="16" stroke-linecap="round"/>
|
||||
<path d="M172 328L228 284" stroke="#EDE6FF" stroke-width="16" stroke-linecap="round"/>
|
||||
<path d="M340 328L284 284" stroke="#EDE6FF" stroke-width="16" stroke-linecap="round"/>
|
||||
<path d="M196 256H224" stroke="#EDE6FF" stroke-width="16" stroke-linecap="round"/>
|
||||
<path d="M288 256H316" stroke="#EDE6FF" stroke-width="16" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<path d="M172 184L228 228" stroke="#FFFFFF" stroke-opacity="0.92" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M340 184L284 228" stroke="#FFFFFF" stroke-opacity="0.92" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M172 328L228 284" stroke="#FFFFFF" stroke-opacity="0.92" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M340 328L284 284" stroke="#FFFFFF" stroke-opacity="0.92" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M196 256H224" stroke="#FFFFFF" stroke-opacity="0.92" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M288 256H316" stroke="#FFFFFF" stroke-opacity="0.92" stroke-width="10" stroke-linecap="round"/>
|
||||
|
||||
<g>
|
||||
<rect x="204" y="204" width="104" height="104" rx="32" fill="#FFFFFF" fill-opacity="0.1"/>
|
||||
<path d="M256 190L314 223V289L256 322L198 289V223L256 190Z" fill="url(#core)"/>
|
||||
<path d="M256 212L294 234V278L256 300L218 278V234L256 212Z" fill="#5E34E6"/>
|
||||
<path d="M237 245H275C282.18 245 288 250.82 288 258C288 265.18 282.18 271 275 271H237C229.82 271 224 265.18 224 258C224 250.82 229.82 245 237 245Z" fill="#F7F2FF"/>
|
||||
<circle cx="256" cy="258" r="9" fill="#7E5AF8"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<circle cx="172" cy="184" r="16" fill="#FFFFFF"/>
|
||||
<circle cx="340" cy="184" r="16" fill="#FFFFFF"/>
|
||||
<circle cx="172" cy="328" r="16" fill="#FFFFFF"/>
|
||||
<circle cx="340" cy="328" r="16" fill="#FFFFFF"/>
|
||||
<circle cx="196" cy="256" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="316" cy="256" r="14" fill="#FFFFFF"/>
|
||||
</g>
|
||||
|
||||
<g fill="#B495FF">
|
||||
<circle cx="172" cy="184" r="6"/>
|
||||
<circle cx="340" cy="184" r="6"/>
|
||||
<circle cx="172" cy="328" r="6"/>
|
||||
<circle cx="340" cy="328" r="6"/>
|
||||
<circle cx="196" cy="256" r="5"/>
|
||||
<circle cx="316" cy="256" r="5"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
|
|
@ -0,0 +1,86 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">紫光汇智 CRM 系统图标增强版</title>
|
||||
<desc id="desc">以客户节点、管理中枢、数据连接和CRM字样,强化客户关系管理系统的识别度。</desc>
|
||||
<defs>
|
||||
<linearGradient id="bgGradient" x1="70" y1="56" x2="442" y2="456" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7D5BFA"/>
|
||||
<stop offset="0.55" stop-color="#5D33E6"/>
|
||||
<stop offset="1" stop-color="#2A146F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="panelGradient" x1="108" y1="96" x2="404" y2="404" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF" stop-opacity="0.18"/>
|
||||
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0.04"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linkGradient" x1="148" y1="132" x2="362" y2="314" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F7F3FF"/>
|
||||
<stop offset="1" stop-color="#B89DFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="coreGradient" x1="194" y1="158" x2="318" y2="306" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D7CAFF"/>
|
||||
</linearGradient>
|
||||
<filter id="softGlow" x="104" y="96" width="304" height="256" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="8" result="effect1_foregroundBlur"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="112" fill="url(#bgGradient)"/>
|
||||
<rect x="76" y="76" width="360" height="360" rx="92" fill="url(#panelGradient)" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="2"/>
|
||||
|
||||
<circle cx="256" cy="216" r="126" stroke="#FFFFFF" stroke-opacity="0.08" stroke-width="14"/>
|
||||
<circle cx="256" cy="216" r="92" stroke="#FFFFFF" stroke-opacity="0.14" stroke-width="6" stroke-dasharray="3 18"/>
|
||||
|
||||
<g filter="url(#softGlow)">
|
||||
<path d="M170 150L224 194" stroke="url(#linkGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M342 150L288 194" stroke="url(#linkGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M150 246L214 230" stroke="url(#linkGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M362 246L298 230" stroke="url(#linkGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M190 308L232 270" stroke="url(#linkGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M322 308L280 270" stroke="url(#linkGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<circle cx="170" cy="150" r="18" fill="#F4EEFF"/>
|
||||
<circle cx="342" cy="150" r="18" fill="#F4EEFF"/>
|
||||
<circle cx="150" cy="246" r="18" fill="#F4EEFF"/>
|
||||
<circle cx="362" cy="246" r="18" fill="#F4EEFF"/>
|
||||
<circle cx="190" cy="308" r="18" fill="#F4EEFF"/>
|
||||
<circle cx="322" cy="308" r="18" fill="#F4EEFF"/>
|
||||
</g>
|
||||
|
||||
<g fill="#B396FF">
|
||||
<circle cx="170" cy="150" r="6"/>
|
||||
<circle cx="342" cy="150" r="6"/>
|
||||
<circle cx="150" cy="246" r="6"/>
|
||||
<circle cx="362" cy="246" r="6"/>
|
||||
<circle cx="190" cy="308" r="6"/>
|
||||
<circle cx="322" cy="308" r="6"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<path d="M256 142L316 176V244L256 278L196 244V176L256 142Z" fill="url(#coreGradient)"/>
|
||||
<path d="M256 162L298 186V234L256 258L214 234V186L256 162Z" fill="#5D33E6"/>
|
||||
<circle cx="256" cy="200" r="18" fill="#FFFFFF"/>
|
||||
<path d="M224 234C224 218.536 236.536 206 252 206H260C275.464 206 288 218.536 288 234V236H224V234Z" fill="#F2ECFF"/>
|
||||
<path d="M236 188L248 200" stroke="#A386FF" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M276 188L264 200" stroke="#A386FF" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g opacity="0.92">
|
||||
<path d="M228 120C236 112 246 108 256 108C266 108 276 112 284 120" stroke="#FFFFFF" stroke-opacity="0.3" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M214 322C225 334 240 340 256 340C272 340 287 334 298 322" stroke="#FFFFFF" stroke-opacity="0.22" stroke-width="8" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="126" y="354" width="260" height="62" rx="31" fill="#FFFFFF" fill-opacity="0.12" stroke="#FFFFFF" stroke-opacity="0.16" stroke-width="2"/>
|
||||
<circle cx="162" cy="385" r="10" fill="#EDE6FF"/>
|
||||
<path d="M178 385H196" stroke="#EDE6FF" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M224 372C214.059 372 206 380.059 206 390C206 399.941 214.059 408 224 408H232" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M252 372V408" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M252 372H272C279.732 372 286 378.268 286 386C286 393.732 279.732 400 272 400H252" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M252 392L282 408" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M306 408V372L324 394L342 372V408" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
|
|
@ -0,0 +1,76 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">紫光汇智 CRM 系统图标</title>
|
||||
<desc id="desc">以紫色几何网络和数据流为核心,表达汇聚智慧、数据连接与客户关系管理的现代企业级图标。</desc>
|
||||
<defs>
|
||||
<linearGradient id="bgGradient" x1="76" y1="76" x2="436" y2="436" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6E41F5"/>
|
||||
<stop offset="1" stop-color="#3D1FA8"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="panelGradient" x1="120" y1="120" x2="392" y2="392" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#8C67FF" stop-opacity="0.28"/>
|
||||
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0.08"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linkGradient" x1="146" y1="164" x2="366" y2="348" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EEE8FF"/>
|
||||
<stop offset="1" stop-color="#B99CFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="coreGradient" x1="214" y1="214" x2="298" y2="298" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D9CCFF"/>
|
||||
</linearGradient>
|
||||
<filter id="softGlow" x="96" y="96" width="320" height="320" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="10" result="effect1_foregroundBlur"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="116" fill="url(#bgGradient)"/>
|
||||
<rect x="76" y="76" width="360" height="360" rx="92" fill="url(#panelGradient)" stroke="#FFFFFF" stroke-opacity="0.12"/>
|
||||
|
||||
<circle cx="256" cy="256" r="142" stroke="#FFFFFF" stroke-opacity="0.12" stroke-width="20"/>
|
||||
<circle cx="256" cy="256" r="104" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="10" stroke-dasharray="2 22"/>
|
||||
|
||||
<g filter="url(#softGlow)">
|
||||
<path d="M160 178L224 226" stroke="url(#linkGradient)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M160 334L224 286" stroke="url(#linkGradient)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M352 178L288 226" stroke="url(#linkGradient)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M352 334L288 286" stroke="url(#linkGradient)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M184 256H214" stroke="url(#linkGradient)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M298 256H328" stroke="url(#linkGradient)" stroke-width="18" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<path d="M196 170C218 147 239 136 256 136C273 136 294 147 316 170" stroke="#CDBBFF" stroke-opacity="0.95" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M196 342C218 365 239 376 256 376C273 376 294 365 316 342" stroke="#CDBBFF" stroke-opacity="0.95" stroke-width="14" stroke-linecap="round"/>
|
||||
|
||||
<g>
|
||||
<rect x="220" y="220" width="72" height="72" rx="24" transform="rotate(45 256 256)" fill="url(#coreGradient)"/>
|
||||
<path d="M256 204L302 230.5V281.5L256 308L210 281.5V230.5L256 204Z" fill="#5B33DE"/>
|
||||
<path d="M256 226L283 241.5V272.5L256 288L229 272.5V241.5L256 226Z" fill="#EDE7FF"/>
|
||||
<path d="M244 238H268C276.837 238 284 245.163 284 254V258C284 266.837 276.837 274 268 274H244C235.163 274 228 266.837 228 258V254C228 245.163 235.163 238 244 238Z" fill="#7B55F7"/>
|
||||
<circle cx="256" cy="256" r="10" fill="#FFFFFF"/>
|
||||
</g>
|
||||
|
||||
<g fill="#F4F0FF">
|
||||
<circle cx="160" cy="178" r="18"/>
|
||||
<circle cx="160" cy="334" r="18"/>
|
||||
<circle cx="352" cy="178" r="18"/>
|
||||
<circle cx="352" cy="334" r="18"/>
|
||||
<circle cx="184" cy="256" r="16"/>
|
||||
<circle cx="328" cy="256" r="16"/>
|
||||
</g>
|
||||
|
||||
<g fill="#B99CFF">
|
||||
<circle cx="160" cy="178" r="7"/>
|
||||
<circle cx="160" cy="334" r="7"/>
|
||||
<circle cx="352" cy="178" r="7"/>
|
||||
<circle cx="352" cy="334" r="7"/>
|
||||
<circle cx="184" cy="256" r="6"/>
|
||||
<circle cx="328" cy="256" r="6"/>
|
||||
</g>
|
||||
|
||||
<path d="M138 178C153 152 175 132 202 120" stroke="#FFFFFF" stroke-opacity="0.18" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M138 334C153 360 175 380 202 392" stroke="#FFFFFF" stroke-opacity="0.18" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M374 178C359 152 337 132 310 120" stroke="#FFFFFF" stroke-opacity="0.18" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M374 334C359 360 337 380 310 392" stroke="#FFFFFF" stroke-opacity="0.18" stroke-width="8" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
|
|
@ -0,0 +1,94 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">紫光汇智销售 CRM 系统图标</title>
|
||||
<desc id="desc">以线索节点、商机漏斗、转化路径和成交中枢,表达销售 CRM 系统的业务特征。</desc>
|
||||
<defs>
|
||||
<linearGradient id="bgGradient" x1="68" y1="56" x2="444" y2="456" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7F61FF"/>
|
||||
<stop offset="0.52" stop-color="#5A31E3"/>
|
||||
<stop offset="1" stop-color="#231056"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="panelGradient" x1="92" y1="86" x2="420" y2="420" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF" stop-opacity="0.18"/>
|
||||
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0.05"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="funnelGradient" x1="174" y1="132" x2="338" y2="310" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D6C7FF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="flowGradient" x1="138" y1="132" x2="374" y2="296" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F6F2FF"/>
|
||||
<stop offset="1" stop-color="#AB8EFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="dealGradient" x1="228" y1="252" x2="286" y2="320" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#E2D8FF"/>
|
||||
</linearGradient>
|
||||
<filter id="softGlow" x="104" y="94" width="304" height="254" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="8" result="effect1_foregroundBlur"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="112" fill="url(#bgGradient)"/>
|
||||
<rect x="76" y="76" width="360" height="360" rx="92" fill="url(#panelGradient)" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="2"/>
|
||||
|
||||
<circle cx="256" cy="212" r="126" stroke="#FFFFFF" stroke-opacity="0.08" stroke-width="14"/>
|
||||
<circle cx="256" cy="212" r="94" stroke="#FFFFFF" stroke-opacity="0.14" stroke-width="6" stroke-dasharray="3 18"/>
|
||||
|
||||
<g filter="url(#softGlow)">
|
||||
<path d="M158 146L204 180" stroke="url(#flowGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M256 122V168" stroke="url(#flowGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M354 146L308 180" stroke="url(#flowGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M174 242L214 228" stroke="url(#flowGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M338 242L298 228" stroke="url(#flowGradient)" stroke-width="14" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<circle cx="158" cy="146" r="18" fill="#F5F0FF"/>
|
||||
<circle cx="256" cy="122" r="18" fill="#F5F0FF"/>
|
||||
<circle cx="354" cy="146" r="18" fill="#F5F0FF"/>
|
||||
<circle cx="174" cy="242" r="18" fill="#F5F0FF"/>
|
||||
<circle cx="338" cy="242" r="18" fill="#F5F0FF"/>
|
||||
</g>
|
||||
|
||||
<g fill="#AF92FF">
|
||||
<circle cx="158" cy="146" r="6"/>
|
||||
<circle cx="256" cy="122" r="6"/>
|
||||
<circle cx="354" cy="146" r="6"/>
|
||||
<circle cx="174" cy="242" r="6"/>
|
||||
<circle cx="338" cy="242" r="6"/>
|
||||
</g>
|
||||
|
||||
<path d="M194 166H318L294 226H218L194 166Z" fill="url(#funnelGradient)"/>
|
||||
<path d="M212 194H300L286 230H226L212 194Z" fill="#7B57F8" fill-opacity="0.9"/>
|
||||
<path d="M226 230H286L274 268H238L226 230Z" fill="#F1EAFF"/>
|
||||
<path d="M244 268H268V302H244V268Z" fill="#FFFFFF"/>
|
||||
<rect x="235" y="302" width="42" height="18" rx="9" fill="#CDBBFF"/>
|
||||
|
||||
<path d="M214 182H298" stroke="#FFFFFF" stroke-opacity="0.28" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M226 216H286" stroke="#FFFFFF" stroke-opacity="0.26" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M238 250H274" stroke="#7B57F8" stroke-opacity="0.4" stroke-width="4" stroke-linecap="round"/>
|
||||
|
||||
<g>
|
||||
<circle cx="256" cy="292" r="30" fill="url(#dealGradient)"/>
|
||||
<circle cx="256" cy="292" r="18" fill="#6A43EF"/>
|
||||
<path d="M248 292L254 298L266 286" stroke="#FFFFFF" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<g opacity="0.95">
|
||||
<path d="M256 322V340" stroke="#F5F0FF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M236 336L256 356L276 336" stroke="#F5F0FF" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="116" y="360" width="280" height="58" rx="29" fill="#FFFFFF" fill-opacity="0.12" stroke="#FFFFFF" stroke-opacity="0.16" stroke-width="2"/>
|
||||
<path d="M148 389C148 379.611 155.611 372 165 372H177C186.389 372 194 379.611 194 389C194 398.389 186.389 406 177 406H165C155.611 406 148 398.389 148 389Z" fill="#F0E9FF"/>
|
||||
<path d="M216 381C216 376.582 219.582 373 224 373H250" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M216 397C216 392.582 219.582 389 224 389H244" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M216 381V397" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M270 373V405" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M270 373H288C295.732 373 302 379.268 302 387C302 394.732 295.732 401 288 401H270" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M320 405V373L338 395L356 373V405" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
|
|
@ -1,22 +1,46 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="18" fill="url(#bg)"/>
|
||||
<rect x="4" y="4" width="56" height="56" rx="14" stroke="rgba(255,255,255,0.22)"/>
|
||||
<text
|
||||
x="32"
|
||||
y="38"
|
||||
text-anchor="middle"
|
||||
font-size="21"
|
||||
font-weight="700"
|
||||
font-family="Arial, PingFang SC, Microsoft YaHei, sans-serif"
|
||||
fill="white"
|
||||
letter-spacing="0.5"
|
||||
>
|
||||
CRM
|
||||
</text>
|
||||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Ziguang Huizhi CRM Icon Logo</title>
|
||||
<desc id="desc">Brand-oriented CRM logo icon with an abstract converging symbol, data nodes, and geometric structure in purple tones.</desc>
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="10" y1="8" x2="56" y2="56" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7C3AED"/>
|
||||
<stop offset="1" stop-color="#4F46E5"/>
|
||||
<linearGradient id="bg" x1="72" y1="60" x2="448" y2="460" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#744CF7"/>
|
||||
<stop offset="1" stop-color="#2E1685"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="mark" x1="170" y1="152" x2="342" y2="360" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#D4C4FF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="accent" x1="198" y1="184" x2="322" y2="322" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A98CFF"/>
|
||||
<stop offset="1" stop-color="#6C44F2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect x="40" y="40" width="432" height="432" rx="112" fill="url(#bg)"/>
|
||||
<path d="M130 256C130 185.307 185.307 130 256 130C326.693 130 382 185.307 382 256C382 326.693 326.693 382 256 382C185.307 382 130 326.693 130 256Z" stroke="#FFFFFF" stroke-opacity="0.1" stroke-width="12"/>
|
||||
|
||||
<path d="M256 150L344 202V310L256 362L168 310V202L256 150Z" fill="#FFFFFF" fill-opacity="0.08"/>
|
||||
<path d="M256 174L323 213V299L256 338L189 299V213L256 174Z" stroke="#FFFFFF" stroke-opacity="0.16" stroke-width="2"/>
|
||||
|
||||
<path d="M206 193L256 242L306 193" stroke="url(#mark)" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M206 319L256 270L306 319" stroke="url(#mark)" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M206 193V319" stroke="url(#mark)" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M306 193V319" stroke="url(#mark)" stroke-width="18" stroke-linecap="round"/>
|
||||
|
||||
<path d="M228 221L256 249L284 221" stroke="url(#accent)" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M228 291L256 263L284 291" stroke="url(#accent)" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
<circle cx="206" cy="193" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="306" cy="193" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="206" cy="319" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="306" cy="319" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="256" cy="242" r="14" fill="#FFFFFF"/>
|
||||
<circle cx="256" cy="270" r="14" fill="#FFFFFF"/>
|
||||
|
||||
<circle cx="206" cy="193" r="5" fill="#7A57F8"/>
|
||||
<circle cx="306" cy="193" r="5" fill="#7A57F8"/>
|
||||
<circle cx="206" cy="319" r="5" fill="#7A57F8"/>
|
||||
<circle cx="306" cy="319" r="5" fill="#7A57F8"/>
|
||||
<circle cx="256" cy="242" r="5" fill="#7A57F8"/>
|
||||
<circle cx="256" cy="270" r="5" fill="#7A57F8"/>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 684 B After Width: | Height: | Size: 2.7 KiB |
|
|
@ -21,6 +21,29 @@ type NavItem = {
|
|||
children?: NavChildItem[];
|
||||
};
|
||||
|
||||
function BrandLockup({ mobile = false }: { mobile?: boolean }) {
|
||||
return (
|
||||
<div className="flex min-w-0 items-center gap-2.5">
|
||||
<img
|
||||
src="/crm-favicon.svg"
|
||||
alt="紫光汇智CRM 图标"
|
||||
className={cn(
|
||||
"shrink-0 rounded-2xl shadow-sm ring-1 ring-violet-200/60",
|
||||
mobile ? "h-7 w-7 rounded-xl" : "h-9 w-9"
|
||||
)}
|
||||
/>
|
||||
<span
|
||||
className={cn(
|
||||
"truncate bg-gradient-to-r from-violet-600 to-indigo-600 bg-clip-text font-bold text-transparent",
|
||||
mobile ? "text-sm uppercase tracking-[0.12em]" : "text-lg"
|
||||
)}
|
||||
>
|
||||
汇智CRM
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const navItems: NavItem[] = [
|
||||
{ name: "首页", path: "/", icon: Home },
|
||||
{ name: "拓展", path: "/expansion", icon: Users },
|
||||
|
|
@ -123,9 +146,7 @@ export default function Layout() {
|
|||
{/* Desktop Sidebar */}
|
||||
<aside className="hidden w-64 flex-col border-r border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900 md:flex transition-colors duration-300">
|
||||
<div className="flex h-16 items-center justify-between border-b border-slate-200 dark:border-slate-800 px-6">
|
||||
<span className="text-lg font-bold bg-gradient-to-r from-violet-600 to-indigo-600 bg-clip-text text-transparent">
|
||||
紫光汇智CRM
|
||||
</span>
|
||||
<BrandLockup />
|
||||
<button
|
||||
onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
|
||||
className="rounded-full p-2 text-slate-500 hover:bg-slate-100 dark:text-slate-400 dark:hover:bg-slate-800 transition-colors"
|
||||
|
|
@ -166,9 +187,7 @@ export default function Layout() {
|
|||
: "bg-white/90 backdrop-blur-xl transition-colors duration-300 dark:bg-slate-950/90",
|
||||
)}>
|
||||
<div className="min-w-0 flex-1 pr-2">
|
||||
<p className="bg-gradient-to-r from-violet-600 to-indigo-600 bg-clip-text text-sm font-bold uppercase tracking-[0.14em] text-transparent">
|
||||
紫光汇智CRM
|
||||
</p>
|
||||
<BrandLockup mobile />
|
||||
</div>
|
||||
<div className="flex shrink-0 items-center gap-2.5">
|
||||
{shouldShowDailyReportReminder ? (
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ export default function LoginPage() {
|
|||
<div className="login-panel-intro">
|
||||
<div className="login-brand-lockup">
|
||||
<div className="login-brand-mark">
|
||||
{platformConfig?.logoUrl ? <img src={platformConfig.logoUrl} alt={appName} /> : <span>紫</span>}
|
||||
<img src="/crm-favicon.svg" alt={appName} />
|
||||
</div>
|
||||
<div>
|
||||
<p className="login-brand-kicker">智慧销售协同平台</p>
|
||||
|
|
|
|||
|
|
@ -151,9 +151,10 @@
|
|||
|
||||
.login-panel-eyebrow {
|
||||
color: #7c3aed !important;
|
||||
font-size: 0.8rem;
|
||||
font-size: clamp(1.4rem, 1.5vw, 1.75rem);
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.18em;
|
||||
line-height: 1.2;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
text-align: left;
|
||||
}
|
||||
|
|
@ -343,7 +344,7 @@
|
|||
}
|
||||
|
||||
.login-panel-header p {
|
||||
font-size: 0.92rem;
|
||||
font-size: 1.25rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import{d2 as c,bI as o}from"./index-CYM97J2V.js";const r=new o("antFadeIn",{"0%":{opacity:0},"100%":{opacity:1}}),s=new o("antFadeOut",{"0%":{opacity:1},"100%":{opacity:0}}),p=(t,a=!1)=>{const{antCls:e}=t,n=`${e}-fade`,i=a?"&":"";return[c(n,r,s,t.motionDurationMid,a),{[`
|
||||
import{d2 as c,bI as o}from"./index-Dv-rJwbZ.js";const r=new o("antFadeIn",{"0%":{opacity:0},"100%":{opacity:1}}),s=new o("antFadeOut",{"0%":{opacity:1},"100%":{opacity:0}}),p=(t,a=!1)=>{const{antCls:e}=t,n=`${e}-fade`,i=a?"&":"";return[c(n,r,s,t.motionDurationMid,a),{[`
|
||||
${i}${n}-enter,
|
||||
${i}${n}-appear
|
||||
`]:{opacity:0,animationTimingFunction:"linear"},[`${i}${n}-leave`]:{animationTimingFunction:"linear"}}]};export{p as i};
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import{r as n,ak as ee,av as re,aq as ae,C as N,am as M,at as te,ah as G,bg as H,ce as T,ax as ne,x as le,y as L,z as q,dx as oe,ay as W,aG as se,aL as ie,F as ce,aB as A,dy as de,bE as ue,aJ as be,ai as F}from"./index-CYM97J2V.js";var fe=["prefixCls","className","style","checked","disabled","defaultChecked","type","title","onChange"],pe=n.forwardRef(function(e,r){var a=e.prefixCls,t=a===void 0?"rc-checkbox":a,c=e.className,C=e.style,h=e.checked,p=e.disabled,_=e.defaultChecked,O=_===void 0?!1:_,d=e.type,w=d===void 0?"checkbox":d,I=e.title,i=e.onChange,R=ee(e,fe),g=n.useRef(null),u=n.useRef(null),o=re(O,{value:h}),P=ae(o,2),E=P[0],x=P[1];n.useImperativeHandle(r,function(){return{focus:function(s){var f;(f=g.current)===null||f===void 0||f.focus(s)},blur:function(){var s;(s=g.current)===null||s===void 0||s.blur()},input:g.current,nativeElement:u.current}});var b=N(t,c,M(M({},"".concat(t,"-checked"),E),"".concat(t,"-disabled"),p)),v=function(s){p||("checked"in e||x(s.target.checked),i==null||i({target:G(G({},e),{},{type:w,checked:s.target.checked}),stopPropagation:function(){s.stopPropagation()},preventDefault:function(){s.preventDefault()},nativeEvent:s.nativeEvent}))};return n.createElement("span",{className:b,title:I,style:C,ref:u},n.createElement("input",te({},R,{className:"".concat(t,"-input"),ref:g,onChange:v,disabled:p,checked:!!E,type:w})),n.createElement("span",{className:"".concat(t,"-inner")}))});function ve(e){const r=H.useRef(null),a=()=>{T.cancel(r.current),r.current=null};return[()=>{a(),r.current=T(()=>{r.current=null})},C=>{r.current&&(C.stopPropagation(),a()),e==null||e(C)}]}const me=e=>{const{checkboxCls:r}=e,a=`${r}-wrapper`;return[{[`${r}-group`]:Object.assign(Object.assign({},L(e)),{display:"inline-flex",flexWrap:"wrap",columnGap:e.marginXS,[`> ${e.antCls}-row`]:{flex:1}}),[a]:Object.assign(Object.assign({},L(e)),{display:"inline-flex",alignItems:"baseline",cursor:"pointer","&:after":{display:"inline-block",width:0,overflow:"hidden",content:"'\\a0'"},[`& + ${a}`]:{marginInlineStart:0},[`&${a}-in-form-item`]:{'input[type="checkbox"]':{width:14,height:14}}}),[r]:Object.assign(Object.assign({},L(e)),{position:"relative",whiteSpace:"nowrap",lineHeight:1,cursor:"pointer",borderRadius:e.borderRadiusSM,alignSelf:"center",[`${r}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0,margin:0,[`&:focus-visible + ${r}-inner`]:oe(e)},[`${r}-inner`]:{boxSizing:"border-box",display:"block",width:e.checkboxSize,height:e.checkboxSize,direction:"ltr",backgroundColor:e.colorBgContainer,border:`${q(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,borderCollapse:"separate",transition:`all ${e.motionDurationSlow}`,"&:after":{boxSizing:"border-box",position:"absolute",top:"50%",insetInlineStart:"25%",display:"table",width:e.calc(e.checkboxSize).div(14).mul(5).equal(),height:e.calc(e.checkboxSize).div(14).mul(8).equal(),border:`${q(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:"rotate(45deg) scale(0) translate(-50%,-50%)",opacity:0,content:'""',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`}},"& + span":{paddingInlineStart:e.paddingXS,paddingInlineEnd:e.paddingXS}})},{[`
|
||||
import{r as n,ak as ee,av as re,aq as ae,C as N,am as M,at as te,ah as G,bg as H,ce as T,ax as ne,x as le,y as L,z as q,dx as oe,ay as W,aG as se,aL as ie,F as ce,aB as A,dy as de,bE as ue,aJ as be,ai as F}from"./index-Dv-rJwbZ.js";var fe=["prefixCls","className","style","checked","disabled","defaultChecked","type","title","onChange"],pe=n.forwardRef(function(e,r){var a=e.prefixCls,t=a===void 0?"rc-checkbox":a,c=e.className,C=e.style,h=e.checked,p=e.disabled,_=e.defaultChecked,O=_===void 0?!1:_,d=e.type,w=d===void 0?"checkbox":d,I=e.title,i=e.onChange,R=ee(e,fe),g=n.useRef(null),u=n.useRef(null),o=re(O,{value:h}),P=ae(o,2),E=P[0],x=P[1];n.useImperativeHandle(r,function(){return{focus:function(s){var f;(f=g.current)===null||f===void 0||f.focus(s)},blur:function(){var s;(s=g.current)===null||s===void 0||s.blur()},input:g.current,nativeElement:u.current}});var b=N(t,c,M(M({},"".concat(t,"-checked"),E),"".concat(t,"-disabled"),p)),v=function(s){p||("checked"in e||x(s.target.checked),i==null||i({target:G(G({},e),{},{type:w,checked:s.target.checked}),stopPropagation:function(){s.stopPropagation()},preventDefault:function(){s.preventDefault()},nativeEvent:s.nativeEvent}))};return n.createElement("span",{className:b,title:I,style:C,ref:u},n.createElement("input",te({},R,{className:"".concat(t,"-input"),ref:g,onChange:v,disabled:p,checked:!!E,type:w})),n.createElement("span",{className:"".concat(t,"-inner")}))});function ve(e){const r=H.useRef(null),a=()=>{T.cancel(r.current),r.current=null};return[()=>{a(),r.current=T(()=>{r.current=null})},C=>{r.current&&(C.stopPropagation(),a()),e==null||e(C)}]}const me=e=>{const{checkboxCls:r}=e,a=`${r}-wrapper`;return[{[`${r}-group`]:Object.assign(Object.assign({},L(e)),{display:"inline-flex",flexWrap:"wrap",columnGap:e.marginXS,[`> ${e.antCls}-row`]:{flex:1}}),[a]:Object.assign(Object.assign({},L(e)),{display:"inline-flex",alignItems:"baseline",cursor:"pointer","&:after":{display:"inline-block",width:0,overflow:"hidden",content:"'\\a0'"},[`& + ${a}`]:{marginInlineStart:0},[`&${a}-in-form-item`]:{'input[type="checkbox"]':{width:14,height:14}}}),[r]:Object.assign(Object.assign({},L(e)),{position:"relative",whiteSpace:"nowrap",lineHeight:1,cursor:"pointer",borderRadius:e.borderRadiusSM,alignSelf:"center",[`${r}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0,margin:0,[`&:focus-visible + ${r}-inner`]:oe(e)},[`${r}-inner`]:{boxSizing:"border-box",display:"block",width:e.checkboxSize,height:e.checkboxSize,direction:"ltr",backgroundColor:e.colorBgContainer,border:`${q(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,borderCollapse:"separate",transition:`all ${e.motionDurationSlow}`,"&:after":{boxSizing:"border-box",position:"absolute",top:"50%",insetInlineStart:"25%",display:"table",width:e.calc(e.checkboxSize).div(14).mul(5).equal(),height:e.calc(e.checkboxSize).div(14).mul(8).equal(),border:`${q(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:"rotate(45deg) scale(0) translate(-50%,-50%)",opacity:0,content:'""',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`}},"& + span":{paddingInlineStart:e.paddingXS,paddingInlineEnd:e.paddingXS}})},{[`
|
||||
${a}:not(${a}-disabled),
|
||||
${r}:not(${r}-disabled)
|
||||
`]:{[`&:hover ${r}-inner`]:{borderColor:e.colorPrimary}},[`${a}:not(${a}-disabled)`]:{[`&:hover ${r}-checked:not(${r}-disabled) ${r}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"},[`&:hover ${r}-checked:not(${r}-disabled):after`]:{borderColor:e.colorPrimaryHover}}},{[`${r}-checked`]:{[`${r}-inner`]:{backgroundColor:e.colorPrimary,borderColor:e.colorPrimary,"&:after":{opacity:1,transform:"rotate(45deg) scale(1) translate(-50%,-50%)",transition:`all ${e.motionDurationMid} ${e.motionEaseOutBack} ${e.motionDurationFast}`}}},[`
|
||||
|
|
@ -1 +1 @@
|
|||
import{x as F,r as s,H as $,ay as w,b$ as q,c0 as D,d7 as E,B as J,cQ as M,d8 as Q,C as S,A as U,av as Y,d9 as G,aJ as K}from"./index-CYM97J2V.js";import{A as Z}from"./useDict-BjF_A4fe.js";const ee=e=>{const{componentCls:n,iconCls:l,antCls:t,zIndexPopup:o,colorText:f,colorWarning:u,marginXXS:c,marginXS:i,fontSize:g,fontWeightStrong:v,colorTextHeading:y}=e;return{[n]:{zIndex:o,[`&${t}-popover`]:{fontSize:g},[`${n}-message`]:{marginBottom:i,display:"flex",flexWrap:"nowrap",alignItems:"start",[`> ${n}-message-icon ${l}`]:{color:u,fontSize:g,lineHeight:1,marginInlineEnd:i},[`${n}-title`]:{fontWeight:v,color:y,"&:only-child":{fontWeight:"normal"}},[`${n}-description`]:{marginTop:c,color:f}},[`${n}-buttons`]:{textAlign:"end",whiteSpace:"nowrap",button:{marginInlineStart:i}}}}},te=e=>{const{zIndexPopupBase:n}=e;return{zIndexPopup:n+60}},I=F("Popconfirm",e=>ee(e),te,{resetStyle:!1});var ne=function(e,n){var l={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(l[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(l[t[o]]=e[t[o]]);return l};const k=e=>{const{prefixCls:n,okButtonProps:l,cancelButtonProps:t,title:o,description:f,cancelText:u,okText:c,okType:i="primary",icon:g=s.createElement($,null),showCancel:v=!0,close:y,onConfirm:C,onCancel:O,onPopupClick:m}=e,{getPrefixCls:p}=s.useContext(w),[d]=q("Popconfirm",D.Popconfirm),b=E(o),x=E(f);return s.createElement("div",{className:`${n}-inner-content`,onClick:m},s.createElement("div",{className:`${n}-message`},g&&s.createElement("span",{className:`${n}-message-icon`},g),s.createElement("div",{className:`${n}-message-text`},b&&s.createElement("div",{className:`${n}-title`},b),x&&s.createElement("div",{className:`${n}-description`},x))),s.createElement("div",{className:`${n}-buttons`},v&&s.createElement(J,Object.assign({onClick:O,size:"small"},t),u||(d==null?void 0:d.cancelText)),s.createElement(Z,{buttonProps:Object.assign(Object.assign({size:"small"},M(i)),l),actionFn:C,close:y,prefixCls:p("btn"),quitOnNullishReturnValue:!0,emitEvent:!0},c||(d==null?void 0:d.okText))))},oe=e=>{const{prefixCls:n,placement:l,className:t,style:o}=e,f=ne(e,["prefixCls","placement","className","style"]),{getPrefixCls:u}=s.useContext(w),c=u("popconfirm",n),[i]=I(c);return i(s.createElement(Q,{placement:l,className:S(c,t),style:o,content:s.createElement(k,Object.assign({prefixCls:c},f))}))};var se=function(e,n){var l={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(l[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(l[t[o]]=e[t[o]]);return l};const le=s.forwardRef((e,n)=>{var l,t;const{prefixCls:o,placement:f="top",trigger:u="click",okType:c="primary",icon:i=s.createElement($,null),children:g,overlayClassName:v,onOpenChange:y,onVisibleChange:C,overlayStyle:O,styles:m,classNames:p}=e,d=se(e,["prefixCls","placement","trigger","okType","icon","children","overlayClassName","onOpenChange","onVisibleChange","overlayStyle","styles","classNames"]),{getPrefixCls:b,className:x,style:T,classNames:j,styles:h}=U("popconfirm"),[_,z]=Y(!1,{value:(l=e.open)!==null&&l!==void 0?l:e.visible,defaultValue:(t=e.defaultOpen)!==null&&t!==void 0?t:e.defaultVisible}),P=(a,r)=>{z(a,!0),C==null||C(a),y==null||y(a,r)},B=a=>{P(!1,a)},V=a=>{var r;return(r=e.onConfirm)===null||r===void 0?void 0:r.call(void 0,a)},W=a=>{var r;P(!1,a),(r=e.onCancel)===null||r===void 0||r.call(void 0,a)},A=(a,r)=>{const{disabled:X=!1}=e;X||P(a,r)},N=b("popconfirm",o),H=S(N,x,v,j.root,p==null?void 0:p.root),R=S(j.body,p==null?void 0:p.body),[L]=I(N);return L(s.createElement(G,Object.assign({},K(d,["title"]),{trigger:u,placement:f,onOpenChange:A,open:_,ref:n,classNames:{root:H,body:R},styles:{root:Object.assign(Object.assign(Object.assign(Object.assign({},h.root),T),O),m==null?void 0:m.root),body:Object.assign(Object.assign({},h.body),m==null?void 0:m.body)},content:s.createElement(k,Object.assign({okType:c,icon:i},e,{prefixCls:N,close:B,onConfirm:V,onCancel:W})),"data-popover-inject":!0}),g))}),ae=le;ae._InternalPanelDoNotUseOrYouWillBeFired=oe;export{ae as P};
|
||||
import{x as F,r as s,H as $,ay as w,b$ as q,c0 as D,d7 as E,B as J,cQ as M,d8 as Q,C as S,A as U,av as Y,d9 as G,aJ as K}from"./index-Dv-rJwbZ.js";import{A as Z}from"./useDict-ClxJHHDi.js";const ee=e=>{const{componentCls:n,iconCls:l,antCls:t,zIndexPopup:o,colorText:f,colorWarning:u,marginXXS:c,marginXS:i,fontSize:g,fontWeightStrong:v,colorTextHeading:y}=e;return{[n]:{zIndex:o,[`&${t}-popover`]:{fontSize:g},[`${n}-message`]:{marginBottom:i,display:"flex",flexWrap:"nowrap",alignItems:"start",[`> ${n}-message-icon ${l}`]:{color:u,fontSize:g,lineHeight:1,marginInlineEnd:i},[`${n}-title`]:{fontWeight:v,color:y,"&:only-child":{fontWeight:"normal"}},[`${n}-description`]:{marginTop:c,color:f}},[`${n}-buttons`]:{textAlign:"end",whiteSpace:"nowrap",button:{marginInlineStart:i}}}}},te=e=>{const{zIndexPopupBase:n}=e;return{zIndexPopup:n+60}},I=F("Popconfirm",e=>ee(e),te,{resetStyle:!1});var ne=function(e,n){var l={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(l[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(l[t[o]]=e[t[o]]);return l};const k=e=>{const{prefixCls:n,okButtonProps:l,cancelButtonProps:t,title:o,description:f,cancelText:u,okText:c,okType:i="primary",icon:g=s.createElement($,null),showCancel:v=!0,close:y,onConfirm:C,onCancel:O,onPopupClick:m}=e,{getPrefixCls:p}=s.useContext(w),[d]=q("Popconfirm",D.Popconfirm),b=E(o),x=E(f);return s.createElement("div",{className:`${n}-inner-content`,onClick:m},s.createElement("div",{className:`${n}-message`},g&&s.createElement("span",{className:`${n}-message-icon`},g),s.createElement("div",{className:`${n}-message-text`},b&&s.createElement("div",{className:`${n}-title`},b),x&&s.createElement("div",{className:`${n}-description`},x))),s.createElement("div",{className:`${n}-buttons`},v&&s.createElement(J,Object.assign({onClick:O,size:"small"},t),u||(d==null?void 0:d.cancelText)),s.createElement(Z,{buttonProps:Object.assign(Object.assign({size:"small"},M(i)),l),actionFn:C,close:y,prefixCls:p("btn"),quitOnNullishReturnValue:!0,emitEvent:!0},c||(d==null?void 0:d.okText))))},oe=e=>{const{prefixCls:n,placement:l,className:t,style:o}=e,f=ne(e,["prefixCls","placement","className","style"]),{getPrefixCls:u}=s.useContext(w),c=u("popconfirm",n),[i]=I(c);return i(s.createElement(Q,{placement:l,className:S(c,t),style:o,content:s.createElement(k,Object.assign({prefixCls:c},f))}))};var se=function(e,n){var l={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(l[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(l[t[o]]=e[t[o]]);return l};const le=s.forwardRef((e,n)=>{var l,t;const{prefixCls:o,placement:f="top",trigger:u="click",okType:c="primary",icon:i=s.createElement($,null),children:g,overlayClassName:v,onOpenChange:y,onVisibleChange:C,overlayStyle:O,styles:m,classNames:p}=e,d=se(e,["prefixCls","placement","trigger","okType","icon","children","overlayClassName","onOpenChange","onVisibleChange","overlayStyle","styles","classNames"]),{getPrefixCls:b,className:x,style:T,classNames:j,styles:h}=U("popconfirm"),[_,z]=Y(!1,{value:(l=e.open)!==null&&l!==void 0?l:e.visible,defaultValue:(t=e.defaultOpen)!==null&&t!==void 0?t:e.defaultVisible}),P=(a,r)=>{z(a,!0),C==null||C(a),y==null||y(a,r)},B=a=>{P(!1,a)},V=a=>{var r;return(r=e.onConfirm)===null||r===void 0?void 0:r.call(void 0,a)},W=a=>{var r;P(!1,a),(r=e.onCancel)===null||r===void 0||r.call(void 0,a)},A=(a,r)=>{const{disabled:X=!1}=e;X||P(a,r)},N=b("popconfirm",o),H=S(N,x,v,j.root,p==null?void 0:p.root),R=S(j.body,p==null?void 0:p.body),[L]=I(N);return L(s.createElement(G,Object.assign({},K(d,["title"]),{trigger:u,placement:f,onOpenChange:A,open:_,ref:n,classNames:{root:H,body:R},styles:{root:Object.assign(Object.assign(Object.assign(Object.assign({},h.root),T),O),m==null?void 0:m.root),body:Object.assign(Object.assign({},h.body),m==null?void 0:m.body)},content:s.createElement(k,Object.assign({okType:c,icon:i},e,{prefixCls:N,close:B,onConfirm:V,onCancel:W})),"data-popover-inject":!0}),g))}),ae=le;ae._InternalPanelDoNotUseOrYouWillBeFired=oe;export{ae as P};
|
||||
|
|
@ -1 +1 @@
|
|||
import{u as W,r as t,j as e,B as M,W as Y,a3 as $,Y as c,R as v,T as F,a5 as K,b3 as P,aU as D,aT as G,aW as H,s as w,a_ as q}from"./index-CYM97J2V.js";import{P as A}from"./index-B7x062Ky.js";import{R as b,C as d}from"./row-DNGQ3hV2.js";import{C as N}from"./index-Bcf8yIZZ.js";import{I as J}from"./index-DV4zjsPW.js";import{F as O}from"./Table-CAs2vM8c.js";import{T as u}from"./index-DqftVe8j.js";import{C as S}from"./index-M0Ae7f04.js";import"./useForm-B5uILH8t.js";import"./Pagination-By0LqcoC.js";const{Text:U}=F;function oe(){const{t:a}=W(),[o,C]=t.useState([]),[h,I]=t.useState([]),[T,m]=t.useState(!1),[p,x]=t.useState(!1),[f,g]=t.useState(!1),[l,y]=t.useState(null),[j,i]=t.useState([]),[n,_]=t.useState(""),R=t.useMemo(()=>o.find(s=>s.userId===l)||null,[o,l]),k=async()=>{m(!0);try{const s=await D();C(s||[])}finally{m(!1)}},z=async()=>{x(!0);try{const s=await G();I(s||[])}finally{x(!1)}},E=async s=>{try{const r=await H(s);i(r||[])}catch{i([])}};t.useEffect(()=>{k(),z()},[]),t.useEffect(()=>{l?E(l):i([])},[l]);const L=t.useMemo(()=>{if(!n)return o;const s=n.toLowerCase();return o.filter(r=>r.username.toLowerCase().includes(s)||r.displayName.toLowerCase().includes(s))},[o,n]),B=async()=>{if(!l){w.warning(a("userRole.selectUser"));return}g(!0);try{await q(l,j),w.success(a("common.success"))}finally{g(!1)}};return e.jsxs("div",{className:"app-page",children:[e.jsx(A,{title:a("userRole.title"),subtitle:a("userRole.subtitle")}),e.jsx("div",{className:"app-page__page-actions",children:e.jsx(M,{type:"primary",icon:e.jsx(Y,{"aria-hidden":"true"}),onClick:B,loading:f,disabled:!l,children:a(f?"common.loading":"common.save")})}),e.jsxs(b,{gutter:24,className:"app-page__split",style:{height:"calc(100vh - 180px)"},children:[e.jsx(d,{xs:24,lg:12,style:{height:"100%"},children:e.jsxs(N,{title:e.jsxs(c,{children:[e.jsx(v,{"aria-hidden":"true"}),e.jsx("span",{children:a("userRole.userList")})]}),className:"app-page__panel-card full-height-card",children:[e.jsx("div",{className:"mb-4",children:e.jsx(J,{placeholder:a("userRole.searchUser"),prefix:e.jsx($,{"aria-hidden":"true",className:"text-gray-400"}),value:n,onChange:s=>_(s.target.value),allowClear:!0,"aria-label":a("userRole.searchUser")})}),e.jsx("div",{style:{height:"calc(100% - 60px)",overflowY:"auto"},children:e.jsx(O,{rowKey:"userId",size:"middle",loading:T,dataSource:L,rowSelection:{type:"radio",selectedRowKeys:l?[l]:[],onChange:s=>y(s[0])},onRow:s=>({onClick:()=>y(s.userId),className:"cursor-pointer"}),pagination:{pageSize:10,showTotal:s=>a("common.total",{total:s})},columns:[{title:a("users.userInfo"),key:"user",render:(s,r)=>e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{style:{fontWeight:500},className:"truncate",children:r.displayName}),e.jsxs("div",{style:{fontSize:12,color:"#8c8c8c"},className:"truncate",children:["@",r.username]})]})},{title:a("common.status"),dataIndex:"status",width:80,render:s=>s===1?e.jsx(u,{color:"green",className:"m-0",children:"Enabled"}):e.jsx(u,{className:"m-0",children:"Disabled"})}]})})]})}),e.jsx(d,{xs:24,lg:12,style:{height:"100%"},children:e.jsx(N,{title:e.jsxs(c,{children:[e.jsx(P,{"aria-hidden":"true"}),e.jsx("span",{children:a("userRole.grantRoles")})]}),className:"app-page__panel-card full-height-card",extra:R?e.jsxs(u,{color:"blue",children:[a("userRole.editing"),": ",R.displayName]}):null,children:l?e.jsxs("div",{style:{padding:"8px 0",height:"100%",overflowY:"auto"},children:[e.jsx(S.Group,{style:{width:"100%"},value:j,onChange:s=>i(s),disabled:p,children:e.jsx(b,{gutter:[16,16],children:h.map(s=>e.jsx(d,{span:12,children:e.jsx(S,{value:s.roleId,className:"w-full",children:e.jsxs(c,{direction:"vertical",size:0,children:[e.jsx("span",{style:{fontWeight:500},children:s.roleName}),e.jsx(U,{type:"secondary",style:{fontSize:12},className:"tabular-nums",children:s.roleCode})]})})},s.roleId))})}),!h.length&&!p&&e.jsx(K,{description:"No roles available"})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 bg-gray-50 rounded-lg border border-dashed border-gray-200",children:[e.jsx(v,{style:{fontSize:40,color:"#bfbfbf",marginBottom:16},"aria-hidden":"true"}),e.jsx(U,{type:"secondary",children:a("userRole.selectUser")})]})})})]})]})}export{oe as default};
|
||||
import{u as W,r as t,j as e,B as M,W as Y,a3 as $,Y as c,R as v,T as F,a5 as K,b3 as P,aU as D,aT as G,aW as H,s as w,a_ as q}from"./index-Dv-rJwbZ.js";import{P as A}from"./index-D4i8Uis-.js";import{R as b,C as d}from"./row-NVxLItiq.js";import{C as N}from"./index-EoMRal4G.js";import{I as J}from"./index-DFGcC-dW.js";import{F as O}from"./Table-BD43FaLh.js";import{T as u}from"./index-BymHESMU.js";import{C as S}from"./index-58fJYkx8.js";import"./useForm-43P2UNGc.js";import"./Pagination-xbf267Yj.js";const{Text:U}=F;function oe(){const{t:a}=W(),[o,C]=t.useState([]),[h,I]=t.useState([]),[T,m]=t.useState(!1),[p,x]=t.useState(!1),[f,g]=t.useState(!1),[l,y]=t.useState(null),[j,i]=t.useState([]),[n,_]=t.useState(""),R=t.useMemo(()=>o.find(s=>s.userId===l)||null,[o,l]),k=async()=>{m(!0);try{const s=await D();C(s||[])}finally{m(!1)}},z=async()=>{x(!0);try{const s=await G();I(s||[])}finally{x(!1)}},E=async s=>{try{const r=await H(s);i(r||[])}catch{i([])}};t.useEffect(()=>{k(),z()},[]),t.useEffect(()=>{l?E(l):i([])},[l]);const L=t.useMemo(()=>{if(!n)return o;const s=n.toLowerCase();return o.filter(r=>r.username.toLowerCase().includes(s)||r.displayName.toLowerCase().includes(s))},[o,n]),B=async()=>{if(!l){w.warning(a("userRole.selectUser"));return}g(!0);try{await q(l,j),w.success(a("common.success"))}finally{g(!1)}};return e.jsxs("div",{className:"app-page",children:[e.jsx(A,{title:a("userRole.title"),subtitle:a("userRole.subtitle")}),e.jsx("div",{className:"app-page__page-actions",children:e.jsx(M,{type:"primary",icon:e.jsx(Y,{"aria-hidden":"true"}),onClick:B,loading:f,disabled:!l,children:a(f?"common.loading":"common.save")})}),e.jsxs(b,{gutter:24,className:"app-page__split",style:{height:"calc(100vh - 180px)"},children:[e.jsx(d,{xs:24,lg:12,style:{height:"100%"},children:e.jsxs(N,{title:e.jsxs(c,{children:[e.jsx(v,{"aria-hidden":"true"}),e.jsx("span",{children:a("userRole.userList")})]}),className:"app-page__panel-card full-height-card",children:[e.jsx("div",{className:"mb-4",children:e.jsx(J,{placeholder:a("userRole.searchUser"),prefix:e.jsx($,{"aria-hidden":"true",className:"text-gray-400"}),value:n,onChange:s=>_(s.target.value),allowClear:!0,"aria-label":a("userRole.searchUser")})}),e.jsx("div",{style:{height:"calc(100% - 60px)",overflowY:"auto"},children:e.jsx(O,{rowKey:"userId",size:"middle",loading:T,dataSource:L,rowSelection:{type:"radio",selectedRowKeys:l?[l]:[],onChange:s=>y(s[0])},onRow:s=>({onClick:()=>y(s.userId),className:"cursor-pointer"}),pagination:{pageSize:10,showTotal:s=>a("common.total",{total:s})},columns:[{title:a("users.userInfo"),key:"user",render:(s,r)=>e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{style:{fontWeight:500},className:"truncate",children:r.displayName}),e.jsxs("div",{style:{fontSize:12,color:"#8c8c8c"},className:"truncate",children:["@",r.username]})]})},{title:a("common.status"),dataIndex:"status",width:80,render:s=>s===1?e.jsx(u,{color:"green",className:"m-0",children:"Enabled"}):e.jsx(u,{className:"m-0",children:"Disabled"})}]})})]})}),e.jsx(d,{xs:24,lg:12,style:{height:"100%"},children:e.jsx(N,{title:e.jsxs(c,{children:[e.jsx(P,{"aria-hidden":"true"}),e.jsx("span",{children:a("userRole.grantRoles")})]}),className:"app-page__panel-card full-height-card",extra:R?e.jsxs(u,{color:"blue",children:[a("userRole.editing"),": ",R.displayName]}):null,children:l?e.jsxs("div",{style:{padding:"8px 0",height:"100%",overflowY:"auto"},children:[e.jsx(S.Group,{style:{width:"100%"},value:j,onChange:s=>i(s),disabled:p,children:e.jsx(b,{gutter:[16,16],children:h.map(s=>e.jsx(d,{span:12,children:e.jsx(S,{value:s.roleId,className:"w-full",children:e.jsxs(c,{direction:"vertical",size:0,children:[e.jsx("span",{style:{fontWeight:500},children:s.roleName}),e.jsx(U,{type:"secondary",style:{fontSize:12},className:"tabular-nums",children:s.roleCode})]})})},s.roleId))})}),!h.length&&!p&&e.jsx(K,{description:"No roles available"})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 bg-gray-50 rounded-lg border border-dashed border-gray-200",children:[e.jsx(v,{style:{fontSize:40,color:"#bfbfbf",marginBottom:16},"aria-hidden":"true"}),e.jsx(U,{type:"secondary",children:a("userRole.selectUser")})]})})})]})]})}export{oe as default};
|
||||
|
|
@ -0,0 +1 @@
|
|||
import{u as I,r,f as v,s as x,j as e,T as S,R as k,a as C,b as T,B as j,c as P,g as R,d as B,l as E,e as U}from"./index-Dv-rJwbZ.js";import{F as l}from"./index-DmVlNV9v.js";import{I as m}from"./index-DFGcC-dW.js";import{C as z}from"./index-58fJYkx8.js";import"./useForm-43P2UNGc.js";import"./row-NVxLItiq.js";const{Text:L}=S;function V(){const{t:a}=I(),[i,f]=r.useState(null),[o,g]=r.useState(!0),[u,h]=r.useState(!1),[s,b]=r.useState(null),[y]=l.useForm(),c=r.useCallback(async()=>{if(!o)return;const t=await v();f(t)},[o]);r.useEffect(()=>{(async()=>{try{const[n,d]=await Promise.all([R("security.captcha.enabled","true"),B()]);b(d);const p=n!=="false";g(p),p&&await c()}catch{g(!0),await c()}})()},[c]),r.useEffect(()=>{new URLSearchParams(window.location.search).get("timeout")==="1"&&(x.warning(a("login.loginTimeout")),window.history.replaceState({},document.title,window.location.pathname))},[a]);const N=async t=>{h(!0);try{const n=await E({username:t.username,password:t.password,tenantCode:t.tenantCode,captchaId:o?i==null?void 0:i.captchaId:void 0,captchaCode:o?t.captchaCode:void 0});if(localStorage.setItem("accessToken",n.accessToken),localStorage.setItem("refreshToken",n.refreshToken),localStorage.setItem("username",t.username),n.availableTenants){localStorage.setItem("availableTenants",JSON.stringify(n.availableTenants));const d=JSON.parse(atob(n.accessToken.split(".")[1]));localStorage.setItem("activeTenantId",String(d.tenantId))}try{const d=await U();sessionStorage.setItem("userProfile",JSON.stringify(d))}catch{sessionStorage.removeItem("userProfile")}x.success(a("common.success")),window.location.href="/"}catch{o&&await c()}finally{h(!1)}},w=s!=null&&s.loginBgUrl?{backgroundImage:`url(${s.loginBgUrl})`,backgroundSize:"cover",backgroundPosition:"center",position:"relative"}:{};return e.jsxs("div",{className:"login-page",style:w,children:[e.jsx("div",{className:"login-page-backdrop"}),e.jsx("div",{className:"login-page-grid",children:e.jsx("section",{className:"login-panel",children:e.jsx("div",{className:"login-panel-card",children:e.jsxs("div",{className:"login-panel-layout",children:[e.jsx("div",{className:"login-left",children:e.jsxs("div",{className:"login-brand",children:[e.jsx("div",{className:"brand-logo-wrap",children:e.jsx("img",{src:(s==null?void 0:s.logoUrl)||"/logo.svg",alt:"Logo",className:"brand-logo-img"})}),e.jsxs("div",{className:"brand-copy",children:[e.jsx("p",{className:"brand-kicker",children:"智慧销售协同平台"}),e.jsx("span",{className:"brand-name",children:(s==null?void 0:s.projectName)||"UnisBase"})]})]})}),e.jsx("div",{className:"login-right",children:e.jsxs("div",{className:"login-container",children:[e.jsxs("div",{className:"login-header",children:[e.jsx("p",{className:"login-panel-eyebrow",children:a("login.welcome")}),e.jsx(L,{type:"secondary",children:a("login.subtitle")})]}),e.jsxs(l,{form:y,layout:"vertical",onFinish:N,className:"login-form",requiredMark:!1,autoComplete:"off",children:[e.jsx(l.Item,{name:"username",rules:[{required:!0,message:a("login.username")}],children:e.jsx(m,{size:"large",prefix:e.jsx(k,{className:"text-gray-400","aria-hidden":"true"}),placeholder:a("login.username"),autoComplete:"username",spellCheck:!1,"aria-label":a("login.username")})}),e.jsx(l.Item,{name:"password",rules:[{required:!0,message:a("login.password")}],children:e.jsx(m.Password,{size:"large",prefix:e.jsx(C,{className:"text-gray-400","aria-hidden":"true"}),placeholder:a("login.password"),autoComplete:"current-password","aria-label":a("login.password")})}),o?e.jsx(l.Item,{name:"captchaCode",rules:[{required:!0,message:a("login.captcha")}],children:e.jsxs("div",{className:"captcha-wrapper",children:[e.jsx(m,{size:"large",prefix:e.jsx(T,{className:"text-gray-400","aria-hidden":"true"}),placeholder:a("login.captcha"),maxLength:6,"aria-label":a("login.captcha")}),e.jsx(j,{className:"captcha-image-btn",onClick:()=>void c(),icon:i?null:e.jsx(P,{spin:!0}),"aria-label":"刷新验证码",children:i?e.jsx("img",{src:i.imageBase64,alt:"验证码"}):null})]})}):null,e.jsx("div",{className:"login-extra",children:e.jsx(l.Item,{name:"remember",valuePropName:"checked",noStyle:!0,children:e.jsx(z,{children:a("login.rememberMe")})})}),e.jsx(l.Item,{children:e.jsx(j,{type:"primary",htmlType:"submit",loading:u,block:!0,size:"large",className:"login-submit-btn",children:a(u?"login.loggingIn":"login.submit")})})]})]})})]})})})})]})}export{V as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{j as e,m as N,n as I,u as R,T as $,o as c,p as k,B as l,q as w,t as T,v as C,w as M,R as S,S as _}from"./index-CYM97J2V.js";import{P as D}from"./index-B7x062Ky.js";import{T as o}from"./index-DqftVe8j.js";import{R as h,C as r}from"./row-DNGQ3hV2.js";import{C as p}from"./index-Bcf8yIZZ.js";import{F as E}from"./Table-CAs2vM8c.js";import"./useForm-B5uILH8t.js";import"./index-M0Ae7f04.js";import"./Pagination-By0LqcoC.js";function d({title:a,value:n,icon:i,color:s="blue",trend:t,suffix:u="",layout:f="column",gridColumn:m,className:b="",onClick:g,style:y={}}){const x={blue:"#1677ff",green:"#52c41a",orange:"#faad14",red:"#ff4d4f",purple:"#722ed1",gray:"#8c8c8c"}[s]||s,v={...m?{gridColumn:m}:{},...y};return e.jsxs("div",{className:`stat-card stat-card-${f} ${b}`,style:v,onClick:g,children:[e.jsxs("div",{className:"stat-card-header",children:[e.jsx("span",{className:"stat-card-title",children:a}),i&&e.jsx("span",{className:"stat-card-icon",style:{color:x},"aria-hidden":"true",children:i})]}),e.jsxs("div",{className:"stat-card-body",children:[e.jsxs("div",{className:"stat-card-value tabular-nums",style:{color:x},children:[n,u&&e.jsx("span",{className:"stat-card-suffix",children:u})]}),t&&e.jsxs("div",{className:`stat-card-trend ${t.direction==="up"?"trend-up":"trend-down"} tabular-nums`,"aria-label":`${t.direction==="up"?"Increase":"Decrease"} of ${t.value}%`,children:[t.direction==="up"?e.jsx(N,{"aria-hidden":"true"}):e.jsx(I,{"aria-hidden":"true"}),e.jsxs("span",{children:[Math.abs(t.value),"%"]})]})]})]})}const{Text:j}=$;function J(){const{t:a}=R(),n=[{key:"1",name:"Product Sync",time:"2024-02-10 14:00",duration:"45min",status:"processing"},{key:"2",name:"Tech Review",time:"2024-02-10 10:00",duration:"60min",status:"success"},{key:"3",name:"Daily Standup",time:"2024-02-10 09:00",duration:"15min",status:"success"},{key:"4",name:"Client Call",time:"2024-02-10 16:30",duration:"30min",status:"default"}],i=[{title:a("dashboard.meetingName"),dataIndex:"name",key:"name",render:s=>e.jsx(j,{strong:!0,children:s})},{title:a("dashboard.startTime"),dataIndex:"time",key:"time",className:"tabular-nums",render:s=>e.jsx(j,{type:"secondary",children:s})},{title:a("dashboard.duration"),dataIndex:"duration",key:"duration",width:100,className:"tabular-nums"},{title:a("common.status"),dataIndex:"status",key:"status",width:120,render:s=>s==="processing"?e.jsx(o,{icon:e.jsx(c,{spin:!0,"aria-hidden":"true"}),color:"processing",children:a("dashboardExt.processing")}):s==="success"?e.jsx(o,{icon:e.jsx(k,{"aria-hidden":"true"}),color:"success",children:a("dashboardExt.completed")}):e.jsx(o,{color:"default",children:a("dashboardExt.pending")})},{title:a("common.action"),key:"action",width:80,render:()=>e.jsx(l,{type:"link",size:"small",icon:e.jsx(w,{"aria-hidden":"true"}),"aria-label":a("dashboard.viewAll")})}];return e.jsxs("div",{className:"app-page dashboard-page",children:[e.jsx(D,{title:a("dashboard.title"),subtitle:a("dashboard.subtitle")}),e.jsx("div",{className:"app-page__page-actions",children:e.jsx(l,{icon:e.jsx(c,{"aria-hidden":"true"}),size:"small",children:a("common.refresh")})}),e.jsxs(h,{gutter:[24,24],children:[e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.todayMeetings"),value:12,icon:e.jsx(T,{"aria-hidden":"true"}),color:"blue",trend:{value:8,direction:"up"}})}),e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.activeDevices"),value:45,icon:e.jsx(C,{"aria-hidden":"true"}),color:"green",trend:{value:2,direction:"up"}})}),e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.transcriptionDuration"),value:1280,suffix:"min",icon:e.jsx(M,{"aria-hidden":"true"}),color:"orange",trend:{value:5,direction:"down"}})}),e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.totalUsers"),value:320,icon:e.jsx(S,{"aria-hidden":"true"}),color:"purple",trend:{value:12,direction:"up"}})})]}),e.jsxs(h,{gutter:[24,24],className:"mt-6",children:[e.jsx(r,{xs:24,xl:16,children:e.jsx(p,{title:a("dashboard.recentMeetings"),bordered:!1,className:"app-page__content-card",extra:e.jsx(l,{type:"link",size:"small",children:a("dashboard.viewAll")}),styles:{body:{padding:0}},children:e.jsx(E,{dataSource:n,columns:i,pagination:!1,size:"middle",className:"roles-table"})})}),e.jsx(r,{xs:24,xl:8,children:e.jsx(p,{title:a("dashboard.deviceLoad"),bordered:!1,className:"app-page__content-card",children:e.jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[e.jsx(_,{active:!0,paragraph:{rows:4}}),e.jsxs("div",{className:"mt-4 text-gray-400 flex items-center gap-2",children:[e.jsx(c,{spin:!0,"aria-hidden":"true"}),e.jsx("span",{children:a("dashboardExt.chartLoading")})]})]})})})]})]})}export{J as default};
|
||||
import{j as e,m as N,n as I,u as R,T as $,o as c,p as k,B as l,q as w,t as T,v as C,w as M,R as S,S as _}from"./index-Dv-rJwbZ.js";import{P as D}from"./index-D4i8Uis-.js";import{T as o}from"./index-BymHESMU.js";import{R as h,C as r}from"./row-NVxLItiq.js";import{C as p}from"./index-EoMRal4G.js";import{F as E}from"./Table-BD43FaLh.js";import"./useForm-43P2UNGc.js";import"./index-58fJYkx8.js";import"./Pagination-xbf267Yj.js";function d({title:a,value:n,icon:i,color:s="blue",trend:t,suffix:u="",layout:f="column",gridColumn:m,className:b="",onClick:g,style:y={}}){const x={blue:"#1677ff",green:"#52c41a",orange:"#faad14",red:"#ff4d4f",purple:"#722ed1",gray:"#8c8c8c"}[s]||s,v={...m?{gridColumn:m}:{},...y};return e.jsxs("div",{className:`stat-card stat-card-${f} ${b}`,style:v,onClick:g,children:[e.jsxs("div",{className:"stat-card-header",children:[e.jsx("span",{className:"stat-card-title",children:a}),i&&e.jsx("span",{className:"stat-card-icon",style:{color:x},"aria-hidden":"true",children:i})]}),e.jsxs("div",{className:"stat-card-body",children:[e.jsxs("div",{className:"stat-card-value tabular-nums",style:{color:x},children:[n,u&&e.jsx("span",{className:"stat-card-suffix",children:u})]}),t&&e.jsxs("div",{className:`stat-card-trend ${t.direction==="up"?"trend-up":"trend-down"} tabular-nums`,"aria-label":`${t.direction==="up"?"Increase":"Decrease"} of ${t.value}%`,children:[t.direction==="up"?e.jsx(N,{"aria-hidden":"true"}):e.jsx(I,{"aria-hidden":"true"}),e.jsxs("span",{children:[Math.abs(t.value),"%"]})]})]})]})}const{Text:j}=$;function J(){const{t:a}=R(),n=[{key:"1",name:"Product Sync",time:"2024-02-10 14:00",duration:"45min",status:"processing"},{key:"2",name:"Tech Review",time:"2024-02-10 10:00",duration:"60min",status:"success"},{key:"3",name:"Daily Standup",time:"2024-02-10 09:00",duration:"15min",status:"success"},{key:"4",name:"Client Call",time:"2024-02-10 16:30",duration:"30min",status:"default"}],i=[{title:a("dashboard.meetingName"),dataIndex:"name",key:"name",render:s=>e.jsx(j,{strong:!0,children:s})},{title:a("dashboard.startTime"),dataIndex:"time",key:"time",className:"tabular-nums",render:s=>e.jsx(j,{type:"secondary",children:s})},{title:a("dashboard.duration"),dataIndex:"duration",key:"duration",width:100,className:"tabular-nums"},{title:a("common.status"),dataIndex:"status",key:"status",width:120,render:s=>s==="processing"?e.jsx(o,{icon:e.jsx(c,{spin:!0,"aria-hidden":"true"}),color:"processing",children:a("dashboardExt.processing")}):s==="success"?e.jsx(o,{icon:e.jsx(k,{"aria-hidden":"true"}),color:"success",children:a("dashboardExt.completed")}):e.jsx(o,{color:"default",children:a("dashboardExt.pending")})},{title:a("common.action"),key:"action",width:80,render:()=>e.jsx(l,{type:"link",size:"small",icon:e.jsx(w,{"aria-hidden":"true"}),"aria-label":a("dashboard.viewAll")})}];return e.jsxs("div",{className:"app-page dashboard-page",children:[e.jsx(D,{title:a("dashboard.title"),subtitle:a("dashboard.subtitle")}),e.jsx("div",{className:"app-page__page-actions",children:e.jsx(l,{icon:e.jsx(c,{"aria-hidden":"true"}),size:"small",children:a("common.refresh")})}),e.jsxs(h,{gutter:[24,24],children:[e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.todayMeetings"),value:12,icon:e.jsx(T,{"aria-hidden":"true"}),color:"blue",trend:{value:8,direction:"up"}})}),e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.activeDevices"),value:45,icon:e.jsx(C,{"aria-hidden":"true"}),color:"green",trend:{value:2,direction:"up"}})}),e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.transcriptionDuration"),value:1280,suffix:"min",icon:e.jsx(M,{"aria-hidden":"true"}),color:"orange",trend:{value:5,direction:"down"}})}),e.jsx(r,{xs:24,sm:12,lg:6,children:e.jsx(d,{title:a("dashboard.totalUsers"),value:320,icon:e.jsx(S,{"aria-hidden":"true"}),color:"purple",trend:{value:12,direction:"up"}})})]}),e.jsxs(h,{gutter:[24,24],className:"mt-6",children:[e.jsx(r,{xs:24,xl:16,children:e.jsx(p,{title:a("dashboard.recentMeetings"),bordered:!1,className:"app-page__content-card",extra:e.jsx(l,{type:"link",size:"small",children:a("dashboard.viewAll")}),styles:{body:{padding:0}},children:e.jsx(E,{dataSource:n,columns:i,pagination:!1,size:"middle",className:"roles-table"})})}),e.jsx(r,{xs:24,xl:8,children:e.jsx(p,{title:a("dashboard.deviceLoad"),bordered:!1,className:"app-page__content-card",children:e.jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[e.jsx(_,{active:!0,paragraph:{rows:4}}),e.jsxs("div",{className:"mt-4 text-gray-400 flex items-center gap-2",children:[e.jsx(c,{spin:!0,"aria-hidden":"true"}),e.jsx("span",{children:a("dashboardExt.chartLoading")})]})]})})})]})]})}export{J as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{j as e,T as d}from"./index-CYM97J2V.js";const{Title:i,Text:n}=d,c=({title:r,subtitle:s,extra:a,className:l=""})=>e.jsxs("div",{className:`page-header flex justify-between items-end mb-6 ${l}`,children:[e.jsxs("div",{children:[e.jsx(i,{level:4,className:"mb-1",style:{margin:0},children:r}),s&&e.jsx(n,{type:"secondary",style:{display:"block"},children:s})]}),a&&e.jsx("div",{className:"page-header-extra",children:a})]});export{c as P};
|
||||
import{j as e,T as d}from"./index-Dv-rJwbZ.js";const{Title:i,Text:n}=d,c=({title:r,subtitle:s,extra:a,className:l=""})=>e.jsxs("div",{className:`page-header flex justify-between items-end mb-6 ${l}`,children:[e.jsxs("div",{children:[e.jsx(i,{level:4,className:"mb-1",style:{margin:0},children:r}),s&&e.jsx(n,{type:"secondary",style:{display:"block"},children:s})]}),a&&e.jsx("div",{className:"page-header-extra",children:a})]});export{c as P};
|
||||
|
|
@ -1 +1 @@
|
|||
import{r as u,h as p,j as e,L as f,a as o,T as j,B as l,i as w,k as y,s as g}from"./index-CYM97J2V.js";import{F as s}from"./index-CacOxAQN.js";import{C as h}from"./index-Bcf8yIZZ.js";import{I as a}from"./index-DV4zjsPW.js";import"./useForm-B5uILH8t.js";import"./row-DNGQ3hV2.js";const{Title:P,Text:b}=j;function F(){const[d,t]=u.useState(!1),c=p(),[m]=s.useForm(),n=()=>{localStorage.clear(),sessionStorage.clear(),c("/login")},x=async r=>{t(!0);try{await y({oldPassword:r.oldPassword,newPassword:r.newPassword}),g.success("密码已更新,请重新登录"),n()}finally{t(!1)}};return e.jsx(f,{style:{minHeight:"100vh",background:"#f0f2f5",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsxs(h,{style:{width:420,borderRadius:8,boxShadow:"0 4px 12px rgba(0,0,0,0.1)"},children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx(o,{style:{fontSize:40,color:"#1890ff"}}),e.jsx(P,{level:3,style:{marginTop:16},children:"首次登录请修改密码"}),e.jsx(b,{type:"secondary",children:"当前账号被要求更新初始密码,提交成功后会跳转到登录页。"})]}),e.jsxs(s,{form:m,layout:"vertical",onFinish:x,children:[e.jsx(s.Item,{label:"当前密码",name:"oldPassword",rules:[{required:!0,message:"请输入当前密码"}],children:e.jsx(a.Password,{prefix:e.jsx(o,{})})}),e.jsx(s.Item,{label:"新密码",name:"newPassword",rules:[{required:!0,min:6,message:"新密码至少 6 位"}],children:e.jsx(a.Password,{prefix:e.jsx(o,{})})}),e.jsx(s.Item,{label:"确认新密码",name:"confirmPassword",dependencies:["newPassword"],rules:[{required:!0,message:"请再次输入新密码"},({getFieldValue:r})=>({validator(T,i){return!i||r("newPassword")===i?Promise.resolve():Promise.reject(new Error("两次输入的新密码不一致"))}})],children:e.jsx(a.Password,{prefix:e.jsx(o,{})})}),e.jsx(l,{type:"primary",htmlType:"submit",block:!0,size:"large",loading:d,style:{marginTop:8},children:"提交并重新登录"}),e.jsx(l,{type:"link",block:!0,icon:e.jsx(w,{}),onClick:n,style:{marginTop:8},children:"退出登录"})]})]})})}export{F as default};
|
||||
import{r as u,h as p,j as e,L as f,a as o,T as j,B as l,i as w,k as y,s as g}from"./index-Dv-rJwbZ.js";import{F as s}from"./index-DmVlNV9v.js";import{C as h}from"./index-EoMRal4G.js";import{I as a}from"./index-DFGcC-dW.js";import"./useForm-43P2UNGc.js";import"./row-NVxLItiq.js";const{Title:P,Text:b}=j;function F(){const[d,t]=u.useState(!1),c=p(),[m]=s.useForm(),n=()=>{localStorage.clear(),sessionStorage.clear(),c("/login")},x=async r=>{t(!0);try{await y({oldPassword:r.oldPassword,newPassword:r.newPassword}),g.success("密码已更新,请重新登录"),n()}finally{t(!1)}};return e.jsx(f,{style:{minHeight:"100vh",background:"#f0f2f5",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsxs(h,{style:{width:420,borderRadius:8,boxShadow:"0 4px 12px rgba(0,0,0,0.1)"},children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx(o,{style:{fontSize:40,color:"#1890ff"}}),e.jsx(P,{level:3,style:{marginTop:16},children:"首次登录请修改密码"}),e.jsx(b,{type:"secondary",children:"当前账号被要求更新初始密码,提交成功后会跳转到登录页。"})]}),e.jsxs(s,{form:m,layout:"vertical",onFinish:x,children:[e.jsx(s.Item,{label:"当前密码",name:"oldPassword",rules:[{required:!0,message:"请输入当前密码"}],children:e.jsx(a.Password,{prefix:e.jsx(o,{})})}),e.jsx(s.Item,{label:"新密码",name:"newPassword",rules:[{required:!0,min:6,message:"新密码至少 6 位"}],children:e.jsx(a.Password,{prefix:e.jsx(o,{})})}),e.jsx(s.Item,{label:"确认新密码",name:"confirmPassword",dependencies:["newPassword"],rules:[{required:!0,message:"请再次输入新密码"},({getFieldValue:r})=>({validator(T,i){return!i||r("newPassword")===i?Promise.resolve():Promise.reject(new Error("两次输入的新密码不一致"))}})],children:e.jsx(a.Password,{prefix:e.jsx(o,{})})}),e.jsx(l,{type:"primary",htmlType:"submit",block:!0,size:"large",loading:d,style:{marginTop:8},children:"提交并重新登录"}),e.jsx(l,{type:"link",block:!0,icon:e.jsx(w,{}),onClick:n,style:{marginTop:8},children:"退出登录"})]})]})})}export{F as default};
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import{r as o,x as Ae,da as we,bT as De,ax as We,y as Oe,z as oe,db as fe,aB as pe,bZ as $e,ai as D,E as Be,C as Q,b_ as Ke,aL as Xe,A as Ge,aK as Ye,dc as Qe,dd as Ue,cS as ke,de as Je,df as Fe,dg as U,dh as Ze,di as et,aj as tt,aG as le,ce as xe,dj as nt,F as rt,cY as ot,dk as ve,dl as at,cg as je,bK as lt,at as it,dm as st,b$ as ct,ab as mt,c0 as ut,bF as dt,I as ft,H as pt,K as gt,ch as bt,aJ as ht,dn as Pe,ay as Ne,dp as yt,dq as Ct,dr as $t,ds as xt,dt as vt,du as St,bh as Et,dv as It,dw as wt}from"./index-CYM97J2V.js";import{u as Me,a as Re,t as ue,b as Ot}from"./useForm-B5uILH8t.js";import{C as _e,R as Ft}from"./row-DNGQ3hV2.js";function jt(e){return e==null?null:typeof e=="object"&&!o.isValidElement(e)?e:{title:e}}function ie(e){const[t,n]=o.useState(e);return o.useEffect(()=>{const r=setTimeout(()=>{n(e)},e.length?0:10);return()=>{clearTimeout(r)}},[e]),t}const Pt=e=>{const{componentCls:t}=e,n=`${t}-show-help`,r=`${t}-show-help-item`;return{[n]:{transition:`opacity ${e.motionDurationFast} ${e.motionEaseInOut}`,"&-appear, &-enter":{opacity:0,"&-active":{opacity:1}},"&-leave":{opacity:1,"&-active":{opacity:0}},[r]:{overflow:"hidden",transition:`height ${e.motionDurationFast} ${e.motionEaseInOut},
|
||||
import{r as o,x as Ae,da as we,bT as De,ax as We,y as Oe,z as oe,db as fe,aB as pe,bZ as $e,ai as D,E as Be,C as Q,b_ as Ke,aL as Xe,A as Ge,aK as Ye,dc as Qe,dd as Ue,cS as ke,de as Je,df as Fe,dg as U,dh as Ze,di as et,aj as tt,aG as le,ce as xe,dj as nt,F as rt,cY as ot,dk as ve,dl as at,cg as je,bK as lt,at as it,dm as st,b$ as ct,ab as mt,c0 as ut,bF as dt,I as ft,H as pt,K as gt,ch as bt,aJ as ht,dn as Pe,ay as Ne,dp as yt,dq as Ct,dr as $t,ds as xt,dt as vt,du as St,bh as Et,dv as It,dw as wt}from"./index-Dv-rJwbZ.js";import{u as Me,a as Re,t as ue,b as Ot}from"./useForm-43P2UNGc.js";import{C as _e,R as Ft}from"./row-NVxLItiq.js";function jt(e){return e==null?null:typeof e=="object"&&!o.isValidElement(e)?e:{title:e}}function ie(e){const[t,n]=o.useState(e);return o.useEffect(()=>{const r=setTimeout(()=>{n(e)},e.length?0:10);return()=>{clearTimeout(r)}},[e]),t}const Pt=e=>{const{componentCls:t}=e,n=`${t}-show-help`,r=`${t}-show-help-item`;return{[n]:{transition:`opacity ${e.motionDurationFast} ${e.motionEaseInOut}`,"&-appear, &-enter":{opacity:0,"&-active":{opacity:1}},"&-leave":{opacity:1,"&-active":{opacity:0}},[r]:{overflow:"hidden",transition:`height ${e.motionDurationFast} ${e.motionEaseInOut},
|
||||
opacity ${e.motionDurationFast} ${e.motionEaseInOut},
|
||||
transform ${e.motionDurationFast} ${e.motionEaseInOut} !important`,[`&${r}-appear, &${r}-enter`]:{transform:"translateY(-5px)",opacity:0,"&-active":{transform:"translateY(0)",opacity:1}},[`&${r}-leave-active`]:{transform:"translateY(-5px)"}}}}},Nt=e=>({legend:{display:"block",width:"100%",marginBottom:e.marginLG,padding:0,color:e.colorTextDescription,fontSize:e.fontSizeLG,lineHeight:"inherit",border:0,borderBottom:`${oe(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},'input[type="search"]':{boxSizing:"border-box"},'input[type="radio"], input[type="checkbox"]':{lineHeight:"normal"},'input[type="file"]':{display:"block"},'input[type="range"]':{display:"block",width:"100%"},"select[multiple], select[size]":{height:"auto"},"input[type='file']:focus,\n input[type='radio']:focus,\n input[type='checkbox']:focus":{outline:0,boxShadow:`0 0 0 ${oe(e.controlOutlineWidth)} ${e.controlOutline}`},output:{display:"block",paddingTop:15,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight}}),Se=(e,t)=>{const{formItemCls:n}=e;return{[n]:{[`${n}-label > label`]:{height:t},[`${n}-control-input`]:{minHeight:t}}}},Mt=e=>{const{componentCls:t}=e;return{[e.componentCls]:Object.assign(Object.assign(Object.assign({},Oe(e)),Nt(e)),{[`${t}-text`]:{display:"inline-block",paddingInlineEnd:e.paddingSM},"&-small":Object.assign({},Se(e,e.controlHeightSM)),"&-large":Object.assign({},Se(e,e.controlHeightLG))})}},Rt=e=>{const{formItemCls:t,iconCls:n,rootPrefixCls:r,antCls:a,labelRequiredMarkColor:i,labelColor:u,labelFontSize:s,labelHeight:f,labelColonMarginInlineStart:m,labelColonMarginInlineEnd:p,itemMarginBottom:d}=e;return{[t]:Object.assign(Object.assign({},Oe(e)),{marginBottom:d,verticalAlign:"top","&-with-help":{transition:"none"},[`&-hidden,
|
||||
&-hidden${a}-row`]:{display:"none"},"&-has-warning":{[`${t}-split`]:{color:e.colorError}},"&-has-error":{[`${t}-split`]:{color:e.colorWarning}},[`${t}-label`]:{flexGrow:0,overflow:"hidden",whiteSpace:"nowrap",textAlign:"end",verticalAlign:"middle","&-left":{textAlign:"start"},"&-wrap":{overflow:"unset",lineHeight:e.lineHeight,whiteSpace:"unset","> label":{verticalAlign:"middle",textWrap:"balance"}},"> label":{position:"relative",display:"inline-flex",alignItems:"center",maxWidth:"100%",height:f,color:u,fontSize:s,[`> ${n}`]:{fontSize:e.fontSize,verticalAlign:"top"},[`&${t}-required`]:{"&::before":{display:"inline-block",marginInlineEnd:e.marginXXS,color:i,fontSize:e.fontSize,fontFamily:"SimSun, sans-serif",lineHeight:1,content:'"*"'},[`&${t}-required-mark-hidden, &${t}-required-mark-optional`]:{"&::before":{display:"none"}}},[`${t}-optional`]:{display:"inline-block",marginInlineStart:e.marginXXS,color:e.colorTextDescription,[`&${t}-required-mark-hidden`]:{display:"none"}},[`${t}-tooltip`]:{color:e.colorTextDescription,cursor:"help",writingMode:"horizontal-tb",marginInlineStart:e.marginXXS},"&::after":{content:'":"',position:"relative",marginBlock:0,marginInlineStart:m,marginInlineEnd:p},[`&${t}-no-colon::after`]:{content:'"\\a0"'}}},[`${t}-control`]:{"--ant-display":"flex",flexDirection:"column",flexGrow:1,[`&:first-child:not([class^="'${r}-col-'"]):not([class*="' ${r}-col-'"])`]:{width:"100%"},"&-input":{position:"relative",display:"flex",alignItems:"center",minHeight:e.controlHeight,"&-content":{flex:"auto",maxWidth:"100%",[`&:has(> ${a}-switch:only-child, > ${a}-rate:only-child)`]:{display:"flex",alignItems:"center"}}}},[t]:{"&-additional":{display:"flex",flexDirection:"column"},"&-explain, &-extra":{clear:"both",color:e.colorTextDescription,fontSize:e.fontSize,lineHeight:e.lineHeight},"&-explain-connected":{width:"100%"},"&-extra":{minHeight:e.controlHeightSM,transition:`color ${e.motionDurationMid} ${e.motionEaseOut}`},"&-explain":{"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning}}},[`&-with-help ${t}-explain`]:{height:"auto",opacity:1},[`${t}-feedback-icon`]:{fontSize:e.fontSize,textAlign:"center",visibility:"visible",animationName:we,animationDuration:e.motionDurationMid,animationTimingFunction:e.motionEaseOutBack,pointerEvents:"none","&-success":{color:e.colorSuccess},"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning},"&-validating":{color:e.colorPrimary}}})}},re=e=>({padding:e.verticalLabelPadding,margin:e.verticalLabelMargin,whiteSpace:"initial",textAlign:"start","> label":{margin:0,"&::after":{visibility:"hidden"}}}),_t=e=>{const{antCls:t,formItemCls:n}=e;return{[`${n}-horizontal`]:{[`${n}-label`]:{flexGrow:0},[`${n}-control`]:{flex:"1 1 0",minWidth:0},[`${n}-label[class$='-24'], ${n}-label[class*='-24 ']`]:{[`& + ${n}-control`]:{minWidth:"unset"}},[`${t}-col-24${n}-label,
|
||||
|
|
@ -1 +0,0 @@
|
|||
.login-page{min-height:100vh;display:flex;background:#fff}.login-left{flex:1.1;background:linear-gradient(140deg,#f0f5ff,#eef5ff 40%,#f7fbff);padding:56px 64px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.login-brand{display:flex;align-items:center;gap:10px;z-index:1}.brand-logo-img{width:34px;height:34px;filter:drop-shadow(0 8px 16px rgba(45,107,255,.24))}.brand-name{font-size:20px;font-weight:600;color:#2f3a4f;letter-spacing:-.2px}.login-hero{margin-top:-40px;z-index:1}.hero-title{font-size:42px;font-weight:700;line-height:1.2;color:#1d2b3a;margin-bottom:24px;letter-spacing:-.5px;text-wrap:balance}.hero-accent{color:#1677ff;position:relative}.hero-desc{font-size:16px;line-height:1.8;color:#687489;max-width:440px}.login-left-footer{display:flex;align-items:center;gap:12px;color:#8c97a8;font-size:13px;z-index:1}.footer-divider{width:4px;height:4px;background:#c4ccd7;border-radius:50%}.login-right{flex:1;display:flex;align-items:center;justify-content:center;padding:40px;background:#fff}.login-container{width:100%;max-width:400px}.login-header{margin-bottom:40px}.login-header h2{font-size:28px!important;font-weight:700!important;color:#1f2a37!important;margin-bottom:8px!important;letter-spacing:-.5px}.login-header span{font-size:15px;color:#6b7280}.login-form .ant-form-item{margin-bottom:20px}.login-form .ant-input-affix-wrapper-lg{padding:10px 16px;border-radius:8px}.captcha-wrapper{display:flex;gap:12px}.captcha-image-btn{padding:0;width:120px;height:46px;flex-shrink:0;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#f9fafb}.captcha-image-btn img{width:100%;height:100%;object-fit:cover;transition:opacity .2s}.captcha-image-btn:hover img{opacity:.8}.login-extra{display:flex;justify-content:space-between;align-items:center;margin-top:-4px;margin-bottom:24px}.forgot-password{font-size:14px;color:#1677ff}.login-submit-btn{height:48px;font-size:16px;font-weight:600;border-radius:8px}.login-footer{margin-top:32px;text-align:center;padding:16px;background:#f9fafb;border-radius:12px}.tabular-nums{font-variant-numeric:tabular-nums}@media (max-width: 1024px){.login-left{padding:48px}.hero-title{font-size:36px}}@media (max-width: 900px){.login-left{display:none}.login-right{background:#f3f4f6}.login-container{background:#fff;padding:48px 32px;border-radius:20px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}}@media (max-width: 480px){.login-right{padding:20px}.login-container{padding:32px 20px}}
|
||||
|
|
@ -1 +1 @@
|
|||
import{bm as t}from"./index-CYM97J2V.js";async function n(a){return(await t.get("/sys/api/orgs",{params:{tenantId:a}})).data.data}async function p(a){return(await t.post("/sys/api/orgs",a)).data.data}async function o(a,s){return(await t.put(`/sys/api/orgs/${a}`,s)).data.data}async function c(a){return(await t.delete(`/sys/api/orgs/${a}`)).data.data}export{p as c,c as d,n as l,o as u};
|
||||
import{bm as t}from"./index-Dv-rJwbZ.js";async function n(a){return(await t.get("/sys/api/orgs",{params:{tenantId:a}})).data.data}async function p(a){return(await t.post("/sys/api/orgs",a)).data.data}async function o(a,s){return(await t.put(`/sys/api/orgs/${a}`,s)).data.data}async function c(a){return(await t.delete(`/sys/api/orgs/${a}`)).data.data}export{p as c,c as d,n as l,o as u};
|
||||
|
|
@ -1 +1 @@
|
|||
import{cH as r}from"./index-CYM97J2V.js";const s=(t,o,a,e)=>({total:t,current:o,pageSize:a,onChange:e,showSizeChanger:!0,showQuickJumper:!0,showTotal:n=>r.t("common.total",{total:n}),pageSizeOptions:["10","20","50","100"]});export{s as g};
|
||||
import{cH as r}from"./index-Dv-rJwbZ.js";const s=(t,o,a,e)=>({total:t,current:o,pageSize:a,onChange:e,showSizeChanger:!0,showQuickJumper:!0,showTotal:n=>r.t("common.total",{total:n}),pageSizeOptions:["10","20","50","100"]});export{s as g};
|
||||
|
|
@ -1 +1 @@
|
|||
import{r as f,ay as k,C as A,bk as S,bj as I}from"./index-CYM97J2V.js";import{c as _,d as J}from"./useForm-B5uILH8t.js";const G=f.createContext({});var M=function(e,l){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&l.indexOf(t)<0&&(n[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(e);r<t.length;r++)l.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(n[t[r]]=e[t[r]]);return n};function R(e){return e==="auto"?"1 1 auto":typeof e=="number"?`${e} ${e} auto`:/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?`0 0 ${e}`:e}const z=["xs","sm","md","lg","xl","xxl"],H=f.forwardRef((e,l)=>{const{getPrefixCls:n,direction:t}=f.useContext(k),{gutter:r,wrap:c}=f.useContext(G),{prefixCls:p,span:i,order:g,offset:m,push:h,pull:O,className:E,children:b,flex:x,style:C}=e,d=M(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),o=n("col",p),[N,P,y]=_(o),j={};let $={};z.forEach(a=>{let s={};const v=e[a];typeof v=="number"?s.span=v:typeof v=="object"&&(s=v||{}),delete d[a],$=Object.assign(Object.assign({},$),{[`${o}-${a}-${s.span}`]:s.span!==void 0,[`${o}-${a}-order-${s.order}`]:s.order||s.order===0,[`${o}-${a}-offset-${s.offset}`]:s.offset||s.offset===0,[`${o}-${a}-push-${s.push}`]:s.push||s.push===0,[`${o}-${a}-pull-${s.pull}`]:s.pull||s.pull===0,[`${o}-rtl`]:t==="rtl"}),s.flex&&($[`${o}-${a}-flex`]=!0,j[`--${o}-${a}-flex`]=R(s.flex))});const w=A(o,{[`${o}-${i}`]:i!==void 0,[`${o}-order-${g}`]:g,[`${o}-offset-${m}`]:m,[`${o}-push-${h}`]:h,[`${o}-pull-${O}`]:O},E,$,P,y),u={};if(r!=null&&r[0]){const a=typeof r[0]=="number"?`${r[0]/2}px`:`calc(${r[0]} / 2)`;u.paddingLeft=a,u.paddingRight=a}return x&&(u.flex=R(x),c===!1&&!u.minWidth&&(u.minWidth=0)),N(f.createElement("div",Object.assign({},d,{style:Object.assign(Object.assign(Object.assign({},u),C),j),className:w,ref:l}),b))});function B(e,l){const n=[void 0,void 0],t=Array.isArray(e)?e:[e,void 0],r=l||{xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0};return t.forEach((c,p)=>{if(typeof c=="object"&&c!==null)for(let i=0;i<S.length;i++){const g=S[i];if(r[g]&&c[g]!==void 0){n[p]=c[g];break}}else n[p]=c}),n}var L=function(e,l){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&l.indexOf(t)<0&&(n[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(e);r<t.length;r++)l.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(n[t[r]]=e[t[r]]);return n};function V(e,l){const[n,t]=f.useState(typeof e=="string"?e:""),r=()=>{if(typeof e=="string"&&t(e),typeof e=="object")for(let c=0;c<S.length;c++){const p=S[c];if(!l||!l[p])continue;const i=e[p];if(i!==void 0){t(i);return}}};return f.useEffect(()=>{r()},[JSON.stringify(e),l]),n}const q=f.forwardRef((e,l)=>{const{prefixCls:n,justify:t,align:r,className:c,style:p,children:i,gutter:g=0,wrap:m}=e,h=L(e,["prefixCls","justify","align","className","style","children","gutter","wrap"]),{getPrefixCls:O,direction:E}=f.useContext(k),b=I(!0,null),x=V(r,b),C=V(t,b),d=O("row",n),[o,N,P]=J(d),y=B(g,b),j=A(d,{[`${d}-no-wrap`]:m===!1,[`${d}-${C}`]:C,[`${d}-${x}`]:x,[`${d}-rtl`]:E==="rtl"},c,N,P),$={};if(y!=null&&y[0]){const s=typeof y[0]=="number"?`${y[0]/-2}px`:`calc(${y[0]} / -2)`;$.marginLeft=s,$.marginRight=s}const[w,u]=y;$.rowGap=u;const a=f.useMemo(()=>({gutter:[w,u],wrap:m}),[w,u,m]);return o(f.createElement(G.Provider,{value:a},f.createElement("div",Object.assign({},h,{className:j,style:Object.assign(Object.assign({},$),p),ref:l}),i)))});export{H as C,q as R};
|
||||
import{r as f,ay as k,C as A,bk as S,bj as I}from"./index-Dv-rJwbZ.js";import{c as _,d as J}from"./useForm-43P2UNGc.js";const G=f.createContext({});var M=function(e,l){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&l.indexOf(t)<0&&(n[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(e);r<t.length;r++)l.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(n[t[r]]=e[t[r]]);return n};function R(e){return e==="auto"?"1 1 auto":typeof e=="number"?`${e} ${e} auto`:/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?`0 0 ${e}`:e}const z=["xs","sm","md","lg","xl","xxl"],H=f.forwardRef((e,l)=>{const{getPrefixCls:n,direction:t}=f.useContext(k),{gutter:r,wrap:c}=f.useContext(G),{prefixCls:p,span:i,order:g,offset:m,push:h,pull:O,className:E,children:b,flex:x,style:C}=e,d=M(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),o=n("col",p),[N,P,y]=_(o),j={};let $={};z.forEach(a=>{let s={};const v=e[a];typeof v=="number"?s.span=v:typeof v=="object"&&(s=v||{}),delete d[a],$=Object.assign(Object.assign({},$),{[`${o}-${a}-${s.span}`]:s.span!==void 0,[`${o}-${a}-order-${s.order}`]:s.order||s.order===0,[`${o}-${a}-offset-${s.offset}`]:s.offset||s.offset===0,[`${o}-${a}-push-${s.push}`]:s.push||s.push===0,[`${o}-${a}-pull-${s.pull}`]:s.pull||s.pull===0,[`${o}-rtl`]:t==="rtl"}),s.flex&&($[`${o}-${a}-flex`]=!0,j[`--${o}-${a}-flex`]=R(s.flex))});const w=A(o,{[`${o}-${i}`]:i!==void 0,[`${o}-order-${g}`]:g,[`${o}-offset-${m}`]:m,[`${o}-push-${h}`]:h,[`${o}-pull-${O}`]:O},E,$,P,y),u={};if(r!=null&&r[0]){const a=typeof r[0]=="number"?`${r[0]/2}px`:`calc(${r[0]} / 2)`;u.paddingLeft=a,u.paddingRight=a}return x&&(u.flex=R(x),c===!1&&!u.minWidth&&(u.minWidth=0)),N(f.createElement("div",Object.assign({},d,{style:Object.assign(Object.assign(Object.assign({},u),C),j),className:w,ref:l}),b))});function B(e,l){const n=[void 0,void 0],t=Array.isArray(e)?e:[e,void 0],r=l||{xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0};return t.forEach((c,p)=>{if(typeof c=="object"&&c!==null)for(let i=0;i<S.length;i++){const g=S[i];if(r[g]&&c[g]!==void 0){n[p]=c[g];break}}else n[p]=c}),n}var L=function(e,l){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&l.indexOf(t)<0&&(n[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(e);r<t.length;r++)l.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(n[t[r]]=e[t[r]]);return n};function V(e,l){const[n,t]=f.useState(typeof e=="string"?e:""),r=()=>{if(typeof e=="string"&&t(e),typeof e=="object")for(let c=0;c<S.length;c++){const p=S[c];if(!l||!l[p])continue;const i=e[p];if(i!==void 0){t(i);return}}};return f.useEffect(()=>{r()},[JSON.stringify(e),l]),n}const q=f.forwardRef((e,l)=>{const{prefixCls:n,justify:t,align:r,className:c,style:p,children:i,gutter:g=0,wrap:m}=e,h=L(e,["prefixCls","justify","align","className","style","children","gutter","wrap"]),{getPrefixCls:O,direction:E}=f.useContext(k),b=I(!0,null),x=V(r,b),C=V(t,b),d=O("row",n),[o,N,P]=J(d),y=B(g,b),j=A(d,{[`${d}-no-wrap`]:m===!1,[`${d}-${C}`]:C,[`${d}-${x}`]:x,[`${d}-rtl`]:E==="rtl"},c,N,P),$={};if(y!=null&&y[0]){const s=typeof y[0]=="number"?`${y[0]/-2}px`:`calc(${y[0]} / -2)`;$.marginLeft=s,$.marginRight=s}const[w,u]=y;$.rowGap=u;const a=f.useMemo(()=>({gutter:[w,u],wrap:m}),[w,u,m]);return o(f.createElement(G.Provider,{value:a},f.createElement("div",Object.assign({},h,{className:j,style:Object.assign(Object.assign({},$),p),ref:l}),i)))});export{H as C,q as R};
|
||||
|
|
@ -1 +1 @@
|
|||
import{bm as n}from"./index-CYM97J2V.js";async function r(t){return(await n.get("/sys/api/tenants",{params:t})).data.data}async function p(t){return(await n.post("/sys/api/tenants",t)).data.data}async function c(t,a){return(await n.put(`/sys/api/tenants/${t}`,a)).data.data}async function i(t){return(await n.delete(`/sys/api/tenants/${t}`)).data.data}export{p as c,i as d,r as l,c as u};
|
||||
import{bm as n}from"./index-Dv-rJwbZ.js";async function r(t){return(await n.get("/sys/api/tenants",{params:t})).data.data}async function p(t){return(await n.post("/sys/api/tenants",t)).data.data}async function c(t,a){return(await n.put(`/sys/api/tenants/${t}`,a)).data.data}async function i(t){return(await n.delete(`/sys/api/tenants/${t}`)).data.data}export{p as c,i as d,r as l,c as u};
|
||||
|
|
@ -1 +1 @@
|
|||
import{r as i,ds as S,B as $,cQ as E,bm as n}from"./index-CYM97J2V.js";const g=t=>typeof(t==null?void 0:t.then)=="function",x=t=>{const{type:e,children:c,prefixCls:y,buttonProps:d,close:r,autoFocus:m,emitEvent:o,isSilent:v,quitOnNullishReturnValue:D,actionFn:l}=t,u=i.useRef(!1),w=i.useRef(null),[I,h]=S(!1),p=(...a)=>{r==null||r.apply(void 0,a)};i.useEffect(()=>{let a=null;return m&&(a=setTimeout(()=>{var s;(s=w.current)===null||s===void 0||s.focus({preventScroll:!0})})),()=>{a&&clearTimeout(a)}},[m]);const T=a=>{g(a)&&(h(!0),a.then((...s)=>{h(!1,!0),p.apply(void 0,s),u.current=!1},s=>{if(h(!1,!0),u.current=!1,!(v!=null&&v()))return Promise.reject(s)}))},b=a=>{if(u.current)return;if(u.current=!0,!l){p();return}let s;if(o){if(s=l(a),D&&!g(s)){u.current=!1,p(a);return}}else if(l.length)s=l(r),u.current=!1;else if(s=l(),!g(s)){p();return}T(s)};return i.createElement($,Object.assign({},E(e),{onClick:b,loading:I,prefixCls:y},d,{ref:w}),c)};async function B(t){return(await n.get("/sys/api/dict-types",{params:t})).data.data}async function O(t){return(await n.post("/sys/api/dict-types",t)).data.data}async function P(t,e){return(await n.put(`/sys/api/dict-types/${t}`,e)).data.data}async function F(t){return(await n.delete(`/sys/api/dict-types/${t}`)).data.data}async function L(t){return(await n.get("/sys/api/dict-items",{params:{typeCode:t}})).data.data}async function j(t){return(await n.post("/sys/api/dict-items",t)).data.data}async function A(t,e){return(await n.put(`/sys/api/dict-items/${t}`,e)).data.data}async function q(t){return(await n.delete(`/sys/api/dict-items/${t}`)).data.data}async function R(t){return(await n.get(`/sys/api/dict-items/type/${t}`)).data.data}const f={};function M(t){const[e,c]=i.useState(f[t]||[]),[y,d]=i.useState(!f[t]);return i.useEffect(()=>{if(f[t]){c(f[t]),d(!1);return}let r=!0;return(async()=>{try{const o=await R(t);r&&(f[t]=o,c(o))}catch(o){console.error(`Failed to fetch dictionary ${t}:`,o)}finally{r&&d(!1)}})(),()=>{r=!1}},[t]),{items:e,loading:y}}export{x as A,L as a,P as b,O as c,F as d,q as e,B as f,A as g,j as h,M as u};
|
||||
import{r as i,ds as S,B as $,cQ as E,bm as n}from"./index-Dv-rJwbZ.js";const g=t=>typeof(t==null?void 0:t.then)=="function",x=t=>{const{type:e,children:c,prefixCls:y,buttonProps:d,close:r,autoFocus:m,emitEvent:o,isSilent:v,quitOnNullishReturnValue:D,actionFn:l}=t,u=i.useRef(!1),w=i.useRef(null),[I,h]=S(!1),p=(...a)=>{r==null||r.apply(void 0,a)};i.useEffect(()=>{let a=null;return m&&(a=setTimeout(()=>{var s;(s=w.current)===null||s===void 0||s.focus({preventScroll:!0})})),()=>{a&&clearTimeout(a)}},[m]);const T=a=>{g(a)&&(h(!0),a.then((...s)=>{h(!1,!0),p.apply(void 0,s),u.current=!1},s=>{if(h(!1,!0),u.current=!1,!(v!=null&&v()))return Promise.reject(s)}))},b=a=>{if(u.current)return;if(u.current=!0,!l){p();return}let s;if(o){if(s=l(a),D&&!g(s)){u.current=!1,p(a);return}}else if(l.length)s=l(r),u.current=!1;else if(s=l(),!g(s)){p();return}T(s)};return i.createElement($,Object.assign({},E(e),{onClick:b,loading:I,prefixCls:y},d,{ref:w}),c)};async function B(t){return(await n.get("/sys/api/dict-types",{params:t})).data.data}async function O(t){return(await n.post("/sys/api/dict-types",t)).data.data}async function P(t,e){return(await n.put(`/sys/api/dict-types/${t}`,e)).data.data}async function F(t){return(await n.delete(`/sys/api/dict-types/${t}`)).data.data}async function L(t){return(await n.get("/sys/api/dict-items",{params:{typeCode:t}})).data.data}async function j(t){return(await n.post("/sys/api/dict-items",t)).data.data}async function A(t,e){return(await n.put(`/sys/api/dict-items/${t}`,e)).data.data}async function q(t){return(await n.delete(`/sys/api/dict-items/${t}`)).data.data}async function R(t){return(await n.get(`/sys/api/dict-items/type/${t}`)).data.data}const f={};function M(t){const[e,c]=i.useState(f[t]||[]),[y,d]=i.useState(!f[t]);return i.useEffect(()=>{if(f[t]){c(f[t]),d(!1);return}let r=!0;return(async()=>{try{const o=await R(t);r&&(f[t]=o,c(o))}catch(o){console.error(`Failed to fetch dictionary ${t}:`,o)}finally{r&&d(!1)}})(),()=>{r=!1}},[t]),{items:e,loading:y}}export{x as A,L as a,P as b,O as c,F as d,q as e,B as f,A as g,j as h,M as u};
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>UnisBase - 智能会议系统</title>
|
||||
<script type="module" crossorigin src="/assets/index-CYM97J2V.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-Dv-rJwbZ.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CaWPk49l.css">
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -1,216 +1,368 @@
|
|||
.login-page {
|
||||
position: relative;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
background: #ffffff;
|
||||
min-height: 100dvh;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(139, 92, 246, 0.12), transparent 34%),
|
||||
radial-gradient(circle at bottom right, rgba(59, 130, 246, 0.08), transparent 30%),
|
||||
linear-gradient(180deg, #f8fafc 0%, #eef2ff 52%, #f8fafc 100%);
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
color: #334155;
|
||||
}
|
||||
|
||||
/* Left Hero Section */
|
||||
.login-left {
|
||||
flex: 1.1;
|
||||
background: linear-gradient(140deg, #f0f5ff 0%, #eef5ff 40%, #f7fbff 100%);
|
||||
padding: 56px 64px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
.login-page-backdrop {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background:
|
||||
radial-gradient(circle at 20% 18%, rgba(196, 181, 253, 0.5), transparent 24%),
|
||||
radial-gradient(circle at 85% 80%, rgba(191, 219, 254, 0.42), transparent 22%),
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.4));
|
||||
}
|
||||
|
||||
.login-page-grid {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
z-index: 1;
|
||||
display: grid;
|
||||
min-height: 100vh;
|
||||
min-height: 100dvh;
|
||||
grid-template-columns: minmax(0, 980px);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding:
|
||||
max(28px, env(safe-area-inset-top))
|
||||
clamp(24px, 4vw, 56px)
|
||||
max(28px, env(safe-area-inset-bottom));
|
||||
}
|
||||
|
||||
.login-panel {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.login-panel-card {
|
||||
width: 100%;
|
||||
max-width: 980px;
|
||||
padding: 18px;
|
||||
border-radius: 32px;
|
||||
background: rgba(255, 255, 255, 0.78);
|
||||
border: 1px solid rgba(226, 232, 240, 0.92);
|
||||
box-shadow: 0 24px 60px rgba(15, 23, 42, 0.08);
|
||||
backdrop-filter: blur(24px);
|
||||
}
|
||||
|
||||
.login-panel-layout {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) minmax(360px, 420px);
|
||||
gap: 18px;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.login-left {
|
||||
display: flex;
|
||||
min-height: 100%;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 36px;
|
||||
border-radius: 28px;
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(139, 92, 246, 0.14), transparent 34%),
|
||||
linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(248, 250, 252, 0.86));
|
||||
border: 1px solid rgba(226, 232, 240, 0.84);
|
||||
}
|
||||
|
||||
.login-brand {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
z-index: 1;
|
||||
gap: 18px;
|
||||
}
|
||||
|
||||
.brand-logo-wrap {
|
||||
display: flex;
|
||||
height: 68px;
|
||||
width: 68px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
border-radius: 22px;
|
||||
background: linear-gradient(135deg, #ede9fe, #ddd6fe);
|
||||
border: 1px solid rgba(139, 92, 246, 0.12);
|
||||
box-shadow: 0 18px 40px rgba(139, 92, 246, 0.12);
|
||||
}
|
||||
|
||||
.brand-logo-img {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
filter: drop-shadow(0 8px 16px rgba(45, 107, 255, 0.24));
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.brand-copy {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.brand-kicker {
|
||||
margin: 0 0 8px;
|
||||
font-size: 0.78rem;
|
||||
letter-spacing: 0.24em;
|
||||
text-transform: uppercase;
|
||||
color: #8b5cf6;
|
||||
}
|
||||
|
||||
.brand-name {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
color: #2f3a4f;
|
||||
letter-spacing: -0.2px;
|
||||
}
|
||||
|
||||
.login-hero {
|
||||
margin-top: -40px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-size: 42px;
|
||||
display: block;
|
||||
margin: 0;
|
||||
font-size: clamp(1.7rem, 2.4vw, 2.45rem);
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
color: #1d2b3a;
|
||||
margin-bottom: 24px;
|
||||
letter-spacing: -0.5px;
|
||||
text-wrap: balance;
|
||||
line-height: 1.08;
|
||||
color: #0f172a;
|
||||
}
|
||||
|
||||
.hero-accent {
|
||||
color: #1677ff;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.hero-desc {
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
color: #687489;
|
||||
max-width: 440px;
|
||||
}
|
||||
|
||||
.login-left-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
color: #8c97a8;
|
||||
font-size: 13px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.footer-divider {
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
background: #c4ccd7;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
/* Right Form Section */
|
||||
.login-right {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 40px;
|
||||
background: #ffffff;
|
||||
padding: 34px 32px;
|
||||
border-radius: 28px;
|
||||
background: rgba(255, 255, 255, 0.94);
|
||||
border: 1px solid rgba(226, 232, 240, 0.82);
|
||||
}
|
||||
|
||||
.login-container {
|
||||
width: 100%;
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
.login-header {
|
||||
margin-bottom: 40px;
|
||||
margin-bottom: 28px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.login-header h2 {
|
||||
font-size: 28px !important;
|
||||
font-weight: 700 !important;
|
||||
color: #1f2a37 !important;
|
||||
margin-bottom: 8px !important;
|
||||
letter-spacing: -0.5px;
|
||||
.login-panel-eyebrow {
|
||||
margin: 0 0 10px;
|
||||
color: #7c3aed;
|
||||
font-size: clamp(1.4rem, 1.5vw, 1.75rem);
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.login-header span {
|
||||
font-size: 15px;
|
||||
color: #6b7280;
|
||||
.login-header .ant-typography {
|
||||
margin: 0;
|
||||
color: #475569;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.login-form .ant-form-item {
|
||||
margin-bottom: 20px;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.login-form .ant-input-affix-wrapper-lg,
|
||||
.login-form .ant-input-lg {
|
||||
min-height: 54px;
|
||||
border: 1px solid rgba(148, 163, 184, 0.45);
|
||||
border-radius: 16px;
|
||||
background: rgba(255, 255, 255, 0.96);
|
||||
font-size: 1rem;
|
||||
color: #0f172a;
|
||||
transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
|
||||
}
|
||||
|
||||
.login-form .ant-input-affix-wrapper-lg {
|
||||
padding: 10px 16px;
|
||||
border-radius: 8px;
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
.login-form .ant-input-prefix {
|
||||
margin-right: 12px;
|
||||
color: #94a3b8;
|
||||
}
|
||||
|
||||
.login-form .ant-input-affix-wrapper-focused,
|
||||
.login-form .ant-input-affix-wrapper:focus-within,
|
||||
.login-form .ant-input-lg:focus,
|
||||
.login-form .ant-input-lg:focus-within {
|
||||
border-color: rgba(124, 58, 237, 0.48);
|
||||
box-shadow: 0 0 0 4px rgba(139, 92, 246, 0.12);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.captcha-wrapper {
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) 132px;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.captcha-wrapper .ant-input-affix-wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.captcha-image-btn {
|
||||
padding: 0;
|
||||
width: 120px;
|
||||
height: 46px;
|
||||
flex-shrink: 0;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
display: inline-flex;
|
||||
min-height: 52px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #f9fafb;
|
||||
overflow: hidden;
|
||||
border: 1px solid rgba(148, 163, 184, 0.45);
|
||||
border-radius: 16px;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
width: 132px;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.captcha-image-btn:hover,
|
||||
.captcha-image-btn:focus {
|
||||
border-color: rgba(124, 58, 237, 0.4) !important;
|
||||
background: #ffffff !important;
|
||||
}
|
||||
|
||||
.captcha-image-btn img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
|
||||
.captcha-image-btn:hover img {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.login-extra {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: -4px;
|
||||
margin-bottom: 24px;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
margin-bottom: 22px;
|
||||
color: #475569;
|
||||
font-size: 0.92rem;
|
||||
}
|
||||
|
||||
.forgot-password {
|
||||
font-size: 14px;
|
||||
color: #1677ff;
|
||||
.login-extra .ant-checkbox-wrapper {
|
||||
color: #475569;
|
||||
}
|
||||
|
||||
.login-submit-btn {
|
||||
height: 48px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
border-radius: 8px;
|
||||
min-height: 54px;
|
||||
border: 0;
|
||||
border-radius: 18px;
|
||||
background: linear-gradient(135deg, #7c3aed, #4f46e5) !important;
|
||||
box-shadow: 0 16px 32px rgba(124, 58, 237, 0.2);
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
transition: transform 0.18s ease, box-shadow 0.18s ease, opacity 0.18s ease;
|
||||
}
|
||||
|
||||
.login-footer {
|
||||
margin-top: 32px;
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
background: #f9fafb;
|
||||
border-radius: 12px;
|
||||
.login-submit-btn:hover:not(:disabled) {
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 20px 38px rgba(124, 58, 237, 0.24);
|
||||
}
|
||||
|
||||
.tabular-nums {
|
||||
font-variant-numeric: tabular-nums;
|
||||
.login-submit-btn:disabled,
|
||||
.captcha-image-btn:disabled {
|
||||
opacity: 0.7;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 1024px) {
|
||||
.login-left {
|
||||
padding: 48px;
|
||||
.login-page-grid {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
gap: 0;
|
||||
justify-items: center;
|
||||
padding:
|
||||
max(20px, env(safe-area-inset-top))
|
||||
20px
|
||||
max(24px, calc(20px + env(safe-area-inset-bottom)));
|
||||
}
|
||||
|
||||
.login-panel-card {
|
||||
margin: 0 auto;
|
||||
max-width: 460px;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
backdrop-filter: none;
|
||||
}
|
||||
|
||||
.login-panel-layout {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
gap: 0;
|
||||
}
|
||||
.hero-title {
|
||||
font-size: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.login-left {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.login-right {
|
||||
background: #f3f4f6;
|
||||
}
|
||||
.login-container {
|
||||
background: #ffffff;
|
||||
padding: 48px 32px;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
||||
padding: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.login-right {
|
||||
padding: 20px;
|
||||
@media (max-width: 640px) {
|
||||
.login-page-grid {
|
||||
padding:
|
||||
max(16px, env(safe-area-inset-top))
|
||||
16px
|
||||
max(20px, calc(16px + env(safe-area-inset-bottom)));
|
||||
}
|
||||
.login-container {
|
||||
padding: 32px 20px;
|
||||
|
||||
.login-panel-card {
|
||||
max-width: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.login-right {
|
||||
padding: 20px 16px;
|
||||
border-radius: 24px;
|
||||
}
|
||||
|
||||
.login-header {
|
||||
margin-bottom: 22px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.login-panel-eyebrow {
|
||||
font-size: 1.25rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.login-form .ant-form-item {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.login-form .ant-input-affix-wrapper-lg,
|
||||
.login-form .ant-input-lg {
|
||||
min-height: 50px;
|
||||
border-radius: 14px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.captcha-wrapper {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.captcha-image-btn {
|
||||
width: 100%;
|
||||
min-height: 50px;
|
||||
border-radius: 14px;
|
||||
}
|
||||
|
||||
.login-extra {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.login-submit-btn {
|
||||
min-height: 52px;
|
||||
border-radius: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
.login-page-grid {
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
.login-right {
|
||||
padding-left: 14px;
|
||||
padding-right: 14px;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { fetchCaptcha, login, type CaptchaResponse } from "@/api/auth";
|
|||
import type { SysPlatformConfig } from "@/types";
|
||||
import "./index.less";
|
||||
|
||||
const { Title, Text, Link } = Typography;
|
||||
const { Text } = Typography;
|
||||
|
||||
type LoginFormValues = {
|
||||
username: string;
|
||||
|
|
@ -110,125 +110,93 @@ export default function Login() {
|
|||
}
|
||||
: {};
|
||||
|
||||
const leftStyle = platformConfig?.loginBgUrl
|
||||
? {
|
||||
...loginStyle,
|
||||
background: "rgba(255, 255, 255, 0.2)",
|
||||
backdropFilter: "blur(10px)"
|
||||
}
|
||||
: {};
|
||||
|
||||
const rightStyle = platformConfig?.loginBgUrl
|
||||
? {
|
||||
background: "rgba(255, 255, 255, 0.85)",
|
||||
backdropFilter: "blur(20px)"
|
||||
}
|
||||
: {};
|
||||
|
||||
return (
|
||||
<div className="login-page" style={loginStyle}>
|
||||
<div className="login-left" style={leftStyle}>
|
||||
<div className="login-brand">
|
||||
<img src={platformConfig?.logoUrl || "/logo.svg"} alt="Logo" className="brand-logo-img" />
|
||||
<span className="brand-name">{platformConfig?.projectName || "UnisBase"}</span>
|
||||
</div>
|
||||
|
||||
<div className="login-hero">
|
||||
<h1 className="hero-title">
|
||||
{t("login.heroTitle1")}
|
||||
<br />
|
||||
<span className="hero-accent">{t("login.heroTitle2")}</span>
|
||||
<br />
|
||||
{t("login.heroTitle3")}
|
||||
</h1>
|
||||
<p className="hero-desc">{platformConfig?.systemDescription || t("login.heroDesc")}</p>
|
||||
</div>
|
||||
|
||||
<div className="login-left-footer">
|
||||
<div className="footer-item">{t("login.enterpriseSecurity")}</div>
|
||||
<div className="footer-divider" aria-hidden="true" />
|
||||
<div className="footer-item">{t("login.multiLang")}</div>
|
||||
{platformConfig?.icpInfo ? (
|
||||
<>
|
||||
<div className="footer-divider" aria-hidden="true" />
|
||||
<div className="footer-item">{platformConfig.icpInfo}</div>
|
||||
</>
|
||||
) : null}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="login-right" style={rightStyle}>
|
||||
<div className="login-container">
|
||||
<div className="login-header">
|
||||
<Title level={2}>{t("login.welcome")}</Title>
|
||||
<Text type="secondary">{t("login.subtitle")}</Text>
|
||||
</div>
|
||||
|
||||
<Form form={form} layout="vertical" onFinish={onFinish} className="login-form" requiredMark={false} autoComplete="off">
|
||||
<Form.Item name="username" rules={[{ required: true, message: t("login.username") }]}>
|
||||
<Input
|
||||
size="large"
|
||||
prefix={<UserOutlined className="text-gray-400" aria-hidden="true" />}
|
||||
placeholder={t("login.username")}
|
||||
autoComplete="username"
|
||||
spellCheck={false}
|
||||
aria-label={t("login.username")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item name="password" rules={[{ required: true, message: t("login.password") }]}>
|
||||
<Input.Password
|
||||
size="large"
|
||||
prefix={<LockOutlined className="text-gray-400" aria-hidden="true" />}
|
||||
placeholder={t("login.password")}
|
||||
autoComplete="current-password"
|
||||
aria-label={t("login.password")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
{captchaEnabled ? (
|
||||
<Form.Item name="captchaCode" rules={[{ required: true, message: t("login.captcha") }]}>
|
||||
<div className="captcha-wrapper">
|
||||
<Input
|
||||
size="large"
|
||||
prefix={<SafetyOutlined className="text-gray-400" aria-hidden="true" />}
|
||||
placeholder={t("login.captcha")}
|
||||
maxLength={6}
|
||||
aria-label={t("login.captcha")}
|
||||
/>
|
||||
<Button
|
||||
className="captcha-image-btn"
|
||||
onClick={() => void loadCaptcha()}
|
||||
icon={!captcha ? <ReloadOutlined spin /> : null}
|
||||
aria-label="刷新验证码"
|
||||
>
|
||||
{captcha ? <img src={captcha.imageBase64} alt="验证码" /> : null}
|
||||
</Button>
|
||||
<div className="login-page-backdrop" />
|
||||
<div className="login-page-grid">
|
||||
<section className="login-panel">
|
||||
<div className="login-panel-card">
|
||||
<div className="login-panel-layout">
|
||||
<div className="login-left">
|
||||
<div className="login-brand">
|
||||
<div className="brand-logo-wrap">
|
||||
<img src={platformConfig?.logoUrl || "/logo.svg"} alt="Logo" className="brand-logo-img" />
|
||||
</div>
|
||||
<div className="brand-copy">
|
||||
<p className="brand-kicker">智慧销售协同平台</p>
|
||||
<span className="brand-name">{platformConfig?.projectName || "UnisBase"}</span>
|
||||
</div>
|
||||
</div>
|
||||
</Form.Item>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
<div className="login-extra">
|
||||
<Form.Item name="remember" valuePropName="checked" noStyle>
|
||||
<Checkbox>{t("login.rememberMe")}</Checkbox>
|
||||
</Form.Item>
|
||||
<Link className="forgot-password">{t("login.forgotPassword")}</Link>
|
||||
<div className="login-right">
|
||||
<div className="login-container">
|
||||
<div className="login-header">
|
||||
<p className="login-panel-eyebrow">{t("login.welcome")}</p>
|
||||
<Text type="secondary">{t("login.subtitle")}</Text>
|
||||
</div>
|
||||
|
||||
<Form form={form} layout="vertical" onFinish={onFinish} className="login-form" requiredMark={false} autoComplete="off">
|
||||
<Form.Item name="username" rules={[{ required: true, message: t("login.username") }]}>
|
||||
<Input
|
||||
size="large"
|
||||
prefix={<UserOutlined className="text-gray-400" aria-hidden="true" />}
|
||||
placeholder={t("login.username")}
|
||||
autoComplete="username"
|
||||
spellCheck={false}
|
||||
aria-label={t("login.username")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item name="password" rules={[{ required: true, message: t("login.password") }]}>
|
||||
<Input.Password
|
||||
size="large"
|
||||
prefix={<LockOutlined className="text-gray-400" aria-hidden="true" />}
|
||||
placeholder={t("login.password")}
|
||||
autoComplete="current-password"
|
||||
aria-label={t("login.password")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
{captchaEnabled ? (
|
||||
<Form.Item name="captchaCode" rules={[{ required: true, message: t("login.captcha") }]}>
|
||||
<div className="captcha-wrapper">
|
||||
<Input
|
||||
size="large"
|
||||
prefix={<SafetyOutlined className="text-gray-400" aria-hidden="true" />}
|
||||
placeholder={t("login.captcha")}
|
||||
maxLength={6}
|
||||
aria-label={t("login.captcha")}
|
||||
/>
|
||||
<Button
|
||||
className="captcha-image-btn"
|
||||
onClick={() => void loadCaptcha()}
|
||||
icon={!captcha ? <ReloadOutlined spin /> : null}
|
||||
aria-label="刷新验证码"
|
||||
>
|
||||
{captcha ? <img src={captcha.imageBase64} alt="验证码" /> : null}
|
||||
</Button>
|
||||
</div>
|
||||
</Form.Item>
|
||||
) : null}
|
||||
|
||||
<div className="login-extra">
|
||||
<Form.Item name="remember" valuePropName="checked" noStyle>
|
||||
<Checkbox>{t("login.rememberMe")}</Checkbox>
|
||||
</Form.Item>
|
||||
</div>
|
||||
|
||||
<Form.Item>
|
||||
<Button type="primary" htmlType="submit" loading={loading} block size="large" className="login-submit-btn">
|
||||
{loading ? t("login.loggingIn") : t("login.submit")}
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Form.Item>
|
||||
<Button type="primary" htmlType="submit" loading={loading} block size="large" className="login-submit-btn">
|
||||
{loading ? t("login.loggingIn") : t("login.submit")}
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
|
||||
<div className="login-footer">
|
||||
<Text type="secondary">
|
||||
{t("login.demoAccount")} <Text strong className="tabular-nums">admin</Text> / {t("login.password")}{" "}
|
||||
<Text strong className="tabular-nums">123456</Text>
|
||||
</Text>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||