no message

This commit is contained in:
kuaifan 2022-05-17 18:27:20 +08:00
parent a4a7939eae
commit 94e4054cd4
7 changed files with 435 additions and 366 deletions

View File

@ -58,8 +58,8 @@ export default {
{icon: '', name: 'setting', label: '设置'}, {icon: '', name: 'setting', label: '设置'},
], ],
[ [
{icon: '', name: 'addProject', label: '创建项目'},
{icon: '', name: 'addTask', label: '添加任务'}, {icon: '', name: 'addTask', label: '添加任务'},
{icon: '', name: 'addProject', label: '添加项目'},
] ]
], ],
}; };

View File

@ -549,6 +549,12 @@
setTimeout(() => { $A.modalWarning(config) }, millisecond); setTimeout(() => { $A.modalWarning(config) }, millisecond);
return; return;
} }
if (typeof config === "string" && config === "Network exception") {
return;
}
if ($A.isJson(config) && config.content === "Network exception") {
return;
}
$A.Modal.warning($A.modalConfig(config)); $A.Modal.warning($A.modalConfig(config));
}, },

View File

@ -10,16 +10,62 @@
<div v-else class="login-subtitle">{{$L('输入您的凭证以访问您的帐户。')}}</div> <div v-else class="login-subtitle">{{$L('输入您的凭证以访问您的帐户。')}}</div>
<div class="login-input"> <div class="login-input">
<Input v-if="isSoftware && cacheServerUrl" :value="$A.getDomain(cacheServerUrl)" prefix="ios-globe-outline" size="large" readonly clearable @on-clear="clearServerUrl"/> <Input
v-if="isSoftware && cacheServerUrl"
:value="$A.getDomain(cacheServerUrl)"
prefix="ios-globe-outline"
size="large"
readonly
clearable
@on-clear="clearServerUrl"/>
<Input v-model="email" prefix="ios-mail-outline" :placeholder="$L('输入您的电子邮件')" type="email" size="large" @on-enter="onLogin" @on-blur="onBlur" /> <Input
v-model="email"
prefix="ios-mail-outline"
:placeholder="$L('输入您的电子邮件')"
type="email"
size="large"
@on-enter="onLogin"
@on-blur="onBlur"
clearable/>
<Input v-model="password" prefix="ios-lock-outline" :placeholder="$L('输入您的密码')" type="password" size="large" @on-enter="onLogin" /> <Input
v-model="password"
prefix="ios-lock-outline"
:placeholder="$L('输入您的密码')"
type="password"
size="large"
@on-enter="onLogin"
clearable/>
<Input v-if="loginType=='reg'" v-model="password2" prefix="ios-lock-outline" :placeholder="$L('输入确认密码')" type="password" size="large" @on-enter="onLogin" /> <Input
<Input v-if="loginType=='reg' && needInvite" v-model="invite" class="login-code" :placeholder="$L('请输入注册邀请码')" type="text" size="large" @on-enter="onLogin"><span slot="prepend">&nbsp;{{$L('邀请码')}}&nbsp;</span></Input> v-if="loginType=='reg'"
v-model="password2"
prefix="ios-lock-outline"
:placeholder="$L('输入确认密码')"
type="password"
size="large"
@on-enter="onLogin"
clearable/>
<Input
v-if="loginType=='reg' && needInvite"
v-model="invite"
class="login-code"
:placeholder="$L('请输入注册邀请码')"
type="text"
size="large"
@on-enter="onLogin"
clearable><span slot="prepend">&nbsp;{{$L('邀请码')}}&nbsp;</span></Input>
<Input v-if="loginType=='login' && codeNeed" v-model="code" class="login-code" :placeholder="$L('输入图形验证码')" type="text" size="large" @on-enter="onLogin"> <Input
v-if="loginType=='login' && codeNeed"
v-model="code"
class="login-code"
:placeholder="$L('输入图形验证码')"
type="text"
size="large"
@on-enter="onLogin"
clearable>
<Icon type="ios-checkmark-circle-outline" class="login-icon" slot="prepend"></Icon> <Icon type="ios-checkmark-circle-outline" class="login-icon" slot="prepend"></Icon>
<div slot="append" class="login-code-end" @click="reCode"><img :src="codeUrl"/></div> <div slot="append" class="login-code-end" @click="reCode"><img :src="codeUrl"/></div>
</Input> </Input>

View File

@ -1,96 +1,94 @@
<template> <template>
<div class="project-panel" :class="[tabTypeActive]"> <div class="project-panel" :class="[tabTypeActive]">
<PageTitle :title="projectData.name"/> <PageTitle :title="projectData.name"/>
<div class="project-head"> <div class="project-titbox">
<div class="project-titbox"> <div class="project-title">
<div class="project-title"> <div class="project-back" @click="goBack">
<div class="project-back" @click="goBack"> <i class="taskfont">&#xe72d;</i>
<i class="taskfont">&#xe72d;</i>
</div>
<h1>{{projectData.name}}</h1>
<label v-if="projectData.top_at" class="top-text">{{$L('置顶')}}</label>
<div v-if="loading" class="project-load"><Loading/></div>
</div> </div>
<ul class="project-icons"> <h1>{{projectData.name}}</h1>
<li class="project-avatar" :class="{'cursor-default': projectData.owner_userid !== userId}" @click="projectDropdown('user')"> <label v-if="projectData.top_at" class="top-text">{{$L('置顶')}}</label>
<ul> <div v-if="loading" class="project-load"><Loading/></div>
<li>
<UserAvatar :userid="projectData.owner_userid" :size="36" :borderWitdh="2" :openDelay="0">
<p>{{$L('项目负责人')}}</p>
</UserAvatar>
<Badge v-if="(windowWidth <= 980 || projectData.cacheParameter.chat) && projectUser.length > 0" type="normal" :count="projectData.project_user.length"/>
</li>
<template v-if="!(windowWidth <= 980 || projectData.cacheParameter.chat) && projectUser.length > 0" v-for="item in projectUser">
<li v-if="item.userid === -1" class="more">
<ETooltip :disabled="!$isDesktop" :content="$L('共' + (projectData.project_user.length) + '个成员')">
<Icon type="ios-more"/>
</ETooltip>
</li>
<li v-else>
<UserAvatar :userid="item.userid" :size="36" :borderWitdh="2" :openDelay="0"/>
</li>
</template>
</ul>
</li>
<li class="project-icon" @click="addTaskOpen(0)">
<ETooltip :disabled="!$isDesktop" :content="$L('添加任务')">
<Icon class="menu-icon" type="md-add" />
</ETooltip>
</li>
<li :class="['project-icon', searchText!='' ? 'active' : '']">
<Tooltip :always="searchText!=''" @on-popper-show="searchFocus" theme="light" :rawIndex="10">
<Icon class="menu-icon" type="ios-search" @click="searchFocus" />
<div slot="content">
<Input v-model="searchText" ref="searchInput" :placeholder="$L('名称、描述...')" class="search-input" clearable/>
</div>
</Tooltip>
</li>
<li :class="['project-icon', projectData.cacheParameter.chat ? 'active' : '']" @click="toggleParameter('chat')">
<Icon class="menu-icon" type="ios-chatbubbles" />
<Badge class="menu-badge" :count="msgUnread"></Badge>
</li>
<li class="project-icon">
<EDropdown @command="projectDropdown" trigger="click" transfer>
<Icon class="menu-icon" type="ios-more" />
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
<EDropdownItem command="workflow">{{$L('工作流设置')}}</EDropdownItem>
<EDropdownItem command="user" divided>{{$L('成员管理')}}</EDropdownItem>
<EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem>
<EDropdownItem command="log" divided>{{$L('项目动态')}}</EDropdownItem>
<EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem>
<EDropdownItem command="deleted_task">{{$L('已删除任务')}}</EDropdownItem>
<EDropdownItem command="transfer" divided>{{$L('移交项目')}}</EDropdownItem>
<EDropdownItem command="archived">{{$L('归档项目')}}</EDropdownItem>
<EDropdownItem command="delete" style="color:#f40">{{$L('删除项目')}}</EDropdownItem>
</EDropdownMenu>
<EDropdownMenu v-else slot="dropdown">
<EDropdownItem command="log">{{$L('项目动态')}}</EDropdownItem>
<EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem>
<EDropdownItem command="deleted_task">{{$L('已删除任务')}}</EDropdownItem>
<EDropdownItem command="exit" divided style="color:#f40">{{$L('退出项目')}}</EDropdownItem>
</EDropdownMenu>
</EDropdown>
</li>
</ul>
</div> </div>
<div class="project-subbox clearfix"> <ul class="project-icons">
<div class="project-subtitle" @click="showDesc">{{projectData.desc}}</div> <li class="project-avatar" :class="{'cursor-default': projectData.owner_userid !== userId}" @click="projectDropdown('user')">
<div class="project-switch"> <ul>
<div v-if="completedCount > 0" class="project-checkbox"> <li>
<Checkbox :value="projectData.cacheParameter.completedTask" @on-change="toggleCompleted">{{$L('显示已完成')}}</Checkbox> <UserAvatar :userid="projectData.owner_userid" :size="36" :borderWitdh="2" :openDelay="0">
</div> <p>{{$L('项目负责人')}}</p>
<div v-if="flowList.length > 0" class="project-select"> </UserAvatar>
<Cascader :data="flowData" @on-change="flowChange" transfer-class-name="project-panel-flow-cascader" transfer> <Badge v-if="(windowWidth <= 980 || projectData.cacheParameter.chat) && projectUser.length > 0" type="normal" :count="projectData.project_user.length"/>
<span :class="`project-flow ${flowInfo.status}`">{{ flowTitle }}</span> </li>
</Cascader> <template v-if="!(windowWidth <= 980 || projectData.cacheParameter.chat) && projectUser.length > 0" v-for="item in projectUser">
</div> <li v-if="item.userid === -1" class="more">
<div class="project-switch-button"> <ETooltip :disabled="!$isDesktop" :content="$L('共' + (projectData.project_user.length) + '个成员')">
<div class="slider" :style="tabTypeStyle"></div> <Icon type="ios-more"/>
<div @click="tabTypeChange('column')" :class="{ 'active': tabTypeActive === 'column'}"><i class="taskfont">&#xe60c;</i></div> </ETooltip>
<div @click="tabTypeChange('table')" :class="{ 'active': tabTypeActive === 'table'}"><i class="taskfont">&#xe66a;</i></div> </li>
<div @click="tabTypeChange('gantt')" :class="{ 'active': tabTypeActive === 'gantt'}"><i class="taskfont">&#xe797;</i></div> <li v-else>
</div> <UserAvatar :userid="item.userid" :size="36" :borderWitdh="2" :openDelay="0"/>
</li>
</template>
</ul>
</li>
<li class="project-icon" @click="addTaskOpen(0)">
<ETooltip :disabled="!$isDesktop" :content="$L('添加任务')">
<Icon class="menu-icon" type="md-add" />
</ETooltip>
</li>
<li :class="['project-icon', searchText!='' ? 'active' : '']">
<Tooltip :always="searchText!=''" @on-popper-show="searchFocus" theme="light" :rawIndex="10">
<Icon class="menu-icon" type="ios-search" @click="searchFocus" />
<div slot="content">
<Input v-model="searchText" ref="searchInput" :placeholder="$L('名称、描述...')" class="search-input" clearable/>
</div>
</Tooltip>
</li>
<li :class="['project-icon', projectData.cacheParameter.chat ? 'active' : '']" @click="toggleParameter('chat')">
<Icon class="menu-icon" type="ios-chatbubbles" />
<Badge class="menu-badge" :count="msgUnread"></Badge>
</li>
<li class="project-icon">
<EDropdown @command="projectDropdown" trigger="click" transfer>
<Icon class="menu-icon" type="ios-more" />
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
<EDropdownItem command="workflow">{{$L('工作流设置')}}</EDropdownItem>
<EDropdownItem command="user" divided>{{$L('成员管理')}}</EDropdownItem>
<EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem>
<EDropdownItem command="log" divided>{{$L('项目动态')}}</EDropdownItem>
<EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem>
<EDropdownItem command="deleted_task">{{$L('已删除任务')}}</EDropdownItem>
<EDropdownItem command="transfer" divided>{{$L('移交项目')}}</EDropdownItem>
<EDropdownItem command="archived">{{$L('归档项目')}}</EDropdownItem>
<EDropdownItem command="delete" style="color:#f40">{{$L('删除项目')}}</EDropdownItem>
</EDropdownMenu>
<EDropdownMenu v-else slot="dropdown">
<EDropdownItem command="log">{{$L('项目动态')}}</EDropdownItem>
<EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem>
<EDropdownItem command="deleted_task">{{$L('已删除任务')}}</EDropdownItem>
<EDropdownItem command="exit" divided style="color:#f40">{{$L('退出项目')}}</EDropdownItem>
</EDropdownMenu>
</EDropdown>
</li>
</ul>
</div>
<div class="project-subbox">
<div class="project-subtitle" @click="showDesc">{{projectData.desc}}</div>
<div class="project-switch">
<div v-if="completedCount > 0" class="project-checkbox">
<Checkbox :value="projectData.cacheParameter.completedTask" @on-change="toggleCompleted">{{$L('显示已完成')}}</Checkbox>
</div>
<div v-if="flowList.length > 0" class="project-select">
<Cascader :data="flowData" @on-change="flowChange" transfer-class-name="project-panel-flow-cascader" transfer>
<span :class="`project-flow ${flowInfo.status}`">{{ flowTitle }}</span>
</Cascader>
</div>
<div class="project-switch-button">
<div class="slider" :style="tabTypeStyle"></div>
<div @click="tabTypeChange('column')" :class="{ 'active': tabTypeActive === 'column'}"><i class="taskfont">&#xe60c;</i></div>
<div @click="tabTypeChange('table')" :class="{ 'active': tabTypeActive === 'table'}"><i class="taskfont">&#xe66a;</i></div>
<div @click="tabTypeChange('gantt')" :class="{ 'active': tabTypeActive === 'gantt'}"><i class="taskfont">&#xe797;</i></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -96,19 +96,17 @@ body.dark-mode-reverse {
} }
.project-panel { .project-panel {
.project-head { .project-titbox {
.project-titbox { .project-title {
.project-title { .top-text {
.top-text { color: #000000;
color: #000000;
}
} }
.project-icons { }
> li { .project-icons {
&.project-icon { > li {
&.active { &.project-icon {
color: #000000; &.active {
} color: #000000;
} }
} }
} }

View File

@ -1,244 +1,239 @@
.project-panel { .project-panel {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.project-head { .project-titbox {
display: flex; width: 100%;
flex-direction: column; padding: 32px 32px 4px;
align-items: flex-start; .project-title {
margin: 32px 32px 0; float: left;
.project-titbox {
width: 100%;
display: flex; display: flex;
align-items: flex-start; align-items: center;
justify-content: space-between; margin-bottom: 8px;
margin-bottom: 20px; .project-back {
.project-title { display: none;
}
> h1 {
color: #333333;
font-size: 28px;
font-weight: 600;
}
.project-load {
display: flex; display: flex;
align-items: center; align-items: center;
.project-back { margin-left: 18px;
display: none; .common-loading {
} width: 22px;
> h1 { height: 22px;
color: #333333;
font-size: 28px;
font-weight: 600;
}
.project-load {
display: flex;
align-items: center;
margin-left: 18px;
.common-loading {
width: 22px;
height: 22px;
}
}
.top-text {
height: 24px;
line-height: 24px;
border-radius:4px;
padding: 0 6px;
margin-top: 3px;
margin-left: 10px;
background-color: #8BCF70;
color:#FFFFFF;
text-align: center;
white-space: nowrap;
} }
} }
.project-icons { .top-text {
height: 24px;
line-height: 24px;
border-radius:4px;
padding: 0 6px;
margin-top: 3px;
margin-left: 10px;
background-color: #8BCF70;
color:#FFFFFF;
text-align: center;
white-space: nowrap;
}
}
.project-icons {
float: right;
display: flex;
align-items: center;
margin-top: 3px;
margin-bottom: 8px;
> li {
list-style: none;
display: flex; display: flex;
align-items: center; align-items: center;
flex-shrink: 0; justify-content: center;
margin-top: 3px; width: 36px;
> li { height: 36px;
list-style: none; border-radius: 50%;
display: flex; position: relative;
align-items: center; margin-left: 16px;
justify-content: center; cursor: pointer;
width: 36px; transition: box-shadow 0.3s;
height: 36px; &:hover {
border-radius: 50%; box-shadow: 0 0 6px #cccccc;
position: relative; }
margin-left: 16px; &.cursor-default {
cursor: pointer; cursor: default;
transition: box-shadow 0.3s; }
&.project-avatar {
width: auto;
min-width: 36px;
&:hover { &:hover {
box-shadow: 0 0 6px #cccccc; box-shadow: none;
} }
&.cursor-default { > ul {
cursor: default; display: flex;
} align-items: center;
&.project-avatar { > li {
width: auto; list-style: none;
min-width: 36px; margin-left: -6px;
&:hover { transition: transform 0.2s;
box-shadow: none; .ivu-badge {
} position: absolute;
> ul { top: -5px;
display: flex; left: 23px;
align-items: center; transform: scale(0.8);
> li { }
list-style: none; &:hover {
margin-left: -6px; transform: scale(1.05);
transition: transform 0.2s; }
.ivu-badge { &:first-child {
position: absolute; margin-left: 0;
top: -5px; }
left: 23px; &.more {
transform: scale(0.8); display: flex;
} align-items: center;
&:hover { justify-content: center;
transform: scale(1.05); font-size: 17px;
} width: 30px;
&:first-child { height: 32px;
margin-left: 0; color: #aaaaaa;
} background-color: transparent;
&.more { border-color: transparent;
display: flex; transform: scale(1) !important;
align-items: center; z-index: 1;
justify-content: center;
font-size: 17px;
width: 30px;
height: 32px;
color: #aaaaaa;
background-color: transparent;
border-color: transparent;
transform: scale(1) !important;
z-index: 1;
}
} }
} }
} }
&.project-icon { }
border-radius: 50%; &.project-icon {
background-color: #F2F3F5; border-radius: 50%;
.menu-icon { background-color: #F2F3F5;
font-size: 20px; .menu-icon {
width: 36px; font-size: 20px;
height: 36px; width: 36px;
line-height: 36px; height: 36px;
} line-height: 36px;
.menu-badge { }
position: absolute; .menu-badge {
top: -6px; position: absolute;
left: 20px; top: -6px;
transform: scale(0.8); left: 20px;
} transform: scale(0.8);
.search-input { }
margin: 2px 0; .search-input {
width: 170px; margin: 2px 0;
} width: 170px;
&.active { }
color: #ffffff; &.active {
background-color: $primary-color; color: #ffffff;
} background-color: $primary-color;
} }
} }
} }
} }
.project-subbox { }
width: 100%; .project-subbox {
.project-subtitle { width: 100%;
float: left; padding: 0 32px;
color: #999999; .project-subtitle {
line-height: 24px; float: left;
padding: 6px 0; color: #999999;
} line-height: 24px;
.project-switch { margin: 6px 0;
float: right; }
margin: 3px 0 3px 32px; .project-switch {
float: right;
margin: 3px 0 3px 32px;
display: flex;
align-items: flex-end;
.project-checkbox {
display: flex; display: flex;
align-items: flex-end; align-items: center;
.project-checkbox { margin-right: 14px;
opacity: 0.9;
height: 30px;
.ivu-checkbox-focus {
box-shadow: none;
}
}
.project-select {
display: flex;
align-items: center;
margin-right: 14px;
opacity: 0.9;
height: 30px;
.project-flow {
font-size: 13px;
height: 28px;
line-height: 26px;
padding: 0 8px;
border-radius: 4px;
background: #f7f7f7;
border: 1px solid #e8eaec;
display: flex; display: flex;
align-items: center; align-items: center;
margin-right: 14px; justify-content: center;
opacity: 0.9; cursor: pointer;
height: 30px; &.start {
.ivu-checkbox-focus { background-color: rgba($flow-status-start-color, 0.1);
box-shadow: none; border-color: rgba($flow-status-start-color, 0.1);
color: $flow-status-start-color;
}
&.progress {
background-color: rgba($flow-status-progress-color, 0.1);;
border-color: rgba($flow-status-progress-color, 0.1);;
color: $flow-status-progress-color;
}
&.test {
background-color: rgba($flow-status-test-color, 0.1);;
border-color: rgba($flow-status-test-color, 0.1);;
color: $flow-status-test-color;
}
&.end {
background-color: rgba($flow-status-end-color, 0.1);;
border-color: rgba($flow-status-end-color, 0.1);;
color: $flow-status-end-color;
} }
} }
.project-select { }
display: flex; .project-switch-button {
align-items: center; display: flex;
margin-right: 14px; align-items: center;
opacity: 0.9; background-color: #ffffff;
height: 30px; border-radius: 6px;
.project-flow { height: 30px;
font-size: 13px; position: relative;
height: 28px; transition: all 0.2s;
line-height: 26px; .active {
padding: 0 8px; color: $primary-color;
border-radius: 4px;
background: #f7f7f7;
border: 1px solid #e8eaec;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
&.start {
background-color: rgba($flow-status-start-color, 0.1);
border-color: rgba($flow-status-start-color, 0.1);
color: $flow-status-start-color;
}
&.progress {
background-color: rgba($flow-status-progress-color, 0.1);;
border-color: rgba($flow-status-progress-color, 0.1);;
color: $flow-status-progress-color;
}
&.test {
background-color: rgba($flow-status-test-color, 0.1);;
border-color: rgba($flow-status-test-color, 0.1);;
color: $flow-status-test-color;
}
&.end {
background-color: rgba($flow-status-end-color, 0.1);;
border-color: rgba($flow-status-end-color, 0.1);;
color: $flow-status-end-color;
}
}
} }
.project-switch-button { .slider {
display: flex; position: absolute;
align-items: center; top: 0;
background-color: #ffffff; left: 0;
width: 33.3%;
height: 100%;
z-index: 0;
color: $primary-color;
border-radius: 6px; border-radius: 6px;
border: 1px solid $primary-color;
background-color: rgba($primary-color, 0.1);
transition: left 0.2s;
}
&:hover {
box-shadow: 0 0 10px #e6ecfa;
}
> div {
z-index: 1;
width: 32px;
height: 30px; height: 30px;
position: relative; display: flex;
transition: all 0.2s; align-items: center;
.active { justify-content: center;
color: $primary-color; border-radius: 6px;
} cursor: pointer;
.slider { color: $primary-text-color;
position: absolute; > i {
top: 0; font-size: 17px;
left: 0;
width: 33.3%;
height: 100%;
z-index: 0;
color: $primary-color;
border-radius: 6px;
border: 1px solid $primary-color;
background-color: rgba($primary-color, 0.1);
transition: left 0.2s;
}
&:hover {
box-shadow: 0 0 10px #e6ecfa;
}
> div {
z-index: 1;
width: 32px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 6px;
cursor: pointer;
color: $primary-text-color;
> i {
font-size: 17px;
}
} }
} }
} }
@ -1026,50 +1021,48 @@
@media (max-width: 768px) { @media (max-width: 768px) {
.project-panel { .project-panel {
.project-head { .project-titbox {
margin: 12px 16px 0; position: sticky;
.project-titbox { top: 0;
display: block; z-index: 2;
margin-bottom: 16px; background-color: #fafafa;
.project-title { padding: 12px 16px 4px;
float: left; .project-title {
padding-bottom: 8px; float: left;
.project-back { .project-back {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-left: -16px; margin-left: -16px;
width: 52px; width: 52px;
> i { > i {
font-size: 26px; font-size: 26px;
}
}
> h1 {
font-size: 22px;
} }
} }
.project-icons { > h1 {
float: right; font-size: 22px;
margin-left: 24px;
margin-top: 4px;
justify-content: flex-end;
} }
} }
.project-subbox { .project-icons {
display: block; float: right;
.project-subtitle { margin-left: 24px;
margin-bottom: 6px; margin-top: 4px;
word-break: break-all; justify-content: flex-end;
text-overflow: ellipsis; }
overflow: hidden; }
display: -webkit-box; .project-subbox {
-webkit-line-clamp: 2; padding: 0 16px;
-webkit-box-orient: vertical; .project-subtitle {
} word-break: break-all;
.project-switch { text-overflow: ellipsis;
margin-left: 0; overflow: hidden;
justify-content: flex-end; display: -webkit-box;
} -webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.project-switch {
margin-left: 0;
justify-content: flex-end;
} }
} }
.project-column { .project-column {

View File

@ -63,12 +63,19 @@
.login-code { .login-code {
.ivu-input-group-prepend, .ivu-input-group-prepend,
.ivu-input-group-append { .ivu-input-group-append {
font-size: 14px; font-size: 16px;
background: transparent; background: transparent;
border-color: #f1f1f1; border-color: #f1f1f1;
> span {
font-size: 14px;
}
}
.ivu-input-group-prepend {
padding-right: 0;
} }
.ivu-input { .ivu-input {
border-left-color: transparent; border-left-color: transparent;
box-shadow: none;
} }
.login-code-end { .login-code-end {
margin: -6px -7px; margin: -6px -7px;
@ -187,10 +194,31 @@
width: 44px; width: 44px;
} }
.ivu-input-wrapper-large .ivu-input-prefix i, .ivu-input-wrapper-large {
.ivu-input-wrapper-large .ivu-input-suffix i { .ivu-input-prefix i,
font-size: 20px; .ivu-input-suffix i {
line-height: 44px; font-size: 20px;
line-height: 44px;
}
.ivu-input-icon {
height: 44px;
line-height: 44px;
}
}
.login-code {
.ivu-input-group-prepend,
.ivu-input-group-append {
font-size: 18px;
background: #ffffff;
.login-code-end {
height: 42px;
}
}
.ivu-input-group-prepend {
padding-left: 12px;
padding-right: 2px;
}
} }
} }
} }