Files
tms-erp-web/src/styles/login.scss
T
gxwebsoft f7eea88945 feat(login): 更换登录验证码为图形字符验证码
- 配置文件 website.js 中将 captchaType 从 'behavior' 改为 'image'
- 修改 userlogin.vue,图形验证码图片由输入框内联改为输入框旁独立显示
- 重写 login.scss 样式,实现验证码图片区域带边框和高亮效果
- 确保验证码图片点击可刷新,且支持从后端接口获取数据
- 登录页仍默认显示 IAM 登录,需切换「账号密码登录」显示验证码区域

feat(contract-manage): 优化所属组织搜索栏为树形下拉选择框

- 引入并应用 organization-search mixin 统一管理所属组织搜索
- contract-manage.js、driver.js、transport-ship.js、transport-vehicle.js 中所属组织搜索改为 searchslot 模式
- contract-manage.vue 中新增 renderOrganizationSearch 方法,渲染基于 ElTreeSelect 的树形下拉组件
- 组织树数据加载时自动排除「外部组织」节点,保持搜索选项清晰
- 所有相关所属组织搜索统一样式与交互,提升用户体验

feat(system): 用户和部门视图样式及操作改进

- user.vue 和 userinfo.vue 中 el-tabs 组件添加 border-card 类型,提升标签页视觉效果
- dept.vue 中添加查看、编辑、删除操作入口,绑定对应方法,通过权限控制显示权限按钮
- dept.vue 菜单宽度、对话框宽度及行为配置优化

style(login): 调整登录样式及验证码布局细节

- 调整 .login-code-wrap 及内部元素的 flex 布局,输入框与验证码图片并排显示
- 设置验证码图片容器尺寸、边框及 hover 高亮样式
- 确保验证码图片撑满容器并禁止用户选中

refactor(mixins): 新增 organization-search 统一搜索 mixin

- 实现组织树数据加载、排除外部节点、归一化及扁平化处理
- 提供 renderOrganizationSearch 方法用于渲染统一树形选择搜索框
- 减少重复代码,方便各页面快速接入和统一维护

chore(vehicle): 车辆页面引入 organization-search mixin

- 在车辆视图 vehicle.vue 中混入 organization-search,增强所属组织搜索功能一致性
2026-08-28 15:41:01 +08:00

171 lines
2.9 KiB
SCSS

.login-container {
position: relative;
display: flex;
align-items: center;
width: 100%;
height: 100%;
background-image: url('/img/运输登录.jpg');
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
overflow: hidden;
&::before {
// content:' ';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin-left: -48%;
background-image: url('/img/运输登录.jpg');
background-position: 100%;
background-repeat: no-repeat;
background-size: auto 100%;
}
}
.login-weaper {
margin: 0 auto;
width: 100%;
display: flex;
justify-content: flex-end;
}
.login-border {
position: relative;
min-height: 500px;
align-items: center;
display: flex;
}
.login-time {
position: absolute;
left: 25px;
top: 25px;
width: 100%;
color: #fff;
font-weight: 200;
opacity: 0.9;
font-size: 18px;
overflow: hidden;
font-weight: bold;
}
.login-border {
border-left: none;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
color: #fff;
width: 50%;
box-sizing: border-box;
}
.login-main {
margin: 0 auto;
padding: 30px 50px;
width: 70%;
//box-shadow: -4px 5px 10px rgba(255, 255, 255, 0.4);
box-sizing: border-box;
background: white;
}
.login-main > h3 {
margin-bottom: 20px;
}
.login-title {
color: #000;
margin-bottom: 50px;
font-weight: bold;
font-size: 28px;
text-align: center;
letter-spacing: 4px;
}
.login-menu {
margin-top: 40px;
width: 100%;
text-align: center;
a {
color: #999;
font-size: 12px;
margin: 0px 8px;
}
}
.login-submit {
width: 100%;
height: 45px;
font-size: 18px;
letter-spacing: 2px;
font-weight: 300;
cursor: pointer;
margin-top: 30px;
transition: 0.25s;
background-color: #2c77f1;
}
.register-submit {
width: 100%;
height: 45px;
font-size: 18px;
letter-spacing: 2px;
font-weight: 300;
cursor: pointer;
margin-top: 30px;
margin-left: 0 !important;
transition: 0.25s;
}
.login-form {
margin: 10px 0;
i {
color: #333;
}
.el-input {
input {
text-indent: 5px;
}
.el-input__wrapper {
padding: 5px 10px;
border-radius: 0;
}
.el-input__suffix,
.el-input__prefix {
display: flex;
align-items: center;
text-align: center;
}
.el-input__prefix {
margin-left: 8px;
}
}
}
.login-code {
width: 100%;
}
.login-code-wrap {
display: flex;
align-items: stretch;
width: 100%;
gap: 10px;
.el-input {
flex: 1;
}
}
.login-code-box {
width: 130px;
height: 38px;
flex: none;
border: 1px solid #dcdfe6;
border-radius: 4px;
overflow: hidden;
cursor: pointer;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
transition: border-color 0.2s;
&:hover {
border-color: #409eff;
}
}
.login-code-img {
width: 100%;
height: 100%;
object-fit: fill;
display: block;
user-select: none;
}