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: 'addProject', label: '创建项目'},
{icon: '', name: 'addTask', label: '添加任务'},
{icon: '', name: 'addProject', label: '添加项目'},
]
],
};

View File

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

View File

@ -10,16 +10,62 @@
<div v-else class="login-subtitle">{{$L('输入您的凭证以访问您的帐户。')}}</div>
<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 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>
<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>
<div slot="append" class="login-code-end" @click="reCode"><img :src="codeUrl"/></div>
</Input>

View File

@ -1,96 +1,94 @@
<template>
<div class="project-panel" :class="[tabTypeActive]">
<PageTitle :title="projectData.name"/>
<div class="project-head">
<div class="project-titbox">
<div class="project-title">
<div class="project-back" @click="goBack">
<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 class="project-titbox">
<div class="project-title">
<div class="project-back" @click="goBack">
<i class="taskfont">&#xe72d;</i>
</div>
<ul class="project-icons">
<li class="project-avatar" :class="{'cursor-default': projectData.owner_userid !== userId}" @click="projectDropdown('user')">
<ul>
<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>
<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 class="project-subbox clearfix">
<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>
<ul class="project-icons">
<li class="project-avatar" :class="{'cursor-default': projectData.owner_userid !== userId}" @click="projectDropdown('user')">
<ul>
<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 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>

View File

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

View File

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

View File

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